Merge "Move relavant pcbs to 'circuit boards'"
diff --git a/BUILD b/BUILD
index 8b45953..9368a1f 100644
--- a/BUILD
+++ b/BUILD
@@ -28,6 +28,10 @@
 # gazelle:resolve go github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_all_matches //scouting/webserver/requests/messages:request_all_matches_go_fbs
 # gazelle:resolve go github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/refresh_match_list //scouting/webserver/requests/messages:refresh_match_list_go_fbs
 # gazelle:resolve go github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/refresh_match_list_response //scouting/webserver/requests/messages:refresh_match_list_response_go_fbs
+# gazelle:resolve go github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_shift_schedule //scouting/webserver/requests/messages:request_shift_schedule_go_fbs
+# gazelle:resolve go github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_shift_schedule_response //scouting/webserver/requests/messages:request_shift_schedule_response_go_fbs
+# gazelle:resolve go github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_shift_schedule //scouting/webserver/requests/messages:submit_shift_schedule_go_fbs
+# gazelle:resolve go github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_shift_schedule_response //scouting/webserver/requests/messages:submit_shift_schedule_response_go_fbs
 
 gazelle(
     name = "gazelle",
diff --git a/WORKSPACE b/WORKSPACE
index 6afd00c..16b62ef 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -834,14 +834,23 @@
     urls = ["https://github.com/bazelbuild/rules_webtesting/releases/download/0.3.5/rules_webtesting.tar.gz"],
 )
 
+http_archive(
+    name = "rules_rust_tinyjson",
+    build_file = "@rules_rust//util/process_wrapper:BUILD.tinyjson.bazel",
+    sha256 = "1a8304da9f9370f6a6f9020b7903b044aa9ce3470f300a1fba5bc77c78145a16",
+    strip_prefix = "tinyjson-2.3.0",
+    type = "tar.gz",
+    url = "https://crates.io/api/v1/crates/tinyjson/2.3.0/download",
+)
+
 local_repository(
     name = "rules_rust",
     path = "third_party/rules_rust",
 )
 
-load("@rules_rust//rust:repositories.bzl", "rust_toolchain_repository")
+load("@rules_rust//rust:repositories.bzl", "rust_repository_set")
 
-rust_toolchain_repository(
+rust_repository_set(
     name = "rust",
     allocator_library = "@//tools/rust:forward_allocator",
     edition = "2021",
@@ -851,8 +860,8 @@
         "armv7-unknown-linux-gnueabihf",
         "aarch64-unknown-linux-gnu",
     ],
+    register_toolchain = False,
     rustfmt_version = "1.62.0",
-    toolchain_name_prefix = "toolchain_for",
     version = "1.62.0",
 )
 
@@ -1028,6 +1037,14 @@
     url = "https://www.frc971.org/Build-Dependencies/MarkupSafe-1.1.1.tar.gz",
 )
 
+http_archive(
+    name = "python_yapf",
+    build_file = "@//debian:python_yapf.BUILD",
+    sha256 = "410ed0f592c898d75d73f7792aee6569bdbc0b57bc72b417c722c17f41f66b12",
+    strip_prefix = "yapf-0.32.0",
+    url = "https://github.com/google/yapf/archive/refs/tags/v0.32.0.tar.gz",
+)
+
 # //debian:lzma_amd64
 http_archive(
     name = "lzma_amd64",
diff --git a/aos/BUILD b/aos/BUILD
index 2bd0ec8..0b5dfa0 100644
--- a/aos/BUILD
+++ b/aos/BUILD
@@ -1,4 +1,7 @@
-load("@com_github_google_flatbuffers//:build_defs.bzl", "flatbuffer_cc_library", "flatbuffer_py_library", "flatbuffer_ts_library")
+load("@com_github_google_flatbuffers//:build_defs.bzl", "flatbuffer_cc_library", "flatbuffer_py_library", "flatbuffer_rust_library", "flatbuffer_ts_library")
+load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test")
+load("//aos:flatbuffers.bzl", "cc_static_flatbuffer")
+load("//tools/build_rules:autocxx.bzl", "autocxx_library")
 
 exports_files(["aos_dump_autocomplete.sh"])
 
@@ -175,6 +178,18 @@
     ],
 )
 
+autocxx_library(
+    name = "init_rs",
+    srcs = ["init.rs"],
+    crate_name = "aos_init",
+    libs = [
+        ":init",
+    ],
+    override_cc_toolchain = "@llvm_toolchain//:cc-clang-x86_64-linux",
+    target_compatible_with = ["//tools/platforms/rust:has_support"],
+    visibility = ["//visibility:public"],
+)
+
 cc_library(
     name = "realtime",
     srcs = [
@@ -199,6 +214,13 @@
     visibility = ["//visibility:public"],
 )
 
+cc_static_flatbuffer(
+    name = "configuration_schema",
+    function = "aos::ConfigurationSchema",
+    target = ":configuration_fbs_reflection_out",
+    visibility = ["//visibility:public"],
+)
+
 flatbuffer_ts_library(
     name = "configuration_ts_fbs",
     srcs = ["configuration.fbs"],
@@ -221,6 +243,14 @@
     visibility = ["//visibility:public"],
 )
 
+flatbuffer_rust_library(
+    name = "configuration_rust_fbs",
+    srcs = ["configuration.fbs"],
+    crate_name = "aos_configuration_fbs",
+    target_compatible_with = ["//tools/platforms/rust:has_support"],
+    visibility = ["//visibility:public"],
+)
+
 cc_library(
     name = "configuration",
     srcs = [
@@ -245,6 +275,51 @@
     ],
 )
 
+cc_library(
+    name = "configuration_for_rust",
+    srcs = [
+        "configuration_for_rust.cc",
+    ],
+    hdrs = [
+        "configuration_for_rust.h",
+    ],
+    deps = [
+        ":configuration",
+        ":for_rust",
+        "//third_party/cargo:cxx_cc",
+    ],
+)
+
+autocxx_library(
+    name = "configuration_rs",
+    srcs = ["configuration.rs"],
+    crate_name = "aos_configuration",
+    libs = [
+        ":configuration",
+        ":configuration_for_rust",
+        ":configuration_fbs",
+    ],
+    override_cc_toolchain = "@llvm_toolchain//:cc-clang-x86_64-linux",
+    target_compatible_with = ["//tools/platforms/rust:has_support"],
+    visibility = ["//visibility:public"],
+    deps = [
+        ":configuration_rust_fbs",
+        ":flatbuffers_rs",
+        "//third_party/cargo:thiserror",
+    ],
+)
+
+rust_test(
+    name = "configuration_rs_test",
+    crate = ":configuration_rs",
+    data = [
+        "//aos/testdata:test_configs",
+    ],
+    # TODO: Make Rust play happy with pic vs nopic. Details at:
+    # https://github.com/bazelbuild/rules_rust/issues/118
+    rustc_flags = ["-Crelocation-model=static"],
+)
+
 flatbuffer_ts_library(
     name = "json_to_flatbuffer_fbs_ts",
     srcs = ["json_to_flatbuffer.fbs"],
@@ -260,6 +335,14 @@
     visibility = ["//aos:__subpackages__"],
 )
 
+flatbuffer_rust_library(
+    name = "json_to_flatbuffer_rust_fbs",
+    srcs = ["json_to_flatbuffer.fbs"],
+    crate_name = "aos_json_to_flatbuffer_fbs",
+    target_compatible_with = ["//tools/platforms/rust:has_support"],
+    visibility = ["//aos:__subpackages__"],
+)
+
 cc_library(
     name = "flatbuffer_utils",
     srcs = ["flatbuffer_utils.cc"],
@@ -278,6 +361,7 @@
     hdrs = ["json_tokenizer.h"],
     target_compatible_with = ["@platforms//os:linux"],
     deps = [
+        "@com_github_google_flatbuffers//:flatbuffers",
         "@com_github_google_glog//:glog",
         "@com_google_absl//absl/strings",
     ],
@@ -389,6 +473,25 @@
     ],
 )
 
+rust_library(
+    name = "flatbuffers_rs",
+    srcs = ["flatbuffers.rs"],
+    crate_name = "aos_flatbuffers",
+    target_compatible_with = ["//tools/platforms/rust:has_support"],
+    visibility = ["//visibility:public"],
+    deps = [
+        "@com_github_google_flatbuffers//rust",
+    ],
+)
+
+rust_test(
+    name = "flatbuffers_rs_test",
+    crate = ":flatbuffers_rs",
+    deps = [
+        ":json_to_flatbuffer_rust_fbs",
+    ],
+)
+
 cc_test(
     name = "configuration_test",
     srcs = [
@@ -575,6 +678,7 @@
     target_compatible_with = ["@platforms//os:linux"],
     visibility = ["//visibility:public"],
     deps = [
+        ":thread_local",
         "@com_github_gflags_gflags//:gflags",
         "@com_github_google_flatbuffers//:flatbuffers",
         "@com_github_google_glog//:glog",
@@ -592,6 +696,30 @@
     ],
 )
 
+cc_library(
+    name = "uuid_for_rust",
+    hdrs = ["uuid_for_rust.h"],
+    deps = [
+        ":uuid",
+    ],
+)
+
+autocxx_library(
+    name = "uuid_rs",
+    srcs = ["uuid.rs"],
+    crate_name = "aos_uuid",
+    libs = [
+        ":uuid",
+        ":uuid_for_rust",
+    ],
+    override_cc_toolchain = "@llvm_toolchain//:cc-clang-x86_64-linux",
+    rs_deps = [
+        "//third_party/cargo:uuid",
+    ],
+    target_compatible_with = ["//tools/platforms/rust:has_support"],
+    visibility = ["//visibility:public"],
+)
+
 cc_binary(
     name = "aos_graph_channels",
     srcs = [
@@ -609,3 +737,14 @@
         "@com_github_google_glog//:glog",
     ],
 )
+
+cc_library(
+    name = "for_rust",
+    hdrs = [
+        "for_rust.h",
+    ],
+    visibility = ["//visibility:public"],
+    deps = [
+        "//third_party/cargo:cxx_cc",
+    ],
+)
diff --git a/aos/aos_cli_utils.cc b/aos/aos_cli_utils.cc
index 970797a..dbd1bcd 100644
--- a/aos/aos_cli_utils.cc
+++ b/aos/aos_cli_utils.cc
@@ -6,7 +6,7 @@
 
 #include <iostream>
 
-DEFINE_string(config, "./aos_config.json", "File path of aos configuration");
+DEFINE_string(config, "aos_config.json", "File path of aos configuration");
 
 DEFINE_bool(
     _bash_autocomplete, false,
@@ -33,7 +33,7 @@
 bool CliUtilInfo::Initialize(
     int *argc, char ***argv,
     std::function<bool(const aos::Channel *)> channel_filter,
-    bool expect_args) {
+    std::string_view channel_filter_description, bool expect_args) {
   // Don't generate failure output if the config doesn't exist while attempting
   // to autocomplete.
   if (FLAGS__bash_autocomplete &&
@@ -87,12 +87,10 @@
     std::vector<const aos::Channel *> found_channels_now;
     bool found_exact = false;
     for (const aos::Channel *channel : *channels) {
-      if (!FLAGS_all && !channel_filter(channel)) {
-        continue;
-      }
       if (channel->name()->c_str() != channel_name) {
         continue;
       }
+
       if (channel->type()->string_view() == message_type) {
         if (!found_exact) {
           found_channels_now.clear();
@@ -103,6 +101,14 @@
       } else {
         continue;
       }
+
+      if (!FLAGS_all && !channel_filter(channel)) {
+        LOG(FATAL) << "matched channel does not pass the channel filter: \""
+                   << channel_filter_description
+                   << "\" [matched channel info]: "
+                   << configuration::CleanedChannelToString(channel);
+      }
+
       found_channels_now.push_back(channel);
     }
 
diff --git a/aos/aos_cli_utils.h b/aos/aos_cli_utils.h
index 962e0a0..a2d8c62 100644
--- a/aos/aos_cli_utils.h
+++ b/aos/aos_cli_utils.h
@@ -14,6 +14,7 @@
   // event_loop will be filled out before channel_filter is called.
   bool Initialize(int *argc, char ***argv,
                   std::function<bool(const aos::Channel *)> channel_filter,
+                  std::string_view channel_filter_description,
                   bool expect_args);
 
   std::optional<aos::FlatbufferDetachedBuffer<aos::Configuration>> config;
diff --git a/aos/aos_dump.cc b/aos/aos_dump.cc
index a13ad9a..2fe4955 100644
--- a/aos/aos_dump.cc
+++ b/aos/aos_dump.cc
@@ -83,7 +83,7 @@
             return aos::configuration::ChannelIsReadableOnNode(
                 channel, cli_info.event_loop->node());
           },
-          true)) {
+          "channel is readeable on node", true)) {
     return 0;
   }
 
diff --git a/aos/aos_graph_nodes.cc b/aos/aos_graph_nodes.cc
index 9c78c76..5b6fbe0 100644
--- a/aos/aos_graph_nodes.cc
+++ b/aos/aos_graph_nodes.cc
@@ -10,7 +10,7 @@
 DEFINE_bool(all, false,
             "If true, print out the channels for all nodes in the config file, "
             "not just the channels which are visible on this node.");
-DEFINE_string(config, "./aos_config.json", "File path of aos configuration");
+DEFINE_string(config, "aos_config.json", "File path of aos configuration");
 DEFINE_bool(short_types, true,
             "Whether to show a shortened version of the type name");
 
diff --git a/aos/aos_send.cc b/aos/aos_send.cc
index adfd780..b8cc9eb 100644
--- a/aos/aos_send.cc
+++ b/aos/aos_send.cc
@@ -1,3 +1,4 @@
+#include <poll.h>
 #include <unistd.h>
 
 #include <iostream>
@@ -17,7 +18,8 @@
       "Typical Usage: aos_send [--config path_to_config.json]"
       " channel_name message_type '{\"foo\": \"bar\"}'\n"
       "Example usage: aos_send /test aos.examples.Ping "
-      "'{\"value\": 1}'");
+      "'{\"value\": 1}'\n"
+      "Pipe usage: cat ping.json | aos_send /test/ aos.examples.Ping -");
   aos::InitGoogle(&argc, &argv);
 
   aos::CliUtilInfo cli_info;
@@ -27,7 +29,7 @@
             return aos::configuration::ChannelIsSendableOnNode(
                 channel, cli_info.event_loop->node());
           },
-          false)) {
+          "channel is sendable on node", false)) {
     return 0;
   }
   if (cli_info.found_channels.size() > 1) {
@@ -38,14 +40,24 @@
     LOG(FATAL) << "Must specify a message to send";
   }
 
+  // Check if the user wants to use stdin (denoted by '-') or the argument
+  // present in argv for the message to send. CliUtilInfo will ensure the
+  // message data will be in argv[1]
+  std::string_view message_to_send{argv[1]};
+  std::string stdin_data;
+  if (message_to_send == "-") {
+    // Read in everything from stdin, blocks when there's no data on stdin
+    stdin_data = std::string(std::istreambuf_iterator(std::cin), {});
+    message_to_send = stdin_data;
+  }
+
   const aos::Channel *const channel = cli_info.found_channels[0];
   const std::unique_ptr<aos::RawSender> sender =
       cli_info.event_loop->MakeRawSender(channel);
   flatbuffers::FlatBufferBuilder fbb(sender->fbb_allocator()->size(),
                                      sender->fbb_allocator());
   fbb.ForceDefaults(true);
-  fbb.Finish(aos::JsonToFlatbuffer(std::string_view(argv[1]), channel->schema(),
-                                   &fbb));
+  fbb.Finish(aos::JsonToFlatbuffer(message_to_send, channel->schema(), &fbb));
 
   if (FLAGS_rate < 0) {
     sender->CheckOk(sender->Send(fbb.GetSize()));
diff --git a/aos/configuration.cc b/aos/configuration.cc
index db00ce7..d5ac2a1 100644
--- a/aos/configuration.cc
+++ b/aos/configuration.cc
@@ -29,6 +29,8 @@
 
 namespace aos {
 namespace {
+namespace chrono = std::chrono;
+
 bool EndsWith(std::string_view str, std::string_view end) {
   if (str.size() < end.size()) {
     return false;
@@ -358,6 +360,12 @@
                    << ", can only use [-a-zA-Z0-9_/]";
       }
 
+      CHECK_LT(QueueSize(&config.message(), c) + QueueScratchBufferSize(c),
+               std::numeric_limits<uint16_t>::max())
+          << ": More messages/second configured than the queue can hold on "
+          << CleanedChannelToString(c) << ", " << c->frequency() << "hz for "
+          << config.message().channel_storage_duration() << "ns";
+
       if (c->has_logger_nodes()) {
         // Confirm that we don't have duplicate logger nodes.
         absl::btree_set<std::string_view> logger_nodes;
@@ -431,7 +439,8 @@
           switch (connection->timestamp_logger()) {
             case LoggerConfig::LOCAL_LOGGER:
             case LoggerConfig::NOT_LOGGED:
-              CHECK(!connection->has_timestamp_logger_nodes());
+              CHECK(!connection->has_timestamp_logger_nodes())
+                  << ": " << CleanedChannelToString(c);
               break;
             case LoggerConfig::REMOTE_LOGGER:
             case LoggerConfig::LOCAL_AND_REMOTE_LOGGER:
@@ -1279,6 +1288,10 @@
     return true;
   }
 
+  if (!node->has_tags()) {
+    return false;
+  }
+
   const auto *const tags = node->tags();
   return std::find_if(tags->begin(), tags->end(),
                       [tag](const flatbuffers::String *candidate) {
@@ -1564,5 +1577,22 @@
   return result;
 }
 
+int QueueSize(const Configuration *config, const Channel *channel) {
+  return QueueSize(channel->frequency(),
+                   chrono::nanoseconds(config->channel_storage_duration()));
+}
+
+int QueueSize(size_t frequency, chrono::nanoseconds channel_storage_duration) {
+  // Use integer arithmetic and round up at all cost.
+  return static_cast<int>(
+      (999999999 + static_cast<int64_t>(frequency) *
+                       static_cast<int64_t>(channel_storage_duration.count())) /
+      static_cast<int64_t>(1000000000));
+}
+
+int QueueScratchBufferSize(const Channel *channel) {
+  return channel->num_readers() + channel->num_senders();
+}
+
 }  // namespace configuration
 }  // namespace aos
diff --git a/aos/configuration.fbs b/aos/configuration.fbs
index 7595167..2b25a92 100644
--- a/aos/configuration.fbs
+++ b/aos/configuration.fbs
@@ -152,6 +152,10 @@
 
   // Indicates that application should automatically restart on failure.
   autorestart:bool = true (id: 7);
+
+  // If set, this is the memory limit to enforce in bytes for the application
+  // (and it's children)
+  memory_limit:uint64 = 0 (id: 8);
 }
 
 // Per node data and connection information.
diff --git a/aos/configuration.h b/aos/configuration.h
index 31603fe..8515b18 100644
--- a/aos/configuration.h
+++ b/aos/configuration.h
@@ -5,6 +5,7 @@
 #include <netinet/in.h>
 #include <sys/socket.h>
 
+#include <chrono>
 #include <cstdint>
 #include <string_view>
 
@@ -203,6 +204,14 @@
 bool ApplicationShouldStart(const Configuration *config, const Node *my_node,
                             const Application *application);
 
+// Returns the number of messages in the queue.
+int QueueSize(const Configuration *config, const Channel *channel);
+int QueueSize(size_t frequency,
+              std::chrono::nanoseconds channel_storage_duration);
+
+// Returns the number of scratch buffers in the queue.
+int QueueScratchBufferSize(const Channel *channel);
+
 // TODO(austin): GetSchema<T>(const Flatbuffer<Configuration> &config);
 
 }  // namespace configuration
diff --git a/aos/configuration.rs b/aos/configuration.rs
new file mode 100644
index 0000000..a264867
--- /dev/null
+++ b/aos/configuration.rs
@@ -0,0 +1,160 @@
+use std::{path::Path, ptr};
+
+use thiserror::Error;
+
+use aos_configuration_fbs::aos::Configuration as RustConfiguration;
+use aos_flatbuffers::{transmute_table_to, NonSizePrefixedFlatbuffer};
+
+autocxx::include_cpp! (
+#include "aos/configuration.h"
+#include "aos/configuration_for_rust.h"
+#include "aos/configuration_generated.h"
+
+safety!(unsafe)
+
+generate!("aos::Configuration")
+generate!("aos::Channel")
+generate!("aos::Node")
+block!("flatbuffers::String")
+block!("flatbuffers::Verifier")
+
+generate!("aos::configuration::GetChannelForRust")
+generate!("aos::configuration::GetNodeForRust")
+);
+
+#[cxx::bridge]
+mod ffi2 {
+    #[namespace = "aos::configuration"]
+    unsafe extern "C++" {
+        include!("aos/configuration_for_rust.h");
+        fn MaybeReadConfigForRust(path: &str, extra_import_paths: &[&str]) -> Vec<u8>;
+    }
+}
+
+pub use ffi::aos::{Channel, Configuration, Node};
+
+#[derive(Clone, Copy, Eq, PartialEq, Debug, Error)]
+pub enum ChannelLookupError {
+    #[error("channel not found")]
+    NotFound,
+}
+
+#[derive(Clone, Copy, Eq, PartialEq, Debug, Error)]
+pub enum NodeLookupError {
+    #[error("node not found")]
+    NotFound,
+}
+
+#[derive(Clone, Copy, Eq, PartialEq, Debug, Error)]
+pub enum ReadConfigError {
+    #[error("duplicate imports or invalid paths")]
+    ReadFailed,
+}
+
+impl<'a> Into<&'a Configuration> for RustConfiguration<'a> {
+    fn into(self) -> &'a Configuration {
+        unsafe { transmute_table_to(&self._tab) }
+    }
+}
+
+/// A trait with useful helper methods for a `Configuration` table. Import this trait to get these
+/// methods on both the `Configuration` struct generated by autocxx from the C++ code generated by
+/// flatbuffers, and the `Configuration` struct generated by flatbuffers in Rust.
+pub trait ConfigurationExt<'a>: Into<&'a Configuration> {
+    fn get_channel(
+        self,
+        name: &str,
+        typename: &str,
+        application_name: &str,
+        node: Option<&Node>,
+    ) -> Result<&'a Channel, ChannelLookupError> {
+        // SAFETY: All the input references are valid pointers, and we're not doing anything with
+        // the result yet. It doesn't store any of the input references.
+        let channel = unsafe {
+            ffi::aos::configuration::GetChannelForRust(
+                self.into(),
+                name,
+                typename,
+                application_name,
+                node.map_or(ptr::null(), |p| p),
+            )
+        };
+        if channel.is_null() {
+            Err(ChannelLookupError::NotFound)
+        } else {
+            // SAFETY: We know this is a valid pointer now, and we're returning it with the lifetime
+            // inherited from `self` which owns it.
+            Ok(unsafe { &*channel })
+        }
+    }
+
+    fn get_node(self, name: &str) -> Result<&'a Node, NodeLookupError> {
+        // SAFETY: All the input references are valid pointers, and we're not doing anything with
+        // the result yet. It doesn't store any of the input references.
+        let node = unsafe { ffi::aos::configuration::GetNodeForRust(self.into(), name) };
+        if node.is_null() {
+            Err(NodeLookupError::NotFound)
+        } else {
+            // SAFETY: We know this is a valid pointer now, and we're returning it with the lifetime
+            // inherited from `self` which owns it.
+            Ok(unsafe { &*node })
+        }
+    }
+}
+
+impl<'a, T: Into<&'a Configuration>> ConfigurationExt<'a> for T {}
+
+/// # Panics
+///
+/// `path` must be valid UTF-8.
+pub fn read_config_from(
+    path: &Path,
+) -> Result<NonSizePrefixedFlatbuffer<RustConfiguration<'static>, Vec<u8>>, ReadConfigError> {
+    read_config_from_import_paths(path, &[])
+}
+
+/// # Panics
+///
+/// `path` and all members of `extra_import_paths` must be valid UTF-8.
+pub fn read_config_from_import_paths(
+    path: &Path,
+    extra_import_paths: &[&Path],
+) -> Result<NonSizePrefixedFlatbuffer<RustConfiguration<'static>, Vec<u8>>, ReadConfigError> {
+    let extra_import_paths: Vec<_> = extra_import_paths
+        .iter()
+        .map(|p| p.to_str().expect("Paths must be UTF-8"))
+        .collect();
+    let buffer = ffi2::MaybeReadConfigForRust(
+        path.to_str().expect("Paths must be UTF-8"),
+        &extra_import_paths,
+    );
+    if buffer.is_empty() {
+        return Err(ReadConfigError::ReadFailed);
+    }
+    // SAFETY: The C++ code returns a valid flatbuffer (unless it returned an error, which we
+    // checked above).
+    return Ok(unsafe { NonSizePrefixedFlatbuffer::new_unchecked(buffer) });
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    use aos_flatbuffers::Flatbuffer;
+
+    #[test]
+    fn read_config() {
+        let config = read_config_from(Path::new("aos/testdata/config1.json")).unwrap();
+        assert!(
+            config
+                .message()
+                .channels()
+                .unwrap()
+                .iter()
+                .find(|channel| channel.type_() == Some(".aos.bar"))
+                .is_some(),
+            "Failed to find the .aos.bar channel: {:?}",
+            config.message()
+        );
+    }
+}
diff --git a/aos/configuration_for_rust.cc b/aos/configuration_for_rust.cc
new file mode 100644
index 0000000..64d070f
--- /dev/null
+++ b/aos/configuration_for_rust.cc
@@ -0,0 +1,37 @@
+#include "aos/configuration_for_rust.h"
+
+#include "aos/for_rust.h"
+
+namespace aos::configuration {
+
+const Channel *GetChannelForRust(const Configuration *config, rust::Str name,
+                                 rust::Str type, rust::Str application_name,
+                                 const Node *node) {
+  return GetChannel(config, RustStrToStringView(name),
+                    RustStrToStringView(type),
+                    RustStrToStringView(application_name), node);
+}
+
+const Node *GetNodeForRust(const Configuration *config, rust::Str name) {
+  return GetNode(config, RustStrToStringView(name));
+}
+
+rust::Vec<uint8_t> MaybeReadConfigForRust(
+    rust::Str path, rust::Slice<const rust::Str> extra_import_paths) {
+  std::vector<std::string_view> cc_extra_import_paths;
+  for (const rust::Str &extra_import_path : extra_import_paths) {
+    cc_extra_import_paths.push_back(RustStrToStringView(extra_import_path));
+  }
+  const auto cc_result =
+      MaybeReadConfig(RustStrToStringView(path), cc_extra_import_paths);
+  rust::Vec<uint8_t> result;
+  if (cc_result) {
+    result.reserve(cc_result->span().size());
+    for (uint8_t b : cc_result->span()) {
+      result.push_back(b);
+    }
+  }
+  return result;
+}
+
+}  // namespace aos::configuration
diff --git a/aos/configuration_for_rust.h b/aos/configuration_for_rust.h
new file mode 100644
index 0000000..9bf9c75
--- /dev/null
+++ b/aos/configuration_for_rust.h
@@ -0,0 +1,23 @@
+#ifndef AOS_CONFIGURATION_FOR_RUST_H_
+#define AOS_CONFIGURATION_FOR_RUST_H_
+
+#include "aos/configuration.h"
+#include "cxx.h"
+
+namespace aos::configuration {
+
+const Channel *GetChannelForRust(const Configuration *config, rust::Str name,
+                                 rust::Str type, rust::Str application_name,
+                                 const Node *node);
+
+const Node *GetNodeForRust(const Configuration *config, rust::Str name);
+
+// Returns a Configuration flatbuffer. Returns an empty vector on errors.
+// TODO(Brian): It would be nice to return more detailed errors (not found vs
+// could not parse vs merging error).
+rust::Vec<uint8_t> MaybeReadConfigForRust(
+    rust::Str path, rust::Slice<const rust::Str> extra_import_paths);
+
+}  // namespace aos::configuration
+
+#endif  // AOS_CONFIGURATION_FOR_RUST_H_
diff --git a/aos/configuration_test.cc b/aos/configuration_test.cc
index 242ee17..fa74e20 100644
--- a/aos/configuration_test.cc
+++ b/aos/configuration_test.cc
@@ -16,6 +16,7 @@
 namespace testing {
 
 using aos::testing::ArtifactPath;
+namespace chrono = std::chrono;
 
 class ConfigurationTest : public ::testing::Test {
  public:
@@ -988,6 +989,28 @@
       "Found duplicate logger_nodes in");
 }
 
+// Tests that we properly compute the queue size for the provided duration.
+TEST_F(ConfigurationTest, QueueSize) {
+  EXPECT_EQ(QueueSize(100, chrono::seconds(2)), 200);
+  EXPECT_EQ(QueueSize(200, chrono::seconds(2)), 400);
+  EXPECT_EQ(QueueSize(100, chrono::seconds(6)), 600);
+  EXPECT_EQ(QueueSize(100, chrono::milliseconds(10)), 1);
+  EXPECT_EQ(QueueSize(100, chrono::milliseconds(10) - chrono::nanoseconds(1)),
+            1);
+  EXPECT_EQ(QueueSize(100, chrono::milliseconds(10) - chrono::nanoseconds(2)),
+            1);
+}
+
+// Tests that we compute scratch buffer size correctly too.
+TEST_F(ConfigurationTest, QueueScratchBufferSize) {
+  const aos::FlatbufferDetachedBuffer<Channel> channel =
+      JsonToFlatbuffer<Channel>(
+          "{ \"name\": \"/foo\", \"type\": \".aos.bar\", \"num_readers\": 5, "
+          "\"num_senders\": 10 }");
+
+  EXPECT_EQ(QueueScratchBufferSize(&channel.message()), 15);
+}
+
 }  // namespace testing
 }  // namespace configuration
 }  // namespace aos
diff --git a/aos/containers/sized_array_test.cc b/aos/containers/sized_array_test.cc
index 47be950..c5065f8 100644
--- a/aos/containers/sized_array_test.cc
+++ b/aos/containers/sized_array_test.cc
@@ -166,7 +166,7 @@
   // Verify that we didn't reallocate
   EXPECT_EQ(pre_front, a.data());
 
-  EXPECT_DEATH(a.emplace_back(5), "SIGILL");
+  EXPECT_DEATH(a.emplace_back(5), "Aborted at");
 }
 
 }  // namespace testing
diff --git a/aos/events/BUILD b/aos/events/BUILD
index 278934b..deca15b 100644
--- a/aos/events/BUILD
+++ b/aos/events/BUILD
@@ -373,6 +373,7 @@
     visibility = ["//visibility:public"],
     deps = [
         ":aos_logging",
+        ":epoll",
         ":event_loop",
         ":simple_channel",
         "//aos:init",
@@ -395,6 +396,7 @@
     target_compatible_with = ["@platforms//os:linux"],
     deps = [
         ":simulated_event_loop",
+        "//aos/network:testing_time_converter",
         "//aos/testing:googletest",
         "@com_github_google_glog//:glog",
     ],
diff --git a/aos/events/epoll.cc b/aos/events/epoll.cc
index 8cb553b..71e3c9b 100644
--- a/aos/events/epoll.cc
+++ b/aos/events/epoll.cc
@@ -24,6 +24,7 @@
 
 void TimerFd::SetTime(monotonic_clock::time_point start,
                       monotonic_clock::duration interval) {
+  CHECK_GE(start, monotonic_clock::epoch());
   struct itimerspec new_value;
   new_value.it_interval = ::aos::time::to_timespec(interval);
   new_value.it_value = ::aos::time::to_timespec(start);
diff --git a/aos/events/event_loop.cc b/aos/events/event_loop.cc
index df0390c..09a3834 100644
--- a/aos/events/event_loop.cc
+++ b/aos/events/event_loop.cc
@@ -89,6 +89,7 @@
   context_.realtime_event_time = realtime_clock::min_time;
   context_.realtime_remote_time = realtime_clock::min_time;
   context_.queue_index = 0xffffffff;
+  context_.remote_queue_index = 0xffffffffu;
   context_.size = 0;
   context_.data = nullptr;
   context_.buffer_index = -1;
@@ -600,6 +601,19 @@
   return result;
 }
 
+void EventLoop::ClearContext() {
+  context_.monotonic_event_time = monotonic_clock::min_time;
+  context_.monotonic_remote_time = monotonic_clock::min_time;
+  context_.realtime_event_time = realtime_clock::min_time;
+  context_.realtime_remote_time = realtime_clock::min_time;
+  context_.queue_index = 0xffffffffu;
+  context_.remote_queue_index = 0xffffffffu;
+  context_.size = 0u;
+  context_.data = nullptr;
+  context_.buffer_index = -1;
+  context_.source_boot_uuid = boot_uuid();
+}
+
 void EventLoop::SetTimerContext(
     monotonic_clock::time_point monotonic_event_time) {
   context_.monotonic_event_time = monotonic_event_time;
@@ -607,6 +621,7 @@
   context_.realtime_event_time = realtime_clock::min_time;
   context_.realtime_remote_time = realtime_clock::min_time;
   context_.queue_index = 0xffffffffu;
+  context_.remote_queue_index = 0xffffffffu;
   context_.size = 0u;
   context_.data = nullptr;
   context_.buffer_index = -1;
diff --git a/aos/events/event_loop.h b/aos/events/event_loop.h
index 3ecd93f..ff1183f 100644
--- a/aos/events/event_loop.h
+++ b/aos/events/event_loop.h
@@ -462,6 +462,7 @@
 
   // Timer should sleep until base, base + offset, base + offset * 2, ...
   // If repeat_offset isn't set, the timer only expires once.
+  // base must be greater than or equal to zero.
   virtual void Setup(monotonic_clock::time_point base,
                      monotonic_clock::duration repeat_offset =
                          ::aos::monotonic_clock::zero()) = 0;
@@ -704,11 +705,22 @@
   // Sets the scheduler priority to run the event loop at.  This may not be
   // called after we go into "real-time-mode".
   virtual void SetRuntimeRealtimePriority(int priority) = 0;
-  virtual int priority() const = 0;
+  // Defaults to 0 if this loop will not run realtime.
+  virtual int runtime_realtime_priority() const = 0;
+
+  static cpu_set_t DefaultAffinity() {
+    cpu_set_t result;
+    for (int i = 0; i < CPU_SETSIZE; ++i) {
+      CPU_SET(i, &result);
+    }
+    return result;
+  }
 
   // Sets the scheduler affinity to run the event loop with. This may only be
   // called before Run().
   virtual void SetRuntimeAffinity(const cpu_set_t &cpuset) = 0;
+  // Defaults to DefaultAffinity() if this loop will not run pinned.
+  virtual const cpu_set_t &runtime_affinity() const = 0;
 
   // Fetches new messages from the provided channel (path, type).
   //
@@ -844,6 +856,8 @@
   // Sets context_ for a timed event which is supposed to happen at the provided
   // time.
   void SetTimerContext(monotonic_clock::time_point monotonic_event_time);
+  // Clears context_ so it only has invalid times and elements in it.
+  void ClearContext();
 
  private:
   virtual pid_t GetTid() = 0;
@@ -862,6 +876,28 @@
   absl::btree_set<const Channel *> taken_watchers_, taken_senders_;
 };
 
+// Interface for terminating execution of an EventLoop.
+//
+// Prefer this over binding a lambda to an Exit() method when passing ownership
+// in complicated ways because implementations should have assertions to catch
+// it outliving the object it's referring to, instead of having a
+// use-after-free.
+//
+// This is not exposed by EventLoop directly because different EventLoop
+// implementations provide this functionality at different scopes, or possibly
+// not at all.
+class ExitHandle {
+ public:
+  ExitHandle() = default;
+  virtual ~ExitHandle() = default;
+
+  // Exits some set of event loops. Details depend on the implementation.
+  //
+  // This means no more events will be processed, but any currently being
+  // processed will finish.
+  virtual void Exit() = 0;
+};
+
 }  // namespace aos
 
 #include "aos/events/event_loop_tmpl.h"  // IWYU pragma: export
diff --git a/aos/events/event_loop_param_test.cc b/aos/events/event_loop_param_test.cc
index 2d7decc..990cbe5 100644
--- a/aos/events/event_loop_param_test.cc
+++ b/aos/events/event_loop_param_test.cc
@@ -752,6 +752,14 @@
       "/test/invalid");
 }
 
+// Verify that setting up a timer before monotonic_clock::epoch() fails.
+TEST_P(AbstractEventLoopDeathTest, NegativeTimeTimer) {
+  auto loop = Make();
+  TimerHandler *time = loop->AddTimer([]() {});
+  EXPECT_DEATH(time->Setup(monotonic_clock::epoch() - std::chrono::seconds(1)),
+               "-1.000");
+}
+
 // Verify that registering a watcher twice for "/test" fails.
 TEST_P(AbstractEventLoopDeathTest, TwoWatcher) {
   auto loop = Make();
@@ -773,14 +781,24 @@
 // Verify that SetRuntimeRealtimePriority fails while running.
 TEST_P(AbstractEventLoopDeathTest, SetRuntimeRealtimePriority) {
   auto loop = MakePrimary();
+  EXPECT_EQ(0, loop->runtime_realtime_priority());
   // Confirm that runtime priority calls work when not realtime.
   loop->SetRuntimeRealtimePriority(5);
+  EXPECT_EQ(5, loop->runtime_realtime_priority());
 
   loop->OnRun([&]() { loop->SetRuntimeRealtimePriority(5); });
 
   EXPECT_DEATH(Run(), "realtime");
 }
 
+namespace {
+
+bool CpuSetEqual(const cpu_set_t &a, const cpu_set_t &b) {
+  return CPU_EQUAL(&a, &b);
+}
+
+}  // namespace
+
 // Verify that SetRuntimeAffinity fails while running.
 TEST_P(AbstractEventLoopDeathTest, SetRuntimeAffinity) {
   const cpu_set_t available = GetCurrentThreadAffinity();
@@ -795,8 +813,12 @@
   CHECK_NE(first_cpu, -1) << ": Default affinity has no CPUs?";
 
   auto loop = MakePrimary();
+  EXPECT_TRUE(
+      CpuSetEqual(EventLoop::DefaultAffinity(), loop->runtime_affinity()));
+  const cpu_set_t new_affinity = MakeCpusetFromCpus({first_cpu});
   // Confirm that runtime priority calls work when not running.
-  loop->SetRuntimeAffinity(MakeCpusetFromCpus({first_cpu}));
+  loop->SetRuntimeAffinity(new_affinity);
+  EXPECT_TRUE(CpuSetEqual(new_affinity, loop->runtime_affinity()));
 
   loop->OnRun(
       [&]() { loop->SetRuntimeAffinity(MakeCpusetFromCpus({first_cpu})); });
@@ -2540,6 +2562,17 @@
 TEST_P(AbstractEventLoopTest, SetContextOnRun) {
   auto loop = MakePrimary();
 
+  EXPECT_EQ(loop->context().monotonic_event_time, monotonic_clock::min_time);
+  EXPECT_EQ(loop->context().monotonic_remote_time, monotonic_clock::min_time);
+  EXPECT_EQ(loop->context().realtime_event_time, realtime_clock::min_time);
+  EXPECT_EQ(loop->context().realtime_remote_time, realtime_clock::min_time);
+  EXPECT_EQ(loop->context().source_boot_uuid, loop->boot_uuid());
+  EXPECT_EQ(loop->context().queue_index, 0xffffffffu);
+  EXPECT_EQ(loop->context().remote_queue_index, 0xffffffffu);
+  EXPECT_EQ(loop->context().size, 0u);
+  EXPECT_EQ(loop->context().data, nullptr);
+  EXPECT_EQ(loop->context().buffer_index, -1);
+
   // We want to check that monotonic event time is before monotonic now
   // called inside of callback, but after time point obtained callback.
   aos::monotonic_clock::time_point monotonic_event_time_on_run;
@@ -2552,6 +2585,7 @@
     EXPECT_EQ(loop->context().realtime_remote_time, realtime_clock::min_time);
     EXPECT_EQ(loop->context().source_boot_uuid, loop->boot_uuid());
     EXPECT_EQ(loop->context().queue_index, 0xffffffffu);
+    EXPECT_EQ(loop->context().remote_queue_index, 0xffffffffu);
     EXPECT_EQ(loop->context().size, 0u);
     EXPECT_EQ(loop->context().data, nullptr);
     EXPECT_EQ(loop->context().buffer_index, -1);
@@ -2563,6 +2597,17 @@
       loop->monotonic_now();
   Run();
   EXPECT_GE(monotonic_event_time_on_run, before_run_time);
+
+  EXPECT_EQ(loop->context().monotonic_event_time, monotonic_clock::min_time);
+  EXPECT_EQ(loop->context().monotonic_remote_time, monotonic_clock::min_time);
+  EXPECT_EQ(loop->context().realtime_event_time, realtime_clock::min_time);
+  EXPECT_EQ(loop->context().realtime_remote_time, realtime_clock::min_time);
+  EXPECT_EQ(loop->context().source_boot_uuid, loop->boot_uuid());
+  EXPECT_EQ(loop->context().queue_index, 0xffffffffu);
+  EXPECT_EQ(loop->context().remote_queue_index, 0xffffffffu);
+  EXPECT_EQ(loop->context().size, 0u);
+  EXPECT_EQ(loop->context().data, nullptr);
+  EXPECT_EQ(loop->context().buffer_index, -1);
 }
 
 // Tests that watchers fail when created on the wrong node.
diff --git a/aos/events/event_scheduler.cc b/aos/events/event_scheduler.cc
index cb0c629..97c1e83 100644
--- a/aos/events/event_scheduler.cc
+++ b/aos/events/event_scheduler.cc
@@ -10,6 +10,7 @@
 
 EventScheduler::Token EventScheduler::Schedule(monotonic_clock::time_point time,
                                                Event *callback) {
+  CHECK_LE(monotonic_clock::epoch(), time);
   return events_list_.emplace(time, callback);
 }
 
@@ -35,6 +36,12 @@
 }
 
 aos::monotonic_clock::time_point EventScheduler::OldestEvent() {
+  // If we haven't started yet, schedule a special event for the epoch to allow
+  // ourselves to boot.
+  if (!called_started_) {
+    return aos::monotonic_clock::epoch();
+  }
+
   if (events_list_.empty()) {
     return monotonic_clock::max_time;
   }
@@ -42,14 +49,27 @@
   return events_list_.begin()->first;
 }
 
-void EventScheduler::Shutdown() { on_shutdown_(); }
+void EventScheduler::Shutdown() {
+  CHECK(!is_running_);
+  on_shutdown_();
+}
 
 void EventScheduler::Startup() {
   ++boot_count_;
-  RunOnStartup();
+  CHECK(!is_running_);
+  MaybeRunOnStartup();
+  CHECK(called_started_);
 }
 
 void EventScheduler::CallOldestEvent() {
+  if (!called_started_) {
+    // If we haven't started, start.
+    MaybeRunOnStartup();
+    MaybeRunOnRun();
+    CHECK(called_started_);
+    return;
+  }
+  CHECK(is_running_);
   CHECK_GT(events_list_.size(), 0u);
   auto iter = events_list_.begin();
   const logger::BootTimestamp t =
@@ -66,6 +86,7 @@
 }
 
 void EventScheduler::RunOnRun() {
+  CHECK(is_running_);
   while (!on_run_.empty()) {
     std::function<void()> fn = std::move(*on_run_.begin());
     on_run_.erase(on_run_.begin());
@@ -75,6 +96,7 @@
 
 void EventScheduler::RunOnStartup() noexcept {
   while (!on_startup_.empty()) {
+    CHECK(!is_running_);
     std::function<void()> fn = std::move(*on_startup_.begin());
     on_startup_.erase(on_startup_.begin());
     fn();
@@ -82,14 +104,39 @@
 }
 
 void EventScheduler::RunStarted() {
+  CHECK(!is_running_);
   if (started_) {
     started_();
   }
+  is_running_ = true;
 }
 
-void EventScheduler::RunStopped() {
-  if (stopped_) {
-    stopped_();
+void EventScheduler::MaybeRunStopped() {
+  CHECK(is_running_);
+  is_running_ = false;
+  if (called_started_) {
+    called_started_ = false;
+    if (stopped_) {
+      stopped_();
+    }
+  }
+}
+
+void EventScheduler::MaybeRunOnStartup() {
+  CHECK(!called_started_);
+  CHECK(!is_running_);
+  const logger::BootTimestamp t =
+      FromDistributedClock(scheduler_scheduler_->distributed_now());
+  if (t.boot == boot_count_ && t.time >= monotonic_clock::epoch()) {
+    called_started_ = true;
+    RunOnStartup();
+  }
+}
+
+void EventScheduler::MaybeRunOnRun() {
+  if (called_started_) {
+    RunStarted();
+    RunOnRun();
   }
 }
 
@@ -110,6 +157,88 @@
   scheduler->scheduler_scheduler_ = this;
 }
 
+void EventSchedulerScheduler::MaybeRunStopped() {
+  CHECK(!is_running_);
+  for (EventScheduler *scheduler : schedulers_) {
+    if (scheduler->is_running()) {
+      scheduler->MaybeRunStopped();
+    }
+  }
+}
+
+bool EventSchedulerScheduler::RunUntil(
+    realtime_clock::time_point end_time, EventScheduler *scheduler,
+    std::function<std::chrono::nanoseconds()> fn_realtime_offset) {
+  logging::ScopedLogRestorer prev_logger;
+  MaybeRunOnStartup();
+
+  bool reached_end_time = false;
+
+  RunMaybeRealtimeLoop([this, scheduler, end_time, fn_realtime_offset,
+                        &reached_end_time]() {
+    std::tuple<distributed_clock::time_point, EventScheduler *> oldest_event =
+        OldestEvent();
+    aos::distributed_clock::time_point oldest_event_time_distributed =
+        std::get<0>(oldest_event);
+    logger::BootTimestamp test_time_monotonic =
+        scheduler->FromDistributedClock(oldest_event_time_distributed);
+    realtime_clock::time_point oldest_event_realtime(
+        test_time_monotonic.time_since_epoch() + fn_realtime_offset());
+
+    if ((std::get<0>(oldest_event) == distributed_clock::max_time) ||
+        (oldest_event_realtime > end_time &&
+         (reboots_.empty() ||
+          std::get<0>(reboots_.front()) > oldest_event_time_distributed))) {
+      is_running_ = false;
+      reached_end_time = true;
+
+      // We have to nudge our time back to the distributed time
+      // corresponding to our desired realtime time.
+      const aos::monotonic_clock::time_point end_monotonic =
+          aos::monotonic_clock::epoch() + end_time.time_since_epoch() -
+          fn_realtime_offset();
+      const aos::distributed_clock::time_point end_time_distributed =
+          scheduler->ToDistributedClock(end_monotonic);
+
+      now_ = end_time_distributed;
+
+      return;
+    }
+
+    if (!reboots_.empty() &&
+        std::get<0>(reboots_.front()) <= std::get<0>(oldest_event)) {
+      // Reboot is next.
+      CHECK_LE(now_,
+               std::get<0>(reboots_.front()) + std::chrono::nanoseconds(1))
+          << ": Simulated time went backwards by too much.  Please "
+             "investigate.";
+      now_ = std::get<0>(reboots_.front());
+      Reboot();
+      reboots_.erase(reboots_.begin());
+      return;
+    }
+
+    // We get to pick our tradeoffs here.  Either we assume that there are
+    // no backward step changes in our time function for each node, or we
+    // have to let time go backwards.  We currently only really see this
+    // happen when 2 events are scheduled for "now", time changes, and
+    // there is a nanosecond or two of rounding due to integer math.
+    //
+    // //aos/events/logging:logger_test triggers this.
+    CHECK_LE(now_, std::get<0>(oldest_event) + std::chrono::nanoseconds(1))
+        << ": Simulated time went backwards by too much.  Please "
+           "investigate.";
+
+    now_ = std::get<0>(oldest_event);
+
+    std::get<1>(oldest_event)->CallOldestEvent();
+  });
+
+  MaybeRunStopped();
+
+  return reached_end_time;
+}
+
 void EventSchedulerScheduler::Reboot() {
   const std::vector<logger::BootTimestamp> &times =
       std::get<1>(reboots_.front());
@@ -131,7 +260,7 @@
       rebooted.emplace_back(node_index);
       CHECK_EQ(schedulers_[node_index]->boot_count() + 1,
                times[node_index].boot);
-      schedulers_[node_index]->RunStopped();
+      schedulers_[node_index]->MaybeRunStopped();
       schedulers_[node_index]->Shutdown();
     }
   }
@@ -140,16 +269,10 @@
   // (especially message_bridge), it could try to send stuff out.  We want
   // to move everything over to the new boot before doing that.
   for (const size_t node_index : rebooted) {
-    CHECK_EQ(schedulers_[node_index]->boot_count() + 1, times[node_index].boot);
     schedulers_[node_index]->Startup();
   }
-
   for (const size_t node_index : rebooted) {
-    schedulers_[node_index]->RunStarted();
-  }
-
-  for (const size_t node_index : rebooted) {
-    schedulers_[node_index]->RunOnRun();
+    schedulers_[node_index]->MaybeRunOnRun();
   }
   is_running_ = true;
 }
@@ -157,11 +280,10 @@
 void EventSchedulerScheduler::RunFor(distributed_clock::duration duration) {
   distributed_clock::time_point end_time = now_ + duration;
   logging::ScopedLogRestorer prev_logger;
-  RunOnStartup();
-  RunOnRun();
+  MaybeRunOnStartup();
 
   // Run all the sub-event-schedulers.
-  while (is_running_) {
+  RunMaybeRealtimeLoop([this, end_time]() {
     std::tuple<distributed_clock::time_point, EventScheduler *> oldest_event =
         OldestEvent();
     if (!reboots_.empty() &&
@@ -170,7 +292,7 @@
       if (std::get<0>(reboots_.front()) > end_time) {
         // Reboot is after our end time, give up.
         is_running_ = false;
-        break;
+        return;
       }
 
       CHECK_LE(now_,
@@ -180,14 +302,14 @@
       now_ = std::get<0>(reboots_.front());
       Reboot();
       reboots_.erase(reboots_.begin());
-      continue;
+      return;
     }
 
     // No events left, bail.
     if (std::get<0>(oldest_event) == distributed_clock::max_time ||
         std::get<0>(oldest_event) > end_time) {
       is_running_ = false;
-      break;
+      return;
     }
 
     // We get to pick our tradeoffs here.  Either we assume that there are no
@@ -199,22 +321,23 @@
     // //aos/events/logging:logger_test triggers this.
     CHECK_LE(now_, std::get<0>(oldest_event) + std::chrono::nanoseconds(1))
         << ": Simulated time went backwards by too much.  Please investigate.";
+    // push time forwards
     now_ = std::get<0>(oldest_event);
 
     std::get<1>(oldest_event)->CallOldestEvent();
-  }
+  });
 
   now_ = end_time;
 
-  RunStopped();
+  MaybeRunStopped();
 }
 
 void EventSchedulerScheduler::Run() {
   logging::ScopedLogRestorer prev_logger;
-  RunOnStartup();
-  RunOnRun();
+  MaybeRunOnStartup();
+
   // Run all the sub-event-schedulers.
-  while (is_running_) {
+  RunMaybeRealtimeLoop([this]() {
     std::tuple<distributed_clock::time_point, EventScheduler *> oldest_event =
         OldestEvent();
     if (!reboots_.empty() &&
@@ -227,11 +350,12 @@
       now_ = std::get<0>(reboots_.front());
       Reboot();
       reboots_.erase(reboots_.begin());
-      continue;
+      return;
     }
     // No events left, bail.
     if (std::get<0>(oldest_event) == distributed_clock::max_time) {
-      break;
+      is_running_ = false;
+      return;
     }
 
     // We get to pick our tradeoffs here.  Either we assume that there are no
@@ -246,11 +370,55 @@
     now_ = std::get<0>(oldest_event);
 
     std::get<1>(oldest_event)->CallOldestEvent();
-  }
+  });
 
-  is_running_ = false;
+  MaybeRunStopped();
+}
 
-  RunStopped();
+template <typename F>
+void EventSchedulerScheduler::RunMaybeRealtimeLoop(F loop_body) {
+  internal::TimerFd timerfd;
+  CHECK_LT(0.0, replay_rate_) << "Replay rate must be positive.";
+  distributed_clock::time_point last_distributed_clock =
+      std::get<0>(OldestEvent());
+  monotonic_clock::time_point last_monotonic_clock = monotonic_clock::now();
+  timerfd.SetTime(last_monotonic_clock, std::chrono::seconds(0));
+  epoll_.OnReadable(
+      timerfd.fd(), [this, &last_distributed_clock, &last_monotonic_clock,
+                     &timerfd, loop_body]() {
+        const uint64_t read_result = timerfd.Read();
+        if (!is_running_) {
+          epoll_.Quit();
+          return;
+        }
+        CHECK_EQ(read_result, 1u);
+        // Call loop_body() at least once; if we are in infinite-speed replay,
+        // we don't actually want/need the context switches from the epoll
+        // setup, so just loop.
+        // Note: The performance impacts of this code have not been carefully
+        // inspected (e.g., how much does avoiding the context-switch help; does
+        // the timerfd_settime call matter).
+        // This is deliberately written to support the user changing replay
+        // rates dynamically.
+        do {
+          loop_body();
+          if (is_running_) {
+            const monotonic_clock::time_point next_trigger =
+                last_monotonic_clock +
+                std::chrono::duration_cast<std::chrono::nanoseconds>(
+                    (now_ - last_distributed_clock) / replay_rate_);
+            timerfd.SetTime(next_trigger, std::chrono::seconds(0));
+            last_monotonic_clock = next_trigger;
+            last_distributed_clock = now_;
+          } else {
+            epoll_.Quit();
+          }
+        } while (replay_rate_ == std::numeric_limits<double>::infinity() &&
+                 is_running_);
+      });
+
+  epoll_.Run();
+  epoll_.DeleteFd(timerfd.fd());
 }
 
 std::tuple<distributed_clock::time_point, EventScheduler *>
@@ -284,12 +452,23 @@
   const bool was_running = is_running_;
   if (is_running_) {
     is_running_ = false;
-    RunStopped();
+    MaybeRunStopped();
   }
   fn();
   if (was_running) {
-    RunOnStartup();
-    RunOnRun();
+    MaybeRunOnStartup();
+  }
+}
+
+void EventSchedulerScheduler::MaybeRunOnStartup() {
+  is_running_ = true;
+  for (EventScheduler *scheduler : schedulers_) {
+    scheduler->MaybeRunOnStartup();
+  }
+  // We must trigger all the OnRun's *after* all the OnStartup callbacks are
+  // triggered because that is the contract that we have stated.
+  for (EventScheduler *scheduler : schedulers_) {
+    scheduler->MaybeRunOnRun();
   }
 }
 
diff --git a/aos/events/event_scheduler.h b/aos/events/event_scheduler.h
index d91a75e..237a240 100644
--- a/aos/events/event_scheduler.h
+++ b/aos/events/event_scheduler.h
@@ -8,6 +8,7 @@
 #include <utility>
 #include <vector>
 
+#include "aos/events/epoll.h"
 #include "aos/events/event_loop.h"
 #include "aos/events/logging/boot_timestamp.h"
 #include "aos/logging/implementations.h"
@@ -108,47 +109,50 @@
   // Returns an iterator to the event
   Token Schedule(monotonic_clock::time_point time, Event *callback);
 
-  // Schedules a callback when the event scheduler starts.
+  // Schedules a callback whenever the event scheduler starts, after we have
+  // entered the running state. Callbacks are cleared after being called once.
+  // Will not get called until a node starts (a node does not start until its
+  // monotonic clock has reached at least monotonic_clock::epoch()).
   void ScheduleOnRun(std::function<void()> callback) {
     on_run_.emplace_back(std::move(callback));
   }
 
-  // Schedules a callback when the event scheduler starts.
+  // Schedules a callback whenever the event scheduler starts, before we have
+  // entered the running state. Callbacks are cleared after being called once.
+  // Will not get called until a node starts (a node does not start until its
+  // monotonic clock has reached at least monotonic_clock::epoch()).
   void ScheduleOnStartup(std::function<void()> callback) {
     on_startup_.emplace_back(std::move(callback));
   }
 
+  // Schedules a callback for whenever a node reboots, after we have exited the
+  // running state. Does not get called when the event scheduler stops (unless
+  // it is stopping to execute the reboot).
   void set_on_shutdown(std::function<void()> callback) {
     on_shutdown_ = std::move(callback);
   }
 
+  // Identical to ScheduleOnStartup, except that only one callback may get set
+  // and it will not be cleared after being called.
   void set_started(std::function<void()> callback) {
     started_ = std::move(callback);
   }
 
+  // Schedules a callback for whenever the scheduler exits the running state
+  // (running will be false during the callback). This includes both node
+  // reboots and the end of regular execution. Will not be called if the node
+  // never started.
   void set_stopped(std::function<void()> callback) {
     stopped_ = std::move(callback);
   }
 
-  std::function<void()> started_;
-  std::function<void()> stopped_;
-  std::function<void()> on_shutdown_;
-
   Token InvalidToken() { return events_list_.end(); }
 
   // Deschedule an event by its iterator
   void Deschedule(Token token);
 
-  // Runs the OnRun callbacks.
-  void RunOnRun();
-
-  // Runs the OnStartup callbacks.
-  void RunOnStartup() noexcept;
-
   // Runs the Started callback.
-  void RunStarted();
-  // Runs the Started callback.
-  void RunStopped();
+  void MaybeRunStopped();
 
   // Returns true if events are being handled.
   inline bool is_running() const;
@@ -185,12 +189,24 @@
 
   size_t node_index() const { return node_index_; }
 
+ private:
+  friend class EventSchedulerScheduler;
+
+  // Runs the OnRun callbacks.
+  void RunOnRun();
+
+  // Runs the OnStartup callbacks.
+  void RunOnStartup() noexcept;
+
+  // Runs the Started callback.
+  void RunStarted();
+
   // For implementing reboots.
   void Shutdown();
   void Startup();
 
- private:
-  friend class EventSchedulerScheduler;
+  void MaybeRunOnStartup();
+  void MaybeRunOnRun();
 
   // Current execution time.
   monotonic_clock::time_point monotonic_now_ = monotonic_clock::epoch();
@@ -213,6 +229,15 @@
   // distinguish which one.
   size_t node_index_ = 0;
 
+  // Whether this individual scheduler is currently running.
+  bool is_running_ = false;
+  // Whether we have called all the startup handlers during this boot.
+  bool called_started_ = false;
+
+  std::function<void()> started_;
+  std::function<void()> stopped_;
+  std::function<void()> on_shutdown_;
+
   // Converts time by doing nothing to it.
   class UnityConverter final : public TimeConverter {
    public:
@@ -270,33 +295,28 @@
   // Stops running.
   void Exit() { is_running_ = false; }
 
-  bool is_running() const { return is_running_; }
-
   // Runs for a duration on the distributed clock.  Time on the distributed
   // clock should be very representative of time on each node, but won't be
   // exactly the same.
   void RunFor(distributed_clock::duration duration);
 
+  // Sets the realtime replay rate. A value of 1.0 will cause the scheduler to
+  // try to play events in realtime. 0.5 will run at half speed. Use infinity
+  // (the default) to run as fast as possible. This can be changed during
+  // run-time.
+  void SetReplayRate(double replay_rate) { replay_rate_ = replay_rate; }
+  internal::EPoll *epoll() { return &epoll_; }
+
+  // Run until time.  fn_realtime_offset is a function that returns the
+  // realtime offset.
+  // Returns true if it ran until time (i.e., Exit() was not called before
+  // end_time).
+  bool RunUntil(realtime_clock::time_point end_time, EventScheduler *scheduler,
+                std::function<std::chrono::nanoseconds()> fn_realtime_offset);
+
   // Returns the current distributed time.
   distributed_clock::time_point distributed_now() const { return now_; }
 
-  void RunOnStartup() {
-    CHECK(!is_running_);
-    for (EventScheduler *scheduler : schedulers_) {
-      scheduler->RunOnStartup();
-    }
-    for (EventScheduler *scheduler : schedulers_) {
-      scheduler->RunStarted();
-    }
-  }
-
-  void RunStopped() {
-    CHECK(!is_running_);
-    for (EventScheduler *scheduler : schedulers_) {
-      scheduler->RunStopped();
-    }
-  }
-
   void SetTimeConverter(TimeConverter *time_converter) {
     time_converter->set_reboot_found(
         [this](distributed_clock::time_point reboot_time,
@@ -314,20 +334,20 @@
   void TemporarilyStopAndRun(std::function<void()> fn);
 
  private:
-  // Handles running the OnRun functions.
-  void RunOnRun() {
-    CHECK(!is_running_);
-    is_running_ = true;
-    for (EventScheduler *scheduler : schedulers_) {
-      scheduler->RunOnRun();
-    }
-  }
-
   void Reboot();
 
+  void MaybeRunStopped();
+  void MaybeRunOnStartup();
+
   // Returns the next event time and scheduler on which to run it.
   std::tuple<distributed_clock::time_point, EventScheduler *> OldestEvent();
 
+  // Handles running loop_body repeatedly until complete. loop_body should
+  // return the next time at which it wants to be called, and set is_running_ to
+  // false once we should stop.
+  template <typename F>
+  void RunMaybeRealtimeLoop(F loop_body);
+
   // True if we are running.
   bool is_running_ = false;
   // The current time.
@@ -339,6 +359,9 @@
   std::vector<std::tuple<distributed_clock::time_point,
                          std::vector<logger::BootTimestamp>>>
       reboots_;
+
+  double replay_rate_ = std::numeric_limits<double>::infinity();
+  internal::EPoll epoll_;
 };
 
 inline distributed_clock::time_point EventScheduler::distributed_now() const {
@@ -353,9 +376,7 @@
   return t.time;
 }
 
-inline bool EventScheduler::is_running() const {
-  return scheduler_scheduler_->is_running();
-}
+inline bool EventScheduler::is_running() const { return is_running_; }
 
 }  // namespace aos
 
diff --git a/aos/events/event_scheduler_test.cc b/aos/events/event_scheduler_test.cc
index 54fb91a..c32399c 100644
--- a/aos/events/event_scheduler_test.cc
+++ b/aos/events/event_scheduler_test.cc
@@ -2,6 +2,7 @@
 
 #include <chrono>
 
+#include "aos/network/testing_time_converter.h"
 #include "gtest/gtest.h"
 
 namespace aos {
@@ -67,6 +68,16 @@
   std::vector<UUID> uuids_;
 };
 
+class FunctionEvent : public EventScheduler::Event {
+ public:
+  FunctionEvent(std::function<void()> fn) : fn_(fn) {}
+
+  void Handle() noexcept override { fn_(); }
+
+ private:
+  std::function<void()> fn_;
+};
+
 // Tests that the default parameters (slope of 1, offest of 0) behave as
 // an identity.
 TEST(EventSchedulerTest, IdentityTimeConversion) {
@@ -108,4 +119,408 @@
             distributed_clock::epoch() + chrono::seconds(1));
 }
 
+// Test that RunUntil() stops at the appointed time and returns correctly.
+TEST(EventSchedulerTest, RunUntil) {
+  int counter = 0;
+  EventSchedulerScheduler scheduler_scheduler;
+  EventScheduler scheduler(0);
+  scheduler_scheduler.AddEventScheduler(&scheduler);
+
+  FunctionEvent e([&counter]() { counter += 1; });
+  FunctionEvent quitter(
+      [&scheduler_scheduler]() { scheduler_scheduler.Exit(); });
+  scheduler.Schedule(monotonic_clock::epoch() + chrono::seconds(1), &e);
+  scheduler.Schedule(monotonic_clock::epoch() + chrono::seconds(3), &quitter);
+  scheduler.Schedule(monotonic_clock::epoch() + chrono::seconds(5), &e);
+  ASSERT_TRUE(scheduler_scheduler.RunUntil(
+      realtime_clock::epoch() + std::chrono::seconds(2), &scheduler,
+      []() { return std::chrono::nanoseconds{0}; }));
+  EXPECT_EQ(counter, 1);
+  ASSERT_FALSE(scheduler_scheduler.RunUntil(
+      realtime_clock::epoch() + std::chrono::seconds(4), &scheduler,
+      []() { return std::chrono::nanoseconds{0}; }));
+  EXPECT_EQ(counter, 1);
+  ASSERT_TRUE(scheduler_scheduler.RunUntil(
+      realtime_clock::epoch() + std::chrono::seconds(6), &scheduler,
+      []() { return std::chrono::nanoseconds{0}; }));
+  EXPECT_EQ(counter, 2);
+}
+
+enum class RunMode {
+  kRun,
+  kRunUntil,
+  kRunFor,
+};
+
+// Sets up a parameterized test case that will excercise all three of the Run(),
+// RunFor(), and RunUntil() methods of the EventSchedulerScheduler. This exposes
+// a ParamRunFor() to the test case that will nominally run for the specified
+// time (except for when in kRun mode, where it will just call Run()).
+class EventSchedulerParamTest : public testing::TestWithParam<RunMode> {
+ public:
+  EventSchedulerParamTest() {
+    schedulers_.reserve(kNumNodes);
+    for (size_t ii = 0; ii < kNumNodes; ++ii) {
+      schedulers_.emplace_back(ii);
+      schedulers_.back().SetTimeConverter(ii, &time_);
+      scheduler_scheduler_.AddEventScheduler(&schedulers_.back());
+    }
+    scheduler_scheduler_.SetTimeConverter(&time_);
+  }
+
+  void StartClocksAtEpoch() {
+    time_.AddMonotonic({BootTimestamp::epoch(), BootTimestamp::epoch()});
+  }
+
+ protected:
+  static constexpr size_t kNumNodes = 2;
+
+  void CheckSchedulersRunning(bool running) {
+    for (EventScheduler &scheduler : schedulers_) {
+      EXPECT_EQ(running, scheduler.is_running());
+    }
+  }
+
+  void ParamRunFor(std::chrono::nanoseconds t) {
+    switch (GetParam()) {
+      case RunMode::kRun:
+        scheduler_scheduler_.Run();
+        break;
+      case RunMode::kRunUntil:
+        scheduler_scheduler_.RunUntil(
+            realtime_clock::time_point(
+                schedulers_.at(0).monotonic_now().time_since_epoch() + t),
+            &schedulers_.at(0), []() { return std::chrono::nanoseconds(0); });
+        break;
+      case RunMode::kRunFor:
+        scheduler_scheduler_.RunFor(t);
+        break;
+    }
+  }
+
+  message_bridge::TestingTimeConverter time_{kNumNodes};
+  std::vector<EventScheduler> schedulers_;
+  EventSchedulerScheduler scheduler_scheduler_;
+};
+
+// Tests that we correctly handle exiting during startup.
+TEST_P(EventSchedulerParamTest, ExitOnStartup) {
+  StartClocksAtEpoch();
+  bool observed_handler = false;
+  schedulers_.at(0).ScheduleOnStartup([this, &observed_handler]() {
+    EXPECT_FALSE(schedulers_.at(0).is_running());
+    observed_handler = true;
+    scheduler_scheduler_.Exit();
+  });
+  ParamRunFor(std::chrono::seconds(1));
+  EXPECT_TRUE(observed_handler);
+}
+
+// Test that creating an event and running the scheduler runs the event.
+TEST_P(EventSchedulerParamTest, ScheduleEvent) {
+  StartClocksAtEpoch();
+  int counter = 0;
+
+  FunctionEvent e([&counter]() { counter += 1; });
+  schedulers_.at(0).Schedule(monotonic_clock::epoch() + chrono::seconds(1), &e);
+  ParamRunFor(std::chrono::seconds(1));
+  EXPECT_EQ(counter, 1);
+  auto token = schedulers_.at(0).Schedule(
+      monotonic_clock::epoch() + chrono::seconds(2), &e);
+  schedulers_.at(0).Deschedule(token);
+  ParamRunFor(std::chrono::seconds(2));
+  EXPECT_EQ(counter, 1);
+}
+
+// Tests that a node that would have a negative monotonic time at boot does not
+// get started until later.
+TEST_P(EventSchedulerParamTest, NodeWaitsTillEpochToBoot) {
+  time_.AddNextTimestamp(
+      distributed_clock::epoch(),
+      {BootTimestamp{0, monotonic_clock::epoch()},
+       BootTimestamp{0, monotonic_clock::epoch() - chrono::seconds(1)}});
+  bool observed_startup_0 = false;
+  bool observed_startup_1 = false;
+  bool observed_on_run_1 = false;
+  schedulers_.at(0).ScheduleOnStartup([this, &observed_startup_0]() {
+    observed_startup_0 = true;
+    EXPECT_FALSE(schedulers_.at(0).is_running());
+    EXPECT_FALSE(schedulers_.at(1).is_running());
+    EXPECT_EQ(distributed_clock::epoch(),
+              scheduler_scheduler_.distributed_now());
+    EXPECT_EQ(monotonic_clock::epoch(), schedulers_.at(0).monotonic_now());
+    EXPECT_EQ(monotonic_clock::epoch() - chrono::seconds(1),
+              schedulers_.at(1).monotonic_now());
+  });
+  schedulers_.at(1).ScheduleOnStartup([this, &observed_startup_1]() {
+    observed_startup_1 = true;
+    // Note that we do not *stop* execution on node zero just to get 1 started.
+    EXPECT_TRUE(schedulers_.at(0).is_running());
+    EXPECT_FALSE(schedulers_.at(1).is_running());
+    EXPECT_EQ(distributed_clock::epoch() + chrono::seconds(1),
+              scheduler_scheduler_.distributed_now());
+    EXPECT_EQ(monotonic_clock::epoch() + chrono::seconds(1),
+              schedulers_.at(0).monotonic_now());
+    EXPECT_EQ(monotonic_clock::epoch(), schedulers_.at(1).monotonic_now());
+  });
+  schedulers_.at(1).ScheduleOnRun([this, &observed_on_run_1]() {
+    observed_on_run_1 = true;
+    // Note that we do not *stop* execution on node zero just to get 1 started.
+    EXPECT_TRUE(schedulers_.at(0).is_running());
+    EXPECT_TRUE(schedulers_.at(1).is_running());
+    EXPECT_EQ(distributed_clock::epoch() + chrono::seconds(1),
+              scheduler_scheduler_.distributed_now());
+    EXPECT_EQ(monotonic_clock::epoch() + chrono::seconds(1),
+              schedulers_.at(0).monotonic_now());
+    EXPECT_EQ(monotonic_clock::epoch(), schedulers_.at(1).monotonic_now());
+  });
+
+  FunctionEvent e([]() {});
+  schedulers_.at(0).Schedule(monotonic_clock::epoch() + chrono::seconds(1), &e);
+  ParamRunFor(chrono::seconds(1));
+  EXPECT_TRUE(observed_startup_0);
+  EXPECT_TRUE(observed_startup_1);
+  EXPECT_TRUE(observed_on_run_1);
+}
+
+// Tests that a node that never boots does not get any of its handlers run.
+TEST_P(EventSchedulerParamTest, NodeNeverBootsIfAlwaysNegative) {
+  time_.AddNextTimestamp(
+      distributed_clock::epoch(),
+      {BootTimestamp{0, monotonic_clock::epoch()},
+       BootTimestamp{0, monotonic_clock::epoch() - chrono::seconds(10)}});
+  bool observed_startup_0 = false;
+  schedulers_.at(0).ScheduleOnStartup([this, &observed_startup_0]() {
+    observed_startup_0 = true;
+    EXPECT_FALSE(schedulers_.at(0).is_running());
+    EXPECT_FALSE(schedulers_.at(1).is_running());
+    EXPECT_EQ(distributed_clock::epoch(),
+              scheduler_scheduler_.distributed_now());
+    EXPECT_EQ(monotonic_clock::epoch(), schedulers_.at(0).monotonic_now());
+    EXPECT_EQ(monotonic_clock::epoch() - chrono::seconds(10),
+              schedulers_.at(1).monotonic_now());
+  });
+  schedulers_.at(1).ScheduleOnStartup(
+      []() { FAIL() << "Should never have hit startup handlers for node 1."; });
+  schedulers_.at(1).ScheduleOnRun(
+      []() { FAIL() << "Should never have hit OnRun handlers for node 1."; });
+  schedulers_.at(1).set_stopped(
+      []() { FAIL() << "Should never have hit stopped handlers for node 1."; });
+
+  FunctionEvent e([this]() { scheduler_scheduler_.Exit(); });
+  schedulers_.at(0).Schedule(monotonic_clock::epoch() + chrono::seconds(1), &e);
+  ParamRunFor(chrono::seconds(1));
+  EXPECT_TRUE(observed_startup_0);
+}
+
+// Checks for regressions in how the startup/shutdown handlers behave.
+TEST_P(EventSchedulerParamTest, StartupShutdownHandlers) {
+  StartClocksAtEpoch();
+  time_.AddNextTimestamp(
+      distributed_clock::epoch() + chrono::seconds(3),
+      {BootTimestamp{0, monotonic_clock::epoch() + chrono::seconds(3)},
+       BootTimestamp{0, monotonic_clock::epoch() + chrono::seconds(3)}});
+  time_.RebootAt(0, distributed_clock::epoch() + chrono::seconds(4));
+  // Expected behavior:
+  // If all handlers get called during a reboot, they should sequence as:
+  // * is_running_ = false
+  // * stopped()
+  // * on_shutdown()
+  // * on_startup()
+  // * started()
+  // * is_running_ = true
+  // * OnRun()
+  //
+  // on_shutdown handlers should not get called at end of execution (e.g., when
+  // TemporarilyStopAndRun is called)--only when a node reboots.
+  //
+  // startup and OnRun handlers get cleared after being called once; these are
+  // also the only handlers that can have more than one handler registered.
+  //
+  // Create counters for all the handlers on the 0 node. Create separate a/b
+  // counters for the handlers that can/should get cleared.
+  int shutdown_counter = 0;
+  int stopped_counter = 0;
+  int startup_counter_a = 0;
+  int startup_counter_b = 0;
+  int started_counter = 0;
+  int on_run_counter_a = 0;
+  int on_run_counter_b = 0;
+
+  schedulers_.at(1).set_on_shutdown([]() {
+    FAIL() << "Should never reach the node 1 shutdown handler, since it never "
+              "reboots.";
+  });
+
+  auto startup_handler_a = [this, &startup_counter_a]() {
+    EXPECT_FALSE(schedulers_.at(0).is_running());
+    ++startup_counter_a;
+  };
+
+  auto startup_handler_b = [this, &startup_counter_b]() {
+    EXPECT_FALSE(schedulers_.at(0).is_running());
+    ++startup_counter_b;
+  };
+
+  auto on_run_handler_a = [this, &on_run_counter_a]() {
+    EXPECT_TRUE(schedulers_.at(0).is_running());
+    ++on_run_counter_a;
+  };
+
+  auto on_run_handler_b = [this, &on_run_counter_b]() {
+    EXPECT_TRUE(schedulers_.at(0).is_running());
+    ++on_run_counter_b;
+  };
+
+  schedulers_.at(0).set_stopped([this, &stopped_counter]() {
+    EXPECT_FALSE(schedulers_.at(0).is_running());
+    ++stopped_counter;
+  });
+  schedulers_.at(0).set_on_shutdown(
+      [this, &shutdown_counter, startup_handler_a, on_run_handler_a]() {
+        EXPECT_FALSE(schedulers_.at(0).is_running());
+        schedulers_.at(0).ScheduleOnStartup(startup_handler_a);
+        schedulers_.at(0).ScheduleOnRun(on_run_handler_a);
+        ++shutdown_counter;
+      });
+  schedulers_.at(0).ScheduleOnStartup(startup_handler_a);
+  schedulers_.at(0).set_started([this, &started_counter]() {
+    EXPECT_FALSE(schedulers_.at(0).is_running());
+    ++started_counter;
+  });
+  schedulers_.at(0).ScheduleOnRun(on_run_handler_a);
+
+  FunctionEvent e([]() {});
+  schedulers_.at(0).Schedule(monotonic_clock::epoch() + chrono::seconds(1), &e);
+  ParamRunFor(std::chrono::seconds(1));
+  EXPECT_EQ(shutdown_counter, 0);
+  EXPECT_EQ(stopped_counter, 1);
+  EXPECT_EQ(started_counter, 1);
+  EXPECT_EQ(startup_counter_a, 1);
+  EXPECT_EQ(on_run_counter_a, 1);
+  EXPECT_EQ(startup_counter_b, 0);
+  EXPECT_EQ(on_run_counter_b, 0);
+
+  // In the middle, execute a TemporarilyStopAndRun. Use it to re-register the
+  // startup handlers.
+  schedulers_.at(0).ScheduleOnStartup(startup_handler_b);
+  schedulers_.at(0).ScheduleOnRun(on_run_handler_b);
+  FunctionEvent stop_and_run([this, startup_handler_a, on_run_handler_a]() {
+    scheduler_scheduler_.TemporarilyStopAndRun(
+        [this, startup_handler_a, on_run_handler_a]() {
+          schedulers_.at(0).ScheduleOnStartup(startup_handler_a);
+          schedulers_.at(0).ScheduleOnRun(on_run_handler_a);
+        });
+  });
+  schedulers_.at(1).Schedule(monotonic_clock::epoch() + chrono::seconds(2),
+                             &stop_and_run);
+  ParamRunFor(std::chrono::seconds(1));
+  EXPECT_EQ(shutdown_counter, 0);
+  EXPECT_EQ(stopped_counter, 3);
+  EXPECT_EQ(started_counter, 3);
+  EXPECT_EQ(startup_counter_a, 2);
+  EXPECT_EQ(on_run_counter_a, 2);
+  EXPECT_EQ(startup_counter_b, 1);
+  EXPECT_EQ(on_run_counter_b, 1);
+
+  // Next, execute a reboot in the middle of running and confirm that things
+  // tally correctly. We do not re-register the startup/on_run handlers before
+  // starting here, but do in the shutdown handler, so should see the A handlers
+  // increment.
+  // We need to schedule at least one event so that the reboot is actually
+  // observable (otherwise Run() will just terminate immediately, since there
+  // are no scheduled events that could possibly observe the reboot anyways).
+  schedulers_.at(1).Schedule(monotonic_clock::epoch() + chrono::seconds(5), &e);
+  ParamRunFor(std::chrono::seconds(5));
+  EXPECT_EQ(shutdown_counter, 1);
+  EXPECT_EQ(stopped_counter, 5);
+  EXPECT_EQ(started_counter, 5);
+  EXPECT_EQ(startup_counter_a, 3);
+  EXPECT_EQ(on_run_counter_a, 3);
+  EXPECT_EQ(startup_counter_b, 1);
+  EXPECT_EQ(on_run_counter_b, 1);
+}
+
+// Test that descheduling an already scheduled event doesn't run the event.
+TEST_P(EventSchedulerParamTest, DescheduleEvent) {
+  StartClocksAtEpoch();
+  int counter = 0;
+  FunctionEvent e([&counter]() { counter += 1; });
+  auto token = schedulers_.at(0).Schedule(
+      monotonic_clock::epoch() + chrono::seconds(1), &e);
+  schedulers_.at(0).Deschedule(token);
+  ParamRunFor(std::chrono::seconds(2));
+  EXPECT_EQ(counter, 0);
+}
+
+// Test that TemporarilyStopAndRun respects and preserves running.
+TEST_P(EventSchedulerParamTest, TemporarilyStopAndRun) {
+  StartClocksAtEpoch();
+  int counter = 0;
+
+  scheduler_scheduler_.TemporarilyStopAndRun([this]() {
+    SCOPED_TRACE("StopAndRun while stopped.");
+    CheckSchedulersRunning(false);
+  });
+  {
+    SCOPED_TRACE("After StopAndRun while stopped.");
+    CheckSchedulersRunning(false);
+  }
+
+  FunctionEvent e([&]() {
+    counter += 1;
+    {
+      SCOPED_TRACE("Before StopAndRun while running.");
+      CheckSchedulersRunning(true);
+    }
+    scheduler_scheduler_.TemporarilyStopAndRun([&]() {
+      SCOPED_TRACE("StopAndRun while running.");
+      CheckSchedulersRunning(false);
+    });
+    {
+      SCOPED_TRACE("After StopAndRun while running.");
+      CheckSchedulersRunning(true);
+    }
+  });
+  schedulers_.at(0).Schedule(monotonic_clock::epoch() + chrono::seconds(1), &e);
+  ParamRunFor(std::chrono::seconds(1));
+  EXPECT_EQ(counter, 1);
+}
+
+// Test that TemporarilyStopAndRun leaves stopped nodes stopped.
+TEST_P(EventSchedulerParamTest, TemporarilyStopAndRunStaggeredStart) {
+  time_.AddNextTimestamp(
+      distributed_clock::epoch(),
+      {BootTimestamp{0, monotonic_clock::epoch()},
+       BootTimestamp{0, monotonic_clock::epoch() - chrono::seconds(10)}});
+  int counter = 0;
+
+  schedulers_[1].ScheduleOnRun([]() { FAIL(); });
+  schedulers_[1].ScheduleOnStartup([]() { FAIL(); });
+  schedulers_[1].set_on_shutdown([]() { FAIL(); });
+  schedulers_[1].set_started([]() { FAIL(); });
+  schedulers_[1].set_stopped([]() { FAIL(); });
+
+  FunctionEvent e([this, &counter]() {
+    counter += 1;
+    EXPECT_TRUE(schedulers_[0].is_running());
+    EXPECT_FALSE(schedulers_[1].is_running());
+    scheduler_scheduler_.TemporarilyStopAndRun([&]() {
+      SCOPED_TRACE("StopAndRun while running.");
+      CheckSchedulersRunning(false);
+    });
+    EXPECT_TRUE(schedulers_[0].is_running());
+    EXPECT_FALSE(schedulers_[1].is_running());
+  });
+  FunctionEvent exiter([this]() { scheduler_scheduler_.Exit(); });
+  schedulers_.at(0).Schedule(monotonic_clock::epoch() + chrono::seconds(1), &e);
+  schedulers_.at(0).Schedule(monotonic_clock::epoch() + chrono::seconds(2),
+                             &exiter);
+  ParamRunFor(std::chrono::seconds(1));
+  EXPECT_EQ(counter, 1);
+}
+
+INSTANTIATE_TEST_SUITE_P(EventSchedulerParamTest, EventSchedulerParamTest,
+                         testing::Values(RunMode::kRun, RunMode::kRunFor));
+
 }  // namespace aos
diff --git a/aos/events/logging/BUILD b/aos/events/logging/BUILD
index 9f6234a..0afdda0 100644
--- a/aos/events/logging/BUILD
+++ b/aos/events/logging/BUILD
@@ -1,10 +1,11 @@
 load("@com_github_google_flatbuffers//:build_defs.bzl", "flatbuffer_cc_library")
 load("//aos:config.bzl", "aos_config")
+load("//aos:flatbuffers.bzl", "cc_static_flatbuffer")
 
 flatbuffer_cc_library(
     name = "logger_fbs",
     srcs = ["logger.fbs"],
-    gen_reflections = 1,
+    gen_reflections = True,
     includes = [
         "//aos:configuration_fbs_includes",
     ],
@@ -12,6 +13,20 @@
     visibility = ["//visibility:public"],
 )
 
+flatbuffer_cc_library(
+    name = "replay_timing_fbs",
+    srcs = ["replay_timing.fbs"],
+    gen_reflections = True,
+    target_compatible_with = ["@platforms//os:linux"],
+)
+
+cc_static_flatbuffer(
+    name = "replay_timing_schema",
+    function = "aos::timing::ReplayTimingSchema",
+    target = ":replay_timing_fbs_reflection_out",
+    visibility = ["//visibility:public"],
+)
+
 cc_library(
     name = "boot_timestamp",
     srcs = ["boot_timestamp.cc"],
@@ -265,9 +280,13 @@
         ":log_writer",
         ":logfile_utils",
         ":logger_fbs",
+        ":replay_timing_fbs",
+        "//aos:condition",
         "//aos:uuid",
         "//aos/events:event_loop",
+        "//aos/events:shm_event_loop",
         "//aos/events:simulated_event_loop",
+        "//aos/mutex",
         "//aos/network:message_bridge_server_fbs",
         "//aos/network:multinode_timestamp_filter",
         "//aos/network:remote_message_fbs",
@@ -276,6 +295,7 @@
         "//aos/network:timestamp_filter",
         "//aos/time",
         "//aos/util:file",
+        "//aos/util:threaded_queue",
         "@com_github_google_flatbuffers//:flatbuffers",
         "@com_google_absl//absl/strings",
     ],
@@ -446,6 +466,41 @@
     deps = ["//aos/events:aos_config"],
 )
 
+aos_config(
+    name = "multinode_pingpong_triangle_split_config",
+    src = "multinode_pingpong_triangle_split.json",
+    flatbuffers = [
+        "//aos/events:ping_fbs",
+        "//aos/events:pong_fbs",
+        "//aos/network:message_bridge_client_fbs",
+        "//aos/network:message_bridge_server_fbs",
+        "//aos/network:remote_message_fbs",
+        "//aos/network:timestamp_fbs",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    deps = ["//aos/events:aos_config"],
+)
+
+cc_test(
+    name = "realtime_replay_test",
+    srcs = ["realtime_replay_test.cc"],
+    data = [
+        "//aos/events:pingpong_config",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    deps = [
+        ":log_reader",
+        ":log_writer",
+        "//aos/events:ping_lib",
+        "//aos/events:pong_lib",
+        "//aos/events:shm_event_loop",
+        "//aos/events:simulated_event_loop",
+        "//aos/testing:googletest",
+        "//aos/testing:path",
+        "//aos/testing:tmpdir",
+    ],
+)
+
 cc_test(
     name = "logger_test",
     srcs = ["logger_test.cc"],
@@ -460,6 +515,7 @@
         ":multinode_pingpong_split4_config",
         ":multinode_pingpong_split4_reliable_config",
         ":multinode_pingpong_split_config",
+        ":multinode_pingpong_triangle_split_config",
         "//aos/events:pingpong_config",
     ],
     shard_count = 10,
diff --git a/aos/events/logging/log_reader.cc b/aos/events/logging/log_reader.cc
index 1c3a349..87ad72c 100644
--- a/aos/events/logging/log_reader.cc
+++ b/aos/events/logging/log_reader.cc
@@ -15,6 +15,7 @@
 #include "aos/events/logging/logfile_sorting.h"
 #include "aos/events/logging/logger_generated.h"
 #include "aos/flatbuffer_merge.h"
+#include "aos/json_to_flatbuffer.h"
 #include "aos/network/multinode_timestamp_filter.h"
 #include "aos/network/remote_message_generated.h"
 #include "aos/network/remote_message_schema.h"
@@ -46,6 +47,19 @@
     end_time, "",
     "If set, end at this point in time in the log on the realtime clock.");
 
+DEFINE_bool(drop_realtime_messages_before_start, false,
+            "If set, will drop any messages sent before the start of the "
+            "logfile in realtime replay. Setting this guarantees consistency "
+            "in timing with the original logfile, but means that you lose "
+            "access to fetched low-frequency messages.");
+
+DEFINE_double(
+    threaded_look_ahead_seconds, 2.0,
+    "Time, in seconds, to add to look-ahead when using multi-threaded replay. "
+    "Can validly be zero, but higher values are encouraged for realtime replay "
+    "in order to prevent the replay from ever having to block on waiting for "
+    "the reader to find the next message.");
+
 namespace aos {
 namespace configuration {
 // We don't really want to expose this publicly, but log reader doesn't really
@@ -162,6 +176,11 @@
 
   ~EventNotifier() { event_timer_->Disable(); }
 
+  // Sets the clock offset for realtime playback.
+  void SetClockOffset(std::chrono::nanoseconds clock_offset) {
+    clock_offset_ = clock_offset;
+  }
+
   // Returns the event trigger time.
   realtime_clock::time_point realtime_event_time() const {
     return realtime_event_time_;
@@ -189,7 +208,7 @@
       // Whops, time went backwards.  Just do it now.
       HandleTime();
     } else {
-      event_timer_->Setup(candidate_monotonic);
+      event_timer_->Setup(candidate_monotonic + clock_offset_);
     }
   }
 
@@ -208,6 +227,8 @@
   const realtime_clock::time_point realtime_event_time_ =
       realtime_clock::min_time;
 
+  std::chrono::nanoseconds clock_offset_{0};
+
   bool called_ = false;
 };
 
@@ -325,9 +346,7 @@
   }
 
   if (!configuration::MultiNode(configuration())) {
-    states_.emplace_back(std::make_unique<State>(
-        std::make_unique<TimestampMapper>(FilterPartsForNode(log_files_, "")),
-        nullptr));
+    states_.resize(1);
   } else {
     if (replay_configuration) {
       CHECK_EQ(logged_configuration()->nodes()->size(),
@@ -405,6 +424,46 @@
   state->OnStart(std::move(fn));
 }
 
+void LogReader::State::QueueThreadUntil(BootTimestamp time) {
+  if (threading_ == ThreadedBuffering::kYes) {
+    CHECK(!message_queuer_.has_value()) << "Can't start thread twice.";
+    message_queuer_.emplace(
+        [this](const BootTimestamp queue_until) {
+          // This will be called whenever anything prompts us for any state
+          // change; there may be wakeups that result in us not having any new
+          // data to push (even if we aren't done), in which case we will return
+          // nullopt but not done().
+          if (last_queued_message_.has_value() &&
+              queue_until < last_queued_message_) {
+            return util::ThreadedQueue<TimestampedMessage,
+                                       BootTimestamp>::PushResult{
+                std::nullopt, false,
+                last_queued_message_ == BootTimestamp::max_time()};
+          }
+          TimestampedMessage *message = timestamp_mapper_->Front();
+          // Upon reaching the end of the log, exit.
+          if (message == nullptr) {
+            last_queued_message_ = BootTimestamp::max_time();
+            return util::ThreadedQueue<TimestampedMessage,
+                                       BootTimestamp>::PushResult{std::nullopt,
+                                                                  false, true};
+          }
+          last_queued_message_ = message->monotonic_event_time;
+          const util::ThreadedQueue<TimestampedMessage,
+                                    BootTimestamp>::PushResult result{
+              *message, queue_until >= last_queued_message_, false};
+          timestamp_mapper_->PopFront();
+          SeedSortedMessages();
+          return result;
+        },
+        time);
+    // Spin until the first few seconds of messages are queued up so that we
+    // don't end up with delays/inconsistent timing during the first few seconds
+    // of replay.
+    message_queuer_->WaitForNoMoreWork();
+  }
+}
+
 void LogReader::State::OnStart(std::function<void()> fn) {
   on_starts_.emplace_back(std::move(fn));
 }
@@ -464,6 +523,51 @@
 
   stopped_ = true;
   started_ = true;
+  if (message_queuer_.has_value()) {
+    message_queuer_->StopPushing();
+  }
+}
+
+std::vector<
+    std::pair<const aos::Channel *, NodeEventLoopFactory::ExclusiveSenders>>
+LogReader::State::NonExclusiveChannels() {
+  CHECK_NOTNULL(node_event_loop_factory_);
+  const aos::Configuration *config = node_event_loop_factory_->configuration();
+  std::vector<
+      std::pair<const aos::Channel *, NodeEventLoopFactory::ExclusiveSenders>>
+      result{// Timing reports can be sent by logged and replayed applications.
+             {aos::configuration::GetChannel(config, "/aos",
+                                             "aos.timing.Report", "", node_),
+              NodeEventLoopFactory::ExclusiveSenders::kNo},
+             // AOS_LOG may be used in the log and in replay.
+             {aos::configuration::GetChannel(
+                  config, "/aos", "aos.logging.LogMessageFbs", "", node_),
+              NodeEventLoopFactory::ExclusiveSenders::kNo}};
+  for (const Node *const node : configuration::GetNodes(config)) {
+    if (node == nullptr) {
+      break;
+    }
+    const Channel *const old_timestamp_channel = aos::configuration::GetChannel(
+        config,
+        absl::StrCat("/aos/remote_timestamps/", node->name()->string_view()),
+        "aos.message_bridge.RemoteMessage", "", node_, /*quiet=*/true);
+    // The old-style remote timestamp channel can be populated from any
+    // channel, simulated or replayed.
+    if (old_timestamp_channel != nullptr) {
+      result.push_back(std::make_pair(
+          old_timestamp_channel, NodeEventLoopFactory::ExclusiveSenders::kNo));
+    }
+  }
+  // Remove any channels that weren't found due to not existing in the
+  // config.
+  for (size_t ii = 0; ii < result.size();) {
+    if (result[ii].first == nullptr) {
+      result.erase(result.begin() + ii);
+    } else {
+      ++ii;
+    }
+  }
+  return result;
 }
 
 void LogReader::Register() {
@@ -490,11 +594,15 @@
     std::vector<LogParts> filtered_parts = FilterPartsForNode(
         log_files_, node != nullptr ? node->name()->string_view() : "");
 
+    // We don't run with threading on the buffering for simulated event loops
+    // because we haven't attempted to validate how the interactions beteen the
+    // buffering and the timestamp mapper works when running multiple nodes
+    // concurrently.
     states_[node_index] = std::make_unique<State>(
         filtered_parts.size() == 0u
             ? nullptr
             : std::make_unique<TimestampMapper>(std::move(filtered_parts)),
-        node);
+        filters_.get(), node, State::ThreadedBuffering::kNo);
     State *state = states_[node_index].get();
     state->SetNodeEventLoopFactory(
         event_loop_factory_->GetNodeEventLoopFactory(node),
@@ -532,7 +640,7 @@
 
     // If we didn't find any log files with data in them, we won't ever get a
     // callback or be live.  So skip the rest of the setup.
-    if (state->OldestMessageTime() == BootTimestamp::max_time()) {
+    if (state->SingleThreadedOldestMessageTime() == BootTimestamp::max_time()) {
       continue;
     }
     ++live_nodes_;
@@ -581,7 +689,7 @@
 
     // If we are replaying a log, we don't want a bunch of redundant messages
     // from both the real message bridge and simulated message bridge.
-    event_loop_factory_->DisableStatistics();
+    event_loop_factory_->PermanentlyDisableStatistics();
   }
 
   // Write pseudo start times out to file now that we are all setup.
@@ -661,8 +769,58 @@
   return nullptr;
 }
 
+// TODO(jkuszmaul): Make in-line modifications to
+// ServerStatistics/ClientStatistics messages for ShmEventLoop-based replay to
+// avoid messing up anything that depends on them having valid offsets.
 void LogReader::Register(EventLoop *event_loop) {
-  Register(event_loop, event_loop->node());
+  filters_ =
+      std::make_unique<message_bridge::MultiNodeNoncausalOffsetEstimator>(
+          event_loop->configuration(), logged_configuration(),
+          log_files_[0].boots, FLAGS_skip_order_validation,
+          chrono::duration_cast<chrono::nanoseconds>(
+              chrono::duration<double>(FLAGS_time_estimation_buffer_seconds)));
+
+  std::vector<TimestampMapper *> timestamp_mappers;
+  for (const Node *node : configuration::GetNodes(configuration())) {
+    const size_t node_index =
+        configuration::GetNodeIndex(configuration(), node);
+    std::vector<LogParts> filtered_parts = FilterPartsForNode(
+        log_files_, node != nullptr ? node->name()->string_view() : "");
+
+    states_[node_index] = std::make_unique<State>(
+        filtered_parts.size() == 0u
+            ? nullptr
+            : std::make_unique<TimestampMapper>(std::move(filtered_parts)),
+        filters_.get(), node, State::ThreadedBuffering::kYes);
+    State *state = states_[node_index].get();
+
+    state->SetChannelCount(logged_configuration()->channels()->size());
+    timestamp_mappers.emplace_back(state->timestamp_mapper());
+  }
+
+  filters_->SetTimestampMappers(std::move(timestamp_mappers));
+
+  for (const Node *node : configuration::GetNodes(configuration())) {
+    const size_t node_index =
+        configuration::GetNodeIndex(configuration(), node);
+    State *state = states_[node_index].get();
+    for (const Node *other_node : configuration::GetNodes(configuration())) {
+      const size_t other_node_index =
+          configuration::GetNodeIndex(configuration(), other_node);
+      State *other_state = states_[other_node_index].get();
+      if (other_state != state) {
+        state->AddPeer(other_state);
+      }
+    }
+  }
+  for (const Node *node : configuration::GetNodes(configuration())) {
+    if (node == nullptr || node->name()->string_view() ==
+                               event_loop->node()->name()->string_view()) {
+      Register(event_loop, event_loop->node());
+    } else {
+      Register(nullptr, node);
+    }
+  }
 }
 
 void LogReader::Register(EventLoop *event_loop, const Node *node) {
@@ -671,10 +829,13 @@
 
   // If we didn't find any log files with data in them, we won't ever get a
   // callback or be live.  So skip the rest of the setup.
-  if (state->OldestMessageTime() == BootTimestamp::max_time()) {
+  if (state->SingleThreadedOldestMessageTime() == BootTimestamp::max_time()) {
     return;
   }
-  ++live_nodes_;
+
+  if (event_loop != nullptr) {
+    ++live_nodes_;
+  }
 
   if (event_loop_factory_ != nullptr) {
     event_loop_factory_->GetNodeEventLoopFactory(node)->OnStartup(
@@ -687,14 +848,14 @@
 }
 
 void LogReader::RegisterDuringStartup(EventLoop *event_loop, const Node *node) {
-  if (event_loop) {
+  if (event_loop != nullptr) {
     CHECK(event_loop->configuration() == configuration());
   }
 
   State *state =
       states_[configuration::GetNodeIndex(configuration(), node)].get();
 
-  if (!event_loop) {
+  if (event_loop == nullptr) {
     state->ClearTimeFlags();
   }
 
@@ -703,7 +864,7 @@
   // We don't run timing reports when trying to print out logged data, because
   // otherwise we would end up printing out the timing reports themselves...
   // This is only really relevant when we are replaying into a simulation.
-  if (event_loop) {
+  if (event_loop != nullptr) {
     event_loop->SkipTimingReport();
     event_loop->SkipAosLog();
   }
@@ -716,10 +877,10 @@
         logged_configuration()->channels()->Get(logged_channel_index));
 
     const bool logged = channel->logger() != LoggerConfig::NOT_LOGGED;
-
     message_bridge::NoncausalOffsetEstimator *filter = nullptr;
 
     State *source_state = nullptr;
+
     if (!configuration::ChannelIsSendableOnNode(channel, node) &&
         configuration::ChannelIsReadableOnNode(channel, node)) {
       const Node *source_node = configuration::GetNode(
@@ -741,7 +902,10 @@
     state->SetChannel(
         logged_channel_index,
         configuration::ChannelIndex(configuration(), channel),
-        event_loop && logged ? event_loop->MakeRawSender(channel) : nullptr,
+        event_loop && logged &&
+                configuration::ChannelIsReadableOnNode(channel, node)
+            ? event_loop->MakeRawSender(channel)
+            : nullptr,
         filter, is_forwarded, source_state);
 
     if (is_forwarded && logged) {
@@ -758,10 +922,12 @@
               states_[configuration::GetNodeIndex(
                           configuration(), connection->name()->string_view())]
                   .get();
-          destination_state->SetRemoteTimestampSender(
-              logged_channel_index,
-              event_loop ? state->RemoteTimestampSender(channel, connection)
-                         : nullptr);
+          if (destination_state) {
+            destination_state->SetRemoteTimestampSender(
+                logged_channel_index,
+                event_loop ? state->RemoteTimestampSender(channel, connection)
+                           : nullptr);
+          }
         }
       }
     }
@@ -775,14 +941,12 @@
   }
 
   state->set_timer_handler(event_loop->AddTimer([this, state]() {
-    VLOG(1) << "Starting sending " << MaybeNodeName(state->event_loop()->node())
-            << "at " << state->event_loop()->context().monotonic_event_time
-            << " now " << state->monotonic_now();
-    if (state->OldestMessageTime() == BootTimestamp::max_time()) {
+    if (state->MultiThreadedOldestMessageTime() == BootTimestamp::max_time()) {
       --live_nodes_;
       VLOG(1) << MaybeNodeName(state->event_loop()->node()) << "Node down!";
-      if (exit_on_finish_ && live_nodes_ == 0) {
-        event_loop_factory_->Exit();
+      if (exit_on_finish_ && live_nodes_ == 0 &&
+          event_loop_factory_ != nullptr) {
+        CHECK_NOTNULL(event_loop_factory_)->Exit();
       }
       return;
     }
@@ -794,32 +958,37 @@
 
     const monotonic_clock::time_point monotonic_now =
         state->event_loop()->context().monotonic_event_time;
-    if (!FLAGS_skip_order_validation) {
-      CHECK(monotonic_now == timestamped_message.monotonic_event_time.time)
-          << ": " << FlatbufferToJson(state->event_loop()->node()) << " Now "
-          << monotonic_now << " trying to send "
-          << timestamped_message.monotonic_event_time << " failure "
-          << state->DebugString();
-    } else if (BootTimestamp{.boot = state->boot_count(),
-                             .time = monotonic_now} !=
-               timestamped_message.monotonic_event_time) {
-      LOG(WARNING) << "Check failed: monotonic_now == "
-                      "timestamped_message.monotonic_event_time) ("
-                   << monotonic_now << " vs. "
-                   << timestamped_message.monotonic_event_time
-                   << "): " << FlatbufferToJson(state->event_loop()->node())
-                   << " Now " << monotonic_now << " trying to send "
-                   << timestamped_message.monotonic_event_time << " failure "
-                   << state->DebugString();
+    if (event_loop_factory_ != nullptr) {
+      // Only enforce exact timing in simulation.
+      if (!FLAGS_skip_order_validation) {
+        CHECK(monotonic_now == timestamped_message.monotonic_event_time.time)
+            << ": " << FlatbufferToJson(state->event_loop()->node()) << " Now "
+            << monotonic_now << " trying to send "
+            << timestamped_message.monotonic_event_time << " failure "
+            << state->DebugString();
+      } else if (BootTimestamp{.boot = state->boot_count(),
+                               .time = monotonic_now} !=
+                 timestamped_message.monotonic_event_time) {
+        LOG(WARNING) << "Check failed: monotonic_now == "
+                        "timestamped_message.monotonic_event_time) ("
+                     << monotonic_now << " vs. "
+                     << timestamped_message.monotonic_event_time
+                     << "): " << FlatbufferToJson(state->event_loop()->node())
+                     << " Now " << monotonic_now << " trying to send "
+                     << timestamped_message.monotonic_event_time << " failure "
+                     << state->DebugString();
+      }
     }
 
     if (timestamped_message.monotonic_event_time.time >
             state->monotonic_start_time(
                 timestamped_message.monotonic_event_time.boot) ||
-        event_loop_factory_ != nullptr) {
+        event_loop_factory_ != nullptr ||
+        !FLAGS_drop_realtime_messages_before_start) {
       if (timestamped_message.data != nullptr && !state->found_last_message()) {
         if (timestamped_message.monotonic_remote_time !=
-            BootTimestamp::min_time()) {
+                BootTimestamp::min_time() &&
+            !FLAGS_skip_order_validation && event_loop_factory_ != nullptr) {
           // Confirm that the message was sent on the sending node before the
           // destination node (this node).  As a proxy, do this by making sure
           // that time on the source node is past when the message was sent.
@@ -890,7 +1059,8 @@
                                  timestamped_message.realtime_event_time);
 
         VLOG(1) << MaybeNodeName(state->event_loop()->node()) << "Sending "
-                << timestamped_message.monotonic_event_time;
+                << timestamped_message.monotonic_event_time << " "
+                << state->DebugString();
         // TODO(austin): std::move channel_data in and make that efficient in
         // simulation.
         state->Send(std::move(timestamped_message));
@@ -982,16 +1152,16 @@
         }
       }
     } else {
-      LOG(WARNING) << "Not sending data from before the start of the log file. "
-                   << timestamped_message.monotonic_event_time.time
-                          .time_since_epoch()
-                          .count()
-                   << " start "
-                   << monotonic_start_time().time_since_epoch().count() << " "
-                   << *timestamped_message.data;
+      LOG(WARNING)
+          << "Not sending data from before the start of the log file. "
+          << timestamped_message.monotonic_event_time.time.time_since_epoch()
+                 .count()
+          << " start "
+          << monotonic_start_time(state->node()).time_since_epoch().count()
+          << " timestamped_message.data is null";
     }
 
-    const BootTimestamp next_time = state->OldestMessageTime();
+    const BootTimestamp next_time = state->MultiThreadedOldestMessageTime();
     if (next_time != BootTimestamp::max_time()) {
       if (next_time.boot != state->boot_count()) {
         VLOG(1) << "Next message for "
@@ -1002,18 +1172,28 @@
         state->NotifyLogfileEnd();
         return;
       }
-      VLOG(1) << "Scheduling " << MaybeNodeName(state->event_loop()->node())
-              << "wakeup for " << next_time.time << "("
-              << state->ToDistributedClock(next_time.time)
-              << " distributed), now is " << state->monotonic_now();
+      if (event_loop_factory_ != nullptr) {
+        VLOG(1) << "Scheduling " << MaybeNodeName(state->event_loop()->node())
+                << "wakeup for " << next_time.time << "("
+                << state->ToDistributedClock(next_time.time)
+                << " distributed), now is " << state->monotonic_now();
+      } else {
+        VLOG(1) << "Scheduling " << MaybeNodeName(state->event_loop()->node())
+                << "wakeup for " << next_time.time << ", now is "
+                << state->monotonic_now();
+      }
+      // TODO(james): This can result in negative times getting passed-through
+      // in realtime replay.
       state->Setup(next_time.time);
     } else {
       VLOG(1) << MaybeNodeName(state->event_loop()->node())
               << "No next message, scheduling shutdown";
       state->NotifyLogfileEnd();
       // Set a timer up immediately after now to die. If we don't do this,
-      // then the senders waiting on the message we just read will never get
+      // then the watchers waiting on the message we just read will never get
       // called.
+      // Doesn't apply to single-EventLoop replay since the watchers in question
+      // are not under our control.
       if (event_loop_factory_ != nullptr) {
         state->Setup(monotonic_now + event_loop_factory_->send_delay() +
                      std::chrono::nanoseconds(1));
@@ -1025,7 +1205,9 @@
             << state->monotonic_now();
   }));
 
-  if (state->OldestMessageTime() != BootTimestamp::max_time()) {
+  state->SeedSortedMessages();
+
+  if (state->SingleThreadedOldestMessageTime() != BootTimestamp::max_time()) {
     state->set_startup_timer(
         event_loop->AddTimer([state]() { state->NotifyLogfileStart(); }));
     if (start_time_ != realtime_clock::min_time) {
@@ -1035,8 +1217,16 @@
       state->SetEndTimeFlag(end_time_);
     }
     event_loop->OnRun([state]() {
-      BootTimestamp next_time = state->OldestMessageTime();
+      BootTimestamp next_time = state->SingleThreadedOldestMessageTime();
       CHECK_EQ(next_time.boot, state->boot_count());
+      // Queue up messages and then set clock offsets (we don't want to set
+      // clock offsets before we've done the work of getting the first messages
+      // primed).
+      state->QueueThreadUntil(
+          next_time + std::chrono::duration_cast<std::chrono::nanoseconds>(
+                          std::chrono::duration<double>(
+                              FLAGS_threaded_look_ahead_seconds)));
+      state->MaybeSetClockOffset();
       state->Setup(next_time.time);
       state->SetupStartupTimer();
     });
@@ -1451,9 +1641,14 @@
   return remapped_channel;
 }
 
-LogReader::State::State(std::unique_ptr<TimestampMapper> timestamp_mapper,
-                        const Node *node)
-    : timestamp_mapper_(std::move(timestamp_mapper)), node_(node) {}
+LogReader::State::State(
+    std::unique_ptr<TimestampMapper> timestamp_mapper,
+    message_bridge::MultiNodeNoncausalOffsetEstimator *multinode_filters,
+    const Node *node, LogReader::State::ThreadedBuffering threading)
+    : timestamp_mapper_(std::move(timestamp_mapper)),
+      node_(node),
+      multinode_filters_(multinode_filters),
+      threading_(threading) {}
 
 void LogReader::State::AddPeer(State *peer) {
   if (timestamp_mapper_ && peer->timestamp_mapper_) {
@@ -1499,6 +1694,52 @@
   factory_channel_index_[logged_channel_index] = factory_channel_index;
 }
 
+void LogReader::State::TrackMessageSendTiming(
+    const RawSender &sender, monotonic_clock::time_point expected_send_time) {
+  if (event_loop_ == nullptr || !timing_statistics_sender_.valid()) {
+    return;
+  }
+
+  timing::MessageTimingT sample;
+  sample.channel = configuration::ChannelIndex(event_loop_->configuration(),
+                                               sender.channel());
+  sample.expected_send_time = expected_send_time.time_since_epoch().count();
+  sample.actual_send_time =
+      sender.monotonic_sent_time().time_since_epoch().count();
+  sample.send_time_error = aos::time::DurationInSeconds(
+      expected_send_time - sender.monotonic_sent_time());
+  send_timings_.push_back(sample);
+
+  // Somewhat arbitrarily send out timing information in batches of 100. No need
+  // to create excessive overhead in regenerated logfiles.
+  // TODO(james): The overhead may be fine.
+  constexpr size_t kMaxTimesPerStatisticsMessage = 100;
+  CHECK(timing_statistics_sender_.valid());
+  if (send_timings_.size() == kMaxTimesPerStatisticsMessage) {
+    SendMessageTimings();
+  }
+}
+
+void LogReader::State::SendMessageTimings() {
+  if (send_timings_.empty() || !timing_statistics_sender_.valid()) {
+    return;
+  }
+  auto builder = timing_statistics_sender_.MakeBuilder();
+  std::vector<flatbuffers::Offset<timing::MessageTiming>> timing_offsets;
+  for (const auto &timing : send_timings_) {
+    timing_offsets.push_back(
+        timing::MessageTiming::Pack(*builder.fbb(), &timing));
+  }
+  send_timings_.clear();
+  flatbuffers::Offset<
+      flatbuffers::Vector<flatbuffers::Offset<timing::MessageTiming>>>
+      timings_offset = builder.fbb()->CreateVector(timing_offsets);
+  timing::ReplayTiming::Builder timing_builder =
+      builder.MakeBuilder<timing::ReplayTiming>();
+  timing_builder.add_messages(timings_offset);
+  timing_statistics_sender_.CheckOk(builder.Send(timing_builder.Finish()));
+}
+
 bool LogReader::State::Send(const TimestampedMessage &timestamped_message) {
   aos::RawSender *sender = channels_[timestamped_message.channel_index].get();
   CHECK(sender);
@@ -1572,6 +1813,23 @@
              source_state->boot_count());
   }
 
+  if (event_loop_factory_ != nullptr &&
+      channel_source_state_[timestamped_message.channel_index] != nullptr &&
+      multinode_filters_ != nullptr) {
+    // Sanity check that we are using consistent boot uuids.
+    State *source_state =
+        channel_source_state_[timestamped_message.channel_index];
+    CHECK_EQ(multinode_filters_->boot_uuid(
+                 configuration::GetNodeIndex(event_loop_->configuration(),
+                                             source_state->node()),
+                 timestamped_message.monotonic_remote_time.boot),
+             CHECK_NOTNULL(
+                 CHECK_NOTNULL(
+                     channel_source_state_[timestamped_message.channel_index])
+                     ->event_loop_)
+                 ->boot_uuid());
+  }
+
   // Send!  Use the replayed queue index here instead of the logged queue index
   // for the remote queue index.  This makes re-logging work.
   const auto err = sender->Send(
@@ -1580,11 +1838,22 @@
       timestamped_message.monotonic_remote_time.time,
       timestamped_message.realtime_remote_time, remote_queue_index,
       (channel_source_state_[timestamped_message.channel_index] != nullptr
-           ? CHECK_NOTNULL(
-                 channel_source_state_[timestamped_message.channel_index])
-                 ->event_loop_->boot_uuid()
+           ? CHECK_NOTNULL(multinode_filters_)
+                 ->boot_uuid(configuration::GetNodeIndex(
+                                 event_loop_->configuration(),
+                                 channel_source_state_[timestamped_message
+                                                           .channel_index]
+                                     ->node()),
+                             timestamped_message.monotonic_remote_time.boot)
            : event_loop_->boot_uuid()));
   if (err != RawSender::Error::kOk) return false;
+  if (monotonic_start_time(timestamped_message.monotonic_event_time.boot) <=
+      timestamped_message.monotonic_event_time.time) {
+    // Only track errors for non-fetched messages.
+    TrackMessageSendTiming(
+        *sender,
+        timestamped_message.monotonic_event_time.time + clock_offset());
+  }
 
   if (queue_index_map_[timestamped_message.channel_index]) {
     CHECK_EQ(timestamped_message.monotonic_event_time.boot, boot_count());
@@ -1629,6 +1898,11 @@
     // map.
   } else if (remote_timestamp_senders_[timestamped_message.channel_index] !=
              nullptr) {
+    // TODO(james): Currently, If running replay against a single event loop,
+    // remote timestamps will not get replayed because this code-path only
+    // gets triggered on the event loop that receives the forwarded message
+    // that the timestamps correspond to. This code, as written, also doesn't
+    // correctly handle a non-zero clock_offset for the *_remote_time fields.
     State *source_state =
         CHECK_NOTNULL(channel_source_state_[timestamped_message.channel_index]);
 
@@ -1802,27 +2076,55 @@
 }
 
 TimestampedMessage LogReader::State::PopOldest() {
-  CHECK(timestamp_mapper_ != nullptr);
-  TimestampedMessage *result_ptr = timestamp_mapper_->Front();
-  CHECK(result_ptr != nullptr);
+  if (message_queuer_.has_value()) {
+    std::optional<TimestampedMessage> message = message_queuer_->Pop();
+    CHECK(message.has_value()) << ": Unexpectedly ran out of messages.";
+    message_queuer_->SetState(
+        message.value().monotonic_event_time +
+        std::chrono::duration_cast<std::chrono::nanoseconds>(
+            std::chrono::duration<double>(FLAGS_threaded_look_ahead_seconds)));
+    return message.value();
+  } else {
+    CHECK(timestamp_mapper_ != nullptr);
+    TimestampedMessage *result_ptr = timestamp_mapper_->Front();
+    CHECK(result_ptr != nullptr);
 
-  TimestampedMessage result = std::move(*result_ptr);
+    TimestampedMessage result = std::move(*result_ptr);
 
-  VLOG(2) << MaybeNodeName(event_loop_->node()) << "PopOldest Popping "
-          << result.monotonic_event_time;
-  timestamp_mapper_->PopFront();
-  SeedSortedMessages();
+    VLOG(2) << MaybeNodeName(event_loop_->node()) << "PopOldest Popping "
+            << result.monotonic_event_time;
+    timestamp_mapper_->PopFront();
+    SeedSortedMessages();
 
-  CHECK_EQ(result.monotonic_event_time.boot, boot_count());
+    CHECK_EQ(result.monotonic_event_time.boot, boot_count());
 
-  VLOG(1) << "Popped " << result
-          << configuration::CleanedChannelToString(
-                 event_loop_->configuration()->channels()->Get(
-                     factory_channel_index_[result.channel_index]));
-  return result;
+    VLOG(1) << "Popped " << result
+            << configuration::CleanedChannelToString(
+                   event_loop_->configuration()->channels()->Get(
+                       factory_channel_index_[result.channel_index]));
+    return result;
+  }
 }
 
-BootTimestamp LogReader::State::OldestMessageTime() {
+BootTimestamp LogReader::State::MultiThreadedOldestMessageTime() {
+  if (!message_queuer_.has_value()) {
+    return SingleThreadedOldestMessageTime();
+  }
+  std::optional<TimestampedMessage> message = message_queuer_->Peek();
+  if (!message.has_value()) {
+    return BootTimestamp::max_time();
+  }
+  if (message.value().monotonic_event_time.boot == boot_count()) {
+    ObserveNextMessage(message.value().monotonic_event_time.time,
+                       message.value().realtime_event_time);
+  }
+  return message.value().monotonic_event_time;
+}
+
+BootTimestamp LogReader::State::SingleThreadedOldestMessageTime() {
+  CHECK(!message_queuer_.has_value())
+      << "Cannot use SingleThreadedOldestMessageTime() once the queuer thread "
+         "is created.";
   if (timestamp_mapper_ == nullptr) {
     return BootTimestamp::max_time();
   }
@@ -1832,12 +2134,10 @@
   }
   VLOG(2) << MaybeNodeName(node()) << "oldest message at "
           << result_ptr->monotonic_event_time.time;
-
   if (result_ptr->monotonic_event_time.boot == boot_count()) {
     ObserveNextMessage(result_ptr->monotonic_event_time.time,
                        result_ptr->realtime_event_time);
   }
-
   return result_ptr->monotonic_event_time;
 }
 
@@ -1862,6 +2162,7 @@
   event_loop_ = nullptr;
   timer_handler_ = nullptr;
   node_event_loop_factory_ = nullptr;
+  timing_statistics_sender_ = Sender<timing::ReplayTiming>();
 }
 
 void LogReader::State::SetStartTimeFlag(realtime_clock::time_point start_time) {
@@ -1934,5 +2235,27 @@
   }
 }
 
+void LogReader::State::MaybeSetClockOffset() {
+  if (node_event_loop_factory_ == nullptr) {
+    // If not running with simulated event loop, set the monotonic clock
+    // offset.
+    clock_offset_ = event_loop()->monotonic_now() - monotonic_start_time(0);
+
+    if (start_event_notifier_) {
+      start_event_notifier_->SetClockOffset(clock_offset_);
+    }
+    if (end_event_notifier_) {
+      end_event_notifier_->SetClockOffset(clock_offset_);
+    }
+  }
+}
+
+void LogReader::SetRealtimeReplayRate(double replay_rate) {
+  CHECK(event_loop_factory_ != nullptr)
+      << ": Can't set replay rate without an event loop factory (have you "
+         "called Register()?).";
+  event_loop_factory_->SetRealtimeReplayRate(replay_rate);
+}
+
 }  // namespace logger
 }  // namespace aos
diff --git a/aos/events/logging/log_reader.h b/aos/events/logging/log_reader.h
index c1333c6..9e44996 100644
--- a/aos/events/logging/log_reader.h
+++ b/aos/events/logging/log_reader.h
@@ -3,20 +3,26 @@
 
 #include <chrono>
 #include <deque>
+#include <queue>
 #include <string_view>
 #include <tuple>
 #include <vector>
 
+#include "aos/condition.h"
 #include "aos/events/event_loop.h"
 #include "aos/events/logging/logfile_sorting.h"
 #include "aos/events/logging/logfile_utils.h"
 #include "aos/events/logging/logger_generated.h"
+#include "aos/events/logging/replay_timing_generated.h"
+#include "aos/events/shm_event_loop.h"
 #include "aos/events/simulated_event_loop.h"
+#include "aos/mutex/mutex.h"
 #include "aos/network/message_bridge_server_generated.h"
 #include "aos/network/multinode_timestamp_filter.h"
 #include "aos/network/remote_message_generated.h"
 #include "aos/network/timestamp_filter.h"
 #include "aos/time/time.h"
+#include "aos/util/threaded_queue.h"
 #include "aos/uuid.h"
 #include "flatbuffers/flatbuffers.h"
 
@@ -92,10 +98,19 @@
   // Creates an SimulatedEventLoopFactory accessible via event_loop_factory(),
   // and then calls Register.
   void Register();
+
   // Registers callbacks for all the events after the log file starts.  This is
   // only useful when replaying live.
   void Register(EventLoop *event_loop);
 
+  // Sets a sender that should be used for tracking timing statistics. If not
+  // set, no statistics will be recorded.
+  void set_timing_accuracy_sender(
+      const Node *node, aos::Sender<timing::ReplayTiming> timing_sender) {
+    states_[configuration::GetNodeIndex(configuration(), node)]
+        ->set_timing_accuracy_sender(std::move(timing_sender));
+  }
+
   // Called whenever a log file starts for a node.
   void OnStart(std::function<void()> fn);
   void OnStart(const Node *node, std::function<void()> fn);
@@ -216,6 +231,13 @@
     exit_on_finish_ = exit_on_finish;
   }
 
+  // Sets the realtime replay rate. A value of 1.0 will cause the scheduler to
+  // try to play events in realtime. 0.5 will run at half speed. Use infinity
+  // (the default) to run as fast as possible. This can be changed during
+  // run-time.
+  // Only applies when running against a SimulatedEventLoopFactory.
+  void SetRealtimeReplayRate(double replay_rate);
+
  private:
   void Register(EventLoop *event_loop, const Node *node);
 
@@ -285,7 +307,13 @@
   // State per node.
   class State {
    public:
-    State(std::unique_ptr<TimestampMapper> timestamp_mapper, const Node *node);
+    // Whether we should spin up a separate thread for buffering up messages.
+    // Only allowed in realtime replay--see comments on threading_ member for
+    // details.
+    enum class ThreadedBuffering { kYes, kNo };
+    State(std::unique_ptr<TimestampMapper> timestamp_mapper,
+          message_bridge::MultiNodeNoncausalOffsetEstimator *multinode_filters,
+          const Node *node, ThreadedBuffering threading);
 
     // Connects up the timestamp mappers.
     void AddPeer(State *peer);
@@ -297,12 +325,25 @@
     TimestampedMessage PopOldest();
 
     // Returns the monotonic time of the oldest message.
-    BootTimestamp OldestMessageTime();
+    BootTimestamp SingleThreadedOldestMessageTime();
+    // Returns the monotonic time of the oldest message, handling querying the
+    // separate thread of ThreadedBuffering was set.
+    BootTimestamp MultiThreadedOldestMessageTime();
 
     size_t boot_count() const {
       // If we are replaying directly into an event loop, we can't reboot.  So
       // we will stay stuck on the 0th boot.
-      if (!node_event_loop_factory_) return 0u;
+      if (!node_event_loop_factory_) {
+        if (event_loop_ == nullptr) {
+          // If boot_count is being checked after startup for any of the
+          // non-primary nodes, then returning 0 may not be accurate (since
+          // remote nodes *can* reboot even if the EventLoop being played to
+          // can't).
+          CHECK(!started_);
+          CHECK(!stopped_);
+        }
+        return 0u;
+      }
       return node_event_loop_factory_->boot_count();
     }
 
@@ -319,8 +360,10 @@
         NotifyLogfileStart();
         return;
       }
-      CHECK_GE(start_time, event_loop_->monotonic_now());
-      startup_timer_->Setup(start_time);
+      if (node_event_loop_factory_) {
+        CHECK_GE(start_time + clock_offset(), event_loop_->monotonic_now());
+      }
+      startup_timer_->Setup(start_time + clock_offset());
     }
 
     void set_startup_timer(TimerHandler *timer_handler) {
@@ -382,6 +425,7 @@
     // distributed clock.
     distributed_clock::time_point ToDistributedClock(
         monotonic_clock::time_point time) {
+      CHECK(node_event_loop_factory_);
       return node_event_loop_factory_->ToDistributedClock(time);
     }
 
@@ -409,12 +453,14 @@
       // ensure we are remapping channels correctly.
       event_loop_unique_ptr_ = node_event_loop_factory_->MakeEventLoop(
           "log_reader", {NodeEventLoopFactory::CheckSentTooFast::kNo,
-                         NodeEventLoopFactory::ExclusiveSenders::kNo});
+                         NodeEventLoopFactory::ExclusiveSenders::kYes,
+                         NonExclusiveChannels()});
       return event_loop_unique_ptr_.get();
     }
 
     distributed_clock::time_point RemoteToDistributedClock(
         size_t channel_index, monotonic_clock::time_point time) {
+      CHECK(node_event_loop_factory_);
       return channel_source_state_[channel_index]
           ->node_event_loop_factory_->ToDistributedClock(time);
     }
@@ -425,7 +471,7 @@
     }
 
     monotonic_clock::time_point monotonic_now() const {
-      return node_event_loop_factory_->monotonic_now();
+      return event_loop_->monotonic_now();
     }
 
     // Sets the number of channels.
@@ -487,12 +533,16 @@
 
     // Sets the next wakeup time on the replay callback.
     void Setup(monotonic_clock::time_point next_time) {
-      timer_handler_->Setup(next_time);
+      timer_handler_->Setup(
+          std::max(monotonic_now(), next_time + clock_offset()));
     }
 
     // Sends a buffer on the provided channel index.
     bool Send(const TimestampedMessage &timestamped_message);
 
+    void MaybeSetClockOffset();
+    std::chrono::nanoseconds clock_offset() const { return clock_offset_; }
+
     // Returns a debug string for the channel merger.
     std::string DebugString() const {
       if (!timestamp_mapper_) {
@@ -522,7 +572,21 @@
       return last_message_[channel_index];
     }
 
+    void set_timing_accuracy_sender(
+        aos::Sender<timing::ReplayTiming> timing_sender) {
+      timing_statistics_sender_ = std::move(timing_sender);
+      OnEnd([this]() { SendMessageTimings(); });
+    }
+
+    // If running with ThreadedBuffering::kYes, will start the processing thread
+    // and queue up messages until the specified time. No-op of
+    // ThreadedBuffering::kNo is set. Should only be called once.
+    void QueueThreadUntil(BootTimestamp time);
+
    private:
+    void TrackMessageSendTiming(const RawSender &sender,
+                                monotonic_clock::time_point expected_send_time);
+    void SendMessageTimings();
     // Log file.
     std::unique_ptr<TimestampMapper> timestamp_mapper_;
 
@@ -556,6 +620,12 @@
       uint32_t actual_queue_index = 0xffffffff;
     };
 
+    // Returns a list of channels which LogReader will send on but which may
+    // *also* get sent on by other applications in replay.
+    std::vector<
+        std::pair<const aos::Channel *, NodeEventLoopFactory::ExclusiveSenders>>
+    NonExclusiveChannels();
+
     // Stores all the timestamps that have been sent on this channel.  This is
     // only done for channels which are forwarded and on the node which
     // initially sends the message.  Compress using ranges and offsets.
@@ -582,6 +652,7 @@
     // going between 2 nodes.  The second element in the tuple indicates if this
     // is the primary direction or not.
     std::vector<message_bridge::NoncausalOffsetEstimator *> filters_;
+    message_bridge::MultiNodeNoncausalOffsetEstimator *multinode_filters_;
 
     // List of NodeEventLoopFactorys (or nullptr if it isn't a forwarded
     // channel) which correspond to the originating node.
@@ -598,14 +669,46 @@
     absl::btree_map<const Channel *, std::shared_ptr<RemoteMessageSender>>
         timestamp_loggers_;
 
+    // Time offset between the log's monotonic clock and the current event
+    // loop's monotonic clock.  Useful when replaying logs with non-simulated
+    // event loops.
+    std::chrono::nanoseconds clock_offset_{0};
+
     std::vector<std::function<void()>> on_starts_;
     std::vector<std::function<void()>> on_ends_;
 
-    bool stopped_ = false;
-    bool started_ = false;
+    std::atomic<bool> stopped_ = false;
+    std::atomic<bool> started_ = false;
 
     bool found_last_message_ = false;
     std::vector<bool> last_message_;
+
+    std::vector<timing::MessageTimingT> send_timings_;
+    aos::Sender<timing::ReplayTiming> timing_statistics_sender_;
+
+    // Protects access to any internal state after Run() is called. Designed
+    // assuming that only one node is actually executing in replay.
+    // Threading design:
+    // * The worker passed to message_queuer_ has full ownership over all
+    //   the log-reading code, timestamp filters, last_queued_message_, etc.
+    // * The main thread should only have exclusive access to the replay
+    //   event loop and associated features (mainly senders).
+    //   It will pop an item out of the queue (which does maintain a shared_ptr
+    //   reference which may also be being used by the message_queuer_ thread,
+    //   but having shared_ptr's accessing the same memory from
+    //   separate threads is permissible).
+    // Enabling this in simulation is currently infeasible due to a lack of
+    // synchronization in the MultiNodeNoncausalOffsetEstimator. Essentially,
+    // when the message_queuer_ thread attempts to read/pop messages from the
+    // timestamp_mapper_, it will end up calling callbacks that update the
+    // internal state of the MultiNodeNoncausalOffsetEstimator. Simultaneously,
+    // the event scheduler that is running in the main thread to orchestrate the
+    // simulation will be querying the estimator to know what the clocks on the
+    // various nodes are at, leading to potential issues.
+    ThreadedBuffering threading_;
+    std::optional<BootTimestamp> last_queued_message_;
+    std::optional<util::ThreadedQueue<TimestampedMessage, BootTimestamp>>
+        message_queuer_;
   };
 
   // Node index -> State.
diff --git a/aos/events/logging/log_stats.cc b/aos/events/logging/log_stats.cc
index 4efb8df..8e3d451 100644
--- a/aos/events/logging/log_stats.cc
+++ b/aos/events/logging/log_stats.cc
@@ -20,7 +20,8 @@
             "Only print channels that have a set max message size that is more "
             "than double of the max message size.");
 
-// This class implements a histogram for tracking message period percentiles.
+// This class implements a histogram for tracking message period
+// percentiles.
 class Histogram {
  public:
   Histogram(size_t buckets = 1024)
@@ -109,8 +110,24 @@
 
 class ChannelStats {
  public:
-  ChannelStats(const aos::Channel *channel, const aos::Configuration *config)
-      : channel_(channel), config_(config) {}
+  ChannelStats(const aos::Channel *channel, const aos::Node *destination_node,
+               aos::SimulatedEventLoopFactory *factory)
+      : channel_(channel),
+        config_(factory->configuration()),
+        factory_(factory),
+        destination_node_(destination_node) {
+    // Multi-node channel
+    if (channel_->has_source_node() && channel_->has_destination_nodes() &&
+        channel_->destination_nodes()->size() > 0) {
+      CHECK(destination_node_)
+          << "Should have destination node for forwarded channel: "
+          << channel_->name()->string_view();
+      source_node_ = aos::configuration::GetNode(
+          config_, channel_->source_node()->string_view());
+      CHECK(source_node_) << "Node not in config: "
+                          << channel_->source_node()->string_view();
+    }
+  }
 
   // Adds a sample to the statistics.
   void Add(const aos::Context &context) {
@@ -134,6 +151,24 @@
     }
     max_messages_per_period_ = std::max(
         max_messages_per_period_, channel_storage_duration_messages_.size());
+
+    // Only count latency if this message is forwarded and the remote time was
+    // filled
+    if (source_node_ != nullptr &&
+        context.monotonic_remote_time != context.monotonic_event_time) {
+      // Convert times to distributed clock so they can be compared across nodes
+      const aos::distributed_clock::time_point remote_time =
+          factory_->GetNodeEventLoopFactory(source_node_)
+              ->ToDistributedClock(context.monotonic_remote_time);
+
+      const aos::distributed_clock::time_point event_time =
+          factory_->GetNodeEventLoopFactory(destination_node_)
+              ->ToDistributedClock(context.monotonic_event_time);
+      // Add the current latency to the sum
+      total_latency_ += event_time - remote_time;
+
+      num_messages_with_remote_++;
+    }
   }
 
   std::string Percentile() const { return histogram_.Percentile(); }
@@ -167,10 +202,29 @@
 
   const aos::Channel *channel() const { return channel_; }
 
+  std::string AvgLatency() {
+    if (num_messages_with_remote_ == 0) {
+      return "";
+    }
+
+    std::stringstream ss;
+    ss << std::setprecision(3);
+
+    const double avg_latency =
+        std::chrono::duration<double, std::milli>(total_latency_).count() /
+        num_messages_with_remote_;
+    ss << '[' << source_node_->name()->string_view() << "->"
+       << destination_node_->name()->string_view() << " " << avg_latency
+       << "ms latency avg]";
+
+    return ss.str();
+  }
+
  private:
   // pointer to the channel for which stats are collected
   const aos::Channel *channel_;
   const aos::Configuration *config_;
+  aos::SimulatedEventLoopFactory *factory_;
   aos::realtime_clock::time_point channel_end_time_ =
       aos::realtime_clock::min_time;
   aos::monotonic_clock::time_point first_message_time_ =
@@ -189,7 +243,15 @@
   size_t max_message_size_ = 0;
   size_t total_message_size_ = 0;
 
+  // Count of messages which had remote timestamps
+  size_t num_messages_with_remote_ = 0;
+  // Sum of latencies in all messages sent on this channel if multinode
+  aos::distributed_clock::duration total_latency_;
+
   Histogram histogram_;
+
+  const aos::Node *source_node_ = nullptr;
+  const aos::Node *destination_node_;
 };
 
 struct LogfileStats {
@@ -210,8 +272,9 @@
       " - Total messages per channel/type;\n"
       " - Max message size per channel/type;\n"
       " - Frequency of messages per second;\n"
-      " - Total logfile size and number of messages.\n"
-      "Use --logfile flag to select a logfile (path/filename) and use --name "
+      " - Total logfile size and number of messages;\n"
+      " - Average latency per forwarded channel/type.\n"
+      "Pass a logfile (path/filename) and use --name "
       "flag to specify a channel to listen on.");
 
   aos::InitGoogle(&argc, &argv);
@@ -276,7 +339,7 @@
     }
 
     // Add a record to the stats vector.
-    channel_stats.push_back({channel, reader.configuration()});
+    channel_stats.push_back({channel, node, &log_reader_factory});
     // Lambda to read messages and parse for information
     stats_event_loop->MakeRawNoArgWatcher(
         channel,
@@ -326,7 +389,8 @@
                   << " bytes avg, " << channel_stats[i].avg_message_bandwidth()
                   << " bytes/sec avg, " << channel_stats[i].max_message_size()
                   << " bytes max / " << channel_stats[i].channel()->max_size()
-                  << "bytes " << channel_stats[i].Percentile();
+                  << "bytes, " << channel_stats[i].Percentile() << ", "
+                  << channel_stats[i].AvgLatency();
         std::cout << std::endl;
       }
     }
diff --git a/aos/events/logging/logger_test.cc b/aos/events/logging/logger_test.cc
index 5f265e2..e86d2a9 100644
--- a/aos/events/logging/logger_test.cc
+++ b/aos/events/logging/logger_test.cc
@@ -181,6 +181,46 @@
   }
 }
 
+// Tests that we die if the replayer attempts to send on a logged channel.
+TEST_F(LoggerDeathTest, DieOnDuplicateReplayChannels) {
+  aos::FlatbufferDetachedBuffer<aos::Configuration> config =
+      aos::configuration::ReadConfig(
+          ArtifactPath("aos/events/pingpong_config.json"));
+  SimulatedEventLoopFactory event_loop_factory(&config.message());
+  const ::std::string tmpdir = aos::testing::TestTmpDir();
+  const ::std::string base_name = tmpdir + "/logfile";
+  const ::std::string config_file =
+      absl::StrCat(base_name, kSingleConfigSha256, ".bfbs");
+  const ::std::string logfile = base_name + ".part0.bfbs";
+  // Remove the log file.
+  unlink(config_file.c_str());
+  unlink(logfile.c_str());
+
+  LOG(INFO) << "Logging data to " << logfile;
+
+  {
+    std::unique_ptr<EventLoop> logger_event_loop =
+        event_loop_factory.MakeEventLoop("logger");
+
+    Logger logger(logger_event_loop.get());
+    logger.set_separate_config(false);
+    logger.set_polling_period(std::chrono::milliseconds(100));
+    logger.StartLoggingLocalNamerOnRun(base_name);
+
+    event_loop_factory.RunFor(chrono::seconds(2));
+  }
+
+  LogReader reader(logfile);
+
+  reader.Register();
+
+  std::unique_ptr<EventLoop> test_event_loop =
+      reader.event_loop_factory()->MakeEventLoop("log_reader");
+
+  EXPECT_DEATH(test_event_loop->MakeSender<examples::Ping>("/test"),
+               "exclusive channel.*examples.Ping");
+}
+
 // Tests calling StopLogging twice.
 TEST_F(LoggerDeathTest, ExtraStop) {
   const ::std::string tmpdir = aos::testing::TestTmpDir();
@@ -442,7 +482,8 @@
     std::unique_ptr<EventLoop> ping_spammer_event_loop =
         event_loop_factory.GetNodeEventLoopFactory(nullptr)->MakeEventLoop(
             "ping_spammer", {NodeEventLoopFactory::CheckSentTooFast::kNo,
-                             NodeEventLoopFactory::ExclusiveSenders::kNo});
+                             NodeEventLoopFactory::ExclusiveSenders::kNo,
+                             {}});
     aos::Sender<examples::Ping> ping_sender =
         ping_spammer_event_loop->MakeSender<examples::Ping>("/test");
 
@@ -2192,6 +2233,149 @@
   reader.Deregister();
 }
 
+// Tests that we observe all the same events in log replay (for a given node)
+// whether we just register an event loop for that node or if we register a full
+// event loop factory.
+TEST_P(MultinodeLoggerTest, SingleNodeReplay) {
+  time_converter_.StartEqual();
+  constexpr chrono::milliseconds kStartupDelay(95);
+  {
+    LoggerState pi1_logger = MakeLogger(pi1_);
+    LoggerState pi2_logger = MakeLogger(pi2_);
+
+    event_loop_factory_.RunFor(kStartupDelay);
+
+    StartLogger(&pi1_logger);
+    StartLogger(&pi2_logger);
+
+    event_loop_factory_.RunFor(chrono::milliseconds(20000));
+  }
+
+  LogReader full_reader(SortParts(logfiles_));
+  LogReader single_node_reader(SortParts(logfiles_));
+
+  SimulatedEventLoopFactory full_factory(full_reader.configuration());
+  SimulatedEventLoopFactory single_node_factory(
+      single_node_reader.configuration());
+  single_node_factory.SkipTimingReport();
+  single_node_factory.DisableStatistics();
+  std::unique_ptr<EventLoop> replay_event_loop =
+      single_node_factory.GetNodeEventLoopFactory("pi1")->MakeEventLoop(
+          "log_reader");
+
+  full_reader.Register(&full_factory);
+  single_node_reader.Register(replay_event_loop.get());
+
+  const Node *full_pi1 =
+      configuration::GetNode(full_factory.configuration(), "pi1");
+
+  // Confirm we can read the data on the remapped channel, just for pi1. Nothing
+  // else should have moved.
+  std::unique_ptr<EventLoop> full_event_loop =
+      full_factory.MakeEventLoop("test", full_pi1);
+  full_event_loop->SkipTimingReport();
+  full_event_loop->SkipAosLog();
+  // maps are indexed on channel index.
+  // observed_messages: {channel_index: [(message_sent_time, was_fetched),...]}
+  std::map<size_t, std::vector<std::pair<monotonic_clock::time_point, bool>>>
+      observed_messages;
+  std::map<size_t, std::unique_ptr<RawFetcher>> fetchers;
+  for (size_t ii = 0; ii < full_event_loop->configuration()->channels()->size();
+       ++ii) {
+    const Channel *channel =
+        full_event_loop->configuration()->channels()->Get(ii);
+    // We currently don't support replaying remote timestamp channels in
+    // realtime replay.
+    if (channel->name()->string_view().find("remote_timestamp") !=
+        std::string_view::npos) {
+      continue;
+    }
+    if (configuration::ChannelIsReadableOnNode(channel, full_pi1)) {
+      observed_messages[ii] = {};
+      fetchers[ii] = full_event_loop->MakeRawFetcher(channel);
+      full_event_loop->OnRun([ii, &observed_messages, &fetchers]() {
+        if (fetchers[ii]->Fetch()) {
+          observed_messages[ii].push_back(std::make_pair(
+              fetchers[ii]->context().monotonic_event_time, true));
+        }
+      });
+      full_event_loop->MakeRawNoArgWatcher(
+          channel, [ii, &observed_messages](const Context &context) {
+            observed_messages[ii].push_back(
+                std::make_pair(context.monotonic_event_time, false));
+          });
+    }
+  }
+
+  full_factory.Run();
+  fetchers.clear();
+  full_reader.Deregister();
+
+  const Node *single_node_pi1 =
+      configuration::GetNode(single_node_factory.configuration(), "pi1");
+  std::map<size_t, std::unique_ptr<RawFetcher>> single_node_fetchers;
+
+  std::unique_ptr<EventLoop> single_node_event_loop =
+      single_node_factory.MakeEventLoop("test", single_node_pi1);
+  single_node_event_loop->SkipTimingReport();
+  single_node_event_loop->SkipAosLog();
+  for (size_t ii = 0;
+       ii < single_node_event_loop->configuration()->channels()->size(); ++ii) {
+    const Channel *channel =
+        single_node_event_loop->configuration()->channels()->Get(ii);
+    single_node_factory.DisableForwarding(channel);
+    if (configuration::ChannelIsReadableOnNode(channel, single_node_pi1)) {
+      single_node_fetchers[ii] =
+          single_node_event_loop->MakeRawFetcher(channel);
+      single_node_event_loop->OnRun([channel, ii, &single_node_fetchers]() {
+        EXPECT_FALSE(single_node_fetchers[ii]->Fetch())
+            << "Single EventLoop replay doesn't support pre-loading fetchers. "
+            << configuration::StrippedChannelToString(channel);
+      });
+      single_node_event_loop->MakeRawNoArgWatcher(
+          channel, [ii, &observed_messages, channel,
+                    kStartupDelay](const Context &context) {
+            if (observed_messages[ii].empty()) {
+              FAIL() << "Observed extra message at "
+                     << context.monotonic_event_time << " on "
+                     << configuration::StrippedChannelToString(channel);
+              return;
+            }
+            const std::pair<monotonic_clock::time_point, bool> &message =
+                observed_messages[ii].front();
+            if (message.second) {
+              EXPECT_LE(message.first,
+                        context.monotonic_event_time + kStartupDelay)
+                  << "Mismatched message times " << context.monotonic_event_time
+                  << " and " << message.first << " on "
+                  << configuration::StrippedChannelToString(channel);
+            } else {
+              EXPECT_EQ(message.first,
+                        context.monotonic_event_time + kStartupDelay)
+                  << "Mismatched message times " << context.monotonic_event_time
+                  << " and " << message.first << " on "
+                  << configuration::StrippedChannelToString(channel);
+            }
+            observed_messages[ii].erase(observed_messages[ii].begin());
+          });
+    }
+  }
+
+  single_node_factory.Run();
+
+  single_node_fetchers.clear();
+
+  single_node_reader.Deregister();
+
+  for (const auto &pair : observed_messages) {
+    EXPECT_TRUE(pair.second.empty())
+        << "Missed " << pair.second.size() << " messages on "
+        << configuration::StrippedChannelToString(
+               single_node_event_loop->configuration()->channels()->Get(
+                   pair.first));
+  }
+}
+
 // Tests that we properly recreate forwarded timestamps when replaying a log.
 // This should be enough that we can then re-run the logger and get a valid log
 // back.
@@ -3482,9 +3666,9 @@
 }
 
 constexpr std::string_view kCombinedConfigSha1(
-    "bcc66bc13a90a4a268649744e244129c5d024f5abd67587dcfbd7158d8abfc44");
+    "99bf9b377d9b9a23eaf7de012e9fcc3840fd7d28751461824cd304b27761b81d");
 constexpr std::string_view kSplitConfigSha1(
-    "d97e998164a6f1bf078aad77ef127329728ac9198a13a5ab8d5f30d84a932662");
+    "123315dce9600c4672d0f86757486f8a15a5a9649aa3d468ea1bdc5d3c243d54");
 
 INSTANTIATE_TEST_SUITE_P(
     All, MultinodeLoggerTest,
@@ -4349,6 +4533,163 @@
   ConfirmReadable(filenames);
 }
 
+// Tests that we can replay a logfile that has timestamps such that at least one
+// node's epoch is at a positive distributed_clock (and thus will have to be
+// booted after the other node(s)).
+TEST_P(MultinodeLoggerTest, StartOneNodeBeforeOther) {
+  std::vector<std::string> filenames;
+
+  CHECK_EQ(pi1_index_, 0u);
+  CHECK_EQ(pi2_index_, 1u);
+
+  time_converter_.AddNextTimestamp(
+      distributed_clock::epoch(),
+      {BootTimestamp::epoch(), BootTimestamp::epoch()});
+
+  const chrono::nanoseconds before_reboot_duration = chrono::milliseconds(1000);
+  time_converter_.RebootAt(
+      0, distributed_clock::time_point(before_reboot_duration));
+
+  const chrono::nanoseconds test_duration = time_converter_.AddMonotonic(
+      {chrono::milliseconds(10000), chrono::milliseconds(10000)});
+
+  const std::string kLogfile =
+      aos::testing::TestTmpDir() + "/multi_logfile2.1/";
+  util::UnlinkRecursive(kLogfile);
+
+  pi2_->Disconnect(pi1_->node());
+  pi1_->Disconnect(pi2_->node());
+
+  {
+    LoggerState pi2_logger = MakeLogger(pi2_);
+
+    pi2_logger.StartLogger(kLogfile);
+    event_loop_factory_.RunFor(before_reboot_duration);
+
+    pi2_->Connect(pi1_->node());
+    pi1_->Connect(pi2_->node());
+
+    event_loop_factory_.RunFor(test_duration);
+
+    pi2_logger.AppendAllFilenames(&filenames);
+  }
+
+  const std::vector<LogFile> sorted_parts = SortParts(filenames);
+  ConfirmReadable(filenames);
+
+  {
+    LogReader reader(sorted_parts);
+    SimulatedEventLoopFactory replay_factory(reader.configuration());
+    reader.RegisterWithoutStarting(&replay_factory);
+
+    NodeEventLoopFactory *const replay_node =
+        reader.event_loop_factory()->GetNodeEventLoopFactory("pi1");
+
+    std::unique_ptr<EventLoop> test_event_loop =
+        replay_node->MakeEventLoop("test_reader");
+    replay_node->OnStartup([replay_node]() {
+      // Check that we didn't boot until at least t=0.
+      CHECK_LE(monotonic_clock::epoch(), replay_node->monotonic_now());
+    });
+    test_event_loop->OnRun([&test_event_loop]() {
+      // Check that we didn't boot until at least t=0.
+      EXPECT_LE(monotonic_clock::epoch(), test_event_loop->monotonic_now());
+    });
+    reader.event_loop_factory()->Run();
+    reader.Deregister();
+  }
+}
+
+// Tests that when we have a loop without all the logs at all points in time, we
+// can sort it properly.
+TEST(MultinodeLoggerLoopTest, DISABLED_Loop) {
+  aos::FlatbufferDetachedBuffer<aos::Configuration> config =
+      aos::configuration::ReadConfig(ArtifactPath(
+          "aos/events/logging/multinode_pingpong_triangle_split_config.json"));
+  message_bridge::TestingTimeConverter time_converter(
+      configuration::NodesCount(&config.message()));
+  SimulatedEventLoopFactory event_loop_factory(&config.message());
+  event_loop_factory.SetTimeConverter(&time_converter);
+
+  NodeEventLoopFactory *const pi1 =
+      event_loop_factory.GetNodeEventLoopFactory("pi1");
+  NodeEventLoopFactory *const pi2 =
+      event_loop_factory.GetNodeEventLoopFactory("pi2");
+  NodeEventLoopFactory *const pi3 =
+      event_loop_factory.GetNodeEventLoopFactory("pi3");
+
+  const std::string kLogfile1_1 =
+      aos::testing::TestTmpDir() + "/multi_logfile1/";
+  const std::string kLogfile2_1 =
+      aos::testing::TestTmpDir() + "/multi_logfile2/";
+  const std::string kLogfile3_1 =
+      aos::testing::TestTmpDir() + "/multi_logfile3/";
+  util::UnlinkRecursive(kLogfile1_1);
+  util::UnlinkRecursive(kLogfile2_1);
+  util::UnlinkRecursive(kLogfile3_1);
+
+  {
+    // Make pi1 boot before everything else.
+    time_converter.AddNextTimestamp(
+        distributed_clock::epoch(),
+        {BootTimestamp::epoch(),
+         BootTimestamp::epoch() - chrono::milliseconds(100),
+         BootTimestamp::epoch() - chrono::milliseconds(300)});
+  }
+
+  // We want to setup a situation such that 2 of the 3 legs of the loop are very
+  // confident about time being X, and the third leg is pulling the average off
+  // to one side.
+  //
+  // It's easiest to visualize this in timestamp_plotter.
+
+  std::vector<std::string> filenames;
+  {
+    // Have pi1 send out a reliable message at startup.  This sets up a long
+    // forwarding time message at the start to bias time.
+    std::unique_ptr<EventLoop> pi1_event_loop = pi1->MakeEventLoop("ping");
+    {
+      aos::Sender<examples::Ping> ping_sender =
+          pi1_event_loop->MakeSender<examples::Ping>("/reliable");
+
+      aos::Sender<examples::Ping>::Builder builder = ping_sender.MakeBuilder();
+      examples::Ping::Builder ping_builder =
+          builder.MakeBuilder<examples::Ping>();
+      CHECK_EQ(builder.Send(ping_builder.Finish()), RawSender::Error::kOk);
+    }
+
+    // Wait a while so there's enough data to let the worst case be rather off.
+    event_loop_factory.RunFor(chrono::seconds(1000));
+
+    // Now start a receiving node first.  This sets up 2 tight bounds between 2
+    // of the nodes.
+    LoggerState pi2_logger = LoggerState::MakeLogger(
+        pi2, &event_loop_factory, SupportedCompressionAlgorithms()[0]);
+    pi2_logger.StartLogger(kLogfile2_1);
+
+    event_loop_factory.RunFor(chrono::seconds(100));
+
+    // And now start the third leg.
+    LoggerState pi3_logger = LoggerState::MakeLogger(
+        pi3, &event_loop_factory, SupportedCompressionAlgorithms()[0]);
+    pi3_logger.StartLogger(kLogfile3_1);
+
+    LoggerState pi1_logger = LoggerState::MakeLogger(
+        pi1, &event_loop_factory, SupportedCompressionAlgorithms()[0]);
+    pi1_logger.StartLogger(kLogfile1_1);
+
+    event_loop_factory.RunFor(chrono::seconds(100));
+
+    pi1_logger.AppendAllFilenames(&filenames);
+    pi2_logger.AppendAllFilenames(&filenames);
+    pi3_logger.AppendAllFilenames(&filenames);
+  }
+
+  // Make sure we can read this.
+  const std::vector<LogFile> sorted_parts = SortParts(filenames);
+  auto result = ConfirmReadable(filenames);
+}
+
 }  // namespace testing
 }  // namespace logger
 }  // namespace aos
diff --git a/aos/events/logging/multinode_pingpong_triangle_split.json b/aos/events/logging/multinode_pingpong_triangle_split.json
new file mode 100644
index 0000000..226718e
--- /dev/null
+++ b/aos/events/logging/multinode_pingpong_triangle_split.json
@@ -0,0 +1,343 @@
+{
+  "channels": [
+    {
+      "name": "/pi1/aos",
+      "type": "aos.logging.LogMessageFbs",
+      "source_node": "pi1",
+      "frequency": 200,
+      "num_senders": 20,
+      "max_size": 2048
+    },
+    {
+      "name": "/pi2/aos",
+      "type": "aos.logging.LogMessageFbs",
+      "source_node": "pi2",
+      "frequency": 200,
+      "num_senders": 20,
+      "max_size": 2048
+    },
+    {
+      "name": "/pi3/aos",
+      "type": "aos.logging.LogMessageFbs",
+      "source_node": "pi3",
+      "frequency": 200,
+      "num_senders": 20,
+      "max_size": 2048
+    },
+    /* Logged on pi1 locally */
+    {
+      "name": "/pi1/aos",
+      "type": "aos.timing.Report",
+      "source_node": "pi1",
+      "frequency": 50,
+      "num_senders": 20,
+      "max_size": 2048
+    },
+    {
+      "name": "/pi2/aos",
+      "type": "aos.timing.Report",
+      "source_node": "pi2",
+      "frequency": 50,
+      "num_senders": 20,
+      "max_size": 2048
+    },
+    {
+      "name": "/pi3/aos",
+      "type": "aos.timing.Report",
+      "source_node": "pi3",
+      "frequency": 50,
+      "num_senders": 20,
+      "max_size": 2048
+    },
+    {
+      "name": "/pi1/aos",
+      "type": "aos.message_bridge.ServerStatistics",
+      "logger": "LOCAL_LOGGER",
+      "source_node": "pi1"
+    },
+    {
+      "name": "/pi2/aos",
+      "type": "aos.message_bridge.ServerStatistics",
+      "logger": "LOCAL_LOGGER",
+      "source_node": "pi2"
+    },
+    {
+      "name": "/pi3/aos",
+      "type": "aos.message_bridge.ServerStatistics",
+      "logger": "LOCAL_LOGGER",
+      "source_node": "pi3"
+    },
+    {
+      "name": "/pi1/aos",
+      "type": "aos.logging.DynamicLogCommand",
+      "logger": "LOCAL_LOGGER",
+      "source_node": "pi1"
+    },
+    {
+      "name": "/pi2/aos",
+      "type": "aos.logging.DynamicLogCommand",
+      "logger": "LOCAL_LOGGER",
+      "source_node": "pi2"
+    },
+    {
+      "name": "/pi3/aos",
+      "type": "aos.logging.DynamicLogCommand",
+      "logger": "LOCAL_LOGGER",
+      "source_node": "pi3"
+    },
+    {
+      "name": "/pi1/aos",
+      "type": "aos.message_bridge.ClientStatistics",
+      "logger": "LOCAL_LOGGER",
+      "source_node": "pi1"
+    },
+    {
+      "name": "/pi2/aos",
+      "type": "aos.message_bridge.ClientStatistics",
+      "logger": "LOCAL_LOGGER",
+      "source_node": "pi2"
+    },
+    {
+      "name": "/pi3/aos",
+      "type": "aos.message_bridge.ClientStatistics",
+      "logger": "LOCAL_LOGGER",
+      "source_node": "pi3"
+    },
+    {
+      "name": "/pi1/aos",
+      "type": "aos.message_bridge.Timestamp",
+      "logger": "LOCAL_AND_REMOTE_LOGGER",
+      "logger_nodes": ["pi2", "pi3"],
+      "source_node": "pi1",
+      "destination_nodes": [
+        {
+          "name": "pi2",
+          "time_to_live": 5000000,
+          "timestamp_logger": "LOCAL_LOGGER"
+        },
+        {
+          "name": "pi3",
+          "time_to_live": 5000000,
+          "timestamp_logger": "LOCAL_LOGGER"
+        }
+      ]
+    },
+    {
+      "name": "/pi2/aos",
+      "type": "aos.message_bridge.Timestamp",
+      "logger": "LOCAL_AND_REMOTE_LOGGER",
+      "logger_nodes": ["pi1", "pi3"],
+      "source_node": "pi2",
+      "destination_nodes": [
+        {
+          "name": "pi1",
+          "time_to_live": 5000000,
+          "timestamp_logger": "LOCAL_AND_REMOTE_LOGGER",
+          "timestamp_logger_nodes": ["pi2"]
+        },
+        {
+          "name": "pi3",
+          "time_to_live": 5000000,
+          "timestamp_logger": "LOCAL_LOGGER"
+        }
+      ]
+    },
+    {
+      "name": "/pi3/aos",
+      "type": "aos.message_bridge.Timestamp",
+      "logger": "LOCAL_AND_REMOTE_LOGGER",
+      "logger_nodes": ["pi1", "pi2"],
+      "source_node": "pi3",
+      "destination_nodes": [
+        {
+          "name": "pi1",
+          "time_to_live": 5000000,
+          "timestamp_logger": "LOCAL_LOGGER"
+        },
+        {
+          "name": "pi2",
+          "time_to_live": 5000000,
+          "timestamp_logger": "LOCAL_LOGGER"
+        }
+      ]
+    },
+    {
+      "name": "/pi1/aos/remote_timestamps/pi2/pi1/aos/aos-message_bridge-Timestamp",
+      "type": "aos.message_bridge.RemoteMessage",
+      "logger": "NOT_LOGGED",
+      "num_senders": 2,
+      "source_node": "pi1"
+    },
+    {
+      "name": "/pi1/aos/remote_timestamps/pi3/pi1/aos/aos-message_bridge-Timestamp",
+      "type": "aos.message_bridge.RemoteMessage",
+      "logger": "NOT_LOGGED",
+      "num_senders": 2,
+      "source_node": "pi1"
+    },
+    {
+      "name": "/pi2/aos/remote_timestamps/pi1/pi2/aos/aos-message_bridge-Timestamp",
+      "type": "aos.message_bridge.RemoteMessage",
+      "logger": "NOT_LOGGED",
+      "num_senders": 2,
+      "source_node": "pi2"
+    },
+    {
+      "name": "/pi2/aos/remote_timestamps/pi3/pi2/aos/aos-message_bridge-Timestamp",
+      "type": "aos.message_bridge.RemoteMessage",
+      "logger": "NOT_LOGGED",
+      "num_senders": 2,
+      "source_node": "pi2"
+    },
+    {
+      "name": "/pi3/aos/remote_timestamps/pi1/pi3/aos/aos-message_bridge-Timestamp",
+      "type": "aos.message_bridge.RemoteMessage",
+      "logger": "NOT_LOGGED",
+      "num_senders": 2,
+      "source_node": "pi3"
+    },
+    {
+      "name": "/pi3/aos/remote_timestamps/pi2/pi3/aos/aos-message_bridge-Timestamp",
+      "type": "aos.message_bridge.RemoteMessage",
+      "logger": "NOT_LOGGED",
+      "num_senders": 2,
+      "source_node": "pi3"
+    },
+    /* Reliable channel */
+    {
+      "name": "/reliable",
+      "type": "aos.examples.Ping",
+      "source_node": "pi1",
+      "logger": "LOCAL_AND_REMOTE_LOGGER",
+      "logger_nodes": ["pi2", "pi3"],
+      "destination_nodes": [
+        {
+          "name": "pi2",
+          "priority": 1,
+          "timestamp_logger": "LOCAL_AND_REMOTE_LOGGER",
+          "timestamp_logger_nodes": [
+            "pi1"
+          ]
+        },
+        {
+          "name": "pi3",
+          "priority": 1,
+          "timestamp_logger": "LOCAL_AND_REMOTE_LOGGER",
+          "timestamp_logger_nodes": [
+            "pi1"
+          ]
+        }
+      ]
+    },
+    {
+      "name": "/pi1/aos/remote_timestamps/pi2/reliable/aos-examples-Ping",
+      "type": "aos.message_bridge.RemoteMessage",
+      "logger": "NOT_LOGGED",
+      "num_senders": 2,
+      "source_node": "pi1",
+      "frequency": 150
+    },
+    {
+      "name": "/pi1/aos/remote_timestamps/pi3/reliable/aos-examples-Ping",
+      "type": "aos.message_bridge.RemoteMessage",
+      "logger": "NOT_LOGGED",
+      "num_senders": 2,
+      "source_node": "pi1",
+      "frequency": 150
+    },
+    /* Forwarded to pi2 */
+    {
+      "name": "/test",
+      "type": "aos.examples.Ping",
+      "source_node": "pi1",
+      "destination_nodes": [
+        {
+          "name": "pi2",
+          "priority": 1,
+          "timestamp_logger": "LOCAL_AND_REMOTE_LOGGER",
+          "timestamp_logger_nodes": [
+            "pi1"
+          ],
+          "time_to_live": 5000000
+        }
+      ],
+      "frequency": 150
+    },
+    {
+      "name": "/pi1/aos/remote_timestamps/pi2/test/aos-examples-Ping",
+      "type": "aos.message_bridge.RemoteMessage",
+      "logger": "NOT_LOGGED",
+      "num_senders": 2,
+      "source_node": "pi1",
+      "frequency": 150
+    },
+    /* Forwarded back to pi1.
+     * The message is logged both on the sending node and the receiving node
+     * (to make it easier to look at the results for now).
+     *
+     * The timestamps are logged on the receiving node.
+     */
+    {
+      "name": "/test",
+      "type": "aos.examples.Pong",
+      "source_node": "pi2",
+      "logger": "LOCAL_AND_REMOTE_LOGGER",
+      "logger_nodes": ["pi1"],
+      "destination_nodes": [
+        {
+          "name": "pi1",
+          "priority": 1,
+          "timestamp_logger": "LOCAL_LOGGER",
+          "time_to_live": 5000000
+        }
+      ],
+      "frequency": 150
+    }
+  ],
+  "maps": [
+    {
+      "match": {
+        "name": "/aos*",
+        "source_node": "pi1"
+      },
+      "rename": {
+        "name": "/pi1/aos"
+      }
+    },
+    {
+      "match": {
+        "name": "/aos*",
+        "source_node": "pi2"
+      },
+      "rename": {
+        "name": "/pi2/aos"
+      }
+    },
+    {
+      "match": {
+        "name": "/aos*",
+        "source_node": "pi3"
+      },
+      "rename": {
+        "name": "/pi3/aos"
+      }
+    }
+  ],
+  "nodes": [
+    {
+      "name": "pi1",
+      "hostname": "raspberrypi",
+      "port": 9971
+    },
+    {
+      "name": "pi2",
+      "hostname": "raspberrypi2",
+      "port": 9971
+    },
+    {
+      "name": "pi3",
+      "hostname": "raspberrypi3",
+      "port": 9971
+    }
+  ]
+}
diff --git a/aos/events/logging/realtime_replay_test.cc b/aos/events/logging/realtime_replay_test.cc
new file mode 100644
index 0000000..c7744d4
--- /dev/null
+++ b/aos/events/logging/realtime_replay_test.cc
@@ -0,0 +1,76 @@
+#include "aos/events/logging/log_reader.h"
+#include "aos/events/logging/log_writer.h"
+#include "aos/events/ping_lib.h"
+#include "aos/events/shm_event_loop.h"
+#include "aos/json_to_flatbuffer.h"
+#include "aos/testing/path.h"
+#include "aos/testing/tmpdir.h"
+#include "gtest/gtest.h"
+
+namespace aos::logger::testing {
+
+class RealtimeLoggerTest : public ::testing::Test {
+ protected:
+  RealtimeLoggerTest()
+      : shm_dir_(aos::testing::TestTmpDir() + "/aos"),
+        config_file_(
+            aos::testing::ArtifactPath("aos/events/pingpong_config.json")),
+        config_(aos::configuration::ReadConfig(config_file_)),
+        event_loop_factory_(&config_.message()),
+        ping_event_loop_(event_loop_factory_.MakeEventLoop("ping")),
+        ping_(ping_event_loop_.get()) {
+    FLAGS_shm_base = shm_dir_;
+
+    // Nuke the shm dir, to ensure we aren't being affected by any preexisting
+    // tests.
+    aos::util::UnlinkRecursive(shm_dir_);
+  }
+
+  gflags::FlagSaver flag_saver_;
+  std::string shm_dir_;
+
+  const std::string config_file_;
+  const aos::FlatbufferDetachedBuffer<aos::Configuration> config_;
+
+  // Factory and Ping class to generate a test logfile.
+  SimulatedEventLoopFactory event_loop_factory_;
+  std::unique_ptr<EventLoop> ping_event_loop_;
+  Ping ping_;
+};
+
+TEST_F(RealtimeLoggerTest, RealtimeReplay) {
+  const std::string tmpdir = aos::testing::TestTmpDir();
+  const std::string base_name = tmpdir + "/logfile/";
+  aos::util::UnlinkRecursive(base_name);
+  {
+    std::unique_ptr<EventLoop> logger_event_loop =
+        event_loop_factory_.MakeEventLoop("logger");
+
+    event_loop_factory_.RunFor(std::chrono::milliseconds(95));
+
+    Logger logger(logger_event_loop.get());
+    logger.set_separate_config(false);
+    logger.set_polling_period(std::chrono::milliseconds(100));
+    logger.StartLoggingLocalNamerOnRun(base_name);
+    event_loop_factory_.RunFor(std::chrono::milliseconds(2000));
+  }
+
+  LogReader reader(logger::SortParts(logger::FindLogs(base_name)));
+  ShmEventLoop shm_event_loop(reader.configuration());
+  reader.Register(&shm_event_loop);
+  reader.OnEnd(shm_event_loop.node(),
+               [&shm_event_loop]() { shm_event_loop.Exit(); });
+
+  Fetcher<examples::Ping> ping_fetcher =
+      shm_event_loop.MakeFetcher<examples::Ping>("/test");
+
+  shm_event_loop.AddTimer([]() { LOG(INFO) << "Hello, World!"; })
+      ->Setup(shm_event_loop.monotonic_now(), std::chrono::seconds(1));
+
+  shm_event_loop.Run();
+  reader.Deregister();
+
+  ASSERT_TRUE(ping_fetcher.Fetch());
+  ASSERT_EQ(ping_fetcher->value(), 210);
+}
+}  // namespace aos::logger::testing
diff --git a/aos/events/logging/replay_timing.fbs b/aos/events/logging/replay_timing.fbs
new file mode 100644
index 0000000..dbe7159
--- /dev/null
+++ b/aos/events/logging/replay_timing.fbs
@@ -0,0 +1,16 @@
+namespace aos.timing;
+
+table MessageTiming {
+  channel:uint (id: 0);
+  // Expected and actual monotonic send times, in nanoseconds.
+  expected_send_time:int64 (id: 1);
+  actual_send_time:int64 (id: 2);
+  // expected - actual, in seconds (provides no additional information).
+  send_time_error:double (id: 3);
+}
+
+table ReplayTiming {
+  messages:[MessageTiming] (id: 0);
+}
+
+root_type ReplayTiming;
diff --git a/aos/events/logging/timestamp_plot.cc b/aos/events/logging/timestamp_plot.cc
index 9c5f2dd..1239eb2 100644
--- a/aos/events/logging/timestamp_plot.cc
+++ b/aos/events/logging/timestamp_plot.cc
@@ -64,7 +64,9 @@
     }
 
     std::vector<std::string_view> l = absl::StrSplit(n, ", ");
-    CHECK_EQ(l.size(), 4u);
+    if (l.size() != 4u) {
+      continue;
+    }
     double t;
     double o;
     CHECK(absl::SimpleAtod(l[0], &t));
@@ -166,7 +168,9 @@
     }
 
     std::vector<std::string_view> l = absl::StrSplit(n, ", ");
-    CHECK_EQ(l.size(), 3u);
+    if (l.size() != 3u) {
+      continue;
+    }
     double t;
     double o;
     CHECK(absl::SimpleAtod(l[0], &t));
diff --git a/aos/events/multinode_pingpong_test_combined.json b/aos/events/multinode_pingpong_test_combined.json
index 2d58dd0..66ef8df 100644
--- a/aos/events/multinode_pingpong_test_combined.json
+++ b/aos/events/multinode_pingpong_test_combined.json
@@ -250,6 +250,20 @@
           "time_to_live": 5000000
         }
       ]
+    },
+    {
+      "name": "/reliable2",
+      "type": "aos.examples.Ping",
+      "source_node": "pi2",
+      "destination_nodes": [
+        {
+          "name": "pi1",
+          "priority": 1,
+          "timestamp_logger": "LOCAL_AND_REMOTE_LOGGER",
+          "timestamp_logger_nodes": ["pi2"],
+          "time_to_live": 0
+        }
+      ]
     }
   ],
   "maps": [
diff --git a/aos/events/multinode_pingpong_test_split.json b/aos/events/multinode_pingpong_test_split.json
index b160c42..049c407 100644
--- a/aos/events/multinode_pingpong_test_split.json
+++ b/aos/events/multinode_pingpong_test_split.json
@@ -163,6 +163,12 @@
       "source_node": "pi1"
     },
     {
+      "name": "/pi2/aos/remote_timestamps/pi1/reliable2/aos-examples-Ping",
+      "type": "aos.message_bridge.RemoteMessage",
+      "logger": "NOT_LOGGED",
+      "source_node": "pi2"
+    },
+    {
       "name": "/pi1/aos",
       "type": "aos.timing.Report",
       "source_node": "pi1",
@@ -266,6 +272,20 @@
           "time_to_live": 5000000
         }
       ]
+    },
+    {
+      "name": "/reliable2",
+      "type": "aos.examples.Ping",
+      "source_node": "pi2",
+      "destination_nodes": [
+        {
+          "name": "pi1",
+          "priority": 1,
+          "timestamp_logger": "LOCAL_AND_REMOTE_LOGGER",
+          "timestamp_logger_nodes": ["pi2"],
+          "time_to_live": 0
+        }
+      ]
     }
   ],
   "maps": [
diff --git a/aos/events/shm_event_loop.cc b/aos/events/shm_event_loop.cc
index 9159553..b2502a7 100644
--- a/aos/events/shm_event_loop.cc
+++ b/aos/events/shm_event_loop.cc
@@ -104,7 +104,7 @@
 }
 
 ipc_lib::LocklessQueueConfiguration MakeQueueConfiguration(
-    const Channel *channel, std::chrono::seconds channel_storage_duration) {
+    const Configuration *configuration, const Channel *channel) {
   ipc_lib::LocklessQueueConfiguration config;
 
   config.num_watchers = channel->num_watchers();
@@ -112,7 +112,7 @@
   // The value in the channel will default to 0 if readers are configured to
   // copy.
   config.num_pinners = channel->num_readers();
-  config.queue_size = channel_storage_duration.count() * channel->frequency();
+  config.queue_size = configuration::QueueSize(configuration, channel);
   config.message_data_size = channel->max_size();
 
   return config;
@@ -120,9 +120,9 @@
 
 class MMappedQueue {
  public:
-  MMappedQueue(std::string_view shm_base, const Channel *channel,
-               std::chrono::seconds channel_storage_duration)
-      : config_(MakeQueueConfiguration(channel, channel_storage_duration)) {
+  MMappedQueue(std::string_view shm_base, const Configuration *config,
+               const Channel *channel)
+      : config_(MakeQueueConfiguration(config, channel)) {
     std::string path = ShmPath(shm_base, channel);
 
     size_ = ipc_lib::LocklessQueueMemorySize(config_);
@@ -227,6 +227,7 @@
       name_(FLAGS_application_name),
       node_(MaybeMyNode(configuration)) {
   CHECK(IsInitialized()) << ": Need to initialize AOS first.";
+  ClearContext();
   if (configuration->has_nodes()) {
     CHECK(node_ != nullptr) << ": Couldn't find node in config.";
   }
@@ -240,10 +241,7 @@
                             const Channel *channel)
       : event_loop_(event_loop),
         channel_(channel),
-        lockless_queue_memory_(
-            shm_base, channel,
-            chrono::ceil<chrono::seconds>(chrono::nanoseconds(
-                event_loop->configuration()->channel_storage_duration()))),
+        lockless_queue_memory_(shm_base, event_loop->configuration(), channel),
         reader_(lockless_queue_memory_.queue()) {
     context_.data = nullptr;
     // Point the queue index at the next index to read starting now.  This
@@ -512,15 +510,28 @@
   SimpleShmFetcher simple_shm_fetcher_;
 };
 
+class ShmExitHandle : public ExitHandle {
+ public:
+  ShmExitHandle(ShmEventLoop *event_loop) : event_loop_(event_loop) {
+    ++event_loop_->exit_handle_count_;
+  }
+  ~ShmExitHandle() override {
+    CHECK_GT(event_loop_->exit_handle_count_, 0);
+    --event_loop_->exit_handle_count_;
+  }
+
+  void Exit() override { event_loop_->Exit(); }
+
+ private:
+  ShmEventLoop *const event_loop_;
+};
+
 class ShmSender : public RawSender {
  public:
   explicit ShmSender(std::string_view shm_base, EventLoop *event_loop,
                      const Channel *channel)
       : RawSender(event_loop, channel),
-        lockless_queue_memory_(
-            shm_base, channel,
-            chrono::ceil<chrono::seconds>(chrono::nanoseconds(
-                event_loop->configuration()->channel_storage_duration()))),
+        lockless_queue_memory_(shm_base, event_loop->configuration(), channel),
         lockless_queue_sender_(VerifySender(
             ipc_lib::LocklessQueueSender::Make(
                 lockless_queue_memory_.queue(),
@@ -568,8 +579,9 @@
         << ": Somebody wrote outside the buffer of their message on channel "
         << configuration::CleanedChannelToString(channel());
 
-    wake_upper_.Wakeup(event_loop()->is_running() ? event_loop()->priority()
-                                                  : 0);
+    wake_upper_.Wakeup(event_loop()->is_running()
+                           ? event_loop()->runtime_realtime_priority()
+                           : 0);
     return CheckLocklessQueueResult(result);
   }
 
@@ -591,8 +603,9 @@
         << ": Somebody wrote outside the buffer of their message on "
            "channel "
         << configuration::CleanedChannelToString(channel());
-    wake_upper_.Wakeup(event_loop()->is_running() ? event_loop()->priority()
-                                                  : 0);
+    wake_upper_.Wakeup(event_loop()->is_running()
+                           ? event_loop()->runtime_realtime_priority()
+                           : 0);
 
     return CheckLocklessQueueResult(result);
   }
@@ -655,7 +668,7 @@
   void Startup(EventLoop *event_loop) override {
     event_loop_->CheckCurrentThread();
     simple_shm_fetcher_.PointAtNextQueueIndex();
-    CHECK(RegisterWakeup(event_loop->priority()));
+    CHECK(RegisterWakeup(event_loop->runtime_realtime_priority()));
   }
 
   // Returns true if there is new data available.
@@ -1173,10 +1186,15 @@
   // the event loop so the book keeping matches.  Do this in the thread that
   // created the timing reporter.
   timing_report_sender_.reset();
+  ClearContext();
 }
 
 void ShmEventLoop::Exit() { epoll_.Quit(); }
 
+std::unique_ptr<ExitHandle> ShmEventLoop::MakeExitHandle() {
+  return std::make_unique<ShmExitHandle>(this);
+}
+
 ShmEventLoop::~ShmEventLoop() {
   CheckCurrentThread();
   // Force everything with a registered fd with epoll to be destroyed now.
@@ -1185,6 +1203,8 @@
   watchers_.clear();
 
   CHECK(!is_running()) << ": ShmEventLoop destroyed while running";
+  CHECK_EQ(0, exit_handle_count_)
+      << ": All ExitHandles must be destroyed before the ShmEventLoop";
 }
 
 void ShmEventLoop::SetRuntimeRealtimePriority(int priority) {
@@ -1219,10 +1239,7 @@
 
 int ShmEventLoop::NumberBuffers(const Channel *channel) {
   CheckCurrentThread();
-  return MakeQueueConfiguration(
-             channel, chrono::ceil<chrono::seconds>(chrono::nanoseconds(
-                          configuration()->channel_storage_duration())))
-      .num_messages();
+  return MakeQueueConfiguration(configuration(), channel).num_messages();
 }
 
 absl::Span<char> ShmEventLoop::GetShmSenderSharedMemory(
diff --git a/aos/events/shm_event_loop.h b/aos/events/shm_event_loop.h
index e51f21b..eb69f3d 100644
--- a/aos/events/shm_event_loop.h
+++ b/aos/events/shm_event_loop.h
@@ -22,6 +22,7 @@
 class ShmSender;
 class SimpleShmFetcher;
 class ShmFetcher;
+class ShmExitHandle;
 
 }  // namespace shm_event_loop_internal
 
@@ -48,6 +49,8 @@
   // Exits the event loop.  Async safe.
   void Exit();
 
+  std::unique_ptr<ExitHandle> MakeExitHandle();
+
   aos::monotonic_clock::time_point monotonic_now() const override {
     return aos::monotonic_clock::now();
   }
@@ -81,7 +84,8 @@
   const std::string_view name() const override { return name_; }
   const Node *node() const override { return node_; }
 
-  int priority() const override { return priority_; }
+  int runtime_realtime_priority() const override { return priority_; }
+  const cpu_set_t &runtime_affinity() const override { return affinity_; }
   const UUID &boot_uuid() const override { return boot_uuid_; }
 
   // Returns the epoll loop used to run the event loop.
@@ -138,17 +142,10 @@
   friend class shm_event_loop_internal::ShmSender;
   friend class shm_event_loop_internal::SimpleShmFetcher;
   friend class shm_event_loop_internal::ShmFetcher;
+  friend class shm_event_loop_internal::ShmExitHandle;
 
   using EventLoop::SendTimingReport;
 
-  static cpu_set_t DefaultAffinity() {
-    cpu_set_t result;
-    for (int i = 0; i < CPU_SETSIZE; ++i) {
-      CPU_SET(i, &result);
-    }
-    return result;
-  }
-
   void CheckCurrentThread() const;
 
   void HandleEvent();
@@ -165,6 +162,8 @@
 
   const UUID boot_uuid_;
 
+  int exit_handle_count_ = 0;
+
   // Capture the --shm_base flag at construction time.  This makes it much
   // easier to make different shared memory regions for doing things like
   // multi-node tests.
diff --git a/aos/events/shm_event_loop_test.cc b/aos/events/shm_event_loop_test.cc
index f4107b0..f119479 100644
--- a/aos/events/shm_event_loop_test.cc
+++ b/aos/events/shm_event_loop_test.cc
@@ -425,6 +425,14 @@
   TestNextMessageNotAvailableNoRun(true);
 }
 
+// Test that an ExitHandle outliving its EventLoop is caught.
+TEST_P(ShmEventLoopDeathTest, ExitHandleOutlivesEventLoop) {
+  auto loop1 = factory()->MakePrimary("loop1");
+  auto exit_handle = static_cast<ShmEventLoop *>(loop1.get())->MakeExitHandle();
+  EXPECT_DEATH(loop1.reset(),
+               "All ExitHandles must be destroyed before the ShmEventLoop");
+}
+
 // TODO(austin): Test that missing a deadline with a timer recovers as expected.
 
 INSTANTIATE_TEST_SUITE_P(ShmEventLoopCopyTest, ShmEventLoopTest,
diff --git a/aos/events/simulated_event_loop.cc b/aos/events/simulated_event_loop.cc
index 6bf3ec1..d2328fb 100644
--- a/aos/events/simulated_event_loop.cc
+++ b/aos/events/simulated_event_loop.cc
@@ -156,6 +156,23 @@
   SimulatedChannel *simulated_channel_ = nullptr;
 };
 
+class SimulatedFactoryExitHandle : public ExitHandle {
+ public:
+  SimulatedFactoryExitHandle(SimulatedEventLoopFactory *factory)
+      : factory_(factory) {
+    ++factory_->exit_handle_count_;
+  }
+  ~SimulatedFactoryExitHandle() override {
+    CHECK_GT(factory_->exit_handle_count_, 0);
+    --factory_->exit_handle_count_;
+  }
+
+  void Exit() override { factory_->Exit(); }
+
+ private:
+  SimulatedEventLoopFactory *const factory_;
+};
+
 class SimulatedChannel {
  public:
   explicit SimulatedChannel(const Channel *channel,
@@ -185,10 +202,8 @@
 
   // The number of messages we pretend to have in the queue.
   int queue_size() const {
-    return channel()->frequency() *
-           std::chrono::duration_cast<std::chrono::duration<double>>(
-               channel_storage_duration_)
-               .count();
+    return configuration::QueueSize(channel()->frequency(),
+                                    channel_storage_duration_);
   }
 
   std::chrono::nanoseconds channel_storage_duration() const {
@@ -197,10 +212,7 @@
 
   // The number of extra buffers (beyond the queue) we pretend to have.
   int number_scratch_buffers() const {
-    // We need to start creating messages before we know how many
-    // senders+readers we'll have, so we need to just pick something which is
-    // always big enough.
-    return 50;
+    return configuration::QueueScratchBufferSize(channel());
   }
 
   int number_buffers() const { return queue_size() + number_scratch_buffers(); }
@@ -256,12 +268,12 @@
   const Channel *channel() const { return channel_; }
 
   void CountSenderCreated() {
-    CheckBufferCount();
     if (sender_count_ >= channel()->num_senders()) {
       LOG(FATAL) << "Failed to create sender on "
                  << configuration::CleanedChannelToString(channel())
                  << ", too many senders.";
     }
+    CheckBufferCount();
     ++sender_count_;
   }
 
@@ -560,6 +572,7 @@
         tid_(tid),
         startup_tracker_(std::make_shared<StartupTracker>()),
         options_(options) {
+    ClearContext();
     startup_tracker_->loop = this;
     scheduler_->ScheduleOnStartup([startup_tracker = startup_tracker_]() {
       if (startup_tracker->loop) {
@@ -654,9 +667,10 @@
       if (log_impl_) {
         prev_logger.Swap(log_impl_);
       }
-      ScopedMarkRealtimeRestorer rt(priority() > 0);
+      ScopedMarkRealtimeRestorer rt(runtime_realtime_priority() > 0);
       SetTimerContext(monotonic_now());
       on_run();
+      ClearContext();
     });
   }
 
@@ -674,10 +688,12 @@
     priority_ = priority;
   }
 
-  int priority() const override { return priority_; }
+  int runtime_realtime_priority() const override { return priority_; }
+  const cpu_set_t &runtime_affinity() const override { return affinity_; }
 
-  void SetRuntimeAffinity(const cpu_set_t & /*cpuset*/) override {
+  void SetRuntimeAffinity(const cpu_set_t &affinity) override {
     CHECK(!is_running()) << ": Cannot set affinity while running.";
+    affinity_ = affinity;
   }
 
   void Setup() {
@@ -733,6 +749,7 @@
   ::std::string name_;
 
   int priority_ = 0;
+  cpu_set_t affinity_ = DefaultAffinity();
 
   std::chrono::nanoseconds send_delay_;
 
@@ -761,6 +778,10 @@
   }
 }
 
+void SimulatedEventLoopFactory::SetRealtimeReplayRate(double replay_rate) {
+  scheduler_scheduler_.SetReplayRate(replay_rate);
+}
+
 void SimulatedEventLoop::MakeRawWatcher(
     const Channel *channel,
     std::function<void(const Context &channel, const void *message)> watcher) {
@@ -909,8 +930,10 @@
   }
 
   {
-    ScopedMarkRealtimeRestorer rt(simulated_event_loop_->priority() > 0);
+    ScopedMarkRealtimeRestorer rt(
+        simulated_event_loop_->runtime_realtime_priority() > 0);
     DoCallCallback([monotonic_now]() { return monotonic_now; }, context);
+    simulated_event_loop_->ClearContext();
   }
 
   msgs_.pop_front();
@@ -950,7 +973,27 @@
   CHECK(allow_new_senders_)
       << ": Attempted to create a new sender on exclusive channel "
       << configuration::StrippedChannelToString(channel_);
-  if (event_loop->options().exclusive_senders == ExclusiveSenders::kYes) {
+  std::optional<ExclusiveSenders> per_channel_option;
+  for (const std::pair<const aos::Channel *, ExclusiveSenders> &per_channel :
+       event_loop->options().per_channel_exclusivity) {
+    if (per_channel.first->name()->string_view() ==
+            channel_->name()->string_view() &&
+        per_channel.first->type()->string_view() ==
+            channel_->type()->string_view()) {
+      CHECK(!per_channel_option.has_value())
+          << ": Channel " << configuration::StrippedChannelToString(channel_)
+          << " listed twice in per-channel list.";
+      per_channel_option = per_channel.second;
+    }
+  }
+  if (!per_channel_option.has_value()) {
+    // This could just as easily be implemented by setting
+    // per_channel_option to the global setting when we initialize it, but
+    // then we'd lose track of whether a given channel appears twice in
+    // the list.
+    per_channel_option = event_loop->options().exclusive_senders;
+  }
+  if (per_channel_option.value() == ExclusiveSenders::kYes) {
     CHECK_EQ(0, sender_count_)
         << ": Attempted to add an exclusive sender on a channel with existing "
            "senders: "
@@ -1145,6 +1188,7 @@
 
 void SimulatedTimerHandler::Setup(monotonic_clock::time_point base,
                                   monotonic_clock::duration repeat_offset) {
+  CHECK_GE(base, monotonic_clock::epoch());
   // The allocations in here are due to infrastructure and don't count in the no
   // mallocs in RT code.
   ScopedNotRealtime nrt;
@@ -1190,8 +1234,10 @@
   }
 
   {
-    ScopedMarkRealtimeRestorer rt(simulated_event_loop_->priority() > 0);
+    ScopedMarkRealtimeRestorer rt(
+        simulated_event_loop_->runtime_realtime_priority() > 0);
     Call([monotonic_now]() { return monotonic_now; }, monotonic_now);
+    simulated_event_loop_->ClearContext();
   }
 }
 
@@ -1235,11 +1281,13 @@
   }
 
   {
-    ScopedMarkRealtimeRestorer rt(simulated_event_loop_->priority() > 0);
+    ScopedMarkRealtimeRestorer rt(
+        simulated_event_loop_->runtime_realtime_priority() > 0);
     Call([monotonic_now]() { return monotonic_now; },
          [this](monotonic_clock::time_point sleep_time) {
            Schedule(sleep_time);
          });
+    simulated_event_loop_->ClearContext();
   }
 }
 
@@ -1278,7 +1326,10 @@
   }
 }
 
-SimulatedEventLoopFactory::~SimulatedEventLoopFactory() {}
+SimulatedEventLoopFactory::~SimulatedEventLoopFactory() {
+  CHECK_EQ(0, exit_handle_count_)
+      << ": All ExitHandles must be destroyed before the factory";
+}
 
 NodeEventLoopFactory *SimulatedEventLoopFactory::GetNodeEventLoopFactory(
     std::string_view node) {
@@ -1460,6 +1511,10 @@
 
 void SimulatedEventLoopFactory::Exit() { scheduler_scheduler_.Exit(); }
 
+std::unique_ptr<ExitHandle> SimulatedEventLoopFactory::MakeExitHandle() {
+  return std::make_unique<SimulatedFactoryExitHandle>(this);
+}
+
 void SimulatedEventLoopFactory::DisableForwarding(const Channel *channel) {
   CHECK(bridge_) << ": Can't disable forwarding without a message bridge.";
   bridge_->DisableForwarding(channel);
@@ -1467,7 +1522,14 @@
 
 void SimulatedEventLoopFactory::DisableStatistics() {
   CHECK(bridge_) << ": Can't disable statistics without a message bridge.";
-  bridge_->DisableStatistics();
+  bridge_->DisableStatistics(
+      message_bridge::SimulatedMessageBridge::DestroySenders::kNo);
+}
+
+void SimulatedEventLoopFactory::PermanentlyDisableStatistics() {
+  CHECK(bridge_) << ": Can't disable statistics without a message bridge.";
+  bridge_->DisableStatistics(
+      message_bridge::SimulatedMessageBridge::DestroySenders::kYes);
 }
 
 void SimulatedEventLoopFactory::EnableStatistics() {
diff --git a/aos/events/simulated_event_loop.h b/aos/events/simulated_event_loop.h
index 9200044..22eedc1 100644
--- a/aos/events/simulated_event_loop.h
+++ b/aos/events/simulated_event_loop.h
@@ -27,6 +27,7 @@
 
 class NodeEventLoopFactory;
 class SimulatedEventLoop;
+class SimulatedFactoryExitHandle;
 namespace message_bridge {
 class SimulatedMessageBridge;
 }
@@ -94,6 +95,8 @@
   // loop handler.
   void Exit();
 
+  std::unique_ptr<ExitHandle> MakeExitHandle();
+
   const std::vector<const Node *> &nodes() const { return nodes_; }
 
   // Sets the simulated send delay for all messages sent within a single node.
@@ -120,6 +123,9 @@
 
   // Disables the messages sent by the simulated message gateway.
   void DisableStatistics();
+  // Disables statistics sent by the simulated message gateway, and prevents
+  // EnableStatistcs from ever being called again (used by LogReader).
+  void PermanentlyDisableStatistics();
   // Enables the messages sent by the simulated message gateway.
   void EnableStatistics();
 
@@ -133,8 +139,18 @@
   // starts up without stopping execution.
   void AllowApplicationCreationDuring(std::function<void()> fn);
 
+  // Sets the realtime replay rate. A value of 1.0 will cause the scheduler to
+  // try to play events in realtime. 0.5 will run at half speed. Use infinity
+  // (the default) to run as fast as possible. This can be changed during
+  // run-time.
+  void SetRealtimeReplayRate(double replay_rate);
+
+  // Access to the internal scheduler's epoll object for realtime replay.
+  internal::EPoll *scheduler_epoll() { return scheduler_scheduler_.epoll(); }
+
  private:
   friend class NodeEventLoopFactory;
+  friend class SimulatedFactoryExitHandle;
 
   const Configuration *const configuration_;
   EventSchedulerScheduler scheduler_scheduler_;
@@ -147,6 +163,8 @@
   std::vector<std::unique_ptr<NodeEventLoopFactory>> node_factories_;
 
   std::vector<const Node *> nodes_;
+
+  int exit_handle_count_ = 0;
 };
 
 // This class holds all the state required to be a single node.
@@ -166,14 +184,18 @@
   struct EventLoopOptions {
     CheckSentTooFast check_sent_too_fast;
     ExclusiveSenders exclusive_senders;
+    // per_channel_exclusivity is used to list any exceptions to the overall
+    // exclusive_senders policy for this event loop.
+    std::vector<std::pair<const aos::Channel *, ExclusiveSenders>>
+        per_channel_exclusivity;
   };
 
   // Takes the name for the event loop and a struct of options for selecting
   // what checks to run for the event loop in question.
   std::unique_ptr<EventLoop> MakeEventLoop(
       std::string_view name,
-      EventLoopOptions options = EventLoopOptions{CheckSentTooFast::kYes,
-                                                  ExclusiveSenders::kNo});
+      EventLoopOptions options = EventLoopOptions{
+          CheckSentTooFast::kYes, ExclusiveSenders::kNo, {}});
 
   // Returns the node that this factory is running as, or nullptr if this is a
   // single node setup.
diff --git a/aos/events/simulated_event_loop_test.cc b/aos/events/simulated_event_loop_test.cc
index 1a35b69..2922460 100644
--- a/aos/events/simulated_event_loop_test.cc
+++ b/aos/events/simulated_event_loop_test.cc
@@ -139,72 +139,6 @@
   aos::FlatbufferDetachedBuffer<aos::Configuration> config;
 };
 
-class FunctionEvent : public EventScheduler::Event {
- public:
-  FunctionEvent(std::function<void()> fn) : fn_(fn) {}
-
-  void Handle() noexcept override { fn_(); }
-
- private:
-  std::function<void()> fn_;
-};
-
-// Test that creating an event and running the scheduler runs the event.
-TEST(EventSchedulerTest, ScheduleEvent) {
-  int counter = 0;
-  EventSchedulerScheduler scheduler_scheduler;
-  EventScheduler scheduler(0);
-  scheduler_scheduler.AddEventScheduler(&scheduler);
-
-  FunctionEvent e([&counter]() { counter += 1; });
-  scheduler.Schedule(monotonic_clock::epoch() + chrono::seconds(1), &e);
-  scheduler_scheduler.Run();
-  EXPECT_EQ(counter, 1);
-  auto token =
-      scheduler.Schedule(monotonic_clock::epoch() + chrono::seconds(2), &e);
-  scheduler.Deschedule(token);
-  scheduler_scheduler.Run();
-  EXPECT_EQ(counter, 1);
-}
-
-// Test that descheduling an already scheduled event doesn't run the event.
-TEST(EventSchedulerTest, DescheduleEvent) {
-  int counter = 0;
-  EventSchedulerScheduler scheduler_scheduler;
-  EventScheduler scheduler(0);
-  scheduler_scheduler.AddEventScheduler(&scheduler);
-
-  FunctionEvent e([&counter]() { counter += 1; });
-  auto token =
-      scheduler.Schedule(monotonic_clock::epoch() + chrono::seconds(1), &e);
-  scheduler.Deschedule(token);
-  scheduler_scheduler.Run();
-  EXPECT_EQ(counter, 0);
-}
-
-// Test that TemporarilyStopAndRun respects and preserves running.
-TEST(EventSchedulerTest, TemporarilyStopAndRun) {
-  int counter = 0;
-  EventSchedulerScheduler scheduler_scheduler;
-  EventScheduler scheduler(0);
-  scheduler_scheduler.AddEventScheduler(&scheduler);
-
-  scheduler_scheduler.TemporarilyStopAndRun(
-      [&]() { CHECK(!scheduler_scheduler.is_running()); });
-  ASSERT_FALSE(scheduler_scheduler.is_running());
-
-  FunctionEvent e([&]() {
-    counter += 1;
-    CHECK(scheduler_scheduler.is_running());
-    scheduler_scheduler.TemporarilyStopAndRun(
-        [&]() { CHECK(!scheduler_scheduler.is_running()); });
-    CHECK(scheduler_scheduler.is_running());
-  });
-  scheduler.Schedule(monotonic_clock::epoch() + chrono::seconds(1), &e);
-  scheduler_scheduler.Run();
-  EXPECT_EQ(counter, 1);
-}
-
 // Test that sending a message after running gets properly notified.
 TEST(SimulatedEventLoopTest, SendAfterRunFor) {
   SimulatedEventLoopTestFactory factory;
@@ -262,7 +196,8 @@
       simulated_event_loop_factory.GetNodeEventLoopFactory(nullptr)
           ->MakeEventLoop("too_fast_sender",
                           {NodeEventLoopFactory::CheckSentTooFast::kNo,
-                           NodeEventLoopFactory::ExclusiveSenders::kNo});
+                           NodeEventLoopFactory::ExclusiveSenders::kNo,
+                           {}});
   aos::Sender<TestMessage> too_fast_message_sender =
       too_fast_event_loop->MakeSender<TestMessage>("/test");
 
@@ -292,9 +227,13 @@
 
   ::std::unique_ptr<EventLoop> exclusive_event_loop =
       simulated_event_loop_factory.GetNodeEventLoopFactory(nullptr)
-          ->MakeEventLoop("too_fast_sender",
-                          {NodeEventLoopFactory::CheckSentTooFast::kYes,
-                           NodeEventLoopFactory::ExclusiveSenders::kYes});
+          ->MakeEventLoop(
+              "too_fast_sender",
+              {NodeEventLoopFactory::CheckSentTooFast::kYes,
+               NodeEventLoopFactory::ExclusiveSenders::kYes,
+               {{configuration::GetChannel(factory.configuration(), "/test1",
+                                           "aos.TestMessage", "", nullptr),
+                 NodeEventLoopFactory::ExclusiveSenders::kNo}}});
   exclusive_event_loop->SkipAosLog();
   exclusive_event_loop->SkipTimingReport();
   ::std::unique_ptr<EventLoop> normal_event_loop =
@@ -313,6 +252,12 @@
       normal_event_loop->MakeSender<TestMessage>("/test");
   EXPECT_DEATH(exclusive_event_loop->MakeSender<TestMessage>("/test"),
                "TestMessage");
+
+  // And check an explicitly exempted channel:
+  aos::Sender<TestMessage> non_exclusive_sender =
+      exclusive_event_loop->MakeSender<TestMessage>("/test1");
+  aos::Sender<TestMessage> non_exclusive_sender_regular_event_loop =
+      normal_event_loop->MakeSender<TestMessage>("/test1");
 }
 
 void TestSentTooFastCheckEdgeCase(
@@ -1336,9 +1281,34 @@
       pi3_client_statistics_counter(pi3_pong_counter_event_loop.get(),
                                     "/pi3/aos");
 
+  std::vector<std::unique_ptr<aos::EventLoop>> statistics_watcher_loops;
+  statistics_watcher_loops.emplace_back(pi1->MakeEventLoop("test"));
+  statistics_watcher_loops.emplace_back(pi2->MakeEventLoop("test"));
+  statistics_watcher_loops.emplace_back(pi3->MakeEventLoop("test"));
+  // The currenct contract is that, if all nodes boot simultaneously in
+  // simulation, that they should all act as if they area already connected,
+  // without ever observing the transition from disconnected to connected (note
+  // that on a real system the ServerStatistics message will get resent for each
+  // and every new connection, even if the new connections happen
+  // "simultaneously"--in simulation, we are essentially acting as if we are
+  // starting execution in an already running system, rather than observing the
+  // boot process).
+  for (auto &event_loop : statistics_watcher_loops) {
+    event_loop->MakeWatcher(
+        "/aos", [](const message_bridge::ServerStatistics &msg) {
+          for (const message_bridge::ServerConnection *connection :
+               *msg.connections()) {
+            EXPECT_EQ(message_bridge::State::CONNECTED, connection->state())
+                << connection->node()->name()->string_view();
+          }
+        });
+  }
+
   simulated_event_loop_factory.RunFor(chrono::seconds(2) +
                                       chrono::milliseconds(5));
 
+  statistics_watcher_loops.clear();
+
   EXPECT_EQ(pi1_pong_counter.count(), 201u);
   EXPECT_EQ(pi2_pong_counter.count(), 201u);
 
@@ -1631,8 +1601,13 @@
 
   std::unique_ptr<EventLoop> pi2_pong_event_loop =
       simulated_event_loop_factory.MakeEventLoop("pong", pi2);
+  aos::Sender<examples::Ping> pi2_reliable_sender =
+      pi2_pong_event_loop->MakeSender<examples::Ping>("/reliable2");
+  SendPing(&pi2_reliable_sender, 1);
   MessageCounter<examples::Ping> pi2_reliable_counter(pi2_pong_event_loop.get(),
                                                       "/reliable");
+  MessageCounter<examples::Ping> pi1_reliable_counter(ping_event_loop.get(),
+                                                      "/reliable2");
   MessageCounter<examples::Ping> pi2_unreliable_counter(
       pi2_pong_event_loop.get(), "/unreliable");
   aos::Fetcher<examples::Ping> reliable_on_pi2_fetcher =
@@ -1688,6 +1663,7 @@
   SendPing(&pi1_unreliable_sender, 2);
   simulated_event_loop_factory.RunFor(chrono::milliseconds(500));
   EXPECT_EQ(pi2_reliable_counter.count(), 2u);
+  EXPECT_EQ(pi1_reliable_counter.count(), 1u);
   EXPECT_EQ(pi2_unreliable_counter.count(), 1u);
 
   EXPECT_EQ(reliable_timestamp_count, 2u);
@@ -2076,6 +2052,19 @@
   EXPECT_DEATH({ factory.RunFor(dt * 2); }, "Event loop");
 }
 
+// Test that an ExitHandle outliving its factory is caught.
+TEST(SimulatedEventLoopDeathTest, ExitHandleOutlivesFactory) {
+  aos::FlatbufferDetachedBuffer<aos::Configuration> config =
+      aos::configuration::ReadConfig(
+          ArtifactPath("aos/events/multinode_pingpong_test_split_config.json"));
+  auto factory = std::make_unique<SimulatedEventLoopFactory>(&config.message());
+  NodeEventLoopFactory *pi1 = factory->GetNodeEventLoopFactory("pi1");
+  std::unique_ptr<EventLoop> loop = pi1->MakeEventLoop("foo");
+  auto exit_handle = factory->MakeExitHandle();
+  EXPECT_DEATH(factory.reset(),
+               "All ExitHandles must be destroyed before the factory");
+}
+
 // Tests that messages don't survive a reboot of a node.
 TEST(SimulatedEventLoopTest, ChannelClearedOnReboot) {
   aos::FlatbufferDetachedBuffer<aos::Configuration> config =
@@ -2173,6 +2162,71 @@
   EXPECT_NE(pi2_boot_uuid, pi2->boot_uuid());
 }
 
+TEST(SimulatedEventLoopTest, ReliableMessageSentOnStaggeredBoot) {
+  aos::FlatbufferDetachedBuffer<aos::Configuration> config =
+      aos::configuration::ReadConfig(
+          ArtifactPath("aos/events/multinode_pingpong_test_split_config.json"));
+
+  message_bridge::TestingTimeConverter time(
+      configuration::NodesCount(&config.message()));
+  time.AddNextTimestamp(
+      distributed_clock::epoch(),
+      {BootTimestamp{0, monotonic_clock::epoch()},
+       BootTimestamp{0, monotonic_clock::epoch() - chrono::seconds(1)},
+       BootTimestamp{0, monotonic_clock::epoch()}});
+  SimulatedEventLoopFactory factory(&config.message());
+  factory.SetTimeConverter(&time);
+
+  NodeEventLoopFactory *pi1 = factory.GetNodeEventLoopFactory("pi1");
+  NodeEventLoopFactory *pi2 = factory.GetNodeEventLoopFactory("pi2");
+
+  const UUID pi1_boot_uuid = pi1->boot_uuid();
+  const UUID pi2_boot_uuid = pi2->boot_uuid();
+  EXPECT_NE(pi1_boot_uuid, UUID::Zero());
+  EXPECT_NE(pi2_boot_uuid, UUID::Zero());
+
+  {
+    ::std::unique_ptr<EventLoop> pi1_event_loop = pi1->MakeEventLoop("ping");
+    aos::Sender<examples::Ping> pi1_sender =
+        pi1_event_loop->MakeSender<examples::Ping>("/reliable");
+    SendPing(&pi1_sender, 1);
+  }
+  ::std::unique_ptr<EventLoop> pi2_event_loop = pi2->MakeEventLoop("ping");
+  aos::Sender<examples::Ping> pi2_sender =
+      pi2_event_loop->MakeSender<examples::Ping>("/reliable2");
+  SendPing(&pi2_sender, 1);
+  // Verify that we staggered the OnRun callback correctly.
+  pi2_event_loop->OnRun([pi1, pi2]() {
+    EXPECT_EQ(pi1->monotonic_now(),
+              monotonic_clock::epoch() + std::chrono::seconds(1));
+    EXPECT_EQ(pi2->monotonic_now(), monotonic_clock::epoch());
+  });
+
+  factory.RunFor(chrono::seconds(2));
+
+  {
+    ::std::unique_ptr<EventLoop> pi2_event_loop = pi2->MakeEventLoop("pong");
+    aos::Fetcher<examples::Ping> fetcher =
+        pi2_event_loop->MakeFetcher<examples::Ping>("/reliable");
+    ASSERT_TRUE(fetcher.Fetch());
+    EXPECT_EQ(fetcher.context().monotonic_event_time,
+              monotonic_clock::epoch() + factory.network_delay());
+    EXPECT_EQ(fetcher.context().monotonic_remote_time,
+              monotonic_clock::epoch());
+  }
+  {
+    ::std::unique_ptr<EventLoop> pi1_event_loop = pi1->MakeEventLoop("pong");
+    aos::Fetcher<examples::Ping> fetcher =
+        pi1_event_loop->MakeFetcher<examples::Ping>("/reliable2");
+    ASSERT_TRUE(fetcher.Fetch());
+    EXPECT_EQ(fetcher.context().monotonic_event_time,
+              monotonic_clock::epoch() + std::chrono::seconds(1) +
+                  factory.network_delay());
+    EXPECT_EQ(fetcher.context().monotonic_remote_time,
+              monotonic_clock::epoch() - std::chrono::seconds(1));
+  }
+}
+
 class SimulatedEventLoopDisconnectTest : public ::testing::Test {
  public:
   SimulatedEventLoopDisconnectTest()
diff --git a/aos/events/simulated_network_bridge.cc b/aos/events/simulated_network_bridge.cc
index 19ca658..31f3f0e 100644
--- a/aos/events/simulated_network_bridge.cc
+++ b/aos/events/simulated_network_bridge.cc
@@ -32,6 +32,10 @@
   bool forwarding_disabled() const { return forwarding_disabled_; }
   void set_forwarding_disabled(bool forwarding_disabled) {
     forwarding_disabled_ = forwarding_disabled;
+    if (!forwarding_disabled_) {
+      CHECK(timestamp_logger_ == nullptr);
+      CHECK(sender_ == nullptr);
+    }
   }
 
   void SetFetchEventLoop(aos::EventLoop *fetch_event_loop,
@@ -50,7 +54,8 @@
       server_connection_ =
           server_status_->FindServerConnection(send_node_factory_->node());
     }
-    if (delivery_time_is_logged_ && timestamp_loggers != nullptr) {
+    if (delivery_time_is_logged_ && timestamp_loggers != nullptr &&
+        !forwarding_disabled_) {
       timestamp_logger_ =
           timestamp_loggers->SenderForChannel(channel_, connection_);
     } else {
@@ -79,7 +84,7 @@
                         MessageBridgeClientStatus *client_status) {
     sent_ = false;
     send_event_loop_ = send_event_loop;
-    if (send_event_loop_) {
+    if (send_event_loop_ && !forwarding_disabled_) {
       sender_ = send_event_loop_->MakeRawSender(channel_);
     } else {
       sender_ = nullptr;
@@ -133,7 +138,6 @@
     if (fetcher_->context().data == nullptr || sent_) {
       return;
     }
-    CHECK(!timer_scheduled_);
 
     // Send at startup.  It is the best we can do.
     const monotonic_clock::time_point monotonic_delivered_time =
@@ -561,16 +565,17 @@
   destination_state->second.SetClientState(source, state);
 }
 
-void SimulatedMessageBridge::DisableStatistics() {
+void SimulatedMessageBridge::DisableStatistics(DestroySenders destroy_senders) {
   for (std::pair<const Node *const, State> &state : event_loop_map_) {
-    state.second.DisableStatistics();
+    state.second.DisableStatistics(destroy_senders);
   }
 }
 
-void SimulatedMessageBridge::DisableStatistics(const Node *node) {
+void SimulatedMessageBridge::DisableStatistics(const Node *node,
+                                               DestroySenders destroy_senders) {
   auto it = event_loop_map_.find(node);
   CHECK(it != event_loop_map_.end());
-  it->second.DisableStatistics();
+  it->second.DisableStatistics(destroy_senders);
 }
 
 void SimulatedMessageBridge::EnableStatistics() {
@@ -625,7 +630,7 @@
   timestamp_loggers = ChannelTimestampSender(event_loop.get());
   server_status = std::make_unique<MessageBridgeServerStatus>(event_loop.get());
   if (disable_statistics_) {
-    server_status->DisableStatistics();
+    server_status->DisableStatistics(destroy_senders_ == DestroySenders::kYes);
   }
 
   {
@@ -659,7 +664,7 @@
   }
   client_status = std::make_unique<MessageBridgeClientStatus>(event_loop.get());
   if (disable_statistics_) {
-    client_status->DisableStatistics();
+    client_status->DisableStatistics(destroy_senders_ == DestroySenders::kYes);
   }
 
   for (size_t i = 0;
@@ -701,8 +706,16 @@
             configuration::ConnectionDeliveryTimeIsLoggedOnNode(
                 connection, event_loop->node());
 
+        const RawMessageDelayer *delayer = nullptr;
+        for (const RawMessageDelayer *candidate : source_delayers_) {
+          if (candidate->channel() == channel) {
+            delayer = candidate;
+          }
+        }
+
         // And the timestamps are then logged back by us again.
-        if (!delivery_time_is_logged) {
+        if (!delivery_time_is_logged ||
+            CHECK_NOTNULL(delayer)->forwarding_disabled()) {
           continue;
         }
 
@@ -725,6 +738,25 @@
         destination_delayer->ScheduleReliable();
       }
     }
+    // Note: This exists to work around the fact that some users like to be able
+    // to send reliable messages while execution is stopped, creating a
+    // situation where the following sequencing can occur:
+    // 1) <While stopped> Send a reliable message on Node A (to be forwarded to
+    //    Node B).
+    // 2) Node B starts up.
+    // 3) Anywhere from 0 to N seconds later, Node A starts up.
+    //
+    // In this case, we need the reliable message to make it to Node B, but it
+    // also shouldn't make it to Node B until Node A has started up.
+    //
+    // Ideally, if the user were to wait for the Node B OnRun callbacks to send
+    // the message, then that would trigger the watchers in the delayers.
+    // However, we so far have continued to support Sending while stopped....
+    for (RawMessageDelayer *source_delayer : source_delayers_) {
+      if (source_delayer->time_to_live() == 0) {
+        source_delayer->ScheduleReliable();
+      }
+    }
   });
 }
 
diff --git a/aos/events/simulated_network_bridge.h b/aos/events/simulated_network_bridge.h
index f5b3eae..9565029 100644
--- a/aos/events/simulated_network_bridge.h
+++ b/aos/events/simulated_network_bridge.h
@@ -35,8 +35,10 @@
   // Disables generating and sending the messages which message_gateway sends.
   // The messages are the ClientStatistics, ServerStatistics and Timestamp
   // messages.
-  void DisableStatistics();
-  void DisableStatistics(const Node *node);
+  enum class DestroySenders { kNo, kYes };
+  void DisableStatistics(DestroySenders destroy_senders = DestroySenders::kNo);
+  void DisableStatistics(const Node *node,
+                         DestroySenders destroy_senders = DestroySenders::kNo);
   void EnableStatistics();
   void EnableStatistics(const Node *node);
 
@@ -55,13 +57,16 @@
     }
     State(const State &state) = delete;
 
-    void DisableStatistics() {
+    void DisableStatistics(DestroySenders destroy_senders) {
       disable_statistics_ = true;
+      destroy_senders_ = destroy_senders;
       if (server_status) {
-        server_status->DisableStatistics();
+        server_status->DisableStatistics(destroy_senders ==
+                                         DestroySenders::kYes);
       }
       if (client_status) {
-        client_status->DisableStatistics();
+        client_status->DisableStatistics(destroy_senders ==
+                                         DestroySenders::kYes);
       }
     }
 
@@ -88,7 +93,8 @@
       // logfiles.
       SetEventLoop(node_factory_->MakeEventLoop(
           "message_bridge", {NodeEventLoopFactory::CheckSentTooFast::kNo,
-                             NodeEventLoopFactory::ExclusiveSenders::kNo}));
+                             NodeEventLoopFactory::ExclusiveSenders::kNo,
+                             {}}));
     }
 
     void SetEventLoop(std::unique_ptr<aos::EventLoop> loop);
@@ -218,7 +224,9 @@
     std::vector<RawMessageDelayer *> destination_delayers_;
 
     bool disable_statistics_ = false;
+    DestroySenders destroy_senders_ = DestroySenders::kNo;
   };
+
   // Map of nodes to event loops.  This is a member variable so that the
   // lifetime of the event loops matches the lifetime of the bridge.
   std::map<const Node *, State> event_loop_map_;
diff --git a/aos/events/timing_report_dump_lib.cc b/aos/events/timing_report_dump_lib.cc
index b33cc73..85ea5be 100644
--- a/aos/events/timing_report_dump_lib.cc
+++ b/aos/events/timing_report_dump_lib.cc
@@ -369,7 +369,7 @@
 }
 
 const Channel *TimingReportDump::GetChannel(int index) {
-  CHECK_LT(0, index);
+  CHECK_LE(0, index);
   CHECK_GT(event_loop_->configuration()->channels()->size(),
            static_cast<size_t>(index));
   return event_loop_->configuration()->channels()->Get(index);
diff --git a/aos/flatbuffers.rs b/aos/flatbuffers.rs
new file mode 100644
index 0000000..aec61d8
--- /dev/null
+++ b/aos/flatbuffers.rs
@@ -0,0 +1,617 @@
+//! Utilities for working with FlatBuffers types.
+//!
+//! These address similar use cases as the C++ library with the same name, but unlike most of these
+//! wrappers the APIs look very different in most cases to be ergnomic in Rust.
+
+use std::marker::PhantomData;
+
+use flatbuffers::{
+    FlatBufferBuilder, Follow, FollowWith, ForwardsUOffset, InvalidFlatbuffer, SkipSizePrefix,
+    Verifiable, Verifier, WIPOffset,
+};
+
+/// Represents the various forms of buffers we can store tables in.
+///
+/// We need this trait to mark types which won't change the data in a flatbuffer after we verify
+/// it. Rust's type system cannot express this constraint directly, so we use an unsafe trait to
+/// call attention to what implementing types are promising.
+///
+/// # Safety
+///
+/// Implementors of this trait must return a slice with the same contents every time
+/// [`AsRef.as_ref`] is called without any intervening mutable access to the object. In other words,
+/// types implementing this trait must have exclusive ownership of the underlying storage, and not
+/// do anything unusal like returning different pieces of storage each time.
+///
+/// Note that the slice is not required to have the same address each time [`AsRef.as_ref`] is
+/// called, just the same contents. This means types using inline storage can implement this trait
+/// without needing pinning.
+pub unsafe trait FlatbufferStorage: AsRef<[u8]> {}
+
+// SAFETY: Vec has exclusive ownership of its single storage.
+unsafe impl FlatbufferStorage for Vec<u8> {}
+
+// SAFETY: We have a shared reference to the slice and u8 does not have interior mutability, so
+// nobody can change the memory as long as the shared reference exists. We're only using the one
+// slice too.
+unsafe impl FlatbufferStorage for &[u8] {}
+
+// SAFETY: The array is its own storage.
+unsafe impl<const N: usize> FlatbufferStorage for [u8; N] {}
+
+/// A type to wrap buffers returned from [`FlatBufferBuilder.collapse`].
+///
+/// See [`Flatbuffer.finish_minimal_and_collapse`] for an easy way to make use of this.
+#[derive(Clone)]
+pub struct CollapsedFlatBufferBuilder(pub Vec<u8>, pub usize);
+
+impl AsRef<[u8]> for CollapsedFlatBufferBuilder {
+    fn as_ref(&self) -> &[u8] {
+        &self.0[self.1..]
+    }
+}
+
+// SAFETY: The Vec has exclusive ownership of its single storage, and we always access the same
+// part of it.
+unsafe impl FlatbufferStorage for CollapsedFlatBufferBuilder {}
+
+/// An internal sealed trait to manage the size-prefixed versions vs non-size-prefixed variants.
+pub trait PrefixedOrNot: private_size_prefixed::Sealed {
+    /// [`FlatBufferBuilder::finish`] or [`FlatBufferBuilder::finish_size_prefixed`].
+    fn finish_builder<T>(
+        fbb: &mut FlatBufferBuilder,
+        root: WIPOffset<T>,
+        file_identifier: Option<&str>,
+    );
+
+    /// [`flatbuffers::root`] or [`flatbuffers::size_prefixed_root`].
+    fn root<'buf, T: 'buf + Follow<'buf> + Verifiable>(
+        data: &'buf [u8],
+    ) -> Result<T::Inner, InvalidFlatbuffer>;
+
+    /// [`flatbuffers::root_unchecked`] or [`flatbuffers::size_prefixed_root_unchecked`].
+    unsafe fn root_unchecked<'buf, T: 'buf + Follow<'buf>>(data: &'buf [u8]) -> T::Inner;
+
+    /// [`ForwardsUOffset::run_verifier`], after skipping the size if present.
+    fn run_verifier<T: Verifiable>(
+        v: &mut Verifier<'_, '_>,
+        pos: usize,
+    ) -> Result<(), InvalidFlatbuffer>;
+}
+
+/// Marker type to implement [`PrefixedOrNot`] on.
+pub struct NotSizePrefixed;
+
+impl PrefixedOrNot for NotSizePrefixed {
+    fn finish_builder<T>(
+        fbb: &mut FlatBufferBuilder,
+        root: WIPOffset<T>,
+        file_identifier: Option<&str>,
+    ) {
+        fbb.finish::<T>(root, file_identifier);
+    }
+
+    fn root<'buf, T: 'buf + Follow<'buf> + Verifiable>(
+        data: &'buf [u8],
+    ) -> Result<T::Inner, InvalidFlatbuffer> {
+        flatbuffers::root::<'buf, T>(data)
+    }
+
+    unsafe fn root_unchecked<'buf, T: 'buf + Follow<'buf>>(data: &'buf [u8]) -> T::Inner {
+        flatbuffers::root_unchecked::<'buf, T>(data)
+    }
+
+    fn run_verifier<T: Verifiable>(
+        v: &mut Verifier<'_, '_>,
+        pos: usize,
+    ) -> Result<(), InvalidFlatbuffer> {
+        <ForwardsUOffset<T>>::run_verifier(v, pos)
+    }
+}
+
+/// Marker type to implement [`PrefixedOrNot`] on.
+pub struct SizePrefixed;
+
+impl PrefixedOrNot for SizePrefixed {
+    fn finish_builder<T>(
+        fbb: &mut FlatBufferBuilder,
+        root: WIPOffset<T>,
+        file_identifier: Option<&str>,
+    ) {
+        fbb.finish_size_prefixed::<T>(root, file_identifier);
+    }
+
+    fn root<'buf, T: 'buf + Follow<'buf> + Verifiable>(
+        data: &'buf [u8],
+    ) -> Result<T::Inner, InvalidFlatbuffer> {
+        flatbuffers::size_prefixed_root::<'buf, T>(data)
+    }
+
+    unsafe fn root_unchecked<'buf, T: 'buf + Follow<'buf>>(data: &'buf [u8]) -> T::Inner {
+        flatbuffers::size_prefixed_root_unchecked::<'buf, T>(data)
+    }
+
+    fn run_verifier<T: Verifiable>(
+        v: &mut Verifier<'_, '_>,
+        pos: usize,
+    ) -> Result<(), InvalidFlatbuffer> {
+        <SkipSizePrefix<ForwardsUOffset<T>>>::run_verifier(v, pos)
+    }
+}
+
+mod private_size_prefixed {
+    pub trait Sealed {}
+
+    impl Sealed for super::NotSizePrefixed {}
+    impl Sealed for super::SizePrefixed {}
+}
+
+/// A flatbuffer along with its backing storage.
+///
+/// `T` should be a generated flatbuffer table type. Its lifetime argument does not matter, using
+/// `'static` is recommended for simplicity. This type uses the [`FollowWith`] trait to access the
+/// equivalents of `T` with appropriate lifetimes as needed.
+///
+/// This is a bit tricky in Rust because we want to avoid internal pointers (requiring the buffer
+/// to be pinned before using it would be hard to use). Instead of actually storing the flatbuffer
+/// with its pointer to the storage, we (optionally) verify it once and then create the flatbuffer
+/// type on demand.
+pub trait Flatbuffer<T>
+where
+    for<'a> T: FollowWith<'a>,
+    for<'a> <T as FollowWith<'a>>::Inner: Follow<'a>,
+{
+    /// Provides access to the message.
+    ///
+    /// Note that we can't implement `Deref` because we're not returning a reference. We're
+    /// effectively returning a fat pointer which is semantically equivalent to a Rust reference,
+    /// but it's not the same thing to the language. Also implementing `Deref` would allow wrapping
+    /// this with `Pin`, which doesn't do anything because the actual type being dereferenced is
+    /// still `Unpin`, even though other languages commonly store pointers into the flatbuffer.
+    fn message<'this>(&'this self) -> <<T as FollowWith<'this>>::Inner as Follow<'this>>::Inner;
+
+    /// Revalidates the data. If this returns `Err`, then something has violated the safety
+    /// requirements and code responsible is likely unsound.
+    ///
+    /// You should probably not be using this. It's intended for debug assertions when working with
+    /// cross-language boundaries and otherwise doing tricky things with buffers. Once again, you
+    /// probably have unsoundness if you're using this, verify your flatbuffers before wrapping them
+    /// in a [`Flatbuffer`], not after.
+    fn revalidate<'this>(&'this self) -> Result<(), InvalidFlatbuffer>
+    where
+        <T as FollowWith<'this>>::Inner: Verifiable;
+}
+
+/// A generic implementation of [`Flatbuffer`]. `Storage` is the type used to store the buffer.
+/// `MaybePrefixed` controls whether we're using size-prefixed flatbuffers or not.
+///
+/// Flatbuffers provides a parallel set of APIs for handling size-prefixed buffers. This just means
+/// the size is placed at the beginning, so the root table's offset isn't at the very beginning of
+/// the buffer.
+///
+/// [`NonSizePrefixedFlatbuffer`] and [`SizePrefixedFlatbuffer`] provide more convenient names.
+pub struct MaybePrefixedFlatbuffer<T, Storage: FlatbufferStorage, MaybePrefixed: PrefixedOrNot> {
+    // SAFETY: We have an invariant that this is always a valid flatbuffer.
+    //
+    // All of our constructors verify that, and we never hand out mutable references so the
+    // requirements for implementors of [`FlatbufferStorage`] ensure it stays valid.
+    storage: Storage,
+
+    /// Pretend we store one of these. The compiler needs this information to clarify that two
+    /// instances with different `T` and/or `MaybePrefixed` are not the same type.
+    _marker: PhantomData<(T, MaybePrefixed)>,
+}
+
+impl<T, Storage: FlatbufferStorage, MaybePrefixed: PrefixedOrNot> Flatbuffer<T>
+    for MaybePrefixedFlatbuffer<T, Storage, MaybePrefixed>
+where
+    for<'a> T: FollowWith<'a>,
+    for<'a> <T as FollowWith<'a>>::Inner: Follow<'a>,
+{
+    fn message<'this>(&'this self) -> <<T as FollowWith<'this>>::Inner as Follow<'this>>::Inner {
+        // SAFETY: This being a valid flatbuffer is an invariant.
+        unsafe {
+            MaybePrefixed::root_unchecked::<<T as FollowWith<'this>>::Inner>(self.storage.as_ref())
+        }
+    }
+
+    fn revalidate<'this>(&'this self) -> Result<(), InvalidFlatbuffer>
+    where
+        <T as FollowWith<'this>>::Inner: Verifiable,
+    {
+        MaybePrefixed::root::<<T as FollowWith<'this>>::Inner>(self.storage.as_ref())?;
+        Ok(())
+    }
+}
+
+impl<T, Storage: FlatbufferStorage, MaybePrefixed: PrefixedOrNot>
+    MaybePrefixedFlatbuffer<T, Storage, MaybePrefixed>
+where
+    for<'a> T: FollowWith<'a>,
+    for<'a> <T as FollowWith<'a>>::Inner: Follow<'a> + Verifiable,
+{
+    /// Verifies the flatbuffer and then creates an instance.
+    ///
+    /// Note that `storage` must only refer to the flatbuffer. `FlatBufferBuilder::collapse`
+    /// returns a buffer with unused space at the beginning, for example, you will have to either
+    /// use a slice here or remove the unused space first.
+    pub fn new(storage: Storage) -> Result<Self, InvalidFlatbuffer> {
+        MaybePrefixed::root::<<T as FollowWith<'_>>::Inner>(storage.as_ref())?;
+        Ok(Self {
+            storage,
+            _marker: PhantomData,
+        })
+    }
+}
+
+impl<T, Storage: FlatbufferStorage, MaybePrefixed: PrefixedOrNot>
+    MaybePrefixedFlatbuffer<T, Storage, MaybePrefixed>
+where
+    for<'a> T: FollowWith<'a>,
+    for<'a> <T as FollowWith<'a>>::Inner: Follow<'a>,
+{
+    /// Wraps a flatbuffer without verifying it.
+    ///
+    /// Note that `storage` must only refer to the flatbuffer. `FlatBufferBuilder::collapse`
+    /// returns a buffer with unused space at the beginning, for example, so you can not pass that
+    /// here directly. See [`CollapsedFlatBufferBuilder`] for that particular case.
+    ///
+    /// # Safety
+    ///
+    /// `storage` must refer to a valid flatbuffer.
+    pub unsafe fn new_unchecked(storage: Storage) -> Self {
+        Self {
+            storage,
+            _marker: PhantomData,
+        }
+    }
+
+    /// Returns a reference to the underlying storage.
+    pub fn storage_ref(&self) -> &[u8] {
+        self.storage.as_ref()
+    }
+
+    /// Converts back into the underlying storage.
+    pub fn into_storage(self) -> Storage {
+        self.storage
+    }
+}
+
+impl<T, Storage: FlatbufferStorage + Clone, MaybePrefixed: PrefixedOrNot> Clone
+    for MaybePrefixedFlatbuffer<T, Storage, MaybePrefixed>
+where
+    for<'a> T: FollowWith<'a>,
+    for<'a> <T as FollowWith<'a>>::Inner: Follow<'a>,
+{
+    fn clone(&self) -> Self {
+        // SAFETY: We already know it's valid because it was used by `self`.
+        unsafe { Self::new_unchecked(self.storage.clone()) }
+    }
+}
+
+impl<T, MaybePrefixed: PrefixedOrNot>
+    MaybePrefixedFlatbuffer<T, CollapsedFlatBufferBuilder, MaybePrefixed>
+where
+    for<'a> T: FollowWith<'a>,
+    for<'a> <T as FollowWith<'a>>::Inner: Follow<'a>,
+{
+    /// Finishes a [`FlatBufferBuilder`] and then grabs its buffer. This does not require
+    /// verification to be safe.
+    ///
+    /// We have to encapsulate the `finish` call to enforce matching types.
+    pub fn finish_minimal_and_collapse(mut fbb: FlatBufferBuilder<'_>, root: WIPOffset<T>) -> Self {
+        MaybePrefixed::finish_builder(&mut fbb, root, None);
+        let (vec, offset) = fbb.collapse();
+        // SAFETY: We just finished the builder with an offset of the correct type. The builder
+        // maintained the invariant that it was building a valid flatbuffer, which we are directly
+        // using.
+        unsafe { Self::new_unchecked(CollapsedFlatBufferBuilder(vec, offset)) }
+    }
+}
+
+impl<T, F: Flatbuffer<T> + ?Sized> Flatbuffer<T> for Box<F>
+where
+    for<'a> T: FollowWith<'a>,
+    for<'a> <T as FollowWith<'a>>::Inner: Follow<'a>,
+{
+    fn message<'this>(&'this self) -> <<T as FollowWith<'this>>::Inner as Follow<'this>>::Inner {
+        self.as_ref().message()
+    }
+
+    fn revalidate<'this>(&'this self) -> Result<(), InvalidFlatbuffer>
+    where
+        <T as FollowWith<'this>>::Inner: Verifiable,
+    {
+        self.as_ref().revalidate()
+    }
+}
+
+pub type NonSizePrefixedFlatbuffer<T, Storage> =
+    MaybePrefixedFlatbuffer<T, Storage, NotSizePrefixed>;
+pub type SizePrefixedFlatbuffer<T, Storage> = MaybePrefixedFlatbuffer<T, Storage, SizePrefixed>;
+
+/// This is the alias for a generic "some kind of buffer that contains a flatbuffer". Use this if
+/// you want your code to work with any type of buffer without being generic.
+///
+/// `'buf` is the lifetime of the underlying storage.
+///
+/// If you only want to support flatbuffers that own their underlying buffer, and don't want to
+/// even make your functions lifetime-generic, use `DynFlatbuffer<'static, T>`. However, note
+/// that being lifetime-generic has no cost in code size or vtable lookups, and if your code isn't
+/// storing references to the flatbuffer anywhere it's a strict increase in flexibility.
+pub type DynFlatbuffer<'buf, T> = Box<dyn Flatbuffer<T> + 'buf>;
+
+/// Transmutes the in-memory flatbuffer data to a type. This is only useful if `T` is a C++-style
+/// flatbuffer generated class, it doesn't match the layout of any type in any language.
+///
+/// It is strongly recommended to explicitly specify `T` using the turbofish operator when using
+/// this function. Mismatches of the type are very bad and leaving it implicit is error prone.
+///
+/// # Safety
+///
+/// This is extremely unsafe. `T` has to be something expecting a flatbuffer table of the correct
+/// type as its address.
+pub unsafe fn transmute_table_to<'a, T>(table: &flatbuffers::Table<'a>) -> &'a T {
+    let address = &table.buf[table.loc];
+    std::mem::transmute(address)
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    use aos_json_to_flatbuffer_fbs::aos::testing::{Location, LocationBuilder};
+
+    /// Tests various methods that take flatbuffers as arguments.
+    #[test]
+    fn test_take() {
+        fn take_box_dyn_ref(flatbuffer: &DynFlatbuffer<'_, Location<'static>>) {
+            assert_eq!(Some("xyz"), flatbuffer.message().name());
+            assert_eq!(971, flatbuffer.message().frequency());
+        }
+
+        fn take_box_dyn_ref_static(flatbuffer: &DynFlatbuffer<'static, Location<'static>>) {
+            assert_eq!(Some("xyz"), flatbuffer.message().name());
+            assert_eq!(971, flatbuffer.message().frequency());
+        }
+
+        fn take_bare_dyn_ref(flatbuffer: &dyn Flatbuffer<Location<'static>>) {
+            assert_eq!(Some("xyz"), flatbuffer.message().name());
+            assert_eq!(971, flatbuffer.message().frequency());
+        }
+
+        fn take_impl_ref(flatbuffer: &impl Flatbuffer<Location<'static>>) {
+            assert_eq!(Some("xyz"), flatbuffer.message().name());
+            assert_eq!(971, flatbuffer.message().frequency());
+        }
+
+        fn take_impl_ref_static(flatbuffer: &(impl Flatbuffer<Location<'static>> + 'static)) {
+            assert_eq!(Some("xyz"), flatbuffer.message().name());
+            assert_eq!(971, flatbuffer.message().frequency());
+        }
+
+        fn take_box_dyn(flatbuffer: DynFlatbuffer<'_, Location<'static>>) {
+            assert_eq!(Some("xyz"), flatbuffer.message().name());
+            assert_eq!(971, flatbuffer.message().frequency());
+        }
+
+        fn take_box_dyn_static(flatbuffer: DynFlatbuffer<'static, Location<'static>>) {
+            assert_eq!(Some("xyz"), flatbuffer.message().name());
+            assert_eq!(971, flatbuffer.message().frequency());
+        }
+
+        fn take_impl(flatbuffer: impl Flatbuffer<Location<'static>>) {
+            assert_eq!(Some("xyz"), flatbuffer.message().name());
+            assert_eq!(971, flatbuffer.message().frequency());
+        }
+
+        fn take_impl_static(flatbuffer: impl Flatbuffer<Location<'static>> + 'static) {
+            assert_eq!(Some("xyz"), flatbuffer.message().name());
+            assert_eq!(971, flatbuffer.message().frequency());
+        }
+
+        fn take_nondyn_ref(
+            flatbuffer: &NonSizePrefixedFlatbuffer<Location<'static>, CollapsedFlatBufferBuilder>,
+        ) {
+            assert_eq!(Some("xyz"), flatbuffer.message().name());
+            assert_eq!(971, flatbuffer.message().frequency());
+        }
+
+        fn take_nondyn(
+            flatbuffer: NonSizePrefixedFlatbuffer<Location<'static>, CollapsedFlatBufferBuilder>,
+        ) {
+            assert_eq!(Some("xyz"), flatbuffer.message().name());
+            assert_eq!(971, flatbuffer.message().frequency());
+        }
+
+        let flatbuffer = {
+            let mut fbb = FlatBufferBuilder::new();
+            let xyz = fbb.create_string("xyz");
+            let mut location = LocationBuilder::new(&mut fbb);
+            location.add_name(xyz);
+            location.add_frequency(971);
+            let location = location.finish();
+            NonSizePrefixedFlatbuffer::finish_minimal_and_collapse(fbb, location)
+        };
+        let make_dyn_flatbuffer = || Box::new(flatbuffer.clone());
+        let dyn_flatbuffer: DynFlatbuffer<_> = make_dyn_flatbuffer();
+
+        take_box_dyn_ref(&dyn_flatbuffer);
+        take_box_dyn_ref_static(&dyn_flatbuffer);
+        take_bare_dyn_ref(&dyn_flatbuffer);
+        take_bare_dyn_ref(&flatbuffer);
+        take_impl_ref(&dyn_flatbuffer);
+        take_impl_ref(&flatbuffer);
+        take_impl_ref_static(&dyn_flatbuffer);
+        take_impl_ref_static(&flatbuffer);
+        take_box_dyn(make_dyn_flatbuffer());
+        take_box_dyn_static(make_dyn_flatbuffer());
+        take_impl(make_dyn_flatbuffer());
+        take_impl(flatbuffer.clone());
+        take_impl_static(make_dyn_flatbuffer());
+        take_impl_static(flatbuffer.clone());
+        take_nondyn_ref(&flatbuffer);
+        take_nondyn(flatbuffer.clone());
+    }
+
+    /// Tests creating a DynFlatbuffer from various types.
+    #[test]
+    fn test_make_dyn() {
+        fn take_ref(flatbuffer: &impl Flatbuffer<Location<'static>>) {
+            assert_eq!(Some("xyz"), flatbuffer.message().name());
+            assert_eq!(971, flatbuffer.message().frequency());
+        }
+
+        let flatbuffer = {
+            let mut fbb = FlatBufferBuilder::new();
+            let xyz = fbb.create_string("xyz");
+            let mut location = LocationBuilder::new(&mut fbb);
+            location.add_name(xyz);
+            location.add_frequency(971);
+            let location = location.finish();
+            NonSizePrefixedFlatbuffer::finish_minimal_and_collapse(fbb, location)
+        };
+        take_ref(&flatbuffer);
+        let slice_flatbuffer =
+            NonSizePrefixedFlatbuffer::<Location<'static>, &[u8]>::new(flatbuffer.storage_ref())
+                .unwrap();
+        take_ref(&slice_flatbuffer);
+
+        {
+            let dyn_flatbuffer: DynFlatbuffer<_> = Box::new(flatbuffer.clone());
+            take_ref(&dyn_flatbuffer);
+        }
+        {
+            let dyn_flatbuffer: DynFlatbuffer<_> = Box::new(slice_flatbuffer.clone());
+            take_ref(&dyn_flatbuffer);
+        }
+    }
+
+    macro_rules! test_variant {
+        ($maybe_prefixed:ident, $modname:ident, $finish:ident) => {
+            mod $modname {
+                use super::*;
+
+                use aos_json_to_flatbuffer_fbs::aos::testing::{Location, LocationBuilder};
+
+                #[test]
+                fn test_basic() {
+                    let fbb = {
+                        let mut fbb = FlatBufferBuilder::new();
+                        let xyz = fbb.create_string("xyz");
+                        let mut location = LocationBuilder::new(&mut fbb);
+                        location.add_name(xyz);
+                        location.add_frequency(971);
+                        let location = location.finish();
+                        fbb.$finish(location, None);
+                        fbb
+                    };
+
+                    {
+                        let flatbuffer = $maybe_prefixed::<Location, _>::new(
+                            fbb.finished_data().iter().copied().collect::<Vec<u8>>(),
+                        )
+                        .unwrap();
+                        assert_eq!(Some("xyz"), flatbuffer.message().name());
+                        assert_eq!(971, flatbuffer.message().frequency());
+                        flatbuffer.revalidate().unwrap();
+                    }
+
+                    {
+                        let flatbuffer =
+                            $maybe_prefixed::<Location, _>::new(fbb.finished_data()).unwrap();
+                        assert_eq!(Some("xyz"), flatbuffer.message().name());
+                        assert_eq!(971, flatbuffer.message().frequency());
+                        flatbuffer.revalidate().unwrap();
+                    }
+
+                    {
+                        let mut array_data = [0; 64];
+                        let finished_data = fbb.finished_data();
+                        array_data[..finished_data.len()].copy_from_slice(finished_data);
+                        let flatbuffer = $maybe_prefixed::<Location, _>::new(array_data).unwrap();
+                        assert_eq!(Some("xyz"), flatbuffer.message().name());
+                        assert_eq!(971, flatbuffer.message().frequency());
+                        flatbuffer.revalidate().unwrap();
+                    }
+                }
+
+                #[test]
+                fn test_collapse() {
+                    let mut fbb = FlatBufferBuilder::new();
+                    let xyz = fbb.create_string("xyz");
+                    let mut location = LocationBuilder::new(&mut fbb);
+                    location.add_name(xyz);
+                    location.add_frequency(971);
+                    let location = location.finish();
+                    let flatbuffer = $maybe_prefixed::finish_minimal_and_collapse(fbb, location);
+
+                    assert_eq!(Some("xyz"), flatbuffer.message().name());
+                    assert_eq!(971, flatbuffer.message().frequency());
+                    flatbuffer.revalidate().unwrap();
+                }
+
+                #[test]
+                fn test_verification_failed() {
+                    // Something arbitrary that is not a valid flatbuffer. The test will fail if this does end
+                    // up being valid.
+                    let data = [5u8; 1];
+                    assert!($maybe_prefixed::<Location, _>::new(data).is_err());
+                }
+
+                mod bad {
+                    use super::*;
+
+                    use std::cell::Cell;
+
+                    struct Bad {
+                        a: Vec<u8>,
+                        b: [u8; 1],
+                        first: Cell<bool>,
+                    }
+
+                    impl AsRef<[u8]> for Bad {
+                        fn as_ref(&self) -> &[u8] {
+                            if self.first.replace(false) {
+                                self.a.as_ref()
+                            } else {
+                                self.b.as_ref()
+                            }
+                        }
+                    }
+
+                    unsafe impl FlatbufferStorage for Bad {}
+
+                    /// A demonstration of how using an incorrect `FlatbufferStorage` implementation can go
+                    /// wrong. Note that this test is careful to not actually do anything unsound by never
+                    /// using the invalid flatbuffer, it only verifies validation fails on it.
+                    #[test]
+                    fn test_bad() {
+                        let fbb = {
+                            let mut fbb = FlatBufferBuilder::new();
+                            let mut location = LocationBuilder::new(&mut fbb);
+                            location.add_frequency(971);
+                            let location = location.finish();
+                            fbb.$finish(location, None);
+                            fbb
+                        };
+
+                        let data = Bad {
+                            a: fbb.finished_data().iter().copied().collect(),
+                            // Something arbitrary that is not a valid flatbuffer. The test will fail if this
+                            // does end up being valid.
+                            b: [5; 1],
+                            first: Cell::new(true),
+                        };
+
+                        let flatbuffer = $maybe_prefixed::<Location, _>::new(data).unwrap();
+                        assert!(flatbuffer.revalidate().is_err());
+                    }
+                }
+            }
+        };
+    }
+
+    test_variant!(NonSizePrefixedFlatbuffer, non_prefixed, finish);
+    test_variant!(SizePrefixedFlatbuffer, prefixed, finish_size_prefixed);
+}
diff --git a/aos/for_rust.h b/aos/for_rust.h
new file mode 100644
index 0000000..388a854
--- /dev/null
+++ b/aos/for_rust.h
@@ -0,0 +1,23 @@
+#ifndef AOS_FOR_RUST_H_
+#define AOS_FOR_RUST_H_
+
+// This file has some shared utilities for the for_rust C++ code, which provides
+// autocxx-friendly versions of C++ APIs.
+
+#include <string_view>
+
+#include "cxx.h"
+
+namespace aos {
+
+inline rust::Str StringViewToRustStr(std::string_view s) {
+  return rust::Str(s.data(), s.size());
+}
+
+inline std::string_view RustStrToStringView(rust::Str s) {
+  return std::string_view(s.data(), s.size());
+}
+
+}  // namespace aos
+
+#endif  // AOS_FOR_RUST_H_
diff --git a/aos/init.cc b/aos/init.cc
index 3b298fa..9b00f1c 100644
--- a/aos/init.cc
+++ b/aos/init.cc
@@ -39,4 +39,25 @@
   initialized = true;
 }
 
+void InitFromRust(const char *argv0) {
+  CHECK(!IsInitialized()) << "Only initialize once.";
+
+  FLAGS_logtostderr = true;
+
+  google::InitGoogleLogging(argv0);
+
+  // TODO(Brian): Provide a way for Rust to configure C++ flags.
+  char fake_argv0_val[] = "rust";
+  char *fake_argv0 = fake_argv0_val;
+  char **fake_argv = &fake_argv0;
+  int fake_argc = 1;
+  gflags::ParseCommandLineFlags(&fake_argc, &fake_argv, true);
+
+  // TODO(Brian): Where should Rust binaries be configured to write coredumps?
+
+  // TODO(Brian): Figure out what to do with allocator hooks for C++ and Rust.
+
+  initialized = true;
+}
+
 }  // namespace aos
diff --git a/aos/init.h b/aos/init.h
index 1e2b7a4..29480eb 100644
--- a/aos/init.h
+++ b/aos/init.h
@@ -10,6 +10,11 @@
 // ShmEventLoop can confirm the world was initialized before running.
 bool IsInitialized();
 
+// A special initialization function that initializes the C++ parts in a way
+// compatible with Rust. This requires careful coordination with `:init_rs`, do
+// not use it from anywhere else.
+void InitFromRust(const char *argv0);
+
 }  // namespace aos
 
 #endif  // AOS_INIT_H_
diff --git a/aos/init.rs b/aos/init.rs
new file mode 100644
index 0000000..8a5f262
--- /dev/null
+++ b/aos/init.rs
@@ -0,0 +1,29 @@
+use std::{ffi::CString, sync::Once};
+
+autocxx::include_cpp! (
+#include "aos/init.h"
+
+safety!(unsafe)
+
+generate!("aos::InitFromRust")
+);
+
+/// Initializes things for a test.
+///
+/// TODO(Brian): Should we provide a proc macro attribute that handles calling this?
+///
+/// # Panics
+///
+/// Panics if non-test initialization has already been performed.
+pub fn test_init() {
+    static ONCE: Once = Once::new();
+    ONCE.call_once(|| {
+        let argv0 = std::env::args().next().expect("must have argv[0]");
+        let argv0 = CString::new(argv0).expect("argv[0] may not have NUL");
+        // SAFETY: argv0 is a NUL-terminated string.
+        unsafe { ffi::aos::InitFromRust(argv0.as_ptr()) };
+    });
+
+    // TODO(Brian): Do we want any of the other stuff that `:gtest_main` has?
+    // TODO(Brian): Call `aos::SetShmBase` like `:gtest_main` does.
+}
diff --git a/aos/ipc_lib/lockless_queue_test.cc b/aos/ipc_lib/lockless_queue_test.cc
index 57dd94b..b708ebc 100644
--- a/aos/ipc_lib/lockless_queue_test.cc
+++ b/aos/ipc_lib/lockless_queue_test.cc
@@ -211,8 +211,8 @@
   Event ready2;
 
   // Start the thread.
-  ::std::thread t1([this, &ready1]() { RunUntilWakeup(&ready1, 5); });
-  ::std::thread t2([this, &ready2]() { RunUntilWakeup(&ready2, 4); });
+  ::std::thread t1([this, &ready1]() { RunUntilWakeup(&ready1, 2); });
+  ::std::thread t2([this, &ready2]() { RunUntilWakeup(&ready2, 1); });
 
   ready1.Wait();
   ready2.Wait();
@@ -330,20 +330,27 @@
 
 namespace {
 
-// Temporarily pins the current thread to CPUs 0 and 1.
+// Temporarily pins the current thread to the first 2 available CPUs.
 // This speeds up the test on some machines a lot (~4x). It also preserves
 // opportunities for the 2 threads to race each other.
 class PinForTest {
  public:
   PinForTest() {
-    PCHECK(sched_getaffinity(0, sizeof(old_), &old_) == 0);
-    cpu_set_t new_set;
-    CPU_ZERO(&new_set);
-    CPU_SET(0, &new_set);
-    CPU_SET(1, &new_set);
-    PCHECK(sched_setaffinity(0, sizeof(new_set), &new_set) == 0);
+    cpu_set_t cpus = GetCurrentThreadAffinity();
+    old_ = cpus;
+    int number_found = 0;
+    for (int i = 0; i < CPU_SETSIZE; ++i) {
+      if (CPU_ISSET(i, &cpus)) {
+        if (number_found < 2) {
+          ++number_found;
+        } else {
+          CPU_CLR(i, &cpus);
+        }
+      }
+    }
+    SetCurrentThreadAffinity(cpus);
   }
-  ~PinForTest() { PCHECK(sched_setaffinity(0, sizeof(old_), &old_) == 0); }
+  ~PinForTest() { SetCurrentThreadAffinity(old_); }
 
  private:
   cpu_set_t old_;
diff --git a/aos/json_to_flatbuffer.h b/aos/json_to_flatbuffer.h
index 7168e4c..45920a8 100644
--- a/aos/json_to_flatbuffer.h
+++ b/aos/json_to_flatbuffer.h
@@ -102,7 +102,8 @@
             std::ostreambuf_iterator<char>(file));
 }
 
-// Parses a file as JSON and returns the corresponding Flatbuffer, or dies.
+// Parses a file as JSON and returns the corresponding Flatbuffer. Dies if
+// reading the file fails, returns an empty buffer if the contents are invalid.
 template <typename T>
 inline FlatbufferDetachedBuffer<T> JsonFileToFlatbuffer(
     const std::string_view path) {
diff --git a/aos/json_to_flatbuffer_test.cc b/aos/json_to_flatbuffer_test.cc
index 42457f6..4918281 100644
--- a/aos/json_to_flatbuffer_test.cc
+++ b/aos/json_to_flatbuffer_test.cc
@@ -97,6 +97,18 @@
   EXPECT_TRUE(JsonAndBack("{ \"foo_double\": -nan }"));
 }
 
+// Tests that unicode is handled correctly
+TEST_F(JsonToFlatbufferTest, Unicode) {
+  EXPECT_TRUE(JsonAndBack("{ \"foo_string\": \"\\uF672\" }"));
+  EXPECT_TRUE(JsonAndBack("{ \"foo_string\": \"\\uEFEF\" }"));
+  EXPECT_TRUE(JsonAndBack("{ \"foo_string\": \"helloworld\\uD83E\\uDE94\" }"));
+  EXPECT_TRUE(JsonAndBack("{ \"foo_string\": \"\\uD83C\\uDF32\" }"));
+  EXPECT_FALSE(JsonAndBack("{ \"foo_string\": \"\\uP890\" }"));
+  EXPECT_FALSE(JsonAndBack("{ \"foo_string\": \"\\u!FA8\" }"));
+  EXPECT_FALSE(JsonAndBack("{ \"foo_string\": \"\\uF89\" }"));
+  EXPECT_FALSE(JsonAndBack("{ \"foo_string\": \"\\uD83C\" }"));
+}
+
 // Tests that we can handle decimal points.
 TEST_F(JsonToFlatbufferTest, DecimalPoint) {
   EXPECT_TRUE(JsonAndBack("{ \"foo_float\": 5.1 }"));
diff --git a/aos/json_tokenizer.cc b/aos/json_tokenizer.cc
index 0e235e6..b3c6620 100644
--- a/aos/json_tokenizer.cc
+++ b/aos/json_tokenizer.cc
@@ -91,6 +91,11 @@
       // " is the end, declare victory.
       if (Char() == '"') {
         ConsumeChar();
+        if (unicode_high_surrogate_ != -1) {
+          fprintf(stderr, "Invalid unicode - Unpaired high surrogate\n");
+          data_ = original;
+          return false;
+        }
         return true;
       } else {
         ConsumeChar();
@@ -116,11 +121,11 @@
         } else if (Char() == 't') {
           *s += "\t";
         } else if (Char() == 'u') {
-          // TODO(austin): Unicode should be valid, but I really don't care to
-          // do this now...
-          fprintf(stderr, "Unexpected unicode on line %d\n", linenumber_);
-          data_ = original;
-          return false;
+          if (!ConsumeUnicode(s)) {
+            fprintf(stderr, "Invalid unicode on line %d\n", linenumber_);
+            data_ = original;
+            return false;
+          }
         }
       }
       // And skip the escaped character.
@@ -131,6 +136,68 @@
   }
 }
 
+bool Tokenizer::ConsumeUnicode(::std::string *s) {
+  // Under no conditions is it acceptible to run out of data while parsing a
+  // unicode.  Any AtEnd checks should confirm that.
+  uint32_t val;
+
+  // Consume unicode representation
+  ConsumeChar();
+
+  char target[5];
+
+  // Valid unicode is 4 hex digits so evaluate the next 4 characters
+  for (int count = 0; count < 4; count++) {
+    // If there is no data or data is an invalid char, return false
+    if (AtEnd()) {
+      return false;
+    }
+
+    if (!isxdigit(Char())) {
+      return false;
+    }
+
+    target[count] = Char();
+
+    // Do not consume the last character
+    if (count == 3) {
+      break;
+    }
+
+    ConsumeChar();
+  }
+  target[4] = '\0';
+
+  // References: flatbuffers/src/idl_parser.cpp
+  val = flatbuffers::StringToUInt(target, 16);
+
+  if (val >= 0xD800 && val <= 0xDBFF) {
+    if (unicode_high_surrogate_ != -1) {
+      fprintf(stderr, "Invalid unicode - Multiple high surrogates\n");
+      return false;
+    } else {
+      unicode_high_surrogate_ = static_cast<int>(val);
+    }
+  } else if (val >= 0xDC00 && val <= 0xDFFF) {
+    if (unicode_high_surrogate_ == -1) {
+      fprintf(stderr, "Invalid unicode - Unpaired low surrogate\n");
+      return false;
+    } else {
+      int code_point =
+          0x10000 + ((unicode_high_surrogate_ & 0x03FF) << 10) + (val & 0x03FF);
+      flatbuffers::ToUTF8(code_point, s);
+      unicode_high_surrogate_ = -1;
+    }
+  } else {
+    if (unicode_high_surrogate_ != -1) {
+      fprintf(stderr, "Invalid unicode - Unpaired high surrogate\n");
+      return false;
+    }
+    flatbuffers::ToUTF8(static_cast<int>(val), s);
+  }
+  return true;
+}
+
 bool Tokenizer::ConsumeNumber(::std::string *s) {
   // Under no conditions is it acceptible to run out of data while parsing a
   // number.  Any AtEnd() checks should confirm that.
diff --git a/aos/json_tokenizer.h b/aos/json_tokenizer.h
index 5b41da1..dec2a32 100644
--- a/aos/json_tokenizer.h
+++ b/aos/json_tokenizer.h
@@ -4,6 +4,7 @@
 #include <string>
 #include <string_view>
 #include <vector>
+#include "flatbuffers/util.h"
 
 namespace aos {
 
@@ -72,6 +73,10 @@
   // and false otherwise.
   // data_ is unconditionally updated.
   void ConsumeWhitespace();
+  // Consumes a unicode out of data_.  Populates s with the unicode.  Returns
+  // true if a valid unicode was found, and false otherwise. data_ is updated
+  // only on success.
+  bool ConsumeUnicode(::std::string *s);
 
   // State for the parsing state machine.
   enum class State {
@@ -90,6 +95,11 @@
   // Current line number used for printing debug.
   int linenumber_ = 0;
 
+  // Surrogate pairs i.e. high surrogates (\ud000 - \ud8ff) combined
+  // with low surrogates (\udc00 - \udfff) cannot be interpreted when
+  // they do not appear as a part of the pair.
+  int unicode_high_surrogate_ = -1;
+
   // Stack used to track which object type we were in when we recursed.
   enum class ObjectType {
     kObject,
diff --git a/aos/network/log_web_proxy_main.cc b/aos/network/log_web_proxy_main.cc
index 1cc8e17..34e40a2 100644
--- a/aos/network/log_web_proxy_main.cc
+++ b/aos/network/log_web_proxy_main.cc
@@ -17,6 +17,9 @@
 DEFINE_int32(buffer_size, -1, "-1 if infinite, in # of messages / channel.");
 DEFINE_double(monotonic_start_time, -1.0, "Start time (sec)");
 DEFINE_double(monotonic_end_time, -1.0, "End time (sec)");
+DEFINE_double(
+    replay_rate, -1,
+    "-1 to replay as fast as possible; 1.0 = realtime, 0.5 = half speed.");
 
 int main(int argc, char **argv) {
   aos::InitGoogle(&argc, &argv);
@@ -31,6 +34,12 @@
 
   reader.Register();
 
+  // If going for "as fast as possible" don't actually use infinity, because we
+  // don't want the log reading blocking our use of the epoll handlers.
+  reader.SetRealtimeReplayRate(FLAGS_replay_rate == -1.0
+                                   ? std::numeric_limits<double>::max()
+                                   : FLAGS_replay_rate);
+
   std::unique_ptr<aos::EventLoop> event_loop;
 
   if (FLAGS_node.empty()) {
@@ -55,13 +64,12 @@
   }
 
   aos::web_proxy::WebProxy web_proxy(
-      event_loop.get(), aos::web_proxy::StoreHistory::kYes, FLAGS_buffer_size);
+      event_loop.get(),
+      reader.event_loop_factory()->scheduler_epoll(),
+      aos::web_proxy::StoreHistory::kYes, FLAGS_buffer_size);
 
   web_proxy.SetDataPath(FLAGS_data_dir.c_str());
 
-  // Keep the web proxy alive past when we finish reading the logfile.
-  reader.set_exit_on_finish(false);
-
   if (FLAGS_monotonic_end_time > 0) {
     event_loop->AddTimer([&web_proxy]() { web_proxy.StopRecording(); })
         ->Setup(aos::monotonic_clock::time_point(
@@ -70,4 +78,11 @@
   }
 
   reader.event_loop_factory()->Run();
+
+  // Keep the web proxy alive past when we finish reading the logfile, but crank
+  // down the replay rate so that we don't peg our entire CPU just trying to
+  // service timers in the web proxy code.
+  reader.set_exit_on_finish(false);
+  reader.SetRealtimeReplayRate(1.0);
+  reader.event_loop_factory()->Run();
 }
diff --git a/aos/network/message_bridge_client_status.cc b/aos/network/message_bridge_client_status.cc
index aa2484d..f3511a0 100644
--- a/aos/network/message_bridge_client_status.cc
+++ b/aos/network/message_bridge_client_status.cc
@@ -219,12 +219,16 @@
   filter->Sample(monotonic_delivered_time, offset);
 }
 
-void MessageBridgeClientStatus::DisableStatistics() {
+void MessageBridgeClientStatus::DisableStatistics(bool destroy_sender) {
   statistics_timer_->Disable();
   send_ = false;
+  if (destroy_sender) {
+    sender_ = aos::Sender<ClientStatistics>();
+  }
 }
 
 void MessageBridgeClientStatus::EnableStatistics() {
+  CHECK(sender_.valid());
   send_ = true;
   statistics_timer_->Setup(event_loop_->monotonic_now() + kStatisticsPeriod,
                            kStatisticsPeriod);
diff --git a/aos/network/message_bridge_client_status.h b/aos/network/message_bridge_client_status.h
index 9c21169..033af95 100644
--- a/aos/network/message_bridge_client_status.h
+++ b/aos/network/message_bridge_client_status.h
@@ -54,7 +54,10 @@
   void Connect(int client_index);
 
   // Disables sending out any statistics messages.
-  void DisableStatistics();
+  // If destroy_sender is set, will clear the ClientStatistics Sender.
+  // EnableStatistics cannot be called again if destroy_sender is set. This is
+  // used by the LogReader to enforce one-sender-per-channel checks.
+  void DisableStatistics(bool destroy_sender);
   // Enables sending out any statistics messages.
   void EnableStatistics();
 
diff --git a/aos/network/message_bridge_server_lib.cc b/aos/network/message_bridge_server_lib.cc
index f6c0c4d..b0973ac 100644
--- a/aos/network/message_bridge_server_lib.cc
+++ b/aos/network/message_bridge_server_lib.cc
@@ -192,26 +192,33 @@
   return -1;
 }
 
-int ChannelState::NodeConnected(
-    const Node *node, sctp_assoc_t assoc_id, int stream, SctpServer *server,
-    aos::monotonic_clock::time_point monotonic_now) {
+int ChannelState::NodeConnected(const Node *node, sctp_assoc_t assoc_id,
+                                int stream, SctpServer *server,
+                                aos::monotonic_clock::time_point monotonic_now,
+                                std::vector<sctp_assoc_t> *reconnected) {
   VLOG(1) << "Channel " << channel_->name()->string_view() << " "
           << channel_->type()->string_view() << " mapped to stream " << stream
           << " for node " << node->name()->string_view() << " assoc_id "
           << assoc_id;
   for (ChannelState::Peer &peer : peers_) {
+    // The node name is the most reliable method of detecting the same peer
+    // because in a multihomed system, the same IP address may not always be
+    // used to connect.
     if (peer.connection->name()->string_view() == node->name()->string_view()) {
       // There's a peer already connected.  Disconnect them and take over.
-      if (peer.sac_assoc_id != 0) {
+      if (peer.sac_assoc_id != 0 &&
+          (std::find(reconnected->begin(), reconnected->end(),
+                     peer.sac_assoc_id) == reconnected->end())) {
+        reconnected->push_back(peer.sac_assoc_id);
         if (peer.sac_assoc_id == assoc_id) {
-          LOG(WARNING) << "Node " << node->name()->string_view()
-                       << " reconnecting on " << assoc_id
-                       << "with the same ID, something got lost";
+          LOG_EVERY_T(WARNING, 0.025)
+              << "Node " << node->name()->string_view() << " reconnecting on "
+              << assoc_id << " with the same ID, something got lost";
         } else {
-          LOG(WARNING) << "Node " << node->name()->string_view() << " "
-                       << " already connected on " << peer.sac_assoc_id
-                       << "aborting old connection and switching to "
-                       << assoc_id;
+          LOG_EVERY_T(WARNING, 0.025)
+              << "Node " << node->name()->string_view() << " "
+              << " already connected on " << peer.sac_assoc_id
+              << " aborting old connection and switching to " << assoc_id;
           server->Abort(peer.sac_assoc_id);
         }
       }
@@ -480,6 +487,14 @@
     // Account for the control channel and delivery times channel.
     size_t channel_index = kControlStreams();
     int node_index = -1;
+    // TODO(sarah.newman): it would be better to do a refactor so that peers
+    // don't belong to channels. I am trying to do a quick hack to reduce the
+    // number of log messages without potentially losing information because the
+    // number of messages is overwhelming right now at first boot. This also
+    // should mean that we only send a single abort per association change,
+    // which is more correct behavior.
+    std::vector<sctp_assoc_t> reconnected;
+    reconnected.reserve(connect->channels_to_transfer()->size());
     for (const Channel *channel : *connect->channels_to_transfer()) {
       bool matched = false;
       for (std::unique_ptr<ChannelState> &channel_state : channels_) {
@@ -489,7 +504,7 @@
         if (channel_state->Matches(channel)) {
           node_index = channel_state->NodeConnected(
               connect->node(), message->header.rcvinfo.rcv_assoc_id,
-              channel_index, &server_, monotonic_now);
+              channel_index, &server_, monotonic_now, &reconnected);
           CHECK_NE(node_index, -1);
           matched = true;
           break;
diff --git a/aos/network/message_bridge_server_lib.h b/aos/network/message_bridge_server_lib.h
index e70d34a..6f2be08 100644
--- a/aos/network/message_bridge_server_lib.h
+++ b/aos/network/message_bridge_server_lib.h
@@ -64,10 +64,13 @@
 
   // Needs to be called when a node (might have) disconnected.
   // Returns the node index which [dis]connected, or -1 if it didn't match.
+  // reconnected is a vector of associations which have already connected.
+  // This will potentially grow to the number of associations as we find reconnects.
   int NodeDisconnected(sctp_assoc_t assoc_id);
   int NodeConnected(const Node *node, sctp_assoc_t assoc_id, int stream,
                     SctpServer *server,
-                    aos::monotonic_clock::time_point monotonic_now);
+                    aos::monotonic_clock::time_point monotonic_now,
+                    std::vector<sctp_assoc_t> *reconnected);
 
   // Adds a new peer.
   void AddPeer(const Connection *connection, int node_index,
diff --git a/aos/network/message_bridge_server_status.cc b/aos/network/message_bridge_server_status.cc
index c82158b..4f6abff 100644
--- a/aos/network/message_bridge_server_status.cc
+++ b/aos/network/message_bridge_server_status.cc
@@ -411,13 +411,19 @@
   }
 }
 
-void MessageBridgeServerStatus::DisableStatistics() {
+void MessageBridgeServerStatus::DisableStatistics(bool destroy_senders) {
   send_ = false;
   statistics_timer_->Disable();
+  if (destroy_senders) {
+    sender_ = aos::Sender<ServerStatistics>();
+    timestamp_sender_ = aos::Sender<Timestamp>();
+  }
 }
 
 void MessageBridgeServerStatus::EnableStatistics() {
   send_ = true;
+  CHECK(sender_.valid());
+  CHECK(timestamp_sender_.valid());
   statistics_timer_->Setup(event_loop_->monotonic_now() + kPingPeriod,
                            kPingPeriod);
 }
diff --git a/aos/network/message_bridge_server_status.h b/aos/network/message_bridge_server_status.h
index feb1b05..327930c 100644
--- a/aos/network/message_bridge_server_status.h
+++ b/aos/network/message_bridge_server_status.h
@@ -73,7 +73,7 @@
   }
 
   // Disables sending out any statistics messages.
-  void DisableStatistics();
+  void DisableStatistics(bool destroy_senders);
   // Enables sending out any statistics messages.
   void EnableStatistics();
 
diff --git a/aos/network/multinode_timestamp_filter.cc b/aos/network/multinode_timestamp_filter.cc
index 81fc03f..5b63d18 100644
--- a/aos/network/multinode_timestamp_filter.cc
+++ b/aos/network/multinode_timestamp_filter.cc
@@ -182,7 +182,7 @@
       constexpr double kMinNetworkDelay = 2.0;
 
       const std::pair<NoncausalTimestampFilter::Pointer,
-                      std::pair<chrono::nanoseconds, double>>
+                      std::tuple<chrono::nanoseconds, double, double>>
           offset_error =
               FLAGS_bounds_offset_error
                   ? filter.filter->BoundsOffsetError(
@@ -198,8 +198,8 @@
       filter.pointer = offset_error.first;
 
       const std::pair<chrono::nanoseconds, double> error =
-          std::make_pair(offset_error.second.first,
-                         offset_error.second.second - kMinNetworkDelay);
+          std::make_pair(std::get<0>(offset_error.second),
+                         std::get<1>(offset_error.second) - kMinNetworkDelay);
 
       std::pair<chrono::nanoseconds, double> grad;
       double hess;
@@ -1856,6 +1856,7 @@
           std::optional<std::tuple<logger::BootTimestamp, logger::BootDuration>>
               result = next_node_filter->Consume();
           CHECK(result);
+          WriteFilter(next_node_filter, *result);
           next_node_filter->Pop(std::get<0>(*result) -
                                 time_estimation_buffer_seconds_);
         }
@@ -2061,17 +2062,22 @@
                     << (last_monotonics_[i].time - result_times[i].time).count()
                     << "ns";
         }
+        UpdateSolution(std::move(result_times));
+        WriteFilter(next_filter, sample);
+        FlushAndClose(false);
         LOG(FATAL)
             << "Found a solution before the last returned solution on node "
             << solution_node_index;
         break;
       case TimeComparison::kEq:
+        WriteFilter(next_filter, sample);
         return NextTimestamp();
       case TimeComparison::kInvalid: {
         const chrono::nanoseconds invalid_distance =
             InvalidDistance(last_monotonics_, result_times);
         if (invalid_distance <=
             chrono::nanoseconds(FLAGS_max_invalid_distance_ns)) {
+          WriteFilter(next_filter, sample);
           return NextTimestamp();
         }
         LOG(INFO) << "Times can't be compared by " << invalid_distance.count()
@@ -2083,6 +2089,9 @@
                     << (last_monotonics_[i].time - result_times[i].time).count()
                     << "ns";
         }
+        UpdateSolution(std::move(result_times));
+        WriteFilter(next_filter, sample);
+        FlushAndClose(false);
         LOG(FATAL) << "Please investigate.  Use --max_invalid_distance_ns="
                    << invalid_distance.count() << " to ignore this.";
       } break;
diff --git a/aos/network/multinode_timestamp_filter.h b/aos/network/multinode_timestamp_filter.h
index 0954984..253bb82 100644
--- a/aos/network/multinode_timestamp_filter.h
+++ b/aos/network/multinode_timestamp_filter.h
@@ -192,7 +192,7 @@
   // TODO(austin): Pop here instead of in log reader.
   void ObserveTimePassed(distributed_clock::time_point time) override;
 
-  // Queues 1 more timestammp in the interpolation list.  This is public for
+  // Queues 1 more timestamp in the interpolation list.  This is public for
   // timestamp_extractor so it can hammer on the log until everything is queued.
   std::optional<const std::tuple<distributed_clock::time_point,
                                  std::vector<logger::BootTimestamp>> *>
diff --git a/aos/network/multinode_timestamp_filter_test.cc b/aos/network/multinode_timestamp_filter_test.cc
index dab8e06..c078e28 100644
--- a/aos/network/multinode_timestamp_filter_test.cc
+++ b/aos/network/multinode_timestamp_filter_test.cc
@@ -393,16 +393,17 @@
 
   // Confirm that the error is almost equal for both directions.  The solution
   // is an integer solution, so there will be a little bit of error left over.
-  std::pair<chrono::nanoseconds, double> a_error =
+  std::tuple<chrono::nanoseconds, double, double> a_error =
       a.OffsetError(nullptr, NoncausalTimestampFilter::Pointer(),
                     std::get<0>(result1)[0], 0.0, std::get<0>(result1)[1], 0.0)
           .second;
-  std::pair<chrono::nanoseconds, double> b_error =
+  std::tuple<chrono::nanoseconds, double, double> b_error =
       b.OffsetError(nullptr, NoncausalTimestampFilter::Pointer(),
                     std::get<0>(result1)[1], 0.0, std::get<0>(result1)[0], 0.0)
           .second;
-  EXPECT_NEAR(static_cast<double>((a_error.first - b_error.first).count()) +
-                  (a_error.second - b_error.second),
+  EXPECT_NEAR(static_cast<double>(
+                  (std::get<0>(a_error) - std::get<0>(b_error)).count()) +
+                  (std::get<1>(a_error) - std::get<1>(b_error)),
               0.0, 0.5);
 }
 
diff --git a/aos/network/rawrtc.h b/aos/network/rawrtc.h
index 4c61313..f9de8b0 100644
--- a/aos/network/rawrtc.h
+++ b/aos/network/rawrtc.h
@@ -17,20 +17,19 @@
 namespace web_proxy {
 
 // TODO(austin): This doesn't allow streaming data in.
-#define CHECK_RAWRTC(x)                            \
-  [&]() {                                          \
-    enum rawrtc_code r = x;                        \
-    return CHECK(r == RAWRTC_CODE_SUCCESS)         \
-           << " actual " << rawrtc_code_to_str(r); \
+#define CHECK_RAWRTC(x)                                                     \
+  [&]() {                                                                   \
+    enum rawrtc_code r = x;                                                 \
+    CHECK(r == RAWRTC_CODE_SUCCESS) << " actual " << rawrtc_code_to_str(r); \
   }()
 
-#define CHECK_RAWRTC_IGNORE(x, i)           \
-  [&]() {                                   \
-    enum rawrtc_code r = x;                 \
-    for (auto w : i) {                      \
-      if (w == r) return;                   \
-    }                                       \
-    return CHECK(r == RAWRTC_CODE_SUCCESS); \
+#define CHECK_RAWRTC_IGNORE(x, i)    \
+  [&]() {                            \
+    enum rawrtc_code r = x;          \
+    for (auto w : i) {               \
+      if (w == r) return;            \
+    }                                \
+    CHECK(r == RAWRTC_CODE_SUCCESS); \
   }()
 
 // Wrapper around a RawRTC data channel to manage it's lifetime and provide C++
diff --git a/aos/network/sctp_client.cc b/aos/network/sctp_client.cc
index fac1114..a2c0439 100644
--- a/aos/network/sctp_client.cc
+++ b/aos/network/sctp_client.cc
@@ -52,7 +52,8 @@
   scheduler.assoc_value = SCTP_SS_PRIO;
   if (setsockopt(fd(), IPPROTO_SCTP, SCTP_STREAM_SCHEDULER, &scheduler,
                  sizeof(scheduler)) != 0) {
-    PLOG(WARNING) << "Failed to set scheduler";
+    LOG_FIRST_N(WARNING, 1) << "Failed to set scheduler: " << strerror(errno)
+                            << " [" << errno << "]";
   }
 }
 
diff --git a/aos/network/sctp_server.cc b/aos/network/sctp_server.cc
index 15da7c0..2f6a041 100644
--- a/aos/network/sctp_server.cc
+++ b/aos/network/sctp_server.cc
@@ -76,7 +76,8 @@
   scheduler.assoc_value = SCTP_SS_PRIO;
   if (setsockopt(fd(), IPPROTO_SCTP, SCTP_STREAM_SCHEDULER, &scheduler,
                  sizeof(scheduler)) != 0) {
-    PLOG(WARNING) << "Failed to set scheduler";
+    LOG_FIRST_N(WARNING, 1) << "Failed to set scheduler: " << strerror(errno)
+                            << " [" << errno << "]";
   }
 }
 
@@ -89,7 +90,8 @@
   sctp_priority.stream_value = priority;
   if (setsockopt(fd(), IPPROTO_SCTP, SCTP_STREAM_SCHEDULER_VALUE,
                  &sctp_priority, sizeof(sctp_priority)) != 0) {
-    PLOG(WARNING) << "Failed to set scheduler";
+    LOG_FIRST_N(WARNING, 1) << "Failed to set scheduler: " << strerror(errno)
+                            << " [" << errno << "]";
   }
 }
 
diff --git a/aos/network/timestamp_channel.h b/aos/network/timestamp_channel.h
index e35a170..d95edda 100644
--- a/aos/network/timestamp_channel.h
+++ b/aos/network/timestamp_channel.h
@@ -59,6 +59,8 @@
 
   aos::Sender<RemoteMessage> *SenderForChannel(const Channel *channel,
                                                const Connection *connection);
+  void ClearSenderForChannel(const Channel *channel,
+                             const Connection *connection);
 
  private:
   aos::EventLoop *event_loop_;
diff --git a/aos/network/timestamp_filter.cc b/aos/network/timestamp_filter.cc
index 8d1c9fe..99dd671 100644
--- a/aos/network/timestamp_filter.cc
+++ b/aos/network/timestamp_filter.cc
@@ -773,17 +773,17 @@
 chrono::nanoseconds NoncausalTimestampFilter::ExtrapolateOffset(
     std::tuple<monotonic_clock::time_point, std::chrono::nanoseconds> p0,
     monotonic_clock::time_point ta) {
-  return ExtrapolateOffset(p0, ta, 0.0).first;
+  return std::get<0>(ExtrapolateOffset(p0, ta, 0.0));
 }
 
 chrono::nanoseconds NoncausalTimestampFilter::InterpolateOffset(
     std::tuple<monotonic_clock::time_point, chrono::nanoseconds> p0,
     std::tuple<monotonic_clock::time_point, chrono::nanoseconds> p1,
     monotonic_clock::time_point ta) {
-  return InterpolateOffset(p0, p1, ta, 0.0).first;
+  return std::get<0>(InterpolateOffset(p0, p1, ta, 0.0));
 }
 
-std::pair<chrono::nanoseconds, double>
+std::tuple<chrono::nanoseconds, double, double>
 NoncausalTimestampFilter::InterpolateOffset(
     std::tuple<monotonic_clock::time_point, chrono::nanoseconds> p0,
     std::tuple<monotonic_clock::time_point, chrono::nanoseconds> p1,
@@ -821,12 +821,12 @@
   //
   // We have good tests which confirm for small offsets this matches nicely. For
   // large offsets, the 128 bit math will take care of us.
+  const double slope =
+      static_cast<double>(doffset.count()) / static_cast<double>(dt.count());
   const double remainder =
       static_cast<double>(numerator % absl::int128(dt.count())) / dt.count() +
-      (numerator > 0 ? -0.5 : 0.5) +
-      ta * static_cast<double>(doffset.count()) /
-          static_cast<double>(dt.count());
-  return std::make_pair(integer, remainder);
+      (numerator > 0 ? -0.5 : 0.5) + ta * slope;
+  return std::make_tuple(integer, remainder, slope);
 }
 
 chrono::nanoseconds NoncausalTimestampFilter::BoundOffset(
@@ -841,21 +841,22 @@
                   NoncausalTimestampFilter::ExtrapolateOffset(p1, ta));
 }
 
-std::pair<chrono::nanoseconds, double> NoncausalTimestampFilter::BoundOffset(
+std::tuple<chrono::nanoseconds, double, double>
+NoncausalTimestampFilter::BoundOffset(
     std::tuple<monotonic_clock::time_point, chrono::nanoseconds> p0,
     std::tuple<monotonic_clock::time_point, chrono::nanoseconds> p1,
     monotonic_clock::time_point ta_base, double ta) {
   DCHECK_GE(ta, 0.0);
   DCHECK_LT(ta, 1.0);
 
-  const std::pair<chrono::nanoseconds, double> o0 =
+  const std::tuple<chrono::nanoseconds, double, double> o0 =
       NoncausalTimestampFilter::ExtrapolateOffset(p0, ta_base, ta);
-  const std::pair<chrono::nanoseconds, double> o1 =
+  const std::tuple<chrono::nanoseconds, double, double> o1 =
       NoncausalTimestampFilter::ExtrapolateOffset(p1, ta_base, ta);
 
   // Want to calculate max(o0 + o0r, o1 + o1r) without precision problems.
-  if (static_cast<double>((o0.first - o1.first).count()) >
-      o1.second - o0.second) {
+  if (static_cast<double>((std::get<0>(o0) - std::get<0>(o1)).count()) >
+      std::get<1>(o1) - std::get<1>(o0)) {
     // Ok, o0 is now > o1.  We want the max, so return o0.
     return o0;
   } else {
@@ -863,7 +864,7 @@
   }
 }
 
-std::pair<chrono::nanoseconds, double>
+std::tuple<chrono::nanoseconds, double, double>
 NoncausalTimestampFilter::ExtrapolateOffset(
     std::tuple<monotonic_clock::time_point, std::chrono::nanoseconds> p0,
     monotonic_clock::time_point ta_base, double ta) {
@@ -892,12 +893,13 @@
     const absl::int128 numerator =
         (absl::int128(dt.count() - MaxVelocityRatio::den / 2) *
          absl::int128(MaxVelocityRatio::num));
-    return std::make_pair(
+    return std::make_tuple(
         std::get<1>(p0) + chrono::nanoseconds(static_cast<int64_t>(
                               numerator / absl::int128(MaxVelocityRatio::den))),
         static_cast<double>(numerator % absl::int128(MaxVelocityRatio::den)) /
                 static_cast<double>(MaxVelocityRatio::den) +
-            0.5 + ta * kMaxVelocity());
+            0.5 + ta * kMaxVelocity(),
+        kMaxVelocity());
   } else {
     // Extrapolate forwards, using the (negative) MaxVelocity slope
     // Same concept, except going foward past our last (most recent) sample:
@@ -913,12 +915,13 @@
     const absl::int128 numerator =
         absl::int128(dt.count() + MaxVelocityRatio::den / 2) *
         absl::int128(MaxVelocityRatio::num);
-    return std::make_pair(
+    return std::make_tuple(
         std::get<1>(p0) - chrono::nanoseconds(static_cast<int64_t>(
                               numerator / absl::int128(MaxVelocityRatio::den))),
         -static_cast<double>(numerator % absl::int128(MaxVelocityRatio::den)) /
                 static_cast<double>(MaxVelocityRatio::den) +
-            0.5 - ta * kMaxVelocity());
+            0.5 - ta * kMaxVelocity(),
+        -kMaxVelocity());
   }
 }
 
@@ -946,7 +949,7 @@
                             points.second.first, points.second.second, ta));
 }
 
-std::pair<Pointer, std::pair<chrono::nanoseconds, double>>
+std::pair<Pointer, std::tuple<chrono::nanoseconds, double, double>>
 NoncausalTimestampFilter::SingleFilter::Offset(
     const SingleFilter *other, Pointer pointer,
     monotonic_clock::time_point ta_base, double ta) const {
@@ -976,7 +979,7 @@
           points.second.first, points.second.second, ta_base, ta));
 }
 
-std::pair<Pointer, std::pair<chrono::nanoseconds, double>>
+std::pair<Pointer, std::tuple<chrono::nanoseconds, double, double>>
 NoncausalTimestampFilter::SingleFilter::BoundsOffset(
     const SingleFilter *other, Pointer pointer,
     monotonic_clock::time_point ta_base, double ta) const {
@@ -1005,7 +1008,7 @@
                                           points.second.second, ta_base, ta));
 }
 
-std::pair<Pointer, std::pair<chrono::nanoseconds, double>>
+std::pair<Pointer, std::tuple<chrono::nanoseconds, double, double>>
 NoncausalTimestampFilter::SingleFilter::OffsetError(
     const SingleFilter *other, Pointer pointer,
     aos::monotonic_clock::time_point ta_base, double ta,
@@ -1013,17 +1016,19 @@
   NormalizeTimestamps(&ta_base, &ta);
   NormalizeTimestamps(&tb_base, &tb);
 
-  const std::pair<Pointer, std::pair<std::chrono::nanoseconds, double>> offset =
-      Offset(other, pointer, ta_base, ta);
+  const std::pair<Pointer, std::tuple<std::chrono::nanoseconds, double, double>>
+      offset = Offset(other, pointer, ta_base, ta);
 
   // Compute the integer portion first, and the double portion second.  Subtract
   // the results of each.  This handles large offsets without losing precision.
   return std::make_pair(
-      offset.first, std::make_pair(((tb_base - ta_base) - offset.second.first),
-                                   (tb - ta) - offset.second.second));
+      offset.first,
+      std::make_tuple(((tb_base - ta_base) - std::get<0>(offset.second)),
+                      (tb - ta) - std::get<1>(offset.second),
+                      std::get<2>(offset.second)));
 }
 
-std::pair<Pointer, std::pair<chrono::nanoseconds, double>>
+std::pair<Pointer, std::tuple<chrono::nanoseconds, double, double>>
 NoncausalTimestampFilter::SingleFilter::BoundsOffsetError(
     const SingleFilter *other, Pointer pointer,
     aos::monotonic_clock::time_point ta_base, double ta,
@@ -1031,14 +1036,16 @@
   NormalizeTimestamps(&ta_base, &ta);
   NormalizeTimestamps(&tb_base, &tb);
 
-  const std::pair<Pointer, std::pair<std::chrono::nanoseconds, double>> offset =
-      BoundsOffset(other, pointer, ta_base, ta);
+  const std::pair<Pointer, std::tuple<std::chrono::nanoseconds, double, double>>
+      offset = BoundsOffset(other, pointer, ta_base, ta);
 
   // Compute the integer portion first, and the double portion second.  Subtract
   // the results of each.  This handles large offsets without losing precision.
   return std::make_pair(
-      offset.first, std::make_pair((tb_base - ta_base) - offset.second.first,
-                                   (tb - ta) - offset.second.second));
+      offset.first,
+      std::make_tuple((tb_base - ta_base) - std::get<0>(offset.second),
+                      (tb - ta) - std::get<1>(offset.second),
+                      std::get<2>(offset.second)));
 }
 
 std::string NoncausalTimestampFilter::DebugOffsetError(
@@ -1128,22 +1135,24 @@
     auto reference_timestamp = GetReferenceTimestamp(ta_base, ta);
 
     // Special case size = 1 or ta before first timestamp, so we extrapolate
-    const std::pair<chrono::nanoseconds, double> offset =
+    const std::tuple<chrono::nanoseconds, double, double> offset =
         NoncausalTimestampFilter::ExtrapolateOffset(reference_timestamp.second,
                                                     ta_base, ta);
 
     // We want to do offset + ta > tb, but we need to do it with minimal
     // numerical precision problems.
     // See below for why this is a >=
-    if (static_cast<double>((offset.first + ta_base - tb_base).count()) >=
-        tb - ta - offset.second) {
+    if (static_cast<double>(
+            (std::get<0>(offset) + ta_base - tb_base).count()) >=
+        tb - ta - std::get<1>(offset)) {
       LOG(ERROR) << node_names_ << " "
-                 << TimeString(ta_base, ta, offset.first, offset.second)
+                 << TimeString(ta_base, ta, std::get<0>(offset),
+                               std::get<1>(offset))
                  << " > solution time "
                  << tb_base + chrono::nanoseconds(
                                   static_cast<int64_t>(std::round(tb)))
                  << ", " << tb - std::round(tb) << " foo";
-      LOG(INFO) << "Remainder " << offset.second;
+      LOG(INFO) << "Remainder " << std::get<1>(offset);
       return false;
     }
     return true;
@@ -1159,14 +1168,15 @@
       std::pair<std::tuple<monotonic_clock::time_point, chrono::nanoseconds>,
                 std::tuple<monotonic_clock::time_point, chrono::nanoseconds>>>
       points = FindTimestamps(other, false, pointer, ta_base, ta);
-  const std::pair<chrono::nanoseconds, double> offset =
+  const std::tuple<chrono::nanoseconds, double, double> offset =
       NoncausalTimestampFilter::BoundOffset(points.second.first,
                                             points.second.second, ta_base, ta);
   // See below for why this is a >=
-  if (static_cast<double>((offset.first + ta_base - tb_base).count()) >=
-      tb - offset.second - ta) {
+  if (static_cast<double>((std::get<0>(offset) + ta_base - tb_base).count()) >=
+      tb - std::get<1>(offset) - ta) {
     LOG(ERROR) << node_names_ << " "
-               << TimeString(ta_base, ta, offset.first, offset.second)
+               << TimeString(ta_base, ta, std::get<0>(offset),
+                             std::get<1>(offset))
                << " > solution time " << tb_base << ", " << tb;
     LOG(ERROR) << "Bracketing times are " << TimeString(points.second.first)
                << " and " << TimeString(points.second.second);
diff --git a/aos/network/timestamp_filter.h b/aos/network/timestamp_filter.h
index 2b5ff47..5aaa7fd 100644
--- a/aos/network/timestamp_filter.h
+++ b/aos/network/timestamp_filter.h
@@ -311,29 +311,31 @@
         other_points_;
   };
 
-  // Returns the error between the offset in the provided timestamps, and the
-  // offset at ta.  Also returns a pointer to the timestamps used for the
-  // lookup to be passed back in again for a more efficient second lookup.
-  std::pair<Pointer, std::pair<std::chrono::nanoseconds, double>> OffsetError(
-      const NoncausalTimestampFilter *other, Pointer pointer,
-      logger::BootTimestamp ta_base, double ta, logger::BootTimestamp tb_base,
-      double tb) const {
+  // Returns the error between the offset in the provided timestamps, the
+  // offset at ta, and d error/dta.  Also returns a pointer to the timestamps
+  // used for the lookup to be passed back in again for a more efficient second
+  // lookup.
+  std::pair<Pointer, std::tuple<std::chrono::nanoseconds, double, double>>
+  OffsetError(const NoncausalTimestampFilter *other, Pointer pointer,
+              logger::BootTimestamp ta_base, double ta,
+              logger::BootTimestamp tb_base, double tb) const {
     const BootFilter *boot_filter = filter(pointer, ta_base.boot, tb_base.boot);
     const SingleFilter *other_filter =
         other == nullptr
             ? nullptr
             : other->maybe_single_filter(tb_base.boot, ta_base.boot);
-    std::pair<Pointer, std::pair<std::chrono::nanoseconds, double>> result =
-        boot_filter->filter.OffsetError(other_filter, pointer, ta_base.time, ta,
-                                        tb_base.time, tb);
+    std::pair<Pointer, std::tuple<std::chrono::nanoseconds, double, double>>
+        result = boot_filter->filter.OffsetError(
+            other_filter, pointer, ta_base.time, ta, tb_base.time, tb);
     result.first.boot_filter_ = boot_filter;
     return result;
   }
 
-  // Returns the error between the offset in the provided timestamps, and the
-  // bounds offset at ta.  Also returns a pointer to the timestamps used for the
-  // lookup to be passed back in again for a more efficient second lookup.
-  std::pair<Pointer, std::pair<std::chrono::nanoseconds, double>>
+  // Returns the error between the offset in the provided timestamps, the
+  // bounds offset at ta, and d error/dta.  Also returns a pointer to the
+  // timestamps used for the lookup to be passed back in again for a more
+  // efficient second lookup.
+  std::pair<Pointer, std::tuple<std::chrono::nanoseconds, double, double>>
   BoundsOffsetError(const NoncausalTimestampFilter *other, Pointer pointer,
                     logger::BootTimestamp ta_base, double ta,
                     logger::BootTimestamp tb_base, double tb) const {
@@ -342,8 +344,8 @@
         other == nullptr
             ? nullptr
             : other->maybe_single_filter(tb_base.boot, ta_base.boot);
-    std::pair<Pointer, std::pair<std::chrono::nanoseconds, double>> result =
-        boot_filter->filter.BoundsOffsetError(
+    std::pair<Pointer, std::tuple<std::chrono::nanoseconds, double, double>>
+        result = boot_filter->filter.BoundsOffsetError(
             other_filter, pointer, ta_base.time, ta, tb_base.time, tb);
     result.first.boot_filter_ = boot_filter;
     return result;
@@ -573,17 +575,17 @@
       std::tuple<monotonic_clock::time_point, std::chrono::nanoseconds> p0,
       monotonic_clock::time_point ta);
 
-  static std::pair<std::chrono::nanoseconds, double> InterpolateOffset(
+  static std::tuple<std::chrono::nanoseconds, double, double> InterpolateOffset(
       std::tuple<monotonic_clock::time_point, std::chrono::nanoseconds> p0,
       std::tuple<monotonic_clock::time_point, std::chrono::nanoseconds> p1,
       monotonic_clock::time_point ta_base, double ta);
 
-  static std::pair<std::chrono::nanoseconds, double> BoundOffset(
+  static std::tuple<std::chrono::nanoseconds, double, double> BoundOffset(
       std::tuple<monotonic_clock::time_point, std::chrono::nanoseconds> p0,
       std::tuple<monotonic_clock::time_point, std::chrono::nanoseconds> p1,
       monotonic_clock::time_point ta_base, double ta);
 
-  static std::pair<std::chrono::nanoseconds, double> ExtrapolateOffset(
+  static std::tuple<std::chrono::nanoseconds, double, double> ExtrapolateOffset(
       std::tuple<monotonic_clock::time_point, std::chrono::nanoseconds> p0,
       monotonic_clock::time_point ta_base, double ta);
 
@@ -634,20 +636,20 @@
     std::pair<Pointer, std::chrono::nanoseconds> Offset(
         const SingleFilter *other, Pointer pointer,
         monotonic_clock::time_point ta) const;
-    std::pair<Pointer, std::pair<std::chrono::nanoseconds, double>> Offset(
-        const SingleFilter *other, Pointer pointer,
-        monotonic_clock::time_point ta_base, double ta) const;
+    std::pair<Pointer, std::tuple<std::chrono::nanoseconds, double, double>>
+    Offset(const SingleFilter *other, Pointer pointer,
+           monotonic_clock::time_point ta_base, double ta) const;
 
-    std::pair<Pointer, std::pair<std::chrono::nanoseconds, double>>
+    std::pair<Pointer, std::tuple<std::chrono::nanoseconds, double, double>>
     BoundsOffset(const SingleFilter *other, Pointer pointer,
                  monotonic_clock::time_point ta_base, double ta) const;
 
-    std::pair<Pointer, std::pair<std::chrono::nanoseconds, double>> OffsetError(
-        const SingleFilter *other, Pointer pointer,
-        aos::monotonic_clock::time_point ta_base, double ta,
-        aos::monotonic_clock::time_point tb_base, double tb) const;
+    std::pair<Pointer, std::tuple<std::chrono::nanoseconds, double, double>>
+    OffsetError(const SingleFilter *other, Pointer pointer,
+                aos::monotonic_clock::time_point ta_base, double ta,
+                aos::monotonic_clock::time_point tb_base, double tb) const;
 
-    std::pair<Pointer, std::pair<std::chrono::nanoseconds, double>>
+    std::pair<Pointer, std::tuple<std::chrono::nanoseconds, double, double>>
     BoundsOffsetError(const SingleFilter *other, Pointer pointer,
                       aos::monotonic_clock::time_point ta_base, double ta,
                       aos::monotonic_clock::time_point tb_base,
diff --git a/aos/network/timestamp_filter_test.cc b/aos/network/timestamp_filter_test.cc
index 5d8eeeb..adb6172 100644
--- a/aos/network/timestamp_filter_test.cc
+++ b/aos/network/timestamp_filter_test.cc
@@ -48,34 +48,36 @@
                 .second};
   }
 
-  std::pair<logger::BootDuration, double> Offset(
+  std::tuple<logger::BootDuration, double, double> Offset(
       const TestingNoncausalTimestampFilter *other, Pointer pointer,
       logger::BootTimestamp ta_base, double ta, size_t sample_boot) const {
-    std::pair<Pointer, std::pair<std::chrono::nanoseconds, double>> result =
-        filter(ta_base.boot, sample_boot)
-            ->filter.Offset(
-                other == nullptr
-                    ? nullptr
-                    : &other->filter(sample_boot, ta_base.boot)->filter,
-                pointer, ta_base.time, ta);
-    return std::make_pair(
-        logger::BootDuration{sample_boot, result.second.first},
-        result.second.second);
+    std::pair<Pointer, std::tuple<std::chrono::nanoseconds, double, double>>
+        result =
+            filter(ta_base.boot, sample_boot)
+                ->filter.Offset(
+                    other == nullptr
+                        ? nullptr
+                        : &other->filter(sample_boot, ta_base.boot)->filter,
+                    pointer, ta_base.time, ta);
+    return std::make_tuple(
+        logger::BootDuration{sample_boot, std::get<0>(result.second)},
+        std::get<1>(result.second), std::get<2>(result.second));
   }
 
-  std::pair<logger::BootDuration, double> BoundsOffset(
+  std::tuple<logger::BootDuration, double, double> BoundsOffset(
       const TestingNoncausalTimestampFilter *other, Pointer pointer,
       logger::BootTimestamp ta_base, double ta, size_t sample_boot) const {
-    std::pair<Pointer, std::pair<std::chrono::nanoseconds, double>> result =
-        filter(ta_base.boot, sample_boot)
-            ->filter.BoundsOffset(
-                other == nullptr
-                    ? nullptr
-                    : &other->filter(sample_boot, ta_base.boot)->filter,
-                pointer, ta_base.time, ta);
-    return std::make_pair(
-        logger::BootDuration{sample_boot, result.second.first},
-        result.second.second);
+    std::pair<Pointer, std::tuple<std::chrono::nanoseconds, double, double>>
+        result =
+            filter(ta_base.boot, sample_boot)
+                ->filter.BoundsOffset(
+                    other == nullptr
+                        ? nullptr
+                        : &other->filter(sample_boot, ta_base.boot)->filter,
+                    pointer, ta_base.time, ta);
+    return std::make_tuple(
+        logger::BootDuration{sample_boot, std::get<0>(result.second)},
+        std::get<1>(result.second), std::get<2>(result.second));
   }
 };
 
@@ -866,19 +868,21 @@
   const monotonic_clock::time_point t2 = t1 + chrono::nanoseconds(1000);
   const chrono::nanoseconds o2 = chrono::nanoseconds(150);
 
+  const double slope = 50.0 / 1000.0;
+
   EXPECT_EQ(NoncausalTimestampFilter::InterpolateOffset(
                 std::make_tuple(t1, o1), std::make_tuple(t2, o2), t1),
             o1);
   EXPECT_EQ(NoncausalTimestampFilter::InterpolateOffset(
                 std::make_tuple(t1, o1), std::make_tuple(t2, o2), t1, 0.0),
-            std::make_pair(o1, 0.0));
+            std::make_tuple(o1, 0.0, slope));
 
   EXPECT_EQ(NoncausalTimestampFilter::InterpolateOffset(
                 std::make_tuple(t1, o1), std::make_tuple(t2, o2), t2),
             o2);
   EXPECT_EQ(NoncausalTimestampFilter::InterpolateOffset(
                 std::make_tuple(t1, o1), std::make_tuple(t2, o2), t2, 0.0),
-            std::make_pair(o2, 0.0));
+            std::make_tuple(o2, 0.0, slope));
 
   EXPECT_EQ(NoncausalTimestampFilter::InterpolateOffset(
                 std::make_tuple(t1, o1), std::make_tuple(t2, o2),
@@ -887,7 +891,7 @@
   EXPECT_EQ(NoncausalTimestampFilter::InterpolateOffset(
                 std::make_tuple(t1, o1), std::make_tuple(t2, o2),
                 t1 + chrono::nanoseconds(500), 0.0),
-            std::make_pair(o1 + chrono::nanoseconds(25), 0.0));
+            std::make_tuple(o1 + chrono::nanoseconds(25), 0.0, slope));
 
   EXPECT_EQ(NoncausalTimestampFilter::InterpolateOffset(
                 std::make_tuple(t1, o1), std::make_tuple(t2, o2),
@@ -896,7 +900,7 @@
   EXPECT_EQ(NoncausalTimestampFilter::InterpolateOffset(
                 std::make_tuple(t1, o1), std::make_tuple(t2, o2),
                 t1 - chrono::nanoseconds(200), 0.0),
-            std::make_pair(o1 - chrono::nanoseconds(10), 0.0));
+            std::make_tuple(o1 - chrono::nanoseconds(10), 0.0, slope));
 
   EXPECT_EQ(NoncausalTimestampFilter::InterpolateOffset(
                 std::make_tuple(t1, o1), std::make_tuple(t2, o2),
@@ -905,7 +909,7 @@
   EXPECT_EQ(NoncausalTimestampFilter::InterpolateOffset(
                 std::make_tuple(t1, o1), std::make_tuple(t2, o2),
                 t1 + chrono::nanoseconds(200), 0.0),
-            std::make_pair(o1 + chrono::nanoseconds(10), 0.0));
+            std::make_tuple(o1 + chrono::nanoseconds(10), 0.0, slope));
 
   EXPECT_EQ(NoncausalTimestampFilter::InterpolateOffset(
                 std::make_tuple(t1, o1), std::make_tuple(t2, o2),
@@ -914,7 +918,7 @@
   EXPECT_EQ(NoncausalTimestampFilter::InterpolateOffset(
                 std::make_tuple(t1, o1), std::make_tuple(t2, o2),
                 t1 + chrono::nanoseconds(800), 0.0),
-            std::make_pair(o1 + chrono::nanoseconds(40), 0.0));
+            std::make_tuple(o1 + chrono::nanoseconds(40), 0.0, slope));
 
   EXPECT_EQ(NoncausalTimestampFilter::InterpolateOffset(
                 std::make_tuple(t1, o1), std::make_tuple(t2, o2),
@@ -923,7 +927,7 @@
   EXPECT_EQ(NoncausalTimestampFilter::InterpolateOffset(
                 std::make_tuple(t1, o1), std::make_tuple(t2, o2),
                 t1 + chrono::nanoseconds(1200), 0.0),
-            std::make_pair(o1 + chrono::nanoseconds(60), 0.0));
+            std::make_tuple(o1 + chrono::nanoseconds(60), 0.0, slope));
 
   for (int i = -MaxVelocityRatio::den * MaxVelocityRatio::num * 6;
        i <
@@ -941,18 +945,19 @@
         NoncausalTimestampFilter::InterpolateOffset(
             std::make_tuple(t1, o1), std::make_tuple(t2, o2), ta_base);
 
-    const std::pair<chrono::nanoseconds, double> offset =
+    const std::tuple<chrono::nanoseconds, double, double> offset =
         NoncausalTimestampFilter::InterpolateOffset(
             std::make_tuple(t1, o1), std::make_tuple(t2, o2), ta_base, ta);
-    EXPECT_EQ(expected_offset, offset.first);
+    EXPECT_EQ(expected_offset, std::get<0>(offset));
 
     const double expected_double_offset =
         static_cast<double>(o1.count()) +
         static_cast<double>(ta_orig) / static_cast<double>((t2 - t1).count()) *
             (o2 - o1).count();
 
-    EXPECT_NEAR(static_cast<double>(offset.first.count()) + offset.second,
-                expected_double_offset, 1e-9)
+    EXPECT_NEAR(
+        static_cast<double>(std::get<0>(offset).count()) + std::get<1>(offset),
+        expected_double_offset, 1e-9)
         << ": i " << i << " t " << ta_base << " " << ta << " t1 " << t1
         << " o1 " << o1.count() << "ns t2 " << t2 << " o2 " << o2.count()
         << "ns Non-rounded: " << expected_offset.count() << "ns";
@@ -999,14 +1004,14 @@
   // Test base + double version
   EXPECT_EQ(NoncausalTimestampFilter::ExtrapolateOffset(std::make_tuple(t1, o1),
                                                         e, 0.),
-            std::make_pair(chrono::nanoseconds(90), 0.0));
+            std::make_tuple(chrono::nanoseconds(90), 0.0, kMaxVelocity()));
   EXPECT_EQ(NoncausalTimestampFilter::ExtrapolateOffset(std::make_tuple(t1, o1),
                                                         t1, 0.),
-            std::make_pair(o1, 0.0));
+            std::make_tuple(o1, 0.0, -kMaxVelocity()));
 
   EXPECT_EQ(NoncausalTimestampFilter::ExtrapolateOffset(std::make_tuple(t1, o1),
                                                         t1, 0.5),
-            std::make_pair(o1, -0.5 * kMaxVelocity()));
+            std::make_tuple(o1, -0.5 * kMaxVelocity(), -kMaxVelocity()));
 
   EXPECT_EQ(
       NoncausalTimestampFilter::ExtrapolateOffset(std::make_tuple(t2, o2), t2),
@@ -1014,7 +1019,7 @@
 
   EXPECT_EQ(NoncausalTimestampFilter::ExtrapolateOffset(std::make_tuple(t2, o2),
                                                         t2, 0.0),
-            std::make_pair(o2, 0.0));
+            std::make_tuple(o2, 0.0, -kMaxVelocity()));
 
   // Test points past our last sample
   EXPECT_EQ(NoncausalTimestampFilter::ExtrapolateOffset(
@@ -1022,10 +1027,10 @@
             chrono::nanoseconds(
                 static_cast<int64_t>(o2.count() - 10000. * kMaxVelocity())));
 
-  EXPECT_EQ(
-      NoncausalTimestampFilter::ExtrapolateOffset(
-          std::make_tuple(t2, o2), t2 + chrono::nanoseconds(10000), 0.5),
-      std::make_pair(o2 - chrono::nanoseconds(10), -0.5 * kMaxVelocity()));
+  EXPECT_EQ(NoncausalTimestampFilter::ExtrapolateOffset(
+                std::make_tuple(t2, o2), t2 + chrono::nanoseconds(10000), 0.5),
+            std::make_tuple(o2 - chrono::nanoseconds(10), -0.5 * kMaxVelocity(),
+                            -kMaxVelocity()));
 
   // Now, test that offset + remainder functions add up to the right answer for
   // a lot of cases.  This is enough to catch all the various rounding cases.
@@ -1043,13 +1048,13 @@
         NoncausalTimestampFilter::ExtrapolateOffset(std::make_tuple(t1, o1),
                                                     ta_base);
 
-    std::pair<chrono::nanoseconds, double> offset =
+    std::tuple<chrono::nanoseconds, double, double> offset =
         NoncausalTimestampFilter::ExtrapolateOffset(std::make_tuple(t1, o1),
                                                     ta_base, ta);
 
-    EXPECT_EQ(expected_offset, offset.first);
+    EXPECT_EQ(expected_offset, std::get<0>(offset));
     EXPECT_NEAR(
-        static_cast<double>(offset.first.count()) + offset.second,
+        static_cast<double>(std::get<0>(offset).count()) + std::get<1>(offset),
         static_cast<double>(o1.count()) - std::abs(ta_orig) * kMaxVelocity(),
         1e-9)
         << ": i " << i << " t " << ta_base << " " << ta
@@ -1072,14 +1077,14 @@
             o1);
   EXPECT_EQ(NoncausalTimestampFilter::BoundOffset(
                 std::make_tuple(t1, o1), std::make_tuple(t2, o2), t1, 0.0),
-            std::pair(o1, 0.0));
+            std::tuple(o1, 0.0, -kMaxVelocity()));
 
   EXPECT_EQ(NoncausalTimestampFilter::BoundOffset(std::make_tuple(t1, o1),
                                                   std::make_tuple(t2, o2), t2),
             o2);
   EXPECT_EQ(NoncausalTimestampFilter::BoundOffset(
                 std::make_tuple(t1, o1), std::make_tuple(t2, o2), t2, 0.0),
-            std::pair(o2, 0.0));
+            std::tuple(o2, 0.0, -kMaxVelocity()));
 
   // Iterate from before t1 to after t2 and confirm that the solution is right.
   // We must always be >= than interpolation, and must also be equal to the max
@@ -1114,19 +1119,21 @@
     //  /  \/  \                                                              |
     // /        \                                                             |
 
-    const std::pair<chrono::nanoseconds, double> offset =
+    const std::tuple<chrono::nanoseconds, double, double> offset =
         NoncausalTimestampFilter::BoundOffset(
             std::make_tuple(t1, o1), std::make_tuple(t2, o2), ta_base, ta);
 
-    EXPECT_EQ(std::max(expected_offset_1, expected_offset_2), offset.first);
+    EXPECT_EQ(std::max(expected_offset_1, expected_offset_2),
+              std::get<0>(offset));
 
     const double expected_double_offset = std::max(
         static_cast<double>(o1.count()) - std::abs(ta_orig) * kMaxVelocity(),
         static_cast<double>(o2.count()) -
             std::abs(ta_orig - (t2 - t1).count()) * kMaxVelocity());
 
-    EXPECT_NEAR(static_cast<double>(offset.first.count()) + offset.second,
-                expected_double_offset, 1e-9)
+    EXPECT_NEAR(
+        static_cast<double>(std::get<0>(offset).count()) + std::get<1>(offset),
+        expected_double_offset, 1e-9)
         << ": i " << i << " t " << ta_base << " " << ta << " t1 " << t1
         << " o1 " << o1.count() << "ns t2 " << t2 << " o2 " << o2.count()
         << "ns Non-rounded: "
@@ -1468,9 +1475,15 @@
   const BootTimestamp t2 = e + chrono::microseconds(2000);
   const BootDuration o2{0, chrono::nanoseconds(150)};
 
+  const double slope12 = static_cast<double>((o2 - o1).duration.count()) /
+                         static_cast<double>((t2 - t1).duration.count());
+
   const BootTimestamp t3 = e + chrono::microseconds(3000);
   const BootDuration o3{0, chrono::nanoseconds(50)};
 
+  const double slope23 = static_cast<double>((o3 - o2).duration.count()) /
+                         static_cast<double>((t3 - t2).duration.count());
+
   const BootTimestamp t4 = e + chrono::microseconds(4000);
 
   TestingNoncausalTimestampFilter filter(node_a, node_b);
@@ -1480,87 +1493,88 @@
   // 1 point is handled properly.
   EXPECT_EQ(filter.Offset(nullptr, Pointer(), t1, 0), o1);
   EXPECT_EQ(filter.Offset(nullptr, Pointer(), t1, 0.0, 0),
-            std::make_pair(o1, 0.0));
+            std::make_tuple(o1, 0.0, -kMaxVelocity()));
   EXPECT_EQ(filter.BoundsOffset(nullptr, Pointer(), t1, 0.0, 0),
-            std::make_pair(o1, 0.0));
+            std::make_tuple(o1, 0.0, -kMaxVelocity()));
   // Check if we ask for something away from point that we get an offset
   // based on the MaxVelocity allowed
   const double offset_pre = -(t1.time - e.time).count() * kMaxVelocity();
   EXPECT_EQ(filter.Offset(nullptr, Pointer(), e, 0),
             o1 + chrono::nanoseconds(static_cast<int64_t>(offset_pre)));
-  EXPECT_EQ(
-      filter.Offset(nullptr, Pointer(), e, 0.0, 0),
-      std::make_pair(o1 + chrono::nanoseconds(static_cast<int64_t>(offset_pre)),
-                     0.0));
-  EXPECT_EQ(
-      filter.BoundsOffset(nullptr, Pointer(), e, 0.0, 0),
-      std::make_pair(o1 + chrono::nanoseconds(static_cast<int64_t>(offset_pre)),
-                     0.0));
+  EXPECT_EQ(filter.Offset(nullptr, Pointer(), e, 0.0, 0),
+            std::make_tuple(
+                o1 + chrono::nanoseconds(static_cast<int64_t>(offset_pre)), 0.0,
+                kMaxVelocity()));
+  EXPECT_EQ(filter.BoundsOffset(nullptr, Pointer(), e, 0.0, 0),
+            std::make_tuple(
+                o1 + chrono::nanoseconds(static_cast<int64_t>(offset_pre)), 0.0,
+                kMaxVelocity()));
 
   double offset_post = -(t2.time - t1.time).count() * kMaxVelocity();
   EXPECT_EQ(filter.Offset(nullptr, Pointer(), t2, 0),
             o1 + chrono::nanoseconds(static_cast<int64_t>(offset_post)));
-  EXPECT_EQ(
-      filter.Offset(nullptr, Pointer(), t2, 0.0, 0),
-      std::make_pair(
-          o1 + chrono::nanoseconds(static_cast<int64_t>(offset_post)), 0.0));
-  EXPECT_EQ(
-      filter.BoundsOffset(nullptr, Pointer(), t2, 0.0, 0),
-      std::make_pair(
-          o1 + chrono::nanoseconds(static_cast<int64_t>(offset_post)), 0.0));
+  EXPECT_EQ(filter.Offset(nullptr, Pointer(), t2, 0.0, 0),
+            std::make_tuple(
+                o1 + chrono::nanoseconds(static_cast<int64_t>(offset_post)),
+                0.0, -kMaxVelocity()));
+  EXPECT_EQ(filter.BoundsOffset(nullptr, Pointer(), t2, 0.0, 0),
+            std::make_tuple(
+                o1 + chrono::nanoseconds(static_cast<int64_t>(offset_post)),
+                0.0, -kMaxVelocity()));
 
   filter.Sample(t2, o2);
   filter.Sample(t3, o3);
 
   EXPECT_EQ(filter.Offset(nullptr, Pointer(), t1, 0), o1);
   EXPECT_EQ(filter.BoundsOffset(nullptr, Pointer(), t1, 0.0, 0),
-            std::make_pair(o1, 0.0));
+            std::make_tuple(o1, 0.0, -kMaxVelocity()));
   EXPECT_EQ(filter.Offset(nullptr, Pointer(), t2, 0), o2);
   EXPECT_EQ(filter.BoundsOffset(nullptr, Pointer(), t2, 0.0, 0),
-            std::make_pair(o2, 0.0));
+            std::make_tuple(o2, 0.0, -kMaxVelocity()));
   EXPECT_EQ(filter.Offset(nullptr, Pointer(), t3, 0), o3);
   EXPECT_EQ(filter.BoundsOffset(nullptr, Pointer(), t3, 0.0, 0),
-            std::make_pair(o3, 0.0));
+            std::make_tuple(o3, 0.0, -kMaxVelocity()));
 
   EXPECT_EQ(filter.Offset(nullptr, Pointer(), t1, 0.0, 0),
-            std::make_pair(o1, 0.0));
+            std::make_tuple(o1, 0.0, slope12));
 
   EXPECT_EQ(
       filter.Offset(nullptr, Pointer(),
                     e + (t2.time_since_epoch() + t1.time_since_epoch()) / 2,
                     0.0, 0),
-      std::make_pair(o1 + (o2 - o1) / 2, 0.0));
+      std::make_tuple(o1 + (o2 - o1) / 2, 0.0, slope12));
 
   EXPECT_EQ(filter.Offset(nullptr, Pointer(), t2, 0.0, 0),
-            std::make_pair(o2, 0.0));
+            std::make_tuple(o2, 0.0, slope23));
 
   EXPECT_EQ(
       filter.Offset(nullptr, Pointer(),
                     e + (t2.time_since_epoch() + t3.time_since_epoch()) / 2,
                     0.0, 0),
-      std::make_pair((o2 + o3) / 2, 0.0));
+      std::make_tuple((o2 + o3) / 2, 0.0, slope23));
 
   EXPECT_EQ(filter.Offset(nullptr, Pointer(), t3, 0.0, 0),
-            std::make_pair(o3, 0.0));
+            std::make_tuple(o3, 0.0, -kMaxVelocity()));
 
   // Check that we still get same answer for times before our sample data...
   EXPECT_EQ(filter.Offset(nullptr, Pointer(), e, 0),
             o1 + chrono::nanoseconds(static_cast<int64_t>(offset_pre)));
-  EXPECT_EQ(
-      filter.Offset(nullptr, Pointer(), e, 0.0, 0),
-      std::make_pair(o1 + chrono::nanoseconds(static_cast<int64_t>(offset_pre)),
-                     0.0));
+  EXPECT_EQ(filter.Offset(nullptr, Pointer(), e, 0.0, 0),
+            std::make_tuple(
+                o1 + chrono::nanoseconds(static_cast<int64_t>(offset_pre)), 0.0,
+                kMaxVelocity()));
   // ... and after
   offset_post = -(t4.time - t3.time).count() * kMaxVelocity();
   EXPECT_EQ(filter.Offset(nullptr, Pointer(), t4, 0),
             (o3 + chrono::nanoseconds(static_cast<int64_t>(offset_post))));
-  EXPECT_EQ(
-      filter.Offset(nullptr, Pointer(), t4, 0.0, 0),
-      std::make_pair(
-          o3 + chrono::nanoseconds(static_cast<int64_t>(offset_post)), 0.0));
+  EXPECT_EQ(filter.Offset(nullptr, Pointer(), t4, 0.0, 0),
+            std::make_tuple(
+                o3 + chrono::nanoseconds(static_cast<int64_t>(offset_post)),
+                0.0, -kMaxVelocity()));
 
-  EXPECT_EQ(filter.BoundsOffset(nullptr, Pointer(), t2 + (t3 - t2) / 2, 0.0, 0),
-            std::make_pair(o2 - chrono::nanoseconds(500), 0.0));
+  EXPECT_EQ(
+      filter.BoundsOffset(nullptr, Pointer(), t2 + (t3 - t2) / 2, 0.0, 0),
+      std::make_tuple(o2 - chrono::nanoseconds(500), 0.0, -kMaxVelocity()));
 }
 
 // Tests that adding duplicates gets correctly deduplicated.
diff --git a/aos/network/web_proxy.h b/aos/network/web_proxy.h
index 0c1d1dc..2b57c05 100644
--- a/aos/network/web_proxy.h
+++ b/aos/network/web_proxy.h
@@ -77,6 +77,8 @@
            int per_channel_buffer_size_bytes);
   WebProxy(aos::ShmEventLoop *event_loop, StoreHistory store_history,
            int per_channel_buffer_size_bytes);
+  WebProxy(aos::EventLoop *event_loop, aos::internal::EPoll *epoll,
+           StoreHistory store_history, int per_channel_buffer_size_bytes);
   ~WebProxy();
 
   void SetDataPath(const char *path) { server_.setStaticPath(path); }
@@ -85,9 +87,6 @@
   void StopRecording();
 
  private:
-  WebProxy(aos::EventLoop *event_loop, aos::internal::EPoll *epoll,
-           StoreHistory store_history, int per_channel_buffer_size_bytes);
-
   aos::internal::EPoll internal_epoll_;
   aos::internal::EPoll *const epoll_;
   ::seasocks::Server server_;
diff --git a/aos/network/web_proxy_main.cc b/aos/network/web_proxy_main.cc
index 4482ad0..2a92a88 100644
--- a/aos/network/web_proxy_main.cc
+++ b/aos/network/web_proxy_main.cc
@@ -4,7 +4,7 @@
 #include "aos/network/web_proxy.h"
 #include "gflags/gflags.h"
 
-DEFINE_string(config, "./aos_config.json", "File path of aos configuration");
+DEFINE_string(config, "aos_config.json", "File path of aos configuration");
 DEFINE_string(data_dir, "www", "Directory to serve data files from");
 DEFINE_int32(buffer_size, 1000000,
              "-1 if infinite, in bytes / channel. If there are no active "
diff --git a/aos/realtime_test.cc b/aos/realtime_test.cc
index 98f53e1..35936ee 100644
--- a/aos/realtime_test.cc
+++ b/aos/realtime_test.cc
@@ -77,6 +77,9 @@
   CheckNotRealtime();
 }
 
+// Malloc hooks don't work with asan/msan.
+#if !__has_feature(address_sanitizer) && !__has_feature(memory_sanitizer)
+
 // Tests that CHECK statements give real error messages rather than die on
 // malloc.
 TEST(RealtimeDeathTest, Check) {
@@ -114,7 +117,7 @@
         int x = reinterpret_cast<const volatile int *>(0)[0];
         LOG(INFO) << x;
       },
-      "SIGSEGV \\(@0x0\\) received by PID.*stack trace:");
+      "\\*\\*\\* Aborted at .*");
 }
 
 // Tests that RAW_LOG(FATAL) explodes properly.
@@ -127,6 +130,8 @@
       "Cute message here");
 }
 
+#endif
+
 }  // namespace testing
 }  // namespace aos
 
@@ -135,7 +140,10 @@
 GTEST_API_ int main(int argc, char **argv) {
   ::testing::InitGoogleTest(&argc, argv);
   FLAGS_logtostderr = true;
+
+#if !__has_feature(address_sanitizer) && !__has_feature(memory_sanitizer)
   FLAGS_die_on_malloc = true;
+#endif
 
   aos::InitGoogle(&argc, &argv);
 
diff --git a/aos/seasocks/gen_embedded.bzl b/aos/seasocks/gen_embedded.bzl
index 7d67249..6b01dac 100644
--- a/aos/seasocks/gen_embedded.bzl
+++ b/aos/seasocks/gen_embedded.bzl
@@ -56,7 +56,7 @@
             ":%s__do_gen" % name,
         ],
         deps = [
-            "@//third_party/seasocks",
+            "//third_party/seasocks",
         ],
         target_compatible_with = target_compatible_with,
     )
diff --git a/aos/seasocks/gen_embedded.py b/aos/seasocks/gen_embedded.py
index fdcdfd9..b6f43aa 100755
--- a/aos/seasocks/gen_embedded.py
+++ b/aos/seasocks/gen_embedded.py
@@ -13,18 +13,18 @@
 output = sys.argv[1].replace('"', '')
 
 if not os.path.exists(os.path.dirname(output)):
-  os.makedirs(os.path.dirname(output))
+    os.makedirs(os.path.dirname(output))
 
 if len(sys.argv) >= 3:
-  web = sys.argv[2:]
+    web = sys.argv[2:]
 else:
-  web = []
-  for root, dirs, files in os.walk("./www_defaults", topdown=False):
-    for name in files + dirs:
-      web.append(os.path.join(root, name))
+    web = []
+    for root, dirs, files in os.walk("./www_defaults", topdown=False):
+        for name in files + dirs:
+            web.append(os.path.join(root, name))
 
 with open(output, 'w') as o:
-  o.write("""
+    o.write("""
 #include "internal/Embedded.h"
 
 #include <string>
@@ -35,14 +35,14 @@
 std::unordered_map<std::string, EmbeddedContent> embedded = {
 """)
 
-  for f in web:
-    with open(f, 'rb') as file:
-      bytes = file.read()
-    o.write('{"/%s", {' % os.path.basename(f))
-    o.write('"' + "".join(['\\x%02x' % x for x in bytes]) + '"')
-    o.write(',%d }},' % len(bytes))
+    for f in web:
+        with open(f, 'rb') as file:
+            bytes = file.read()
+        o.write('{"/%s", {' % os.path.basename(f))
+        o.write('"' + "".join(['\\x%02x' % x for x in bytes]) + '"')
+        o.write(',%d }},' % len(bytes))
 
-  o.write("""
+    o.write("""
 };
 
 } // namespace
diff --git a/aos/starter/starter_cmd.cc b/aos/starter/starter_cmd.cc
index a076a9d..c1421a5 100644
--- a/aos/starter/starter_cmd.cc
+++ b/aos/starter/starter_cmd.cc
@@ -14,7 +14,7 @@
 #include "gflags/gflags.h"
 #include "starter_rpc_lib.h"
 
-DEFINE_string(config, "./aos_config.json", "File path of aos configuration");
+DEFINE_string(config, "aos_config.json", "File path of aos configuration");
 // TODO(james): Bash autocompletion for node names.
 DEFINE_string(
     node, "",
diff --git a/aos/starter/starterd.cc b/aos/starter/starterd.cc
index 941f5df..f284819 100644
--- a/aos/starter/starterd.cc
+++ b/aos/starter/starterd.cc
@@ -5,7 +5,7 @@
 #include "gflags/gflags.h"
 #include "starterd_lib.h"
 
-DEFINE_string(config, "./aos_config.json", "File path of aos configuration");
+DEFINE_string(config, "aos_config.json", "File path of aos configuration");
 DEFINE_string(user, "",
               "Starter runs as though this user ran a SUID binary if set.");
 
diff --git a/aos/starter/subprocess.cc b/aos/starter/subprocess.cc
index 0b7bdd3..2886c98 100644
--- a/aos/starter/subprocess.cc
+++ b/aos/starter/subprocess.cc
@@ -10,6 +10,71 @@
 
 namespace aos::starter {
 
+// RAII class to become root and restore back to the original user and group
+// afterwards.
+class Sudo {
+ public:
+  Sudo() {
+    // Save what we were.
+    PCHECK(getresuid(&ruid_, &euid_, &suid_) == 0);
+    PCHECK(getresgid(&rgid_, &egid_, &sgid_) == 0);
+
+    // Become root.
+    PCHECK(setresuid(/* ruid */ 0 /* root */, /* euid */ 0, /* suid */ 0) == 0)
+        << ": Failed to become root";
+    PCHECK(setresgid(/* ruid */ 0 /* root */, /* euid */ 0, /* suid */ 0) == 0)
+        << ": Failed to become root";
+  }
+
+  ~Sudo() {
+    // And recover.
+    PCHECK(setresgid(rgid_, egid_, sgid_) == 0);
+    PCHECK(setresuid(ruid_, euid_, suid_) == 0);
+  }
+
+  uid_t ruid_, euid_, suid_;
+  gid_t rgid_, egid_, sgid_;
+};
+
+MemoryCGroup::MemoryCGroup(std::string_view name)
+    : cgroup_(absl::StrCat("/sys/fs/cgroup/memory/aos_", name)) {
+  Sudo sudo;
+  int ret = mkdir(cgroup_.c_str(), 0755);
+
+  if (ret != 0) {
+    if (errno == EEXIST) {
+      PCHECK(remove(cgroup_.c_str()) == 0)
+          << ": Failed to remove previous cgroup " << cgroup_;
+      ret = mkdir(cgroup_.c_str(), 0755);
+    }
+  }
+
+  if (ret != 0) {
+    PLOG(FATAL) << ": Failed to create cgroup aos_" << cgroup_
+                << ", do you have permission?";
+  }
+}
+
+void MemoryCGroup::AddTid(pid_t pid) {
+  if (pid == 0) {
+    pid = getpid();
+  }
+  Sudo sudo;
+  util::WriteStringToFileOrDie(absl::StrCat(cgroup_, "/tasks").c_str(),
+                               std::to_string(pid));
+}
+
+void MemoryCGroup::SetLimit(std::string_view limit_name, uint64_t limit_value) {
+  Sudo sudo;
+  util::WriteStringToFileOrDie(absl::StrCat(cgroup_, "/", limit_name).c_str(),
+                               std::to_string(limit_value));
+}
+
+MemoryCGroup::~MemoryCGroup() {
+  Sudo sudo;
+  PCHECK(rmdir(absl::StrCat(cgroup_).c_str()) == 0);
+}
+
 SignalListener::SignalListener(aos::ShmEventLoop *loop,
                                std::function<void(signalfd_siginfo)> callback)
     : SignalListener(loop, callback,
@@ -82,6 +147,10 @@
   if (application->has_args()) {
     set_args(*application->args());
   }
+
+  if (application->has_memory_limit() && application->memory_limit() > 0) {
+    SetMemoryLimit(application->memory_limit());
+  }
 }
 
 void Application::DoStart() {
@@ -133,6 +202,10 @@
     return;
   }
 
+  if (memory_cgroup_) {
+    memory_cgroup_->AddTid();
+  }
+
   // Since we are the child process, clear our read-side of all the pipes.
   status_pipes_.read.reset();
   stdout_pipes_.read.reset();
diff --git a/aos/starter/subprocess.h b/aos/starter/subprocess.h
index a4d7cbb..bacc574 100644
--- a/aos/starter/subprocess.h
+++ b/aos/starter/subprocess.h
@@ -35,6 +35,22 @@
   DISALLOW_COPY_AND_ASSIGN(SignalListener);
 };
 
+// Class to use the V1 cgroup API to limit memory usage.
+class MemoryCGroup {
+ public:
+  MemoryCGroup(std::string_view name);
+  ~MemoryCGroup();
+
+  // Adds a thread ID to be managed by the cgroup.
+  void AddTid(pid_t pid = 0);
+
+  // Sets the provided limit to the provided value.
+  void SetLimit(std::string_view limit_name, uint64_t limit_value);
+
+ private:
+  std::string cgroup_;
+};
+
 // Manages a running process, allowing starting and stopping, and restarting
 // automatically.
 class Application {
@@ -80,6 +96,14 @@
   const std::string &GetStderr();
   std::optional<int> exit_code() const { return exit_code_; }
 
+  // Sets the memory limit for the application to the provided limit.
+  void SetMemoryLimit(size_t limit) {
+    if (!memory_cgroup_) {
+      memory_cgroup_ = std::make_unique<MemoryCGroup>(name_);
+    }
+    memory_cgroup_->SetLimit("memory.limit_in_bytes", limit);
+  }
+
  private:
   typedef aos::util::ScopedPipe::PipePair PipePair;
   void set_args(
@@ -144,6 +168,8 @@
 
   std::function<void()> on_change_;
 
+  std::unique_ptr<MemoryCGroup> memory_cgroup_;
+
   DISALLOW_COPY_AND_ASSIGN(Application);
 };
 
diff --git a/aos/util/BUILD b/aos/util/BUILD
index 12e5ab7..bc62f87 100644
--- a/aos/util/BUILD
+++ b/aos/util/BUILD
@@ -54,6 +54,7 @@
     target_compatible_with = ["@platforms//os:linux"],
     deps = [
         "//aos:configuration_fbs",
+        "//aos:configuration_schema",
         "//aos:fast_string_builder",
         "//aos:flatbuffer_utils",
         "//aos/events:event_loop",
@@ -384,3 +385,24 @@
     visibility = ["//visibility:public"],
     deps = ["//aos:python_init"],
 )
+
+cc_library(
+    name = "threaded_queue",
+    hdrs = [
+        "threaded_queue.h",
+        "threaded_queue_tmpl.h",
+    ],
+    deps = [
+        "//aos:condition",
+        "//aos/mutex",
+    ],
+)
+
+cc_test(
+    name = "threaded_queue_test",
+    srcs = ["threaded_queue_test.cc"],
+    deps = [
+        ":threaded_queue",
+        "//aos/testing:googletest",
+    ],
+)
diff --git a/aos/util/bitpacking_test.cc b/aos/util/bitpacking_test.cc
index 80d1977..087c719 100644
--- a/aos/util/bitpacking_test.cc
+++ b/aos/util/bitpacking_test.cc
@@ -1,5 +1,6 @@
 #include "aos/util/bitpacking.h"
 
+#include <array>
 #include <cstdint>
 
 #include "gtest/gtest.h"
diff --git a/aos/util/foxglove-layouts/README b/aos/util/foxglove-layouts/README
new file mode 100644
index 0000000..7ec6341
--- /dev/null
+++ b/aos/util/foxglove-layouts/README
@@ -0,0 +1,4 @@
+This folder contains JSON layouts that may be helpful for analyzing AOS-generic problems.
+
+Currently, this includes:
+* "Sent-Too-Fast Analysis": A sample layout for analyzing sent-too-fast errors.
diff --git a/aos/util/foxglove-layouts/Sent-Too-Fast Analysis.json b/aos/util/foxglove-layouts/Sent-Too-Fast Analysis.json
new file mode 100644
index 0000000..f558cc5
--- /dev/null
+++ b/aos/util/foxglove-layouts/Sent-Too-Fast Analysis.json
@@ -0,0 +1,88 @@
+{
+  "configById": {
+    "NodePlayground!3jd6ze5": {
+      "selectedNodeId": "a2a921fe-ea55-45ed-881f-d66ad46bc666",
+      "autoFormatOnSave": true
+    },
+    "RawMessages!qt4g88": {
+      "topicPath": "configuration",
+      "diffTopicPath": "",
+      "diffMethod": "custom",
+      "diffEnabled": false,
+      "showFullMessageForDiff": false,
+      "autoExpandMode": "auto"
+    },
+    "RawMessages!29a8tmz": {
+      "topicPath": "\"/aos aos.timing.Report\"{name==\"aos_send\"}",
+      "diffTopicPath": "",
+      "diffMethod": "custom",
+      "diffEnabled": false,
+      "showFullMessageForDiff": false,
+      "autoExpandMode": "auto"
+    },
+    "RawMessages!26t8w4x": {
+      "topicPath": "/send_errors.channels[:]{type==\"aos.logging.LogMessageFbs\"}{name==\"/aos\"}",
+      "diffTopicPath": "",
+      "diffMethod": "custom",
+      "diffEnabled": false,
+      "showFullMessageForDiff": false,
+      "autoExpandMode": "auto"
+    },
+    "SourceInfo!4j44duu": {},
+    "Plot!26dzl0q": {
+      "title": "Plot",
+      "paths": [
+        {
+          "value": "\"/aos aos.timing.Report\".senders[:].error_counts[0].count",
+          "enabled": true,
+          "timestampMethod": "receiveTime"
+        }
+      ],
+      "showXAxisLabels": true,
+      "showYAxisLabels": true,
+      "showLegend": true,
+      "legendDisplay": "floating",
+      "showPlotValuesInLegend": false,
+      "isSynced": true,
+      "xAxisVal": "timestamp",
+      "sidebarDimension": 240
+    }
+  },
+  "globalVariables": {},
+  "userNodes": {
+    "a2a921fe-ea55-45ed-881f-d66ad46bc666": {
+      "sourceCode": "// The ./types module provides helper types for your Input events and messages.\nimport { Input, Message } from \"./types\";\n\n// Your node can output well-known message types, any of your custom message types, or\n// complete custom message types.\n//\n// Use `Message` to access your data source types or well-known types:\n// type Twist = Message<\"geometry_msgs/Twist\">;\n//\n// Conventionally, it's common to make a _type alias_ for your node's output type\n// and use that type name as the return type for your node function.\n// Here we've called the type `Output` but you can pick any type name.\ntype ChannelSendErrors = {\n  name: string;\n  type: string;\n  sent_too_fast_errors: number;\n  all_send_errors: number;\n};\ntype AggregateSendErrors = {\n  channels: ChannelSendErrors[];\n};\n\n// These are the topics your node \"subscribes\" to. Studio will invoke your node function\n// when any message is received on one of these topics.\nexport const inputs = [\"configuration\", \"/aos aos.timing.Report\"];\n\n// Any output your node produces is \"published\" to this topic. Published messages are only visible within Studio, not to your original data source.\nexport const output = \"/send_errors\";\n\nlet config: any = undefined;\n\nconst errors: AggregateSendErrors = { channels: [] };\n\n// This function is called with messages from your input topics.\n// The first argument is an event with the topic, receive time, and message.\n// Use the `Input<...>` helper to get the correct event type for your input topic messages.\nexport default function node(\n  event: Input<\"configuration\"> | Input<\"/aos aos.timing.Report\">\n): AggregateSendErrors | undefined {\n  if (event.topic == \"configuration\") {\n    config = event.message;\n    for (const channel of event.message.channels) {\n      errors.channels.push({\n        name: channel.name,\n        type: channel.type,\n        sent_too_fast_errors: 0,\n        all_send_errors: 0,\n      });\n    }\n  } else {\n    if (config == undefined) {\n      return;\n    }\n    for (const channel_errors of errors.channels) {\n      for (const sender of event.message.senders) {\n        const channel = config.channels[sender.channel_index];\n        if (\n          channel.name == channel_errors.name &&\n          channel.type == channel_errors.type\n        ) {\n          for (const error_count of sender.error_counts) {\n            if (error_count.error == 0) {\n              channel_errors.sent_too_fast_errors += error_count.count;\n            }\n            channel_errors.all_send_errors += error_count.count;\n          }\n          return errors;\n        }\n      }\n    }\n  }\n  return;\n}\n",
+      "name": "a2a921fe"
+    }
+  },
+  "linkedGlobalVariables": [],
+  "playbackConfig": {
+    "speed": 5,
+    "messageOrder": "receiveTime"
+  },
+  "layout": {
+    "first": {
+      "first": "NodePlayground!3jd6ze5",
+      "second": "Plot!26dzl0q",
+      "direction": "row"
+    },
+    "second": {
+      "first": "RawMessages!qt4g88",
+      "second": {
+        "first": {
+          "first": "RawMessages!29a8tmz",
+          "second": "RawMessages!26t8w4x",
+          "direction": "column",
+          "splitPercentage": 46.354586297778205
+        },
+        "second": "SourceInfo!4j44duu",
+        "direction": "column",
+        "splitPercentage": 67.88193961641498
+      },
+      "direction": "column",
+      "splitPercentage": 36.885245901639344
+    },
+    "direction": "row",
+    "splitPercentage": 70
+  }
+}
diff --git a/aos/util/log_to_mcap_test.py b/aos/util/log_to_mcap_test.py
index 72c9078..7bdffe4 100644
--- a/aos/util/log_to_mcap_test.py
+++ b/aos/util/log_to_mcap_test.py
@@ -12,25 +12,32 @@
 
 def main(argv: Sequence[Text]):
     parser = argparse.ArgumentParser()
-    parser.add_argument("--log_to_mcap", required=True, help="Path to log_to_mcap binary.")
+    parser.add_argument("--log_to_mcap",
+                        required=True,
+                        help="Path to log_to_mcap binary.")
     parser.add_argument("--mcap", required=True, help="Path to mcap binary.")
-    parser.add_argument("--generate_log", required=True, help="Path to logfile generator.")
+    parser.add_argument("--generate_log",
+                        required=True,
+                        help="Path to logfile generator.")
     args = parser.parse_args(argv)
     with tempfile.TemporaryDirectory() as tmpdir:
         log_name = tmpdir + "/test_log/"
         mcap_name = tmpdir + "/log.mcap"
-        subprocess.run([args.generate_log, "--output_folder", log_name]).check_returncode()
+        subprocess.run([args.generate_log, "--output_folder",
+                        log_name]).check_returncode()
         # Run with a really small chunk size, to force a multi-chunk file.
-        subprocess.run(
-            [args.log_to_mcap, "--output_path", mcap_name, "--mcap_chunk_size", "1000", "--mode", "json",
-             log_name]).check_returncode()
+        subprocess.run([
+            args.log_to_mcap, "--output_path", mcap_name, "--mcap_chunk_size",
+            "1000", "--mode", "json", log_name
+        ]).check_returncode()
         # MCAP attempts to find $HOME/.mcap.yaml, and dies on $HOME not existing. So
         # give it an arbitrary config location (it seems to be fine with a non-existent config).
-        doctor_result = subprocess.run(
-            [args.mcap, "doctor", mcap_name, "--config", tmpdir + "/.mcap.yaml"],
-            stdout=subprocess.PIPE,
-            stderr=subprocess.PIPE,
-            encoding='utf-8')
+        doctor_result = subprocess.run([
+            args.mcap, "doctor", mcap_name, "--config", tmpdir + "/.mcap.yaml"
+        ],
+                                       stdout=subprocess.PIPE,
+                                       stderr=subprocess.PIPE,
+                                       encoding='utf-8')
         print(doctor_result.stdout)
         print(doctor_result.stderr)
         # mcap doctor doesn't actually return a non-zero exit code on certain failures...
diff --git a/aos/util/mcap_logger.cc b/aos/util/mcap_logger.cc
index 561a02b..dc27504 100644
--- a/aos/util/mcap_logger.cc
+++ b/aos/util/mcap_logger.cc
@@ -1,6 +1,7 @@
 #include "aos/util/mcap_logger.h"
 
 #include "absl/strings/str_replace.h"
+#include "aos/configuration_schema.h"
 #include "aos/flatbuffer_merge.h"
 #include "single_include/nlohmann/json.hpp"
 
@@ -85,7 +86,29 @@
                        Serialization serialization)
     : event_loop_(event_loop),
       output_(output_path),
-      serialization_(serialization) {
+      serialization_(serialization),
+      configuration_channel_([]() {
+        // Setup a fake Channel for providing the configuration in the MCAP
+        // file. This is included for convenience so that consumers of the MCAP
+        // file can actually dereference things like the channel indices in AOS
+        // timing reports.
+        flatbuffers::FlatBufferBuilder fbb;
+        flatbuffers::Offset<flatbuffers::String> name_offset =
+            fbb.CreateString("");
+        flatbuffers::Offset<flatbuffers::String> type_offset =
+            fbb.CreateString("aos.Configuration");
+        flatbuffers::Offset<reflection::Schema> schema_offset =
+            aos::CopyFlatBuffer(
+                aos::FlatbufferSpan<reflection::Schema>(ConfigurationSchema()),
+                &fbb);
+        Channel::Builder channel(fbb);
+        channel.add_name(name_offset);
+        channel.add_type(type_offset);
+        channel.add_schema(schema_offset);
+        fbb.Finish(channel.Finish());
+        return fbb.Release();
+      }()),
+      configuration_(CopyFlatBuffer(event_loop_->configuration())) {
   event_loop->SkipTimingReport();
   event_loop->SkipAosLog();
   CHECK(output_);
@@ -181,6 +204,20 @@
     }
   }
 
+  // Manually add in a special /configuration channel.
+  if (register_handlers == RegisterHandlers::kYes) {
+    configuration_id_ = ++id;
+    event_loop_->OnRun([this]() {
+      Context config_context;
+      config_context.monotonic_event_time = event_loop_->monotonic_now();
+      config_context.queue_index = 0;
+      config_context.size = configuration_.span().size();
+      config_context.data = configuration_.span().data();
+      WriteMessage(configuration_id_, &configuration_channel_.message(),
+                   config_context, &current_chunk_);
+    });
+  }
+
   std::vector<SummaryOffset> offsets;
 
   const uint64_t schema_offset = output_.tellp();
@@ -189,6 +226,8 @@
     WriteSchema(pair.first, pair.second);
   }
 
+  WriteSchema(configuration_id_, &configuration_channel_.message());
+
   const uint64_t channel_offset = output_.tellp();
 
   offsets.push_back(
@@ -201,6 +240,13 @@
     WriteChannel(pair.first, pair.first, pair.second);
   }
 
+  // Provide the configuration message on a special channel that is just named
+  // "configuration", which is guaranteed not to conflict with existing under
+  // our current naming scheme (since our current scheme will, at a minimum, put
+  // a space between the name/type of a channel).
+  WriteChannel(configuration_id_, configuration_id_,
+               &configuration_channel_.message(), "configuration");
+
   offsets.push_back({OpCode::kChannel, channel_offset,
                      static_cast<uint64_t>(output_.tellp()) - channel_offset});
   return offsets;
@@ -267,7 +313,8 @@
 }
 
 void McapLogger::WriteChannel(const uint16_t id, const uint16_t schema_id,
-                              const aos::Channel *channel) {
+                              const aos::Channel *channel,
+                              std::string_view override_name) {
   string_builder_.Reset();
   // Channel ID
   AppendInt16(&string_builder_, id);
@@ -275,8 +322,10 @@
   AppendInt16(&string_builder_, schema_id);
   // Topic name
   AppendString(&string_builder_,
-               absl::StrCat(channel->name()->string_view(), " ",
-                            channel->type()->string_view()));
+               override_name.empty()
+                   ? absl::StrCat(channel->name()->string_view(), " ",
+                                  channel->type()->string_view())
+                   : override_name);
   // Encoding
   switch (serialization_) {
     case Serialization::kJson:
diff --git a/aos/util/mcap_logger.h b/aos/util/mcap_logger.h
index 5ae6413..d7409fb 100644
--- a/aos/util/mcap_logger.h
+++ b/aos/util/mcap_logger.h
@@ -95,7 +95,8 @@
   void WriteDataEnd();
   void WriteSchema(const uint16_t id, const aos::Channel *channel);
   void WriteChannel(const uint16_t id, const uint16_t schema_id,
-                    const aos::Channel *channel);
+                    const aos::Channel *channel,
+                    std::string_view override_name = "");
   void WriteMessage(uint16_t channel_id, const Channel *channel,
                     const Context &context, std::ostream *output);
   void WriteChunk();
@@ -154,6 +155,13 @@
       message_indices_;
   // ChunkIndex's for all fully written Chunks.
   std::vector<ChunkIndex> chunk_indices_;
+
+  // Metadata associated with the fake "configuration" channel that we create in
+  // order to ensure that foxglove extensions/users have access to the full
+  // configuration.
+  uint16_t configuration_id_ = 0;
+  FlatbufferDetachedBuffer<Channel> configuration_channel_;
+  FlatbufferDetachedBuffer<Configuration> configuration_;
 };
 }  // namespace aos
 #endif  // AOS_UTIL_MCAP_LOGGER_H_
diff --git a/aos/util/threaded_queue.h b/aos/util/threaded_queue.h
new file mode 100644
index 0000000..0b06632
--- /dev/null
+++ b/aos/util/threaded_queue.h
@@ -0,0 +1,99 @@
+#ifndef AOS_UTIL_THREADED_QUEUE_H_
+#define AOS_UTIL_THREADED_QUEUE_H_
+#include <functional>
+#include <optional>
+#include <queue>
+#include <thread>
+
+#include "aos/condition.h"
+#include "aos/mutex/mutex.h"
+
+namespace aos::util {
+// This class implements a queue of objects of type T in which a worker thread
+// pushes and the calling thread pops from the queue.
+//
+// This is setup such that the user will pass a worker function that will get
+// called in a separate thread whenever we think that there might be something
+// to trigger more work to be done. All the methods on this calss are intended
+// to be called from the main thread (not from within the worker function).
+// Communication between the main thread and the worker can be achieved either
+// by manually handling your own state, or preferably by using the SharedState
+// object, which will get passed into the worker. The worker gets called every
+// time that SetState() is called.
+template <typename T, typename SharedState>
+class ThreadedQueue {
+ public:
+  // PushResult is returned from the worker to indicate its current state.
+  struct PushResult {
+    // The new item to push, if any. If set to nullopt, nothing gets pushed.
+    std::optional<T> item = std::nullopt;
+    // Set to true if the worker knows that there is more work that it has to do
+    // and so should be immediately called again. If set to false, then the
+    // worker will not get called again until one of the following events
+    // occurs:
+    // 1) The queue is successfully popped from.
+    // 2) SetState() is called.
+    bool more_to_push = false;
+    // Set to true if there is no more work to be done. The worker should not
+    // get called after setting done to true.
+    bool done = false;
+  };
+  ThreadedQueue(
+      std::function<PushResult(SharedState)> push_request_handler,
+      SharedState initial_state);
+  ~ThreadedQueue();
+  // Sets state. Triggers a new call to push_request_handler.
+  void SetState(const SharedState &state);
+  // Returns the current front of the queue, blocking until a new item is
+  // available. Will only return nullopt if done is true and there will be no
+  // more items in the queue.
+  std::optional<T> Peek();
+  // Identical to Peek(), except that it also removes the item from the queue.
+  std::optional<T> Pop();
+  // Waits until the push_request_handler has returned more_to_push = false, and
+  // so is just spinning. Useful if you want ensure that the worker has done all
+  // the work it can before going to the next step.
+  void WaitForNoMoreWork();
+  // Stops any further calls to push_request_handler. Used to terminate the
+  // queue from the calling thread.
+  void StopPushing();
+
+ private:
+  // Safely grabs the current state and returns a copy.
+  SharedState State();
+  // Implements the Peek()/Pop() methods, blocking until we are either done or
+  // the next item is available in the queue.
+  std::optional<T> PeekOrPop(bool pop);
+
+  // Mutex controlling access to all shared state (in this case, all the members
+  // of this class).
+  aos::Mutex mutex_;
+  // Condition variable used to indicate when anything has happened that should
+  // cause us to check for whether the worker can add anything new to the queue.
+  // Called "popped_" in reference to that it may be called when an item is
+  // popped from the queue.
+  aos::Condition popped_;
+  // Condition variable to indicate when an item has either been pushed to the
+  // queue or there is some other state change that consumers may care about
+  // (e.g., being done).
+  aos::Condition pushed_;
+  // TODO(jkuszmaul): Evaluate impact of dynamic memory allocation in
+  // std::queue, consider using aos::RingBuffer or similarly statically
+  // allocated buffer.
+  std::queue<T> queue_;
+  // Whether we are done processing entirely.
+  bool done_{false};
+  // Set while the pusher thread is waiting on popped_.
+  // Used to notice when the push handler is out of work to do.
+  bool pusher_waiting_{false};
+  // Set when SetState() is called, cleared when State() is read. Used to track
+  // whether the push handler has been called with the most recent state.
+  bool state_updated_{false};
+  SharedState state_;
+  std::thread pusher_thread_;
+};
+
+}  // namespace aos::util
+
+#include "aos/util/threaded_queue_tmpl.h"
+#endif  // AOS_UTIL_THREADED_QUEUE_H_
diff --git a/aos/util/threaded_queue_test.cc b/aos/util/threaded_queue_test.cc
new file mode 100644
index 0000000..4f27c57
--- /dev/null
+++ b/aos/util/threaded_queue_test.cc
@@ -0,0 +1,105 @@
+#include "aos/util/threaded_queue.h"
+
+#include "gtest/gtest.h"
+
+namespace aos::util {
+
+TEST(ThreadedQueueTest, BasicFunction) {
+  std::atomic<int> counter{10000};
+  int state = 0;
+  std::atomic<int> observed_state{0};
+  ThreadedQueue<int, int> queue(
+      [&counter, &observed_state](const int state) {
+        // Because this handler always returns more_to_push = false, it will
+        // only get called when the queue is popped from.
+        observed_state = state;
+        int count = --counter;
+        return ThreadedQueue<int, int>::PushResult{count, false, count == 0};
+      },
+      state);
+  while (true) {
+    std::optional<int> peek_result = queue.Peek();
+    std::optional<int> pop_result = queue.Pop();
+    ASSERT_EQ(peek_result.has_value(), pop_result.has_value());
+    if (peek_result.has_value()) {
+      ASSERT_EQ(peek_result.value(), pop_result.value());
+    } else {
+      break;
+    }
+    state++;
+    queue.SetState(state);
+  }
+  ASSERT_EQ(counter, 0);
+  // Our API doesn't make any guarantee about the push/pop cycle being kept in
+  // lock-step, so just check that the observed state got incremente at all.
+  ASSERT_LT(1, observed_state);
+  ASSERT_EQ(state, 10000);
+}
+
+// Test running a queue where the consumer wants to have X entries pre-loaded
+// and so communicates its current state back to the pusher.
+TEST(ThreadedQueueTest, StatefulQueue) {
+  std::atomic<int> counter{10000};
+  int state = counter;
+  constexpr int kMaxLookahead = 10;
+  std::atomic<int> observed_state{0};
+  ThreadedQueue<int, int> queue(
+      [&counter, &observed_state](const int state) {
+        observed_state = state;
+        if (counter + kMaxLookahead < state) {
+          return ThreadedQueue<int, int>::PushResult{std::nullopt, false,
+                                                     counter == 0};
+        } else {
+          int count = --counter;
+          return ThreadedQueue<int, int>::PushResult{count, true, count == 0};
+        }
+      },
+      state);
+  while (true) {
+    std::optional<int> peek_result = queue.Peek();
+    std::optional<int> pop_result = queue.Pop();
+    ASSERT_EQ(peek_result.has_value(), pop_result.has_value());
+    if (peek_result.has_value()) {
+      ASSERT_EQ(peek_result.value(), pop_result.value());
+    } else {
+      break;
+    }
+    for (int ii = 0; ii < 2 * kMaxLookahead; ++ii) {
+      // Trigger the internal condition variable a bunch of times to cause
+      // trouble.
+      queue.Peek();
+    }
+    // The pusher should never be more than the permissible distance ahead.
+    ASSERT_GE(counter + kMaxLookahead + 1, state);
+    ASSERT_GE(observed_state, state);
+    state--;
+    queue.SetState(state);
+    // Periodically pause, ensure that the pusher has enough time to catch up,
+    // and check that it has indeed pre-queued kMaxLookahead items.
+    if (state % 1000 == 0 && state > 0) {
+      queue.WaitForNoMoreWork();
+      ASSERT_EQ(observed_state, state);
+      ASSERT_EQ(counter + kMaxLookahead + 1, state);
+    }
+  }
+  ASSERT_EQ(counter, 0);
+  ASSERT_EQ(state, 0);
+}
+
+
+// Tests that we can exit early without any issues.
+TEST(ThreadedQueueTest, ExitEarly) {
+  // There used to exist a deadlock in this case where StopPushing would
+  // improperly synchronize things internally, but required very (un)lucky
+  // timing to hit.
+  for (int ii = 0; ii < 10000; ++ii) {
+    ThreadedQueue<int, int> queue(
+        [](int) {
+          return ThreadedQueue<int, int>::PushResult{971, false, false};
+        },
+        0);
+    queue.StopPushing();
+  }
+}
+
+}  // namespace aos::util
diff --git a/aos/util/threaded_queue_tmpl.h b/aos/util/threaded_queue_tmpl.h
new file mode 100644
index 0000000..cb4cdfc
--- /dev/null
+++ b/aos/util/threaded_queue_tmpl.h
@@ -0,0 +1,99 @@
+namespace aos::util {
+template <typename T, typename SharedState>
+ThreadedQueue<T, SharedState>::ThreadedQueue(
+    std::function<PushResult(SharedState)> push_request_handler,
+    SharedState initial_state)
+    : popped_(&mutex_),
+      pushed_(&mutex_),
+      state_(initial_state),
+      pusher_thread_([this, push_request_handler]() {
+        while (true) {
+          PushResult result = push_request_handler(State());
+          {
+            MutexLocker locker(&mutex_);
+            done_ = done_ || result.done;
+            if (result.item.has_value()) {
+              queue_.push(std::move(result.item.value()));
+            }
+            pushed_.Broadcast();
+            if (done_) {
+              return;
+            }
+            if (result.more_to_push || state_updated_) {
+              continue;
+            } else {
+              pusher_waiting_ = true;
+              CHECK(!popped_.Wait());
+              pusher_waiting_ = false;
+            }
+          }
+        }
+      }) {}
+
+template <typename T, typename SharedState>
+ThreadedQueue<T, SharedState>::~ThreadedQueue() {
+  StopPushing();
+  pusher_thread_.join();
+}
+
+template <typename T, typename SharedState>
+void ThreadedQueue<T, SharedState>::WaitForNoMoreWork() {
+  MutexLocker locker(&mutex_);
+  while (state_updated_ || (!pusher_waiting_ && !done_)) {
+    CHECK(!pushed_.Wait());
+  }
+}
+
+template <typename T, typename SharedState>
+SharedState ThreadedQueue<T, SharedState>::State() {
+  MutexLocker locker(&mutex_);
+  state_updated_ = false;
+  return state_;
+}
+
+template <typename T, typename SharedState>
+void ThreadedQueue<T, SharedState>::SetState(const SharedState &state) {
+  MutexLocker locker(&mutex_);
+  state_ = state;
+  state_updated_ = true;
+  popped_.Broadcast();
+}
+
+template <typename T, typename SharedState>
+void ThreadedQueue<T, SharedState>::StopPushing() {
+  // Ensure that the mutex is locked before doing anything, to make sure that
+  // the pushing thread actually observes the change.
+  MutexLocker locker(&mutex_);
+  done_ = true;
+  popped_.Broadcast();
+}
+
+template <typename T, typename SharedState>
+std::optional<T> ThreadedQueue<T, SharedState>::Peek() {
+  return PeekOrPop(false);
+}
+
+template <typename T, typename SharedState>
+std::optional<T> ThreadedQueue<T, SharedState>::Pop() {
+  return PeekOrPop(true);
+}
+
+template <typename T, typename SharedState>
+std::optional<T> ThreadedQueue<T, SharedState>::PeekOrPop(bool pop) {
+  MutexLocker locker(&mutex_);
+  while (!done_ && queue_.empty()) {
+    CHECK(!pushed_.Wait());
+  }
+  if (queue_.empty()) {
+    return std::nullopt;
+  }
+  if (pop) {
+    T result = std::move(queue_.front());
+    queue_.pop();
+    popped_.Broadcast();
+    return result;
+  } else {
+    return queue_.front();
+  }
+}
+}  // namespace aos::util
diff --git a/aos/util/trapezoid_profile.py b/aos/util/trapezoid_profile.py
index af85339..76c9758 100644
--- a/aos/util/trapezoid_profile.py
+++ b/aos/util/trapezoid_profile.py
@@ -2,8 +2,9 @@
 
 import numpy
 
+
 class TrapezoidProfile(object):
-  """Computes a trapezoidal motion profile
+    """Computes a trapezoidal motion profile
 
   Attributes:
     _acceleration_time: the amount of time the robot will travel at the
@@ -21,136 +22,140 @@
     _timestep: time between calls to Update (delta_time)
     _output: output array containing distance to goal and velocity
   """
-  def __init__(self, delta_time):
-    """Constructs a TrapezoidProfile.
+
+    def __init__(self, delta_time):
+        """Constructs a TrapezoidProfile.
 
     Args:
       delta_time: time between calls to Update (seconds)
     """
-    self._acceleration_time = 0
-    self._acceleration = 0
-    self._constant_time = 0
-    self._deceleration_time = 0
-    self._deceleration = 0
+        self._acceleration_time = 0
+        self._acceleration = 0
+        self._constant_time = 0
+        self._deceleration_time = 0
+        self._deceleration = 0
 
-    self._maximum_acceleration = 0
-    self._maximum_velocity = 0
-    self._timestep = delta_time
+        self._maximum_acceleration = 0
+        self._maximum_velocity = 0
+        self._timestep = delta_time
 
-    self._output = numpy.array(numpy.zeros((2,1)))
+        self._output = numpy.array(numpy.zeros((2, 1)))
 
-  # Updates the state
-  def Update(self, goal_position, goal_velocity):
-    self._CalculateTimes(goal_position - self._output[0], goal_velocity)
+    # Updates the state
+    def Update(self, goal_position, goal_velocity):
+        self._CalculateTimes(goal_position - self._output[0], goal_velocity)
 
-    next_timestep = self._timestep
+        next_timestep = self._timestep
 
-    # We now have the amount of time we need to accelerate to follow the
-    # profile, the amount of time we need to move at constant velocity
-    # to follow the profile, and the amount of time we need to decelerate to
-    # follow the profile.  Do as much of that as we have time left in dt.
-    if self._acceleration_time > next_timestep:
-      self._UpdateVals(self._acceleration, next_timestep)
-    else:
-      self._UpdateVals(self._acceleration, self._acceleration_time)
-
-      next_timestep -= self._acceleration_time
-      if self._constant_time > next_timestep:
-        self._UpdateVals(0, next_timestep)
-      else:
-        self._UpdateVals(0, self._constant_time)
-        next_timestep -= self._constant_time;
-        if self._deceleration_time > next_timestep:
-          self._UpdateVals(self._deceleration, next_timestep)
+        # We now have the amount of time we need to accelerate to follow the
+        # profile, the amount of time we need to move at constant velocity
+        # to follow the profile, and the amount of time we need to decelerate to
+        # follow the profile.  Do as much of that as we have time left in dt.
+        if self._acceleration_time > next_timestep:
+            self._UpdateVals(self._acceleration, next_timestep)
         else:
-          self._UpdateVals(self._deceleration, self._deceleration_time)
-          next_timestep -= self._deceleration_time
-          self._UpdateVals(0, next_timestep)
+            self._UpdateVals(self._acceleration, self._acceleration_time)
 
-    return self._output
+            next_timestep -= self._acceleration_time
+            if self._constant_time > next_timestep:
+                self._UpdateVals(0, next_timestep)
+            else:
+                self._UpdateVals(0, self._constant_time)
+                next_timestep -= self._constant_time
+                if self._deceleration_time > next_timestep:
+                    self._UpdateVals(self._deceleration, next_timestep)
+                else:
+                    self._UpdateVals(self._deceleration,
+                                     self._deceleration_time)
+                    next_timestep -= self._deceleration_time
+                    self._UpdateVals(0, next_timestep)
 
-  # Useful for preventing windup etc.
-  def MoveCurrentState(self, current):
-    self._output = current
+        return self._output
 
-  # Useful for preventing windup etc.
-  def MoveGoal(self, dx):
-    self._output[0] += dx
+    # Useful for preventing windup etc.
+    def MoveCurrentState(self, current):
+        self._output = current
 
-  def SetGoal(self, x):
-    self._output[0] = x
+    # Useful for preventing windup etc.
+    def MoveGoal(self, dx):
+        self._output[0] += dx
 
-  def set_maximum_acceleration(self, maximum_acceleration):
-    self._maximum_acceleration = maximum_acceleration
+    def SetGoal(self, x):
+        self._output[0] = x
 
-  def set_maximum_velocity(self, maximum_velocity):
-    self._maximum_velocity = maximum_velocity
+    def set_maximum_acceleration(self, maximum_acceleration):
+        self._maximum_acceleration = maximum_acceleration
 
-  def _UpdateVals(self, acceleration, delta_time):
-    self._output[0, 0] += (self._output[1, 0] * delta_time
-        + 0.5 * acceleration * delta_time * delta_time)
-    self._output[1, 0] += acceleration * delta_time
+    def set_maximum_velocity(self, maximum_velocity):
+        self._maximum_velocity = maximum_velocity
 
-  def _CalculateTimes(self, distance_to_target, goal_velocity):
-    if distance_to_target == 0:
-      self._acceleration_time = 0
-      self._acceleration = 0
-      self._constant_time = 0
-      self._deceleration_time = 0
-      self._deceleration = 0
-      return
-    elif distance_to_target < 0:
-      # Recurse with everything inverted.
-      self._output[1] *= -1
-      self._CalculateTimes(-distance_to_target, -goal_velocity)
-      self._output[1] *= -1
-      self._acceleration *= -1
-      self._deceleration *= -1
-      return
+    def _UpdateVals(self, acceleration, delta_time):
+        self._output[0, 0] += (self._output[1, 0] * delta_time +
+                               0.5 * acceleration * delta_time * delta_time)
+        self._output[1, 0] += acceleration * delta_time
 
-    self._constant_time = 0
-    self._acceleration = self._maximum_acceleration
-    maximum_acceleration_velocity = (
-        distance_to_target * 2 * numpy.abs(self._acceleration)
-        + self._output[1] * self._output[1])
-    if maximum_acceleration_velocity > 0:
-      maximum_acceleration_velocity = numpy.sqrt(maximum_acceleration_velocity)
-    else:
-      maximum_acceleration_velocity = -numpy.sqrt(-maximum_acceleration_velocity)
+    def _CalculateTimes(self, distance_to_target, goal_velocity):
+        if distance_to_target == 0:
+            self._acceleration_time = 0
+            self._acceleration = 0
+            self._constant_time = 0
+            self._deceleration_time = 0
+            self._deceleration = 0
+            return
+        elif distance_to_target < 0:
+            # Recurse with everything inverted.
+            self._output[1] *= -1
+            self._CalculateTimes(-distance_to_target, -goal_velocity)
+            self._output[1] *= -1
+            self._acceleration *= -1
+            self._deceleration *= -1
+            return
 
-    # Since we know what we'd have to do if we kept after it to decelerate, we
-    # know the sign of the acceleration.
-    if maximum_acceleration_velocity > goal_velocity:
-      self._deceleration = -self._maximum_acceleration
-    else:
-      self._deceleration = self._maximum_acceleration
+        self._constant_time = 0
+        self._acceleration = self._maximum_acceleration
+        maximum_acceleration_velocity = (
+            distance_to_target * 2 * numpy.abs(self._acceleration) +
+            self._output[1] * self._output[1])
+        if maximum_acceleration_velocity > 0:
+            maximum_acceleration_velocity = numpy.sqrt(
+                maximum_acceleration_velocity)
+        else:
+            maximum_acceleration_velocity = -numpy.sqrt(
+                -maximum_acceleration_velocity)
 
-    # We now know the top velocity we can get to.
-    top_velocity = numpy.sqrt((distance_to_target +
-                                (self._output[1] * self._output[1]) /
-                                (2.0 * self._acceleration) +
-                                (goal_velocity * goal_velocity) /
-                                (2.0 * self._deceleration)) /
-                               (-1.0 / (2.0 * self._deceleration) +
-                                1.0 / (2.0 * self._acceleration)))
+        # Since we know what we'd have to do if we kept after it to decelerate, we
+        # know the sign of the acceleration.
+        if maximum_acceleration_velocity > goal_velocity:
+            self._deceleration = -self._maximum_acceleration
+        else:
+            self._deceleration = self._maximum_acceleration
 
-    # If it can go too fast, we now know how long we get to accelerate for and
-    # how long to go at constant velocity.
-    if top_velocity > self._maximum_velocity:
-      self._acceleration_time = ((self._maximum_velocity - self._output[1]) /
-                                 self._maximum_acceleration)
-      self._constant_time = (distance_to_target +
-                        (goal_velocity * goal_velocity -
-                         self._maximum_velocity * self._maximum_velocity) /
-                        (2.0 * self._maximum_acceleration)) / self._maximum_velocity
-    else:
-      self._acceleration_time = (
-          (top_velocity - self._output[1]) / self._acceleration)
+        # We now know the top velocity we can get to.
+        top_velocity = numpy.sqrt(
+            (distance_to_target + (self._output[1] * self._output[1]) /
+             (2.0 * self._acceleration) + (goal_velocity * goal_velocity) /
+             (2.0 * self._deceleration)) / (-1.0 /
+                                            (2.0 * self._deceleration) + 1.0 /
+                                            (2.0 * self._acceleration)))
 
-    if self._output[1] > self._maximum_velocity:
-      self._constant_time = 0
-      self._acceleration_time = 0
+        # If it can go too fast, we now know how long we get to accelerate for and
+        # how long to go at constant velocity.
+        if top_velocity > self._maximum_velocity:
+            self._acceleration_time = (
+                (self._maximum_velocity - self._output[1]) /
+                self._maximum_acceleration)
+            self._constant_time = (
+                distance_to_target +
+                (goal_velocity * goal_velocity -
+                 self._maximum_velocity * self._maximum_velocity) /
+                (2.0 * self._maximum_acceleration)) / self._maximum_velocity
+        else:
+            self._acceleration_time = ((top_velocity - self._output[1]) /
+                                       self._acceleration)
 
-    self._deceleration_time = (
-        (goal_velocity - top_velocity) / self._deceleration)
+        if self._output[1] > self._maximum_velocity:
+            self._constant_time = 0
+            self._acceleration_time = 0
 
+        self._deceleration_time = ((goal_velocity - top_velocity) /
+                                   self._deceleration)
diff --git a/aos/uuid.cc b/aos/uuid.cc
index 86baed6..ca429bf 100644
--- a/aos/uuid.cc
+++ b/aos/uuid.cc
@@ -120,12 +120,6 @@
   ToHex(&data_[10], result + 24, 6);
 }
 
-UUID UUID::Zero() {
-  UUID result;
-  std::memset(result.data_.data(), 0, result.data_.size());
-  return result;
-}
-
 UUID UUID::FromString(const flatbuffers::String *str) {
   return FromString(str->string_view());
 }
diff --git a/aos/uuid.h b/aos/uuid.h
index 3f7fc50..b03e074 100644
--- a/aos/uuid.h
+++ b/aos/uuid.h
@@ -6,6 +6,7 @@
 #include <string>
 
 #include "absl/types/span.h"
+#include "aos/thread_local.h"
 #include "flatbuffers/flatbuffers.h"
 
 namespace aos {
@@ -21,7 +22,11 @@
   static UUID Random();
 
   // Returns a uuid with all '0's.
-  static UUID Zero();
+  static constexpr UUID Zero() {
+    UUID result;
+    std::memset(result.data_.data(), 0, result.data_.size());
+    return result;
+  }
 
   // Converts a string UUID of the form 00000000-0000-0000-0000-000000000000 to
   // a UUID.
@@ -37,7 +42,10 @@
 
   // Default constructor which builds an uninitialized UUID.  Use one of the
   // static methods if you want something more useful.
-  UUID() {}
+  constexpr UUID() : data_() {}
+  constexpr UUID(const UUID &uuid) = default;
+
+  constexpr UUID &operator=(const UUID &other) = default;
 
   // Packs this UUID into a flatbuffer as a string.
   flatbuffers::Offset<flatbuffers::String> PackString(
@@ -52,6 +60,19 @@
   flatbuffers::Offset<flatbuffers::Vector<uint8_t>> PackVector(
       flatbuffers::FlatBufferBuilder *fbb) const;
 
+  // Returns a human-readable string representing this UUID.
+  //
+  // This is done without any memory allocation, which means it's returned in a
+  // thread-local buffer.
+  //
+  // Be careful using this. It's mostly useful for low-level tracing of UUIDs
+  // through the system.
+  const char *thread_local_string() const {
+    AOS_THREAD_LOCAL char buffer[kStringSize + 1];
+    CopyTo(buffer);
+    return buffer;
+  }
+
   // Returns the underlying UUID data.
   absl::Span<const uint8_t> span() const {
     return absl::Span<const uint8_t>(data_.data(), data_.size());
diff --git a/aos/uuid.rs b/aos/uuid.rs
new file mode 100644
index 0000000..737d6f4
--- /dev/null
+++ b/aos/uuid.rs
@@ -0,0 +1,30 @@
+autocxx::include_cpp! (
+#include "aos/uuid.h"
+#include "aos/uuid_for_rust.h"
+
+safety!(unsafe)
+
+generate_pod!("aos::UUID")
+);
+
+pub use ffi::aos::UUID;
+
+impl From<UUID> for uuid::Uuid {
+    fn from(uuid: UUID) -> uuid::Uuid {
+        uuid::Uuid::from_bytes(uuid.data)
+    }
+}
+
+impl AsRef<uuid::Uuid> for UUID {
+    fn as_ref(&self) -> &uuid::Uuid {
+        uuid::Uuid::from_bytes_ref(&self.data)
+    }
+}
+
+impl From<uuid::Uuid> for UUID {
+    fn from(uuid: uuid::Uuid) -> UUID {
+        UUID {
+            data: *uuid.as_bytes(),
+        }
+    }
+}
diff --git a/aos/uuid_for_rust.h b/aos/uuid_for_rust.h
new file mode 100644
index 0000000..5bbddc8
--- /dev/null
+++ b/aos/uuid_for_rust.h
@@ -0,0 +1,20 @@
+#ifndef AOS_UUID_FOR_RUST_H_
+#define AOS_UUID_FOR_RUST_H_
+
+#include "aos/uuid.h"
+
+namespace aos {
+
+// An alternative version of UUID to feed autocxx, to work around
+// https://github.com/google/autocxx/issues/266.
+/// <div rustbindgen replaces="aos::UUID"></div>
+struct RustUUID {
+  uint8_t data[16];
+};
+
+static_assert(sizeof(UUID) == sizeof(RustUUID));
+static_assert(alignof(UUID) == alignof(RustUUID));
+
+}  // namespace aos
+
+#endif  // AOS_UUID_FOR_RUST_H_
diff --git a/aos/vision/download/downloader.py b/aos/vision/download/downloader.py
index 3dafb48..0d15b87 100644
--- a/aos/vision/download/downloader.py
+++ b/aos/vision/download/downloader.py
@@ -12,39 +12,51 @@
 import os
 import os.path
 
+
 def RunAndSplitShas(shcmd):
-  out = subprocess.check_output(shcmd)
-  return [line.split(' ')[0] for line in filter(lambda x: x, out.split('\n'))]
+    out = subprocess.check_output(shcmd)
+    return [
+        line.split(' ')[0] for line in filter(lambda x: x, out.split('\n'))
+    ]
+
 
 def GetChecksums(fnames):
-  return RunAndSplitShas(["sha256sum"] + fnames)
+    return RunAndSplitShas(["sha256sum"] + fnames)
+
 
 def GetJetsonChecksums(ssh_target, fnames):
-  target_files = ["/root/%s" % fname for fname in fnames]
-  subprocess.check_call(["ssh", ssh_target, "touch " + " ".join(target_files)])
-  cmds = ["ssh", ssh_target, "sha256sum " + " ".join(target_files)]
-  return RunAndSplitShas(cmds)
+    target_files = ["/root/%s" % fname for fname in fnames]
+    subprocess.check_call(
+        ["ssh", ssh_target, "touch " + " ".join(target_files)])
+    cmds = ["ssh", ssh_target, "sha256sum " + " ".join(target_files)]
+    return RunAndSplitShas(cmds)
+
 
 def ToJetsonFname(fname):
-  if (fname[-9:] == ".stripped"):
-    fname = fname[:-9]
-  return os.path.basename(fname)
+    if (fname[-9:] == ".stripped"):
+        fname = fname[:-9]
+    return os.path.basename(fname)
+
 
 def VerifyCheckSumsAndUpload(fnames, ssh_target):
-  jetson_fnames = [ToJetsonFname(fname) for fname in fnames]
-  checksums = GetChecksums(fnames)
-  jetson_checksums = GetJetsonChecksums(ssh_target, jetson_fnames)
-  for i in range(len(fnames)):
-    if (checksums[i] != jetson_checksums[i]):
-      # if empty, unlink
-      subprocess.check_call(["ssh", ssh_target, "unlink " + jetson_fnames[i]])
-      subprocess.check_call(["scp", fnames[i], ssh_target + ":" + jetson_fnames[i]])
+    jetson_fnames = [ToJetsonFname(fname) for fname in fnames]
+    checksums = GetChecksums(fnames)
+    jetson_checksums = GetJetsonChecksums(ssh_target, jetson_fnames)
+    for i in range(len(fnames)):
+        if (checksums[i] != jetson_checksums[i]):
+            # if empty, unlink
+            subprocess.check_call(
+                ["ssh", ssh_target, "unlink " + jetson_fnames[i]])
+            subprocess.check_call(
+                ["scp", fnames[i], ssh_target + ":" + jetson_fnames[i]])
+
 
 def main(argv):
-  args = argv[argv.index('--') + 1:]
-  files = argv[1:argv.index('--')]
+    args = argv[argv.index('--') + 1:]
+    files = argv[1:argv.index('--')]
 
-  VerifyCheckSumsAndUpload(files, args[-1])
+    VerifyCheckSumsAndUpload(files, args[-1])
+
 
 if __name__ == '__main__':
-  main(sys.argv)
+    main(sys.argv)
diff --git a/build_tests/dummy_http_server.py b/build_tests/dummy_http_server.py
index f65122a..0661a8a 100644
--- a/build_tests/dummy_http_server.py
+++ b/build_tests/dummy_http_server.py
@@ -11,6 +11,7 @@
 from http.server import BaseHTTPRequestHandler, HTTPServer
 import os
 
+
 def parse_auth(authorization):
     auth_type, auth_info = authorization.split(" ", maxsplit=1)
     if auth_type != "Basic":
@@ -18,7 +19,9 @@
     username, _ = base64.b64decode(auth_info).decode().split(":", 1)
     return username
 
+
 class Server(BaseHTTPRequestHandler):
+
     def _set_response(self):
         self.send_response(200)
         self.send_header("Content-type", "text/html")
@@ -34,6 +37,7 @@
         username = parse_auth(self.headers["Authorization"])
         self._write(f"Hello, {username}")
 
+
 def main():
     port = int(os.environ["APACHE_WRAPPED_PORT"])
     server_address = ("", port)
@@ -44,5 +48,6 @@
         pass
     httpd.server_close()
 
+
 if __name__ == "__main__":
     main()
diff --git a/build_tests/python_opencv.py b/build_tests/python_opencv.py
index c4d8591..5f5f1aa 100644
--- a/build_tests/python_opencv.py
+++ b/build_tests/python_opencv.py
@@ -3,4 +3,4 @@
 import cv2
 
 if __name__ == '__main__':
-  cv2.SIFT_create()
+    cv2.SIFT_create()
diff --git a/debian/download_packages.py b/debian/download_packages.py
index be43120..6d548b5 100755
--- a/debian/download_packages.py
+++ b/debian/download_packages.py
@@ -10,18 +10,19 @@
 import argparse
 import hashlib
 
+
 def initialize_apt(apt_dir, apt_args, args):
-  os.mkdir(os.path.join(apt_dir, 'etc'))
-  os.mkdir(os.path.join(apt_dir, 'etc', 'apt'))
-  os.mkdir(os.path.join(apt_dir, 'etc', 'apt', 'trusted.gpg.d'))
-  os.mkdir(os.path.join(apt_dir, 'etc', 'apt', 'preferences.d'))
-  os.mkdir(os.path.join(apt_dir, 'var'))
-  os.mkdir(os.path.join(apt_dir, 'var', 'lib'))
-  os.mkdir(os.path.join(apt_dir, 'var', 'lib', 'dpkg'))
-  with open(os.path.join(apt_dir, 'var', 'lib', 'dpkg', 'status'), 'w'):
-    pass
-  with open(os.path.join(apt_dir, 'etc', 'apt', 'sources.list'), 'w') as f:
-    f.write("""
+    os.mkdir(os.path.join(apt_dir, 'etc'))
+    os.mkdir(os.path.join(apt_dir, 'etc', 'apt'))
+    os.mkdir(os.path.join(apt_dir, 'etc', 'apt', 'trusted.gpg.d'))
+    os.mkdir(os.path.join(apt_dir, 'etc', 'apt', 'preferences.d'))
+    os.mkdir(os.path.join(apt_dir, 'var'))
+    os.mkdir(os.path.join(apt_dir, 'var', 'lib'))
+    os.mkdir(os.path.join(apt_dir, 'var', 'lib', 'dpkg'))
+    with open(os.path.join(apt_dir, 'var', 'lib', 'dpkg', 'status'), 'w'):
+        pass
+    with open(os.path.join(apt_dir, 'etc', 'apt', 'sources.list'), 'w') as f:
+        f.write("""
 deb http://deb.debian.org/debian/ {release} main contrib non-free
 deb-src http://deb.debian.org/debian/ {release} main contrib non-free
 
@@ -34,103 +35,117 @@
 deb http://deb.debian.org/debian {release}-backports main contrib non-free
 deb-src http://deb.debian.org/debian {release}-backports main contrib non-free
 """.format(release=args.release))
-  for key in args.apt_key:
-    basename = os.path.basename(key)
-    urllib.request.urlretrieve(key, os.path.join(apt_dir, 'etc', 'apt', 'trusted.gpg.d', basename))
-  subprocess.check_call(["apt-get"] + apt_args + ["update"])
+    for key in args.apt_key:
+        basename = os.path.basename(key)
+        urllib.request.urlretrieve(
+            key, os.path.join(apt_dir, 'etc', 'apt', 'trusted.gpg.d',
+                              basename))
+    subprocess.check_call(["apt-get"] + apt_args + ["update"])
+
 
 def get_deps(apt_args, package):
-  env = dict(os.environ)
-  del env['LD_LIBRARY_PATH']
-  out = subprocess.check_output(["apt-rdepends"] + apt_args + [package], env=env)
-  deps = out.splitlines()
-  return set([dep for dep in deps if not dep.startswith(b" ")])
+    env = dict(os.environ)
+    del env['LD_LIBRARY_PATH']
+    out = subprocess.check_output(["apt-rdepends"] + apt_args + [package],
+                                  env=env)
+    deps = out.splitlines()
+    return set([dep for dep in deps if not dep.startswith(b" ")])
+
 
 def get_all_deps(apt_args, packages):
-  deps = set()
-  for package in packages or ():
-    deps.update(get_deps(apt_args, package))
-  return deps
+    deps = set()
+    for package in packages or ():
+        deps.update(get_deps(apt_args, package))
+    return deps
+
 
 def map_virtual_packages(packages):
-  '''Maps known virtual packages to the preferred concrete packages which
+    '''Maps known virtual packages to the preferred concrete packages which
   provide them.'''
-  for package in packages:
-    if package == b'python-numpy-abi9':
-      yield b'python-numpy'
-      continue
-    if package == b'python3-numpy-abi9':
-      yield b'python3-numpy'
-      continue
-    if package == b'libjack-0.125':
-      yield b'libjack-jackd2-0'
-      continue
-    if package == b'fonts-freefont':
-      yield b'fonts-freefont-ttf'
-      continue
-    if package == b'gsettings-backend':
-      yield b'dconf-gsettings-backend'
-      continue
-    if package == b'gdal-abi-2-4-0':
-      yield b'libgdal20'
-      continue
-    if package == b'libglu1':
-      yield b'libglu1-mesa'
-      continue
-    if package == b'liblapack.so.3':
-      yield b'liblapack3'
-      continue
-    if package == b'libopencl1':
-      yield b'ocl-icd-libopencl1'
-      continue
-    if package == b'libgcc1':
-      yield b'libgcc-s1'
-      continue
-    if package == b'libopencl-1.2-1':
-      yield b'ocl-icd-libopencl1'
-      continue
-    if package == b'libblas.so.3':
-      yield b'libblas3'
-      continue
-    if package == b'debconf-2.0':
-      yield b'debconf'
-      continue
-    yield package
+    for package in packages:
+        if package == b'python-numpy-abi9':
+            yield b'python-numpy'
+            continue
+        if package == b'python3-numpy-abi9':
+            yield b'python3-numpy'
+            continue
+        if package == b'libjack-0.125':
+            yield b'libjack-jackd2-0'
+            continue
+        if package == b'fonts-freefont':
+            yield b'fonts-freefont-ttf'
+            continue
+        if package == b'gsettings-backend':
+            yield b'dconf-gsettings-backend'
+            continue
+        if package == b'gdal-abi-2-4-0':
+            yield b'libgdal20'
+            continue
+        if package == b'libglu1':
+            yield b'libglu1-mesa'
+            continue
+        if package == b'liblapack.so.3':
+            yield b'liblapack3'
+            continue
+        if package == b'libopencl1':
+            yield b'ocl-icd-libopencl1'
+            continue
+        if package == b'libgcc1':
+            yield b'libgcc-s1'
+            continue
+        if package == b'libopencl-1.2-1':
+            yield b'ocl-icd-libopencl1'
+            continue
+        if package == b'libblas.so.3':
+            yield b'libblas3'
+            continue
+        if package == b'debconf-2.0':
+            yield b'debconf'
+            continue
+        yield package
+
 
 def download_deps(apt_args, packages, excludes, force_includes):
-  deps = get_all_deps(apt_args, packages)
-  exclude_deps = get_all_deps(apt_args, excludes)
-  deps -= exclude_deps
-  force_include_deps = get_all_deps(apt_args, force_includes)
-  deps |= force_include_deps
-  env = dict(os.environ)
-  del env['LD_LIBRARY_PATH']
-  subprocess.check_call([b"apt-get"] + [a.encode('utf-8') for a in apt_args] + [b"download"] + list(map_virtual_packages(deps)), env=env)
+    deps = get_all_deps(apt_args, packages)
+    exclude_deps = get_all_deps(apt_args, excludes)
+    deps -= exclude_deps
+    force_include_deps = get_all_deps(apt_args, force_includes)
+    deps |= force_include_deps
+    env = dict(os.environ)
+    del env['LD_LIBRARY_PATH']
+    subprocess.check_call([b"apt-get"] + [a.encode('utf-8')
+                                          for a in apt_args] + [b"download"] +
+                          list(map_virtual_packages(deps)),
+                          env=env)
+
 
 def fixup_files():
-  # Gotta remove those pesky epoch numbers in the file names. Bazel doesn't
-  # like them.
-  regex = re.compile(".%3a")
-  contents = os.listdir(os.getcwd())
-  for deb in contents:
-    new_name = regex.sub("", deb)
-    if new_name != deb:
-      os.rename(deb, new_name)
+    # Gotta remove those pesky epoch numbers in the file names. Bazel doesn't
+    # like them.
+    regex = re.compile(".%3a")
+    contents = os.listdir(os.getcwd())
+    for deb in contents:
+        new_name = regex.sub("", deb)
+        if new_name != deb:
+            os.rename(deb, new_name)
+
 
 def sha256_checksum(filename, block_size=65536):
-  sha256 = hashlib.sha256()
-  with open(filename, 'rb') as f:
-    for block in iter(lambda: f.read(block_size), b''):
-      sha256.update(block)
-  return sha256.hexdigest()
+    sha256 = hashlib.sha256()
+    with open(filename, 'rb') as f:
+        for block in iter(lambda: f.read(block_size), b''):
+            sha256.update(block)
+    return sha256.hexdigest()
+
 
 def print_file_list():
-  contents = os.listdir(os.getcwd())
-  contents.sort()
-  print("_files = {")
-  for deb in contents:
-    print('  "%s": "%s",' % (deb, sha256_checksum(deb)))
-  print("}")
+    contents = os.listdir(os.getcwd())
+    contents.sort()
+    print("_files = {")
+    for deb in contents:
+        print('  "%s": "%s",' % (deb, sha256_checksum(deb)))
+    print("}")
+
 
 _ALWAYS_EXCLUDE = [
     "dbus-session-bus",
@@ -144,41 +159,66 @@
     "libc6-dev",
 ]
 
+
 def main(argv):
-  parser = argparse.ArgumentParser()
-  parser.add_argument("--exclude", "-e", type=str, action="append", help="A package to exclude from the list")
-  parser.add_argument("--force-include", type=str, action="append", help="Force include this and its dependencies. Even if listed in excludes.")
-  parser.add_argument("--arch", type=str, default="amd64", help="Architecture to download files for.")
-  parser.add_argument("--apt-dir", type=str, help=" ".join([
-    "File to generate and store apt files in.",
-    "Helpful for saving time when downloading multiple groups of packages.",
-    "Some flags will be ignored in favor of the values used to create this folder, so be careful.",
-    ]))
-  parser.add_argument("--release", type=str, default="bullseye", help="Debian release to use.")
-  parser.add_argument("--apt-key", type=str, action="append", default=[
-    "https://ftp-master.debian.org/keys/archive-key-11.asc",
-    "https://ftp-master.debian.org/keys/archive-key-11-security.asc",
-  ], help="URL of an additional apt archive key to trust.")
-  parser.add_argument("package", nargs="+", help="The packages to download.")
-  args = parser.parse_args(argv[1:])
-  if args.apt_dir:
-    apt_dir = args.apt_dir
-  else:
-    apt_dir = tempfile.mkdtemp()
-  apt_args = ["-o", "Dir=" + apt_dir, "-o", "APT::Architecture=" + args.arch]
-  if not args.apt_dir:
-    print("Creating apt files in %s" % apt_dir)
-    initialize_apt(apt_dir, apt_args, args)
-  folder = tempfile.mkdtemp()
-  os.chdir(folder)
-  excludes = args.exclude or []
-  # Exclude common packages that don't make sense to include in everything all
-  # the time.
-  excludes += _ALWAYS_EXCLUDE
-  download_deps(apt_args, args.package, excludes, args.force_include)
-  fixup_files()
-  print_file_list()
-  print("Your packages are all in %s" % folder)
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--exclude",
+                        "-e",
+                        type=str,
+                        action="append",
+                        help="A package to exclude from the list")
+    parser.add_argument(
+        "--force-include",
+        type=str,
+        action="append",
+        help=
+        "Force include this and its dependencies. Even if listed in excludes.")
+    parser.add_argument("--arch",
+                        type=str,
+                        default="amd64",
+                        help="Architecture to download files for.")
+    parser.add_argument(
+        "--apt-dir",
+        type=str,
+        help=" ".join([
+            "File to generate and store apt files in.",
+            "Helpful for saving time when downloading multiple groups of packages.",
+            "Some flags will be ignored in favor of the values used to create this folder, so be careful.",
+        ]))
+    parser.add_argument("--release",
+                        type=str,
+                        default="bullseye",
+                        help="Debian release to use.")
+    parser.add_argument(
+        "--apt-key",
+        type=str,
+        action="append",
+        default=[
+            "https://ftp-master.debian.org/keys/archive-key-11.asc",
+            "https://ftp-master.debian.org/keys/archive-key-11-security.asc",
+        ],
+        help="URL of an additional apt archive key to trust.")
+    parser.add_argument("package", nargs="+", help="The packages to download.")
+    args = parser.parse_args(argv[1:])
+    if args.apt_dir:
+        apt_dir = args.apt_dir
+    else:
+        apt_dir = tempfile.mkdtemp()
+    apt_args = ["-o", "Dir=" + apt_dir, "-o", "APT::Architecture=" + args.arch]
+    if not args.apt_dir:
+        print("Creating apt files in %s" % apt_dir)
+        initialize_apt(apt_dir, apt_args, args)
+    folder = tempfile.mkdtemp()
+    os.chdir(folder)
+    excludes = args.exclude or []
+    # Exclude common packages that don't make sense to include in everything all
+    # the time.
+    excludes += _ALWAYS_EXCLUDE
+    download_deps(apt_args, args.package, excludes, args.force_include)
+    fixup_files()
+    print_file_list()
+    print("Your packages are all in %s" % folder)
+
 
 if __name__ == "__main__":
-  sys.exit(main(sys.argv))
+    sys.exit(main(sys.argv))
diff --git a/debian/python_yapf.BUILD b/debian/python_yapf.BUILD
new file mode 100644
index 0000000..c41558c
--- /dev/null
+++ b/debian/python_yapf.BUILD
@@ -0,0 +1,6 @@
+py_binary(
+    name = "python_yapf",
+    srcs = glob(["yapf/**/*.py"]),
+    main = "yapf/__main__.py",
+    visibility = ["//visibility:public"],
+)
diff --git a/frc971/analysis/in_process_plotter.cc b/frc971/analysis/in_process_plotter.cc
index 545740d..33d999e 100644
--- a/frc971/analysis/in_process_plotter.cc
+++ b/frc971/analysis/in_process_plotter.cc
@@ -15,7 +15,8 @@
       event_loop_factory_(&config_.message()),
       event_loop_(event_loop_factory_.MakeEventLoop("plotter")),
       plot_sender_(event_loop_->MakeSender<Plot>("/analysis")),
-      web_proxy_(event_loop_.get(), aos::web_proxy::StoreHistory::kYes, -1),
+      web_proxy_(event_loop_.get(), event_loop_factory_.scheduler_epoll(),
+                 aos::web_proxy::StoreHistory::kYes, -1),
       builder_(plot_sender_.MakeBuilder()) {
   web_proxy_.SetDataPath(kDataPath);
   event_loop_->SkipTimingReport();
@@ -41,7 +42,11 @@
       ColorWheelColor{.name = "white", .color = {1, 1, 1}});
 }
 
-void Plotter::Spin() { event_loop_factory_.Run(); }
+void Plotter::Spin() {
+  // Set non-infinite replay rate to avoid pegging a full CPU.
+  event_loop_factory_.SetRealtimeReplayRate(1.0);
+  event_loop_factory_.Run();
+}
 
 void Plotter::Title(std::string_view title) {
   title_ = builder_.fbb()->CreateString(title);
diff --git a/frc971/analysis/log_reader_test.py b/frc971/analysis/log_reader_test.py
index b41aa38..7af08e6 100644
--- a/frc971/analysis/log_reader_test.py
+++ b/frc971/analysis/log_reader_test.py
@@ -6,6 +6,7 @@
 
 
 class LogReaderTest(unittest.TestCase):
+
     def setUp(self):
         self.reader = LogReader("external/sample_logfile/file/log.fbs")
         # A list of all the channels in the logfile--this is used to confirm that
@@ -13,16 +14,14 @@
         self.all_channels = [
             ("/aos", "aos.JoystickState"), ("/aos", "aos.RobotState"),
             ("/aos", "aos.timing.Report"), ("/aos", "frc971.PDPValues"),
-            ("/aos",
-             "frc971.wpilib.PneumaticsToLog"), ("/autonomous",
-                                                "aos.common.actions.Status"),
+            ("/aos", "frc971.wpilib.PneumaticsToLog"),
+            ("/autonomous", "aos.common.actions.Status"),
             ("/autonomous", "frc971.autonomous.AutonomousMode"),
-            ("/autonomous", "frc971.autonomous.Goal"), ("/camera",
-                                                        "y2019.CameraLog"),
+            ("/autonomous", "frc971.autonomous.Goal"),
+            ("/camera", "y2019.CameraLog"),
             ("/camera", "y2019.control_loops.drivetrain.CameraFrame"),
-            ("/drivetrain",
-             "frc971.IMUValues"), ("/drivetrain",
-                                   "frc971.control_loops.drivetrain.Goal"),
+            ("/drivetrain", "frc971.IMUValues"),
+            ("/drivetrain", "frc971.control_loops.drivetrain.Goal"),
             ("/drivetrain",
              "frc971.control_loops.drivetrain.LocalizerControl"),
             ("/drivetrain", "frc971.control_loops.drivetrain.Output"),
@@ -31,9 +30,8 @@
             ("/drivetrain", "frc971.sensors.GyroReading"),
             ("/drivetrain",
              "y2019.control_loops.drivetrain.TargetSelectorHint"),
-            ("/superstructure",
-             "y2019.StatusLight"), ("/superstructure",
-                                    "y2019.control_loops.superstructure.Goal"),
+            ("/superstructure", "y2019.StatusLight"),
+            ("/superstructure", "y2019.control_loops.superstructure.Goal"),
             ("/superstructure", "y2019.control_loops.superstructure.Output"),
             ("/superstructure", "y2019.control_loops.superstructure.Position"),
             ("/superstructure", "y2019.control_loops.superstructure.Status")
diff --git a/frc971/constants/BUILD b/frc971/constants/BUILD
new file mode 100644
index 0000000..891067c
--- /dev/null
+++ b/frc971/constants/BUILD
@@ -0,0 +1,63 @@
+cc_library(
+    name = "constants_sender_lib",
+    hdrs = [
+        "constants_sender_lib.h",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    deps = [
+        "//aos:flatbuffer_merge",
+        "//aos:json_to_flatbuffer",
+        "//aos/events:event_loop",
+        "//aos/network:team_number",
+        "@com_github_gflags_gflags//:gflags",
+        "@com_github_google_glog//:glog",
+    ],
+)
+
+cc_binary(
+    name = "constants_sender_example",
+    srcs = [
+        "constants_sender_example.cc",
+    ],
+    data = [
+        "//frc971/constants/testdata:aos_config",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    deps = [
+        "//aos:configuration",
+        "//aos:init",
+        "//aos:json_to_flatbuffer",
+        "//aos/events:shm_event_loop",
+        "//frc971/constants:constants_sender_lib",
+        "//frc971/constants/testdata:constants_data_fbs",
+        "//frc971/constants/testdata:constants_list_fbs",
+        "@com_github_gflags_gflags//:gflags",
+        "@com_github_google_glog//:glog",
+    ],
+)
+
+cc_test(
+    name = "constants_sender_test",
+    srcs = [
+        "constants_sender_test.cc",
+    ],
+    data = [
+        "//frc971/constants/testdata:aos_config",
+        "//frc971/constants/testdata:test_constants.json",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    deps = [
+        ":constants_sender_lib",
+        "//aos:configuration",
+        "//aos:flatbuffer_merge",
+        "//aos:flatbuffers",
+        "//aos:json_to_flatbuffer",
+        "//aos/events:event_loop",
+        "//aos/events:simulated_event_loop",
+        "//aos/testing:googletest",
+        "//aos/testing:path",
+        "//frc971/constants/testdata:constants_data_fbs",
+        "//frc971/constants/testdata:constants_list_fbs",
+        "@com_github_google_glog//:glog",
+    ],
+)
diff --git a/frc971/constants/constants_sender_example.cc b/frc971/constants/constants_sender_example.cc
new file mode 100644
index 0000000..6f9ba01
--- /dev/null
+++ b/frc971/constants/constants_sender_example.cc
@@ -0,0 +1,27 @@
+#include "aos/configuration.h"
+#include "aos/events/shm_event_loop.h"
+#include "aos/init.h"
+#include "aos/json_to_flatbuffer.h"
+#include "constants_sender_lib.h"
+#include "frc971/constants/testdata/constants_data_generated.h"
+#include "frc971/constants/testdata/constants_list_generated.h"
+#include "gflags/gflags.h"
+#include "glog/logging.h"
+
+DEFINE_string(config, "frc971/constants/testdata/aos_config.json",
+              "Path to the config.");
+DEFINE_string(constants_path, "frc971/constants/testdata/test_constants.json",
+              "Path to the constant file");
+// This is just a sample binary
+int main(int argc, char **argv) {
+  aos::InitGoogle(&argc, &argv);
+  aos::FlatbufferDetachedBuffer<aos::Configuration> config =
+      aos::configuration::ReadConfig(FLAGS_config);
+  aos::ShmEventLoop event_loop(&config.message());
+  frc971::constants::ConstantSender<frc971::constants::testdata::ConstantsData,
+                                    frc971::constants::testdata::ConstantsList>
+      constants_sender(&event_loop, FLAGS_constants_path);
+  event_loop.Run();
+
+  return 0;
+}
diff --git a/frc971/constants/constants_sender_lib.h b/frc971/constants/constants_sender_lib.h
new file mode 100644
index 0000000..6c849c3
--- /dev/null
+++ b/frc971/constants/constants_sender_lib.h
@@ -0,0 +1,71 @@
+#ifndef FRC971_CONSTANTS_CONSTANTS_SENDER_H_
+#define FRC971_CONSTANTS_CONSTANTS_SENDER_H_
+
+#include "aos/events/event_loop.h"
+#include "aos/flatbuffer_merge.h"
+#include "aos/json_to_flatbuffer.h"
+#include "aos/network/team_number.h"
+#include "gflags/gflags.h"
+#include "glog/logging.h"
+
+namespace frc971::constants {
+
+// Publishes the constants specific to the current robot
+template <typename ConstantsData, typename ConstantsList>
+class ConstantSender {
+ public:
+  ConstantSender<ConstantsData, ConstantsList>(
+      aos::EventLoop *event_loop, std::string constants_path,
+      std::string_view channel_name = "/constants")
+      : ConstantSender<ConstantsData, ConstantsList>(
+            event_loop, constants_path, aos::network::GetTeamNumber(),
+            channel_name) {}
+
+  ConstantSender<ConstantsData, ConstantsList>(aos::EventLoop *event_loop,
+                                               std::string constants_path,
+                                               const uint16_t team_number,
+                                               std::string_view channel_name)
+      : team_number_(team_number),
+        channel_name_(channel_name),
+        constants_path_(constants_path),
+        event_loop_(event_loop),
+        sender_(event_loop_->MakeSender<ConstantsData>(channel_name_)) {
+    event_loop->OnRun([this]() {
+      typename aos::Sender<ConstantsData>::Builder builder =
+          sender_.MakeBuilder();
+      builder.CheckOk(builder.Send(GetConstantsForTeamNumber(builder.fbb())));
+    });
+  }
+
+ private:
+  const uint16_t team_number_ = 0;
+  std::string_view channel_name_;
+  flatbuffers::Offset<ConstantsData> GetConstantsForTeamNumber(
+      flatbuffers::FlatBufferBuilder *fbb) {
+    aos::FlatbufferDetachedBuffer<ConstantsList> fb =
+        aos::JsonFileToFlatbuffer<ConstantsList>(constants_path_);
+    const ConstantsList &message = fb.message();
+    const auto *constants = message.constants();
+    // Search through the constants for the one matching our team number.
+    for (const auto &constant_data : *constants) {
+      if (team_number_ == constant_data->team()) {
+        // Values is equal to the constants meant for the specific robot.
+        const ConstantsData *values = constant_data->data();
+        flatbuffers::Offset<ConstantsData> flatbuffer_constants =
+            aos::RecursiveCopyFlatBuffer(values, fbb);
+        return flatbuffer_constants;
+      }
+    }
+    LOG(FATAL) << "There was no match for " << team_number_
+               << ". Check the constants.json file for the team number that is "
+                  "missing.";
+  }
+
+  std::string constants_path_;
+  aos::EventLoop *event_loop_;
+  aos::Sender<ConstantsData> sender_;
+};
+
+}  // namespace frc971::constants
+
+#endif  // FRC971_CONSTANTS_CONSTANTS_SENDER_H_
diff --git a/frc971/constants/constants_sender_test.cc b/frc971/constants/constants_sender_test.cc
new file mode 100644
index 0000000..3edc320
--- /dev/null
+++ b/frc971/constants/constants_sender_test.cc
@@ -0,0 +1,97 @@
+#include "aos/configuration.h"
+#include "aos/events/event_loop.h"
+#include "aos/events/simulated_event_loop.h"
+#include "aos/flatbuffer_merge.h"
+#include "aos/json_to_flatbuffer.h"
+#include "aos/testing/path.h"
+#include "frc971/constants/constants_sender_lib.h"
+#include "frc971/constants/testdata/constants_data_generated.h"
+#include "frc971/constants/testdata/constants_list_generated.h"
+#include "glog/logging.h"
+#include "gtest/gtest.h"
+
+namespace frc971::constants {
+namespace testing {
+
+using aos::testing::ArtifactPath;
+
+class ConstantSenderTest : public ::testing::Test {
+ public:
+  ConstantSenderTest()
+      : config_(aos::configuration::ReadConfig(
+            ArtifactPath("frc971/constants/testdata/aos_config.json"))),
+        event_loop_factory_(&config_.message()),
+        constants_sender_event_loop_(
+            event_loop_factory_.MakeEventLoop("sender")) {}
+
+  aos::FlatbufferDetachedBuffer<aos::Configuration> config_;
+  aos::SimulatedEventLoopFactory event_loop_factory_;
+  std::unique_ptr<aos::EventLoop> constants_sender_event_loop_;
+};
+
+// For team 971, compares the data that is recived from the program, to the data
+// that is expected
+
+TEST_F(ConstantSenderTest, HasData971) {
+  aos::network::OverrideTeamNumber(971);
+
+  std::unique_ptr<aos::EventLoop> test_event_loop =
+      event_loop_factory_.MakeEventLoop("constants");
+  ConstantSender<testdata::ConstantsData, testdata::ConstantsList> test971(
+      constants_sender_event_loop_.get(),
+      "frc971/constants/testdata/test_constants.json", "/constants");
+  test_event_loop->MakeWatcher("/constants",
+                               [](const testdata::ConstantsData &data) {
+                                 EXPECT_EQ(data.max_roller_voltage(), 12);
+                                 EXPECT_EQ(data.min_roller_voltage(), -12);
+                               });
+  event_loop_factory_.RunFor(std::chrono::seconds(1));
+}
+
+// For team 9971, compares the data that is recived from the program, to the
+// data that is expected.
+
+TEST_F(ConstantSenderTest, HasData9971) {
+  std::unique_ptr<aos::EventLoop> test_event_loop =
+      event_loop_factory_.MakeEventLoop("constants");
+  ConstantSender<testdata::ConstantsData, testdata::ConstantsList> test971(
+      constants_sender_event_loop_.get(),
+      "frc971/constants/testdata/test_constants.json", 9971, "/constants");
+  test_event_loop->MakeWatcher("/constants",
+                               [](const testdata::ConstantsData &data) {
+                                 EXPECT_EQ(data.max_roller_voltage(), 6);
+                                 EXPECT_EQ(data.min_roller_voltage(), -6);
+                               });
+  event_loop_factory_.RunFor(std::chrono::seconds(1));
+}
+
+// When given a team number that it not recognized we kill the program.
+
+TEST_F(ConstantSenderTest, TeamNotFound) {
+  EXPECT_DEATH(
+      ({
+        ConstantSender<testdata::ConstantsData, testdata::ConstantsList>
+            test_no_team(constants_sender_event_loop_.get(),
+                         "frc971/constants/testdata/test_constants.json", 254,
+                         "/constants");
+        event_loop_factory_.RunFor(std::chrono::seconds(1));
+      }),
+      "There was no match for 254");
+}
+
+// If the json file has syntax errors it will die.
+
+TEST_F(ConstantSenderTest, SyntaxErrorDeath) {
+  EXPECT_DEATH(
+      ({
+        ConstantSender<testdata::ConstantsData, testdata::ConstantsList>
+            test_syntax(constants_sender_event_loop_.get(),
+                        "frc971/constants/testdata/syntaxerror.json", 971,
+                        "/constants");
+        event_loop_factory_.RunFor(std::chrono::seconds(1));
+      }),
+      "Error on line 0");
+}
+
+}  // namespace testing
+}  // namespace frc971::constants
diff --git a/frc971/constants/testdata/BUILD b/frc971/constants/testdata/BUILD
new file mode 100644
index 0000000..cdfb0c9
--- /dev/null
+++ b/frc971/constants/testdata/BUILD
@@ -0,0 +1,37 @@
+load("//aos:config.bzl", "aos_config")
+load("@com_github_google_flatbuffers//:build_defs.bzl", "flatbuffer_cc_library")
+
+exports_files(["test_constants.json"])
+
+flatbuffer_cc_library(
+    name = "constants_list_fbs",
+    srcs = ["constants_list.fbs"],
+    gen_reflections = 1,
+    includes = [
+        ":constants_data_fbs_includes",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+)
+
+flatbuffer_cc_library(
+    name = "constants_data_fbs",
+    srcs = ["constants_data.fbs"],
+    gen_reflections = 1,
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+)
+
+aos_config(
+    name = "aos_config",
+    src = "aos_config.json",
+    flatbuffers = [
+        "//frc971/constants/testdata:constants_data_fbs",
+        "//frc971/constants/testdata:constants_list_fbs",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+    deps = [
+        "//aos/events:aos_config",
+    ],
+)
diff --git a/frc971/constants/testdata/aos_config.json b/frc971/constants/testdata/aos_config.json
new file mode 100644
index 0000000..de4d367
--- /dev/null
+++ b/frc971/constants/testdata/aos_config.json
@@ -0,0 +1,14 @@
+{
+  "channels":
+  [
+    {
+      "name": "/constants",
+      "type":"frc971.constants.testdata.ConstantsData",
+      "frequency": 3
+    }
+  ],
+  "imports":
+  [
+    "../../../aos/events/aos.json"
+  ]
+}
diff --git a/frc971/constants/testdata/config.json b/frc971/constants/testdata/config.json
new file mode 100644
index 0000000..de4d367
--- /dev/null
+++ b/frc971/constants/testdata/config.json
@@ -0,0 +1,14 @@
+{
+  "channels":
+  [
+    {
+      "name": "/constants",
+      "type":"frc971.constants.testdata.ConstantsData",
+      "frequency": 3
+    }
+  ],
+  "imports":
+  [
+    "../../../aos/events/aos.json"
+  ]
+}
diff --git a/frc971/constants/testdata/constants_data.fbs b/frc971/constants/testdata/constants_data.fbs
new file mode 100644
index 0000000..e64df68
--- /dev/null
+++ b/frc971/constants/testdata/constants_data.fbs
@@ -0,0 +1,8 @@
+namespace frc971.constants.testdata;
+
+table ConstantsData {
+  max_roller_voltage:float (id: 0);
+  min_roller_voltage:float (id: 1);
+}
+
+root_type ConstantsData;
diff --git a/frc971/constants/testdata/constants_list.fbs b/frc971/constants/testdata/constants_list.fbs
new file mode 100644
index 0000000..8257690
--- /dev/null
+++ b/frc971/constants/testdata/constants_list.fbs
@@ -0,0 +1,14 @@
+include "frc971/constants/testdata/constants_data.fbs";
+
+namespace frc971.constants.testdata;
+
+table ConstantsList {
+  constants:[Constant] (id: 0);
+}
+
+table Constant {
+  team:long (id: 0);
+  data:ConstantsData (id: 1);
+}
+
+root_type ConstantsList;
diff --git a/frc971/constants/testdata/syntax_error.json b/frc971/constants/testdata/syntax_error.json
new file mode 100644
index 0000000..e9f3b4c
--- /dev/null
+++ b/frc971/constants/testdata/syntax_error.json
@@ -0,0 +1,10 @@
+{
+  "constants: [
+  {
+      team": 971,
+      "data": {
+        max_roller_voltage: 12.0,
+        "min_roller_voltage": -12.0
+       }
+  ]
+}
diff --git a/frc971/constants/testdata/test_constants.json b/frc971/constants/testdata/test_constants.json
new file mode 100644
index 0000000..8cd3efa
--- /dev/null
+++ b/frc971/constants/testdata/test_constants.json
@@ -0,0 +1,12 @@
+{
+  "constants": [
+    {
+      "team": 971,
+      "data": {"max_roller_voltage": 12.0, "min_roller_voltage": -12.0}
+    },
+    {
+      "team": 9971,
+      "data": {"max_roller_voltage": 6.0, "min_roller_voltage": -6.0}
+    }
+  ]
+}
diff --git a/frc971/control_loops/BUILD b/frc971/control_loops/BUILD
index aed829e..4491bba 100644
--- a/frc971/control_loops/BUILD
+++ b/frc971/control_loops/BUILD
@@ -17,6 +17,7 @@
         "//aos:flatbuffers",
         "//aos:json_to_flatbuffer",
         "//aos/events:simulated_event_loop",
+        "//aos/network:testing_time_converter",
         "//aos/testing:googletest",
         "//aos/testing:test_logging",
         "//aos/time",
diff --git a/frc971/control_loops/control_loop_test.h b/frc971/control_loops/control_loop_test.h
index 576d476..90c93c7 100644
--- a/frc971/control_loops/control_loop_test.h
+++ b/frc971/control_loops/control_loop_test.h
@@ -7,6 +7,7 @@
 #include "aos/events/simulated_event_loop.h"
 #include "aos/flatbuffers.h"
 #include "aos/json_to_flatbuffer.h"
+#include "aos/network/testing_time_converter.h"
 #include "aos/testing/test_logging.h"
 #include "aos/time/time.h"
 #include "frc971/input/joystick_state_generated.h"
@@ -27,16 +28,31 @@
  public:
   ControlLoopTestTemplated(
       aos::FlatbufferDetachedBuffer<aos::Configuration> configuration,
-      ::std::chrono::nanoseconds dt = kTimeTick)
+      ::std::chrono::nanoseconds dt = kTimeTick,
+      std::vector<std::vector<aos::logger::BootTimestamp>> times = {})
       : configuration_(std::move(configuration)),
+        time_converter_(
+            aos::configuration::NodesCount(&configuration_.message())),
         event_loop_factory_(&configuration_.message()),
-        dt_(dt),
-        robot_status_event_loop_(MakeEventLoop(
-            "robot_status",
-            aos::configuration::MultiNode(event_loop_factory_.configuration())
-                ? aos::configuration::GetNode(
-                      event_loop_factory_.configuration(), "roborio")
-                : nullptr)) {
+        dt_(dt) {
+    event_loop_factory()->SetTimeConverter(&time_converter_);
+
+    // We need to setup the time converter before any event loop has been
+    // created.  Otherwise, the event loop will read the boot uuid and we'll be
+    // unable to change it.
+    if (times.empty()) {
+      time_converter_.StartEqual();
+    } else {
+      for (const std::vector<aos::logger::BootTimestamp> &time : times) {
+        time_converter_.AddMonotonic(time);
+      }
+    }
+    robot_status_event_loop_ = MakeEventLoop(
+        "robot_status",
+        aos::configuration::MultiNode(event_loop_factory_.configuration())
+            ? aos::configuration::GetNode(event_loop_factory_.configuration(),
+                                          "roborio")
+            : nullptr);
     aos::testing::EnableTestLogging();
     robot_state_sender_ =
         robot_status_event_loop_->MakeSender<::aos::RobotState>("/aos");
@@ -112,6 +128,10 @@
     return &event_loop_factory_;
   }
 
+  aos::message_bridge::TestingTimeConverter *time_converter() {
+    return &time_converter_;
+  }
+
  private:
   // Sends out all of the required queue messages.
   void SendJoystickState() {
@@ -163,6 +183,8 @@
 
   aos::FlatbufferDetachedBuffer<aos::Configuration> configuration_;
 
+  aos::message_bridge::TestingTimeConverter time_converter_;
+
   aos::SimulatedEventLoopFactory event_loop_factory_;
 
   const ::std::chrono::nanoseconds dt_;
diff --git a/frc971/control_loops/drivetrain/wheel_nonlinearity_plot.py b/frc971/control_loops/drivetrain/wheel_nonlinearity_plot.py
index 9caa9dc..0c21957 100755
--- a/frc971/control_loops/drivetrain/wheel_nonlinearity_plot.py
+++ b/frc971/control_loops/drivetrain/wheel_nonlinearity_plot.py
@@ -7,14 +7,14 @@
 import numpy
 
 if __name__ == '__main__':
-  x = numpy.arange(-1, 1, 0.01)
+    x = numpy.arange(-1, 1, 0.01)
 
-  for nonlin in numpy.arange(0.2, 1.0, 0.1):
-    angular_range = numpy.pi * nonlin / 2.0
-    newx1 = numpy.sin(x * angular_range) / numpy.sin(angular_range)
-    newx2 = numpy.sin(newx1 * angular_range) / numpy.sin(angular_range)
+    for nonlin in numpy.arange(0.2, 1.0, 0.1):
+        angular_range = numpy.pi * nonlin / 2.0
+        newx1 = numpy.sin(x * angular_range) / numpy.sin(angular_range)
+        newx2 = numpy.sin(newx1 * angular_range) / numpy.sin(angular_range)
 
-    pylab.plot(x, newx2, label="nonlin %f" % nonlin)
+        pylab.plot(x, newx2, label="nonlin %f" % nonlin)
 
-  pylab.legend()
-  pylab.show()
+    pylab.legend()
+    pylab.show()
diff --git a/frc971/control_loops/python/angular_system.py b/frc971/control_loops/python/angular_system.py
index df6c0f6..6772e71 100755
--- a/frc971/control_loops/python/angular_system.py
+++ b/frc971/control_loops/python/angular_system.py
@@ -9,6 +9,7 @@
 
 
 class AngularSystemParams(object):
+
     def __init__(self,
                  name,
                  motor,
@@ -20,7 +21,7 @@
                  kalman_q_vel,
                  kalman_q_voltage,
                  kalman_r_position,
-                 radius = None,
+                 radius=None,
                  dt=0.00505):
         """Constructs an AngularSystemParams object.
 
@@ -44,6 +45,7 @@
 
 
 class AngularSystem(control_loop.ControlLoop):
+
     def __init__(self, params, name="AngularSystem"):
         super(AngularSystem, self).__init__(name)
         self.params = params
@@ -61,8 +63,8 @@
 
         # State is [position, velocity]
         # Input is [Voltage]
-        C1 = self.motor.Kt / (
-            self.G * self.G * self.motor.resistance * self.J * self.motor.Kv)
+        C1 = self.motor.Kt / (self.G * self.G * self.motor.resistance *
+                              self.J * self.motor.Kv)
         C2 = self.motor.Kt / (self.G * self.J * self.motor.resistance)
 
         self.A_continuous = numpy.matrix([[0, 1], [0, -C1]])
@@ -86,8 +88,9 @@
         if self.params.radius is not None:
             glog.debug('Stall force: %f (N)',
                        self.motor.stall_torque / self.G / self.params.radius)
-            glog.debug('Stall force: %f (lbf)',
-                       self.motor.stall_torque / self.G / self.params.radius * 0.224809)
+            glog.debug(
+                'Stall force: %f (lbf)', self.motor.stall_torque / self.G /
+                self.params.radius * 0.224809)
 
         glog.debug('Stall acceleration: %f (rad/s^2)',
                    self.motor.stall_torque / self.G / self.J)
@@ -117,8 +120,11 @@
 
         self.R = numpy.matrix([[(self.params.kalman_r_position**2.0)]])
 
-        self.KalmanGain, self.Q_steady = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
 
         glog.debug('Kal %s', repr(self.KalmanGain))
 
@@ -131,6 +137,7 @@
 
 
 class IntegralAngularSystem(AngularSystem):
+
     def __init__(self, params, name="IntegralAngularSystem"):
         super(IntegralAngularSystem, self).__init__(params, name=name)
 
@@ -153,13 +160,16 @@
 
         self.Q = numpy.matrix([[(self.params.kalman_q_pos**2.0), 0.0, 0.0],
                                [0.0, (self.params.kalman_q_vel**2.0), 0.0],
-                               [0.0, 0.0, (self.params.kalman_q_voltage
-                                           **2.0)]])
+                               [0.0, 0.0,
+                                (self.params.kalman_q_voltage**2.0)]])
 
         self.R = numpy.matrix([[(self.params.kalman_r_position**2.0)]])
 
-        self.KalmanGain, self.Q_steady = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
 
         self.K_unaugmented = self.K
         self.K = numpy.matrix(numpy.zeros((1, 3)))
@@ -232,10 +242,10 @@
         offset_plot.append(observer.X_hat[2, 0])
         x_hat_plot.append(observer.X_hat[0, 0])
 
-        next_goal = numpy.concatenate(
-            (profile.Update(end_goal[0, 0], end_goal[1, 0]),
-             numpy.matrix(numpy.zeros((1, 1)))),
-            axis=0)
+        next_goal = numpy.concatenate((profile.Update(
+            end_goal[0, 0], end_goal[1, 0]), numpy.matrix(numpy.zeros(
+                (1, 1)))),
+                                      axis=0)
 
         ff_U = controller.Kff * (next_goal - observer.A * goal)
 
@@ -252,8 +262,8 @@
 
         U[0, 0] = numpy.clip(U[0, 0], -vbat, vbat)
 
-        motor_current = (U[0, 0] - plant.X[1, 0] / plant.G / plant.motor.Kv
-                         ) / plant.motor.resistance
+        motor_current = (U[0, 0] - plant.X[1, 0] / plant.G /
+                         plant.motor.Kv) / plant.motor.resistance
         motor_current_plot.append(motor_current)
         battery_current = U[0, 0] * motor_current / 12.0
         battery_current_plot.append(battery_current)
@@ -281,8 +291,8 @@
         goal = controller.A * goal + controller.B * ff_U
 
         if U[0, 0] != U_uncapped[0, 0]:
-            profile.MoveCurrentState(
-                numpy.matrix([[goal[0, 0]], [goal[1, 0]]]))
+            profile.MoveCurrentState(numpy.matrix([[goal[0, 0]], [goal[1,
+                                                                       0]]]))
 
     glog.debug('Time: %f', t_plot[-1])
     glog.debug('goal_error %s', repr(end_goal - goal))
@@ -330,15 +340,14 @@
     initial_X = numpy.matrix([[0.0], [0.0]])
     augmented_R = numpy.matrix(numpy.zeros((3, 1)))
     augmented_R[0:2, :] = R
-    RunTest(
-        plant,
-        end_goal=augmented_R,
-        controller=controller,
-        observer=observer,
-        duration=2.0,
-        use_profile=False,
-        kick_time=1.0,
-        kick_magnitude=0.0)
+    RunTest(plant,
+            end_goal=augmented_R,
+            controller=controller,
+            observer=observer,
+            duration=2.0,
+            use_profile=False,
+            kick_time=1.0,
+            kick_magnitude=0.0)
 
 
 def PlotKick(params, R, plant_params=None):
@@ -357,15 +366,14 @@
     initial_X = numpy.matrix([[0.0], [0.0]])
     augmented_R = numpy.matrix(numpy.zeros((3, 1)))
     augmented_R[0:2, :] = R
-    RunTest(
-        plant,
-        end_goal=augmented_R,
-        controller=controller,
-        observer=observer,
-        duration=2.0,
-        use_profile=False,
-        kick_time=1.0,
-        kick_magnitude=2.0)
+    RunTest(plant,
+            end_goal=augmented_R,
+            controller=controller,
+            observer=observer,
+            duration=2.0,
+            use_profile=False,
+            kick_time=1.0,
+            kick_magnitude=2.0)
 
 
 def PlotMotion(params,
@@ -391,15 +399,14 @@
     initial_X = numpy.matrix([[0.0], [0.0]])
     augmented_R = numpy.matrix(numpy.zeros((3, 1)))
     augmented_R[0:2, :] = R
-    RunTest(
-        plant,
-        end_goal=augmented_R,
-        controller=controller,
-        observer=observer,
-        duration=2.0,
-        use_profile=True,
-        max_velocity=max_velocity,
-        max_acceleration=max_acceleration)
+    RunTest(plant,
+            end_goal=augmented_R,
+            controller=controller,
+            observer=observer,
+            duration=2.0,
+            use_profile=True,
+            max_velocity=max_velocity,
+            max_acceleration=max_acceleration)
 
 
 def WriteAngularSystem(params, plant_files, controller_files, year_namespaces):
@@ -431,8 +438,9 @@
         integral_angular_systems.append(
             IntegralAngularSystem(params, 'Integral' + params.name))
 
-    loop_writer = control_loop.ControlLoopWriter(
-        name, angular_systems, namespaces=year_namespaces)
+    loop_writer = control_loop.ControlLoopWriter(name,
+                                                 angular_systems,
+                                                 namespaces=year_namespaces)
     loop_writer.AddConstant(
         control_loop.Constant('kOutputRatio', '%f', angular_systems[0].G))
     loop_writer.AddConstant(
diff --git a/frc971/control_loops/python/basic_window.py b/frc971/control_loops/python/basic_window.py
index b8d49a9..44e4f49 100755
--- a/frc971/control_loops/python/basic_window.py
+++ b/frc971/control_loops/python/basic_window.py
@@ -1,5 +1,6 @@
 #!/usr/bin/python3
 import gi
+
 gi.require_version('Gtk', '3.0')
 from gi.repository import Gtk
 from gi.repository import GLib
@@ -13,6 +14,7 @@
 
 # Override the matrix of a cairo context.
 class OverrideMatrix(object):
+
     def __init__(self, cr, matrix):
         self.cr = cr
         self.matrix = matrix
diff --git a/frc971/control_loops/python/cim.py b/frc971/control_loops/python/cim.py
index ac527de..f8a6e9a 100644
--- a/frc971/control_loops/python/cim.py
+++ b/frc971/control_loops/python/cim.py
@@ -5,6 +5,7 @@
 
 
 class CIM(control_loop.ControlLoop):
+
     def __init__(self):
         super(CIM, self).__init__("CIM")
         # Stall Torque in N m
diff --git a/frc971/control_loops/python/color.py b/frc971/control_loops/python/color.py
index 5634042..a66040c 100644
--- a/frc971/control_loops/python/color.py
+++ b/frc971/control_loops/python/color.py
@@ -1,4 +1,5 @@
 class Color:
+
     def __init__(self, r, g, b, a=1.0):
         self.r = r
         self.g = g
diff --git a/frc971/control_loops/python/constants.py b/frc971/control_loops/python/constants.py
index e038cb2..b2d9d57 100644
--- a/frc971/control_loops/python/constants.py
+++ b/frc971/control_loops/python/constants.py
@@ -17,8 +17,7 @@
 
 FieldType = namedtuple(
     'Field', ['name', 'tags', 'year', 'width', 'length', 'robot', 'field_id'])
-RobotType = namedtuple(
-        "Robot", ['width', 'length'])
+RobotType = namedtuple("Robot", ['width', 'length'])
 
 GALACTIC_SEARCH = "Galactic Search"
 ARED = "A Red"
@@ -31,101 +30,91 @@
 BARREL = "Barrel"
 
 Robot2019 = RobotType(width=0.65, length=0.8)
-Robot2020 = RobotType(width=0.8128, length=0.8636) # 32 in x 34 in
+Robot2020 = RobotType(width=0.8128, length=0.8636)  # 32 in x 34 in
 Robot2021 = Robot2020
 Robot2022 = RobotType(width=0.8763, length=0.96647)
 
 FIELDS = {
     "2019 Field":
-    FieldType(
-        "2019 Field",
-        tags=[],
-        year=2019,
-        width=8.258302,
-        length=8.258302,
-        robot=Robot2019,
-        field_id="2019"),
+    FieldType("2019 Field",
+              tags=[],
+              year=2019,
+              width=8.258302,
+              length=8.258302,
+              robot=Robot2019,
+              field_id="2019"),
     "2020 Field":
-    FieldType(
-        "2020 Field",
-        tags=[],
-        year=2020,
-        width=15.98295,
-        length=8.21055,
-        robot=Robot2020,
-        field_id="2020"),
+    FieldType("2020 Field",
+              tags=[],
+              year=2020,
+              width=15.98295,
+              length=8.21055,
+              robot=Robot2020,
+              field_id="2020"),
     "2021 Galactic Search BRed":
-    FieldType(
-        "2021 Galactic Search BRed",
-        tags=[GALACTIC_SEARCH, BRED],
-        year=2021,
-        width=9.144,
-        length=4.572,
-        robot=Robot2021,
-        field_id="red_b"),
+    FieldType("2021 Galactic Search BRed",
+              tags=[GALACTIC_SEARCH, BRED],
+              year=2021,
+              width=9.144,
+              length=4.572,
+              robot=Robot2021,
+              field_id="red_b"),
     "2021 Galactic Search ARed":
-    FieldType(
-        "2021 Galactic Search ARed",
-        tags=[GALACTIC_SEARCH, ARED],
-        year=2021,
-        width=9.144,
-        length=4.572,
-        robot=Robot2021,
-        field_id="red_a"),
+    FieldType("2021 Galactic Search ARed",
+              tags=[GALACTIC_SEARCH, ARED],
+              year=2021,
+              width=9.144,
+              length=4.572,
+              robot=Robot2021,
+              field_id="red_a"),
     "2021 Galactic Search BBlue":
-    FieldType(
-        "2021 Galactic Search BBlue",
-        tags=[GALACTIC_SEARCH, BBLUE],
-        year=2021,
-        width=9.144,
-        length=4.572,
-        robot=Robot2021,
-        field_id="blue_b"),
+    FieldType("2021 Galactic Search BBlue",
+              tags=[GALACTIC_SEARCH, BBLUE],
+              year=2021,
+              width=9.144,
+              length=4.572,
+              robot=Robot2021,
+              field_id="blue_b"),
     "2021 Galactic Search ABlue":
-    FieldType(
-        "2021 Galactic Search ABlue",
-        tags=[GALACTIC_SEARCH, ABLUE],
-        year=2021,
-        width=9.144,
-        length=4.572,
-        robot=Robot2021,
-        field_id="blue_a"),
+    FieldType("2021 Galactic Search ABlue",
+              tags=[GALACTIC_SEARCH, ABLUE],
+              year=2021,
+              width=9.144,
+              length=4.572,
+              robot=Robot2021,
+              field_id="blue_a"),
     "2021 AutoNav Barrel":
-    FieldType(
-        "2021 AutoNav Barrel",
-        tags=[AUTONAV, BARREL],
-        year=2021,
-        width=9.144,
-        length=4.572,
-        robot=Robot2021,
-        field_id="autonav_barrel"),
+    FieldType("2021 AutoNav Barrel",
+              tags=[AUTONAV, BARREL],
+              year=2021,
+              width=9.144,
+              length=4.572,
+              robot=Robot2021,
+              field_id="autonav_barrel"),
     "2021 AutoNav Slalom":
-    FieldType(
-        "2021 AutoNav Slalom",
-        tags=[AUTONAV, SLALOM],
-        year=2021,
-        width=9.144,
-        length=4.572,
-        robot=Robot2021,
-        field_id="autonav_slalom"),
+    FieldType("2021 AutoNav Slalom",
+              tags=[AUTONAV, SLALOM],
+              year=2021,
+              width=9.144,
+              length=4.572,
+              robot=Robot2021,
+              field_id="autonav_slalom"),
     "2021 AutoNav Bounce":
-    FieldType(
-        "2021 AutoNav Bounce",
-        tags=[AUTONAV, BOUNCE],
-        year=2021,
-        width=9.144,
-        length=4.572,
-        robot=Robot2021,
-        field_id="autonav_bounce"),
+    FieldType("2021 AutoNav Bounce",
+              tags=[AUTONAV, BOUNCE],
+              year=2021,
+              width=9.144,
+              length=4.572,
+              robot=Robot2021,
+              field_id="autonav_bounce"),
     "2022 Field":
-    FieldType(
-        "2022 Field",
-        tags=[],
-        year=2022,
-        width=16.4592,
-        length=8.2296,
-        robot=Robot2022,
-        field_id="2022"),
+    FieldType("2022 Field",
+              tags=[],
+              year=2022,
+              width=16.4592,
+              length=8.2296,
+              robot=Robot2022,
+              field_id="2022"),
 }
 
 FIELD = FIELDS["2022 Field"]
@@ -139,5 +128,6 @@
     else:
         return "frc971/control_loops/python/spline_jsons"
 
+
 def inToM(i):
     return (i * 0.0254)
diff --git a/frc971/control_loops/python/control_loop.py b/frc971/control_loops/python/control_loop.py
index 1649dd2..e836d1a 100644
--- a/frc971/control_loops/python/control_loop.py
+++ b/frc971/control_loops/python/control_loop.py
@@ -4,6 +4,7 @@
 
 
 class Constant(object):
+
     def __init__(self, name, formatt, value, comment=None):
         self.name = name
         self.formatt = formatt
@@ -25,6 +26,7 @@
 
 
 class ControlLoopWriter(object):
+
     def __init__(self,
                  gain_schedule_name,
                  loops,
@@ -76,8 +78,9 @@
         return self._namespaces[0]
 
     def _HeaderGuard(self, header_file):
-        return ('_'.join([namespace.upper() for namespace in self._namespaces])
-                + '_' + os.path.basename(header_file).upper().replace(
+        return ('_'.join([namespace.upper()
+                          for namespace in self._namespaces]) + '_' +
+                os.path.basename(header_file).upper().replace(
                     '.', '_').replace('/', '_') + '_')
 
     def Write(self, header_file, cc_file):
@@ -163,17 +166,17 @@
                 fd.write(loop.DumpObserverHeader(self._ObserverCoeffType()))
                 fd.write('\n')
 
-            fd.write('%s Make%sPlant();\n\n' % (self._PlantType(),
-                                                self._gain_schedule_name))
+            fd.write('%s Make%sPlant();\n\n' %
+                     (self._PlantType(), self._gain_schedule_name))
 
-            fd.write('%s Make%sController();\n\n' % (self._ControllerType(),
-                                                     self._gain_schedule_name))
+            fd.write('%s Make%sController();\n\n' %
+                     (self._ControllerType(), self._gain_schedule_name))
 
-            fd.write('%s Make%sObserver();\n\n' % (self._ObserverType(),
-                                                   self._gain_schedule_name))
+            fd.write('%s Make%sObserver();\n\n' %
+                     (self._ObserverType(), self._gain_schedule_name))
 
-            fd.write('%s Make%sLoop();\n\n' % (self._LoopType(),
-                                               self._gain_schedule_name))
+            fd.write('%s Make%sLoop();\n\n' %
+                     (self._LoopType(), self._gain_schedule_name))
 
             fd.write(self._namespace_end)
             fd.write('\n\n')
@@ -182,8 +185,8 @@
     def WriteCC(self, header_file_name, cc_file):
         """Writes the cc file to the file named cc_file."""
         with open(cc_file, 'w') as fd:
-            fd.write('#include \"%s/%s\"\n' % (os.path.join(*self._namespaces),
-                                               header_file_name))
+            fd.write('#include \"%s/%s\"\n' %
+                     (os.path.join(*self._namespaces), header_file_name))
             fd.write('\n')
             fd.write('#include <chrono>\n')
             fd.write('#include <vector>\n')
@@ -208,19 +211,20 @@
                                       self._scalar_type))
                 fd.write('\n')
 
-            fd.write('%s Make%sPlant() {\n' % (self._PlantType(),
-                                               self._gain_schedule_name))
+            fd.write('%s Make%sPlant() {\n' %
+                     (self._PlantType(), self._gain_schedule_name))
             fd.write('  ::std::vector< ::std::unique_ptr<%s>> plants(%d);\n' %
                      (self._PlantCoeffType(), len(self._loops)))
             for index, loop in enumerate(self._loops):
-                fd.write('  plants[%d] = ::std::unique_ptr<%s>(new %s(%s));\n'
-                         % (index, self._PlantCoeffType(),
-                            self._PlantCoeffType(), loop.PlantFunction()))
+                fd.write(
+                    '  plants[%d] = ::std::unique_ptr<%s>(new %s(%s));\n' %
+                    (index, self._PlantCoeffType(), self._PlantCoeffType(),
+                     loop.PlantFunction()))
             fd.write('  return %s(std::move(plants));\n' % self._PlantType())
             fd.write('}\n\n')
 
-            fd.write('%s Make%sController() {\n' % (self._ControllerType(),
-                                                    self._gain_schedule_name))
+            fd.write('%s Make%sController() {\n' %
+                     (self._ControllerType(), self._gain_schedule_name))
             fd.write(
                 '  ::std::vector< ::std::unique_ptr<%s>> controllers(%d);\n' %
                 (self._ControllerCoeffType(), len(self._loops)))
@@ -233,21 +237,22 @@
                      self._ControllerType())
             fd.write('}\n\n')
 
-            fd.write('%s Make%sObserver() {\n' % (self._ObserverType(),
-                                                  self._gain_schedule_name))
-            fd.write('  ::std::vector< ::std::unique_ptr<%s>> observers(%d);\n'
-                     % (self._ObserverCoeffType(), len(self._loops)))
+            fd.write('%s Make%sObserver() {\n' %
+                     (self._ObserverType(), self._gain_schedule_name))
+            fd.write(
+                '  ::std::vector< ::std::unique_ptr<%s>> observers(%d);\n' %
+                (self._ObserverCoeffType(), len(self._loops)))
             for index, loop in enumerate(self._loops):
                 fd.write(
-                    '  observers[%d] = ::std::unique_ptr<%s>(new %s(%s));\n'
-                    % (index, self._ObserverCoeffType(),
-                       self._ObserverCoeffType(), loop.ObserverFunction()))
-            fd.write(
-                '  return %s(std::move(observers));\n' % self._ObserverType())
+                    '  observers[%d] = ::std::unique_ptr<%s>(new %s(%s));\n' %
+                    (index, self._ObserverCoeffType(),
+                     self._ObserverCoeffType(), loop.ObserverFunction()))
+            fd.write('  return %s(std::move(observers));\n' %
+                     self._ObserverType())
             fd.write('}\n\n')
 
-            fd.write('%s Make%sLoop() {\n' % (self._LoopType(),
-                                              self._gain_schedule_name))
+            fd.write('%s Make%sLoop() {\n' %
+                     (self._LoopType(), self._gain_schedule_name))
             fd.write(
                 '  return %s(Make%sPlant(), Make%sController(), Make%sObserver());\n'
                 % (self._LoopType(), self._gain_schedule_name,
@@ -259,6 +264,7 @@
 
 
 class ControlLoop(object):
+
     def __init__(self, name):
         """Constructs a control loop object.
 
@@ -291,7 +297,8 @@
         self.X = numpy.matrix(numpy.zeros((self.A.shape[0], 1)))
         self.Y = self.C * self.X
         self.X_hat = numpy.matrix(numpy.zeros((self.A.shape[0], 1)))
-        self.last_U = numpy.matrix(numpy.zeros((self.B.shape[1], max(1, self.delayed_u))))
+        self.last_U = numpy.matrix(
+            numpy.zeros((self.B.shape[1], max(1, self.delayed_u))))
 
     def PlaceControllerPoles(self, poles):
         """Places the controller poles.
@@ -368,8 +375,8 @@
                     if '.' not in write_type and 'e' not in write_type:
                         write_type += '.0'
                     write_type += 'f'
-                ans.append(
-                    '  %s(%d, %d) = %s;\n' % (matrix_name, x, y, write_type))
+                ans.append('  %s(%d, %d) = %s;\n' %
+                           (matrix_name, x, y, write_type))
 
         return ''.join(ans)
 
@@ -389,8 +396,8 @@
             string, The function which will create the object.
         """
         ans = [
-            '%s Make%sPlantCoefficients() {\n' % (plant_coefficient_type,
-                                                  self._name)
+            '%s Make%sPlantCoefficients() {\n' %
+            (plant_coefficient_type, self._name)
         ]
 
         ans.append(self._DumpMatrix('C', self.C, scalar_type))
@@ -402,11 +409,11 @@
         if plant_coefficient_type.startswith('StateFeedbackPlant'):
             ans.append(self._DumpMatrix('A', self.A, scalar_type))
             ans.append(self._DumpMatrix('B', self.B, scalar_type))
-            ans.append(
-                '  const std::chrono::nanoseconds dt(%d);\n' % (self.dt * 1e9))
-            ans.append(
-                '  return %s'
-                '(A, B, C, D, U_max, U_min, dt, %s);\n' % (plant_coefficient_type, delayed_u_string))
+            ans.append('  const std::chrono::nanoseconds dt(%d);\n' %
+                       (self.dt * 1e9))
+            ans.append('  return %s'
+                       '(A, B, C, D, U_max, U_min, dt, %s);\n' %
+                       (plant_coefficient_type, delayed_u_string))
         elif plant_coefficient_type.startswith('StateFeedbackHybridPlant'):
             ans.append(
                 self._DumpMatrix('A_continuous', self.A_continuous,
@@ -414,9 +421,10 @@
             ans.append(
                 self._DumpMatrix('B_continuous', self.B_continuous,
                                  scalar_type))
-            ans.append('  return %s'
-                       '(A_continuous, B_continuous, C, D, U_max, U_min, %s);\n' %
-                       (plant_coefficient_type, delayed_u_string))
+            ans.append(
+                '  return %s'
+                '(A_continuous, B_continuous, C, D, U_max, U_min, %s);\n' %
+                (plant_coefficient_type, delayed_u_string))
         else:
             glog.fatal('Unsupported plant type %s', plant_coefficient_type)
 
@@ -521,8 +529,8 @@
                 self._DumpMatrix('P_steady_state', self.P_steady_state,
                                  scalar_type))
             ans.append(
-                '  return %s(Q_continuous, R_continuous, P_steady_state, %s);\n' %
-                (observer_coefficient_type, delayed_u_string))
+                '  return %s(Q_continuous, R_continuous, P_steady_state, %s);\n'
+                % (observer_coefficient_type, delayed_u_string))
         else:
             glog.fatal('Unsupported observer type %s',
                        observer_coefficient_type)
@@ -532,6 +540,7 @@
 
 
 class HybridControlLoop(ControlLoop):
+
     def __init__(self, name):
         super(HybridControlLoop, self).__init__(name=name)
 
@@ -569,6 +578,7 @@
 
 
 class CIM(object):
+
     def __init__(self):
         # Stall Torque in N m
         self.stall_torque = 2.42
@@ -581,13 +591,14 @@
         # Resistance of the motor
         self.resistance = 12.0 / self.stall_current
         # Motor velocity constant
-        self.Kv = (
-            self.free_speed / (12.0 - self.resistance * self.free_current))
+        self.Kv = (self.free_speed /
+                   (12.0 - self.resistance * self.free_current))
         # Torque constant
         self.Kt = self.stall_torque / self.stall_current
 
 
 class MiniCIM(object):
+
     def __init__(self):
         # Stall Torque in N m
         self.stall_torque = 1.41
@@ -600,8 +611,8 @@
         # Resistance of the motor
         self.resistance = 12.0 / self.stall_current
         # Motor velocity constant
-        self.Kv = (
-            self.free_speed / (12.0 - self.resistance * self.free_current))
+        self.Kv = (self.free_speed /
+                   (12.0 - self.resistance * self.free_current))
         # Torque constant
         self.Kt = self.stall_torque / self.stall_current
 
@@ -610,6 +621,7 @@
 
 
 class NMotor(object):
+
     def __init__(self, motor, n):
         """Gangs together n motors."""
         self.motor = motor
@@ -625,6 +637,7 @@
 
 
 class Vex775Pro(object):
+
     def __init__(self):
         # Stall Torque in N m
         self.stall_torque = 0.71
@@ -637,8 +650,8 @@
         # Resistance of the motor
         self.resistance = 12.0 / self.stall_current
         # Motor velocity constant
-        self.Kv = (
-            self.free_speed / (12.0 - self.resistance * self.free_current))
+        self.Kv = (self.free_speed /
+                   (12.0 - self.resistance * self.free_current))
         # Torque constant
         self.Kt = self.stall_torque / self.stall_current
         # Motor inertia in kg m^2
@@ -659,8 +672,8 @@
         # Resistance of the motor (Ohms)
         self.resistance = 12.0 / self.stall_current
         # Motor velocity constant (radians / (sec * volt))
-        self.Kv = (
-            self.free_speed / (12.0 - self.resistance * self.free_current))
+        self.Kv = (self.free_speed /
+                   (12.0 - self.resistance * self.free_current))
         # Torque constant (N * m / A)
         self.Kt = self.stall_torque / self.stall_current
         # Motor inertia in kg m^2
@@ -668,6 +681,7 @@
 
 
 class MN3510(object):
+
     def __init__(self):
         # http://www.robotshop.com/en/t-motor-navigator-mn3510-360kv-brushless-motor.html#Specifications
         # Free Current in Amps
@@ -702,8 +716,8 @@
         # Resistance of the motor, divided by 2 to account for the 2 motors
         self.resistance = 12.0 / self.stall_current
         # Motor velocity constant
-        self.Kv = (
-            self.free_speed / (12.0 - self.resistance * self.free_current))
+        self.Kv = (self.free_speed /
+                   (12.0 - self.resistance * self.free_current))
         # Torque constant
         self.Kt = self.stall_torque / self.stall_current
         # Motor inertia in kg m^2
diff --git a/frc971/control_loops/python/controls.py b/frc971/control_loops/python/controls.py
index 1dfd061..4cb10a2 100644
--- a/frc971/control_loops/python/controls.py
+++ b/frc971/control_loops/python/controls.py
@@ -33,8 +33,8 @@
   Returns:
     numpy.matrix(m x n), K
   """
-    return scipy.signal.place_poles(
-        A=A, B=B, poles=numpy.array(poles)).gain_matrix
+    return scipy.signal.place_poles(A=A, B=B,
+                                    poles=numpy.array(poles)).gain_matrix
 
 
 def c2d(A, B, dt):
@@ -48,8 +48,8 @@
     em_upper = numpy.hstack((a, b))
 
     # Need to stack zeros under the a and b matrices
-    em_lower = numpy.hstack((numpy.zeros((b.shape[1], a.shape[0])),
-                             numpy.zeros((b.shape[1], b.shape[1]))))
+    em_lower = numpy.hstack((numpy.zeros(
+        (b.shape[1], a.shape[0])), numpy.zeros((b.shape[1], b.shape[1]))))
 
     em = numpy.vstack((em_upper, em_lower))
     ms = scipy.linalg.expm(dt * em)
@@ -164,8 +164,8 @@
         axis=0)
     phi = numpy.matrix(scipy.linalg.expm(M * dt))
     phi12 = phi[0:number_of_states, number_of_states:(2 * number_of_states)]
-    phi22 = phi[number_of_states:2 * number_of_states, number_of_states:2 *
-                number_of_states]
+    phi22 = phi[number_of_states:2 * number_of_states,
+                number_of_states:2 * number_of_states]
     Q_discrete = phi22.T * phi12
     Q_discrete = (Q_discrete + Q_discrete.T) / 2.0
     R_discrete = R_continuous / dt
diff --git a/frc971/control_loops/python/down_estimator.py b/frc971/control_loops/python/down_estimator.py
index 84cdfa9..956a2b3 100644
--- a/frc971/control_loops/python/down_estimator.py
+++ b/frc971/control_loops/python/down_estimator.py
@@ -18,6 +18,7 @@
 
 
 class DownEstimator(control_loop.ControlLoop):
+
     def __init__(self, name='DownEstimator'):
         super(DownEstimator, self).__init__(name)
         self.dt = 0.005
@@ -47,8 +48,11 @@
         self.U_min = numpy.matrix([[-numpy.pi]])
         self.K = numpy.matrix(numpy.zeros((1, 2)))
 
-        self.KalmanGain, self.Q_steady = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
 
         self.L = self.A * self.KalmanGain
 
@@ -93,8 +97,8 @@
         angle = math.pi / 2
         velocity = 1
         for i in range(100):
-            measured_velocity = velocity + (
-                random.random() - 0.5) * 0.01 + 0.05
+            measured_velocity = velocity + (random.random() -
+                                            0.5) * 0.01 + 0.05
             estimator.Predict(measured_velocity)
             estimator.Update(
                 math.sin(angle) + (random.random() - 0.5) * 0.02, 0,
@@ -115,8 +119,9 @@
         glog.error("Expected .h file name and .cc file name")
     else:
         namespaces = ['frc971', 'control_loops', 'drivetrain']
-        kf_loop_writer = control_loop.ControlLoopWriter(
-            "DownEstimator", [estimator], namespaces=namespaces)
+        kf_loop_writer = control_loop.ControlLoopWriter("DownEstimator",
+                                                        [estimator],
+                                                        namespaces=namespaces)
         kf_loop_writer.Write(argv[1], argv[2])
 
 
diff --git a/frc971/control_loops/python/drawing_constants.py b/frc971/control_loops/python/drawing_constants.py
index 644e449..431abd7 100644
--- a/frc971/control_loops/python/drawing_constants.py
+++ b/frc971/control_loops/python/drawing_constants.py
@@ -58,7 +58,8 @@
     cr.show_text(text)
     cr.scale(widthb, -heightb)
 
+
 def draw_points(cr, p, size):
     for i in range(0, len(p)):
-        draw_px_cross(cr, p[i][0], p[i][1], size, Color(
-            0, np.sqrt(0.2 * i), 0))
+        draw_px_cross(cr, p[i][0], p[i][1], size,
+                      Color(0, np.sqrt(0.2 * i), 0))
diff --git a/frc971/control_loops/python/drivetrain.py b/frc971/control_loops/python/drivetrain.py
index 264b4a6..80a4a53 100644
--- a/frc971/control_loops/python/drivetrain.py
+++ b/frc971/control_loops/python/drivetrain.py
@@ -9,6 +9,7 @@
 
 
 class DrivetrainParams(object):
+
     def __init__(self,
                  J,
                  mass,
@@ -109,6 +110,7 @@
 
 
 class Drivetrain(control_loop.ControlLoop):
+
     def __init__(self,
                  drivetrain_params,
                  name="Drivetrain",
@@ -192,8 +194,8 @@
 
         # Resistance of the motor, divided by the number of motors.
         # Motor velocity constant
-        self.Kv = (
-            self.free_speed / (12.0 - self.resistance * self.free_current))
+        self.Kv = (self.free_speed /
+                   (12.0 - self.resistance * self.free_current))
         # Torque constant
         self.Kt = self.stall_torque / self.stall_current
 
@@ -206,10 +208,10 @@
         self.msnr = self.robot_radius_l / ( self.robot_radius_r * self.mass ) - \
             self.robot_radius_l * self.robot_radius_r / self.J
         # The calculations which we will need for A and B.
-        self.tcl = self.Kt / self.Kv / (
-            self.Gl * self.Gl * self.resistance * self.r * self.r)
-        self.tcr = self.Kt / self.Kv / (
-            self.Gr * self.Gr * self.resistance * self.r * self.r)
+        self.tcl = self.Kt / self.Kv / (self.Gl * self.Gl * self.resistance *
+                                        self.r * self.r)
+        self.tcr = self.Kt / self.Kv / (self.Gr * self.Gr * self.resistance *
+                                        self.r * self.r)
         self.mpl = self.Kt / (self.Gl * self.resistance * self.r)
         self.mpr = self.Kt / (self.Gr * self.resistance * self.r)
 
@@ -268,6 +270,7 @@
 
 
 class KFDrivetrain(Drivetrain):
+
     def __init__(self,
                  drivetrain_params,
                  name="KFDrivetrain",
@@ -323,31 +326,36 @@
                                                    self.B_continuous, self.dt)
 
         if self.has_imu:
-            self.C = numpy.matrix(
-                [[1, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0],
-                 [
-                     0, -0.5 / drivetrain_params.robot_radius, 0,
-                     0.5 / drivetrain_params.robot_radius, 0, 0, 0
-                 ], [0, 0, 0, 0, 0, 0, 0]])
+            self.C = numpy.matrix([[1, 0, 0, 0, 0, 0, 0],
+                                   [0, 0, 1, 0, 0, 0, 0],
+                                   [
+                                       0,
+                                       -0.5 / drivetrain_params.robot_radius,
+                                       0, 0.5 / drivetrain_params.robot_radius,
+                                       0, 0, 0
+                                   ], [0, 0, 0, 0, 0, 0, 0]])
             gravity = 9.8
             self.C[3, 0:6] = 0.5 * (self.A_continuous[1, 0:6] +
                                     self.A_continuous[3, 0:6]) / gravity
 
-            self.D = numpy.matrix(
-                [[0, 0], [0, 0], [0, 0],
-                 [
-                     0.5 * (self.B_continuous[1, 0] + self.B_continuous[3, 0])
-                     / gravity,
-                     0.5 * (self.B_continuous[1, 1] + self.B_continuous[3, 1])
-                     / gravity
-                 ]])
+            self.D = numpy.matrix([
+                [0, 0], [0, 0], [0, 0],
+                [
+                    0.5 * (self.B_continuous[1, 0] + self.B_continuous[3, 0]) /
+                    gravity,
+                    0.5 * (self.B_continuous[1, 1] + self.B_continuous[3, 1]) /
+                    gravity
+                ]
+            ])
         else:
-            self.C = numpy.matrix(
-                [[1, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0],
-                 [
-                     0, -0.5 / drivetrain_params.robot_radius, 0,
-                     0.5 / drivetrain_params.robot_radius, 0, 0, 0
-                 ]])
+            self.C = numpy.matrix([[1, 0, 0, 0, 0, 0, 0],
+                                   [0, 0, 1, 0, 0, 0, 0],
+                                   [
+                                       0,
+                                       -0.5 / drivetrain_params.robot_radius,
+                                       0, 0.5 / drivetrain_params.robot_radius,
+                                       0, 0, 0
+                                   ]])
 
             self.D = numpy.matrix([[0, 0], [0, 0], [0, 0]])
 
@@ -378,14 +386,17 @@
                                    [0.0, 0.0, (r_gyro**2.0)]])
 
         # Solving for kf gains.
-        self.KalmanGain, self.Q_steady = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
 
         # If we don't have an IMU, pad various matrices with zeros so that
         # we can still have 4 measurement outputs.
         if not self.has_imu:
-            self.KalmanGain = numpy.hstack((self.KalmanGain,
-                                            numpy.matrix(numpy.zeros((7, 1)))))
+            self.KalmanGain = numpy.hstack(
+                (self.KalmanGain, numpy.matrix(numpy.zeros((7, 1)))))
             self.C = numpy.vstack((self.C, numpy.matrix(numpy.zeros((1, 7)))))
             self.D = numpy.vstack((self.D, numpy.matrix(numpy.zeros((1, 2)))))
             Rtmp = numpy.zeros((4, 4))
@@ -415,8 +426,8 @@
         self.Qff[2, 2] = 1.0 / qff_pos**2.0
         self.Qff[3, 3] = 1.0 / qff_vel**2.0
         self.Kff = numpy.matrix(numpy.zeros((2, 7)))
-        self.Kff[0:2, 0:4] = controls.TwoStateFeedForwards(
-            self.B[0:4, :], self.Qff)
+        self.Kff[0:2,
+                 0:4] = controls.TwoStateFeedForwards(self.B[0:4, :], self.Qff)
 
         self.InitializeState()
 
@@ -428,59 +439,50 @@
                     scalar_type='double'):
 
     # Write the generated constants out to a file.
-    drivetrain_low_low = Drivetrain(
-        name="DrivetrainLowLow",
-        left_low=True,
-        right_low=True,
-        drivetrain_params=drivetrain_params)
-    drivetrain_low_high = Drivetrain(
-        name="DrivetrainLowHigh",
-        left_low=True,
-        right_low=False,
-        drivetrain_params=drivetrain_params)
-    drivetrain_high_low = Drivetrain(
-        name="DrivetrainHighLow",
-        left_low=False,
-        right_low=True,
-        drivetrain_params=drivetrain_params)
-    drivetrain_high_high = Drivetrain(
-        name="DrivetrainHighHigh",
-        left_low=False,
-        right_low=False,
-        drivetrain_params=drivetrain_params)
+    drivetrain_low_low = Drivetrain(name="DrivetrainLowLow",
+                                    left_low=True,
+                                    right_low=True,
+                                    drivetrain_params=drivetrain_params)
+    drivetrain_low_high = Drivetrain(name="DrivetrainLowHigh",
+                                     left_low=True,
+                                     right_low=False,
+                                     drivetrain_params=drivetrain_params)
+    drivetrain_high_low = Drivetrain(name="DrivetrainHighLow",
+                                     left_low=False,
+                                     right_low=True,
+                                     drivetrain_params=drivetrain_params)
+    drivetrain_high_high = Drivetrain(name="DrivetrainHighHigh",
+                                      left_low=False,
+                                      right_low=False,
+                                      drivetrain_params=drivetrain_params)
 
-    kf_drivetrain_low_low = KFDrivetrain(
-        name="KFDrivetrainLowLow",
-        left_low=True,
-        right_low=True,
-        drivetrain_params=drivetrain_params)
-    kf_drivetrain_low_high = KFDrivetrain(
-        name="KFDrivetrainLowHigh",
-        left_low=True,
-        right_low=False,
-        drivetrain_params=drivetrain_params)
-    kf_drivetrain_high_low = KFDrivetrain(
-        name="KFDrivetrainHighLow",
-        left_low=False,
-        right_low=True,
-        drivetrain_params=drivetrain_params)
-    kf_drivetrain_high_high = KFDrivetrain(
-        name="KFDrivetrainHighHigh",
-        left_low=False,
-        right_low=False,
-        drivetrain_params=drivetrain_params)
+    kf_drivetrain_low_low = KFDrivetrain(name="KFDrivetrainLowLow",
+                                         left_low=True,
+                                         right_low=True,
+                                         drivetrain_params=drivetrain_params)
+    kf_drivetrain_low_high = KFDrivetrain(name="KFDrivetrainLowHigh",
+                                          left_low=True,
+                                          right_low=False,
+                                          drivetrain_params=drivetrain_params)
+    kf_drivetrain_high_low = KFDrivetrain(name="KFDrivetrainHighLow",
+                                          left_low=False,
+                                          right_low=True,
+                                          drivetrain_params=drivetrain_params)
+    kf_drivetrain_high_high = KFDrivetrain(name="KFDrivetrainHighHigh",
+                                           left_low=False,
+                                           right_low=False,
+                                           drivetrain_params=drivetrain_params)
 
     if isinstance(year_namespace, list):
         namespaces = year_namespace
     else:
         namespaces = [year_namespace, 'control_loops', 'drivetrain']
-    dog_loop_writer = control_loop.ControlLoopWriter(
-        "Drivetrain", [
-            drivetrain_low_low, drivetrain_low_high, drivetrain_high_low,
-            drivetrain_high_high
-        ],
-        namespaces=namespaces,
-        scalar_type=scalar_type)
+    dog_loop_writer = control_loop.ControlLoopWriter("Drivetrain", [
+        drivetrain_low_low, drivetrain_low_high, drivetrain_high_low,
+        drivetrain_high_high
+    ],
+                                                     namespaces=namespaces,
+                                                     scalar_type=scalar_type)
     dog_loop_writer.AddConstant(
         control_loop.Constant("kDt", "%f", drivetrain_low_low.dt))
     dog_loop_writer.AddConstant(
@@ -522,20 +524,20 @@
 
     dog_loop_writer.Write(drivetrain_files[0], drivetrain_files[1])
 
-    kf_loop_writer = control_loop.ControlLoopWriter(
-        "KFDrivetrain", [
-            kf_drivetrain_low_low, kf_drivetrain_low_high,
-            kf_drivetrain_high_low, kf_drivetrain_high_high
-        ],
-        namespaces=namespaces,
-        scalar_type=scalar_type)
+    kf_loop_writer = control_loop.ControlLoopWriter("KFDrivetrain", [
+        kf_drivetrain_low_low, kf_drivetrain_low_high, kf_drivetrain_high_low,
+        kf_drivetrain_high_high
+    ],
+                                                    namespaces=namespaces,
+                                                    scalar_type=scalar_type)
     kf_loop_writer.Write(kf_drivetrain_files[0], kf_drivetrain_files[1])
 
 
 def PlotDrivetrainMotions(drivetrain_params):
     # Test out the voltage error.
-    drivetrain = KFDrivetrain(
-        left_low=False, right_low=False, drivetrain_params=drivetrain_params)
+    drivetrain = KFDrivetrain(left_low=False,
+                              right_low=False,
+                              drivetrain_params=drivetrain_params)
     close_loop_left = []
     close_loop_right = []
     left_power = []
@@ -562,8 +564,9 @@
     pylab.show()
 
     # Simulate the response of the system to a step input.
-    drivetrain = KFDrivetrain(
-        left_low=False, right_low=False, drivetrain_params=drivetrain_params)
+    drivetrain = KFDrivetrain(left_low=False,
+                              right_low=False,
+                              drivetrain_params=drivetrain_params)
     simulated_left = []
     simulated_right = []
     for _ in range(100):
@@ -579,8 +582,9 @@
     pylab.show()
 
     # Simulate forwards motion.
-    drivetrain = KFDrivetrain(
-        left_low=False, right_low=False, drivetrain_params=drivetrain_params)
+    drivetrain = KFDrivetrain(left_low=False,
+                              right_low=False,
+                              drivetrain_params=drivetrain_params)
     close_loop_left = []
     close_loop_right = []
     left_power = []
diff --git a/frc971/control_loops/python/graph.py b/frc971/control_loops/python/graph.py
index 7d73a79..178b63d 100644
--- a/frc971/control_loops/python/graph.py
+++ b/frc971/control_loops/python/graph.py
@@ -1,4 +1,5 @@
 import gi
+
 gi.require_version('Gtk', '3.0')
 from gi.repository import Gtk
 import numpy as np
@@ -14,6 +15,7 @@
 
 
 class Graph(Gtk.Bin):
+
     def __init__(self):
         super(Graph, self).__init__()
         fig = Figure(figsize=(5, 4), dpi=100)
@@ -47,6 +49,8 @@
         if self.data is None:
             return None
         cursor_index = int(self.cursor / self.dt)
+        if cursor_index > self.data.size:
+            return None
         # use the time to index into the position data
         distance_at_cursor = self.data[0][cursor_index - 1]
         multispline_index = int(self.data[5][cursor_index - 1])
diff --git a/frc971/control_loops/python/haptic_wheel.py b/frc971/control_loops/python/haptic_wheel.py
index 7221870..99a2d60 100755
--- a/frc971/control_loops/python/haptic_wheel.py
+++ b/frc971/control_loops/python/haptic_wheel.py
@@ -22,6 +22,7 @@
 
 
 class SystemParams(object):
+
     def __init__(self, J, G, kP, kD, kCompensationTimeconstant, q_pos, q_vel,
                  q_torque, current_limit):
         self.J = J
@@ -45,29 +46,28 @@
         #[0.25, 0.025],
 
 
-kWheel = SystemParams(
-    J=0.0008,
-    G=(1.25 + 0.02) / 0.35,
-    q_pos=0.001,
-    q_vel=0.20,
-    q_torque=0.005,
-    kP=7.0,
-    kD=0.0,
-    kCompensationTimeconstant=0.95,
-    current_limit=4.5)
-kTrigger = SystemParams(
-    J=0.00025,
-    G=(0.925 * 2.0 + 0.02) / 0.35,
-    q_pos=0.001,
-    q_vel=0.1,
-    q_torque=0.005,
-    kP=120.0,
-    kD=1.8,
-    kCompensationTimeconstant=0.95,
-    current_limit=3.0)
+kWheel = SystemParams(J=0.0008,
+                      G=(1.25 + 0.02) / 0.35,
+                      q_pos=0.001,
+                      q_vel=0.20,
+                      q_torque=0.005,
+                      kP=7.0,
+                      kD=0.0,
+                      kCompensationTimeconstant=0.95,
+                      current_limit=4.5)
+kTrigger = SystemParams(J=0.00025,
+                        G=(0.925 * 2.0 + 0.02) / 0.35,
+                        q_pos=0.001,
+                        q_vel=0.1,
+                        q_torque=0.005,
+                        kP=120.0,
+                        kD=1.8,
+                        kCompensationTimeconstant=0.95,
+                        current_limit=3.0)
 
 
 class HapticInput(control_loop.ControlLoop):
+
     def __init__(self, params=None, name='HapticInput'):
         # The defaults are for the steering wheel.
         super(HapticInput, self).__init__(name)
@@ -107,6 +107,7 @@
 
 
 class IntegralHapticInput(HapticInput):
+
     def __init__(self, params=None, name="IntegralHapticInput"):
         super(IntegralHapticInput, self).__init__(name=name, params=params)
 
@@ -133,8 +134,11 @@
 
         self.R = numpy.matrix([[(params.r_pos**2.0)]])
 
-        self.KalmanGain, self.Q_steady = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
         self.L = self.A * self.KalmanGain
 
         self.K_unaugmented = self.K
@@ -238,9 +242,8 @@
         return p
 
     haptic_observers = [
-        IntegralHapticInput(params=DupParamsWithJ(params, j))
-        for j in numpy.logspace(
-            numpy.log10(min_J), numpy.log10(max_J), num=num_kf)
+        IntegralHapticInput(params=DupParamsWithJ(params, j)) for j in
+        numpy.logspace(numpy.log10(min_J), numpy.log10(max_J), num=num_kf)
     ]
     # Initialize all the KF's.
     haptic_observer.X_hat[1, 0] = initial_velocity
@@ -292,10 +295,9 @@
     ax2.plot(data_time, data_request_current, label='request_current')
 
     for i, kf_torque in enumerate(kf_torques):
-        ax2.plot(
-            data_time,
-            kf_torque,
-            label='-kf_torque[%f]' % haptic_observers[i].J)
+        ax2.plot(data_time,
+                 kf_torque,
+                 label='-kf_torque[%f]' % haptic_observers[i].J)
     fig.tight_layout()
     ax1.legend(loc=3)
     ax2.legend(loc=4)
@@ -374,20 +376,18 @@
                 kind="zero")(trigger_data_time)
 
             if FLAGS.rerun_kf:
-                rerun_and_plot_kf(
-                    trigger_data_time,
-                    trigger_radians,
-                    trigger_current,
-                    resampled_trigger_request_current,
-                    kTrigger,
-                    run_correct=True)
-                rerun_and_plot_kf(
-                    wheel_data_time,
-                    wheel_radians,
-                    wheel_current,
-                    resampled_wheel_request_current,
-                    kWheel,
-                    run_correct=True)
+                rerun_and_plot_kf(trigger_data_time,
+                                  trigger_radians,
+                                  trigger_current,
+                                  resampled_trigger_request_current,
+                                  kTrigger,
+                                  run_correct=True)
+                rerun_and_plot_kf(wheel_data_time,
+                                  wheel_radians,
+                                  wheel_current,
+                                  resampled_wheel_request_current,
+                                  kWheel,
+                                  run_correct=True)
             else:
                 plot_input(trigger_data_time, trigger_radians,
                            trigger_velocity, trigger_torque, trigger_current,
@@ -403,17 +403,16 @@
     else:
         namespaces = ['frc971', 'control_loops', 'drivetrain']
         for name, params, filenames in [('HapticWheel', kWheel, argv[1:5]),
-                                        ('HapticTrigger', kTrigger,
-                                         argv[5:9])]:
+                                        ('HapticTrigger', kTrigger, argv[5:9])
+                                        ]:
             haptic_input = HapticInput(params=params, name=name)
-            loop_writer = control_loop.ControlLoopWriter(
-                name, [haptic_input],
-                namespaces=namespaces,
-                scalar_type='float')
+            loop_writer = control_loop.ControlLoopWriter(name, [haptic_input],
+                                                         namespaces=namespaces,
+                                                         scalar_type='float')
             loop_writer.Write(filenames[0], filenames[1])
 
-            integral_haptic_input = IntegralHapticInput(
-                params=params, name='Integral' + name)
+            integral_haptic_input = IntegralHapticInput(params=params,
+                                                        name='Integral' + name)
             integral_loop_writer = control_loop.ControlLoopWriter(
                 'Integral' + name, [integral_haptic_input],
                 namespaces=namespaces,
diff --git a/frc971/control_loops/python/lib_spline_test.py b/frc971/control_loops/python/lib_spline_test.py
index de44d72..7413896 100644
--- a/frc971/control_loops/python/lib_spline_test.py
+++ b/frc971/control_loops/python/lib_spline_test.py
@@ -9,6 +9,7 @@
 
 
 class TestSpline(unittest.TestCase):
+
     def testSimpleSpline(self):
         points = np.array([[1.0, 2.0, 3.0, 4.0, 5.0, 6.0],
                            [2.0, 3.0, 4.0, 5.0, 6.0, 7.0]])
@@ -18,6 +19,7 @@
 
 
 class TestDistanceSpline(unittest.TestCase):
+
     def testDistanceSpline(self):
         points = np.array([[1.0, 2.0, 3.0, 4.0, 5.0, 6.0],
                            [2.0, 3.0, 4.0, 5.0, 6.0, 7.0]])
@@ -27,6 +29,7 @@
 
 
 class TestTrajectory(unittest.TestCase):
+
     def testTrajectory(self):
         points = np.array([[1.0, 2.0, 3.0, 4.0, 5.0, 5.0],
                            [2.0, 3.0, 4.0, 5.0, 6.0, 7.0]])
diff --git a/frc971/control_loops/python/libspline.py b/frc971/control_loops/python/libspline.py
index 9ba6f4f..5aded23 100755
--- a/frc971/control_loops/python/libspline.py
+++ b/frc971/control_loops/python/libspline.py
@@ -46,9 +46,8 @@
         assert points.shape == (2, 6)
         self.__points = points
         self.__spline = ct.c_void_p(
-            libSpline.NewSpline(
-                np.ctypeslib.as_ctypes(self.__points[0]),
-                np.ctypeslib.as_ctypes(self.__points[1])))
+            libSpline.NewSpline(np.ctypeslib.as_ctypes(self.__points[0]),
+                                np.ctypeslib.as_ctypes(self.__points[1])))
 
     def __del__(self):
         libSpline.deleteSpline(self.__spline)
@@ -58,9 +57,8 @@
         self.__points[1, index] = y
         libSpline.deleteSpline(self.__spline)
         self.__spline = ct.c_void_p(
-            libSpline.newSpline(
-                np.ctypeslib.as_ctypes(self.__points[0]),
-                np.ctypeslib.as_ctypes(self.__points[1])))
+            libSpline.newSpline(np.ctypeslib.as_ctypes(self.__points[0]),
+                                np.ctypeslib.as_ctypes(self.__points[1])))
 
     def Point(self, alpha):
         result = np.zeros(2)
diff --git a/frc971/control_loops/python/linear_system.py b/frc971/control_loops/python/linear_system.py
index 0391d93..3bda4e1 100755
--- a/frc971/control_loops/python/linear_system.py
+++ b/frc971/control_loops/python/linear_system.py
@@ -9,6 +9,7 @@
 
 
 class LinearSystemParams(object):
+
     def __init__(self,
                  name,
                  motor,
@@ -37,6 +38,7 @@
 
 
 class LinearSystem(control_loop.ControlLoop):
+
     def __init__(self, params, name='LinearSystem'):
         super(LinearSystem, self).__init__(name)
         self.params = params
@@ -56,11 +58,11 @@
 
         # State is [position, velocity]
         # Input is [Voltage]
-        C1 = self.motor.Kt / (
-            self.G * self.G * self.radius * self.radius * self.motor.resistance
-            * self.mass * self.motor.Kv)
-        C2 = self.motor.Kt / (
-            self.G * self.radius * self.motor.resistance * self.mass)
+        C1 = self.motor.Kt / (self.G * self.G * self.radius * self.radius *
+                              self.motor.resistance * self.mass *
+                              self.motor.Kv)
+        C2 = self.motor.Kt / (self.G * self.radius * self.motor.resistance *
+                              self.mass)
 
         self.A_continuous = numpy.matrix([[0, 1], [0, -C1]])
 
@@ -109,8 +111,11 @@
 
         self.R = numpy.matrix([[(self.params.kalman_r_position**2.0)]])
 
-        self.KalmanGain, self.Q_steady = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
 
         glog.debug('Kal %s', repr(self.KalmanGain))
 
@@ -123,6 +128,7 @@
 
 
 class IntegralLinearSystem(LinearSystem):
+
     def __init__(self, params, name='IntegralLinearSystem'):
         super(IntegralLinearSystem, self).__init__(params, name=name)
 
@@ -145,13 +151,16 @@
 
         self.Q = numpy.matrix([[(self.params.kalman_q_pos**2.0), 0.0, 0.0],
                                [0.0, (self.params.kalman_q_vel**2.0), 0.0],
-                               [0.0, 0.0, (self.params.kalman_q_voltage
-                                           **2.0)]])
+                               [0.0, 0.0,
+                                (self.params.kalman_q_voltage**2.0)]])
 
         self.R = numpy.matrix([[(self.params.kalman_r_position**2.0)]])
 
-        self.KalmanGain, self.Q_steady = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
 
         self.K_unaugmented = self.K
         self.K = numpy.matrix(numpy.zeros((1, 3)))
@@ -222,10 +231,10 @@
         offset_plot.append(observer.X_hat[2, 0])
         x_hat_plot.append(observer.X_hat[0, 0])
 
-        next_goal = numpy.concatenate(
-            (profile.Update(end_goal[0, 0], end_goal[1, 0]),
-             numpy.matrix(numpy.zeros((1, 1)))),
-            axis=0)
+        next_goal = numpy.concatenate((profile.Update(
+            end_goal[0, 0], end_goal[1, 0]), numpy.matrix(numpy.zeros(
+                (1, 1)))),
+                                      axis=0)
 
         ff_U = controller.Kff * (next_goal - observer.A * goal)
 
@@ -264,8 +273,8 @@
         goal = controller.A * goal + controller.B * ff_U
 
         if U[0, 0] != U_uncapped[0, 0]:
-            profile.MoveCurrentState(
-                numpy.matrix([[goal[0, 0]], [goal[1, 0]]]))
+            profile.MoveCurrentState(numpy.matrix([[goal[0, 0]], [goal[1,
+                                                                       0]]]))
 
     glog.debug('Time: %f', t_plot[-1])
     glog.debug('goal_error %s', repr(end_goal - goal))
@@ -305,15 +314,14 @@
     initial_X = numpy.matrix([[0.0], [0.0]])
     augmented_R = numpy.matrix(numpy.zeros((3, 1)))
     augmented_R[0:2, :] = R
-    RunTest(
-        plant,
-        end_goal=augmented_R,
-        controller=controller,
-        observer=observer,
-        duration=2.0,
-        use_profile=False,
-        kick_time=1.0,
-        kick_magnitude=0.0)
+    RunTest(plant,
+            end_goal=augmented_R,
+            controller=controller,
+            observer=observer,
+            duration=2.0,
+            use_profile=False,
+            kick_time=1.0,
+            kick_magnitude=0.0)
 
 
 def PlotKick(params, R, plant_params=None):
@@ -332,15 +340,14 @@
     initial_X = numpy.matrix([[0.0], [0.0]])
     augmented_R = numpy.matrix(numpy.zeros((3, 1)))
     augmented_R[0:2, :] = R
-    RunTest(
-        plant,
-        end_goal=augmented_R,
-        controller=controller,
-        observer=observer,
-        duration=2.0,
-        use_profile=False,
-        kick_time=1.0,
-        kick_magnitude=2.0)
+    RunTest(plant,
+            end_goal=augmented_R,
+            controller=controller,
+            observer=observer,
+            duration=2.0,
+            use_profile=False,
+            kick_time=1.0,
+            kick_magnitude=2.0)
 
 
 def PlotMotion(params,
@@ -366,15 +373,14 @@
     initial_X = numpy.matrix([[0.0], [0.0]])
     augmented_R = numpy.matrix(numpy.zeros((3, 1)))
     augmented_R[0:2, :] = R
-    RunTest(
-        plant,
-        end_goal=augmented_R,
-        controller=controller,
-        observer=observer,
-        duration=2.0,
-        use_profile=True,
-        max_velocity=max_velocity,
-        max_acceleration=max_acceleration)
+    RunTest(plant,
+            end_goal=augmented_R,
+            controller=controller,
+            observer=observer,
+            duration=2.0,
+            use_profile=True,
+            max_velocity=max_velocity,
+            max_acceleration=max_acceleration)
 
 
 def WriteLinearSystem(params, plant_files, controller_files, year_namespaces):
@@ -405,8 +411,9 @@
         integral_linear_systems.append(
             IntegralLinearSystem(params, 'Integral' + params.name))
 
-    loop_writer = control_loop.ControlLoopWriter(
-        name, linear_systems, namespaces=year_namespaces)
+    loop_writer = control_loop.ControlLoopWriter(name,
+                                                 linear_systems,
+                                                 namespaces=year_namespaces)
     loop_writer.AddConstant(
         control_loop.Constant('kFreeSpeed', '%f',
                               linear_systems[0].motor.free_speed))
diff --git a/frc971/control_loops/python/multispline.py b/frc971/control_loops/python/multispline.py
index 888c5e0..5551587 100644
--- a/frc971/control_loops/python/multispline.py
+++ b/frc971/control_loops/python/multispline.py
@@ -21,6 +21,7 @@
 
 
 class Multispline():
+
     def __init__(self):
         self.staged_points = []  # Holds all points not yet in spline
         self.libsplines = []  # Formatted for libspline library usage
@@ -69,55 +70,168 @@
             elif constraint["constraint_type"] == "LONGITUDINAL_ACCELERATION":
                 trajectory.SetLongitudinalAcceleration(constraint["value"])
 
-    def splineExtrapolate(self, o_spline_edit):
-        spline_edit = o_spline_edit
-        if not spline_edit == len(self.splines) - 1:
-            f = self.splines[spline_edit][5]
-            e = self.splines[spline_edit][4]
-            d = self.splines[spline_edit][3]
-            self.splines[spline_edit + 1][0] = f
-            self.splines[spline_edit + 1][1] = f * 2 + e * -1
-            self.splines[spline_edit + 1][2] = d + f * 4 + e * -4
+    @staticmethod
+    def splineExtrapolate(multisplines, index, *, snap=True):
+        multispline = multisplines[index.multispline_index]
+        spline = multispline.splines[index.spline_index]
 
-        if not spline_edit == 0:
-            a = self.splines[spline_edit][0]
-            b = self.splines[spline_edit][1]
-            c = self.splines[spline_edit][2]
-            self.splines[spline_edit - 1][5] = a
-            self.splines[spline_edit - 1][4] = a * 2 + b * -1
-            self.splines[spline_edit - 1][3] = c + a * 4 + b * -4
+        # find the adjacent splines that will be affected by this spline
 
-    def updates_for_mouse_move(self, index_of_edit, spline_edit, x, y, difs):
-        if index_of_edit > -1:
-            self.splines[spline_edit][index_of_edit] = [x, y]
+        prev_multispline = None
+        prev_spline = None
+        if index.spline_index != 0:
+            prev_spline = multispline.splines[index.spline_index - 1]
+        elif index.multispline_index != 0:
+            prev_multispline = multisplines[index.multispline_index - 1]
+            prev_spline = prev_multispline.splines[-1]
 
-            if index_of_edit == 5:
-                self.splines[spline_edit][
-                    index_of_edit -
-                    2] = self.splines[spline_edit][index_of_edit - 2] + difs
-                self.splines[spline_edit][
-                    index_of_edit -
-                    1] = self.splines[spline_edit][index_of_edit - 1] + difs
+        next_multispline = None
+        next_spline = None
+        if spline is not multispline.splines[-1]:
+            next_spline = multispline.splines[index.spline_index + 1]
+        elif multispline is not multisplines[-1]:
+            next_multispline = multisplines[index.multispline_index + 1]
+            if next_multispline.splines:
+                next_spline = next_multispline.splines[0]
 
-            if index_of_edit == 0:
-                self.splines[spline_edit][
-                    index_of_edit +
-                    2] = self.splines[spline_edit][index_of_edit + 2] + difs
-                self.splines[spline_edit][
-                    index_of_edit +
-                    1] = self.splines[spline_edit][index_of_edit + 1] + difs
+        # adjust the adjacent splines according to our smoothness constraints
+        # the three points on either side are entirely constrained by this spline
 
-            if index_of_edit == 4:
-                self.splines[spline_edit][
-                    index_of_edit -
-                    1] = self.splines[spline_edit][index_of_edit - 1] + difs
+        if next_spline is not None:
+            f = spline[5]  # the end of the spline
+            e = spline[4]  # determines the heading
+            d = spline[3]
+            if next_multispline is None:
+                next_spline[0] = f
+                next_spline[1] = f * 2 + e * -1
+                next_spline[2] = d + f * 4 + e * -4
+            else:
+                if snap:
+                    Multispline.snapSplines(spline,
+                                            next_spline,
+                                            match_first_to_second=False)
 
-            if index_of_edit == 1:
-                self.splines[spline_edit][
-                    index_of_edit +
-                    1] = self.splines[spline_edit][index_of_edit + 1] + difs
+                next_spline[0] = f
+                next_multispline.update_lib_spline()
 
-            self.splineExtrapolate(spline_edit)
+        if prev_spline is not None:
+            a = spline[0]
+            b = spline[1]
+            c = spline[2]
+            if prev_multispline is None:
+                prev_spline[5] = a
+                prev_spline[4] = a * 2 + b * -1
+                prev_spline[3] = c + a * 4 + b * -4
+            else:
+                if snap:
+                    Multispline.snapSplines(prev_spline,
+                                            spline,
+                                            match_first_to_second=True)
+
+                prev_spline[5] = a
+                prev_multispline.update_lib_spline()
+
+    def snapSplines(first_spline, second_spline, *, match_first_to_second):
+        """Snaps two adjacent splines together, preserving the heading from one to another.
+
+        The end of `first_spline` connects to the beginning of `second_spline`
+        The user will have their mouse one one of these splines, so we
+        only want to snap the spline that they're not holding.
+
+        They can have the same heading, or they can have opposite headings
+        which represents the robot driving that spline backwards.
+        """
+
+        # Represent the position of the second control point (controls the heading)
+        # as a vector from the end of the spline to the control point
+        first_vector = first_spline[-2] - first_spline[-1]
+        second_vector = second_spline[1] - second_spline[0]
+
+        # we want to preserve the distance
+        first_magnitude = np.linalg.norm(first_vector, ord=2)
+        second_magnitude = np.linalg.norm(second_vector, ord=2)
+
+        normalized_first = first_vector / first_magnitude
+        normalized_second = second_vector / second_magnitude
+
+        # the proposed new vector if we were to make them point the same direction
+        swapped_second = normalized_first * second_magnitude
+        swapped_first = normalized_second * first_magnitude
+
+        # they were pointing in opposite directions
+        if np.dot(first_vector, second_vector) < 0:
+
+            # rotate the new vectors 180 degrees
+            # to keep them pointing in opposite directions
+            swapped_first = -swapped_first
+            swapped_second = -swapped_second
+
+        # Calculate how far we ended up moving the second control point
+        # so we can move the third control point with it
+        change_in_first = swapped_first - first_vector
+        change_in_second = swapped_second - second_vector
+
+        # apply the changes and discard the other proposed snap
+        if match_first_to_second:
+            first_spline[-2] = swapped_first + first_spline[-1]
+            first_spline[-3] += change_in_first
+            # swapped_second doesn't get used
+        else:
+            second_spline[1] = swapped_second + second_spline[0]
+            second_spline[2] += change_in_second
+            # swapped_first doesn't get used
+
+    def updates_for_mouse_move(self, multisplines, index, mouse):
+        """Moves the control point and adjacent points to follow the mouse"""
+        if index == None: return
+        spline_edit = index.spline_index
+        index_of_edit = index.control_point_index
+
+        spline = self.splines[spline_edit]
+
+        # we want to move it to be on the mouse
+        diffs = mouse - spline[index_of_edit]
+
+        spline[index_of_edit] = mouse
+
+        # all three points move together with the endpoint
+        if index_of_edit == 5:
+            spline[3] += diffs
+            spline[4] += diffs
+
+            # check if the next multispline exists and has a spline
+            if index.spline_index == len(
+                    self.splines) - 1 and not index.multispline_index == len(
+                        multisplines) - 1 and len(
+                            multisplines[index.multispline_index +
+                                         1].splines) > 0:
+                # move the points that lay across the multispline boundary
+                other_spline = multisplines[index.multispline_index +
+                                            1].splines[0]
+
+                other_spline[1] += diffs
+                other_spline[2] += diffs
+
+        if index_of_edit == 0:
+            spline[2] += diffs
+            spline[1] += diffs
+
+            # check if previous multispline exists
+            if index.spline_index == 0 and not index.multispline_index == 0:
+                other_spline = multisplines[index.multispline_index -
+                                            1].splines[-1]
+
+                other_spline[3] += diffs
+                other_spline[4] += diffs
+
+        # the third point moves with the second point
+        if index_of_edit == 4:
+            spline[3] += diffs
+
+        if index_of_edit == 1:
+            spline[2] += diffs
+
+        Multispline.splineExtrapolate(multisplines, index, snap=False)
 
     def update_lib_spline(self):
         self.libsplines = []
@@ -136,6 +250,7 @@
 
         Returns the closest multispline and the distance along that multispline
         """
+
         def distance(t, distance_spline, point):
             return np.sum((distance_spline.XY(t) - point)**2)
 
@@ -222,13 +337,11 @@
             self.update_lib_spline()
             return True
 
-    def extrapolate(self):
+    def extrapolate(self, spline):
         """Stages 3 points extrapolated from the end of the multispline"""
-        if len(self.getSplines()) < 1: return
 
         self.staged_points = []
 
-        spline = self.getSplines()[-1]
         point1 = spline[5]
         point2 = spline[4]
         point3 = spline[3]
diff --git a/frc971/control_loops/python/path_edit.py b/frc971/control_loops/python/path_edit.py
index 91f31d4..b66a668 100755
--- a/frc971/control_loops/python/path_edit.py
+++ b/frc971/control_loops/python/path_edit.py
@@ -6,6 +6,7 @@
 from graph import Graph
 import gi
 import numpy as np
+
 gi.require_version('Gtk', '3.0')
 from gi.repository import Gdk, Gtk, GLib
 import cairo
@@ -29,6 +30,7 @@
 
 class FieldWidget(Gtk.DrawingArea):
     """Create a GTK+ widget on which we will draw using Cairo"""
+
     def __init__(self):
         super(FieldWidget, self).__init__()
         self.set_field(FIELD)
@@ -53,7 +55,7 @@
 
         # For the editing mode
         self.control_point_index = None
-        self.active_multispline_index = -1
+        self.active_multispline_index = 0
 
         self.zoom_transform = cairo.Matrix()
 
@@ -68,7 +70,7 @@
         """Get the current active multispline or create a new one"""
         if not self.multisplines:
             self.multisplines.append(Multispline())
-            self.active_multispline_index = -1
+            self.active_multispline_index = len(self.multisplines) - 1
 
         return self.multisplines[self.active_multispline_index]
 
@@ -187,15 +189,13 @@
             for multispline in self.multisplines:
                 for i, point in enumerate(multispline.staged_points):
                     draw_px_x(cr, point[0], point[1], self.pxToM(2))
-            set_color(cr, palette["WHITE"])
         elif self.mode == Mode.kEditing:
-            set_color(cr, palette["BLACK"])
             if len(self.multisplines) != 0 and self.multisplines[0].getSplines(
             ):
                 self.draw_splines(cr)
 
-            for multispline in self.multisplines:
-                for i, points in enumerate(multispline.getSplines()):
+                for i, points in enumerate(
+                        self.active_multispline.getSplines()):
                     points = [np.array([x, y]) for (x, y) in points]
                     draw_control_points(cr,
                                         points,
@@ -220,43 +220,20 @@
 
                     cr.stroke()
                     cr.set_line_width(self.pxToM(2))
-            set_color(cr, palette["WHITE"])
 
+        set_color(cr, palette["WHITE"])
         cr.paint_with_alpha(0.2)
 
         draw_px_cross(cr, self.mousex, self.mousey, self.pxToM(2))
         cr.restore()
 
     def draw_splines(self, cr):
-        for multispline in self.multisplines:
-            for i, spline in enumerate(multispline.getLibsplines()):
-                # draw lots of really small line segments to
-                # approximate the shape of the spline
-                for k in np.linspace(0.02, 1, 200):
-                    cr.move_to(*spline.Point(k - 0.008))
-                    cr.line_to(*spline.Point(k))
-                    cr.stroke()
-
-                if i == 0:
-                    self.draw_robot_at_point(cr, spline, 0)
-                self.draw_robot_at_point(cr, spline, 1)
-
         mouse = np.array((self.mousex, self.mousey))
 
         multispline, result = Multispline.nearest_distance(
             self.multisplines, mouse)
 
-        # if the mouse is close enough, draw the robot
-        if result is not None and result.fun < 2:
-            distance_spline = DistanceSpline(multispline.getLibsplines())
-            x = result.x[0]
-
-            # draw the robot to show its width
-            self.draw_robot_at_point(cr, distance_spline, x)
-
-            multispline_index = self.multisplines.index(multispline)
-            self.graph.place_cursor(multispline_index, distance=result.x[0])
-        elif self.graph.cursor is not None:
+        if self.graph.cursor is not None and self.graph.data is not None:
             multispline_index, x = self.graph.find_cursor()
             distance_spline = DistanceSpline(
                 self.multisplines[multispline_index].getLibsplines())
@@ -266,6 +243,31 @@
             # clear the cursor each draw so it doesn't persist
             # after you move off the spline
             self.graph.cursor = None
+        elif result is not None and result.fun < 2:
+            distance_spline = DistanceSpline(multispline.getLibsplines())
+            x = result.x[0]
+
+            # draw the robot to show its width
+            self.draw_robot_at_point(cr, distance_spline, x)
+
+            multispline_index = self.multisplines.index(multispline)
+            self.graph.place_cursor(multispline_index, distance=result.x[0])
+
+        for multispline in self.multisplines:
+            for i, spline in enumerate(multispline.getLibsplines()):
+                alpha = 1 if multispline == self.active_multispline else 0.2
+                set_color(cr, palette["BLACK"], alpha)
+
+                # draw lots of really small line segments to
+                # approximate the shape of the spline
+                for k in np.linspace(0.005, 1, 200):
+                    cr.move_to(*spline.Point(k - 0.008))
+                    cr.line_to(*spline.Point(k))
+                    cr.stroke()
+
+                if i == 0:
+                    self.draw_robot_at_point(cr, spline, 0)
+                self.draw_robot_at_point(cr, spline, 1)
 
     def export_json(self, file_name):
         self.path_to_export = os.path.join(
@@ -341,6 +343,8 @@
         if should_attempt_append:
             self.attempt_append_multisplines()
         self.multisplines = []
+        self.active_multispline_index = 0
+        self.control_point_index = None
         #recalulate graph using new points
         self.graph.axis.clear()
         self.graph.queue_draw()
@@ -381,12 +385,16 @@
             multispline.extrapolate()
             self.queue_draw()
         elif keyval == Gdk.KEY_m:
-            self.multisplines.append(Multispline())
-            self.active_spline_index = len(self.multisplines) - 1
             self.mode = Mode.kPlacing
+            self.active_multispline_index += 1
+            self.multisplines.insert(self.active_multispline_index,
+                                     Multispline())
 
-            multispline = self.multisplines[-2]
-            #multispline.extrapolate()
+            prev_multispline = self.multisplines[self.active_multispline_index
+                                                 - 1]
+            if prev_multispline:
+                self.active_multispline.extrapolate(
+                    prev_multispline.getSplines()[-1])
             self.queue_draw()
 
     def do_button_release_event(self, event):
@@ -401,11 +409,12 @@
                 multispline.setControlPoint(self.control_point_index,
                                             self.mousex, self.mousey)
 
-                multispline.splineExtrapolate(
-                    self.control_point_index.spline_index)
+                Multispline.splineExtrapolate(self.multisplines,
+                                              self.control_point_index)
 
                 multispline.update_lib_spline()
                 self.graph.schedule_recalculate(self.multisplines)
+                self.queue_draw()
 
                 self.control_point_index = None
 
@@ -425,41 +434,45 @@
                 # Find nearest
                 # Move nearest to clicked
                 cur_p = [self.mousex, self.mousey]
+
                 # Get the distance between each for x and y
                 # Save the index of the point closest
-                nearest = 1  # Max distance away a the selected point can be in meters
+                nearest = 0.4  # Max distance away a the selected point can be in meters
                 index_of_closest = 0
-                for index_multisplines, multispline in enumerate(
-                        self.multisplines):
-                    for index_splines, points in enumerate(
-                            multispline.getSplines()):
-                        for index_points, val in enumerate(points):
-                            distance = np.sqrt((cur_p[0] - val[0])**2 +
-                                               (cur_p[1] - val[1])**2)
-                            if distance < nearest:
-                                nearest = distance
-                                index_of_closest = index_points
-                                self.control_point_index = ControlPointIndex(
-                                    index_multisplines, index_splines,
-                                    index_points)
+                index_multisplines = self.active_multispline_index
+                multispline = self.active_multispline
+
+                for index_splines, points in enumerate(
+                        multispline.getSplines()):
+                    for index_points, val in enumerate(points):
+                        distance = np.sqrt((cur_p[0] - val[0])**2 +
+                                           (cur_p[1] - val[1])**2)
+                        if distance < nearest:
+                            nearest = distance
+                            index_of_closest = index_points
+                            self.control_point_index = ControlPointIndex(
+                                index_multisplines, index_splines,
+                                index_points)
+
+            multispline, result = Multispline.nearest_distance(
+                self.multisplines, cur_p)
+            if result and result.fun < 0.1:
+                self.active_multispline_index = self.multisplines.index(
+                    multispline)
+
         self.queue_draw()
 
     def do_motion_notify_event(self, event):
-        old_x = self.mousex
-        old_y = self.mousey
         self.mousex, self.mousey = self.input_transform.transform_point(
             event.x, event.y)
-        dif_x = self.mousex - old_x
-        dif_y = self.mousey - old_y
-        difs = np.array([dif_x, dif_y])
+        mouse = np.array([self.mousex, self.mousey])
 
         if self.mode == Mode.kEditing and self.control_point_index != None:
             multispline = self.multisplines[
                 self.control_point_index.multispline_index]
-            multispline.updates_for_mouse_move(
-                self.control_point_index.control_point_index,
-                self.control_point_index.spline_index, self.mousex,
-                self.mousey, difs)
+
+            multispline.updates_for_mouse_move(self.multisplines,
+                                               self.control_point_index, mouse)
 
             multispline.update_lib_spline()
             self.graph.schedule_recalculate(self.multisplines)
diff --git a/frc971/control_loops/python/polydrivetrain.py b/frc971/control_loops/python/polydrivetrain.py
index 39fa33d..a45d738 100644
--- a/frc971/control_loops/python/polydrivetrain.py
+++ b/frc971/control_loops/python/polydrivetrain.py
@@ -98,6 +98,7 @@
 
 
 class VelocityDrivetrainModel(control_loop.ControlLoop):
+
     def __init__(self,
                  drivetrain_params,
                  left_low=True,
@@ -109,25 +110,27 @@
             right_low=right_low,
             drivetrain_params=drivetrain_params)
         self.dt = drivetrain_params.dt
-        self.A_continuous = numpy.matrix(
-            [[
-                self._drivetrain.A_continuous[1, 1],
-                self._drivetrain.A_continuous[1, 3]
-            ],
-             [
-                 self._drivetrain.A_continuous[3, 1],
-                 self._drivetrain.A_continuous[3, 3]
-             ]])
+        self.A_continuous = numpy.matrix([[
+            self._drivetrain.A_continuous[1, 1],
+            self._drivetrain.A_continuous[1, 3]
+        ],
+                                          [
+                                              self._drivetrain.A_continuous[3,
+                                                                            1],
+                                              self._drivetrain.A_continuous[3,
+                                                                            3]
+                                          ]])
 
-        self.B_continuous = numpy.matrix(
-            [[
-                self._drivetrain.B_continuous[1, 0],
-                self._drivetrain.B_continuous[1, 1]
-            ],
-             [
-                 self._drivetrain.B_continuous[3, 0],
-                 self._drivetrain.B_continuous[3, 1]
-             ]])
+        self.B_continuous = numpy.matrix([[
+            self._drivetrain.B_continuous[1, 0],
+            self._drivetrain.B_continuous[1, 1]
+        ],
+                                          [
+                                              self._drivetrain.B_continuous[3,
+                                                                            0],
+                                              self._drivetrain.B_continuous[3,
+                                                                            1]
+                                          ]])
         self.C = numpy.matrix(numpy.eye(2))
         self.D = numpy.matrix(numpy.zeros((2, 2)))
 
@@ -141,20 +144,22 @@
         # Build a kalman filter for the velocity.  We don't care what the gains
         # are, but the hybrid kalman filter that we want to write to disk to get
         # access to A_continuous and B_continuous needs this for completeness.
-        self.Q_continuous = numpy.matrix([[(0.5**2.0), 0.0], [0.0, (0.5
-                                                                    **2.0)]])
-        self.R_continuous = numpy.matrix([[(0.1**2.0), 0.0], [0.0, (0.1
-                                                                    **2.0)]])
+        self.Q_continuous = numpy.matrix([[(0.5**2.0), 0.0], [0.0,
+                                                              (0.5**2.0)]])
+        self.R_continuous = numpy.matrix([[(0.1**2.0), 0.0], [0.0,
+                                                              (0.1**2.0)]])
         self.PlaceObserverPoles(drivetrain_params.observer_poles)
-        _, _, self.Q, self.R = controls.kalmd(
-            A_continuous=self.A_continuous,
-            B_continuous=self.B_continuous,
-            Q_continuous=self.Q_continuous,
-            R_continuous=self.R_continuous,
-            dt=self.dt)
+        _, _, self.Q, self.R = controls.kalmd(A_continuous=self.A_continuous,
+                                              B_continuous=self.B_continuous,
+                                              Q_continuous=self.Q_continuous,
+                                              R_continuous=self.R_continuous,
+                                              dt=self.dt)
 
-        self.KalmanGain, self.P_steady_state = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.P_steady_state = controls.kalman(A=self.A,
+                                                               B=self.B,
+                                                               C=self.C,
+                                                               Q=self.Q,
+                                                               R=self.R)
 
         self.G_high = self._drivetrain.G_high
         self.G_low = self._drivetrain.G_low
@@ -277,12 +282,12 @@
         low_omega = (wheel_velocity / self.CurrentDrivetrain().G_low /
                      self.CurrentDrivetrain().r)
         #print gear_name, "Motor Energy Difference.", 0.5 * 0.000140032647 * (low_omega * low_omega - high_omega * high_omega), "joules"
-        high_torque = (
-            (12.0 - high_omega / self.CurrentDrivetrain().Kv) *
-            self.CurrentDrivetrain().Kt / self.CurrentDrivetrain().resistance)
-        low_torque = (
-            (12.0 - low_omega / self.CurrentDrivetrain().Kv) *
-            self.CurrentDrivetrain().Kt / self.CurrentDrivetrain().resistance)
+        high_torque = ((12.0 - high_omega / self.CurrentDrivetrain().Kv) *
+                       self.CurrentDrivetrain().Kt /
+                       self.CurrentDrivetrain().resistance)
+        low_torque = ((12.0 - low_omega / self.CurrentDrivetrain().Kv) *
+                      self.CurrentDrivetrain().Kt /
+                      self.CurrentDrivetrain().resistance)
         high_power = high_torque * high_omega
         low_power = low_torque * low_omega
         #if should_print:
@@ -357,19 +362,18 @@
 
         self.left_gear = self.right_gear = True
         if True:
-            self.left_gear = self.ComputeGear(
-                self.X[0, 0],
-                should_print=True,
-                current_gear=self.left_gear,
-                gear_name="left")
-            self.right_gear = self.ComputeGear(
-                self.X[1, 0],
-                should_print=True,
-                current_gear=self.right_gear,
-                gear_name="right")
+            self.left_gear = self.ComputeGear(self.X[0, 0],
+                                              should_print=True,
+                                              current_gear=self.left_gear,
+                                              gear_name="left")
+            self.right_gear = self.ComputeGear(self.X[1, 0],
+                                               should_print=True,
+                                               current_gear=self.right_gear,
+                                               gear_name="right")
             if self.IsInGear(self.left_gear):
-                self.left_cim.X[0, 0] = self.MotorRPM(
-                    self.left_shifter_position, self.X[0, 0])
+                self.left_cim.X[0,
+                                0] = self.MotorRPM(self.left_shifter_position,
+                                                   self.X[0, 0])
 
             if self.IsInGear(self.right_gear):
                 self.right_cim.X[0, 0] = self.MotorRPM(
@@ -422,23 +426,23 @@
             self.boxed_R = CoerceGoal(R_poly, equality_k, equality_w, self.R)
 
             FF_volts = self.CurrentDrivetrain().FF * self.boxed_R
-            self.U_ideal = self.CurrentDrivetrain().K * (
-                self.boxed_R - self.X) + FF_volts
+            self.U_ideal = self.CurrentDrivetrain().K * (self.boxed_R -
+                                                         self.X) + FF_volts
         else:
             glog.debug('Not all in gear')
             if not self.IsInGear(self.left_gear) and not self.IsInGear(
                     self.right_gear):
                 # TODO(austin): Use battery volts here.
-                R_left = self.MotorRPM(self.left_shifter_position,
-                                       self.X[0, 0])
+                R_left = self.MotorRPM(self.left_shifter_position, self.X[0,
+                                                                          0])
                 self.U_ideal[0, 0] = numpy.clip(
                     self.left_cim.K * (R_left - self.left_cim.X) +
                     R_left / self.left_cim.Kv, self.left_cim.U_min,
                     self.left_cim.U_max)
                 self.left_cim.Update(self.U_ideal[0, 0])
 
-                R_right = self.MotorRPM(self.right_shifter_position,
-                                        self.X[1, 0])
+                R_right = self.MotorRPM(self.right_shifter_position, self.X[1,
+                                                                            0])
                 self.U_ideal[1, 0] = numpy.clip(
                     self.right_cim.K * (R_right - self.right_cim.X) +
                     R_right / self.right_cim.Kv, self.right_cim.U_min,
@@ -473,19 +477,18 @@
                         drivetrain_params,
                         scalar_type='double'):
     vdrivetrain = VelocityDrivetrain(drivetrain_params)
-    hybrid_vdrivetrain = VelocityDrivetrain(
-        drivetrain_params, name="HybridVelocityDrivetrain")
+    hybrid_vdrivetrain = VelocityDrivetrain(drivetrain_params,
+                                            name="HybridVelocityDrivetrain")
     if isinstance(year_namespace, list):
         namespaces = year_namespace
     else:
         namespaces = [year_namespace, 'control_loops', 'drivetrain']
-    dog_loop_writer = control_loop.ControlLoopWriter(
-        "VelocityDrivetrain", [
-            vdrivetrain.drivetrain_low_low, vdrivetrain.drivetrain_low_high,
-            vdrivetrain.drivetrain_high_low, vdrivetrain.drivetrain_high_high
-        ],
-        namespaces=namespaces,
-        scalar_type=scalar_type)
+    dog_loop_writer = control_loop.ControlLoopWriter("VelocityDrivetrain", [
+        vdrivetrain.drivetrain_low_low, vdrivetrain.drivetrain_low_high,
+        vdrivetrain.drivetrain_high_low, vdrivetrain.drivetrain_high_high
+    ],
+                                                     namespaces=namespaces,
+                                                     scalar_type=scalar_type)
 
     dog_loop_writer.Write(drivetrain_files[0], drivetrain_files[1])
 
@@ -503,8 +506,8 @@
 
     hybrid_loop_writer.Write(hybrid_files[0], hybrid_files[1])
 
-    cim_writer = control_loop.ControlLoopWriter(
-        "CIM", [CIM()], scalar_type=scalar_type)
+    cim_writer = control_loop.ControlLoopWriter("CIM", [CIM()],
+                                                scalar_type=scalar_type)
 
     cim_writer.Write(motor_files[0], motor_files[1])
 
diff --git a/frc971/control_loops/python/polytope_test.py b/frc971/control_loops/python/polytope_test.py
index e5b8d5f..e0a8f61 100755
--- a/frc971/control_loops/python/polytope_test.py
+++ b/frc971/control_loops/python/polytope_test.py
@@ -15,6 +15,7 @@
 
 
 class TestHPolytope(unittest.TestCase):
+
     def setUp(self):
         """Builds a simple box polytope."""
         self.H = numpy.matrix([[1, 0], [-1, 0], [0, 1], [0, -1]])
@@ -43,14 +44,12 @@
         ]
 
         for inside_point in inside_points:
-            self.assertTrue(
-                self.p.IsInside(inside_point),
-                msg='Point is' + str(inside_point))
+            self.assertTrue(self.p.IsInside(inside_point),
+                            msg='Point is' + str(inside_point))
 
         for outside_point in outside_points:
-            self.assertFalse(
-                self.p.IsInside(outside_point),
-                msg='Point is' + str(outside_point))
+            self.assertFalse(self.p.IsInside(outside_point),
+                             msg='Point is' + str(outside_point))
 
     def AreVertices(self, p, vertices):
         """Checks that all the vertices are on corners of the set."""
@@ -80,10 +79,10 @@
                     found_points.add(actual_index)
                     break
 
-        self.assertEqual(
-            len(found_points),
-            actual.shape[0],
-            msg="Expected:\n" + str(expected) + "\nActual:\n" + str(actual))
+        self.assertEqual(len(found_points),
+                         actual.shape[0],
+                         msg="Expected:\n" + str(expected) + "\nActual:\n" +
+                         str(actual))
 
     def test_Skewed_Nonsym_Vertices(self):
         """Tests the vertices of a severely skewed space."""
diff --git a/frc971/control_loops/python/spline_drawing.py b/frc971/control_loops/python/spline_drawing.py
index 4e8b04b..7bfae29 100644
--- a/frc971/control_loops/python/spline_drawing.py
+++ b/frc971/control_loops/python/spline_drawing.py
@@ -3,6 +3,7 @@
 
 import numpy as np
 from basic_window import OverrideMatrix, identity, quit_main_loop, set_color
+
 WIDTH_OF_FIELD_IN_METERS = 8.258302
 PIXELS_ON_SCREEN = 800
 
diff --git a/frc971/control_loops/python/spline_graph.py b/frc971/control_loops/python/spline_graph.py
index fad635f..b7bc5ab 100755
--- a/frc971/control_loops/python/spline_graph.py
+++ b/frc971/control_loops/python/spline_graph.py
@@ -6,6 +6,7 @@
 from path_edit import FieldWidget
 from basic_window import RunApp
 from constants import FIELDS, FIELD, SCREEN_SIZE
+
 gi.require_version('Gtk', '3.0')
 from gi.repository import Gdk, Gtk, GLib
 import cairo
@@ -14,7 +15,9 @@
 
 
 class GridWindow(Gtk.Window):
+
     def method_connect(self, event, cb):
+
         def handler(obj, *args):
             cb(*args)
 
diff --git a/frc971/control_loops/python/spline_writer.py b/frc971/control_loops/python/spline_writer.py
index df622f3..a3d27cc 100644
--- a/frc971/control_loops/python/spline_writer.py
+++ b/frc971/control_loops/python/spline_writer.py
@@ -3,6 +3,7 @@
 
 
 class SplineWriter(object):
+
     def __init__(self, namespaces=None, filename="auto_splines.cc"):
         if namespaces:
             self._namespaces = namespaces
diff --git a/frc971/downloader/downloader.py b/frc971/downloader/downloader.py
index 4314845..bed72b9 100644
--- a/frc971/downloader/downloader.py
+++ b/frc971/downloader/downloader.py
@@ -31,19 +31,19 @@
 
 def main(argv):
     parser = argparse.ArgumentParser()
-    parser.add_argument(
-        "--target",
-        type=str,
-        default="roborio-971-frc.local",
-        help="Target to deploy code to.")
-    parser.add_argument(
-        "--type",
-        type=str,
-        choices=["roborio", "pi"],
-        required=True,
-        help="Target type for deployment")
-    parser.add_argument(
-        "srcs", type=str, nargs='+', help="List of files to copy over")
+    parser.add_argument("--target",
+                        type=str,
+                        default="roborio-971-frc.local",
+                        help="Target to deploy code to.")
+    parser.add_argument("--type",
+                        type=str,
+                        choices=["roborio", "pi"],
+                        required=True,
+                        help="Target type for deployment")
+    parser.add_argument("srcs",
+                        type=str,
+                        nargs='+',
+                        help="List of files to copy over")
     args = parser.parse_args(argv[1:])
 
     srcs = args.srcs
@@ -52,9 +52,8 @@
 
     result = re.match("(?:([^:@]+)@)?([^:@]+)(?::([^:@]+))?", destination)
     if not result:
-        print(
-            "Not sure how to parse destination \"%s\"!" % destination,
-            file=sys.stderr)
+        print("Not sure how to parse destination \"%s\"!" % destination,
+              file=sys.stderr)
         return 1
     user = None
     if result.group(1):
diff --git a/frc971/vision_codelab/codelab_test.py b/frc971/vision_codelab/codelab_test.py
index e14d1cd..2ccf943 100755
--- a/frc971/vision_codelab/codelab_test.py
+++ b/frc971/vision_codelab/codelab_test.py
@@ -8,6 +8,7 @@
 
 # TODO(milind): this should be integrated with bazel
 class TestCodelab(unittest.TestCase):
+
     def codelab_test(self, alliance, letter=None, img_path=None):
         if img_path is None:
             img_path = "%s_%s.png" % (alliance.name.lower(),
diff --git a/motors/decode_dump.py b/motors/decode_dump.py
index 27e1757..5d44694 100755
--- a/motors/decode_dump.py
+++ b/motors/decode_dump.py
@@ -12,51 +12,56 @@
 
 data = bytes()
 while len(data) < TOTAL_SIZE:
-  read_now = sys.stdin.buffer.read(TOTAL_SIZE - len(data))
-  if not read_now:
-    print('EOF before data finished', file=sys.stderr)
-    sys.exit(1)
-  data += read_now
+    read_now = sys.stdin.buffer.read(TOTAL_SIZE - len(data))
+    if not read_now:
+        print('EOF before data finished', file=sys.stderr)
+        sys.exit(1)
+    data += read_now
 print('%s' % len(data))
 
 readable, _, _ = select.select([sys.stdin.buffer], [], [], 1)
 if readable:
-  print('Extra bytes', file=sys.stderr)
-  sys.exit(1)
+    print('Extra bytes', file=sys.stderr)
+    sys.exit(1)
 
 decoded = []
 for i in range(DATAPOINTS):
-  datapoint = DatapointStruct.unpack_from(data, i * DatapointStruct.size)
-  decoded.append(datapoint)
+    datapoint = DatapointStruct.unpack_from(data, i * DatapointStruct.size)
+    decoded.append(datapoint)
+
 
 def current(reading, ref):
-  reading_voltage = reading / 4096 * 3.3  / 1.47 * (0.768 + 1.47)
-  reading_voltage = reading / 4096 * 3.3  / 18.0 * (18.0 + 10.0)
-  #reading_ref = ref / 4096 * 3.3
-  reading_ref = 2.5
-  #reading_ref = 0
-  #return (reading_voltage - reading_ref) / 50 / 0.0003
-  return (reading_voltage - reading_ref) / 0.195
+    reading_voltage = reading / 4096 * 3.3 / 1.47 * (0.768 + 1.47)
+    reading_voltage = reading / 4096 * 3.3 / 18.0 * (18.0 + 10.0)
+    #reading_ref = ref / 4096 * 3.3
+    reading_ref = 2.5
+    #reading_ref = 0
+    #return (reading_voltage - reading_ref) / 50 / 0.0003
+    return (reading_voltage - reading_ref) / 0.195
+
 
 with open(sys.argv[1], 'w') as out:
-  out.write('balanced0,balanced1,balanced2,current0.0,current1.0,current2.0,current0.1,current1.1,current2.1,count\n')
-  #for point in decoded[2000:7200]:
-  for point in decoded:
-    out.write(','.join(str(d) for d in (
-        current(point[0], point[6]),
-        current(point[1], point[6]),
-        current(point[2], point[6]),
-        current(point[3], point[6]),
-        current(point[4], point[6]),
-        current(point[5], point[6]),
-        current(point[6], point[6]),
-        current(point[7], point[6]),
-        current(point[8], point[6]),
-        #point[6] / 100.0,
-        #point[7] / 100.0,
-        #point[8] / 100.0,
-        point[9] / 100.0,
-        point[10] / 100.0,
-        )) + '\n')
+    out.write(
+        'balanced0,balanced1,balanced2,current0.0,current1.0,current2.0,current0.1,current1.1,current2.1,count\n'
+    )
+    #for point in decoded[2000:7200]:
+    for point in decoded:
+        out.write(','.join(
+            str(d) for d in (
+                current(point[0], point[6]),
+                current(point[1], point[6]),
+                current(point[2], point[6]),
+                current(point[3], point[6]),
+                current(point[4], point[6]),
+                current(point[5], point[6]),
+                current(point[6], point[6]),
+                current(point[7], point[6]),
+                current(point[8], point[6]),
+                #point[6] / 100.0,
+                #point[7] / 100.0,
+                #point[8] / 100.0,
+                point[9] / 100.0,
+                point[10] / 100.0,
+            )) + '\n')
 
 print('all done')
diff --git a/motors/fet12/calib_sensors.py b/motors/fet12/calib_sensors.py
index 7d882de..16c0ef7 100755
--- a/motors/fet12/calib_sensors.py
+++ b/motors/fet12/calib_sensors.py
@@ -6,8 +6,9 @@
 # calib_data_60*.csv has each output channel set at a constant value of 60.
 # calib_data_6030*.csv actuates two channels.
 
+
 def calibrate(fnames):
-  """Do fitting to calibrate ADC data given csv files.
+    """Do fitting to calibrate ADC data given csv files.
 
   CSVs should be of format:
   command_a, command_b, command_c, reading0, reading1, reading2
@@ -17,24 +18,25 @@
   only care about the averaged samples because otherwise the solution matrix
   can't be solved for in a stable manner.
   """
-  data = np.zeros((1, 6))
-  for fname in fnames:
-    data = np.vstack((data, np.genfromtxt(fname, delimiter=',')))
-  data = data[1:, :]
+    data = np.zeros((1, 6))
+    for fname in fnames:
+        data = np.vstack((data, np.genfromtxt(fname, delimiter=',')))
+    data = data[1:, :]
 
-  data = data[:, :6]
+    data = data[:, :6]
 
-  b = data[:, 0:3]
-  b = b - np.tile(np.mean(b, axis=1), (3, 1)).T
-  # Vcc / 3000 / R
-  # 3000 converts duty cycle in FTM ticks to fraction of full.
-  b *= 20.9 / 3000.0 / 0.0079
-  A = data[:, 3:]
+    b = data[:, 0:3]
+    b = b - np.tile(np.mean(b, axis=1), (3, 1)).T
+    # Vcc / 3000 / R
+    # 3000 converts duty cycle in FTM ticks to fraction of full.
+    b *= 20.9 / 3000.0 / 0.0079
+    A = data[:, 3:]
 
-  return np.linalg.lstsq(A, b[:])[0].T
+    return np.linalg.lstsq(A, b[:])[0].T
+
 
 if __name__ == "__main__":
-  if len(sys.argv) < 2:
-    print("Need filenames for data")
-    sys.exit(1)
-  print(calibrate(sys.argv[1:]))
+    if len(sys.argv) < 2:
+        print("Need filenames for data")
+        sys.exit(1)
+    print(calibrate(sys.argv[1:]))
diff --git a/motors/fet12/current_equalize.py b/motors/fet12/current_equalize.py
index ea44916..114d53f 100755
--- a/motors/fet12/current_equalize.py
+++ b/motors/fet12/current_equalize.py
@@ -4,6 +4,7 @@
 import sys
 import calib_sensors
 
+
 def manual_calibrate():
     #  38  27 -84
     #  36 -64  39
@@ -20,11 +21,12 @@
     transform = I * numpy.linalg.inv(Is)
     return transform
 
+
 def main():
     transform = manual_calibrate()
 
     if len(sys.argv) > 1:
-      transform = calib_sensors.calibrate(sys.argv[1:])
+        transform = calib_sensors.calibrate(sys.argv[1:])
 
     print("#ifndef MOTORS_FET12_CURRENT_MATRIX_")
     print("#define MOTORS_FET12_CURRENT_MATRIX_")
@@ -35,7 +37,8 @@
     print("namespace motors {")
     print("")
     print(
-        "inline ::std::array<float, 3> DecoupleCurrents(int16_t currents[3]) {")
+        "inline ::std::array<float, 3> DecoupleCurrents(int16_t currents[3]) {"
+    )
     print("  ::std::array<float, 3> ans;")
 
     for i in range(3):
@@ -54,5 +57,6 @@
 
     return 0
 
+
 if __name__ == '__main__':
     sys.exit(main())
diff --git a/motors/pistol_grip/generate_cogging.py b/motors/pistol_grip/generate_cogging.py
index d889064..5b0a6e6 100644
--- a/motors/pistol_grip/generate_cogging.py
+++ b/motors/pistol_grip/generate_cogging.py
@@ -5,71 +5,73 @@
 
 # TODO(austin): Plot flag.
 
+
 def main(argv):
-  if len(argv) < 4:
-    print 'Args: input output.cc struct_name'
-    return 1
-  data_sum = [0.0] * 4096
-  data_count = [0] * 4096
-  data_list_absolute = []
-  data_list_current = []
+    if len(argv) < 4:
+        print 'Args: input output.cc struct_name'
+        return 1
+    data_sum = [0.0] * 4096
+    data_count = [0] * 4096
+    data_list_absolute = []
+    data_list_current = []
 
-  with open(argv[1], 'r') as fd:
-    for line in fd:
-      if line.startswith('reading'):
-        split_line = line.split()
-        data_absolute = int(split_line[1])
-        data_index = int(split_line[3][2:])
-        data_current = int(split_line[2]) / 10000.0
-        data_sum[data_index] += data_current
-        data_count[data_index] += 1
-        data_list_absolute.append(data_absolute)
-        data_list_current.append(data_current)
-  data = [0.0] * 4096
-  min_zero = 4096
-  max_zero = 0
-  for i in range(0, 4096):
-    if data_count[i] == 0:
-      min_zero = min(i, min_zero)
-      max_zero = max(i, min_zero)
-
-  for i in range(0, 4096):
-    if data_count[i] != 0:
-      data[i] = data_sum[i] / data_count[i]
-  if min_zero == 0 and max_zero == 4095:
+    with open(argv[1], 'r') as fd:
+        for line in fd:
+            if line.startswith('reading'):
+                split_line = line.split()
+                data_absolute = int(split_line[1])
+                data_index = int(split_line[3][2:])
+                data_current = int(split_line[2]) / 10000.0
+                data_sum[data_index] += data_current
+                data_count[data_index] += 1
+                data_list_absolute.append(data_absolute)
+                data_list_current.append(data_current)
+    data = [0.0] * 4096
+    min_zero = 4096
+    max_zero = 0
     for i in range(0, 4096):
-      if data_count[i] != 0:
-        while i > 0:
-          data[i - 1] = data[i]
-          i -= 1
-        break;
+        if data_count[i] == 0:
+            min_zero = min(i, min_zero)
+            max_zero = max(i, min_zero)
 
-    for i in reversed(range(0, 4096)):
-      if data_count[i] != 0:
-        while i < 4095:
-          data[i + 1] = data[i]
-          i += 1
-        break;
-  else:
     for i in range(0, 4096):
-      if data_count[i] == 0:
-        if i < (min_zero + max_zero) / 2:
-          data[i] = data[min_zero - 1]
-        else:
-          data[i] = data[max_zero + 1]
+        if data_count[i] != 0:
+            data[i] = data_sum[i] / data_count[i]
+    if min_zero == 0 and max_zero == 4095:
+        for i in range(0, 4096):
+            if data_count[i] != 0:
+                while i > 0:
+                    data[i - 1] = data[i]
+                    i -= 1
+                break
 
-  pylab.plot(range(0, 4096), data)
-  pylab.figure()
-  pylab.plot(data_list_absolute, data_list_current)
-  pylab.show()
-  with open(argv[2], 'w') as out_fd:
-    out_fd.write('extern const float %s[4096];\n' % argv[3])
-    out_fd.write('const float %s[4096] = {\n' % argv[3])
-    for datapoint in data:
-      out_fd.write('    %ff,\n' % datapoint)
-    out_fd.write('};')
+        for i in reversed(range(0, 4096)):
+            if data_count[i] != 0:
+                while i < 4095:
+                    data[i + 1] = data[i]
+                    i += 1
+                break
+    else:
+        for i in range(0, 4096):
+            if data_count[i] == 0:
+                if i < (min_zero + max_zero) / 2:
+                    data[i] = data[min_zero - 1]
+                else:
+                    data[i] = data[max_zero + 1]
 
-  return 0
+    pylab.plot(range(0, 4096), data)
+    pylab.figure()
+    pylab.plot(data_list_absolute, data_list_current)
+    pylab.show()
+    with open(argv[2], 'w') as out_fd:
+        out_fd.write('extern const float %s[4096];\n' % argv[3])
+        out_fd.write('const float %s[4096] = {\n' % argv[3])
+        for datapoint in data:
+            out_fd.write('    %ff,\n' % datapoint)
+        out_fd.write('};')
+
+    return 0
+
 
 if __name__ == '__main__':
-  sys.exit(main(sys.argv))
+    sys.exit(main(sys.argv))
diff --git a/motors/plot.py b/motors/plot.py
index 3d43080..c5b02a6 100755
--- a/motors/plot.py
+++ b/motors/plot.py
@@ -3,9 +3,7 @@
 import numpy
 from matplotlib import pylab
 
-data = numpy.loadtxt('/tmp/jkalsdjflsd.csv',
-                     delimiter=',',
-                     skiprows=1)
+data = numpy.loadtxt('/tmp/jkalsdjflsd.csv', delimiter=',', skiprows=1)
 x = range(len(data))
 
 pylab.subplot(1, 1, 1)
diff --git a/motors/print/itm_read.py b/motors/print/itm_read.py
index d616da4..ba12b90 100755
--- a/motors/print/itm_read.py
+++ b/motors/print/itm_read.py
@@ -11,97 +11,105 @@
 import os
 import sys
 
+
 def open_file_for_bytes(path):
-  '''Returns a file-like object which reads bytes without buffering.'''
-  # Not using `open` because it's unclear from the docs how (if it's possible at
-  # all) to get something that will only do one read call and return what that
-  # gets on a fifo.
-  try:
-    return io.FileIO(path, 'r')
-  except FileNotFoundError:
-    # If it wasn't found, try (once) to create it and then open again.
+    '''Returns a file-like object which reads bytes without buffering.'''
+    # Not using `open` because it's unclear from the docs how (if it's possible at
+    # all) to get something that will only do one read call and return what that
+    # gets on a fifo.
     try:
-      os.mkfifo(path)
-    except FileExistsError:
-      pass
-    return io.FileIO(path, 'r')
+        return io.FileIO(path, 'r')
+    except FileNotFoundError:
+        # If it wasn't found, try (once) to create it and then open again.
+        try:
+            os.mkfifo(path)
+        except FileExistsError:
+            pass
+        return io.FileIO(path, 'r')
+
 
 def read_bytes(path):
-  '''Reads bytes from a file. This is appropriate both for regular files and
+    '''Reads bytes from a file. This is appropriate both for regular files and
   fifos.
   Args:
     path: A path-like object to open.
   Yields:
     Individual bytes from the file, until hitting EOF.
   '''
-  with open_file_for_bytes(path) as f:
-    while True:
-      buf = f.read(1024)
-      if not buf:
-        return
-      for byte in buf:
-        yield byte
+    with open_file_for_bytes(path) as f:
+        while True:
+            buf = f.read(1024)
+            if not buf:
+                return
+            for byte in buf:
+                yield byte
+
 
 def parse_packets(source):
-  '''Parses a stream of bytes into packets.
+    '''Parses a stream of bytes into packets.
   Args:
     source: A generator of individual bytes.
   Generates:
     Packets as bytes objects.
   '''
-  try:
-    while True:
-      header = next(source)
-      if header == 0:
-        # Synchronization packets consist of a bunch of 0 bits (not necessarily
-        # a whole number of bytes), followed by a 128 byte. This is for hardware
-        # to synchronize on, but we're not in a position to do that, so
-        # presumably those should get filtered out before getting here?
-        raise 'Not sure how to handle synchronization packets'
-      packet = bytearray()
-      packet.append(header)
-      header_size = header & 3
-      if header_size == 0:
-        while packet[-1] & 128 and len(packet) < 7:
-          packet.append(next(source))
-      else:
-        if header_size == 3:
-          header_size = 4
-        for _ in range(header_size):
-          packet.append(next(source))
-      yield bytes(packet)
-  except StopIteration:
-    return
+    try:
+        while True:
+            header = next(source)
+            if header == 0:
+                # Synchronization packets consist of a bunch of 0 bits (not necessarily
+                # a whole number of bytes), followed by a 128 byte. This is for hardware
+                # to synchronize on, but we're not in a position to do that, so
+                # presumably those should get filtered out before getting here?
+                raise 'Not sure how to handle synchronization packets'
+            packet = bytearray()
+            packet.append(header)
+            header_size = header & 3
+            if header_size == 0:
+                while packet[-1] & 128 and len(packet) < 7:
+                    packet.append(next(source))
+            else:
+                if header_size == 3:
+                    header_size = 4
+                for _ in range(header_size):
+                    packet.append(next(source))
+            yield bytes(packet)
+    except StopIteration:
+        return
+
 
 class PacketParser(object):
-  def __init__(self):
-    self.stimulus_handlers = {}
 
-  def register_stimulus_handler(self, port_number, handler):
-    '''Registers a function to call on packets to the specified port.'''
-    self.stimulus_handlers[port_number] = handler
+    def __init__(self):
+        self.stimulus_handlers = {}
 
-  def process(self, path):
-    for packet in parse_packets(read_bytes(path)):
-      header = packet[0]
-      header_size = header & 3
-      if header_size == 0:
-        # TODO(Brian): At least handle overflow packets here.
-        pass
-      else:
-        port_number = header >> 3
-        if port_number in self.stimulus_handlers:
-          self.stimulus_handlers[port_number](packet[1:])
-        else:
-          print('Warning: unhandled stimulus port %d' % port_number,
-                file=sys.stderr)
-          self.stimulus_handlers[port_number] = lambda _: None
+    def register_stimulus_handler(self, port_number, handler):
+        '''Registers a function to call on packets to the specified port.'''
+        self.stimulus_handlers[port_number] = handler
+
+    def process(self, path):
+        for packet in parse_packets(read_bytes(path)):
+            header = packet[0]
+            header_size = header & 3
+            if header_size == 0:
+                # TODO(Brian): At least handle overflow packets here.
+                pass
+            else:
+                port_number = header >> 3
+                if port_number in self.stimulus_handlers:
+                    self.stimulus_handlers[port_number](packet[1:])
+                else:
+                    print('Warning: unhandled stimulus port %d' % port_number,
+                          file=sys.stderr)
+                    self.stimulus_handlers[port_number] = lambda _: None
+
 
 if __name__ == '__main__':
-  parser = PacketParser()
-  def print_byte(payload):
-    sys.stdout.write(payload.decode('ascii'))
-  parser.register_stimulus_handler(0, print_byte)
+    parser = PacketParser()
 
-  for path in sys.argv[1:]:
-    parser.process(path)
+    def print_byte(payload):
+        sys.stdout.write(payload.decode('ascii'))
+
+    parser.register_stimulus_handler(0, print_byte)
+
+    for path in sys.argv[1:]:
+        parser.process(path)
diff --git a/motors/python/big_phase_current.py b/motors/python/big_phase_current.py
index 8cbce3f..d31fc72 100755
--- a/motors/python/big_phase_current.py
+++ b/motors/python/big_phase_current.py
@@ -57,51 +57,62 @@
 #switching_pattern = 'centered front shifted'
 #switching_pattern = 'anticentered'
 
-Vconv = numpy.matrix([[2.0, -1.0, -1.0],
-                      [-1.0, 2.0, -1.0],
-                      [-1.0, -1.0, 2.0]]) / 3.0
+Vconv = numpy.matrix([[2.0, -1.0, -1.0], [-1.0, 2.0, -1.0], [-1.0, -1.0, 2.0]
+                      ]) / 3.0
+
 
 def f_single(theta):
-  return K1 * numpy.sin(theta) + K2 * numpy.sin(theta * 5)
+    return K1 * numpy.sin(theta) + K2 * numpy.sin(theta * 5)
+
 
 def g_single(theta):
-  return K1 * numpy.sin(theta) - K2 * numpy.sin(theta * 5)
+    return K1 * numpy.sin(theta) - K2 * numpy.sin(theta * 5)
+
 
 def gdot_single(theta):
-  """Derivitive of the current.
+    """Derivitive of the current.
 
   Must be multiplied by omega externally.
   """
-  return K1 * numpy.cos(theta) - 5.0 * K2 * numpy.cos(theta * 5.0)
+    return K1 * numpy.cos(theta) - 5.0 * K2 * numpy.cos(theta * 5.0)
 
-f = numpy.vectorize(f_single, otypes=(numpy.float,))
-g = numpy.vectorize(g_single, otypes=(numpy.float,))
-gdot = numpy.vectorize(gdot_single, otypes=(numpy.float,))
+
+f = numpy.vectorize(f_single, otypes=(numpy.float, ))
+g = numpy.vectorize(g_single, otypes=(numpy.float, ))
+gdot = numpy.vectorize(gdot_single, otypes=(numpy.float, ))
+
 
 def torque(theta):
-  return f(theta) * g(theta)
+    return f(theta) * g(theta)
+
 
 def phase_a(function, theta):
-  return function(theta)
+    return function(theta)
+
 
 def phase_b(function, theta):
-  return function(theta + 2 * numpy.pi / 3)
+    return function(theta + 2 * numpy.pi / 3)
+
 
 def phase_c(function, theta):
-  return function(theta + 4 * numpy.pi / 3)
+    return function(theta + 4 * numpy.pi / 3)
+
 
 def phases(function, theta):
-  return numpy.matrix([[phase_a(function, theta)],
-                       [phase_b(function, theta)],
-                       [phase_c(function, theta)]])
+    return numpy.matrix([[phase_a(function,
+                                  theta)], [phase_b(function, theta)],
+                         [phase_c(function, theta)]])
+
 
 def all_phases(function, theta_range):
-  return (phase_a(function, theta_range) +
-          phase_b(function, theta_range) +
-          phase_c(function, theta_range))
+    return (phase_a(function, theta_range) + phase_b(function, theta_range) +
+            phase_c(function, theta_range))
+
 
 theta_range = numpy.linspace(start=0, stop=4 * numpy.pi, num=10000)
-one_amp_driving_voltage = R * g(theta_range) + (L * gdot(theta_range) + M * gdot(theta_range + 2.0 / 3.0 * numpy.pi) + M * gdot(theta_range - 2.0 / 3.0 * numpy.pi)) * Kv * vcc / 2.0
+one_amp_driving_voltage = R * g(theta_range) + (
+    L * gdot(theta_range) + M * gdot(theta_range + 2.0 / 3.0 * numpy.pi) +
+    M * gdot(theta_range - 2.0 / 3.0 * numpy.pi)) * Kv * vcc / 2.0
 
 max_one_amp_driving_voltage = max(one_amp_driving_voltage)
 
@@ -111,7 +122,8 @@
 
 print('Max BEMF', max(f(theta_range)))
 print('Max current', max(g(theta_range)))
-print('Max drive voltage (one_amp_driving_voltage)', max(one_amp_driving_voltage))
+print('Max drive voltage (one_amp_driving_voltage)',
+      max(one_amp_driving_voltage))
 print('one_amp_scalar', one_amp_scalar)
 
 pylab.figure()
@@ -119,12 +131,14 @@
 pylab.plot(theta_range, f(theta_range), label='bemf')
 pylab.plot(theta_range, g(theta_range), label='phase_current')
 pylab.plot(theta_range, torque(theta_range), label='phase_torque')
-pylab.plot(theta_range, all_phases(torque, theta_range), label='sum_torque/current')
+pylab.plot(theta_range,
+           all_phases(torque, theta_range),
+           label='sum_torque/current')
 pylab.legend()
 
 
 def full_sample_times(Ton, Toff, dt, n, start_time):
-  """Returns n + 4 samples for the provided switching times.
+    """Returns n + 4 samples for the provided switching times.
 
   We need the timesteps and Us to integrate.
 
@@ -139,235 +153,262 @@
     array of [t, U matrix]
   """
 
-  assert((Toff <= 1.0).all())
-  assert((Ton <= 1.0).all())
-  assert((Toff >= 0.0).all())
-  assert((Ton >= 0.0).all())
+    assert ((Toff <= 1.0).all())
+    assert ((Ton <= 1.0).all())
+    assert ((Toff >= 0.0).all())
+    assert ((Ton >= 0.0).all())
 
-  if (Ton <= Toff).all():
-    on_before_off = True
-  else:
-    # Verify that they are all ordered correctly.
-    assert(not (Ton <= Toff).any())
-    on_before_off = False
-
-  Toff = Toff.copy() * dt
-  Toff[Toff < 100e-9] = -1.0
-  Toff[Toff > dt] = dt
-
-  Ton = Ton.copy() * dt
-  Ton[Ton < 100e-9] = -1.0
-  Ton[Ton > dt - 100e-9] = dt + 1.0
-
-  result = []
-  t = 0
-
-  result_times = numpy.concatenate(
-      (numpy.linspace(0, dt, num=n),
-       numpy.reshape(numpy.asarray(Ton[numpy.logical_and(Ton < dt, Ton > 0.0)]), (-1,)),
-       numpy.reshape(numpy.asarray(Toff[numpy.logical_and(Toff < dt, Toff > 0.0)]), (-1,))
-       ))
-  result_times.sort()
-  assert((result_times >= 0).all())
-  assert((result_times <= dt).all())
-
-  for t in result_times:
-    if on_before_off:
-      U = numpy.matrix([[vcc], [vcc], [vcc]])
-      U[t <= Ton] = 0.0
-      U[Toff < t] = 0.0
+    if (Ton <= Toff).all():
+        on_before_off = True
     else:
-      U = numpy.matrix([[0.0], [0.0], [0.0]])
-      U[t > Ton] = vcc
-      U[t <= Toff] = vcc
-    result.append((float(t + start_time), U.copy()))
+        # Verify that they are all ordered correctly.
+        assert (not (Ton <= Toff).any())
+        on_before_off = False
 
-  return result
+    Toff = Toff.copy() * dt
+    Toff[Toff < 100e-9] = -1.0
+    Toff[Toff > dt] = dt
+
+    Ton = Ton.copy() * dt
+    Ton[Ton < 100e-9] = -1.0
+    Ton[Ton > dt - 100e-9] = dt + 1.0
+
+    result = []
+    t = 0
+
+    result_times = numpy.concatenate(
+        (numpy.linspace(0, dt, num=n),
+         numpy.reshape(
+             numpy.asarray(Ton[numpy.logical_and(Ton < dt, Ton > 0.0)]),
+             (-1, )),
+         numpy.reshape(
+             numpy.asarray(Toff[numpy.logical_and(Toff < dt, Toff > 0.0)]),
+             (-1, ))))
+    result_times.sort()
+    assert ((result_times >= 0).all())
+    assert ((result_times <= dt).all())
+
+    for t in result_times:
+        if on_before_off:
+            U = numpy.matrix([[vcc], [vcc], [vcc]])
+            U[t <= Ton] = 0.0
+            U[Toff < t] = 0.0
+        else:
+            U = numpy.matrix([[0.0], [0.0], [0.0]])
+            U[t > Ton] = vcc
+            U[t <= Toff] = vcc
+        result.append((float(t + start_time), U.copy()))
+
+    return result
+
 
 def sample_times(T, dt, n, start_time):
-  if switching_pattern == 'rear':
-    T = 1.0 - T
-    ans = full_sample_times(T, numpy.matrix(numpy.ones((3, 1))) * 1.0, dt, n, start_time)
-  elif switching_pattern == 'centered front shifted':
-    # Centered, but shifted to the beginning of the cycle.
-    Ton = 0.5 - T / 2.0
-    Toff = 0.5 + T / 2.0
+    if switching_pattern == 'rear':
+        T = 1.0 - T
+        ans = full_sample_times(T,
+                                numpy.matrix(numpy.ones((3, 1))) * 1.0, dt, n,
+                                start_time)
+    elif switching_pattern == 'centered front shifted':
+        # Centered, but shifted to the beginning of the cycle.
+        Ton = 0.5 - T / 2.0
+        Toff = 0.5 + T / 2.0
 
-    tn = min(Ton)[0, 0]
-    Ton -= tn
-    Toff -= tn
+        tn = min(Ton)[0, 0]
+        Ton -= tn
+        Toff -= tn
 
-    ans = full_sample_times(Ton, Toff, dt, n, start_time)
-  elif switching_pattern == 'centered':
-    # Centered, looks waaay better.
-    Ton = 0.5 - T / 2.0
-    Toff = 0.5 + T / 2.0
+        ans = full_sample_times(Ton, Toff, dt, n, start_time)
+    elif switching_pattern == 'centered':
+        # Centered, looks waaay better.
+        Ton = 0.5 - T / 2.0
+        Toff = 0.5 + T / 2.0
 
-    ans = full_sample_times(Ton, Toff, dt, n, start_time)
-  elif switching_pattern == 'anticentered':
-    # Centered, looks waaay better.
-    Toff = T / 2.0
-    Ton = 1.0 - T / 2.0
+        ans = full_sample_times(Ton, Toff, dt, n, start_time)
+    elif switching_pattern == 'anticentered':
+        # Centered, looks waaay better.
+        Toff = T / 2.0
+        Ton = 1.0 - T / 2.0
 
-    ans = full_sample_times(Ton, Toff, dt, n, start_time)
-  elif switching_pattern == 'front':
-    ans = full_sample_times(numpy.matrix(numpy.zeros((3, 1))), T, dt, n, start_time)
-  else:
-    assert(False)
+        ans = full_sample_times(Ton, Toff, dt, n, start_time)
+    elif switching_pattern == 'front':
+        ans = full_sample_times(numpy.matrix(numpy.zeros((3, 1))), T, dt, n,
+                                start_time)
+    else:
+        assert (False)
 
-  return ans
+    return ans
+
 
 class DataLogger(object):
-  def __init__(self, title=None):
-    self.title = title
-    self.ia = []
-    self.ib = []
-    self.ic = []
-    self.ia_goal = []
-    self.ib_goal = []
-    self.ic_goal = []
-    self.ia_controls = []
-    self.ib_controls = []
-    self.ic_controls = []
-    self.isensea = []
-    self.isenseb = []
-    self.isensec = []
 
-    self.va = []
-    self.vb = []
-    self.vc = []
-    self.van = []
-    self.vbn = []
-    self.vcn = []
+    def __init__(self, title=None):
+        self.title = title
+        self.ia = []
+        self.ib = []
+        self.ic = []
+        self.ia_goal = []
+        self.ib_goal = []
+        self.ic_goal = []
+        self.ia_controls = []
+        self.ib_controls = []
+        self.ic_controls = []
+        self.isensea = []
+        self.isenseb = []
+        self.isensec = []
 
-    self.ea = []
-    self.eb = []
-    self.ec = []
+        self.va = []
+        self.vb = []
+        self.vc = []
+        self.van = []
+        self.vbn = []
+        self.vcn = []
 
-    self.theta = []
-    self.omega = []
+        self.ea = []
+        self.eb = []
+        self.ec = []
 
-    self.i_goal = []
+        self.theta = []
+        self.omega = []
 
-    self.time = []
-    self.controls_time = []
-    self.predicted_time = []
+        self.i_goal = []
 
-    self.ia_pred = []
-    self.ib_pred = []
-    self.ic_pred = []
+        self.time = []
+        self.controls_time = []
+        self.predicted_time = []
 
-    self.voltage_time = []
-    self.estimated_velocity = []
-    self.U_last = numpy.matrix(numpy.zeros((3, 1)))
+        self.ia_pred = []
+        self.ib_pred = []
+        self.ic_pred = []
 
-  def log_predicted(self, current_time, p):
-    self.predicted_time.append(current_time)
-    self.ia_pred.append(p[0, 0])
-    self.ib_pred.append(p[1, 0])
-    self.ic_pred.append(p[2, 0])
+        self.voltage_time = []
+        self.estimated_velocity = []
+        self.U_last = numpy.matrix(numpy.zeros((3, 1)))
 
-  def log_controls(self, current_time, measured_current, In, E, estimated_velocity):
-    self.controls_time.append(current_time)
-    self.ia_controls.append(measured_current[0, 0])
-    self.ib_controls.append(measured_current[1, 0])
-    self.ic_controls.append(measured_current[2, 0])
+    def log_predicted(self, current_time, p):
+        self.predicted_time.append(current_time)
+        self.ia_pred.append(p[0, 0])
+        self.ib_pred.append(p[1, 0])
+        self.ic_pred.append(p[2, 0])
 
-    self.ea.append(E[0, 0])
-    self.eb.append(E[1, 0])
-    self.ec.append(E[2, 0])
+    def log_controls(self, current_time, measured_current, In, E,
+                     estimated_velocity):
+        self.controls_time.append(current_time)
+        self.ia_controls.append(measured_current[0, 0])
+        self.ib_controls.append(measured_current[1, 0])
+        self.ic_controls.append(measured_current[2, 0])
 
-    self.ia_goal.append(In[0, 0])
-    self.ib_goal.append(In[1, 0])
-    self.ic_goal.append(In[2, 0])
-    self.estimated_velocity.append(estimated_velocity)
+        self.ea.append(E[0, 0])
+        self.eb.append(E[1, 0])
+        self.ec.append(E[2, 0])
 
-  def log_data(self, X, U, current_time, Vn, i_goal):
-    self.ia.append(X[0, 0])
-    self.ib.append(X[1, 0])
-    self.ic.append(X[2, 0])
+        self.ia_goal.append(In[0, 0])
+        self.ib_goal.append(In[1, 0])
+        self.ic_goal.append(In[2, 0])
+        self.estimated_velocity.append(estimated_velocity)
 
-    self.i_goal.append(i_goal)
+    def log_data(self, X, U, current_time, Vn, i_goal):
+        self.ia.append(X[0, 0])
+        self.ib.append(X[1, 0])
+        self.ic.append(X[2, 0])
 
-    self.isensea.append(X[5, 0])
-    self.isenseb.append(X[6, 0])
-    self.isensec.append(X[7, 0])
+        self.i_goal.append(i_goal)
 
-    self.theta.append(X[3, 0])
-    self.omega.append(X[4, 0])
+        self.isensea.append(X[5, 0])
+        self.isenseb.append(X[6, 0])
+        self.isensec.append(X[7, 0])
 
-    self.time.append(current_time)
+        self.theta.append(X[3, 0])
+        self.omega.append(X[4, 0])
 
-    self.van.append(Vn[0, 0])
-    self.vbn.append(Vn[1, 0])
-    self.vcn.append(Vn[2, 0])
+        self.time.append(current_time)
 
-    if (self.U_last != U).any():
-      self.va.append(self.U_last[0, 0])
-      self.vb.append(self.U_last[1, 0])
-      self.vc.append(self.U_last[2, 0])
-      self.voltage_time.append(current_time)
+        self.van.append(Vn[0, 0])
+        self.vbn.append(Vn[1, 0])
+        self.vcn.append(Vn[2, 0])
 
-      self.va.append(U[0, 0])
-      self.vb.append(U[1, 0])
-      self.vc.append(U[2, 0])
-      self.voltage_time.append(current_time)
-      self.U_last = U.copy()
+        if (self.U_last != U).any():
+            self.va.append(self.U_last[0, 0])
+            self.vb.append(self.U_last[1, 0])
+            self.vc.append(self.U_last[2, 0])
+            self.voltage_time.append(current_time)
 
-  def plot(self):
-    fig = pylab.figure()
-    pylab.subplot(3, 1, 1)
-    pylab.plot(self.controls_time, self.ia_controls, 'ro', label='ia_controls')
-    pylab.plot(self.controls_time, self.ib_controls, 'go', label='ib_controls')
-    pylab.plot(self.controls_time, self.ic_controls, 'bo', label='ic_controls')
-    pylab.plot(self.controls_time, self.ia_goal, 'r--', label='ia_goal')
-    pylab.plot(self.controls_time, self.ib_goal, 'g--', label='ib_goal')
-    pylab.plot(self.controls_time, self.ic_goal, 'b--', label='ic_goal')
+            self.va.append(U[0, 0])
+            self.vb.append(U[1, 0])
+            self.vc.append(U[2, 0])
+            self.voltage_time.append(current_time)
+            self.U_last = U.copy()
 
-    #pylab.plot(self.controls_time, self.ia_pred, 'r*', label='ia_pred')
-    #pylab.plot(self.controls_time, self.ib_pred, 'g*', label='ib_pred')
-    #pylab.plot(self.controls_time, self.ic_pred, 'b*', label='ic_pred')
-    pylab.plot(self.time, self.isensea, 'r:', label='ia_sense')
-    pylab.plot(self.time, self.isenseb, 'g:', label='ib_sense')
-    pylab.plot(self.time, self.isensec, 'b:', label='ic_sense')
-    pylab.plot(self.time, self.ia, 'r', label='ia')
-    pylab.plot(self.time, self.ib, 'g', label='ib')
-    pylab.plot(self.time, self.ic, 'b', label='ic')
-    pylab.plot(self.time, self.i_goal, label='i_goal')
-    if self.title is not None:
-      fig.canvas.set_window_title(self.title)
-    pylab.legend()
+    def plot(self):
+        fig = pylab.figure()
+        pylab.subplot(3, 1, 1)
+        pylab.plot(self.controls_time,
+                   self.ia_controls,
+                   'ro',
+                   label='ia_controls')
+        pylab.plot(self.controls_time,
+                   self.ib_controls,
+                   'go',
+                   label='ib_controls')
+        pylab.plot(self.controls_time,
+                   self.ic_controls,
+                   'bo',
+                   label='ic_controls')
+        pylab.plot(self.controls_time, self.ia_goal, 'r--', label='ia_goal')
+        pylab.plot(self.controls_time, self.ib_goal, 'g--', label='ib_goal')
+        pylab.plot(self.controls_time, self.ic_goal, 'b--', label='ic_goal')
 
-    pylab.subplot(3, 1, 2)
-    pylab.plot(self.voltage_time, self.va, label='va')
-    pylab.plot(self.voltage_time, self.vb, label='vb')
-    pylab.plot(self.voltage_time, self.vc, label='vc')
-    pylab.plot(self.time, self.van, label='van')
-    pylab.plot(self.time, self.vbn, label='vbn')
-    pylab.plot(self.time, self.vcn, label='vcn')
-    pylab.plot(self.controls_time, self.ea, label='ea')
-    pylab.plot(self.controls_time, self.eb, label='eb')
-    pylab.plot(self.controls_time, self.ec, label='ec')
-    pylab.legend()
+        #pylab.plot(self.controls_time, self.ia_pred, 'r*', label='ia_pred')
+        #pylab.plot(self.controls_time, self.ib_pred, 'g*', label='ib_pred')
+        #pylab.plot(self.controls_time, self.ic_pred, 'b*', label='ic_pred')
+        pylab.plot(self.time, self.isensea, 'r:', label='ia_sense')
+        pylab.plot(self.time, self.isenseb, 'g:', label='ib_sense')
+        pylab.plot(self.time, self.isensec, 'b:', label='ic_sense')
+        pylab.plot(self.time, self.ia, 'r', label='ia')
+        pylab.plot(self.time, self.ib, 'g', label='ib')
+        pylab.plot(self.time, self.ic, 'b', label='ic')
+        pylab.plot(self.time, self.i_goal, label='i_goal')
+        if self.title is not None:
+            fig.canvas.set_window_title(self.title)
+        pylab.legend()
 
-    pylab.subplot(3, 1, 3)
-    pylab.plot(self.time, self.theta, label='theta')
-    pylab.plot(self.time, self.omega, label='omega')
-    pylab.plot(self.controls_time, self.estimated_velocity, label='estimated omega')
+        pylab.subplot(3, 1, 2)
+        pylab.plot(self.voltage_time, self.va, label='va')
+        pylab.plot(self.voltage_time, self.vb, label='vb')
+        pylab.plot(self.voltage_time, self.vc, label='vc')
+        pylab.plot(self.time, self.van, label='van')
+        pylab.plot(self.time, self.vbn, label='vbn')
+        pylab.plot(self.time, self.vcn, label='vcn')
+        pylab.plot(self.controls_time, self.ea, label='ea')
+        pylab.plot(self.controls_time, self.eb, label='eb')
+        pylab.plot(self.controls_time, self.ec, label='ec')
+        pylab.legend()
 
-    pylab.legend()
+        pylab.subplot(3, 1, 3)
+        pylab.plot(self.time, self.theta, label='theta')
+        pylab.plot(self.time, self.omega, label='omega')
+        pylab.plot(self.controls_time,
+                   self.estimated_velocity,
+                   label='estimated omega')
 
-    fig = pylab.figure()
-    pylab.plot(self.controls_time,
-               map(operator.sub, self.ia_goal, self.ia_controls), 'r', label='ia_error')
-    pylab.plot(self.controls_time,
-               map(operator.sub, self.ib_goal, self.ib_controls), 'g', label='ib_error')
-    pylab.plot(self.controls_time,
-               map(operator.sub, self.ic_goal, self.ic_controls), 'b', label='ic_error')
-    if self.title is not None:
-      fig.canvas.set_window_title(self.title)
-    pylab.legend()
-    pylab.show()
+        pylab.legend()
+
+        fig = pylab.figure()
+        pylab.plot(self.controls_time,
+                   map(operator.sub, self.ia_goal, self.ia_controls),
+                   'r',
+                   label='ia_error')
+        pylab.plot(self.controls_time,
+                   map(operator.sub, self.ib_goal, self.ib_controls),
+                   'g',
+                   label='ib_error')
+        pylab.plot(self.controls_time,
+                   map(operator.sub, self.ic_goal, self.ic_controls),
+                   'b',
+                   label='ic_error')
+        if self.title is not None:
+            fig.canvas.set_window_title(self.title)
+        pylab.legend()
+        pylab.show()
 
 
 # So, from running a bunch of math, we know the following:
@@ -400,180 +441,204 @@
 # inv(L_matrix) * (Vconv * V - E - R_matrix * I) = I_dot
 # B * V - inv(L_matrix) * E - A * I = I_dot
 class Simulation(object):
-  def __init__(self):
-    self.R_matrix = numpy.matrix(numpy.eye(3)) * R
-    self.L_matrix = numpy.matrix([[L, M, M], [M, L, M], [M, M, L]])
-    self.L_matrix_inv = numpy.linalg.inv(self.L_matrix)
-    self.A = self.L_matrix_inv * self.R_matrix
-    self.B = self.L_matrix_inv * Vconv
-    self.A_discrete, self.B_discrete = controls.c2d(-self.A, self.B, 1.0 / hz)
-    self.B_discrete_inverse = numpy.matrix(numpy.eye(3)) / (self.B_discrete[0, 0] - self.B_discrete[1, 0])
 
-    self.R_model = R * 1.0
-    self.L_model = L * 1.0
-    self.M_model = M * 1.0
-    self.R_matrix_model = numpy.matrix(numpy.eye(3)) * self.R_model
-    self.L_matrix_model = numpy.matrix([[self.L_model, self.M_model, self.M_model],
-                                        [self.M_model, self.L_model, self.M_model],
-                                        [self.M_model, self.M_model, self.L_model]])
-    self.L_matrix_inv_model = numpy.linalg.inv(self.L_matrix_model)
-    self.A_model = self.L_matrix_inv_model * self.R_matrix_model
-    self.B_model = self.L_matrix_inv_model * Vconv
-    self.A_discrete_model, self.B_discrete_model = \
-        controls.c2d(-self.A_model, self.B_model, 1.0 / hz)
-    self.B_discrete_inverse_model = numpy.matrix(numpy.eye(3)) / (self.B_discrete_model[0, 0] - self.B_discrete_model[1, 0])
+    def __init__(self):
+        self.R_matrix = numpy.matrix(numpy.eye(3)) * R
+        self.L_matrix = numpy.matrix([[L, M, M], [M, L, M], [M, M, L]])
+        self.L_matrix_inv = numpy.linalg.inv(self.L_matrix)
+        self.A = self.L_matrix_inv * self.R_matrix
+        self.B = self.L_matrix_inv * Vconv
+        self.A_discrete, self.B_discrete = controls.c2d(
+            -self.A, self.B, 1.0 / hz)
+        self.B_discrete_inverse = numpy.matrix(
+            numpy.eye(3)) / (self.B_discrete[0, 0] - self.B_discrete[1, 0])
 
-    print('constexpr double kL = %g;' % self.L_model)
-    print('constexpr double kM = %g;' % self.M_model)
-    print('constexpr double kR = %g;' % self.R_model)
-    print('constexpr float kAdiscrete_diagonal = %gf;' % self.A_discrete_model[0, 0])
-    print('constexpr float kAdiscrete_offdiagonal = %gf;' % self.A_discrete_model[1, 0])
-    print('constexpr float kBdiscrete_inv_diagonal = %gf;' % self.B_discrete_inverse_model[0, 0])
-    print('constexpr float kBdiscrete_inv_offdiagonal = %gf;' % self.B_discrete_inverse_model[1, 0])
-    print('constexpr double kOneAmpScalar = %g;' % one_amp_scalar)
-    print('constexpr double kMaxOneAmpDrivingVoltage = %g;' % max_one_amp_driving_voltage)
-    print('A_discrete', self.A_discrete)
-    print('B_discrete', self.B_discrete)
-    print('B_discrete_sub', numpy.linalg.inv(self.B_discrete[0:2, 0:2]))
-    print('B_discrete_inv', self.B_discrete_inverse)
+        self.R_model = R * 1.0
+        self.L_model = L * 1.0
+        self.M_model = M * 1.0
+        self.R_matrix_model = numpy.matrix(numpy.eye(3)) * self.R_model
+        self.L_matrix_model = numpy.matrix(
+            [[self.L_model, self.M_model, self.M_model],
+             [self.M_model, self.L_model, self.M_model],
+             [self.M_model, self.M_model, self.L_model]])
+        self.L_matrix_inv_model = numpy.linalg.inv(self.L_matrix_model)
+        self.A_model = self.L_matrix_inv_model * self.R_matrix_model
+        self.B_model = self.L_matrix_inv_model * Vconv
+        self.A_discrete_model, self.B_discrete_model = \
+            controls.c2d(-self.A_model, self.B_model, 1.0 / hz)
+        self.B_discrete_inverse_model = numpy.matrix(numpy.eye(3)) / (
+            self.B_discrete_model[0, 0] - self.B_discrete_model[1, 0])
 
-    # Xdot[5:, :] = (R_sense2 + R_sense1) / R_sense2 * (
-    #      (1.0 / (R_sense1 * C_sense)) * (-Isense * R_sense2 / (R_sense1 + R_sense2) * (R_sense1 / R_sense2 + 1.0) + I))
-    self.mk1 = (R_sense2 + R_sense1) / R_sense2 * (1.0 / (R_sense1 * C_sense))
-    self.mk2 = -self.mk1 * R_sense2 / (R_sense1 + R_sense2) * (R_sense1 / R_sense2 + 1.0)
+        print('constexpr double kL = %g;' % self.L_model)
+        print('constexpr double kM = %g;' % self.M_model)
+        print('constexpr double kR = %g;' % self.R_model)
+        print('constexpr float kAdiscrete_diagonal = %gf;' %
+              self.A_discrete_model[0, 0])
+        print('constexpr float kAdiscrete_offdiagonal = %gf;' %
+              self.A_discrete_model[1, 0])
+        print('constexpr float kBdiscrete_inv_diagonal = %gf;' %
+              self.B_discrete_inverse_model[0, 0])
+        print('constexpr float kBdiscrete_inv_offdiagonal = %gf;' %
+              self.B_discrete_inverse_model[1, 0])
+        print('constexpr double kOneAmpScalar = %g;' % one_amp_scalar)
+        print('constexpr double kMaxOneAmpDrivingVoltage = %g;' %
+              max_one_amp_driving_voltage)
+        print('A_discrete', self.A_discrete)
+        print('B_discrete', self.B_discrete)
+        print('B_discrete_sub', numpy.linalg.inv(self.B_discrete[0:2, 0:2]))
+        print('B_discrete_inv', self.B_discrete_inverse)
 
-    # ia, ib, ic, theta, omega, isensea, isenseb, isensec
-    self.X = numpy.matrix([[0.0], [0.0], [0.0], [0.0], [0.0], [0.0], [0.0], [0.0]])
+        # Xdot[5:, :] = (R_sense2 + R_sense1) / R_sense2 * (
+        #      (1.0 / (R_sense1 * C_sense)) * (-Isense * R_sense2 / (R_sense1 + R_sense2) * (R_sense1 / R_sense2 + 1.0) + I))
+        self.mk1 = (R_sense2 + R_sense1) / R_sense2 * (1.0 /
+                                                       (R_sense1 * C_sense))
+        self.mk2 = -self.mk1 * R_sense2 / (R_sense1 + R_sense2) * (
+            R_sense1 / R_sense2 + 1.0)
 
-    self.K = 0.05 * Vconv
-    print('A %s' % repr(self.A))
-    print('B %s' % repr(self.B))
-    print('K %s' % repr(self.K))
+        # ia, ib, ic, theta, omega, isensea, isenseb, isensec
+        self.X = numpy.matrix([[0.0], [0.0], [0.0], [0.0], [0.0], [0.0], [0.0],
+                               [0.0]])
 
-    print('System poles are %s' % repr(numpy.linalg.eig(self.A)[0]))
-    print('Poles are %s' % repr(numpy.linalg.eig(self.A - self.B * self.K)[0]))
+        self.K = 0.05 * Vconv
+        print('A %s' % repr(self.A))
+        print('B %s' % repr(self.B))
+        print('K %s' % repr(self.K))
 
-    controllability = controls.ctrb(self.A, self.B)
-    print('Rank of augmented controlability matrix. %d' % numpy.linalg.matrix_rank(
-          controllability))
+        print('System poles are %s' % repr(numpy.linalg.eig(self.A)[0]))
+        print('Poles are %s' %
+              repr(numpy.linalg.eig(self.A - self.B * self.K)[0]))
 
-    self.data_logger = DataLogger(switching_pattern)
-    self.current_time = 0.0
+        controllability = controls.ctrb(self.A, self.B)
+        print('Rank of augmented controlability matrix. %d' %
+              numpy.linalg.matrix_rank(controllability))
 
-    self.estimated_velocity = self.X[4, 0]
+        self.data_logger = DataLogger(switching_pattern)
+        self.current_time = 0.0
 
-  def motor_diffeq(self, x, t, U):
-    I = numpy.matrix(x[0:3]).T
-    theta = x[3]
-    omega = x[4]
-    Isense = numpy.matrix(x[5:]).T
+        self.estimated_velocity = self.X[4, 0]
 
-    dflux = phases(f_single, theta) / Kv
+    def motor_diffeq(self, x, t, U):
+        I = numpy.matrix(x[0:3]).T
+        theta = x[3]
+        omega = x[4]
+        Isense = numpy.matrix(x[5:]).T
 
-    Xdot = numpy.matrix(numpy.zeros((8, 1)))
-    di_dt = -self.A_model * I + self.B_model * U - self.L_matrix_inv_model * dflux * omega
-    torque = I.T * dflux
-    Xdot[0:3, :] = di_dt
-    Xdot[3, :] = omega
-    Xdot[4, :] = torque / J
+        dflux = phases(f_single, theta) / Kv
 
-    Xdot[5:, :] = self.mk1 * I + self.mk2 * Isense
-    return numpy.squeeze(numpy.asarray(Xdot))
+        Xdot = numpy.matrix(numpy.zeros((8, 1)))
+        di_dt = -self.A_model * I + self.B_model * U - self.L_matrix_inv_model * dflux * omega
+        torque = I.T * dflux
+        Xdot[0:3, :] = di_dt
+        Xdot[3, :] = omega
+        Xdot[4, :] = torque / J
 
-  def DoControls(self, goal_current):
-    theta = self.X[3, 0]
-    # Use the actual angular velocity.
-    omega = self.X[4, 0]
+        Xdot[5:, :] = self.mk1 * I + self.mk2 * Isense
+        return numpy.squeeze(numpy.asarray(Xdot))
 
-    measured_current = self.X[5:, :].copy()
+    def DoControls(self, goal_current):
+        theta = self.X[3, 0]
+        # Use the actual angular velocity.
+        omega = self.X[4, 0]
 
-    # Ok, lets now fake it.
-    E_imag1 = numpy.exp(1j * theta) * K1 * numpy.matrix(
-            [[-1j],
-             [-1j * numpy.exp(1j * numpy.pi * 2.0 / 3.0)],
+        measured_current = self.X[5:, :].copy()
+
+        # Ok, lets now fake it.
+        E_imag1 = numpy.exp(1j * theta) * K1 * numpy.matrix(
+            [[-1j], [-1j * numpy.exp(1j * numpy.pi * 2.0 / 3.0)],
              [-1j * numpy.exp(-1j * numpy.pi * 2.0 / 3.0)]])
-    E_imag2 =  numpy.exp(1j * 5.0 * theta) * K2 * numpy.matrix(
-            [[-1j],
-             [-1j * numpy.exp(-1j * numpy.pi * 2.0 / 3.0)],
+        E_imag2 = numpy.exp(1j * 5.0 * theta) * K2 * numpy.matrix(
+            [[-1j], [-1j * numpy.exp(-1j * numpy.pi * 2.0 / 3.0)],
              [-1j * numpy.exp(1j * numpy.pi * 2.0 / 3.0)]])
 
-    overall_measured_current = ((E_imag1 + E_imag2).real.T * measured_current / one_amp_scalar)[0, 0]
+        overall_measured_current = ((E_imag1 + E_imag2).real.T *
+                                    measured_current / one_amp_scalar)[0, 0]
 
-    current_error = goal_current - overall_measured_current
-    #print(current_error)
-    self.estimated_velocity += current_error * 1.0
-    omega = self.estimated_velocity
+        current_error = goal_current - overall_measured_current
+        #print(current_error)
+        self.estimated_velocity += current_error * 1.0
+        omega = self.estimated_velocity
 
-    # Now, apply the transfer function of the inductor.
-    # Use that to difference the current across the cycle.
-    Icurrent = self.Ilast
-    # No history:
-    #Icurrent = phases(g_single, theta) * goal_current
-    Inext = phases(g_single, theta + omega * 1.0 / hz) * goal_current
+        # Now, apply the transfer function of the inductor.
+        # Use that to difference the current across the cycle.
+        Icurrent = self.Ilast
+        # No history:
+        #Icurrent = phases(g_single, theta) * goal_current
+        Inext = phases(g_single, theta + omega * 1.0 / hz) * goal_current
 
-    deltaI = Inext - Icurrent
+        deltaI = Inext - Icurrent
 
-    H1 = -numpy.linalg.inv(1j * omega * self.L_matrix + self.R_matrix) * omega / Kv
-    H2 = -numpy.linalg.inv(1j * omega * 5.0 * self.L_matrix + self.R_matrix) * omega / Kv
-    p_imag = H1 * E_imag1 + H2 * E_imag2
-    p_next_imag = numpy.exp(1j * omega * 1.0 / hz) * H1 * E_imag1 + \
-        numpy.exp(1j * omega * 5.0 * 1.0 / hz) * H2 * E_imag2
-    p = p_imag.real
+        H1 = -numpy.linalg.inv(1j * omega * self.L_matrix +
+                               self.R_matrix) * omega / Kv
+        H2 = -numpy.linalg.inv(1j * omega * 5.0 * self.L_matrix +
+                               self.R_matrix) * omega / Kv
+        p_imag = H1 * E_imag1 + H2 * E_imag2
+        p_next_imag = numpy.exp(1j * omega * 1.0 / hz) * H1 * E_imag1 + \
+            numpy.exp(1j * omega * 5.0 * 1.0 / hz) * H2 * E_imag2
+        p = p_imag.real
 
-    # So, we now know how much the change in current is due to changes in BEMF.
-    # Subtract that, and then run the stock statespace equation.
-    Vn_ff = self.B_discrete_inverse * (Inext - self.A_discrete * (Icurrent - p) - p_next_imag.real)
-    print('Vn_ff', Vn_ff)
-    print('Inext', Inext)
-    Vn = Vn_ff + self.K * (Icurrent - measured_current)
+        # So, we now know how much the change in current is due to changes in BEMF.
+        # Subtract that, and then run the stock statespace equation.
+        Vn_ff = self.B_discrete_inverse * (Inext - self.A_discrete *
+                                           (Icurrent - p) - p_next_imag.real)
+        print('Vn_ff', Vn_ff)
+        print('Inext', Inext)
+        Vn = Vn_ff + self.K * (Icurrent - measured_current)
 
-    E = phases(f_single, self.X[3, 0]) / Kv * self.X[4, 0]
-    self.data_logger.log_controls(self.current_time, measured_current, Icurrent, E, self.estimated_velocity)
+        E = phases(f_single, self.X[3, 0]) / Kv * self.X[4, 0]
+        self.data_logger.log_controls(self.current_time, measured_current,
+                                      Icurrent, E, self.estimated_velocity)
 
-    self.Ilast = Inext
+        self.Ilast = Inext
 
-    return Vn
+        return Vn
 
-  def Simulate(self):
-    start_wall_time = time.time()
-    self.Ilast = numpy.matrix(numpy.zeros((3, 1)))
-    for n in range(200):
-      goal_current = 10.0
-      max_current = (vcc - (self.X[4, 0] / Kv * 2.0)) / max_one_amp_driving_voltage
-      min_current = (-vcc - (self.X[4, 0] / Kv * 2.0)) / max_one_amp_driving_voltage
-      goal_current = max(min_current, min(max_current, goal_current))
+    def Simulate(self):
+        start_wall_time = time.time()
+        self.Ilast = numpy.matrix(numpy.zeros((3, 1)))
+        for n in range(200):
+            goal_current = 10.0
+            max_current = (
+                vcc - (self.X[4, 0] / Kv * 2.0)) / max_one_amp_driving_voltage
+            min_current = (
+                -vcc - (self.X[4, 0] / Kv * 2.0)) / max_one_amp_driving_voltage
+            goal_current = max(min_current, min(max_current, goal_current))
 
-      Vn = self.DoControls(goal_current)
+            Vn = self.DoControls(goal_current)
 
-      #Vn = numpy.matrix([[0.20], [0.0], [0.0]])
-      #Vn = numpy.matrix([[0.00], [0.20], [0.0]])
-      #Vn = numpy.matrix([[0.00], [0.0], [0.20]])
+            #Vn = numpy.matrix([[0.20], [0.0], [0.0]])
+            #Vn = numpy.matrix([[0.00], [0.20], [0.0]])
+            #Vn = numpy.matrix([[0.00], [0.0], [0.20]])
 
-      # T is the fractional rate.
-      T = Vn / vcc
-      tn = -numpy.min(T)
-      T += tn
-      if (T > 1.0).any():
-        T = T / numpy.max(T)
+            # T is the fractional rate.
+            T = Vn / vcc
+            tn = -numpy.min(T)
+            T += tn
+            if (T > 1.0).any():
+                T = T / numpy.max(T)
 
-      for t, U in sample_times(T = T,
-                               dt = 1.0 / hz, n = 10,
-                               start_time = self.current_time):
-        # Analog amplifier mode!
-        #U = Vn
+            for t, U in sample_times(T=T,
+                                     dt=1.0 / hz,
+                                     n=10,
+                                     start_time=self.current_time):
+                # Analog amplifier mode!
+                #U = Vn
 
-        self.data_logger.log_data(self.X, (U - min(U)), self.current_time, Vn, goal_current)
-        t_array = numpy.array([self.current_time, t])
-        self.X = numpy.matrix(scipy.integrate.odeint(
-            self.motor_diffeq,
-            numpy.squeeze(numpy.asarray(self.X)),
-            t_array, args=(U,)))[1, :].T
+                self.data_logger.log_data(self.X, (U - min(U)),
+                                          self.current_time, Vn, goal_current)
+                t_array = numpy.array([self.current_time, t])
+                self.X = numpy.matrix(
+                    scipy.integrate.odeint(self.motor_diffeq,
+                                           numpy.squeeze(numpy.asarray(
+                                               self.X)),
+                                           t_array,
+                                           args=(U, )))[1, :].T
 
-        self.current_time = t
+                self.current_time = t
 
-    print('Took %f to simulate' % (time.time() - start_wall_time))
+        print('Took %f to simulate' % (time.time() - start_wall_time))
 
-    self.data_logger.plot()
+        self.data_logger.plot()
+
 
 simulation = Simulation()
 simulation.Simulate()
diff --git a/motors/python/haptic_phase_current.py b/motors/python/haptic_phase_current.py
index b17c514..fec909d 100755
--- a/motors/python/haptic_phase_current.py
+++ b/motors/python/haptic_phase_current.py
@@ -54,51 +54,62 @@
 #switching_pattern = 'centered front shifted'
 #switching_pattern = 'anticentered'
 
-Vconv = numpy.matrix([[2.0, -1.0, -1.0],
-                      [-1.0, 2.0, -1.0],
-                      [-1.0, -1.0, 2.0]]) / 3.0
+Vconv = numpy.matrix([[2.0, -1.0, -1.0], [-1.0, 2.0, -1.0], [-1.0, -1.0, 2.0]
+                      ]) / 3.0
+
 
 def f_single(theta):
-  return K1 * numpy.sin(theta) + K2 * numpy.sin(theta * 5)
+    return K1 * numpy.sin(theta) + K2 * numpy.sin(theta * 5)
+
 
 def g_single(theta):
-  return K1 * numpy.sin(theta) - K2 * numpy.sin(theta * 5)
+    return K1 * numpy.sin(theta) - K2 * numpy.sin(theta * 5)
+
 
 def gdot_single(theta):
-  """Derivitive of the current.
+    """Derivitive of the current.
 
   Must be multiplied by omega externally.
   """
-  return K1 * numpy.cos(theta) - 5.0 * K2 * numpy.cos(theta * 5.0)
+    return K1 * numpy.cos(theta) - 5.0 * K2 * numpy.cos(theta * 5.0)
 
-f = numpy.vectorize(f_single, otypes=(numpy.float,))
-g = numpy.vectorize(g_single, otypes=(numpy.float,))
-gdot = numpy.vectorize(gdot_single, otypes=(numpy.float,))
+
+f = numpy.vectorize(f_single, otypes=(numpy.float, ))
+g = numpy.vectorize(g_single, otypes=(numpy.float, ))
+gdot = numpy.vectorize(gdot_single, otypes=(numpy.float, ))
+
 
 def torque(theta):
-  return f(theta) * g(theta)
+    return f(theta) * g(theta)
+
 
 def phase_a(function, theta):
-  return function(theta)
+    return function(theta)
+
 
 def phase_b(function, theta):
-  return function(theta + 2 * numpy.pi / 3)
+    return function(theta + 2 * numpy.pi / 3)
+
 
 def phase_c(function, theta):
-  return function(theta + 4 * numpy.pi / 3)
+    return function(theta + 4 * numpy.pi / 3)
+
 
 def phases(function, theta):
-  return numpy.matrix([[phase_a(function, theta)],
-                       [phase_b(function, theta)],
-                       [phase_c(function, theta)]])
+    return numpy.matrix([[phase_a(function,
+                                  theta)], [phase_b(function, theta)],
+                         [phase_c(function, theta)]])
+
 
 def all_phases(function, theta_range):
-  return (phase_a(function, theta_range) +
-          phase_b(function, theta_range) +
-          phase_c(function, theta_range))
+    return (phase_a(function, theta_range) + phase_b(function, theta_range) +
+            phase_c(function, theta_range))
+
 
 theta_range = numpy.linspace(start=0, stop=4 * numpy.pi, num=10000)
-one_amp_driving_voltage = R * g(theta_range) + (L * gdot(theta_range) + M * gdot(theta_range + 2.0 / 3.0 * numpy.pi) + M * gdot(theta_range - 2.0 / 3.0 * numpy.pi)) * Kv * vcc / 2.0
+one_amp_driving_voltage = R * g(theta_range) + (
+    L * gdot(theta_range) + M * gdot(theta_range + 2.0 / 3.0 * numpy.pi) +
+    M * gdot(theta_range - 2.0 / 3.0 * numpy.pi)) * Kv * vcc / 2.0
 
 max_one_amp_driving_voltage = max(one_amp_driving_voltage)
 
@@ -108,7 +119,8 @@
 
 print 'Max BEMF', max(f(theta_range))
 print 'Max current', max(g(theta_range))
-print 'Max drive voltage (one_amp_driving_voltage)', max(one_amp_driving_voltage)
+print 'Max drive voltage (one_amp_driving_voltage)', max(
+    one_amp_driving_voltage)
 print 'one_amp_scalar', one_amp_scalar
 
 pylab.figure()
@@ -116,12 +128,14 @@
 pylab.plot(theta_range, f(theta_range), label='bemf')
 pylab.plot(theta_range, g(theta_range), label='phase_current')
 pylab.plot(theta_range, torque(theta_range), label='phase_torque')
-pylab.plot(theta_range, all_phases(torque, theta_range), label='sum_torque/current')
+pylab.plot(theta_range,
+           all_phases(torque, theta_range),
+           label='sum_torque/current')
 pylab.legend()
 
 
 def full_sample_times(Ton, Toff, dt, n, start_time):
-  """Returns n + 4 samples for the provided switching times.
+    """Returns n + 4 samples for the provided switching times.
 
   We need the timesteps and Us to integrate.
 
@@ -136,235 +150,260 @@
     array of [t, U matrix]
   """
 
-  assert((Toff <= 1.0).all())
-  assert((Ton <= 1.0).all())
-  assert((Toff >= 0.0).all())
-  assert((Ton >= 0.0).all())
+    assert ((Toff <= 1.0).all())
+    assert ((Ton <= 1.0).all())
+    assert ((Toff >= 0.0).all())
+    assert ((Ton >= 0.0).all())
 
-  if (Ton <= Toff).all():
-    on_before_off = True
-  else:
-    # Verify that they are all ordered correctly.
-    assert(not (Ton <= Toff).any())
-    on_before_off = False
-
-  Toff = Toff.copy() * dt
-  Toff[Toff < 100e-9] = -1.0
-  Toff[Toff > dt] = dt
-
-  Ton = Ton.copy() * dt
-  Ton[Ton < 100e-9] = -1.0
-  Ton[Ton > dt - 100e-9] = dt + 1.0
-
-  result = []
-  t = 0
-
-  result_times = numpy.concatenate(
-      (numpy.linspace(0, dt, num=n),
-       numpy.reshape(numpy.asarray(Ton[numpy.logical_and(Ton < dt, Ton > 0.0)]), (-1,)),
-       numpy.reshape(numpy.asarray(Toff[numpy.logical_and(Toff < dt, Toff > 0.0)]), (-1,))
-       ))
-  result_times.sort()
-  assert((result_times >= 0).all())
-  assert((result_times <= dt).all())
-
-  for t in result_times:
-    if on_before_off:
-      U = numpy.matrix([[vcc], [vcc], [vcc]])
-      U[t <= Ton] = 0.0
-      U[Toff < t] = 0.0
+    if (Ton <= Toff).all():
+        on_before_off = True
     else:
-      U = numpy.matrix([[0.0], [0.0], [0.0]])
-      U[t > Ton] = vcc
-      U[t <= Toff] = vcc
-    result.append((float(t + start_time), U.copy()))
+        # Verify that they are all ordered correctly.
+        assert (not (Ton <= Toff).any())
+        on_before_off = False
 
-  return result
+    Toff = Toff.copy() * dt
+    Toff[Toff < 100e-9] = -1.0
+    Toff[Toff > dt] = dt
+
+    Ton = Ton.copy() * dt
+    Ton[Ton < 100e-9] = -1.0
+    Ton[Ton > dt - 100e-9] = dt + 1.0
+
+    result = []
+    t = 0
+
+    result_times = numpy.concatenate(
+        (numpy.linspace(0, dt, num=n),
+         numpy.reshape(
+             numpy.asarray(Ton[numpy.logical_and(Ton < dt, Ton > 0.0)]),
+             (-1, )),
+         numpy.reshape(
+             numpy.asarray(Toff[numpy.logical_and(Toff < dt, Toff > 0.0)]),
+             (-1, ))))
+    result_times.sort()
+    assert ((result_times >= 0).all())
+    assert ((result_times <= dt).all())
+
+    for t in result_times:
+        if on_before_off:
+            U = numpy.matrix([[vcc], [vcc], [vcc]])
+            U[t <= Ton] = 0.0
+            U[Toff < t] = 0.0
+        else:
+            U = numpy.matrix([[0.0], [0.0], [0.0]])
+            U[t > Ton] = vcc
+            U[t <= Toff] = vcc
+        result.append((float(t + start_time), U.copy()))
+
+    return result
+
 
 def sample_times(T, dt, n, start_time):
-  if switching_pattern == 'rear':
-    T = 1.0 - T
-    ans = full_sample_times(T, numpy.matrix(numpy.ones((3, 1))) * 1.0, dt, n, start_time)
-  elif switching_pattern == 'centered front shifted':
-    # Centered, but shifted to the beginning of the cycle.
-    Ton = 0.5 - T / 2.0
-    Toff = 0.5 + T / 2.0
+    if switching_pattern == 'rear':
+        T = 1.0 - T
+        ans = full_sample_times(T,
+                                numpy.matrix(numpy.ones((3, 1))) * 1.0, dt, n,
+                                start_time)
+    elif switching_pattern == 'centered front shifted':
+        # Centered, but shifted to the beginning of the cycle.
+        Ton = 0.5 - T / 2.0
+        Toff = 0.5 + T / 2.0
 
-    tn = min(Ton)[0, 0]
-    Ton -= tn
-    Toff -= tn
+        tn = min(Ton)[0, 0]
+        Ton -= tn
+        Toff -= tn
 
-    ans = full_sample_times(Ton, Toff, dt, n, start_time)
-  elif switching_pattern == 'centered':
-    # Centered, looks waaay better.
-    Ton = 0.5 - T / 2.0
-    Toff = 0.5 + T / 2.0
+        ans = full_sample_times(Ton, Toff, dt, n, start_time)
+    elif switching_pattern == 'centered':
+        # Centered, looks waaay better.
+        Ton = 0.5 - T / 2.0
+        Toff = 0.5 + T / 2.0
 
-    ans = full_sample_times(Ton, Toff, dt, n, start_time)
-  elif switching_pattern == 'anticentered':
-    # Centered, looks waaay better.
-    Toff = T / 2.0
-    Ton = 1.0 - T / 2.0
+        ans = full_sample_times(Ton, Toff, dt, n, start_time)
+    elif switching_pattern == 'anticentered':
+        # Centered, looks waaay better.
+        Toff = T / 2.0
+        Ton = 1.0 - T / 2.0
 
-    ans = full_sample_times(Ton, Toff, dt, n, start_time)
-  elif switching_pattern == 'front':
-    ans = full_sample_times(numpy.matrix(numpy.zeros((3, 1))), T, dt, n, start_time)
-  else:
-    assert(False)
+        ans = full_sample_times(Ton, Toff, dt, n, start_time)
+    elif switching_pattern == 'front':
+        ans = full_sample_times(numpy.matrix(numpy.zeros((3, 1))), T, dt, n,
+                                start_time)
+    else:
+        assert (False)
 
-  return ans
+    return ans
+
 
 class DataLogger(object):
-  def __init__(self, title=None):
-    self.title = title
-    self.ia = []
-    self.ib = []
-    self.ic = []
-    self.ia_goal = []
-    self.ib_goal = []
-    self.ic_goal = []
-    self.ia_controls = []
-    self.ib_controls = []
-    self.ic_controls = []
-    self.isensea = []
-    self.isenseb = []
-    self.isensec = []
 
-    self.va = []
-    self.vb = []
-    self.vc = []
-    self.van = []
-    self.vbn = []
-    self.vcn = []
+    def __init__(self, title=None):
+        self.title = title
+        self.ia = []
+        self.ib = []
+        self.ic = []
+        self.ia_goal = []
+        self.ib_goal = []
+        self.ic_goal = []
+        self.ia_controls = []
+        self.ib_controls = []
+        self.ic_controls = []
+        self.isensea = []
+        self.isenseb = []
+        self.isensec = []
 
-    self.ea = []
-    self.eb = []
-    self.ec = []
+        self.va = []
+        self.vb = []
+        self.vc = []
+        self.van = []
+        self.vbn = []
+        self.vcn = []
 
-    self.theta = []
-    self.omega = []
+        self.ea = []
+        self.eb = []
+        self.ec = []
 
-    self.i_goal = []
+        self.theta = []
+        self.omega = []
 
-    self.time = []
-    self.controls_time = []
-    self.predicted_time = []
+        self.i_goal = []
 
-    self.ia_pred = []
-    self.ib_pred = []
-    self.ic_pred = []
+        self.time = []
+        self.controls_time = []
+        self.predicted_time = []
 
-    self.voltage_time = []
-    self.estimated_velocity = []
-    self.U_last = numpy.matrix(numpy.zeros((3, 1)))
+        self.ia_pred = []
+        self.ib_pred = []
+        self.ic_pred = []
 
-  def log_predicted(self, current_time, p):
-    self.predicted_time.append(current_time)
-    self.ia_pred.append(p[0, 0])
-    self.ib_pred.append(p[1, 0])
-    self.ic_pred.append(p[2, 0])
+        self.voltage_time = []
+        self.estimated_velocity = []
+        self.U_last = numpy.matrix(numpy.zeros((3, 1)))
 
-  def log_controls(self, current_time, measured_current, In, E, estimated_velocity):
-    self.controls_time.append(current_time)
-    self.ia_controls.append(measured_current[0, 0])
-    self.ib_controls.append(measured_current[1, 0])
-    self.ic_controls.append(measured_current[2, 0])
+    def log_predicted(self, current_time, p):
+        self.predicted_time.append(current_time)
+        self.ia_pred.append(p[0, 0])
+        self.ib_pred.append(p[1, 0])
+        self.ic_pred.append(p[2, 0])
 
-    self.ea.append(E[0, 0])
-    self.eb.append(E[1, 0])
-    self.ec.append(E[2, 0])
+    def log_controls(self, current_time, measured_current, In, E,
+                     estimated_velocity):
+        self.controls_time.append(current_time)
+        self.ia_controls.append(measured_current[0, 0])
+        self.ib_controls.append(measured_current[1, 0])
+        self.ic_controls.append(measured_current[2, 0])
 
-    self.ia_goal.append(In[0, 0])
-    self.ib_goal.append(In[1, 0])
-    self.ic_goal.append(In[2, 0])
-    self.estimated_velocity.append(estimated_velocity)
+        self.ea.append(E[0, 0])
+        self.eb.append(E[1, 0])
+        self.ec.append(E[2, 0])
 
-  def log_data(self, X, U, current_time, Vn, i_goal):
-    self.ia.append(X[0, 0])
-    self.ib.append(X[1, 0])
-    self.ic.append(X[2, 0])
+        self.ia_goal.append(In[0, 0])
+        self.ib_goal.append(In[1, 0])
+        self.ic_goal.append(In[2, 0])
+        self.estimated_velocity.append(estimated_velocity)
 
-    self.i_goal.append(i_goal)
+    def log_data(self, X, U, current_time, Vn, i_goal):
+        self.ia.append(X[0, 0])
+        self.ib.append(X[1, 0])
+        self.ic.append(X[2, 0])
 
-    self.isensea.append(X[5, 0])
-    self.isenseb.append(X[6, 0])
-    self.isensec.append(X[7, 0])
+        self.i_goal.append(i_goal)
 
-    self.theta.append(X[3, 0])
-    self.omega.append(X[4, 0])
+        self.isensea.append(X[5, 0])
+        self.isenseb.append(X[6, 0])
+        self.isensec.append(X[7, 0])
 
-    self.time.append(current_time)
+        self.theta.append(X[3, 0])
+        self.omega.append(X[4, 0])
 
-    self.van.append(Vn[0, 0])
-    self.vbn.append(Vn[1, 0])
-    self.vcn.append(Vn[2, 0])
+        self.time.append(current_time)
 
-    if (self.U_last != U).any():
-      self.va.append(self.U_last[0, 0])
-      self.vb.append(self.U_last[1, 0])
-      self.vc.append(self.U_last[2, 0])
-      self.voltage_time.append(current_time)
+        self.van.append(Vn[0, 0])
+        self.vbn.append(Vn[1, 0])
+        self.vcn.append(Vn[2, 0])
 
-      self.va.append(U[0, 0])
-      self.vb.append(U[1, 0])
-      self.vc.append(U[2, 0])
-      self.voltage_time.append(current_time)
-      self.U_last = U.copy()
+        if (self.U_last != U).any():
+            self.va.append(self.U_last[0, 0])
+            self.vb.append(self.U_last[1, 0])
+            self.vc.append(self.U_last[2, 0])
+            self.voltage_time.append(current_time)
 
-  def plot(self):
-    fig = pylab.figure()
-    pylab.subplot(3, 1, 1)
-    pylab.plot(self.controls_time, self.ia_controls, 'ro', label='ia_controls')
-    pylab.plot(self.controls_time, self.ib_controls, 'go', label='ib_controls')
-    pylab.plot(self.controls_time, self.ic_controls, 'bo', label='ic_controls')
-    pylab.plot(self.controls_time, self.ia_goal, 'r--', label='ia_goal')
-    pylab.plot(self.controls_time, self.ib_goal, 'g--', label='ib_goal')
-    pylab.plot(self.controls_time, self.ic_goal, 'b--', label='ic_goal')
+            self.va.append(U[0, 0])
+            self.vb.append(U[1, 0])
+            self.vc.append(U[2, 0])
+            self.voltage_time.append(current_time)
+            self.U_last = U.copy()
 
-    #pylab.plot(self.controls_time, self.ia_pred, 'r*', label='ia_pred')
-    #pylab.plot(self.controls_time, self.ib_pred, 'g*', label='ib_pred')
-    #pylab.plot(self.controls_time, self.ic_pred, 'b*', label='ic_pred')
-    pylab.plot(self.time, self.isensea, 'r:', label='ia_sense')
-    pylab.plot(self.time, self.isenseb, 'g:', label='ib_sense')
-    pylab.plot(self.time, self.isensec, 'b:', label='ic_sense')
-    pylab.plot(self.time, self.ia, 'r', label='ia')
-    pylab.plot(self.time, self.ib, 'g', label='ib')
-    pylab.plot(self.time, self.ic, 'b', label='ic')
-    pylab.plot(self.time, self.i_goal, label='i_goal')
-    if self.title is not None:
-      fig.canvas.set_window_title(self.title)
-    pylab.legend()
+    def plot(self):
+        fig = pylab.figure()
+        pylab.subplot(3, 1, 1)
+        pylab.plot(self.controls_time,
+                   self.ia_controls,
+                   'ro',
+                   label='ia_controls')
+        pylab.plot(self.controls_time,
+                   self.ib_controls,
+                   'go',
+                   label='ib_controls')
+        pylab.plot(self.controls_time,
+                   self.ic_controls,
+                   'bo',
+                   label='ic_controls')
+        pylab.plot(self.controls_time, self.ia_goal, 'r--', label='ia_goal')
+        pylab.plot(self.controls_time, self.ib_goal, 'g--', label='ib_goal')
+        pylab.plot(self.controls_time, self.ic_goal, 'b--', label='ic_goal')
 
-    pylab.subplot(3, 1, 2)
-    pylab.plot(self.voltage_time, self.va, label='va')
-    pylab.plot(self.voltage_time, self.vb, label='vb')
-    pylab.plot(self.voltage_time, self.vc, label='vc')
-    pylab.plot(self.time, self.van, label='van')
-    pylab.plot(self.time, self.vbn, label='vbn')
-    pylab.plot(self.time, self.vcn, label='vcn')
-    pylab.plot(self.controls_time, self.ea, label='ea')
-    pylab.plot(self.controls_time, self.eb, label='eb')
-    pylab.plot(self.controls_time, self.ec, label='ec')
-    pylab.legend()
+        #pylab.plot(self.controls_time, self.ia_pred, 'r*', label='ia_pred')
+        #pylab.plot(self.controls_time, self.ib_pred, 'g*', label='ib_pred')
+        #pylab.plot(self.controls_time, self.ic_pred, 'b*', label='ic_pred')
+        pylab.plot(self.time, self.isensea, 'r:', label='ia_sense')
+        pylab.plot(self.time, self.isenseb, 'g:', label='ib_sense')
+        pylab.plot(self.time, self.isensec, 'b:', label='ic_sense')
+        pylab.plot(self.time, self.ia, 'r', label='ia')
+        pylab.plot(self.time, self.ib, 'g', label='ib')
+        pylab.plot(self.time, self.ic, 'b', label='ic')
+        pylab.plot(self.time, self.i_goal, label='i_goal')
+        if self.title is not None:
+            fig.canvas.set_window_title(self.title)
+        pylab.legend()
 
-    pylab.subplot(3, 1, 3)
-    pylab.plot(self.time, self.theta, label='theta')
-    pylab.plot(self.time, self.omega, label='omega')
-    #pylab.plot(self.controls_time, self.estimated_velocity, label='estimated omega')
+        pylab.subplot(3, 1, 2)
+        pylab.plot(self.voltage_time, self.va, label='va')
+        pylab.plot(self.voltage_time, self.vb, label='vb')
+        pylab.plot(self.voltage_time, self.vc, label='vc')
+        pylab.plot(self.time, self.van, label='van')
+        pylab.plot(self.time, self.vbn, label='vbn')
+        pylab.plot(self.time, self.vcn, label='vcn')
+        pylab.plot(self.controls_time, self.ea, label='ea')
+        pylab.plot(self.controls_time, self.eb, label='eb')
+        pylab.plot(self.controls_time, self.ec, label='ec')
+        pylab.legend()
 
-    pylab.legend()
+        pylab.subplot(3, 1, 3)
+        pylab.plot(self.time, self.theta, label='theta')
+        pylab.plot(self.time, self.omega, label='omega')
+        #pylab.plot(self.controls_time, self.estimated_velocity, label='estimated omega')
 
-    fig = pylab.figure()
-    pylab.plot(self.controls_time,
-               map(operator.sub, self.ia_goal, self.ia_controls), 'r', label='ia_error')
-    pylab.plot(self.controls_time,
-               map(operator.sub, self.ib_goal, self.ib_controls), 'g', label='ib_error')
-    pylab.plot(self.controls_time,
-               map(operator.sub, self.ic_goal, self.ic_controls), 'b', label='ic_error')
-    if self.title is not None:
-      fig.canvas.set_window_title(self.title)
-    pylab.legend()
-    pylab.show()
+        pylab.legend()
+
+        fig = pylab.figure()
+        pylab.plot(self.controls_time,
+                   map(operator.sub, self.ia_goal, self.ia_controls),
+                   'r',
+                   label='ia_error')
+        pylab.plot(self.controls_time,
+                   map(operator.sub, self.ib_goal, self.ib_controls),
+                   'g',
+                   label='ib_error')
+        pylab.plot(self.controls_time,
+                   map(operator.sub, self.ic_goal, self.ic_controls),
+                   'b',
+                   label='ic_error')
+        if self.title is not None:
+            fig.canvas.set_window_title(self.title)
+        pylab.legend()
+        pylab.show()
 
 
 # So, from running a bunch of math, we know the following:
@@ -397,180 +436,203 @@
 # inv(L_matrix) * (Vconv * V - E - R_matrix * I) = I_dot
 # B * V - inv(L_matrix) * E - A * I = I_dot
 class Simulation(object):
-  def __init__(self):
-    self.R_matrix = numpy.matrix(numpy.eye(3)) * R
-    self.L_matrix = numpy.matrix([[L, M, M], [M, L, M], [M, M, L]])
-    self.L_matrix_inv = numpy.linalg.inv(self.L_matrix)
-    self.A = self.L_matrix_inv * self.R_matrix
-    self.B = self.L_matrix_inv * Vconv
-    self.A_discrete, self.B_discrete = controls.c2d(-self.A, self.B, 1.0 / hz)
-    self.B_discrete_inverse = numpy.matrix(numpy.eye(3)) / (self.B_discrete[0, 0] - self.B_discrete[1, 0])
 
-    self.R_model = R * 1.0
-    self.L_model = L * 1.0
-    self.M_model = M * 1.0
-    self.R_matrix_model = numpy.matrix(numpy.eye(3)) * self.R_model
-    self.L_matrix_model = numpy.matrix([[self.L_model, self.M_model, self.M_model],
-                                        [self.M_model, self.L_model, self.M_model],
-                                        [self.M_model, self.M_model, self.L_model]])
-    self.L_matrix_inv_model = numpy.linalg.inv(self.L_matrix_model)
-    self.A_model = self.L_matrix_inv_model * self.R_matrix_model
-    self.B_model = self.L_matrix_inv_model * Vconv
-    self.A_discrete_model, self.B_discrete_model = \
-        controls.c2d(-self.A_model, self.B_model, 1.0 / hz)
-    self.B_discrete_inverse_model = numpy.matrix(numpy.eye(3)) / (self.B_discrete_model[0, 0] - self.B_discrete_model[1, 0])
+    def __init__(self):
+        self.R_matrix = numpy.matrix(numpy.eye(3)) * R
+        self.L_matrix = numpy.matrix([[L, M, M], [M, L, M], [M, M, L]])
+        self.L_matrix_inv = numpy.linalg.inv(self.L_matrix)
+        self.A = self.L_matrix_inv * self.R_matrix
+        self.B = self.L_matrix_inv * Vconv
+        self.A_discrete, self.B_discrete = controls.c2d(
+            -self.A, self.B, 1.0 / hz)
+        self.B_discrete_inverse = numpy.matrix(
+            numpy.eye(3)) / (self.B_discrete[0, 0] - self.B_discrete[1, 0])
 
-    print 'constexpr double kL = %g;' % self.L_model
-    print 'constexpr double kM = %g;' % self.M_model
-    print 'constexpr double kR = %g;' % self.R_model
-    print 'constexpr float kAdiscrete_diagonal = %gf;' % self.A_discrete_model[0, 0]
-    print 'constexpr float kAdiscrete_offdiagonal = %gf;' % self.A_discrete_model[1, 0]
-    print 'constexpr float kBdiscrete_inv_diagonal = %gf;' % self.B_discrete_inverse_model[0, 0]
-    print 'constexpr float kBdiscrete_inv_offdiagonal = %gf;' % self.B_discrete_inverse_model[1, 0]
-    print 'constexpr double kOneAmpScalar = %g;' % one_amp_scalar
-    print 'constexpr double kMaxOneAmpDrivingVoltage = %g;' % max_one_amp_driving_voltage
-    print('A_discrete', self.A_discrete)
-    print('B_discrete', self.B_discrete)
-    print('B_discrete_sub', numpy.linalg.inv(self.B_discrete[0:2, 0:2]))
-    print('B_discrete_inv', self.B_discrete_inverse)
+        self.R_model = R * 1.0
+        self.L_model = L * 1.0
+        self.M_model = M * 1.0
+        self.R_matrix_model = numpy.matrix(numpy.eye(3)) * self.R_model
+        self.L_matrix_model = numpy.matrix(
+            [[self.L_model, self.M_model, self.M_model],
+             [self.M_model, self.L_model, self.M_model],
+             [self.M_model, self.M_model, self.L_model]])
+        self.L_matrix_inv_model = numpy.linalg.inv(self.L_matrix_model)
+        self.A_model = self.L_matrix_inv_model * self.R_matrix_model
+        self.B_model = self.L_matrix_inv_model * Vconv
+        self.A_discrete_model, self.B_discrete_model = \
+            controls.c2d(-self.A_model, self.B_model, 1.0 / hz)
+        self.B_discrete_inverse_model = numpy.matrix(numpy.eye(3)) / (
+            self.B_discrete_model[0, 0] - self.B_discrete_model[1, 0])
 
-    # Xdot[5:, :] = (R_sense2 + R_sense1) / R_sense2 * (
-    #      (1.0 / (R_sense1 * C_sense)) * (-Isense * R_sense2 / (R_sense1 + R_sense2) * (R_sense1 / R_sense2 + 1.0) + I))
-    self.mk1 = (R_sense2 + R_sense1) / R_sense2 * (1.0 / (R_sense1 * C_sense))
-    self.mk2 = -self.mk1 * R_sense2 / (R_sense1 + R_sense2) * (R_sense1 / R_sense2 + 1.0)
+        print 'constexpr double kL = %g;' % self.L_model
+        print 'constexpr double kM = %g;' % self.M_model
+        print 'constexpr double kR = %g;' % self.R_model
+        print 'constexpr float kAdiscrete_diagonal = %gf;' % self.A_discrete_model[
+            0, 0]
+        print 'constexpr float kAdiscrete_offdiagonal = %gf;' % self.A_discrete_model[
+            1, 0]
+        print 'constexpr float kBdiscrete_inv_diagonal = %gf;' % self.B_discrete_inverse_model[
+            0, 0]
+        print 'constexpr float kBdiscrete_inv_offdiagonal = %gf;' % self.B_discrete_inverse_model[
+            1, 0]
+        print 'constexpr double kOneAmpScalar = %g;' % one_amp_scalar
+        print 'constexpr double kMaxOneAmpDrivingVoltage = %g;' % max_one_amp_driving_voltage
+        print('A_discrete', self.A_discrete)
+        print('B_discrete', self.B_discrete)
+        print('B_discrete_sub', numpy.linalg.inv(self.B_discrete[0:2, 0:2]))
+        print('B_discrete_inv', self.B_discrete_inverse)
 
-    # ia, ib, ic, theta, omega, isensea, isenseb, isensec
-    self.X = numpy.matrix([[0.0], [0.0], [0.0], [-2.0 * numpy.pi / 3.0], [0.0], [0.0], [0.0], [0.0]])
+        # Xdot[5:, :] = (R_sense2 + R_sense1) / R_sense2 * (
+        #      (1.0 / (R_sense1 * C_sense)) * (-Isense * R_sense2 / (R_sense1 + R_sense2) * (R_sense1 / R_sense2 + 1.0) + I))
+        self.mk1 = (R_sense2 + R_sense1) / R_sense2 * (1.0 /
+                                                       (R_sense1 * C_sense))
+        self.mk2 = -self.mk1 * R_sense2 / (R_sense1 + R_sense2) * (
+            R_sense1 / R_sense2 + 1.0)
 
-    self.K = 0.05 * Vconv
-    print('A %s' % repr(self.A))
-    print('B %s' % repr(self.B))
-    print('K %s' % repr(self.K))
+        # ia, ib, ic, theta, omega, isensea, isenseb, isensec
+        self.X = numpy.matrix([[0.0], [0.0], [0.0], [-2.0 * numpy.pi / 3.0],
+                               [0.0], [0.0], [0.0], [0.0]])
 
-    print('System poles are %s' % repr(numpy.linalg.eig(self.A)[0]))
-    print('Poles are %s' % repr(numpy.linalg.eig(self.A - self.B * self.K)[0]))
+        self.K = 0.05 * Vconv
+        print('A %s' % repr(self.A))
+        print('B %s' % repr(self.B))
+        print('K %s' % repr(self.K))
 
-    controllability = controls.ctrb(self.A, self.B)
-    print('Rank of augmented controlability matrix. %d' % numpy.linalg.matrix_rank(
-          controllability))
+        print('System poles are %s' % repr(numpy.linalg.eig(self.A)[0]))
+        print('Poles are %s' %
+              repr(numpy.linalg.eig(self.A - self.B * self.K)[0]))
 
-    self.data_logger = DataLogger(switching_pattern)
-    self.current_time = 0.0
+        controllability = controls.ctrb(self.A, self.B)
+        print('Rank of augmented controlability matrix. %d' %
+              numpy.linalg.matrix_rank(controllability))
 
-    self.estimated_velocity = self.X[4, 0]
+        self.data_logger = DataLogger(switching_pattern)
+        self.current_time = 0.0
 
-  def motor_diffeq(self, x, t, U):
-    I = numpy.matrix(x[0:3]).T
-    theta = x[3]
-    omega = x[4]
-    Isense = numpy.matrix(x[5:]).T
+        self.estimated_velocity = self.X[4, 0]
 
-    dflux = phases(f_single, theta) / Kv
+    def motor_diffeq(self, x, t, U):
+        I = numpy.matrix(x[0:3]).T
+        theta = x[3]
+        omega = x[4]
+        Isense = numpy.matrix(x[5:]).T
 
-    Xdot = numpy.matrix(numpy.zeros((8, 1)))
-    di_dt = -self.A_model * I + self.B_model * U - self.L_matrix_inv_model * dflux * omega
-    torque = I.T * dflux
-    Xdot[0:3, :] = di_dt
-    Xdot[3, :] = omega
-    Xdot[4, :] = torque / J
+        dflux = phases(f_single, theta) / Kv
 
-    Xdot[5:, :] = self.mk1 * I + self.mk2 * Isense
-    return numpy.squeeze(numpy.asarray(Xdot))
+        Xdot = numpy.matrix(numpy.zeros((8, 1)))
+        di_dt = -self.A_model * I + self.B_model * U - self.L_matrix_inv_model * dflux * omega
+        torque = I.T * dflux
+        Xdot[0:3, :] = di_dt
+        Xdot[3, :] = omega
+        Xdot[4, :] = torque / J
 
-  def DoControls(self, goal_current):
-    theta = self.X[3, 0]
-    # Use the actual angular velocity.
-    omega = self.X[4, 0]
+        Xdot[5:, :] = self.mk1 * I + self.mk2 * Isense
+        return numpy.squeeze(numpy.asarray(Xdot))
 
-    measured_current = self.X[5:, :].copy()
+    def DoControls(self, goal_current):
+        theta = self.X[3, 0]
+        # Use the actual angular velocity.
+        omega = self.X[4, 0]
 
-    # Ok, lets now fake it.
-    E_imag1 = numpy.exp(1j * theta) * K1 * numpy.matrix(
-            [[-1j],
-             [-1j * numpy.exp(1j * numpy.pi * 2.0 / 3.0)],
+        measured_current = self.X[5:, :].copy()
+
+        # Ok, lets now fake it.
+        E_imag1 = numpy.exp(1j * theta) * K1 * numpy.matrix(
+            [[-1j], [-1j * numpy.exp(1j * numpy.pi * 2.0 / 3.0)],
              [-1j * numpy.exp(-1j * numpy.pi * 2.0 / 3.0)]])
-    E_imag2 =  numpy.exp(1j * 5.0 * theta) * K2 * numpy.matrix(
-            [[-1j],
-             [-1j * numpy.exp(-1j * numpy.pi * 2.0 / 3.0)],
+        E_imag2 = numpy.exp(1j * 5.0 * theta) * K2 * numpy.matrix(
+            [[-1j], [-1j * numpy.exp(-1j * numpy.pi * 2.0 / 3.0)],
              [-1j * numpy.exp(1j * numpy.pi * 2.0 / 3.0)]])
 
-    overall_measured_current = ((E_imag1 + E_imag2).real.T * measured_current / one_amp_scalar)[0, 0]
+        overall_measured_current = ((E_imag1 + E_imag2).real.T *
+                                    measured_current / one_amp_scalar)[0, 0]
 
-    current_error = goal_current - overall_measured_current
-    #print(current_error)
-    self.estimated_velocity += current_error * 1.0
-    omega = self.estimated_velocity
+        current_error = goal_current - overall_measured_current
+        #print(current_error)
+        self.estimated_velocity += current_error * 1.0
+        omega = self.estimated_velocity
 
-    # Now, apply the transfer function of the inductor.
-    # Use that to difference the current across the cycle.
-    Icurrent = self.Ilast
-    # No history:
-    #Icurrent = phases(g_single, theta) * goal_current
-    Inext = phases(g_single, theta + omega * 1.0 / hz) * goal_current
+        # Now, apply the transfer function of the inductor.
+        # Use that to difference the current across the cycle.
+        Icurrent = self.Ilast
+        # No history:
+        #Icurrent = phases(g_single, theta) * goal_current
+        Inext = phases(g_single, theta + omega * 1.0 / hz) * goal_current
 
-    deltaI = Inext - Icurrent
+        deltaI = Inext - Icurrent
 
-    H1 = -numpy.linalg.inv(1j * omega * self.L_matrix + self.R_matrix) * omega / Kv
-    H2 = -numpy.linalg.inv(1j * omega * 5.0 * self.L_matrix + self.R_matrix) * omega / Kv
-    p_imag = H1 * E_imag1 + H2 * E_imag2
-    p_next_imag = numpy.exp(1j * omega * 1.0 / hz) * H1 * E_imag1 + \
-        numpy.exp(1j * omega * 5.0 * 1.0 / hz) * H2 * E_imag2
-    p = p_imag.real
+        H1 = -numpy.linalg.inv(1j * omega * self.L_matrix +
+                               self.R_matrix) * omega / Kv
+        H2 = -numpy.linalg.inv(1j * omega * 5.0 * self.L_matrix +
+                               self.R_matrix) * omega / Kv
+        p_imag = H1 * E_imag1 + H2 * E_imag2
+        p_next_imag = numpy.exp(1j * omega * 1.0 / hz) * H1 * E_imag1 + \
+            numpy.exp(1j * omega * 5.0 * 1.0 / hz) * H2 * E_imag2
+        p = p_imag.real
 
-    # So, we now know how much the change in current is due to changes in BEMF.
-    # Subtract that, and then run the stock statespace equation.
-    Vn_ff = self.B_discrete_inverse * (Inext - self.A_discrete * (Icurrent - p) - p_next_imag.real)
-    print 'Vn_ff', Vn_ff
-    print 'Inext', Inext
-    Vn = Vn_ff + self.K * (Icurrent - measured_current)
+        # So, we now know how much the change in current is due to changes in BEMF.
+        # Subtract that, and then run the stock statespace equation.
+        Vn_ff = self.B_discrete_inverse * (Inext - self.A_discrete *
+                                           (Icurrent - p) - p_next_imag.real)
+        print 'Vn_ff', Vn_ff
+        print 'Inext', Inext
+        Vn = Vn_ff + self.K * (Icurrent - measured_current)
 
-    E = phases(f_single, self.X[3, 0]) / Kv * self.X[4, 0]
-    self.data_logger.log_controls(self.current_time, measured_current, Icurrent, E, self.estimated_velocity)
+        E = phases(f_single, self.X[3, 0]) / Kv * self.X[4, 0]
+        self.data_logger.log_controls(self.current_time, measured_current,
+                                      Icurrent, E, self.estimated_velocity)
 
-    self.Ilast = Inext
+        self.Ilast = Inext
 
-    return Vn
+        return Vn
 
-  def Simulate(self):
-    start_wall_time = time.time()
-    self.Ilast = numpy.matrix(numpy.zeros((3, 1)))
-    for n in range(200):
-      goal_current = 1.0
-      max_current = (vcc - (self.X[4, 0] / Kv * 2.0)) / max_one_amp_driving_voltage
-      min_current = (-vcc - (self.X[4, 0] / Kv * 2.0)) / max_one_amp_driving_voltage
-      goal_current = max(min_current, min(max_current, goal_current))
+    def Simulate(self):
+        start_wall_time = time.time()
+        self.Ilast = numpy.matrix(numpy.zeros((3, 1)))
+        for n in range(200):
+            goal_current = 1.0
+            max_current = (
+                vcc - (self.X[4, 0] / Kv * 2.0)) / max_one_amp_driving_voltage
+            min_current = (
+                -vcc - (self.X[4, 0] / Kv * 2.0)) / max_one_amp_driving_voltage
+            goal_current = max(min_current, min(max_current, goal_current))
 
-      Vn = self.DoControls(goal_current)
+            Vn = self.DoControls(goal_current)
 
-      #Vn = numpy.matrix([[1.00], [0.0], [0.0]])
-      Vn = numpy.matrix([[0.00], [1.00], [0.0]])
-      #Vn = numpy.matrix([[0.00], [0.0], [1.00]])
+            #Vn = numpy.matrix([[1.00], [0.0], [0.0]])
+            Vn = numpy.matrix([[0.00], [1.00], [0.0]])
+            #Vn = numpy.matrix([[0.00], [0.0], [1.00]])
 
-      # T is the fractional rate.
-      T = Vn / vcc
-      tn = -numpy.min(T)
-      T += tn
-      if (T > 1.0).any():
-        T = T / numpy.max(T)
+            # T is the fractional rate.
+            T = Vn / vcc
+            tn = -numpy.min(T)
+            T += tn
+            if (T > 1.0).any():
+                T = T / numpy.max(T)
 
-      for t, U in sample_times(T = T,
-                               dt = 1.0 / hz, n = 10,
-                               start_time = self.current_time):
-        # Analog amplifier mode!
-        #U = Vn
+            for t, U in sample_times(T=T,
+                                     dt=1.0 / hz,
+                                     n=10,
+                                     start_time=self.current_time):
+                # Analog amplifier mode!
+                #U = Vn
 
-        self.data_logger.log_data(self.X, (U - min(U)), self.current_time, Vn, goal_current)
-        t_array = numpy.array([self.current_time, t])
-        self.X = numpy.matrix(scipy.integrate.odeint(
-            self.motor_diffeq,
-            numpy.squeeze(numpy.asarray(self.X)),
-            t_array, args=(U,)))[1, :].T
+                self.data_logger.log_data(self.X, (U - min(U)),
+                                          self.current_time, Vn, goal_current)
+                t_array = numpy.array([self.current_time, t])
+                self.X = numpy.matrix(
+                    scipy.integrate.odeint(self.motor_diffeq,
+                                           numpy.squeeze(numpy.asarray(
+                                               self.X)),
+                                           t_array,
+                                           args=(U, )))[1, :].T
 
-        self.current_time = t
+                self.current_time = t
 
-    print 'Took %f to simulate' % (time.time() - start_wall_time)
+        print 'Took %f to simulate' % (time.time() - start_wall_time)
 
-    self.data_logger.plot()
+        self.data_logger.plot()
+
 
 simulation = Simulation()
 simulation.Simulate()
diff --git a/motors/seems_reasonable/drivetrain.py b/motors/seems_reasonable/drivetrain.py
index 52b3920..ad3d92a 100644
--- a/motors/seems_reasonable/drivetrain.py
+++ b/motors/seems_reasonable/drivetrain.py
@@ -30,11 +30,10 @@
         glog.error("Expected .h file name and .cc file name")
     else:
         # Write the generated constants out to a file.
-        drivetrain.WriteDrivetrain(
-            argv[1:3],
-            argv[3:5], ['motors', 'seems_reasonable'],
-            kDrivetrain,
-            scalar_type='float')
+        drivetrain.WriteDrivetrain(argv[1:3],
+                                   argv[3:5], ['motors', 'seems_reasonable'],
+                                   kDrivetrain,
+                                   scalar_type='float')
 
 
 if __name__ == '__main__':
diff --git a/motors/seems_reasonable/polydrivetrain.py b/motors/seems_reasonable/polydrivetrain.py
index 452b3fb..665739f 100644
--- a/motors/seems_reasonable/polydrivetrain.py
+++ b/motors/seems_reasonable/polydrivetrain.py
@@ -16,19 +16,19 @@
 except gflags.DuplicateFlagError:
     pass
 
+
 def main(argv):
     if FLAGS.plot:
         polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
     elif len(argv) != 7:
         glog.fatal('Expected .h file name and .cc file name')
     else:
-        polydrivetrain.WritePolyDrivetrain(
-            argv[1:3],
-            argv[3:5],
-            argv[5:7],
-            ['motors', 'seems_reasonable'],
-            drivetrain.kDrivetrain,
-            scalar_type='float')
+        polydrivetrain.WritePolyDrivetrain(argv[1:3],
+                                           argv[3:5],
+                                           argv[5:7],
+                                           ['motors', 'seems_reasonable'],
+                                           drivetrain.kDrivetrain,
+                                           scalar_type='float')
 
 
 if __name__ == '__main__':
diff --git a/scouting/deploy/deploy.py b/scouting/deploy/deploy.py
index c9886fb..5967956 100644
--- a/scouting/deploy/deploy.py
+++ b/scouting/deploy/deploy.py
@@ -3,6 +3,7 @@
 import subprocess
 import sys
 
+
 def main(argv):
     """Installs the scouting application on the scouting server."""
     parser = argparse.ArgumentParser()
@@ -23,11 +24,16 @@
 
     # Copy the .deb to the scouting server, install it, and delete it again.
     subprocess.run(["rsync", "-L", args.deb, f"{args.host}:/tmp/{deb.name}"],
-                   check=True, stdin=sys.stdin)
+                   check=True,
+                   stdin=sys.stdin)
     subprocess.run(f"ssh -tt {args.host} sudo dpkg -i /tmp/{deb.name}",
-                   shell=True, check=True, stdin=sys.stdin)
+                   shell=True,
+                   check=True,
+                   stdin=sys.stdin)
     subprocess.run(f"ssh {args.host} rm -f /tmp/{deb.name}",
-                   shell=True, check=True, stdin=sys.stdin)
+                   shell=True,
+                   check=True,
+                   stdin=sys.stdin)
 
 
 if __name__ == "__main__":
diff --git a/scouting/testing/scouting_test_servers.py b/scouting/testing/scouting_test_servers.py
index b6e5c7a..9df23c1 100644
--- a/scouting/testing/scouting_test_servers.py
+++ b/scouting/testing/scouting_test_servers.py
@@ -18,6 +18,7 @@
 import time
 from typing import List
 
+
 def wait_for_server(port: int):
     """Waits for the server at the specified port to respond to TCP connections."""
     while True:
@@ -30,31 +31,37 @@
             connection.close()
             time.sleep(0.01)
 
+
 def create_db_config(tmpdir: Path) -> Path:
     config = tmpdir / "db_config.json"
-    config.write_text(json.dumps({
-        "username": "test",
-        "password": "password",
-        "port": 5432,
-    }))
+    config.write_text(
+        json.dumps({
+            "username": "test",
+            "password": "password",
+            "port": 5432,
+        }))
     return config
 
+
 def create_tba_config(tmpdir: Path) -> Path:
     # Configure the scouting webserver to scrape data from our fake TBA
     # server.
     config = tmpdir / "scouting_config.json"
-    config.write_text(json.dumps({
-        "api_key": "dummy_key_that_is_not_actually_used_in_this_test",
-        "base_url": "http://localhost:7000",
-    }))
+    config.write_text(
+        json.dumps({
+            "api_key": "dummy_key_that_is_not_actually_used_in_this_test",
+            "base_url": "http://localhost:7000",
+        }))
     return config
 
+
 def set_up_tba_api_dir(tmpdir: Path, year: int, event_code: str):
     tba_api_dir = tmpdir / "api" / "v3" / "event" / f"{year}{event_code}"
     tba_api_dir.mkdir(parents=True, exist_ok=True)
     (tba_api_dir / "matches").write_text(
-        Path(f"scouting/scraping/test_data/{year}_{event_code}.json").read_text()
-    )
+        Path(f"scouting/scraping/test_data/{year}_{event_code}.json").
+        read_text())
+
 
 class Runner:
     """Helps manage the services we need for testing the scouting app."""
@@ -105,6 +112,7 @@
         except FileNotFoundError:
             pass
 
+
 def discard_signal(signum, frame):
     """A NOP handler to ignore certain signals.
 
@@ -113,9 +121,12 @@
     """
     pass
 
+
 def main(argv: List[str]):
     parser = argparse.ArgumentParser()
-    parser.add_argument("--port", type=int, help="The port for the actual web server.")
+    parser.add_argument("--port",
+                        type=int,
+                        help="The port for the actual web server.")
     args = parser.parse_args(argv[1:])
 
     runner = Runner()
diff --git a/scouting/webserver/requests/BUILD b/scouting/webserver/requests/BUILD
index 744772c..87575a9 100644
--- a/scouting/webserver/requests/BUILD
+++ b/scouting/webserver/requests/BUILD
@@ -20,10 +20,14 @@
         "//scouting/webserver/requests/messages:request_matches_for_team_response_go_fbs",
         "//scouting/webserver/requests/messages:request_notes_for_team_go_fbs",
         "//scouting/webserver/requests/messages:request_notes_for_team_response_go_fbs",
+        "//scouting/webserver/requests/messages:request_shift_schedule_go_fbs",
+        "//scouting/webserver/requests/messages:request_shift_schedule_response_go_fbs",
         "//scouting/webserver/requests/messages:submit_data_scouting_go_fbs",
         "//scouting/webserver/requests/messages:submit_data_scouting_response_go_fbs",
         "//scouting/webserver/requests/messages:submit_notes_go_fbs",
         "//scouting/webserver/requests/messages:submit_notes_response_go_fbs",
+        "//scouting/webserver/requests/messages:submit_shift_schedule_go_fbs",
+        "//scouting/webserver/requests/messages:submit_shift_schedule_response_go_fbs",
         "//scouting/webserver/server",
         "@com_github_google_flatbuffers//go:go_default_library",
     ],
@@ -48,9 +52,12 @@
         "//scouting/webserver/requests/messages:request_matches_for_team_go_fbs",
         "//scouting/webserver/requests/messages:request_matches_for_team_response_go_fbs",
         "//scouting/webserver/requests/messages:request_notes_for_team_go_fbs",
+        "//scouting/webserver/requests/messages:request_shift_schedule_go_fbs",
+        "//scouting/webserver/requests/messages:request_shift_schedule_response_go_fbs",
         "//scouting/webserver/requests/messages:submit_data_scouting_go_fbs",
         "//scouting/webserver/requests/messages:submit_data_scouting_response_go_fbs",
         "//scouting/webserver/requests/messages:submit_notes_go_fbs",
+        "//scouting/webserver/requests/messages:submit_shift_schedule_go_fbs",
         "//scouting/webserver/server",
         "@com_github_google_flatbuffers//go:go_default_library",
     ],
diff --git a/scouting/webserver/requests/debug/BUILD b/scouting/webserver/requests/debug/BUILD
index 6adaee5..04c4ffa 100644
--- a/scouting/webserver/requests/debug/BUILD
+++ b/scouting/webserver/requests/debug/BUILD
@@ -13,8 +13,10 @@
         "//scouting/webserver/requests/messages:request_data_scouting_response_go_fbs",
         "//scouting/webserver/requests/messages:request_matches_for_team_response_go_fbs",
         "//scouting/webserver/requests/messages:request_notes_for_team_response_go_fbs",
+        "//scouting/webserver/requests/messages:request_shift_schedule_response_go_fbs",
         "//scouting/webserver/requests/messages:submit_data_scouting_response_go_fbs",
         "//scouting/webserver/requests/messages:submit_notes_response_go_fbs",
+        "//scouting/webserver/requests/messages:submit_shift_schedule_response_go_fbs",
         "@com_github_google_flatbuffers//go:go_default_library",
     ],
 )
diff --git a/scouting/webserver/requests/debug/cli/cli_test.py b/scouting/webserver/requests/debug/cli/cli_test.py
index 2bcd75b..d4310e9 100644
--- a/scouting/webserver/requests/debug/cli/cli_test.py
+++ b/scouting/webserver/requests/debug/cli/cli_test.py
@@ -22,6 +22,7 @@
     json_path.write_text(json.dumps(content))
     return json_path
 
+
 def run_debug_cli(args: List[str]):
     run_result = subprocess.run(
         ["scouting/webserver/requests/debug/cli/cli_/cli"] + args,
@@ -51,46 +52,71 @@
             "year": year,
             "event_code": event_code,
         })
-        exit_code, stdout, stderr = run_debug_cli(["-refreshMatchList", json_path])
+        exit_code, stdout, stderr = run_debug_cli(
+            ["-refreshMatchList", json_path])
         self.assertEqual(exit_code, 0, f"{year}{event_code}: {stderr}")
-        self.assertIn("(refresh_match_list_response.RefreshMatchListResponseT)", stdout)
+        self.assertIn(
+            "(refresh_match_list_response.RefreshMatchListResponseT)", stdout)
 
     def test_submit_and_request_data_scouting(self):
         self.refresh_match_list(year=2020, event_code="fake")
 
         # First submit some data to be added to the database.
         json_path = write_json_request({
-            "team": 100,
-            "match": 1,
-            "set_number": 2,
-            "comp_level": "quals",
-            "starting_quadrant": 3,
-            "auto_ball_1": True,
-            "auto_ball_2": False,
-            "auto_ball_3": False,
-            "auto_ball_4": False,
-            "auto_ball_5": True,
-            "missed_shots_auto": 10,
-            "upper_goal_auto": 11,
-            "lower_goal_auto": 12,
-            "missed_shots_tele": 13,
-            "upper_goal_tele": 14,
-            "lower_goal_tele": 15,
-            "defense_rating": 3,
-            "defense_received_rating": 4,
-            "climb_level": "Medium",
-            "comment": "A very inspiring and useful comment",
+            "team":
+            100,
+            "match":
+            1,
+            "set_number":
+            2,
+            "comp_level":
+            "quals",
+            "starting_quadrant":
+            3,
+            "auto_ball_1":
+            True,
+            "auto_ball_2":
+            False,
+            "auto_ball_3":
+            False,
+            "auto_ball_4":
+            False,
+            "auto_ball_5":
+            True,
+            "missed_shots_auto":
+            10,
+            "upper_goal_auto":
+            11,
+            "lower_goal_auto":
+            12,
+            "missed_shots_tele":
+            13,
+            "upper_goal_tele":
+            14,
+            "lower_goal_tele":
+            15,
+            "defense_rating":
+            3,
+            "defense_received_rating":
+            4,
+            "climb_level":
+            "Medium",
+            "comment":
+            "A very inspiring and useful comment",
         })
-        exit_code, _, stderr = run_debug_cli(["-submitDataScouting", json_path])
+        exit_code, _, stderr = run_debug_cli(
+            ["-submitDataScouting", json_path])
         self.assertEqual(exit_code, 0, stderr)
 
         # Now request the data back with zero indentation. That let's us
         # validate the data easily.
         json_path = write_json_request({})
-        exit_code, stdout, stderr = run_debug_cli(["-requestDataScouting", json_path, "-indent="])
+        exit_code, stdout, stderr = run_debug_cli(
+            ["-requestDataScouting", json_path, "-indent="])
 
         self.assertEqual(exit_code, 0, stderr)
-        self.assertIn(textwrap.dedent("""\
+        self.assertIn(
+            textwrap.dedent("""\
             {
             Team: (int32) 100,
             Match: (int32) 1,
@@ -120,10 +146,13 @@
 
         # RequestAllMatches has no fields.
         json_path = write_json_request({})
-        exit_code, stdout, stderr = run_debug_cli(["-requestAllMatches", json_path])
+        exit_code, stdout, stderr = run_debug_cli(
+            ["-requestAllMatches", json_path])
 
         self.assertEqual(exit_code, 0, stderr)
-        self.assertIn("MatchList: ([]*request_all_matches_response.MatchT) (len=90 cap=90) {", stdout)
+        self.assertIn(
+            "MatchList: ([]*request_all_matches_response.MatchT) (len=90 cap=90) {",
+            stdout)
         self.assertEqual(stdout.count("MatchNumber:"), 90)
 
     def test_request_matches_for_team(self):
@@ -132,11 +161,14 @@
         json_path = write_json_request({
             "team": 4856,
         })
-        exit_code, stdout, stderr = run_debug_cli(["-requestMatchesForTeam", json_path])
+        exit_code, stdout, stderr = run_debug_cli(
+            ["-requestMatchesForTeam", json_path])
 
         # Team 4856 has 12 matches.
         self.assertEqual(exit_code, 0, stderr)
-        self.assertIn("MatchList: ([]*request_matches_for_team_response.MatchT) (len=12 cap=12) {", stdout)
+        self.assertIn(
+            "MatchList: ([]*request_matches_for_team_response.MatchT) (len=12 cap=12) {",
+            stdout)
         self.assertEqual(stdout.count("MatchNumber:"), 12)
         self.assertEqual(len(re.findall(r": \(int32\) 4856[,\n]", stdout)), 12)
 
@@ -148,13 +180,16 @@
 
             # RequestAllMatches has no fields.
             json_path = write_json_request({})
-            exit_code, stdout, stderr = run_debug_cli(["-requestAllMatches", json_path])
+            exit_code, stdout, stderr = run_debug_cli(
+                ["-requestAllMatches", json_path])
 
             self.assertEqual(exit_code, 0, stderr)
             request_all_matches_outputs.append(stdout)
 
         self.maxDiff = None
-        self.assertEqual(request_all_matches_outputs[0], request_all_matches_outputs[1])
+        self.assertEqual(request_all_matches_outputs[0],
+                         request_all_matches_outputs[1])
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/scouting/webserver/requests/debug/debug.go b/scouting/webserver/requests/debug/debug.go
index 21f0f05..b3df518 100644
--- a/scouting/webserver/requests/debug/debug.go
+++ b/scouting/webserver/requests/debug/debug.go
@@ -15,8 +15,10 @@
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_data_scouting_response"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_matches_for_team_response"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_notes_for_team_response"
+	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_shift_schedule_response"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_data_scouting_response"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_notes_response"
+	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_shift_schedule_response"
 	flatbuffers "github.com/google/flatbuffers/go"
 )
 
@@ -143,3 +145,15 @@
 		server+"/requests/request/notes_for_team", requestBytes,
 		request_notes_for_team_response.GetRootAsRequestNotesForTeamResponse)
 }
+
+func RequestShiftSchedule(server string, requestBytes []byte) (*request_shift_schedule_response.RequestShiftScheduleResponseT, error) {
+	return sendMessage[request_shift_schedule_response.RequestShiftScheduleResponseT](
+		server+"/requests/request/shift_schedule", requestBytes,
+		request_shift_schedule_response.GetRootAsRequestShiftScheduleResponse)
+}
+
+func SubmitShiftSchedule(server string, requestBytes []byte) (*submit_shift_schedule_response.SubmitShiftScheduleResponseT, error) {
+	return sendMessage[submit_shift_schedule_response.SubmitShiftScheduleResponseT](
+		server+"/requests/submit/shift_schedule", requestBytes,
+		submit_shift_schedule_response.GetRootAsSubmitShiftScheduleResponse)
+}
diff --git a/scouting/webserver/requests/messages/BUILD b/scouting/webserver/requests/messages/BUILD
index f7e194b..d804ea6 100644
--- a/scouting/webserver/requests/messages/BUILD
+++ b/scouting/webserver/requests/messages/BUILD
@@ -16,6 +16,10 @@
     "submit_notes_response",
     "request_notes_for_team",
     "request_notes_for_team_response",
+    "request_shift_schedule",
+    "request_shift_schedule_response",
+    "submit_shift_schedule",
+    "submit_shift_schedule_response",
 )
 
 filegroup(
diff --git a/scouting/webserver/requests/messages/request_shift_schedule.fbs b/scouting/webserver/requests/messages/request_shift_schedule.fbs
new file mode 100644
index 0000000..8f2a61c
--- /dev/null
+++ b/scouting/webserver/requests/messages/request_shift_schedule.fbs
@@ -0,0 +1,6 @@
+namespace scouting.webserver.requests;
+
+table RequestShiftSchedule {
+}
+
+root_type RequestShiftSchedule;
\ No newline at end of file
diff --git a/scouting/webserver/requests/messages/request_shift_schedule_response.fbs b/scouting/webserver/requests/messages/request_shift_schedule_response.fbs
new file mode 100644
index 0000000..611db49
--- /dev/null
+++ b/scouting/webserver/requests/messages/request_shift_schedule_response.fbs
@@ -0,0 +1,17 @@
+namespace scouting.webserver.requests;
+
+table MatchAssignment {
+    match_number:int (id:0);
+    R1scouter:string (id:1);
+    R2scouter:string (id:2);
+    R3scouter:string (id:3);
+    B1scouter:string (id:4);
+    B2scouter:string (id:5);
+    B3scouter:string (id:6);
+}
+
+table RequestShiftScheduleResponse {
+    shift_schedule:[MatchAssignment] (id:0);
+}
+
+root_type RequestShiftScheduleResponse;
\ No newline at end of file
diff --git a/scouting/webserver/requests/messages/submit_shift_schedule.fbs b/scouting/webserver/requests/messages/submit_shift_schedule.fbs
new file mode 100644
index 0000000..1f1833e
--- /dev/null
+++ b/scouting/webserver/requests/messages/submit_shift_schedule.fbs
@@ -0,0 +1,17 @@
+namespace scouting.webserver.requests;
+
+table MatchAssignment {
+    match_number:int (id:0);
+    R1scouter:string (id:1);
+    R2scouter:string (id:2);
+    R3scouter:string (id:3);
+    B1scouter:string (id:4);
+    B2scouter:string (id:5);
+    B3scouter:string (id:6);
+}
+
+table SubmitShiftSchedule {
+    shift_schedule:[MatchAssignment] (id:0);
+}
+
+root_type SubmitShiftSchedule;
\ No newline at end of file
diff --git a/scouting/webserver/requests/messages/submit_shift_schedule_response.fbs b/scouting/webserver/requests/messages/submit_shift_schedule_response.fbs
new file mode 100644
index 0000000..17eadbc
--- /dev/null
+++ b/scouting/webserver/requests/messages/submit_shift_schedule_response.fbs
@@ -0,0 +1,6 @@
+namespace scouting.webserver.requests;
+
+table SubmitShiftScheduleResponse {
+}
+
+root_type SubmitShiftScheduleResponse;
\ No newline at end of file
diff --git a/scouting/webserver/requests/requests.go b/scouting/webserver/requests/requests.go
index cef87aa..67a1722 100644
--- a/scouting/webserver/requests/requests.go
+++ b/scouting/webserver/requests/requests.go
@@ -23,10 +23,14 @@
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_matches_for_team_response"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_notes_for_team"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_notes_for_team_response"
+	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_shift_schedule"
+	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_shift_schedule_response"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_data_scouting"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_data_scouting_response"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_notes"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_notes_response"
+	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_shift_schedule"
+	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_shift_schedule_response"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/server"
 	flatbuffers "github.com/google/flatbuffers/go"
 )
@@ -45,15 +49,22 @@
 type SubmitNotesResponseT = submit_notes_response.SubmitNotesResponseT
 type RequestNotesForTeam = request_notes_for_team.RequestNotesForTeam
 type RequestNotesForTeamResponseT = request_notes_for_team_response.RequestNotesForTeamResponseT
+type RequestShiftSchedule = request_shift_schedule.RequestShiftSchedule
+type RequestShiftScheduleResponseT = request_shift_schedule_response.RequestShiftScheduleResponseT
+type SubmitShiftSchedule = submit_shift_schedule.SubmitShiftSchedule
+type SubmitShiftScheduleResponseT = submit_shift_schedule_response.SubmitShiftScheduleResponseT
 
 // The interface we expect the database abstraction to conform to.
 // We use an interface here because it makes unit testing easier.
 type Database interface {
 	AddToMatch(db.Match) error
+	AddToShift(db.Shift) error
 	AddToStats(db.Stats) error
 	ReturnMatches() ([]db.Match, error)
+	ReturnAllShifts() ([]db.Shift, error)
 	ReturnStats() ([]db.Stats, error)
 	QueryMatches(int32) ([]db.Match, error)
+	QueryAllShifts(int) ([]db.Shift, error)
 	QueryStats(int) ([]db.Stats, error)
 	QueryNotes(int32) (db.NotesData, error)
 	AddNotes(db.NotesData) error
@@ -480,6 +491,91 @@
 	w.Write(builder.FinishedBytes())
 }
 
+type requestShiftScheduleHandler struct {
+	db Database
+}
+
+func (handler requestShiftScheduleHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
+	requestBytes, err := io.ReadAll(req.Body)
+	if err != nil {
+		respondWithError(w, http.StatusBadRequest, fmt.Sprint("Failed to read request bytes:", err))
+		return
+	}
+
+	_, success := parseRequest(w, requestBytes, "RequestShiftSchedule", request_shift_schedule.GetRootAsRequestShiftSchedule)
+	if !success {
+		return
+	}
+
+	shiftData, err := handler.db.ReturnAllShifts()
+	if err != nil {
+		respondWithError(w, http.StatusInternalServerError, fmt.Sprintf("Failed to query shift schedule: %v", err))
+		return
+	}
+
+	var response RequestShiftScheduleResponseT
+	for _, shifts := range shiftData {
+		response.ShiftSchedule = append(response.ShiftSchedule, &request_shift_schedule_response.MatchAssignmentT{
+			MatchNumber: shifts.MatchNumber,
+			R1scouter:   shifts.R1scouter,
+			R2scouter:   shifts.R2scouter,
+			R3scouter:   shifts.R3scouter,
+			B1scouter:   shifts.B1scouter,
+			B2scouter:   shifts.B2scouter,
+			B3scouter:   shifts.B3scouter,
+		})
+	}
+
+	builder := flatbuffers.NewBuilder(1024)
+	builder.Finish((&response).Pack(builder))
+	w.Write(builder.FinishedBytes())
+}
+
+type submitShiftScheduleHandler struct {
+	db Database
+}
+
+func (handler submitShiftScheduleHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
+	// Get the username of the person submitting the data.
+	username := parseUsername(req)
+
+	requestBytes, err := io.ReadAll(req.Body)
+	if err != nil {
+		respondWithError(w, http.StatusBadRequest, fmt.Sprint("Failed to read request bytes:", err))
+		return
+	}
+
+	request, success := parseRequest[SubmitShiftSchedule](w, requestBytes, "SubmitShiftSchedule", submit_shift_schedule.GetRootAsSubmitShiftSchedule)
+	if !success {
+		return
+	}
+
+	log.Println("Got shift schedule from", username)
+	shift_schedule_length := request.ShiftScheduleLength()
+	for i := 0; i < shift_schedule_length; i++ {
+		var match_assignment submit_shift_schedule.MatchAssignment
+		request.ShiftSchedule(&match_assignment, i)
+		current_shift := db.Shift{
+			MatchNumber: match_assignment.MatchNumber(),
+			R1scouter:   string(match_assignment.R1scouter()),
+			R2scouter:   string(match_assignment.R2scouter()),
+			R3scouter:   string(match_assignment.R3scouter()),
+			B1scouter:   string(match_assignment.B1scouter()),
+			B2scouter:   string(match_assignment.B2scouter()),
+			B3scouter:   string(match_assignment.B3scouter()),
+		}
+		err = handler.db.AddToShift(current_shift)
+		if err != nil {
+			respondWithError(w, http.StatusInternalServerError, fmt.Sprint("Failed to submit shift schedule: ", err))
+			return
+		}
+	}
+
+	builder := flatbuffers.NewBuilder(50 * 1024)
+	builder.Finish((&SubmitShiftScheduleResponseT{}).Pack(builder))
+	w.Write(builder.FinishedBytes())
+}
+
 func HandleRequests(db Database, scrape ScrapeMatchList, scoutingServer server.ScoutingServer) {
 	scoutingServer.HandleFunc("/requests", unknown)
 	scoutingServer.Handle("/requests/submit/data_scouting", submitDataScoutingHandler{db})
@@ -489,4 +585,6 @@
 	scoutingServer.Handle("/requests/refresh_match_list", refreshMatchListHandler{db, scrape})
 	scoutingServer.Handle("/requests/submit/submit_notes", submitNoteScoutingHandler{db})
 	scoutingServer.Handle("/requests/request/notes_for_team", requestNotesForTeamHandler{db})
+	scoutingServer.Handle("/requests/submit/shift_schedule", submitShiftScheduleHandler{db})
+	scoutingServer.Handle("/requests/request/shift_schedule", requestShiftScheduleHandler{db})
 }
diff --git a/scouting/webserver/requests/requests_test.go b/scouting/webserver/requests/requests_test.go
index 4dda143..44fd5db 100644
--- a/scouting/webserver/requests/requests_test.go
+++ b/scouting/webserver/requests/requests_test.go
@@ -20,9 +20,12 @@
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_matches_for_team"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_matches_for_team_response"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_notes_for_team"
+	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_shift_schedule"
+	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_shift_schedule_response"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_data_scouting"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_data_scouting_response"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_notes"
+	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_shift_schedule"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/server"
 	flatbuffers "github.com/google/flatbuffers/go"
 )
@@ -355,6 +358,113 @@
 	}
 }
 
+func TestRequestShiftSchedule(t *testing.T) {
+	db := MockDatabase{
+		shiftSchedule: []db.Shift{
+			{
+				MatchNumber: 1,
+				R1scouter:   "Bob",
+				R2scouter:   "James",
+				R3scouter:   "Robert",
+				B1scouter:   "Alice",
+				B2scouter:   "Mary",
+				B3scouter:   "Patricia",
+			},
+			{
+				MatchNumber: 2,
+				R1scouter:   "Liam",
+				R2scouter:   "Noah",
+				R3scouter:   "Oliver",
+				B1scouter:   "Emma",
+				B2scouter:   "Charlotte",
+				B3scouter:   "Amelia",
+			},
+		},
+	}
+	scoutingServer := server.NewScoutingServer()
+	HandleRequests(&db, scrapeEmtpyMatchList, scoutingServer)
+	scoutingServer.Start(8080)
+	defer scoutingServer.Stop()
+
+	builder := flatbuffers.NewBuilder(1024)
+	builder.Finish((&request_shift_schedule.RequestShiftScheduleT{}).Pack(builder))
+
+	response, err := debug.RequestShiftSchedule("http://localhost:8080", builder.FinishedBytes())
+	if err != nil {
+		t.Fatal("Failed to request shift schedule: ", err)
+	}
+
+	expected := request_shift_schedule_response.RequestShiftScheduleResponseT{
+		ShiftSchedule: []*request_shift_schedule_response.MatchAssignmentT{
+			{
+				MatchNumber: 1,
+				R1scouter:   "Bob",
+				R2scouter:   "James",
+				R3scouter:   "Robert",
+				B1scouter:   "Alice",
+				B2scouter:   "Mary",
+				B3scouter:   "Patricia",
+			},
+			{
+				MatchNumber: 2,
+				R1scouter:   "Liam",
+				R2scouter:   "Noah",
+				R3scouter:   "Oliver",
+				B1scouter:   "Emma",
+				B2scouter:   "Charlotte",
+				B3scouter:   "Amelia",
+			},
+		},
+	}
+	if len(expected.ShiftSchedule) != len(response.ShiftSchedule) {
+		t.Fatal("Expected ", expected, ", but got ", *response)
+	}
+	for i, match := range expected.ShiftSchedule {
+		if !reflect.DeepEqual(*match, *response.ShiftSchedule[i]) {
+			t.Fatal("Expected for shift schedule", i, ":", *match, ", but got:", *response.ShiftSchedule[i])
+		}
+	}
+}
+
+func TestSubmitShiftSchedule(t *testing.T) {
+	database := MockDatabase{}
+	scoutingServer := server.NewScoutingServer()
+	HandleRequests(&database, scrapeEmtpyMatchList, scoutingServer)
+	scoutingServer.Start(8080)
+	defer scoutingServer.Stop()
+
+	builder := flatbuffers.NewBuilder(1024)
+	builder.Finish((&submit_shift_schedule.SubmitShiftScheduleT{
+		ShiftSchedule: []*submit_shift_schedule.MatchAssignmentT{
+			{MatchNumber: 1,
+				R1scouter: "Bob",
+				R2scouter: "James",
+				R3scouter: "Robert",
+				B1scouter: "Alice",
+				B2scouter: "Mary",
+				B3scouter: "Patricia"},
+		},
+	}).Pack(builder))
+
+	_, err := debug.SubmitShiftSchedule("http://localhost:8080", builder.FinishedBytes())
+	if err != nil {
+		t.Fatal("Failed to submit shift schedule: ", err)
+	}
+
+	expected := []db.Shift{
+		{MatchNumber: 1,
+			R1scouter: "Bob",
+			R2scouter: "James",
+			R3scouter: "Robert",
+			B1scouter: "Alice",
+			B2scouter: "Mary",
+			B3scouter: "Patricia"},
+	}
+	if !reflect.DeepEqual(expected, database.shiftSchedule) {
+		t.Fatal("Expected ", expected, ", but got:", database.shiftSchedule)
+	}
+}
+
 // Validates that we can download the schedule from The Blue Alliance.
 func TestRefreshMatchList(t *testing.T) {
 	scrapeMockSchedule := func(int32, string) ([]scraping.Match, error) {
@@ -433,9 +543,10 @@
 // needed for your tests.
 
 type MockDatabase struct {
-	matches []db.Match
-	stats   []db.Stats
-	notes   []db.NotesData
+	matches       []db.Match
+	stats         []db.Stats
+	notes         []db.NotesData
+	shiftSchedule []db.Shift
 }
 
 func (database *MockDatabase) AddToMatch(match db.Match) error {
@@ -488,6 +599,19 @@
 	return nil
 }
 
+func (database *MockDatabase) AddToShift(data db.Shift) error {
+	database.shiftSchedule = append(database.shiftSchedule, data)
+	return nil
+}
+
+func (database *MockDatabase) ReturnAllShifts() ([]db.Shift, error) {
+	return database.shiftSchedule, nil
+}
+
+func (database *MockDatabase) QueryAllShifts(int) ([]db.Shift, error) {
+	return []db.Shift{}, nil
+}
+
 // Returns an empty match list from the fake The Blue Alliance scraping.
 func scrapeEmtpyMatchList(int32, string) ([]scraping.Match, error) {
 	return nil, nil
diff --git a/scouting/www/index_html_generator.py b/scouting/www/index_html_generator.py
index 3b057fd..bc0e63d 100644
--- a/scouting/www/index_html_generator.py
+++ b/scouting/www/index_html_generator.py
@@ -5,9 +5,11 @@
 import sys
 from pathlib import Path
 
+
 def compute_sha256(filepath):
     return hashlib.sha256(filepath.read_bytes()).hexdigest()
 
+
 def main(argv):
     parser = argparse.ArgumentParser()
     parser.add_argument("--template", type=str)
@@ -20,9 +22,9 @@
     bundle_sha256 = compute_sha256(bundle_path)
 
     output = template.format(
-        MAIN_BUNDLE_FILE = f"/sha256/{bundle_sha256}/{bundle_path.name}",
-    )
+        MAIN_BUNDLE_FILE=f"/sha256/{bundle_sha256}/{bundle_path.name}", )
     Path(args.output).write_text(output)
 
+
 if __name__ == "__main__":
     sys.exit(main(sys.argv))
diff --git a/third_party/autocxx/engine/src/conversion/codegen_rs/mod.rs b/third_party/autocxx/engine/src/conversion/codegen_rs/mod.rs
index 5dd4cbb..9bea2e0 100644
--- a/third_party/autocxx/engine/src/conversion/codegen_rs/mod.rs
+++ b/third_party/autocxx/engine/src/conversion/codegen_rs/mod.rs
@@ -1042,6 +1042,7 @@
                         extern_c_mod_items: vec![
                             self.generate_cxxbridge_type(name, false, doc_attrs)
                         ],
+                        bridge_items: create_impl_items(&id, movable, destroyable, self.config),
                         bindgen_mod_items,
                         materializations,
                         ..Default::default()
diff --git a/third_party/autocxx/gen/cmd/src/main.rs b/third_party/autocxx/gen/cmd/src/main.rs
index 8b109c3..f8db241 100644
--- a/third_party/autocxx/gen/cmd/src/main.rs
+++ b/third_party/autocxx/gen/cmd/src/main.rs
@@ -74,7 +74,11 @@
 instead of
   --gen-rs-include
 and you will need to give AUTOCXX_RS_JSON_ARCHIVE when building the Rust code.
-The output filename is named gen.rs.json.
+The output filename is named gen.rs.json. AUTOCXX_RS_JSON_ARCHIVE should be set
+to the path to gen.rs.json. It may optionally have multiple paths separated the
+way as the PATH environment variable for the current platform, see
+[`std::env::split_paths`] for details. The first path which is successfully
+opened will be used.
 
 This teaches rustc (and the autocxx macro) that all the different Rust bindings
 for multiple different autocxx macros have been archived into this single file.
diff --git a/third_party/autocxx/gen/cmd/tests/cmd_test.rs b/third_party/autocxx/gen/cmd/tests/cmd_test.rs
index 7e455a2..6fd3382 100644
--- a/third_party/autocxx/gen/cmd/tests/cmd_test.rs
+++ b/third_party/autocxx/gen/cmd/tests/cmd_test.rs
@@ -147,6 +147,58 @@
 }
 
 #[test]
+fn test_gen_archive_first_entry() -> Result<(), Box<dyn std::error::Error>> {
+    let tmp_dir = tempdir()?;
+    base_test(&tmp_dir, RsGenMode::Archive, |_| {})?;
+    File::create(tmp_dir.path().join("cxx.h"))
+        .and_then(|mut cxx_h| cxx_h.write_all(autocxx_engine::HEADER.as_bytes()))?;
+    let r = build_from_folder(
+        tmp_dir.path(),
+        &tmp_dir.path().join("demo/main.rs"),
+        vec![tmp_dir.path().join("gen.rs.json")],
+        &["gen0.cc"],
+        RsFindMode::Custom(Box::new(|path: &Path| {
+            std::env::set_var(
+                "AUTOCXX_RS_JSON_ARCHIVE",
+                std::env::join_paths([&path.join("gen.rs.json"), Path::new("/nonexistent")])
+                    .unwrap(),
+            )
+        })),
+    );
+    if KEEP_TEMPDIRS {
+        println!("Tempdir: {:?}", tmp_dir.into_path().to_str());
+    }
+    r.unwrap();
+    Ok(())
+}
+
+#[test]
+fn test_gen_archive_second_entry() -> Result<(), Box<dyn std::error::Error>> {
+    let tmp_dir = tempdir()?;
+    base_test(&tmp_dir, RsGenMode::Archive, |_| {})?;
+    File::create(tmp_dir.path().join("cxx.h"))
+        .and_then(|mut cxx_h| cxx_h.write_all(autocxx_engine::HEADER.as_bytes()))?;
+    let r = build_from_folder(
+        tmp_dir.path(),
+        &tmp_dir.path().join("demo/main.rs"),
+        vec![tmp_dir.path().join("gen.rs.json")],
+        &["gen0.cc"],
+        RsFindMode::Custom(Box::new(|path: &Path| {
+            std::env::set_var(
+                "AUTOCXX_RS_JSON_ARCHIVE",
+                std::env::join_paths([Path::new("/nonexistent"), &path.join("gen.rs.json")])
+                    .unwrap(),
+            )
+        })),
+    );
+    if KEEP_TEMPDIRS {
+        println!("Tempdir: {:?}", tmp_dir.into_path().to_str());
+    }
+    r.unwrap();
+    Ok(())
+}
+
+#[test]
 fn test_gen_multiple_in_archive() -> Result<(), Box<dyn std::error::Error>> {
     let tmp_dir = tempdir()?;
 
diff --git a/third_party/autocxx/integration-tests/src/lib.rs b/third_party/autocxx/integration-tests/src/lib.rs
index 352c8ab..f4667d5 100644
--- a/third_party/autocxx/integration-tests/src/lib.rs
+++ b/third_party/autocxx/integration-tests/src/lib.rs
@@ -57,6 +57,9 @@
     AutocxxRs,
     AutocxxRsArchive,
     AutocxxRsFile,
+    /// This just calls the callback instead of setting any environment variables. The callback
+    /// receives the path to the temporary directory.
+    Custom(Box<dyn FnOnce(&Path)>),
 }
 
 /// API to test building pre-generated files.
@@ -174,6 +177,7 @@
                 "AUTOCXX_RS_FILE",
                 self.temp_dir.path().join("gen0.include.rs"),
             ),
+            RsFindMode::Custom(f) => f(self.temp_dir.path()),
         };
         std::panic::catch_unwind(|| {
             let test_cases = trybuild::TestCases::new();
diff --git a/third_party/autocxx/integration-tests/tests/integration_test.rs b/third_party/autocxx/integration-tests/tests/integration_test.rs
index 16c792b8..75319c9 100644
--- a/third_party/autocxx/integration-tests/tests/integration_test.rs
+++ b/third_party/autocxx/integration-tests/tests/integration_test.rs
@@ -9430,6 +9430,43 @@
 }
 
 #[test]
+fn test_abstract_up_multiple_bridge() {
+    let hdr = indoc! {"
+    #include <memory>
+    class A {
+    public:
+        virtual void foo() const = 0;
+        virtual ~A() {}
+    };
+    class B : public A {
+    public:
+        void foo() const {}
+    };
+    inline std::unique_ptr<A> get_a() { return std::make_unique<B>(); }
+    "};
+    let hexathorpe = Token![#](Span::call_site());
+    let rs = quote! {
+        autocxx::include_cpp! {
+            #hexathorpe include "input.h"
+            safety!(unsafe_ffi)
+            generate!("A")
+        }
+        autocxx::include_cpp! {
+            #hexathorpe include "input.h"
+            safety!(unsafe_ffi)
+            name!(ffi2)
+            extern_cpp_type!("A", crate::ffi::A)
+            generate!("get_a")
+        }
+        fn main() {
+            let a = ffi2::get_a();
+            a.foo();
+        }
+    };
+    do_run_test_manual("", hdr, rs, None, None).unwrap();
+}
+
+#[test]
 fn test_abstract_private() {
     let hdr = indoc! {"
     #include <memory>
diff --git a/third_party/autocxx/parser/src/file_locations.rs b/third_party/autocxx/parser/src/file_locations.rs
index a113d0f..6b3c58a 100644
--- a/third_party/autocxx/parser/src/file_locations.rs
+++ b/third_party/autocxx/parser/src/file_locations.rs
@@ -95,13 +95,13 @@
                     include!( #fname );
                 }
             }
-            FileLocationStrategy::FromAutocxxRsJsonArchive(fname) => {
-                let archive = File::open(fname).unwrap_or_else(|_| panic!("Unable to open {}. This may mean you didn't run the codegen tool (autocxx_gen) before building the Rust code.", fname.to_string_lossy()));
+            FileLocationStrategy::FromAutocxxRsJsonArchive(fnames) => {
+                let archive = std::env::split_paths(fnames).flat_map(File::open).next().unwrap_or_else(|| panic!("Unable to open any of the paths listed in {}. This may mean you didn't run the codegen tool (autocxx_gen) before building the Rust code.", fnames.to_string_lossy()));
                 let multi_bindings: MultiBindings = serde_json::from_reader(archive)
                     .unwrap_or_else(|_| {
-                        panic!("Unable to interpret {} as JSON", fname.to_string_lossy())
+                        panic!("Unable to interpret {} as JSON", fnames.to_string_lossy())
                     });
-                multi_bindings.get(config).unwrap_or_else(|err| panic!("Unable to find a suitable set of bindings within the JSON archive {} ({}). This likely means that the codegen tool hasn't been rerun since some changes in your include_cpp! macro.", fname.to_string_lossy(), err))
+                multi_bindings.get(config).unwrap_or_else(|err| panic!("Unable to find a suitable set of bindings within the JSON archive {} ({}). This likely means that the codegen tool hasn't been rerun since some changes in your include_cpp! macro.", fnames.to_string_lossy(), err))
             }
         }
     }
diff --git a/third_party/cargo_raze/cargo_raze.patch b/third_party/cargo_raze/cargo_raze.patch
index f4cd02a..c6e84c8 100644
--- a/third_party/cargo_raze/cargo_raze.patch
+++ b/third_party/cargo_raze/cargo_raze.patch
@@ -11,7 +11,7 @@
 -        "@rules_rust//rust/platform:x86_64-pc-windows-msvc": "@rust_windows_x86_64//:cargo",
 -        "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": "@rust_linux_x86_64//:cargo",
 -    }),
-+    actual = "@rust//:cargo",
++    actual = "@rust__x86_64-unknown-linux-gnu_tools//:cargo",
  )
  
  alias(
@@ -23,13 +23,21 @@
 -        "@rules_rust//rust/platform:x86_64-pc-windows-msvc": "@rust_windows_x86_64//:rustc",
 -        "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": "@rust_linux_x86_64//:rustc",
 -    }),
-+    actual = "@rust//:rustc",
++    actual = "@rust__x86_64-unknown-linux-gnu_tools//:rustc",
  )
  
  sh_binary(
 
 --- third_party/zlib/BUILD.zlib.bazel	2022-02-03 01:26:46.756187851 -0800
 +++ third_party/zlib/BUILD.zlib.bazel	2022-02-03 01:26:58.048702010 -0800
+@@ -1,6 +1,7 @@
+ # Copied from https://github.com/protocolbuffers/protobuf/blob/master/third_party/zlib.BUILD
+ 
+ load("@rules_cc//cc:defs.bzl", "cc_library")
++load("@rules_rust//cargo:cargo_build_script.bzl", "cargo_dep_env")
+ 
+ licenses(["notice"])  # BSD/MIT-like license (for zlib)
+ 
 @@ -58,6 +58,8 @@ cc_library(
          "//conditions:default": [
              "-Wno-unused-variable",
@@ -39,7 +47,7 @@
          ],
      }),
      includes = ["zlib/include/"],
-@@ -28,6 +28,15 @@ genrule(
+@@ -28,6 +28,20 @@ genrule(
      srcs = _ZLIB_HEADERS,
      outs = _ZLIB_PREFIXED_HEADERS,
      cmd = "cp $(SRCS) $(@D)/zlib/include/",
@@ -47,12 +55,17 @@
  )
 +
 +genrule(
-+    name = "dep_z_include",
-+    visibility = ["//visibility:public"],
++    name = "gen_dep_z_include",
 +    outs = ["dep_z_include.env"],
 +    srcs = [":copy_public_headers"],
 +    cmd = "echo 'DEP_Z_INCLUDE=$${pwd}/'\"$$(dirname \"$$(echo \"$(locations :copy_public_headers)\" | awk '{ print $$1 }')\")\" > $@",
 +)
++
++cargo_dep_env(
++    name = "dep_z_include",
++    src = "dep_z_include.env",
++    visibility = ["//visibility:public"],
++)
  
  cc_library(
 
@@ -153,10 +166,10 @@
 +++ third_party/cargo/remote/BUILD.libz-sys-1.1.2.bazel	2022-02-04 00:45:57.151816346 -0800
 @@ -57,6 +57,8 @@ rust_library(
      # buildifier: leave-alone
-+    dep_env_files = ["@cargo_raze__zlib//:dep_z_include"],
      deps = [
          "@cargo_raze__libc__0_2_92//:libc",
 +        "@cargo_raze__zlib//:zlib",
++        "@cargo_raze__zlib//:dep_z_include",
      ] + selects.with_or({
          # cfg(target_env = "msvc")
          (
@@ -180,6 +193,14 @@
      ],
      edition = "2015",
      links = "ssh2",
+@@ -67,6 +67,7 @@ cargo_build_script(
+         "@cargo_raze__cc__1_0_67//:cc",
+         "@cargo_raze__libz_sys__1_1_2//:libz_sys",
+         "@cargo_raze__pkg_config__0_3_19//:pkg_config",
++        "@cargo_raze__zlib//:dep_z_include",
+     ] + selects.with_or({
+         # cfg(target_env = "msvc")
+         (
 
 --- impl/src/util.rs	2022-02-06 17:53:29.535707368 -0800
 +++ impl/src/util.rs	2022-02-06 17:55:22.513000536 -0800
diff --git a/third_party/flatbuffers/rust/flatbuffers/src/follow.rs b/third_party/flatbuffers/rust/flatbuffers/src/follow.rs
index d1d6483..c14fec3 100644
--- a/third_party/flatbuffers/rust/flatbuffers/src/follow.rs
+++ b/third_party/flatbuffers/rust/flatbuffers/src/follow.rs
@@ -53,3 +53,7 @@
         T::follow(buf, loc)
     }
 }
+
+pub trait FollowWith<'a> {
+    type Inner: Follow<'a>;
+}
diff --git a/third_party/flatbuffers/rust/flatbuffers/src/lib.rs b/third_party/flatbuffers/rust/flatbuffers/src/lib.rs
index bc114e6..f597ef0 100644
--- a/third_party/flatbuffers/rust/flatbuffers/src/lib.rs
+++ b/third_party/flatbuffers/rust/flatbuffers/src/lib.rs
@@ -51,7 +51,7 @@
 pub use crate::endian_scalar::{
     byte_swap_f32, byte_swap_f64, emplace_scalar, read_scalar, read_scalar_at, EndianScalar,
 };
-pub use crate::follow::{Follow, FollowStart};
+pub use crate::follow::{Follow, FollowStart, FollowWith};
 pub use crate::primitives::*;
 pub use crate::push::Push;
 pub use crate::table::{buffer_has_identifier, Table};
diff --git a/third_party/flatbuffers/src/idl_gen_rust.cpp b/third_party/flatbuffers/src/idl_gen_rust.cpp
index b15cdf5..787d03a 100644
--- a/third_party/flatbuffers/src/idl_gen_rust.cpp
+++ b/third_party/flatbuffers/src/idl_gen_rust.cpp
@@ -1644,6 +1644,10 @@
     code_ += "  }";
     code_ += "}";
     code_ += "";
+    code_ += "impl<'a, 'b> flatbuffers::FollowWith<'a> for {{STRUCT_TY}}<'b> {";
+    code_ += "  type Inner = {{STRUCT_TY}}<'a>;";
+    code_ += "}";
+    code_ += "";
     code_ += "impl<'a> {{STRUCT_TY}}<'a> {";
 
     // Generate field id constants.
diff --git a/third_party/google-glog/.bazelci/presubmit.yml b/third_party/google-glog/.bazelci/presubmit.yml
index dd13f44..9065173 100644
--- a/third_party/google-glog/.bazelci/presubmit.yml
+++ b/third_party/google-glog/.bazelci/presubmit.yml
@@ -1,17 +1,58 @@
 ---
-platforms:
-  ubuntu1404:
+tasks:
+  ubuntu1804:
+    name: "Ubuntu 18.04"
+    platform: ubuntu1804
+    build_flags:
+    - "--features=layering_check"
+    - "--copt=-Werror"
     build_targets:
-    - "..."
+    - "//..."
+    test_flags:
+    - "--features=layering_check"
+    - "--copt=-Werror"
     test_targets:
-    - "..."
-  ubuntu1604:
-    build_targets:
-    - "..."
-    test_targets:
-    - "..."
+    - "//..."
   macos:
+    name: "macOS: latest Xcode"
+    platform: macos
+    build_flags:
+    - "--features=layering_check"
+    - "--copt=-Werror"
     build_targets:
-    - "..."
+    - "//..."
+    test_flags:
+    - "--features=layering_check"
+    - "--copt=-Werror"
     test_targets:
-    - "..."
+    - "//..."
+  windows-msvc:
+    name: "Windows: MSVC 2017"
+    platform: windows
+    environment:
+      BAZEL_VC: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC"
+    build_flags:
+    - "--features=layering_check"
+    - "--copt=/WX"
+    build_targets:
+    - "//..."
+    test_flags:
+    - "--features=layering_check"
+    - "--copt=/WX"
+    test_targets:
+    - "//..."
+  windows-clang-cl:
+    name: "Windows: Clang"
+    platform: windows
+    environment:
+      BAZEL_VC: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC"
+    build_flags:
+    - "--compiler=clang-cl"
+    - "--features=layering_check"
+    build_targets:
+    - "//..."
+    test_flags:
+    - "--compiler=clang-cl"
+    - "--features=layering_check"
+    test_targets:
+    - "//..."
diff --git a/third_party/google-glog/.clang-format b/third_party/google-glog/.clang-format
new file mode 100644
index 0000000..f2dd0de
--- /dev/null
+++ b/third_party/google-glog/.clang-format
@@ -0,0 +1,168 @@
+---
+Language:        Cpp
+# BasedOnStyle:  Google
+AccessModifierOffset: -1
+AlignAfterOpenBracket: Align
+AlignConsecutiveMacros: false
+AlignConsecutiveAssignments: false
+AlignConsecutiveDeclarations: false
+AlignEscapedNewlines: Left
+AlignOperands:   true
+AlignTrailingComments: true
+AllowAllArgumentsOnNextLine: true
+AllowAllConstructorInitializersOnNextLine: true
+AllowAllParametersOfDeclarationOnNextLine: true
+AllowShortBlocksOnASingleLine: Never
+AllowShortCaseLabelsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: All
+AllowShortLambdasOnASingleLine: All
+AllowShortIfStatementsOnASingleLine: WithoutElse
+AllowShortLoopsOnASingleLine: true
+AlwaysBreakAfterDefinitionReturnType: None
+AlwaysBreakAfterReturnType: None
+AlwaysBreakBeforeMultilineStrings: true
+AlwaysBreakTemplateDeclarations: Yes
+BinPackArguments: true
+BinPackParameters: true
+BraceWrapping:
+  AfterCaseLabel:  false
+  AfterClass:      false
+  AfterControlStatement: false
+  AfterEnum:       false
+  AfterFunction:   false
+  AfterNamespace:  false
+  AfterObjCDeclaration: false
+  AfterStruct:     false
+  AfterUnion:      false
+  AfterExternBlock: false
+  BeforeCatch:     false
+  BeforeElse:      false
+  IndentBraces:    false
+  SplitEmptyFunction: true
+  SplitEmptyRecord: true
+  SplitEmptyNamespace: true
+BreakBeforeBinaryOperators: None
+BreakBeforeBraces: Attach
+BreakBeforeInheritanceComma: false
+BreakInheritanceList: BeforeColon
+BreakBeforeTernaryOperators: true
+BreakConstructorInitializersBeforeComma: false
+BreakConstructorInitializers: BeforeColon
+BreakAfterJavaFieldAnnotations: false
+BreakStringLiterals: true
+ColumnLimit:     80
+CommentPragmas:  '^ IWYU pragma:'
+CompactNamespaces: false
+ConstructorInitializerAllOnOneLineOrOnePerLine: true
+ConstructorInitializerIndentWidth: 4
+ContinuationIndentWidth: 4
+Cpp11BracedListStyle: true
+DeriveLineEnding: true
+DerivePointerAlignment: true
+DisableFormat:   false
+ExperimentalAutoDetectBinPacking: false
+FixNamespaceComments: true
+ForEachMacros:
+  - foreach
+  - Q_FOREACH
+  - BOOST_FOREACH
+IncludeBlocks:   Regroup
+IncludeCategories:
+  - Regex:           '^<ext/.*\.h>'
+    Priority:        2
+    SortPriority:    0
+  - Regex:           '^<.*\.h>'
+    Priority:        1
+    SortPriority:    0
+  - Regex:           '^<.*'
+    Priority:        2
+    SortPriority:    0
+  - Regex:           '.*'
+    Priority:        3
+    SortPriority:    0
+IncludeIsMainRegex: '([-_](test|unittest))?$'
+IncludeIsMainSourceRegex: ''
+IndentCaseLabels: true
+IndentGotoLabels: true
+IndentPPDirectives: None
+IndentWidth:     2
+IndentWrappedFunctionNames: false
+JavaScriptQuotes: Leave
+JavaScriptWrapImports: true
+KeepEmptyLinesAtTheStartOfBlocks: false
+MacroBlockBegin: ''
+MacroBlockEnd:   ''
+MaxEmptyLinesToKeep: 1
+NamespaceIndentation: None
+ObjCBinPackProtocolList: Never
+ObjCBlockIndentWidth: 2
+ObjCSpaceAfterProperty: false
+ObjCSpaceBeforeProtocolList: true
+PenaltyBreakAssignment: 2
+PenaltyBreakBeforeFirstCallParameter: 1
+PenaltyBreakComment: 300
+PenaltyBreakFirstLessLess: 120
+PenaltyBreakString: 1000
+PenaltyBreakTemplateDeclaration: 10
+PenaltyExcessCharacter: 1000000
+PenaltyReturnTypeOnItsOwnLine: 200
+PointerAlignment: Left
+RawStringFormats:
+  - Language:        Cpp
+    Delimiters:
+      - cc
+      - CC
+      - cpp
+      - Cpp
+      - CPP
+      - 'c++'
+      - 'C++'
+    CanonicalDelimiter: ''
+    BasedOnStyle:    google
+  - Language:        TextProto
+    Delimiters:
+      - pb
+      - PB
+      - proto
+      - PROTO
+    EnclosingFunctions:
+      - EqualsProto
+      - EquivToProto
+      - PARSE_PARTIAL_TEXT_PROTO
+      - PARSE_TEST_PROTO
+      - PARSE_TEXT_PROTO
+      - ParseTextOrDie
+      - ParseTextProtoOrDie
+    CanonicalDelimiter: ''
+    BasedOnStyle:    google
+ReflowComments:  true
+SortIncludes:    true
+SortUsingDeclarations: true
+SpaceAfterCStyleCast: false
+SpaceAfterLogicalNot: false
+SpaceAfterTemplateKeyword: true
+SpaceBeforeAssignmentOperators: true
+SpaceBeforeCpp11BracedList: false
+SpaceBeforeCtorInitializerColon: true
+SpaceBeforeInheritanceColon: true
+SpaceBeforeParens: ControlStatements
+SpaceBeforeRangeBasedForLoopColon: true
+SpaceInEmptyBlock: false
+SpaceInEmptyParentheses: false
+SpacesBeforeTrailingComments: 2
+SpacesInAngles:  false
+SpacesInConditionalStatement: false
+SpacesInContainerLiterals: true
+SpacesInCStyleCastParentheses: false
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+SpaceBeforeSquareBrackets: false
+Standard:        Auto
+StatementMacros:
+  - Q_UNUSED
+  - QT_REQUIRE_VERSION
+TabWidth:        8
+UseCRLF:         false
+UseTab:          Never
+...
+
diff --git a/third_party/google-glog/.clang-tidy b/third_party/google-glog/.clang-tidy
new file mode 100644
index 0000000..19082cd
--- /dev/null
+++ b/third_party/google-glog/.clang-tidy
@@ -0,0 +1,59 @@
+---
+Checks:          'clang-diagnostic-*,clang-analyzer-*,google-*'
+WarningsAsErrors: ''
+HeaderFilterRegex: ''
+AnalyzeTemporaryDtors: false
+FormatStyle:     file
+CheckOptions:
+  - key:             cert-dcl16-c.NewSuffixes
+    value:           'L;LL;LU;LLU'
+  - key:             cert-oop54-cpp.WarnOnlyIfThisHasSuspiciousField
+    value:           '0'
+  - key:             cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors
+    value:           '1'
+  - key:             cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic
+    value:           '1'
+  - key:             google-build-namespaces.HeaderFileExtensions
+    value:           ',h,hh,hpp,hxx'
+  - key:             google-global-names-in-headers.HeaderFileExtensions
+    value:           ',h,hh,hpp,hxx'
+  - key:             google-readability-braces-around-statements.ShortStatementLines
+    value:           '1'
+  - key:             google-readability-function-size.BranchThreshold
+    value:           '4294967295'
+  - key:             google-readability-function-size.LineThreshold
+    value:           '4294967295'
+  - key:             google-readability-function-size.NestingThreshold
+    value:           '4294967295'
+  - key:             google-readability-function-size.ParameterThreshold
+    value:           '4294967295'
+  - key:             google-readability-function-size.StatementThreshold
+    value:           '800'
+  - key:             google-readability-function-size.VariableThreshold
+    value:           '4294967295'
+  - key:             google-readability-namespace-comments.ShortNamespaceLines
+    value:           '10'
+  - key:             google-readability-namespace-comments.SpacesBeforeComments
+    value:           '2'
+  - key:             google-runtime-int.SignedTypePrefix
+    value:           int
+  - key:             google-runtime-int.TypeSuffix
+    value:           ''
+  - key:             google-runtime-int.UnsignedTypePrefix
+    value:           uint
+  - key:             google-runtime-references.WhiteListTypes
+    value:           ''
+  - key:             modernize-loop-convert.MaxCopySize
+    value:           '16'
+  - key:             modernize-loop-convert.MinConfidence
+    value:           reasonable
+  - key:             modernize-loop-convert.NamingStyle
+    value:           CamelCase
+  - key:             modernize-pass-by-value.IncludeStyle
+    value:           llvm
+  - key:             modernize-replace-auto-ptr.IncludeStyle
+    value:           llvm
+  - key:             modernize-use-nullptr.NullMacros
+    value:           'NULL'
+...
+
diff --git a/third_party/google-glog/.gitattributes b/third_party/google-glog/.gitattributes
new file mode 100644
index 0000000..2f6d494
--- /dev/null
+++ b/third_party/google-glog/.gitattributes
@@ -0,0 +1 @@
+*.h linguist-language=C++
diff --git a/third_party/google-glog/.github/workflows/android.yml b/third_party/google-glog/.github/workflows/android.yml
new file mode 100644
index 0000000..c372669
--- /dev/null
+++ b/third_party/google-glog/.github/workflows/android.yml
@@ -0,0 +1,60 @@
+name: Android
+
+on: [push, pull_request]
+
+jobs:
+  build-android:
+    name: NDK-C++${{matrix.std}}-${{matrix.abi}}-${{matrix.build_type}}
+    runs-on: ubuntu-latest
+    defaults:
+      run:
+        shell: bash
+    env:
+      NDK_VERSION: 25.0.8775105
+    strategy:
+      fail-fast: true
+      matrix:
+        std: [98, 11, 14, 17, 20]
+        abi: [arm64-v8a, armeabi-v7a, x86_64, x86]
+        build_type: [Debug, Release]
+
+    steps:
+      - uses: actions/checkout@v2
+
+      - name: Setup Ninja
+        uses: ashutoshvarma/setup-ninja@master
+        with:
+          version: 1.10.0
+
+      - name: Setup C++98 Environment
+        if: matrix.std == '98'
+        run: |
+          echo 'CXXFLAGS=-Wno-error=variadic-macros -Wno-error=long-long ${{env.CXXFLAGS}}' >> $GITHUB_ENV
+
+      - name: Setup NDK
+        env:
+          ANDROID_SDK_ROOT: /usr/local/lib/android/sdk
+        run: |
+          echo 'y' | ${{env.ANDROID_SDK_ROOT}}/cmdline-tools/latest/bin/sdkmanager --install 'ndk;${{env.NDK_VERSION}}'
+
+      - name: Configure
+        env:
+          CXXFLAGS: -Wall -Wextra -Wpedantic -Wsign-conversion -Wtautological-compare -Wformat-nonliteral -Wundef -Werror ${{env.CXXFLAGS}}
+        run: |
+          cmake -S . -B build_${{matrix.abi}} \
+                -DCMAKE_ANDROID_API=28 \
+                -DCMAKE_ANDROID_ARCH_ABI=${{matrix.abi}} \
+                -DCMAKE_ANDROID_NDK=/usr/local/lib/android/sdk/ndk/${{env.NDK_VERSION}} \
+                -DCMAKE_ANDROID_STL_TYPE=c++_shared \
+                -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
+                -DCMAKE_CXX_EXTENSIONS=OFF \
+                -DCMAKE_CXX_STANDARD=${{matrix.std}} \
+                -DCMAKE_CXX_STANDARD_REQUIRED=ON \
+                -DCMAKE_SYSTEM_NAME=Android \
+                -G Ninja \
+                -Werror
+
+      - name: Build
+        run: |
+          cmake --build build_${{matrix.abi}} \
+                --config ${{matrix.build_type}}
diff --git a/third_party/google-glog/.github/workflows/emscripten.yml b/third_party/google-glog/.github/workflows/emscripten.yml
new file mode 100644
index 0000000..566c67e
--- /dev/null
+++ b/third_party/google-glog/.github/workflows/emscripten.yml
@@ -0,0 +1,60 @@
+name: Emscripten
+
+on: [push, pull_request]
+
+jobs:
+  build-linux:
+    defaults:
+      run:
+        shell: bash
+    name: Emscripten-C++${{matrix.std}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.extra}}
+    runs-on: ubuntu-latest
+    container: emscripten/emsdk
+    strategy:
+      fail-fast: true
+      matrix:
+        build_type: [Release, Debug]
+        extra: [no-custom-prefix, custom-prefix]
+        lib: [static]
+        std: [98, 11, 14, 17, 20]
+
+    steps:
+      - uses: actions/checkout@v2
+
+      - name: Setup Dependencies
+        run: |
+          apt-get update
+          DEBIAN_FRONTEND=noninteractive sudo apt-get install -y \
+            cmake \
+            ninja-build
+
+      - name: Setup C++98 Environment
+        if: matrix.std == '98'
+        run: |
+          echo 'CXXFLAGS=-Wno-error=variadic-macros -Wno-error=long-long ${{env.CXXFLAGS}}' >> $GITHUB_ENV
+
+      - name: Configure
+        env:
+          CXXFLAGS: -Wall -Wextra -Wsign-conversion -Wtautological-compare -Wformat-nonliteral -Wundef -Werror -Wno-error=wasm-exception-spec ${{env.CXXFLAGS}}
+        run: |
+          cmake -S . -B build_${{matrix.build_type}} \
+            -DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} \
+            -DCMAKE_AR=$(which emar) \
+            -DCMAKE_C_COMPILER=$(which emcc) \
+            -DCMAKE_CXX_COMPILER=$(which em++) \
+            -DCMAKE_CXX_STANDARD=${{matrix.std}} \
+            -DCMAKE_CXX_STANDARD_REQUIRED=ON \
+            -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
+            -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
+            -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY \
+            -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
+            -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/install \
+            -DCMAKE_RANLIB=$(which emranlib) \
+            -DWITH_CUSTOM_PREFIX=${{matrix.extra == 'custom-prefix'}} \
+            -G Ninja \
+            -Werror
+
+      - name: Build
+        run: |
+          cmake --build build_${{matrix.build_type}} \
+                --config ${{matrix.build_type}}
diff --git a/third_party/google-glog/.github/workflows/linux.yml b/third_party/google-glog/.github/workflows/linux.yml
new file mode 100644
index 0000000..c9ac1a4
--- /dev/null
+++ b/third_party/google-glog/.github/workflows/linux.yml
@@ -0,0 +1,150 @@
+name: Linux
+
+on: [push, pull_request]
+
+jobs:
+  build-linux:
+    defaults:
+      run:
+        shell: bash
+    name: GCC-C++${{matrix.std}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.extra}}
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
+      matrix:
+        build_type: [Release, Debug]
+        extra: [no-custom-prefix, custom-prefix]
+        lib: [shared, static]
+        std: [98, 11, 14, 17, 20]
+
+    steps:
+      - uses: actions/checkout@v2
+
+      - name: Setup Dependencies
+        run: |
+          sudo apt-get update
+          DEBIAN_FRONTEND=noninteractive sudo apt-get install -y \
+            build-essential \
+            cmake \
+            lcov \
+            libgflags-dev \
+            libunwind-dev \
+            ninja-build
+
+      - name: Cache GTest
+        id: cache-gtest
+        uses: actions/cache@v2
+        with:
+          path: gtest/
+          key: ${{runner.os}}-gtest-1.11
+
+      - name: Download GTest
+        if: steps.cache-gtest.outputs.cache-hit != 'true'
+        run: |
+          wget https://github.com/google/googletest/archive/refs/tags/release-1.11.0.tar.gz
+          tar xvf release-1.11.0.tar.gz
+
+      - name: Build GTest
+        if: steps.cache-gtest.outputs.cache-hit != 'true'
+        run: |
+          cmake -S googletest-release-1.11.0 -B build-googletest \
+            -DBUILD_SHARED_LIBS=${{matrix.shared}} \
+            -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
+            -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/gtest \
+            -G Ninja
+          cmake --build build-googletest --target install
+
+      - name: Setup Environment
+        if: matrix.build_type == 'Debug'
+        run: |
+          echo 'CXXFLAGS=--coverage' >> $GITHUB_ENV
+          echo 'GTest_ROOT=${{github.workspace}}/gtest' >> $GITHUB_ENV
+
+      - name: Setup C++98 Environment
+        if: matrix.std == '98'
+        run: |
+          echo 'CXXFLAGS=-Wno-error=variadic-macros -Wno-error=long-long ${{env.CXXFLAGS}}' >> $GITHUB_ENV
+
+      - name: Configure
+        env:
+          CXXFLAGS: -Wall -Wextra -Wsign-conversion -Wtautological-compare -Wformat-nonliteral -Wundef -Werror ${{env.CXXFLAGS}}
+        run: |
+          cmake -S . -B build_${{matrix.build_type}} \
+            -DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} \
+            -DCMAKE_CXX_STANDARD=${{matrix.std}} \
+            -DCMAKE_CXX_STANDARD_REQUIRED=ON \
+            -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/install \
+            -DWITH_CUSTOM_PREFIX=${{matrix.extra == 'custom-prefix'}} \
+            -G Ninja \
+            -Werror
+
+      - name: Build
+        run: |
+          cmake --build build_${{matrix.build_type}} \
+                --config ${{matrix.build_type}}
+
+      - name: Install
+        run: |
+          cmake --build build_${{matrix.build_type}} \
+                --config ${{matrix.build_type}} \
+                --target install
+
+          cmake build_${{matrix.build_type}} \
+                -DCMAKE_INSTALL_INCLUDEDIR=${{runner.workspace}}/foo/include \
+                -DCMAKE_INSTALL_LIBDIR=${{runner.workspace}}/foo/lib \
+                -DCMAKE_INSTALL_DATAROOTDIR=${{runner.workspace}}/foo/share
+          cmake --build build_${{matrix.build_type}} \
+                --config ${{matrix.build_type}} \
+                --target install
+
+      - name: Test CMake Package (relative GNUInstallDirs)
+        run: |
+          cmake -S src/package_config_unittest/working_config \
+                -B build_${{matrix.build_type}}_package \
+                -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
+                -DCMAKE_PREFIX_PATH=${{github.workspace}}/install \
+                -G Ninja
+          cmake --build build_${{matrix.build_type}}_package \
+                --config ${{matrix.build_type}}
+
+      - name: Test CMake Package (absolute GNUInstallDirs)
+        run: |
+          cmake -S src/package_config_unittest/working_config \
+                -B build_${{matrix.build_type}}_package_foo \
+                -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
+                -DCMAKE_PREFIX_PATH=${{runner.workspace}}/foo \
+                -G Ninja
+          cmake --build build_${{matrix.build_type}}_package_foo \
+                --config ${{matrix.build_type}}
+
+      - name: Test
+        run: |
+          ctest --test-dir build_${{matrix.build_type}} -j$(nproc) --output-on-failure
+
+      - name: Generate Coverage
+        if: matrix.build_type == 'Debug'
+        run: |
+          lcov --directory . --capture --output-file coverage.info
+          lcov --remove coverage.info \
+            '${{github.workspace}}/gtest/*' \
+            '*/src/*_unittest.cc' \
+            '*/src/googletest.h' \
+            '*/src/mock-log.h' \
+            '/usr/*' \
+            --output-file coverage.info
+
+          for file in src/glog/*.h.in; do
+            name=$(basename ${file})
+            name_we=${name%.h.in}
+            sed -i "s|build_${{matrix.build_type}}/glog/${name_we}.h\$|${file}|g" coverage.info
+          done
+
+          lcov --list coverage.info
+
+      - name: Upload Coverage to Codecov
+        if: matrix.build_type == 'Debug'
+        uses: codecov/codecov-action@v2
+        with:
+          token: ${{ secrets.CODECOV_TOKEN }}
+          fail_ci_if_error: true
+          verbose: true
diff --git a/third_party/google-glog/.github/workflows/macos.yml b/third_party/google-glog/.github/workflows/macos.yml
new file mode 100644
index 0000000..9e64b09
--- /dev/null
+++ b/third_party/google-glog/.github/workflows/macos.yml
@@ -0,0 +1,83 @@
+name: macOS
+
+on: [push, pull_request]
+
+jobs:
+  build-macos:
+    name: AppleClang-C++${{matrix.std}}-${{matrix.build_type}}
+    runs-on: macos-12
+    strategy:
+      fail-fast: true
+      matrix:
+        std: [98, 11, 14, 17, 20]
+        include:
+          - generator: Ninja
+          - build_type: Debug
+
+    steps:
+      - uses: actions/checkout@v2
+
+      - name: Setup Ninja
+        uses: ashutoshvarma/setup-ninja@master
+        with:
+          version: 1.10.0
+
+      - name: Setup Dependencies
+        run: |
+          brew install lcov
+
+      - name: Setup Environment
+        if: matrix.build_type == 'Debug'
+        run: |
+          echo 'CXXFLAGS=--coverage' >> $GITHUB_ENV
+
+      - name: Configure
+        shell: bash
+        env:
+          CXXFLAGS: -Wall -Wextra -Wsign-conversion -Wtautological-compare -Wformat-nonliteral -Wundef -Werror ${{env.CXXFLAGS}}
+        run: |
+          cmake -S . -B build_${{matrix.build_type}} \
+                -DCMAKE_CXX_EXTENSIONS=OFF \
+                -DCMAKE_CXX_FLAGS_DEBUG=-pedantic-errors  \
+                -DCMAKE_CXX_FLAGS_RELEASE=-pedantic-errors \
+                -DCMAKE_CXX_STANDARD=${{matrix.std}} \
+                -DCMAKE_CXX_STANDARD_REQUIRED=ON \
+                -G "${{matrix.generator}}" \
+                -Werror
+
+      - name: Build
+        run: |
+          cmake --build build_${{matrix.build_type}} \
+                --config ${{matrix.build_type}}
+
+      - name: Test
+        run: |
+          ctest --test-dir build_${{matrix.build_type}} \
+                --output-on-failure
+
+      - name: Generate Coverage
+        if: matrix.build_type == 'Debug'
+        run: |
+          lcov --directory . --capture --output-file coverage.info
+          lcov --remove coverage.info \
+            '*/src/*_unittest.cc' \
+            '*/src/googletest.h' \
+            '*/src/mock-log.h' \
+            '*/usr/*' \
+            --output-file coverage.info
+
+          for file in src/glog/*.h.in; do
+            name=$(basename ${file})
+            name_we=${name%.h.in}
+            sed -i "" "s|${{github.workspace}}/glog/${name_we}.h\$|${file}|g" coverage.info
+          done
+
+          lcov --list coverage.info
+
+      - name: Upload Coverage to Codecov
+        if: matrix.build_type == 'Debug'
+        uses: codecov/codecov-action@v2
+        with:
+          token: ${{ secrets.CODECOV_TOKEN }}
+          fail_ci_if_error: true
+          verbose: true
diff --git a/third_party/google-glog/.github/workflows/windows.yml b/third_party/google-glog/.github/workflows/windows.yml
new file mode 100644
index 0000000..de3b05d
--- /dev/null
+++ b/third_party/google-glog/.github/workflows/windows.yml
@@ -0,0 +1,234 @@
+name: Windows
+
+on: [push, pull_request]
+
+jobs:
+  build-msvc:
+    name: ${{matrix.msvc}}-${{matrix.arch}}-C++${{matrix.std}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.extra}}
+    runs-on: ${{matrix.os}}
+    defaults:
+      run:
+        shell: powershell
+    env:
+      CL: /MP
+      CXXFLAGS: /WX /permissive-
+    strategy:
+      fail-fast: true
+      matrix:
+        arch: [Win32, x64]
+        build_type: [Debug, Release]
+        extra: [no-custom-prefix, custom-prefix]
+        lib: [shared, static]
+        msvc: [VS-16-2019, VS-17-2022]
+        # Visual Studio 17 2022 does not support C++11 and older language standard
+        std: [14, 17, 20]
+        include:
+          - msvc: VS-16-2019
+            os: windows-2019
+            generator: 'Visual Studio 16 2019'
+          - msvc: VS-17-2022
+            os: windows-2022
+            generator: 'Visual Studio 17 2022'
+
+    steps:
+      - uses: actions/checkout@v2
+
+      - name: Cache GTest
+        id: cache-gtest
+        uses: actions/cache@v2
+        with:
+          path: gtest/
+          key: ${{runner.os}}-gtest-1.11-${{matrix.lib}}-${{matrix.arch}}-${{matrix.build_type}}
+
+      - name: Download GTest
+        if: steps.cache-gtest.outputs.cache-hit != 'true'
+        run: |
+          (New-Object System.Net.WebClient).DownloadFile("https://github.com/google/googletest/archive/refs/tags/release-1.11.0.zip", "release-1.11.0.zip")
+          Expand-Archive release-1.11.0.zip .
+
+      - name: Build GTest
+        if: steps.cache-gtest.outputs.cache-hit != 'true'
+        run: |
+          cmake -S googletest-release-1.11.0 -B build-googletest `
+                -A ${{matrix.arch}} `
+                -DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} `
+                -Dgtest_force_shared_crt=ON `
+                -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/gtest
+          cmake --build build-googletest `
+                --config ${{matrix.build_type}} `
+                --target install
+
+      - name: Cache gflags
+        id: cache-gflags
+        uses: actions/cache@v2
+        with:
+          path: gflags/
+          key: ${{runner.os}}-gflags-2.2.2-${{matrix.lib}}-${{matrix.arch}}-${{matrix.build_type}}
+
+      - name: Download gflags
+        if: steps.cache-gflags.outputs.cache-hit != 'true'
+        run: |
+          (New-Object System.Net.WebClient).DownloadFile("https://github.com/gflags/gflags/archive/refs/tags/v2.2.2.zip", "v2.2.2.zip")
+          Expand-Archive v2.2.2.zip .
+
+      - name: Build gflags
+        if: steps.cache-gflags.outputs.cache-hit != 'true'
+        run: |
+          cmake -S gflags-2.2.2 -B build-gflags `
+                -A ${{matrix.arch}} `
+                -DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} `
+                -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/gflags
+          cmake --build build-gflags `
+                --config ${{matrix.build_type}} `
+                --target install
+
+      - name: Setup Environment
+        run: |
+          echo "GTest_ROOT=$((Get-Item .).FullName)/gtest" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
+          echo "gflags_ROOT=$((Get-Item .).FullName)/gflags" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
+          echo "${{github.workspace}}/gtest/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
+          echo "${{github.workspace}}/gflags/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
+
+      - name: Setup Release Environment
+        if: matrix.build_type != 'Debug'
+        run: |
+          echo "CXXFLAGS=/Zi ${{env.CXXFLAGS}}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
+
+      - name: Configure
+        run: |
+          cmake -S . -B build_${{matrix.build_type}} `
+                -A ${{matrix.arch}} `
+                -DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} `
+                -DCMAKE_CXX_EXTENSIONS=OFF `
+                -DCMAKE_CXX_STANDARD=${{matrix.std}} `
+                -DCMAKE_CXX_STANDARD_REQUIRED=ON `
+                -DCMAKE_EXE_LINKER_FLAGS='/NOIMPLIB' `
+                -DCMAKE_EXE_LINKER_FLAGS_RELEASE='/INCREMENTAL:NO /DEBUG' `
+                -DCMAKE_INSTALL_PREFIX:PATH=./install `
+                -DCMAKE_MSVC_RUNTIME_LIBRARY='MultiThreaded$<$<CONFIG:Debug>:Debug>DLL' `
+                -DWITH_CUSTOM_PREFIX=${{matrix.extra == 'custom-prefix'}} `
+                -G "${{matrix.generator}}" `
+                -Werror
+
+      - name: Build
+        run: cmake --build build_${{matrix.build_type}} `
+                   --config ${{matrix.build_type}}
+
+      - name: Test
+        env:
+          CTEST_OUTPUT_ON_FAILURE: 1
+        run: |
+          cmake --build build_${{matrix.build_type}}/ `
+                --config ${{matrix.build_type}} `
+                --target RUN_TESTS
+
+      - name: Install
+        run: |
+          cmake --build build_${{matrix.build_type}}/ `
+                --config ${{matrix.build_type}} `
+                --target install
+
+  build-mingw:
+    name: ${{matrix.sys}}-${{matrix.env}}-C++${{matrix.std}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.extra}}
+    runs-on: windows-2022
+    env:
+      BUILDDIR: 'build_${{matrix.sys}}-${{matrix.env}}-C++${{matrix.std}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.extra}}'
+    defaults:
+      run:
+        shell: msys2 {0}
+    strategy:
+      fail-fast: true
+      matrix:
+        build_type: [Debug]
+        extra: [no-custom-prefix, custom-prefix]
+        lib: [shared, static]
+        std: [98, 11, 14, 17, 20]
+        sys: [mingw32, mingw64]
+        include:
+         - sys: mingw32
+           env: i686
+         - sys: mingw64
+           env: x86_64
+
+    steps:
+      - uses: actions/checkout@v2
+      - uses: msys2/setup-msys2@v2
+        with:
+          msystem: ${{matrix.sys}}
+          install: >-
+            lcov
+            mingw-w64-${{matrix.env}}-cmake
+            mingw-w64-${{matrix.env}}-gcc
+            mingw-w64-${{matrix.env}}-gflags
+            mingw-w64-${{matrix.env}}-ninja
+
+      - name: Setup C++98 Environment
+        if: matrix.std == '98'
+        run: |
+          echo 'CXXFLAGS=-Wno-error=variadic-macros -Wno-error=long-long ${{env.CXXFLAGS}}' >> $GITHUB_ENV
+
+      - name: Setup Environment
+        if: matrix.build_type == 'Debug'
+        run: |
+          echo 'CXXFLAGS=--coverage ${{env.CXXFLAGS}}' >> $GITHUB_ENV
+
+      - name: Configure
+        env:
+          CXXFLAGS: -Wall -Wextra -Wpedantic -Wsign-conversion -Wtautological-compare -Wformat-nonliteral -Wundef -Werror ${{env.CXXFLAGS}}
+        run: |
+          cmake -S . -B build_${{matrix.build_type}}/ \
+                -DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} \
+                -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
+                -DCMAKE_CXX_EXTENSIONS=OFF \
+                -DCMAKE_CXX_STANDARD=${{matrix.std}} \
+                -DCMAKE_CXX_STANDARD_REQUIRED=ON \
+                -DCMAKE_INSTALL_PREFIX:PATH=./install \
+                -DWITH_CUSTOM_PREFIX=${{matrix.extra == 'custom-prefix'}} \
+                -G Ninja \
+                -Werror
+
+      - name: Build
+        run: |
+          cmake --build build_${{matrix.build_type}}/ --config ${{matrix.build_type}}
+
+      - name: Test
+        env:
+          CTEST_OUTPUT_ON_FAILURE: 1
+        run: |
+          cmake --build build_${{matrix.build_type}}/ --config ${{matrix.build_type}} \
+                --target test
+
+      - name: Install
+        run: |
+          cmake --build build_${{matrix.build_type}}/ \
+                --config ${{matrix.build_type}} \
+                --target install
+
+      - name: Generate Coverage
+        if: matrix.build_type == 'Debug'
+        run: |
+          lcov --directory . --capture --output-file coverage.info
+          lcov --remove coverage.info \
+            '*/install/include/*' \
+            '*/msys64/mingw32/*' \
+            '*/msys64/mingw64/*' \
+            '*/src/*_unittest.cc' \
+            '*/src/googletest.h' \
+            '*/src/mock-log.h' \
+            --output-file coverage.info
+
+          for file in src/glog/*.h.in; do
+            name=$(basename ${file})
+            name_we=${name%.h.in}
+            sed -i "s|build_${{matrix.build_type}}/glog/${name_we}.h\$|${file}|g" coverage.info
+          done
+
+          lcov --list coverage.info
+
+      - name: Upload Coverage to Codecov
+        if: matrix.build_type == 'Debug'
+        uses: codecov/codecov-action@v2
+        with:
+          token: ${{ secrets.CODECOV_TOKEN }}
+          fail_ci_if_error: true
+          verbose: true
diff --git a/third_party/google-glog/.gitignore b/third_party/google-glog/.gitignore
index 76d251f..2678271 100644
--- a/third_party/google-glog/.gitignore
+++ b/third_party/google-glog/.gitignore
@@ -1,12 +1,3 @@
-autom4te.cache
-glog-*.tar.gz
-packages/rpm-unknown
-packages/debian-*
-CMakeCache.txt
-CMakeFiles/
-*.cmake
-config.h
-*.sln
-*.vcxproj
-*.filters
+*.orig
+/build*/
 bazel-*
diff --git a/third_party/google-glog/.travis.ubuntu.sh b/third_party/google-glog/.travis.ubuntu.sh
deleted file mode 100755
index 1043f31..0000000
--- a/third_party/google-glog/.travis.ubuntu.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/bash
-set -e
-set -x
-
-uname -a
-
-cmake -H. -B_build_${TOOLCHAIN} -DCMAKE_TOOLCHAIN_FILE="${PWD}/toolchains/${TOOLCHAIN}.cmake"
-cmake --build _build_${TOOLCHAIN} -- -j4
-
-if [ "$RUN_TESTS" = true ]; then
-	case "$TOOLCHAIN" in linux-mingw*)
-		echo "copy runtime libraries needed for tests into build directory"
-		cp /usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll /usr/lib/gcc/x86_64-w64-mingw32/7.3-win32/{libstdc++-6.dll,libgcc_s_seh-1.dll} _build_${TOOLCHAIN}
-	esac
-	CTEST_OUTPUT_ON_FAILURE=1 cmake --build _build_${TOOLCHAIN} --target test
-fi
-
-
diff --git a/third_party/google-glog/.travis.yml b/third_party/google-glog/.travis.yml
deleted file mode 100644
index 911fa5e..0000000
--- a/third_party/google-glog/.travis.yml
+++ /dev/null
@@ -1,119 +0,0 @@
-sudo: required
-language: bash
-services:
-  - docker
-
-# define the build matrix
-env:
-  global:
-    - PROJECT_DIR: .
-    - TOOLCHAIN: gcc-cxx11
-    - BUILD_PACKAGES: cmake
-    - RUN_TESTS: true
-
-matrix:
-  include:
-    # Linux {
-
-    #   Ubuntu 14.04
-    - os: linux
-      env: >
-        BUILD_FLAVOR=ubuntu
-        BUILD_RELEASE=trusty
-        BUILD_ARCH=amd64
-        BUILD_PACKAGES=cmake3
-    - os: linux
-      env: >
-        BUILD_FLAVOR=ubuntu
-        BUILD_RELEASE=trusty
-        BUILD_ARCH=i386
-        BUILD_PACKAGES=cmake3
-    #   Ubuntu 16.04
-    - os: linux
-      env: >
-        BUILD_FLAVOR=ubuntu
-        BUILD_RELEASE=xenial
-        BUILD_ARCH=amd64
-    - os: linux
-      env: >
-        BUILD_FLAVOR=ubuntu
-        BUILD_RELEASE=xenial
-        BUILD_ARCH=i386
-    #   Ubuntu 18.04
-    - os: linux
-      env: >
-        BUILD_FLAVOR=ubuntu
-        BUILD_RELEASE=bionic
-        BUILD_ARCH=amd64
-        TOOLCHAIN=gcc-cxx98
-    - os: linux
-      env: >
-        BUILD_FLAVOR=ubuntu
-        BUILD_RELEASE=bionic
-        BUILD_ARCH=amd64
-    - os: linux
-      env: >
-        BUILD_FLAVOR=ubuntu
-        BUILD_RELEASE=bionic
-        BUILD_ARCH=amd64
-        TOOLCHAIN=gcc-gnuxx11
-    - os: linux
-      env: >
-        BUILD_FLAVOR=ubuntu
-        BUILD_RELEASE=bionic
-        BUILD_ARCH=amd64
-        TOOLCHAIN=gcc-cxx17
-    - os: linux
-      env: >
-        BUILD_FLAVOR=ubuntu
-        BUILD_RELEASE=bionic
-        BUILD_ARCH=amd64
-        TOOLCHAIN=clang-cxx17
-        BUILD_PACKAGES="cmake clang"
-    # } // end Linux
-
-    # Windows build with mingw-w64 on Ubuntu 18.04
-    - os: linux
-      env: >
-        BUILD_FLAVOR=ubuntu
-        BUILD_RELEASE=bionic
-        BUILD_ARCH=amd64
-        TOOLCHAIN=linux-mingw-w64-cxx11
-        BUILD_PACKAGES="cmake mingw-w64 wine-stable"
-    - os: linux
-      env: >
-        BUILD_FLAVOR=ubuntu
-        BUILD_RELEASE=bionic
-        BUILD_ARCH=amd64
-        TOOLCHAIN=linux-mingw-w64-gnuxx11
-        BUILD_PACKAGES="cmake mingw-w64 wine-stable"
-    - os: linux
-      env: >
-        BUILD_FLAVOR=ubuntu
-        BUILD_RELEASE=bionic
-        BUILD_ARCH=amd64
-        TOOLCHAIN=linux-mingw-w64-cxx17
-        BUILD_PACKAGES="cmake mingw-w64 wine-stable"
-
-before_install:
-  # use the Dockerfile.<distro>.template file for building the image with sed magic
-  - |
-    sed \
-    -e "s/@BUILD_FLAVOR@/${BUILD_FLAVOR}/g" \
-    -e "s/@BUILD_RELEASE@/${BUILD_RELEASE}/g" \
-    -e "s/@BUILD_ARCH@/${BUILD_ARCH}/g" \
-    -e "s/@BUILD_PACKAGES@/${BUILD_PACKAGES}/g" \
-    Dockerfile.$BUILD_FLAVOR.template | tee Dockerfile.$BUILD_FLAVOR.$BUILD_RELEASE.$BUILD_ARCH
-  - docker build -f Dockerfile.$BUILD_FLAVOR.$BUILD_RELEASE.$BUILD_ARCH -t glog-devel .
-
-script: |
-  # run the respective .travis.<distro>.sh script
-  docker run \
-  -e BUILD_FLAVOR="$BUILD_FLAVOR" \
-  -e BUILD_RELEASE="$BUILD_RELEASE" \
-  -e BUILD_ARCH="$BUILD_ARCH" \
-  -e PROJECT_DIR="$PROJECT_DIR" \
-  -e TOOLCHAIN="$TOOLCHAIN" \
-  -e RUN_TESTS="$RUN_TESTS" \
-  -it glog-devel ./.travis.$BUILD_FLAVOR.sh
-
diff --git a/third_party/google-glog/AUTHORS b/third_party/google-glog/AUTHORS
index 03238cb..9d711ec 100644
--- a/third_party/google-glog/AUTHORS
+++ b/third_party/google-glog/AUTHORS
@@ -13,12 +13,17 @@
 Andrew Schwartzmeyer <andrew@schwartzmeyer.com>
 Andy Ying <andy@trailofbits.com>
 Brian Silverman <bsilver16384@gmail.com>
+Dmitriy Arbitman <d.arbitman@gmail.com>
 Google Inc.
 Guillaume Dumont <dumont.guillaume@gmail.com>
+Marco Wang <m.aesophor@gmail.com>
 Michael Tanner <michael@tannertaxpro.com>
 MiniLight <MiniLightAR@Gmail.com>
 romange <romange@users.noreply.github.com>
+Roman Perepelitsa <roman.perepelitsa@gmail.com>
 Sergiu Deitsch <sergiu.deitsch@gmail.com>
 tbennun <tbennun@gmail.com>
 Teddy Reed <teddy@prosauce.org>
+Vijaymahantesh Sattigeri <vijaymahantesh016@gmail.com>
 Zhongming Qu <qzmfranklin@gmail.com>
+Zhuoran Shen <cmsflash99@gmail.com>
diff --git a/third_party/google-glog/BUILD b/third_party/google-glog/BUILD
deleted file mode 100644
index 0c41228..0000000
--- a/third_party/google-glog/BUILD
+++ /dev/null
@@ -1,5 +0,0 @@
-licenses(["notice"])
-
-load(":bazel/glog.bzl", "glog_library")
-
-glog_library()
diff --git a/third_party/google-glog/BUILD.bazel b/third_party/google-glog/BUILD.bazel
new file mode 100644
index 0000000..0acdc72
--- /dev/null
+++ b/third_party/google-glog/BUILD.bazel
@@ -0,0 +1,22 @@
+licenses(["notice"])
+
+exports_files(["COPYING"])
+
+load(":bazel/glog.bzl", "glog_library")
+
+glog_library()
+
+# platform() to build with clang-cl on Bazel CI. This is enabled with
+# the flags in .bazelci/presubmit.yml:
+#
+#   --incompatible_enable_cc_toolchain_resolution
+#   --extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows-clang-cl
+#   --extra_execution_platforms=//:x64_windows-clang-cl
+platform(
+    name = "x64_windows-clang-cl",
+    constraint_values = [
+        "@platforms//cpu:x86_64",
+        "@platforms//os:windows",
+        "@bazel_tools//tools/cpp:clang-cl",
+    ],
+)
diff --git a/third_party/google-glog/CMakeLists.txt b/third_party/google-glog/CMakeLists.txt
index dca6850..ce6daa4 100644
--- a/third_party/google-glog/CMakeLists.txt
+++ b/third_party/google-glog/CMakeLists.txt
@@ -1,54 +1,85 @@
-cmake_minimum_required (VERSION 3.0)
-
-if (POLICY CMP0042)
-  cmake_policy (SET CMP0042 NEW)
-endif (POLICY CMP0042)
-
-if (POLICY CMP0063)
-  cmake_policy (SET CMP0063 NEW)
-endif (POLICY CMP0063)
-
-project(glog VERSION 0.3.5 LANGUAGES C CXX)
+cmake_minimum_required (VERSION 3.16)
+project (glog
+  VERSION 0.7.0
+  DESCRIPTION "C++ implementation of the Google logging module"
+  HOMEPAGE_URL https://github.com/google/glog
+  LANGUAGES CXX
+)
 
 set (CPACK_PACKAGE_NAME glog)
-set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "")
+set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Google logging library")
 set (CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
 set (CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
 set (CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
 set (CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
 
-option (WITH_GFLAGS "Use gflags" ON)
-option (WITH_THREADS "Enable multithreading support" ON)
-option (WITH_TLS "Enable Thread Local Storage (TLS) support" ON)
-option (BUILD_SHARED_LIBS "Build shared libraries" OFF)
-option (PRINT_UNSYMBOLIZED_STACK_TRACES
-  "Print raw pc values on symbolization failure" OFF)
-
 list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
 
-include (CheckCSourceCompiles)
 include (CheckCXXCompilerFlag)
 include (CheckCXXSourceCompiles)
 include (CheckCXXSourceRuns)
+include (CheckCXXSymbolExists)
 include (CheckFunctionExists)
-include (CheckIncludeFile)
 include (CheckIncludeFileCXX)
 include (CheckLibraryExists)
 include (CheckStructHasMember)
-include (CheckSymbolExists)
 include (CheckTypeSize)
+include (CMakeDependentOption)
 include (CMakePackageConfigHelpers)
 include (CMakePushCheckState)
 include (CPack)
 include (CTest)
 include (DetermineGflagsNamespace)
+include (GenerateExportHeader)
+include (GetCacheVariables)
 include (GNUInstallDirs)
 
+option (BUILD_SHARED_LIBS "Build shared libraries" ON)
+option (PRINT_UNSYMBOLIZED_STACK_TRACES
+  "Print file offsets in traces instead of symbolizing" OFF)
+option (WITH_CUSTOM_PREFIX "Enable support for user-generated message prefixes" ON)
+option (WITH_GFLAGS "Use gflags" ON)
+option (WITH_GTEST "Use Google Test" ON)
+option (WITH_PKGCONFIG "Enable pkg-config support" ON)
+option (WITH_SYMBOLIZE "Enable symbolize module" ON)
+option (WITH_THREADS "Enable multithreading support" ON)
+option (WITH_TLS "Enable Thread Local Storage (TLS) support" ON)
+option (WITH_UNWIND "Enable libunwind support" ON)
+
+cmake_dependent_option (WITH_GMOCK "Use Google Mock" ON WITH_GTEST OFF)
+
+if (NOT WITH_UNWIND)
+  set (CMAKE_DISABLE_FIND_PACKAGE_Unwind ON)
+endif (NOT WITH_UNWIND)
+
+if (NOT WITH_GTEST)
+  set (CMAKE_DISABLE_FIND_PACKAGE_GTest ON)
+endif (NOT WITH_GTEST)
+
+if (NOT WITH_THREADS)
+  set (CMAKE_DISABLE_FIND_PACKAGE_Threads ON)
+endif (NOT WITH_THREADS)
+
+set (CMAKE_C_VISIBILITY_PRESET hidden)
+set (CMAKE_CXX_VISIBILITY_PRESET hidden)
+set (CMAKE_POSITION_INDEPENDENT_CODE ON)
+set (CMAKE_VISIBILITY_INLINES_HIDDEN ON)
+
 set (CMAKE_DEBUG_POSTFIX d)
 set (CMAKE_THREAD_PREFER_PTHREAD 1)
 
+find_package (GTest NO_MODULE)
+
+if (GTest_FOUND)
+  set (HAVE_LIB_GTEST 1)
+endif (GTest_FOUND)
+
+if (WITH_GMOCK AND TARGET GTest::gmock)
+  set (HAVE_LIB_GMOCK 1)
+endif (WITH_GMOCK AND TARGET GTest::gmock)
+
 if (WITH_GFLAGS)
-  find_package (gflags 2.2.0)
+  find_package (gflags 2.2.2)
 
   if (gflags_FOUND)
     set (HAVE_LIB_GFLAGS 1)
@@ -56,32 +87,36 @@
   endif (gflags_FOUND)
 endif (WITH_GFLAGS)
 
-if (WITH_THREADS)
-  find_package (Threads)
-endif (WITH_THREADS)
+find_package (Threads)
+find_package (Unwind)
 
-check_include_file (dlfcn.h HAVE_DLFCN_H)
-check_include_file (execinfo.h HAVE_EXECINFO_H)
-check_include_file (glob.h HAVE_GLOB_H)
-check_include_file (inttypes.h HAVE_INTTYPES_H)
-check_include_file (libunwind.h HAVE_LIBUNWIND_H)
-check_include_file (memory.h HAVE_MEMORY_H)
-check_include_file (pwd.h HAVE_PWD_H)
-check_include_file (stdint.h HAVE_STDINT_H)
-check_include_file (stdlib.h HAVE_STDLIB_H)
-check_include_file (string.h HAVE_STRING_H)
-check_include_file (strings.h HAVE_STRINGS_H)
-check_include_file (sys/stat.h HAVE_SYS_STAT_H)
-check_include_file (sys/syscall.h HAVE_SYS_SYSCALL_H)
-check_include_file (sys/time.h HAVE_SYS_TIME_H)
-check_include_file (sys/types.h HAVE_SYS_TYPES_H)
-check_include_file (sys/utsname.h HAVE_SYS_UTSNAME_H)
-check_include_file (syscall.h HAVE_SYSCALL_H)
-check_include_file (syslog.h HAVE_SYSLOG_H)
-check_include_file (ucontext.h HAVE_UCONTEXT_H)
-check_include_file (unistd.h HAVE_UNISTD_H)
-check_include_file (unwind.h HAVE_UNWIND_H)
-check_include_file (pwd.h HAVE_PWD_H)
+if (Unwind_FOUND)
+  set (HAVE_LIB_UNWIND 1)
+else (Unwind_FOUND)
+  # Check whether linking actually succeeds. ARM toolchains of LLVM unwind
+  # implementation do not necessarily provide the _Unwind_Backtrace function
+  # which causes the previous check to succeed but the linking to fail.
+  check_cxx_symbol_exists (_Unwind_Backtrace unwind.h HAVE__UNWIND_BACKTRACE)
+  check_cxx_symbol_exists (_Unwind_GetIP unwind.h HAVE__UNWIND_GETIP)
+endif (Unwind_FOUND)
+
+check_include_file_cxx (dlfcn.h HAVE_DLFCN_H)
+check_include_file_cxx (glob.h HAVE_GLOB_H)
+check_include_file_cxx (inttypes.h HAVE_INTTYPES_H)
+check_include_file_cxx (memory.h HAVE_MEMORY_H)
+check_include_file_cxx (pwd.h HAVE_PWD_H)
+check_include_file_cxx (stdint.h HAVE_STDINT_H)
+check_include_file_cxx (strings.h HAVE_STRINGS_H)
+check_include_file_cxx (sys/stat.h HAVE_SYS_STAT_H)
+check_include_file_cxx (sys/syscall.h HAVE_SYS_SYSCALL_H)
+check_include_file_cxx (sys/time.h HAVE_SYS_TIME_H)
+check_include_file_cxx (sys/types.h HAVE_SYS_TYPES_H)
+check_include_file_cxx (sys/utsname.h HAVE_SYS_UTSNAME_H)
+check_include_file_cxx (sys/wait.h HAVE_SYS_WAIT_H)
+check_include_file_cxx (syscall.h HAVE_SYSCALL_H)
+check_include_file_cxx (syslog.h HAVE_SYSLOG_H)
+check_include_file_cxx (ucontext.h HAVE_UCONTEXT_H)
+check_include_file_cxx (unistd.h HAVE_UNISTD_H)
 
 check_include_file_cxx ("ext/hash_map" HAVE_EXT_HASH_MAP)
 check_include_file_cxx ("ext/hash_set" HAVE_EXT_HASH_SET)
@@ -91,16 +126,22 @@
 check_include_file_cxx ("unordered_map" HAVE_UNORDERED_MAP)
 check_include_file_cxx ("unordered_set" HAVE_UNORDERED_SET)
 
-check_type_size ("unsigned __int16" HAVE___UINT16)
-check_type_size (u_int16_t HAVE_U_INT16_T)
-check_type_size (uint16_t HAVE_UINT16_T)
+check_type_size ("unsigned __int16" HAVE___UINT16 LANGUAGE CXX)
+check_type_size (mode_t HAVE_MODE_T LANGUAGE CXX)
+check_type_size (ssize_t HAVE_SSIZE_T LANGUAGE CXX)
+check_type_size (u_int16_t HAVE_U_INT16_T LANGUAGE CXX)
+check_type_size (uint16_t HAVE_UINT16_T LANGUAGE CXX)
 
 check_function_exists (dladdr HAVE_DLADDR)
 check_function_exists (fcntl HAVE_FCNTL)
 check_function_exists (pread HAVE_PREAD)
 check_function_exists (pwrite HAVE_PWRITE)
 check_function_exists (sigaction HAVE_SIGACTION)
-check_function_exists (sigaltstack HAVE_SIGALSTACK)
+check_function_exists (sigaltstack HAVE_SIGALTSTACK)
+
+check_cxx_symbol_exists (backtrace execinfo.h HAVE_EXECINFO_BACKTRACE)
+check_cxx_symbol_exists (backtrace_symbols execinfo.h
+  HAVE_EXECINFO_BACKTRACE_SYMBOLS)
 
 # NOTE gcc does not fail if you pass a non-existent -Wno-* option as an
 # argument. However, it will happily fail if you pass the corresponding -W*
@@ -112,46 +153,54 @@
 check_cxx_compiler_flag (-Wunnamed-type-template-args
     HAVE_NO_UNNAMED_TYPE_TEMPLATE_ARGS)
 
+cmake_push_check_state (RESET)
+
+if (Threads_FOUND)
+  set (CMAKE_REQUIRED_LIBRARIES Threads::Threads)
+endif (Threads_FOUND)
+
+check_cxx_symbol_exists (pthread_threadid_np "pthread.h" HAVE_PTHREAD_THREADID_NP)
+cmake_pop_check_state ()
+
 # NOTE: Cannot use check_function_exists here since >=vc-14.0 can define
 # snprintf as an inline function
-check_symbol_exists (snprintf stdio.h HAVE_SNPRINTF)
+check_cxx_symbol_exists (snprintf cstdio HAVE_SNPRINTF)
 
-check_library_exists (unwind get_static_proc_name "" HAVE_LIB_UNWIND)
 check_library_exists (dbghelp UnDecorateSymbolName "" HAVE_DBGHELP)
 
-find_library (UNWIND_LIBRARY NAMES unwind DOC "unwind library")
-mark_as_advanced (UNWIND_LIBRARY)
-
-check_c_source_compiles ("
-#include <stdlib.h>
+check_cxx_source_compiles ("
+#include <cstdlib>
 static void foo(void) __attribute__ ((unused));
 int main(void) { return 0; }
 " HAVE___ATTRIBUTE__)
 
-check_c_source_compiles ("
-#include <stdlib.h>
+check_cxx_source_compiles ("
+#include <cstdlib>
 static void foo(void) __attribute__ ((visibility(\"default\")));
 int main(void) { return 0; }
 " HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
 
-check_c_source_compiles ("
-#include <stdlib.h>
+check_cxx_source_compiles ("
+#include <cstdlib>
 static void foo(void) __attribute__ ((visibility(\"hidden\")));
 int main(void) { return 0; }
 " HAVE___ATTRIBUTE__VISIBILITY_HIDDEN)
 
-check_c_source_compiles ("
+check_cxx_source_compiles ("
 int main(void) { if (__builtin_expect(0, 0)) return 1; return 0; }
 " HAVE___BUILTIN_EXPECT)
 
-check_c_source_compiles ("
+check_cxx_source_compiles ("
 int main(void)
 {
   int a; if (__sync_val_compare_and_swap(&a, 0, 1)) return 1; return 0;
 }
 " HAVE___SYNC_VAL_COMPARE_AND_SWAP)
 
-check_c_source_compiles ("
+if (Threads_FOUND)
+  cmake_push_check_state (RESET)
+  set (CMAKE_REQUIRED_LIBRARIES Threads::Threads)
+  check_cxx_source_compiles ("
 #define _XOPEN_SOURCE 500
 #include <pthread.h>
 int main(void)
@@ -161,9 +210,11 @@
   pthread_rwlock_rdlock(&l);
   return 0;
 }
-" HAVE_RWLOCK)
+  " HAVE_RWLOCK)
+  cmake_pop_check_state ()
+endif (Threads_FOUND)
 
-check_c_source_compiles ("
+check_cxx_source_compiles ("
 __declspec(selectany) int a;
 int main(void) { return 0; }
 " HAVE___DECLSPEC)
@@ -212,6 +263,29 @@
 int main() { }
 " HAVE_ALIGNED_STORAGE)
 
+check_cxx_source_compiles ("
+#include <atomic>
+std::atomic<int> i;
+int main() { }
+" HAVE_CXX11_ATOMIC)
+
+check_cxx_source_compiles ("
+constexpr int x = 0;
+int main() { }
+" HAVE_CXX11_CONSTEXPR)
+
+check_cxx_source_compiles ("
+#include <chrono>
+std::chrono::seconds s;
+int main() { }
+" HAVE_CXX11_CHRONO)
+
+check_cxx_source_compiles ("
+#include <cstddef>
+void foo(std::nullptr_t) {}
+int main(void) { foo(nullptr); }
+" HAVE_CXX11_NULLPTR_T)
+
 if (WITH_TLS)
   # Cygwin does not support the thread attribute. Don't bother.
   if (HAVE_GCC_TLS)
@@ -249,7 +323,7 @@
   foreach (_PC_FIELD ${_PC_FIELDS})
     foreach (_PC_HEADER ${_PC_HEADERS})
       set (_TMP
-      ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/uctfield.c)
+      ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/uctfield.cpp)
       file (WRITE ${_TMP} "
 #define _GNU_SOURCE 1
 #include <${_PC_HEADER}>
@@ -278,6 +352,7 @@
 set (GOOGLE_NAMESPACE google)
 set (_START_GOOGLE_NAMESPACE_ "namespace ${GOOGLE_NAMESPACE} {")
 set (_END_GOOGLE_NAMESPACE_ "}")
+set (ac_cv_have_glog_export 1)
 
 if (HAVE___UINT16)
   set (ac_cv_have___uint16 1)
@@ -321,6 +396,18 @@
   set (ac_cv_have_uint16_t 0)
 endif (HAVE_UINT16_T)
 
+if (HAVE_SSIZE_T)
+  set (ac_cv_have_ssize_t 1)
+else (HAVE_SSIZE_T)
+  set (ac_cv_have_ssize_t 0)
+endif (HAVE_SSIZE_T)
+
+if (HAVE_MODE_T)
+  set (ac_cv_have_mode_t 1)
+else (HAVE_MODE_T)
+  set (ac_cv_have_mode_t 0)
+endif (HAVE_MODE_T)
+
 if (HAVE_UNISTD_H)
   set (ac_cv_have_unistd_h 1)
 else (HAVE_UNISTD_H)
@@ -334,6 +421,7 @@
 if (HAVE___ATTRIBUTE__)
   set (ac_cv___attribute___noreturn "__attribute__((noreturn))")
   set (ac_cv___attribute___noinline "__attribute__((noinline))")
+  set (ac_cv___attribute___printf_4_5 "__attribute__((__format__(__printf__, 4, 5)))")
 elseif (HAVE___DECLSPEC)
   set (ac_cv___attribute___noreturn "__declspec(noreturn)")
   #set (ac_cv___attribute___noinline "__declspec(noinline)")
@@ -351,52 +439,83 @@
   set (ac_cv_cxx_using_operator 0)
 endif (HAVE_USING_OPERATOR)
 
-if (HAVE_EXECINFO_H)
+if (HAVE_CXX11_CONSTEXPR)
+  set (ac_cv_cxx11_constexpr 1)
+else (HAVE_CXX11_CONSTEXPR)
+  set (ac_cv_cxx11_constexpr 0)
+endif (HAVE_CXX11_CONSTEXPR)
+
+if (HAVE_CXX11_CHRONO)
+  set (ac_cv_cxx11_chrono 1)
+else (HAVE_CXX11_CHRONO)
+  set (ac_cv_cxx11_chrono 0)
+endif (HAVE_CXX11_CHRONO)
+
+if (HAVE_CXX11_NULLPTR_T)
+  set (ac_cv_cxx11_nullptr_t 1)
+else (HAVE_CXX11_NULLPTR_T)
+  set (ac_cv_cxx11_nullptr_t 0)
+endif (HAVE_CXX11_NULLPTR_T)
+
+if (HAVE_EXECINFO_BACKTRACE AND HAVE_EXECINFO_BACKTRACE_SYMBOLS)
   set (HAVE_STACKTRACE 1)
-endif (HAVE_EXECINFO_H)
+endif (HAVE_EXECINFO_BACKTRACE AND HAVE_EXECINFO_BACKTRACE_SYMBOLS)
 
-if (WIN32 OR CYGWIN)
-  cmake_push_check_state (RESET)
-  set (CMAKE_REQUIRED_LIBRARIES DbgHelp)
+if (HAVE_CXX11_ATOMIC)
+  set (ac_cv_cxx11_atomic 1)
+else (HAVE_CXX11_ATOMIC)
+  set (ac_cv_cxx11_atomic 0)
+endif (HAVE_CXX11_ATOMIC)
 
-  check_cxx_source_runs ([=[
-  #include <windows.h>
-  #include <dbghelp.h>
-  #include <cstdlib>
+if (WITH_SYMBOLIZE)
+  if (WIN32 OR CYGWIN)
+    cmake_push_check_state (RESET)
+    set (CMAKE_REQUIRED_LIBRARIES DbgHelp)
 
-  void foobar() { }
+    check_cxx_source_runs ([=[
+    #include <windows.h>
+    #include <dbghelp.h>
+    #include <cstdlib>
 
-  int main()
-  {
-      HANDLE process = GetCurrentProcess();
+    void foobar() { }
 
-      if (!SymInitialize(process, NULL, TRUE))
-          return EXIT_FAILURE;
+    int main()
+    {
+        HANDLE process = GetCurrentProcess();
 
-      char buf[sizeof(SYMBOL_INFO) + MAX_SYM_NAME];
-      SYMBOL_INFO *symbol = reinterpret_cast<SYMBOL_INFO *>(buf);
-      symbol->SizeOfStruct = sizeof(SYMBOL_INFO);
-      symbol->MaxNameLen = MAX_SYM_NAME;
+        if (!SymInitialize(process, NULL, TRUE))
+            return EXIT_FAILURE;
 
-      void* const pc = reinterpret_cast<void*>(&foobar);
-      BOOL ret = SymFromAddr(process, reinterpret_cast<DWORD64>(pc), 0, symbol);
+        char buf[sizeof(SYMBOL_INFO) + MAX_SYM_NAME];
+        SYMBOL_INFO *symbol = reinterpret_cast<SYMBOL_INFO *>(buf);
+        symbol->SizeOfStruct = sizeof(SYMBOL_INFO);
+        symbol->MaxNameLen = MAX_SYM_NAME;
 
-      return ret ? EXIT_SUCCESS : EXIT_FAILURE;
-  }
-  ]=] HAVE_SYMBOLIZE)
+        void* const pc = reinterpret_cast<void*>(&foobar);
+        BOOL ret = SymFromAddr(process, reinterpret_cast<DWORD64>(pc), 0, symbol);
 
-  cmake_pop_check_state ()
+        return ret ? EXIT_SUCCESS : EXIT_FAILURE;
+    }
+    ]=] HAVE_SYMBOLIZE)
 
-  if (HAVE_SYMBOLIZE)
-    set (HAVE_STACKTRACE 1)
-  endif (HAVE_SYMBOLIZE)
-elseif (UNIX OR (APPLE AND HAVE_DLADDR))
-  set (HAVE_SYMBOLIZE 1)
-endif (WIN32 OR CYGWIN)
+    cmake_pop_check_state ()
+
+    if (HAVE_SYMBOLIZE)
+      set (HAVE_STACKTRACE 1)
+    endif (HAVE_SYMBOLIZE)
+  elseif (UNIX OR (APPLE AND HAVE_DLADDR))
+    set (HAVE_SYMBOLIZE 1)
+  endif (WIN32 OR CYGWIN)
+endif (WITH_SYMBOLIZE)
+
+# CMake manages symbolize availability. The definition is necessary only when
+# building the library. Switch to add_compile_definitions once we drop support
+# for CMake below version 3.12.
+add_definitions (-DGLOG_NO_SYMBOLIZE_DETECTION)
 
 check_cxx_source_compiles ("
 #include <cstdlib>
-#include <time.h>
+#include <ctime>
 int main()
 {
     time_t timep;
@@ -416,7 +535,16 @@
   set (NO_THREADS 1)
 endif (WITH_THREADS AND Threads_FOUND)
 
-set (TEST_SRC_DIR \"${CMAKE_CURRENT_SOURCE_DIR}\")
+# fopen/open on Cygwin can not handle unix-type paths like /home/....
+# therefore we translate TEST_SRC_DIR to windows-path.
+if (CYGWIN)
+  execute_process (COMMAND cygpath.exe -m ${CMAKE_CURRENT_SOURCE_DIR}
+                   OUTPUT_STRIP_TRAILING_WHITESPACE
+                   OUTPUT_VARIABLE TEST_SRC_DIR)
+  set (TEST_SRC_DIR \"${TEST_SRC_DIR}\")
+else (CYGWIN)
+  set (TEST_SRC_DIR \"${CMAKE_CURRENT_SOURCE_DIR}\")
+endif (CYGWIN)
 
 configure_file (src/config.h.cmake.in config.h)
 configure_file (src/glog/logging.h.in glog/logging.h @ONLY)
@@ -424,15 +552,54 @@
 configure_file (src/glog/stl_logging.h.in glog/stl_logging.h @ONLY)
 configure_file (src/glog/vlog_is_on.h.in glog/vlog_is_on.h @ONLY)
 
-set (CMAKE_CXX_VISIBILITY_PRESET default)
-set (CMAKE_VISIBILITY_INLINES_HIDDEN 1)
+add_compile_options ($<$<AND:$<BOOL:${HAVE_NO_UNNAMED_TYPE_TEMPLATE_ARGS}>,$<NOT:$<CXX_COMPILER_ID:GNU>>>:-Wno-unnamed-type-template-args>)
+
+set (_glog_CMake_BINDIR ${CMAKE_INSTALL_BINDIR})
+set (_glog_CMake_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR})
+set (_glog_CMake_LIBDIR ${CMAKE_INSTALL_LIBDIR})
+set (_glog_CMake_INSTALLDIR ${_glog_CMake_LIBDIR}/cmake/glog)
+
+set (_glog_CMake_DIR glog/cmake)
+set (_glog_CMake_DATADIR ${CMAKE_INSTALL_DATAROOTDIR}/${_glog_CMake_DIR})
+set (_glog_BINARY_CMake_DATADIR
+  ${CMAKE_CURRENT_BINARY_DIR}/${_glog_CMake_DATADIR})
+
+# Add additional CMake find modules here.
+set (_glog_CMake_MODULES)
+
+if (Unwind_FOUND)
+  # Copy the module only if libunwind is actually used.
+  list (APPEND _glog_CMake_MODULES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindUnwind.cmake)
+endif (Unwind_FOUND)
+
+# Generate file name for each module in the binary directory
+foreach (_file ${_glog_CMake_MODULES})
+  get_filename_component (_module "${_file}" NAME)
+
+  list (APPEND _glog_BINARY_CMake_MODULES
+    ${_glog_BINARY_CMake_DATADIR}/${_module})
+endforeach (_file)
+
+if (_glog_CMake_MODULES)
+  # Copy modules to binary directory during the build
+  add_custom_command (OUTPUT ${_glog_BINARY_CMake_MODULES}
+    COMMAND ${CMAKE_COMMAND} -E make_directory
+    ${_glog_BINARY_CMake_DATADIR}
+    COMMAND ${CMAKE_COMMAND} -E copy ${_glog_CMake_MODULES}
+    ${_glog_BINARY_CMake_DATADIR}
+    DEPENDS ${_glog_CMake_MODULES}
+    COMMENT "Copying find modules..."
+  )
+endif (_glog_CMake_MODULES)
 
 set (GLOG_PUBLIC_H
+  ${CMAKE_CURRENT_BINARY_DIR}/glog/export.h
   ${CMAKE_CURRENT_BINARY_DIR}/glog/logging.h
   ${CMAKE_CURRENT_BINARY_DIR}/glog/raw_logging.h
   ${CMAKE_CURRENT_BINARY_DIR}/glog/stl_logging.h
   ${CMAKE_CURRENT_BINARY_DIR}/glog/vlog_is_on.h
   src/glog/log_severity.h
+  src/glog/platform.h
 )
 
 set (GLOG_SRCS
@@ -451,66 +618,78 @@
   src/vlog_is_on.cc
 )
 
-if (HAVE_PTHREAD OR WIN32)
+if (HAVE_PTHREAD OR WIN32 OR CYGWIN)
   list (APPEND GLOG_SRCS src/signalhandler.cc)
-endif (HAVE_PTHREAD OR WIN32)
+endif (HAVE_PTHREAD OR WIN32 OR CYGWIN)
 
-if (WIN32)
+if (CYGWIN OR WIN32)
   list (APPEND GLOG_SRCS
     src/windows/port.cc
     src/windows/port.h
   )
-endif (WIN32)
+endif (CYGWIN OR WIN32)
 
-add_compile_options ($<$<AND:$<BOOL:${HAVE_NO_UNNAMED_TYPE_TEMPLATE_ARGS}>,$<NOT:$<CXX_COMPILER_ID:GNU>>>:-Wno-unnamed-type-template-args>)
-
-add_library (glog
+add_library (glogbase OBJECT
+  ${_glog_BINARY_CMake_MODULES}
   ${GLOG_SRCS}
 )
-add_library(glog::glog ALIAS glog)
 
-set_target_properties (glog PROPERTIES POSITION_INDEPENDENT_CODE ON)
+add_library (glog
+  $<TARGET_OBJECTS:glogbase>
+)
 
-if (UNWIND_LIBRARY)
-  target_link_libraries (glog PUBLIC ${UNWIND_LIBRARY})
-endif (UNWIND_LIBRARY)
+add_library (glog::glog ALIAS glog)
+
+set (glog_libraries_options_for_static_linking)
+
+if (Unwind_FOUND)
+  target_link_libraries (glog PRIVATE unwind::unwind)
+  set (glog_libraries_options_for_static_linking "${glog_libraries_options_for_static_linking} -lunwind")
+  set (Unwind_DEPENDENCY "find_dependency (Unwind ${Unwind_VERSION})")
+endif (Unwind_FOUND)
 
 if (HAVE_DBGHELP)
-   target_link_libraries (glog PUBLIC dbghelp)
+  target_link_libraries (glog PRIVATE dbghelp)
+  set (glog_libraries_options_for_static_linking "${glog_libraries_options_for_static_linking} -ldbghelp")
 endif (HAVE_DBGHELP)
 
 if (HAVE_PTHREAD)
-  target_link_libraries (glog PUBLIC ${CMAKE_THREAD_LIBS_INIT})
+  target_link_libraries (glog PRIVATE ${CMAKE_THREAD_LIBS_INIT})
+
+  if (CMAKE_THREAD_LIBS_INIT)
+    set (glog_libraries_options_for_static_linking "${glog_libraries_options_for_static_linking} ${CMAKE_THREAD_LIBS_INIT}")
+  endif (CMAKE_THREAD_LIBS_INIT)
 endif (HAVE_PTHREAD)
 
-if (WIN32 AND HAVE_SNPRINTF)
-  set_property (SOURCE src/windows/port.cc APPEND PROPERTY COMPILE_DEFINITIONS
-    HAVE_SNPRINTF)
-endif (WIN32 AND HAVE_SNPRINTF)
-
 if (gflags_FOUND)
-  target_link_libraries (glog PUBLIC gflags)
+  # Prefer the gflags target that uses double colon convention
+  if (TARGET gflags::gflags)
+    target_link_libraries (glog PUBLIC gflags::gflags)
+  else (TARGET gflags::gflags)
+    target_link_libraries (glog PUBLIC gflags)
+  endif (TARGET gflags::gflags)
 
-  if (NOT BUILD_SHARED_LIBS)
-    # Don't use __declspec(dllexport|dllimport) if this is a static build
-    targeT_compile_definitions (glog PUBLIC GFLAGS_DLL_DECLARE_FLAG= GFLAGS_DLL_DEFINE_FLAG=)
-  endif (NOT BUILD_SHARED_LIBS)
+  set (glog_libraries_options_for_static_linking "${glog_libraries_options_for_static_linking} -lgflags")
 endif (gflags_FOUND)
 
-set_target_properties (glog PROPERTIES VERSION ${PROJECT_VERSION})
-set_target_properties (glog PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR})
+if (ANDROID)
+  target_link_libraries (glog PRIVATE log)
+  set (glog_libraries_options_for_static_linking "${glog_libraries_options_for_static_linking} -llog")
+endif (ANDROID)
 
-if (WIN32)
+set_target_properties (glog PROPERTIES VERSION ${PROJECT_VERSION})
+set_target_properties (glog PROPERTIES SOVERSION 1)
+
+if (CYGWIN OR WIN32)
   target_compile_definitions (glog PUBLIC GLOG_NO_ABBREVIATED_SEVERITIES)
-endif (WIN32)
+endif (CYGWIN OR WIN32)
+
+if (WITH_CUSTOM_PREFIX)
+  target_compile_definitions (glog PUBLIC GLOG_CUSTOM_PREFIX_SUPPORT)
+endif (WITH_CUSTOM_PREFIX)
 
 set_target_properties (glog PROPERTIES PUBLIC_HEADER "${GLOG_PUBLIC_H}")
 
-set (_glog_CMake_BINDIR ${CMAKE_INSTALL_BINDIR})
-set (_glog_CMake_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR})
-set (_glog_CMake_LIBDIR ${CMAKE_INSTALL_LIBDIR})
-set (_glog_CMake_INSTALLDIR ${_glog_CMake_LIBDIR}/cmake/glog)
-
 target_include_directories (glog BEFORE PUBLIC
   "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
   "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>"
@@ -518,49 +697,106 @@
   PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
   PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
 
-if (WIN32)
+if (CYGWIN OR WIN32)
+  target_include_directories (glogbase PUBLIC
+    "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/windows>"
+    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/windows)
+
   target_include_directories (glog PUBLIC
     "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/windows>"
     PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/windows)
-endif (WIN32)
+endif (CYGWIN OR WIN32)
 
-set_target_properties (glog PROPERTIES DEFINE_SYMBOL LIBGLOG_EXPORTS)
+set_target_properties (glog PROPERTIES DEFINE_SYMBOL GOOGLE_GLOG_IS_A_DLL)
 
-if (NOT BUILD_SHARED_LIBS)
-  target_compile_definitions (glog PUBLIC GOOGLE_GLOG_DLL_DECL=)
-else (NOT BUILD_SHARED_LIBS)
-  target_compile_definitions (glog PRIVATE GOOGLE_GLOG_IS_A_DLL=1)
+target_include_directories (glogbase PUBLIC
+  $<TARGET_PROPERTY:glog,INCLUDE_DIRECTORIES>)
+target_compile_definitions (glogbase PUBLIC
+  $<TARGET_PROPERTY:glog,COMPILE_DEFINITIONS>
+  PRIVATE GOOGLE_GLOG_IS_A_DLL)
 
-  if (HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
-    set (_EXPORT "__attribute__((visibility(\"default\")))")
-    set (_IMPORT "")
-  elseif (HAVE___DECLSPEC)
-    set (_EXPORT "__declspec(dllexport)")
-    set (_IMPORT "__declspec(dllimport)")
-  endif (HAVE___ATTRIBUTE__VISIBILITY_DEFAULT)
+generate_export_header (glog
+  EXPORT_MACRO_NAME GLOG_EXPORT
+  EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/glog/export.h)
 
-  target_compile_definitions (glog PRIVATE
-    "GOOGLE_GLOG_DLL_DECL=${_EXPORT}")
-  target_compile_definitions (glog INTERFACE
-    "GOOGLE_GLOG_DLL_DECL=${_IMPORT}")
-  target_compile_definitions (glog INTERFACE
-    "GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS=${_IMPORT}")
-endif (NOT BUILD_SHARED_LIBS)
+string (STRIP "${glog_libraries_options_for_static_linking}" glog_libraries_options_for_static_linking)
+
+if (WITH_PKGCONFIG)
+  set (VERSION ${PROJECT_VERSION})
+  set (prefix ${CMAKE_INSTALL_PREFIX})
+  set (exec_prefix ${CMAKE_INSTALL_FULL_BINDIR})
+  set (libdir ${CMAKE_INSTALL_FULL_LIBDIR})
+  set (includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
+
+  configure_file (
+    "${PROJECT_SOURCE_DIR}/libglog.pc.in"
+    "${PROJECT_BINARY_DIR}/libglog.pc"
+    @ONLY
+  )
+
+  unset (VERSION)
+  unset (prefix)
+  unset (exec_prefix)
+  unset (libdir)
+  unset (includedir)
+endif (WITH_PKGCONFIG)
 
 # Unit testing
 
 if (BUILD_TESTING)
+  add_library (glogtest STATIC
+    $<TARGET_OBJECTS:glogbase>
+  )
+
+  target_include_directories (glogtest PUBLIC
+    $<TARGET_PROPERTY:glog,INCLUDE_DIRECTORIES>)
+  target_compile_definitions (glogtest PUBLIC
+    $<TARGET_PROPERTY:glog,COMPILE_DEFINITIONS> GLOG_STATIC_DEFINE)
+  target_link_libraries (glogtest PUBLIC
+    $<TARGET_PROPERTY:glog,LINK_LIBRARIES>)
+
+  set (_GLOG_TEST_LIBS glogtest)
+
+  if (HAVE_LIB_GTEST)
+    list (APPEND _GLOG_TEST_LIBS GTest::gtest)
+  endif (HAVE_LIB_GTEST)
+
+  if (HAVE_LIB_GMOCK)
+    list (APPEND _GLOG_TEST_LIBS GTest::gmock)
+  endif (HAVE_LIB_GMOCK)
+
   add_executable (logging_unittest
     src/logging_unittest.cc
   )
 
-  target_link_libraries (logging_unittest PRIVATE glog)
+  target_link_libraries (logging_unittest PRIVATE ${_GLOG_TEST_LIBS})
+
+  if (WITH_CUSTOM_PREFIX)
+    add_executable (logging_custom_prefix_unittest
+      src/logging_custom_prefix_unittest.cc
+    )
+
+    target_link_libraries (logging_custom_prefix_unittest PRIVATE ${_GLOG_TEST_LIBS})
+
+    add_test (NAME logging_custom_prefix
+              COMMAND logging_custom_prefix_unittest)
+
+    # FIXME: Skip flaky test
+    set_tests_properties (logging_custom_prefix PROPERTIES SKIP_REGULAR_EXPRESSION
+      "Check failed: time_ns within LogTimes::LOG_PERIOD_TOL_NS of LogTimes::LOG_PERIOD_NS")
+
+    if (APPLE)
+      # FIXME: Skip flaky test
+      set_property (TEST logging_custom_prefix APPEND PROPERTY SKIP_REGULAR_EXPRESSION
+        "unexpected new.*PASS\nTest with golden file failed. We'll try to show the diff:")
+    endif (APPLE)
+  endif (WITH_CUSTOM_PREFIX)
 
   add_executable (stl_logging_unittest
     src/stl_logging_unittest.cc
   )
 
-  target_link_libraries (stl_logging_unittest PRIVATE glog)
+  target_link_libraries (stl_logging_unittest PRIVATE ${_GLOG_TEST_LIBS})
 
   if (HAVE_NO_DEPRECATED)
     set_property (TARGET stl_logging_unittest APPEND PROPERTY COMPILE_OPTIONS
@@ -592,47 +828,62 @@
       src/symbolize_unittest.cc
     )
 
-    target_link_libraries (symbolize_unittest PRIVATE glog)
+    target_link_libraries (symbolize_unittest PRIVATE ${_GLOG_TEST_LIBS})
   endif (HAVE_SYMBOLIZE)
 
   add_executable (demangle_unittest
     src/demangle_unittest.cc
   )
 
-  target_link_libraries (demangle_unittest PRIVATE glog)
+  target_link_libraries (demangle_unittest PRIVATE ${_GLOG_TEST_LIBS})
 
   if (HAVE_STACKTRACE)
     add_executable (stacktrace_unittest
       src/stacktrace_unittest.cc
     )
 
-    target_link_libraries (stacktrace_unittest PRIVATE glog)
+    target_link_libraries (stacktrace_unittest PRIVATE ${_GLOG_TEST_LIBS})
   endif (HAVE_STACKTRACE)
 
   add_executable (utilities_unittest
     src/utilities_unittest.cc
   )
 
-  target_link_libraries (utilities_unittest PRIVATE glog)
+  target_link_libraries (utilities_unittest PRIVATE ${_GLOG_TEST_LIBS})
 
   if (HAVE_STACKTRACE AND HAVE_SYMBOLIZE)
     add_executable (signalhandler_unittest
       src/signalhandler_unittest.cc
     )
 
-    target_link_libraries (signalhandler_unittest PRIVATE glog)
+    target_link_libraries (signalhandler_unittest PRIVATE ${_GLOG_TEST_LIBS})
   endif (HAVE_STACKTRACE AND HAVE_SYMBOLIZE)
 
   add_test (NAME demangle COMMAND demangle_unittest)
   add_test (NAME logging COMMAND logging_unittest)
 
+  set_tests_properties (logging PROPERTIES TIMEOUT 30)
+  # MacOS diff is not deterministic: use the output to determine whether the
+  # test passed.
+  set_tests_properties (logging PROPERTIES PASS_REGULAR_EXPRESSION ".*\nPASS\n.*")
+
+  # FIXME: Skip flaky test
+  set_tests_properties (logging PROPERTIES SKIP_REGULAR_EXPRESSION
+    "Check failed: time_ns within LogTimes::LOG_PERIOD_TOL_NS of LogTimes::LOG_PERIOD_NS")
+
+  if (APPLE)
+    # FIXME: Skip flaky test
+    set_property (TEST logging APPEND PROPERTY SKIP_REGULAR_EXPRESSION
+      "unexpected new.*PASS\nTest with golden file failed. We'll try to show the diff:")
+  endif (APPLE)
+
   if (TARGET signalhandler_unittest)
     add_test (NAME signalhandler COMMAND signalhandler_unittest)
   endif (TARGET signalhandler_unittest)
 
   if (TARGET stacktrace_unittest)
     add_test (NAME stacktrace COMMAND stacktrace_unittest)
-    set_tests_properties(stacktrace PROPERTIES TIMEOUT 30)
+    set_tests_properties (stacktrace PROPERTIES TIMEOUT 30)
   endif (TARGET stacktrace_unittest)
 
   add_test (NAME stl_logging COMMAND stl_logging_unittest)
@@ -640,6 +891,122 @@
   if (TARGET symbolize_unittest)
     add_test (NAME symbolize COMMAND symbolize_unittest)
   endif (TARGET symbolize_unittest)
+
+  if (HAVE_LIB_GMOCK)
+    add_executable (mock-log_unittest
+      src/mock-log_unittest.cc
+      src/mock-log.h
+    )
+
+    target_link_libraries (mock-log_unittest PRIVATE ${_GLOG_TEST_LIBS})
+
+    add_test (NAME mock-log COMMAND mock-log_unittest)
+  endif (HAVE_LIB_GMOCK)
+
+  # Generate an initial cache
+
+  get_cache_variables (_CACHEVARS)
+
+  set (_INITIAL_CACHE
+    ${CMAKE_CURRENT_BINARY_DIR}/test_package_config/glog_package_config_initial_cache.cmake)
+
+  # Package config test
+
+  add_test (NAME cmake_package_config_init COMMAND ${CMAKE_COMMAND}
+    -DTEST_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}/test_package_config
+    -DINITIAL_CACHE=${_INITIAL_CACHE}
+    -DCACHEVARS=${_CACHEVARS}
+    -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestInitPackageConfig.cmake
+  )
+
+  add_test (NAME cmake_package_config_generate COMMAND ${CMAKE_COMMAND}
+    -DGENERATOR=${CMAKE_GENERATOR}
+    -DGENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM}
+    -DGENERATOR_TOOLSET=${CMAKE_GENERATOR_TOOLSET}
+    -DINITIAL_CACHE=${_INITIAL_CACHE}
+    -DPACKAGE_DIR=${CMAKE_CURRENT_BINARY_DIR}
+    -DPATH=$ENV{PATH}
+    -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}/src/package_config_unittest/working_config
+    -DTEST_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}/test_package_config/working_config
+    -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestPackageConfig.cmake
+  )
+
+  add_test (NAME cmake_package_config_build COMMAND
+    ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/test_package_config/working_config
+                     --config $<CONFIG>
+  )
+
+  add_test (NAME cmake_package_config_cleanup COMMAND ${CMAKE_COMMAND} -E
+    remove_directory
+    ${CMAKE_CURRENT_BINARY_DIR}/test_package_config
+  )
+
+  # Fixtures setup
+  set_tests_properties (cmake_package_config_init PROPERTIES FIXTURES_SETUP
+    cmake_package_config)
+  set_tests_properties (cmake_package_config_generate PROPERTIES FIXTURES_SETUP
+    cmake_package_config_working)
+
+  # Fixtures cleanup
+  set_tests_properties (cmake_package_config_cleanup PROPERTIES FIXTURES_CLEANUP
+    cmake_package_config)
+
+  # Fixture requirements
+  set_tests_properties (cmake_package_config_generate PROPERTIES
+    FIXTURES_REQUIRED cmake_package_config)
+  set_tests_properties (cmake_package_config_build PROPERTIES
+    FIXTURES_REQUIRED "cmake_package_config;cmake_package_config_working")
+
+  add_executable (cleanup_immediately_unittest
+    src/cleanup_immediately_unittest.cc)
+
+  target_link_libraries (cleanup_immediately_unittest PRIVATE ${_GLOG_TEST_LIBS})
+
+  add_executable (cleanup_with_absolute_prefix_unittest
+    src/cleanup_with_absolute_prefix_unittest.cc)
+
+  target_link_libraries (cleanup_with_absolute_prefix_unittest PRIVATE ${_GLOG_TEST_LIBS})
+
+  add_executable (cleanup_with_relative_prefix_unittest
+    src/cleanup_with_relative_prefix_unittest.cc)
+
+  target_link_libraries (cleanup_with_relative_prefix_unittest PRIVATE ${_GLOG_TEST_LIBS})
+
+  set (CLEANUP_LOG_DIR ${CMAKE_CURRENT_BINARY_DIR}/cleanup_tests)
+
+  add_test (NAME cleanup_init COMMAND
+    ${CMAKE_COMMAND} -E make_directory ${CLEANUP_LOG_DIR})
+  add_test (NAME cleanup_logdir COMMAND
+    ${CMAKE_COMMAND} -E remove_directory ${CLEANUP_LOG_DIR})
+  add_test (NAME cleanup_immediately COMMAND
+    ${CMAKE_COMMAND}
+    -DLOGCLEANUP=$<TARGET_FILE:cleanup_immediately_unittest>
+    # NOTE The trailing slash is important
+    -DTEST_DIR=${CLEANUP_LOG_DIR}/
+    -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/RunCleanerTest1.cmake
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+  add_test (NAME cleanup_with_absolute_prefix COMMAND
+    ${CMAKE_COMMAND}
+    -DLOGCLEANUP=$<TARGET_FILE:cleanup_with_absolute_prefix_unittest>
+    -DTEST_DIR=${CMAKE_CURRENT_BINARY_DIR}/
+    -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/RunCleanerTest2.cmake
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+  add_test (NAME cleanup_with_relative_prefix COMMAND
+    ${CMAKE_COMMAND}
+    -DLOGCLEANUP=$<TARGET_FILE:cleanup_with_relative_prefix_unittest>
+    -DTEST_DIR=${CMAKE_CURRENT_BINARY_DIR}/
+    -DTEST_SUBDIR=test_subdir/
+    -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/RunCleanerTest3.cmake
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+
+  # Fixtures setup
+  set_tests_properties (cleanup_init PROPERTIES FIXTURES_SETUP logcleanuptest)
+  ## Fixtures cleanup
+  set_tests_properties (cleanup_logdir PROPERTIES FIXTURES_CLEANUP logcleanuptest)
+  # Fixture requirements
+  set_tests_properties (cleanup_immediately PROPERTIES FIXTURES_REQUIRED logcleanuptest)
+  set_tests_properties (cleanup_with_absolute_prefix PROPERTIES FIXTURES_REQUIRED logcleanuptest)
+  set_tests_properties (cleanup_with_relative_prefix PROPERTIES FIXTURES_REQUIRED logcleanuptest)
 endif (BUILD_TESTING)
 
 install (TARGETS glog
@@ -649,6 +1016,13 @@
   LIBRARY DESTINATION ${_glog_CMake_LIBDIR}
   ARCHIVE DESTINATION ${_glog_CMake_LIBDIR})
 
+if (WITH_PKGCONFIG)
+  install (
+    FILES "${PROJECT_BINARY_DIR}/libglog.pc"
+    DESTINATION "${_glog_CMake_LIBDIR}/pkgconfig"
+  )
+endif (WITH_PKGCONFIG)
+
 set (glog_CMake_VERSION 3.0)
 
 if (gflags_FOUND)
@@ -669,16 +1043,60 @@
   INSTALL_DESTINATION ${_glog_CMake_INSTALLDIR}
   NO_CHECK_REQUIRED_COMPONENTS_MACRO)
 
-write_basic_package_version_file (glog-config-version.cmake VERSION
-  ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion)
+write_basic_package_version_file (
+  ${CMAKE_CURRENT_BINARY_DIR}/glog-config-version.cmake
+  COMPATIBILITY SameMajorVersion)
 
 export (TARGETS glog NAMESPACE glog:: FILE glog-targets.cmake)
 export (PACKAGE glog)
 
+get_filename_component (_PREFIX "${CMAKE_INSTALL_PREFIX}" ABSOLUTE)
+
+# Directory containing the find modules relative to the config install
+# directory.
+file (RELATIVE_PATH glog_REL_CMake_MODULES
+  ${_PREFIX}/${_glog_CMake_INSTALLDIR}
+  ${_PREFIX}/${_glog_CMake_DATADIR}/glog-modules.cmake)
+
+get_filename_component (glog_REL_CMake_DATADIR ${glog_REL_CMake_MODULES}
+  DIRECTORY)
+
+set (glog_FULL_CMake_DATADIR
+  ${CMAKE_CURRENT_BINARY_DIR}/${_glog_CMake_DATADIR})
+
+configure_file (glog-modules.cmake.in
+  ${CMAKE_CURRENT_BINARY_DIR}/glog-modules.cmake @ONLY)
+
+install (CODE
+"
+set (glog_FULL_CMake_DATADIR \"\\\${CMAKE_CURRENT_LIST_DIR}/${glog_REL_CMake_DATADIR}\")
+set (glog_DATADIR_DESTINATION ${_glog_CMake_INSTALLDIR})
+
+if (NOT IS_ABSOLUTE ${_glog_CMake_INSTALLDIR})
+  set (glog_DATADIR_DESTINATION \"\${CMAKE_INSTALL_PREFIX}/\${glog_DATADIR_DESTINATION}\")
+endif (NOT IS_ABSOLUTE ${_glog_CMake_INSTALLDIR})
+
+configure_file (\"${CMAKE_CURRENT_SOURCE_DIR}/glog-modules.cmake.in\"
+  \"${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/glog-modules.cmake\" @ONLY)
+file (INSTALL
+  \"${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/glog-modules.cmake\"
+  DESTINATION
+  \"\${glog_DATADIR_DESTINATION}\")
+"
+  COMPONENT Development
+)
+
 install (FILES
   ${CMAKE_CURRENT_BINARY_DIR}/glog-config.cmake
   ${CMAKE_CURRENT_BINARY_DIR}/glog-config-version.cmake
   DESTINATION ${_glog_CMake_INSTALLDIR})
 
+# Find modules in share/glog/cmake
+install (DIRECTORY ${_glog_BINARY_CMake_DATADIR}
+  DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/glog
+  COMPONENT Development
+  FILES_MATCHING PATTERN "*.cmake"
+)
+
 install (EXPORT glog-targets NAMESPACE glog:: DESTINATION
   ${_glog_CMake_INSTALLDIR})
diff --git a/third_party/google-glog/CONTRIBUTING.md b/third_party/google-glog/CONTRIBUTING.md
deleted file mode 100644
index 43de4c9..0000000
--- a/third_party/google-glog/CONTRIBUTING.md
+++ /dev/null
@@ -1,58 +0,0 @@
-# How to contribute #
-
-We'd love to accept your patches and contributions to this project.  There are
-a just a few small guidelines you need to follow.
-
-
-## Contributor License Agreement ##
-
-Contributions to any Google project must be accompanied by a Contributor
-License Agreement.  This is not a copyright **assignment**, it simply gives
-Google permission to use and redistribute your contributions as part of the
-project.
-
-  * If you are an individual writing original source code and you're sure you
-    own the intellectual property, then you'll need to sign an [individual
-    CLA][].
-
-  * If you work for a company that wants to allow you to contribute your work,
-    then you'll need to sign a [corporate CLA][].
-
-You generally only need to submit a CLA once, so if you've already submitted
-one (even if it was for a different project), you probably don't need to do it
-again.
-
-[individual CLA]: https://developers.google.com/open-source/cla/individual
-[corporate CLA]: https://developers.google.com/open-source/cla/corporate
-
-Once your CLA is submitted (or if you already submitted one for
-another Google project), make a commit adding yourself to the
-[AUTHORS][] and [CONTRIBUTORS][] files. This commit can be part
-of your first [pull request][].
-
-[AUTHORS]: AUTHORS
-[CONTRIBUTORS]: CONTRIBUTORS
-
-
-## Submitting a patch ##
-
-  1. It's generally best to start by opening a new issue describing the bug or
-     feature you're intending to fix.  Even if you think it's relatively minor,
-     it's helpful to know what people are working on.  Mention in the initial
-     issue that you are planning to work on that bug or feature so that it can
-     be assigned to you.
-
-  1. Follow the normal process of [forking][] the project, and setup a new
-     branch to work in.  It's important that each group of changes be done in
-     separate branches in order to ensure that a pull request only includes the
-     commits related to that bug or feature.
-
-  1. Do your best to have [well-formed commit messages][] for each change.
-     This provides consistency throughout the project, and ensures that commit
-     messages are able to be formatted properly by various git tools.
-
-  1. Finally, push the commits to your fork and submit a [pull request][].
-
-[forking]: https://help.github.com/articles/fork-a-repo
-[well-formed commit messages]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
-[pull request]: https://help.github.com/articles/creating-a-pull-request
diff --git a/third_party/google-glog/CONTRIBUTORS b/third_party/google-glog/CONTRIBUTORS
index 432e91b..05cb688 100644
--- a/third_party/google-glog/CONTRIBUTORS
+++ b/third_party/google-glog/CONTRIBUTORS
@@ -26,19 +26,27 @@
 Abhishek Parmar <abhishek@orng.net>
 Andrew Schwartzmeyer <andrew@schwartzmeyer.com>
 Andy Ying <andy@trailofbits.com>
+Bret McKee <bretmckee@google.com>
 Brian Silverman <bsilver16384@gmail.com>
+Dmitriy Arbitman <d.arbitman@gmail.com>
 Fumitoshi Ukai <ukai@google.com>
 Guillaume Dumont <dumont.guillaume@gmail.com>
 Håkan L. S. Younes <hyounes@google.com>
 Ivan Penkov <ivanpe@google.com>
+Jacob Trimble <modmaker@google.com>
 Jim Ray <jimray@google.com>
+Marco Wang <m.aesophor@gmail.com>
+Michael Darr <mdarr@matician.com>
 Michael Tanner <michael@tannertaxpro.com>
 MiniLight <MiniLightAR@Gmail.com>
 Peter Collingbourne <pcc@google.com>
 Rodrigo Queiro <rodrigoq@google.com>
 romange <romange@users.noreply.github.com>
+Roman Perepelitsa <roman.perepelitsa@gmail.com>
 Sergiu Deitsch <sergiu.deitsch@gmail.com>
 Shinichiro Hamaji <hamaji@google.com>
 tbennun <tbennun@gmail.com>
 Teddy Reed <teddy@prosauce.org>
+Vijaymahantesh Sattigeri <vijaymahantesh016@gmail.com>
 Zhongming Qu <qzmfranklin@gmail.com>
+Zhuoran Shen <cmsflash99@gmail.com>
diff --git a/third_party/google-glog/ChangeLog b/third_party/google-glog/ChangeLog
index d1b4248..a107e93 100644
--- a/third_party/google-glog/ChangeLog
+++ b/third_party/google-glog/ChangeLog
@@ -1,3 +1,28 @@
+2022-04-05  Google Inc. <opensource@google.com>
+
+	* google-glog: version 0.6.0.
+	* See git log for the details.
+
+2021-05-08  Google Inc. <opensource@google.com>
+
+	* google-glog: version 0.5.0.
+	* See git log for the details.
+
+2019-01-22  Google Inc. <opensource@google.com>
+
+	* google-glog: version 0.4.0.
+	* See git log for the details.
+
+2017-05-09  Google Inc. <opensource@google.com>
+
+	* google-glog: version 0.3.5
+	* See git log for the details.
+
+2015-03-09  Google Inc. <opensource@google.com>
+
+	* google-glog: version 0.3.4
+	* See git log for the details.
+
 2013-02-01  Google Inc. <opensource@google.com>
 
 	* google-glog: version 0.3.3
diff --git a/third_party/google-glog/Dockerfile.ubuntu.template b/third_party/google-glog/Dockerfile.ubuntu.template
deleted file mode 100644
index 14f9b95..0000000
--- a/third_party/google-glog/Dockerfile.ubuntu.template
+++ /dev/null
@@ -1,14 +0,0 @@
-# Build Ubuntu image
-FROM @BUILD_ARCH@/@BUILD_FLAVOR@:@BUILD_RELEASE@
-
-# see https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#/run
-RUN apt-get update && \
-  apt-get install -y --no-install-recommends \
-  @BUILD_PACKAGES@ \
-  build-essential \
-  g++
-
-RUN mkdir -p /usr/src/app
-WORKDIR /usr/src/app
-
-COPY . /usr/src/app
diff --git a/third_party/google-glog/INSTALL b/third_party/google-glog/INSTALL
deleted file mode 100644
index 0f3b55d..0000000
--- a/third_party/google-glog/INSTALL
+++ /dev/null
@@ -1,297 +0,0 @@
-Installation Instructions
-*************************
-
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
-2006, 2007 Free Software Foundation, Inc.
-
-This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
-
-Glog-Specific Install Notes
-================================
-
-*** NOTE FOR 64-BIT LINUX SYSTEMS
-
-The glibc built-in stack-unwinder on 64-bit systems has some problems
-with the glog libraries.  (In particular, if you are using
-InstallFailureSignalHandler(), the signal may be raised in the middle
-of malloc, holding some malloc-related locks when they invoke the
-stack unwinder.  The built-in stack unwinder may call malloc
-recursively, which may require the thread to acquire a lock it already
-holds: deadlock.)
-
-For that reason, if you use a 64-bit system and you need
-InstallFailureSignalHandler(), we strongly recommend you install
-libunwind before trying to configure or install google glog.
-libunwind can be found at
-
-   http://download.savannah.nongnu.org/releases/libunwind/libunwind-snap-070410.tar.gz
-
-Even if you already have libunwind installed, you will probably still
-need to install from the snapshot to get the latest version.
-
-CAUTION: if you install libunwind from the URL above, be aware that
-you may have trouble if you try to statically link your binary with
-glog: that is, if you link with 'gcc -static -lgcc_eh ...'.  This
-is because both libunwind and libgcc implement the same C++ exception
-handling APIs, but they implement them differently on some platforms.
-This is not likely to be a problem on ia64, but may be on x86-64.
-
-Also, if you link binaries statically, make sure that you add
--Wl,--eh-frame-hdr to your linker options. This is required so that
-libunwind can find the information generated by the compiler required
-for stack unwinding.
-
-Using -static is rare, though, so unless you know this will affect you
-it probably won't.
-
-If you cannot or do not wish to install libunwind, you can still try
-to use two kinds of stack-unwinder: 1. glibc built-in stack-unwinder
-and 2. frame pointer based stack-unwinder.
-
-1. As we already mentioned, glibc's unwinder has a deadlock issue.
-However, if you don't use InstallFailureSignalHandler() or you don't
-worry about the rare possibilities of deadlocks, you can use this
-stack-unwinder.  If you specify no options and libunwind isn't
-detected on your system, the configure script chooses this unwinder by
-default.
-
-2. The frame pointer based stack unwinder requires that your
-application, the glog library, and system libraries like libc, all be
-compiled with a frame pointer.  This is *not* the default for x86-64.
-
-If you are on x86-64 system, know that you have a set of system
-libraries with frame-pointers enabled, and compile all your
-applications with -fno-omit-frame-pointer, then you can enable the
-frame pointer based stack unwinder by passing the
---enable-frame-pointers flag to configure.
-
-
-Basic Installation
-==================
-
-Briefly, the shell commands `./configure; make; make install' should
-configure, build, and install this package.  The following
-more-detailed instructions are generic; see the `README.md' file for
-instructions specific to this package.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
-   It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring.  Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README.md' so they can
-be considered for the next release.  If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
-   The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'.  You need `configure.ac' if
-you want to change it or regenerate `configure' using a newer version
-of `autoconf'.
-
-The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.
-
-     Running `configure' might take a while.  While running, it prints
-     some messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.
-
-  5. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.  There is
-     also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
-
-  6. Often, you can also type `make uninstall' to remove the installed
-     files again.
-
-Compilers and Options
-=====================
-
-Some systems require unusual options for compilation or linking that the
-`configure' script does not know about.  Run `./configure --help' for
-details on some of the pertinent environment variables.
-
-   You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment.  Here
-is an example:
-
-     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
-
-   *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
-You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you can use GNU `make'.  `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
-   With a non-GNU `make', it is safer to compile the package for one
-architecture at a time in the source code directory.  After you have
-installed the package for one architecture, use `make distclean' before
-reconfiguring for another architecture.
-
-Installation Names
-==================
-
-By default, `make install' installs the package's commands under
-`/usr/local/bin', include files under `/usr/local/include', etc.  You
-can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX'.
-
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-pass the option `--exec-prefix=PREFIX' to `configure', the package uses
-PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files still use the regular prefix.
-
-   In addition, if you use an unusual directory layout you can give
-options like `--bindir=DIR' to specify different values for particular
-kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
-Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README.md' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
-There may be some features `configure' cannot figure out automatically,
-but needs to determine by the type of machine the package will run on.
-Usually, assuming the package is built to be run on the _same_
-architectures, `configure' can figure that out, but if it prints a
-message saying it cannot guess the machine type, give it the
-`--build=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
-     CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
-     OS KERNEL-OS
-
-   See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
-   If you are _building_ compiler tools for cross-compiling, you should
-use the option `--target=TYPE' to select the type of system they will
-produce code for.
-
-   If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
-If you want to set default values for `configure' scripts to share, you
-can create a site shell script called `config.site' that gives default
-values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-Variables not defined in a site shell script can be set in the
-environment passed to `configure'.  However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost.  In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'.  For example:
-
-     ./configure CC=/usr/local2/bin/gcc
-
-causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script).
-
-Unfortunately, this technique does not work for `CONFIG_SHELL' due to
-an Autoconf bug.  Until the bug is fixed you can use this workaround:
-
-     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
-
-`configure' Invocation
-======================
-
-`configure' recognizes the following options to control how it operates.
-
-`--help'
-`-h'
-     Print a summary of the options to `configure', and exit.
-
-`--version'
-`-V'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`--cache-file=FILE'
-     Enable the cache: use and save the results of the tests in FILE,
-     traditionally `config.cache'.  FILE defaults to `/dev/null' to
-     disable caching.
-
-`--config-cache'
-`-C'
-     Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`configure' also accepts some other, not widely useful, options.  Run
-`configure --help' for more details.
-
diff --git a/third_party/google-glog/Makefile.am b/third_party/google-glog/Makefile.am
deleted file mode 100644
index e750157..0000000
--- a/third_party/google-glog/Makefile.am
+++ /dev/null
@@ -1,260 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-AUTOMAKE_OPTIONS = subdir-objects foreign
-
-# Make sure that when we re-make ./configure, we get the macros we need
-ACLOCAL_AMFLAGS = -I m4
-
-# This is so we can #include <glog/foo>
-AM_CPPFLAGS = -I$(top_srcdir)/src
-
-# This is mostly based on configure options
-AM_CXXFLAGS =
-
-# These are good warnings to turn on by default
-if GCC
-  AM_CXXFLAGS += -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare
-endif
-
-# These are x86-specific, having to do with frame-pointers
-if X86_64
-if ENABLE_FRAME_POINTERS
-  AM_CXXFLAGS += -fno-omit-frame-pointer
-else
-  # TODO(csilvers): check if -fomit-frame-pointer might be in $(CXXFLAGS),
-  #                 before setting this.
-  AM_CXXFLAGS += -DNO_FRAME_POINTER
-endif
-endif
-
-if DISABLE_RTTI
-  AM_CXXFLAGS += -fno-rtti
-endif
-
-glogincludedir = $(includedir)/glog
-## The .h files you want to install (that is, .h files that people
-## who install this package can include in their own applications.)
-## We have to include both the .h and .h.in forms.  The latter we
-## put in noinst_HEADERS.
-gloginclude_HEADERS = src/glog/log_severity.h
-nodist_gloginclude_HEADERS = src/glog/logging.h src/glog/raw_logging.h src/glog/vlog_is_on.h src/glog/stl_logging.h
-noinst_HEADERS = src/glog/logging.h.in src/glog/raw_logging.h.in src/glog/vlog_is_on.h.in src/glog/stl_logging.h.in
-
-docdir = $(prefix)/share/doc/$(PACKAGE)-$(VERSION)
-## This is for HTML and other documentation you want to install.
-## Add your documentation files (in doc/) in addition to these
-## top-level boilerplate files.  Also add a TODO file if you have one.
-dist_doc_DATA = AUTHORS COPYING ChangeLog INSTALL README.md README.windows \
-                doc/designstyle.css doc/glog.html
-
-## The libraries (.so's) you want to install
-lib_LTLIBRARIES =
-
-# The libraries libglog depends on.
-COMMON_LIBS = $(PTHREAD_LIBS) $(GFLAGS_LIBS) $(UNWIND_LIBS)
-# Compile switches for our unittest.
-TEST_CFLAGS = $(GTEST_CFLAGS) $(GMOCK_CFLAGS) $(GFLAGS_CFLAGS) \
-              $(MINGW_CFLAGS) $(AM_CXXFLAGS)
-# Libraries for our unittest.
-TEST_LIBS = $(GTEST_LIBS) $(GMOCK_LIBS) $(GFLAGS_LIBS)
-
-## unittests you want to run when people type 'make check'.
-## TESTS is for binary unittests, check_SCRIPTS for script-based unittests.
-## TESTS_ENVIRONMENT sets environment variables for when you run unittest,
-## but it only seems to take effect for *binary* unittests (argh!)
-TESTS =
-# Set a small stack size so that (at least on Linux) PIEs are mapped at a lower
-# address than DSOs. This is used by symbolize_pie_unittest to check that we can
-# successfully symbolize PIEs loaded at low addresses.
-TESTS_ENVIRONMENT = ulimit -s 8192;
-check_SCRIPTS =
-# Every time you add a unittest to check_SCRIPTS, add it here too
-noinst_SCRIPTS =
-# Binaries used for script-based unittests.
-TEST_BINARIES =
-
-TESTS += logging_unittest
-logging_unittest_SOURCES = $(gloginclude_HEADERS) \
-                           src/logging_unittest.cc \
-                           src/config_for_unittests.h \
-                           src/mock-log.h
-nodist_logging_unittest_SOURCES = $(nodist_gloginclude_HEADERS)
-logging_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS)
-logging_unittest_LDFLAGS = $(PTHREAD_CFLAGS)
-logging_unittest_LDADD = libglog.la $(COMMON_LIBS) $(TEST_LIBS)
-
-check_SCRIPTS += logging_striplog_test_sh
-noinst_SCRIPTS += src/logging_striplog_test.sh
-logging_striplog_test_sh: logging_striptest0 logging_striptest2 logging_striptest10
-	$(top_srcdir)/src/logging_striplog_test.sh
-
-check_SCRIPTS += demangle_unittest_sh
-noinst_SCRIPTS += src/demangle_unittest.sh
-demangle_unittest_sh: demangle_unittest
-	$(builddir)/demangle_unittest  # force to create lt-demangle_unittest
-	$(top_srcdir)/src/demangle_unittest.sh
-
-check_SCRIPTS += signalhandler_unittest_sh
-noinst_SCRIPTS += src/signalhandler_unittest.sh
-signalhandler_unittest_sh: signalhandler_unittest
-	$(builddir)/signalhandler_unittest  # force to create lt-signalhandler_unittest
-	$(top_srcdir)/src/signalhandler_unittest.sh
-
-TEST_BINARIES += logging_striptest0
-logging_striptest0_SOURCES = $(gloginclude_HEADERS) \
-                             src/logging_striptest_main.cc
-nodist_logging_striptest0_SOURCES = $(nodist_gloginclude_HEADERS)
-logging_striptest0_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS)
-logging_striptest0_LDFLAGS = $(PTHREAD_CFLAGS)
-logging_striptest0_LDADD = libglog.la $(COMMON_LIBS)
-
-TEST_BINARIES += logging_striptest2
-logging_striptest2_SOURCES = $(gloginclude_HEADERS) \
-                             src/logging_striptest2.cc
-nodist_logging_striptest2_SOURCES = $(nodist_gloginclude_HEADERS)
-logging_striptest2_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS)
-logging_striptest2_LDFLAGS = $(PTHREAD_CFLAGS)
-logging_striptest2_LDADD = libglog.la $(COMMON_LIBS)
-
-TEST_BINARIES += logging_striptest10
-logging_striptest10_SOURCES = $(gloginclude_HEADERS) \
-                              src/logging_striptest10.cc
-nodist_logging_striptest10_SOURCES = $(nodist_gloginclude_HEADERS)
-logging_striptest10_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS)
-logging_striptest10_LDFLAGS = $(PTHREAD_CFLAGS)
-logging_striptest10_LDADD = libglog.la $(COMMON_LIBS)
-
-TESTS += demangle_unittest
-demangle_unittest_SOURCES = $(gloginclude_HEADERS) \
-                            src/demangle_unittest.cc
-nodist_demangle_unittest_SOURCES = $(nodist_gloginclude_HEADERS)
-demangle_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS)
-demangle_unittest_LDFLAGS = $(PTHREAD_CFLAGS)
-demangle_unittest_LDADD = libglog.la $(COMMON_LIBS) $(TEST_LIBS)
-
-TESTS += stacktrace_unittest
-stacktrace_unittest_SOURCES = $(gloginclude_HEADERS) \
-                              src/stacktrace_unittest.cc
-nodist_stacktrace_unittest_SOURCES = $(nodist_gloginclude_HEADERS)
-stacktrace_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS)
-stacktrace_unittest_LDFLAGS = $(PTHREAD_CFLAGS)
-stacktrace_unittest_LDADD = libglog.la $(COMMON_LIBS)
-
-TESTS += symbolize_unittest
-symbolize_unittest_SOURCES = $(gloginclude_HEADERS) \
-                              src/symbolize_unittest.cc
-nodist_symbolize_unittest_SOURCES = $(nodist_gloginclude_HEADERS)
-symbolize_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS)
-symbolize_unittest_LDFLAGS = $(PTHREAD_CFLAGS)
-symbolize_unittest_LDADD = libglog.la $(COMMON_LIBS) $(TEST_LIBS)
-
-TESTS += symbolize_pie_unittest
-symbolize_pie_unittest_SOURCES = $(gloginclude_HEADERS) \
-                                 src/symbolize_unittest.cc
-nodist_symbolize_pie_unittest_SOURCES = $(nodist_gloginclude_HEADERS)
-symbolize_pie_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS) -fPIE
-symbolize_pie_unittest_LDFLAGS = $(PTHREAD_CFLAGS) -pie
-symbolize_pie_unittest_LDADD = libglog.la $(COMMON_LIBS) $(TEST_LIBS)
-
-TESTS += stl_logging_unittest
-stl_logging_unittest_SOURCES = $(gloginclude_HEADERS) \
-                               src/stl_logging_unittest.cc
-nodist_stl_logging_unittest_SOURCES = $(nodist_gloginclude_HEADERS)
-stl_logging_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS)
-stl_logging_unittest_LDFLAGS = $(PTHREAD_CFLAGS)
-stl_logging_unittest_LDADD = libglog.la $(COMMON_LIBS) $(TEST_LIBS)
-
-TEST_BINARIES += signalhandler_unittest
-signalhandler_unittest_SOURCES = $(gloginclude_HEADERS) \
-                               src/signalhandler_unittest.cc
-nodist_signalhandler_unittest_SOURCES = $(nodist_gloginclude_HEADERS)
-signalhandler_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS)
-signalhandler_unittest_LDFLAGS = $(PTHREAD_CFLAGS)
-signalhandler_unittest_LDADD = libglog.la $(COMMON_LIBS) $(TEST_LIBS)
-
-TESTS += utilities_unittest
-utilities_unittest_SOURCES = $(gloginclude_HEADERS) \
-                             src/utilities_unittest.cc
-nodist_utilities_unittest_SOURCES = $(nodist_gloginclude_HEADERS)
-utilities_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS)
-utilities_unittest_LDFLAGS = $(PTHREAD_CFLAGS)
-utilities_unittest_LDADD = libglog.la $(COMMON_LIBS) $(TEST_LIBS)
-
-if HAVE_GMOCK
-TESTS += mock_log_test
-mock_log_test_SOURCES = $(gloginclude_HEADERS) \
-                        src/mock-log_test.cc
-nodist_mock_log_test_SOURCES = $(nodist_gloginclude_HEADERS)
-mock_log_test_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS)
-mock_log_test_LDFLAGS = $(PTHREAD_CFLAGS)
-mock_log_test_LDADD = libglog.la $(COMMON_LIBS) $(TEST_LIBS)
-endif
-
-## vvvv RULES TO MAKE THE LIBRARIES, BINARIES, AND UNITTESTS
-
-lib_LTLIBRARIES += libglog.la
-libglog_la_SOURCES = $(gloginclude_HEADERS) \
-                       src/logging.cc src/raw_logging.cc src/vlog_is_on.cc \
-                       src/utilities.cc src/utilities.h \
-                       src/demangle.cc src/demangle.h \
-                       src/stacktrace.h \
-                       src/stacktrace_generic-inl.h \
-                       src/stacktrace_libunwind-inl.h \
-                       src/stacktrace_powerpc-inl.h \
-                       src/stacktrace_x86-inl.h \
-                       src/stacktrace_x86_64-inl.h \
-                       src/symbolize.cc src/symbolize.h \
-                       src/signalhandler.cc \
-                       src/base/mutex.h src/base/googleinit.h \
-                       src/base/commandlineflags.h src/googletest.h
-nodist_libglog_la_SOURCES = $(nodist_gloginclude_HEADERS)
-
-libglog_la_CXXFLAGS = $(PTRHEAD_CFLAGS) $(GFLAGS_CFLAGS) $(MINGW_CFLAGS) \
-                      $(AM_CXXFLAGS) -DNDEBUG
-libglog_la_LDFLAGS = $(PTRHEAD_CFLAGS) $(GFLAGS_LDFLAGS)
-libglog_la_LIBADD = $(COMMON_LIBS)
-
-## The location of the windows project file for each binary we make
-WINDOWS_PROJECTS = google-glog.sln
-WINDOWS_PROJECTS += vsprojects/libglog/libglog.vcproj
-WINDOWS_PROJECTS += vsprojects/logging_unittest/logging_unittest.vcproj
-WINDOWS_PROJECTS += vsprojects/libglog_static/libglog_static.vcproj
-WINDOWS_PROJECTS += vsprojects/logging_unittest_static/logging_unittest_static.vcproj
-
-## ^^^^ END OF RULES TO MAKE THE LIBRARIES, BINARIES, AND UNITTESTS
-
-
-## This should always include $(TESTS), but may also include other
-## binaries that you compile but don't want automatically installed.
-noinst_PROGRAMS = $(TESTS) $(TEST_BINARIES)
-
-rpm: dist-gzip packages/rpm.sh packages/rpm/rpm.spec
-	@cd packages && ./rpm.sh ${PACKAGE} ${VERSION}
-
-deb: dist-gzip packages/deb.sh packages/deb/*
-	@cd packages && ./deb.sh ${PACKAGE} ${VERSION}
-
-# Windows wants write permission to .vcproj files and maybe even sln files.
-dist-hook:
-	test -e "$(distdir)/vsprojects" \
-	   && chmod -R u+w $(distdir)/*.sln $(distdir)/vsprojects/
-
-libtool: $(LIBTOOL_DEPS)
-	$(SHELL) ./config.status --recheck
-
-EXTRA_DIST = packages/rpm.sh packages/rpm/rpm.spec \
-	packages/deb.sh packages/deb/* \
-	$(SCRIPTS) src/logging_unittest.err src/demangle_unittest.txt \
-	src/windows/config.h src/windows/port.h src/windows/port.cc \
-	src/windows/preprocess.sh \
-	src/windows/glog/log_severity.h src/windows/glog/logging.h \
-	src/windows/glog/raw_logging.h src/windows/glog/stl_logging.h \
-	src/windows/glog/vlog_is_on.h \
-	$(WINDOWS_PROJECTS)
-
-CLEANFILES = core demangle.dm demangle.nm signalhandler.out* \
-	signalhandler_unittest.*.log.INFO.*
-
-# Add pkgconfig file
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = libglog.pc
diff --git a/third_party/google-glog/README.md b/third_party/google-glog/README.md
deleted file mode 100644
index d525f30..0000000
--- a/third_party/google-glog/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-[![Build Status](https://img.shields.io/travis/google/glog/master.svg?label=Travis)](https://travis-ci.org/google/glog/builds)
-[![Grunt status](https://img.shields.io/appveyor/ci/google/glog/master.svg?label=Appveyor)](https://ci.appveyor.com/project/google/glog/history)
-
-This repository contains a C++ implementation of the Google logging
-module.  Documentation for the implementation is in doc/.
-
-See INSTALL for (generic) installation instructions for C++: basically
-```sh
-./autogen.sh && ./configure && make && make install
-```
diff --git a/third_party/google-glog/README.rst b/third_party/google-glog/README.rst
new file mode 100644
index 0000000..d2c69a6
--- /dev/null
+++ b/third_party/google-glog/README.rst
@@ -0,0 +1,879 @@
+Google Logging Library
+======================
+
+|Linux Github actions| |Windows Github actions| |macOS Github actions| |Total alerts| |Language grade: C++| |Codecov|
+
+Google Logging (glog) is a C++98 library that implements application-level
+logging. The library provides logging APIs based on C++-style streams and
+various helper macros.
+
+.. role:: cmake(code)
+   :language: cmake
+
+.. role:: cmd(code)
+   :language: bash
+
+.. role:: cpp(code)
+   :language: cpp
+
+.. role:: bazel(code)
+   :language: starlark
+
+
+Getting Started
+---------------
+
+You can log a message by simply streaming things to ``LOG``\ (<a
+particular `severity level <#severity-levels>`__>), e.g.,
+
+.. code:: cpp
+
+   #include <glog/logging.h>
+
+   int main(int argc, char* argv[]) {
+       // Initialize Google’s logging library.
+       google::InitGoogleLogging(argv[0]);
+
+       // ...
+       LOG(INFO) << "Found " << num_cookies << " cookies";
+   }
+
+
+For a detailed overview of glog features and their usage, please refer
+to the `user guide <#user-guide>`__.
+
+.. contents:: Table of Contents
+
+
+Building from Source
+--------------------
+
+glog supports multiple build systems for compiling the project from
+source: `Bazel <#bazel>`__, `CMake <#cmake>`__, and `vcpkg <#vcpkg>`__.
+
+Bazel
+~~~~~
+
+To use glog within a project which uses the
+`Bazel <https://bazel.build/>`__ build tool, add the following lines to
+your ``WORKSPACE`` file:
+
+.. code:: bazel
+
+   load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+
+   http_archive(
+       name = "com_github_gflags_gflags",
+       sha256 = "34af2f15cf7367513b352bdcd2493ab14ce43692d2dcd9dfc499492966c64dcf",
+       strip_prefix = "gflags-2.2.2",
+       urls = ["https://github.com/gflags/gflags/archive/v2.2.2.tar.gz"],
+   )
+
+   http_archive(
+       name = "com_github_google_glog",
+       sha256 = "122fb6b712808ef43fbf80f75c52a21c9760683dae470154f02bddfc61135022",
+       strip_prefix = "glog-0.6.0",
+       urls = ["https://github.com/google/glog/archive/v0.6.0.zip"],
+   )
+
+You can then add :bazel:`@com_github_google_glog//:glog` to the deps section
+of a :bazel:`cc_binary` or :bazel:`cc_library` rule, and :code:`#include
+<glog/logging.h>` to include it in your source code. Here’s a simple example:
+
+.. code:: bazel
+
+   cc_binary(
+       name = "main",
+       srcs = ["main.cc"],
+       deps = ["@com_github_google_glog//:glog"],
+   )
+
+CMake
+~~~~~
+
+glog also supports CMake that can be used to build the project on a wide
+range of platforms. If you don’t have CMake installed already, you can
+download it for from CMake’s `official
+website <http://www.cmake.org>`__.
+
+CMake works by generating native makefiles or build projects that can be
+used in the compiler environment of your choice. You can either build
+glog with CMake as a standalone project or it can be incorporated into
+an existing CMake build for another project.
+
+Building glog with CMake
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+When building glog as a standalone project, on Unix-like systems with
+GNU Make as build tool, the typical workflow is:
+
+1. Get the source code and change to it. e.g., cloning with git:
+
+  .. code:: bash
+
+     git clone https://github.com/google/glog.git
+     cd glog
+
+2. Run CMake to configure the build tree.
+
+  .. code:: bash
+
+     cmake -S . -B build -G "Unix Makefiles"
+
+  CMake provides different generators, and by default will pick the most
+  relevant one to your environment. If you need a specific version of Visual
+  Studio, use :cmd:`cmake . -G <generator-name>`, and see :cmd:`cmake --help`
+  for the available generators. Also see :cmd:`-T <toolset-name>`, which can
+  be used to request the native x64 toolchain with :cmd:`-T host=x64`.
+
+3. Afterwards, generated files can be used to compile the project.
+
+  .. code:: bash
+
+     cmake --build build
+
+4. Test the build software (optional).
+
+  .. code:: bash
+
+     cmake --build build --target test
+
+5. Install the built files (optional).
+
+  .. code:: bash
+
+     cmake --build build --target install
+
+Consuming glog in a CMake Project
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+If you have glog installed in your system, you can use the CMake command
+:cmake:`find_package` to build against glog in your CMake Project as follows:
+
+.. code:: cmake
+
+   cmake_minimum_required (VERSION 3.16)
+   project (myproj VERSION 1.0)
+
+   find_package (glog 0.6.0 REQUIRED)
+
+   add_executable (myapp main.cpp)
+   target_link_libraries (myapp glog::glog)
+
+Compile definitions and options will be added automatically to your
+target as needed.
+
+Incorporating glog into a CMake Project
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+You can also use the CMake command :cmake:`add_subdirectory` to include glog
+directly from a subdirectory of your project by replacing the
+:cmake:`find_package` call from the previous example by
+:cmake:`add_subdirectory`. The :cmake:`glog::glog` target is in this case an
+:cmake:`ALIAS` library target for the ``glog`` library target.
+
+Again, compile definitions and options will be added automatically to
+your target as needed.
+
+vcpkg
+~~~~~
+
+You can download and install glog using the `vcpkg
+<https://github.com/Microsoft/vcpkg>`__ dependency manager:
+
+.. code:: bash
+
+   git clone https://github.com/Microsoft/vcpkg.git
+   cd vcpkg
+   ./bootstrap-vcpkg.sh
+   ./vcpkg integrate install
+   ./vcpkg install glog
+
+The glog port in vcpkg is kept up to date by Microsoft team members and
+community contributors. If the version is out of date, please create an
+issue or pull request on the vcpkg repository.
+
+User Guide
+----------
+
+glog defines a series of macros that simplify many common logging tasks.
+You can log messages by severity level, control logging behavior from
+the command line, log based on conditionals, abort the program when
+expected conditions are not met, introduce your own verbose logging
+levels, customize the prefix attached to log messages, and more.
+
+Following sections describe the functionality supported by glog. Please note
+this description may not be complete but limited to the most useful ones. If you
+want to find less common features, please check header files under `src/glog
+<src/glog>`__ directory.
+
+Severity Levels
+~~~~~~~~~~~~~~~
+
+You can specify one of the following severity levels (in increasing
+order of severity): ``INFO``, ``WARNING``, ``ERROR``, and ``FATAL``.
+Logging a ``FATAL`` message terminates the program (after the message is
+logged). Note that messages of a given severity are logged not only in
+the logfile for that severity, but also in all logfiles of lower
+severity. E.g., a message of severity ``FATAL`` will be logged to the
+logfiles of severity ``FATAL``, ``ERROR``, ``WARNING``, and ``INFO``.
+
+The ``DFATAL`` severity logs a ``FATAL`` error in debug mode (i.e.,
+there is no ``NDEBUG`` macro defined), but avoids halting the program in
+production by automatically reducing the severity to ``ERROR``.
+
+Unless otherwise specified, glog writes to the filename
+``/tmp/\<program name\>.\<hostname\>.\<user name\>.log.\<severity level\>.\<date\>-\<time\>.\<pid\>``
+(e.g.,
+``/tmp/hello_world.example.com.hamaji.log.INFO.20080709-222411.10474``).
+By default, glog copies the log messages of severity level ``ERROR`` or
+``FATAL`` to standard error (``stderr``) in addition to log files.
+
+Setting Flags
+~~~~~~~~~~~~~
+
+Several flags influence glog’s output behavior. If the `Google gflags library
+<https://github.com/gflags/gflags>`__ is installed on your machine, the build
+system will automatically detect and use it, allowing you to pass flags on the
+command line. For example, if you want to turn the flag :cmd:`--logtostderr` on,
+you can start your application with the following command line:
+
+.. code:: bash
+
+   ./your_application --logtostderr=1
+
+If the Google gflags library isn’t installed, you set flags via
+environment variables, prefixing the flag name with ``GLOG_``, e.g.,
+
+.. code:: bash
+
+   GLOG_logtostderr=1 ./your_application
+
+The following flags are most commonly used:
+
+``logtostderr`` (``bool``, default=\ ``false``)
+   Log messages to ``stderr`` instead of logfiles. Note: you can set
+   binary flags to ``true`` by specifying ``1``, ``true``, or ``yes``
+   (case insensitive). Also, you can set binary flags to ``false`` by
+   specifying ``0``, ``false``, or ``no`` (again, case insensitive).
+
+``stderrthreshold`` (``int``, default=2, which is ``ERROR``)
+   Copy log messages at or above this level to stderr in addition to
+   logfiles. The numbers of severity levels ``INFO``, ``WARNING``,
+   ``ERROR``, and ``FATAL`` are 0, 1, 2, and 3, respectively.
+
+``minloglevel`` (``int``, default=0, which is ``INFO``)
+   Log messages at or above this level. Again, the numbers of severity
+   levels ``INFO``, ``WARNING``, ``ERROR``, and ``FATAL`` are 0, 1, 2,
+   and 3, respectively.
+
+``log_dir`` (``string``, default="")
+   If specified, logfiles are written into this directory instead of the
+   default logging directory.
+
+``v`` (``int``, default=0)
+   Show all ``VLOG(m)`` messages for ``m`` less or equal the value of
+   this flag. Overridable by :cmd:`--vmodule`. See `the section about
+   verbose logging <#verbose-logging>`__ for more detail.
+
+``vmodule`` (``string``, default="")
+   Per-module verbose level. The argument has to contain a
+   comma-separated list of <module name>=<log level>. <module name> is a
+   glob pattern (e.g., ``gfs*`` for all modules whose name starts with
+   "gfs"), matched against the filename base (that is, name ignoring
+   .cc/.h./-inl.h). <log level> overrides any value given by :cmd:`--v`.
+   See also `the section about verbose logging <#verbose-logging>`__.
+
+There are some other flags defined in logging.cc. Please grep the source
+code for ``DEFINE_`` to see a complete list of all flags.
+
+You can also modify flag values in your program by modifying global
+variables ``FLAGS_*`` . Most settings start working immediately after
+you update ``FLAGS_*`` . The exceptions are the flags related to
+destination files. For example, you might want to set ``FLAGS_log_dir``
+before calling :cpp:`google::InitGoogleLogging` . Here is an example:
+
+.. code:: cpp
+
+   LOG(INFO) << "file";
+   // Most flags work immediately after updating values.
+   FLAGS_logtostderr = 1;
+   LOG(INFO) << "stderr";
+   FLAGS_logtostderr = 0;
+   // This won’t change the log destination. If you want to set this
+   // value, you should do this before google::InitGoogleLogging .
+   FLAGS_log_dir = "/some/log/directory";
+   LOG(INFO) << "the same file";
+
+Conditional / Occasional Logging
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Sometimes, you may only want to log a message under certain conditions.
+You can use the following macros to perform conditional logging:
+
+.. code:: cpp
+
+   LOG_IF(INFO, num_cookies > 10) << "Got lots of cookies";
+
+The "Got lots of cookies" message is logged only when the variable
+``num_cookies`` exceeds 10. If a line of code is executed many times, it
+may be useful to only log a message at certain intervals. This kind of
+logging is most useful for informational messages.
+
+.. code:: cpp
+
+   LOG_EVERY_N(INFO, 10) << "Got the " << google::COUNTER << "th cookie";
+
+The above line outputs a log messages on the 1st, 11th, 21st, ... times
+it is executed. Note that the special ``google::COUNTER`` value is used
+to identify which repetition is happening.
+
+You can combine conditional and occasional logging with the following
+macro.
+
+.. code:: cpp
+
+   LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << google::COUNTER
+                                           << "th big cookie";
+
+Instead of outputting a message every nth time, you can also limit the
+output to the first n occurrences:
+
+.. code:: cpp
+
+   LOG_FIRST_N(INFO, 20) << "Got the " << google::COUNTER << "th cookie";
+
+Outputs log messages for the first 20 times it is executed. Again, the
+``google::COUNTER`` identifier indicates which repetition is happening.
+
+Other times, it is desired to only log a message periodically based on a time.
+So for example, to log a message every 10ms:
+
+.. code:: cpp
+
+   LOG_EVERY_T(INFO, 0.01) << "Got a cookie";
+
+Or every 2.35s:
+
+.. code:: cpp
+
+   LOG_EVERY_T(INFO, 2.35) << "Got a cookie";
+
+Debug Mode Support
+~~~~~~~~~~~~~~~~~~
+
+Special "debug mode" logging macros only have an effect in debug mode
+and are compiled away to nothing for non-debug mode compiles. Use these
+macros to avoid slowing down your production application due to
+excessive logging.
+
+.. code:: cpp
+
+   DLOG(INFO) << "Found cookies";
+   DLOG_IF(INFO, num_cookies > 10) << "Got lots of cookies";
+   DLOG_EVERY_N(INFO, 10) << "Got the " << google::COUNTER << "th cookie";
+
+
+``CHECK`` Macros
+~~~~~~~~~~~~~~~~
+
+It is a good practice to check expected conditions in your program
+frequently to detect errors as early as possible. The ``CHECK`` macro
+provides the ability to abort the application when a condition is not
+met, similar to the ``assert`` macro defined in the standard C library.
+
+``CHECK`` aborts the application if a condition is not true. Unlike
+``assert``, it is \*not\* controlled by ``NDEBUG``, so the check will be
+executed regardless of compilation mode. Therefore, ``fp->Write(x)`` in
+the following example is always executed:
+
+.. code:: cpp
+
+   CHECK(fp->Write(x) == 4) << "Write failed!";
+
+There are various helper macros for equality/inequality checks -
+``CHECK_EQ``, ``CHECK_NE``, ``CHECK_LE``, ``CHECK_LT``, ``CHECK_GE``,
+and ``CHECK_GT``. They compare two values, and log a ``FATAL`` message
+including the two values when the result is not as expected. The values
+must have :cpp:`operator<<(ostream, ...)` defined.
+
+You may append to the error message like so:
+
+.. code:: cpp
+
+   CHECK_NE(1, 2) << ": The world must be ending!";
+
+We are very careful to ensure that each argument is evaluated exactly
+once, and that anything which is legal to pass as a function argument is
+legal here. In particular, the arguments may be temporary expressions
+which will end up being destroyed at the end of the apparent statement,
+for example:
+
+.. code:: cpp
+
+   CHECK_EQ(string("abc")[1], ’b’);
+
+The compiler reports an error if one of the arguments is a pointer and the other
+is :cpp:`NULL`. To work around this, simply :cpp:`static_cast` :cpp:`NULL` to
+the type of the desired pointer.
+
+.. code:: cpp
+
+   CHECK_EQ(some_ptr, static_cast<SomeType*>(NULL));
+
+Better yet, use the ``CHECK_NOTNULL`` macro:
+
+.. code:: cpp
+
+   CHECK_NOTNULL(some_ptr);
+   some_ptr->DoSomething();
+
+Since this macro returns the given pointer, this is very useful in
+constructor initializer lists.
+
+.. code:: cpp
+
+   struct S {
+       S(Something* ptr) : ptr_(CHECK_NOTNULL(ptr)) {}
+       Something* ptr_;
+   };
+
+Note that you cannot use this macro as a C++ stream due to this feature.
+Please use ``CHECK_EQ`` described above to log a custom message before
+aborting the application.
+
+If you are comparing C strings (:cpp:`char *`), a handy set of macros performs
+case sensitive as well as case insensitive comparisons - ``CHECK_STREQ``,
+``CHECK_STRNE``, ``CHECK_STRCASEEQ``, and ``CHECK_STRCASENE``. The CASE versions
+are case-insensitive. You can safely pass :cpp:`NULL` pointers for this macro. They
+treat :cpp:`NULL` and any non-:cpp:`NULL` string as not equal. Two :cpp:`NULL`\
+s are equal.
+
+Note that both arguments may be temporary strings which are destructed
+at the end of the current "full expression" (e.g.,
+:cpp:`CHECK_STREQ(Foo().c_str(), Bar().c_str())` where ``Foo`` and ``Bar``
+return C++’s :cpp:`std::string`).
+
+The ``CHECK_DOUBLE_EQ`` macro checks the equality of two floating point
+values, accepting a small error margin. ``CHECK_NEAR`` accepts a third
+floating point argument, which specifies the acceptable error margin.
+
+Verbose Logging
+~~~~~~~~~~~~~~~
+
+When you are chasing difficult bugs, thorough log messages are very useful.
+However, you may want to ignore too verbose messages in usual development. For
+such verbose logging, glog provides the ``VLOG`` macro, which allows you to
+define your own numeric logging levels. The :cmd:`--v` command line option
+controls which verbose messages are logged:
+
+.. code:: cpp
+
+   VLOG(1) << "I’m printed when you run the program with --v=1 or higher";
+   VLOG(2) << "I’m printed when you run the program with --v=2 or higher";
+
+With ``VLOG``, the lower the verbose level, the more likely messages are to be
+logged. For example, if :cmd:`--v==1`, ``VLOG(1)`` will log, but ``VLOG(2)``
+will not log. This is opposite of the severity level, where ``INFO`` is 0, and
+``ERROR`` is 2. :cmd:`--minloglevel` of 1 will log ``WARNING`` and above. Though
+you can specify any integers for both ``VLOG`` macro and :cmd:`--v` flag, the
+common values for them are small positive integers. For example, if you write
+``VLOG(0)``, you should specify :cmd:`--v=-1` or lower to silence it. This is
+less useful since we may not want verbose logs by default in most cases. The
+``VLOG`` macros always log at the ``INFO`` log level (when they log at all).
+
+Verbose logging can be controlled from the command line on a per-module
+basis:
+
+.. code:: bash
+
+   --vmodule=mapreduce=2,file=1,gfs*=3 --v=0
+
+will:
+
+(a) Print ``VLOG(2)`` and lower messages from mapreduce.{h,cc}
+(b) Print ``VLOG(1)`` and lower messages from file.{h,cc}
+(c) Print ``VLOG(3)`` and lower messages from files prefixed with "gfs"
+(d) Print ``VLOG(0)`` and lower messages from elsewhere
+
+The wildcarding functionality shown by (c) supports both ’*’ (matches 0
+or more characters) and ’?’ (matches any single character) wildcards.
+Please also check the section about `command line flags <#setting-flags>`__.
+
+There’s also ``VLOG_IS_ON(n)`` "verbose level" condition macro. This
+macro returns true when the :cmd:`--v` is equal or greater than ``n``. To
+be used as
+
+.. code:: cpp
+
+   if (VLOG_IS_ON(2)) {
+       // do some logging preparation and logging
+       // that can’t be accomplished with just VLOG(2) << ...;
+   }
+
+Verbose level condition macros ``VLOG_IF``, ``VLOG_EVERY_N`` and
+``VLOG_IF_EVERY_N`` behave analogous to ``LOG_IF``, ``LOG_EVERY_N``,
+``LOF_IF_EVERY``, but accept a numeric verbosity level as opposed to a
+severity level.
+
+.. code:: cpp
+
+   VLOG_IF(1, (size > 1024))
+      << "I’m printed when size is more than 1024 and when you run the "
+         "program with --v=1 or more";
+   VLOG_EVERY_N(1, 10)
+      << "I’m printed every 10th occurrence, and when you run the program "
+         "with --v=1 or more. Present occurence is " << google::COUNTER;
+   VLOG_IF_EVERY_N(1, (size > 1024), 10)
+      << "I’m printed on every 10th occurence of case when size is more "
+         " than 1024, when you run the program with --v=1 or more. ";
+         "Present occurence is " << google::COUNTER;
+
+
+Custom Log Prefix Format
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+glog supports changing the format of the prefix attached to log messages by
+receiving a user-provided callback to be used to generate such strings.  That
+feature must be enabled at compile time by the ``WITH_CUSTOM_PREFIX`` flag.
+
+For each log entry, the callback will be invoked with a ``LogMessageInfo``
+struct containing the severity, filename, line number, thread ID, and time of
+the event. It will also be given a reference to the output stream, whose
+contents will be prepended to the actual message in the final log line.
+
+For example:
+
+.. code:: cpp
+
+    /* This function writes a prefix that matches glog's default format.
+     * (The third parameter can be used to receive user-supplied data, and is
+     * NULL by default.)
+     */
+    void CustomPrefix(std::ostream &s, const LogMessageInfo &l, void*) {
+       s << l.severity[0]
+       << setw(4) << 1900 + l.time.year()
+       << setw(2) << 1 + l.time.month()
+       << setw(2) << l.time.day()
+       << ' '
+       << setw(2) << l.time.hour() << ':'
+       << setw(2) << l.time.min()  << ':'
+       << setw(2) << l.time.sec() << "."
+       << setw(6) << l.time.usec()
+       << ' '
+       << setfill(' ') << setw(5)
+       << l.thread_id << setfill('0')
+       << ' '
+       << l.filename << ':' << l.line_number << "]";
+    }
+
+
+To enable the use of ``CustomPrefix()``, simply give glog a pointer to it
+during initialization: ``InitGoogleLogging(argv[0], &CustomPrefix);``.
+
+Optionally, ``InitGoogleLogging()`` takes a third argument of type  ``void*``
+to pass on to the callback function.
+
+Failure Signal Handler
+~~~~~~~~~~~~~~~~~~~~~~
+
+The library provides a convenient signal handler that will dump useful
+information when the program crashes on certain signals such as ``SIGSEGV``. The
+signal handler can be installed by :cpp:`google::InstallFailureSignalHandler()`.
+The following is an example of output from the signal handler.
+
+::
+
+   *** Aborted at 1225095260 (unix time) try "date -d @1225095260" if you are using GNU date ***
+   *** SIGSEGV (@0x0) received by PID 17711 (TID 0x7f893090a6f0) from PID 0; stack trace: ***
+   PC: @           0x412eb1 TestWaitingLogSink::send()
+       @     0x7f892fb417d0 (unknown)
+       @           0x412eb1 TestWaitingLogSink::send()
+       @     0x7f89304f7f06 google::LogMessage::SendToLog()
+       @     0x7f89304f35af google::LogMessage::Flush()
+       @     0x7f89304f3739 google::LogMessage::~LogMessage()
+       @           0x408cf4 TestLogSinkWaitTillSent()
+       @           0x4115de main
+       @     0x7f892f7ef1c4 (unknown)
+       @           0x4046f9 (unknown)
+
+By default, the signal handler writes the failure dump to the standard
+error. You can customize the destination by :cpp:`InstallFailureWriter()`.
+
+Performance of Messages
+~~~~~~~~~~~~~~~~~~~~~~~
+
+The conditional logging macros provided by glog (e.g., ``CHECK``,
+``LOG_IF``, ``VLOG``, etc.) are carefully implemented and don’t execute
+the right hand side expressions when the conditions are false. So, the
+following check may not sacrifice the performance of your application.
+
+.. code:: cpp
+
+   CHECK(obj.ok) << obj.CreatePrettyFormattedStringButVerySlow();
+
+User-defined Failure Function
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+``FATAL`` severity level messages or unsatisfied ``CHECK`` condition
+terminate your program. You can change the behavior of the termination
+by :cpp:`InstallFailureFunction`.
+
+.. code:: cpp
+
+   void YourFailureFunction() {
+     // Reports something...
+     exit(EXIT_FAILURE);
+   }
+
+   int main(int argc, char* argv[]) {
+     google::InstallFailureFunction(&YourFailureFunction);
+   }
+
+By default, glog tries to dump stacktrace and makes the program exit
+with status 1. The stacktrace is produced only when you run the program
+on an architecture for which glog supports stack tracing (as of
+September 2008, glog supports stack tracing for x86 and x86_64).
+
+Raw Logging
+~~~~~~~~~~~
+
+The header file ``<glog/raw_logging.h>`` can be used for thread-safe logging,
+which does not allocate any memory or acquire any locks. Therefore, the macros
+defined in this header file can be used by low-level memory allocation and
+synchronization code. Please check `src/glog/raw_logging.h.in
+<src/glog/raw_logging.h.in>`__ for detail.
+
+Google Style ``perror()``
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+``PLOG()`` and ``PLOG_IF()`` and ``PCHECK()`` behave exactly like their
+``LOG*`` and ``CHECK`` equivalents with the addition that they append a
+description of the current state of errno to their output lines. E.g.
+
+.. code:: cpp
+
+   PCHECK(write(1, NULL, 2) >= 0) << "Write NULL failed";
+
+This check fails with the following error message.
+
+::
+
+   F0825 185142 test.cc:22] Check failed: write(1, NULL, 2) >= 0 Write NULL failed: Bad address [14]
+
+Syslog
+~~~~~~
+
+``SYSLOG``, ``SYSLOG_IF``, and ``SYSLOG_EVERY_N`` macros are available.
+These log to syslog in addition to the normal logs. Be aware that
+logging to syslog can drastically impact performance, especially if
+syslog is configured for remote logging! Make sure you understand the
+implications of outputting to syslog before you use these macros. In
+general, it’s wise to use these macros sparingly.
+
+Strip Logging Messages
+~~~~~~~~~~~~~~~~~~~~~~
+
+Strings used in log messages can increase the size of your binary and
+present a privacy concern. You can therefore instruct glog to remove all
+strings which fall below a certain severity level by using the
+``GOOGLE_STRIP_LOG`` macro:
+
+If your application has code like this:
+
+.. code:: cpp
+
+   #define GOOGLE_STRIP_LOG 1    // this must go before the #include!
+   #include <glog/logging.h>
+
+The compiler will remove the log messages whose severities are less than
+the specified integer value. Since ``VLOG`` logs at the severity level
+``INFO`` (numeric value ``0``), setting ``GOOGLE_STRIP_LOG`` to 1 or
+greater removes all log messages associated with ``VLOG``\ s as well as
+``INFO`` log statements.
+
+Automatically Remove Old Logs
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To enable the log cleaner:
+
+.. code:: cpp
+
+   google::EnableLogCleaner(3); // keep your logs for 3 days
+
+And then glog will check if there are overdue logs whenever a flush is
+performed. In this example, any log file from your project whose last
+modified time is greater than 3 days will be unlink()ed.
+
+This feature can be disabled at any time (if it has been enabled)
+
+.. code:: cpp
+
+   google::DisableLogCleaner();
+
+Notes for Windows Users
+~~~~~~~~~~~~~~~~~~~~~~~
+
+glog defines a severity level ``ERROR``, which is also defined in
+``windows.h`` . You can make glog not define ``INFO``, ``WARNING``,
+``ERROR``, and ``FATAL`` by defining ``GLOG_NO_ABBREVIATED_SEVERITIES``
+before including ``glog/logging.h`` . Even with this macro, you can
+still use the iostream like logging facilities:
+
+.. code:: cpp
+
+   #define GLOG_NO_ABBREVIATED_SEVERITIES
+   #include <windows.h>
+   #include <glog/logging.h>
+
+   // ...
+
+   LOG(ERROR) << "This should work";
+   LOG_IF(ERROR, x > y) << "This should be also OK";
+
+However, you cannot use ``INFO``, ``WARNING``, ``ERROR``, and ``FATAL``
+anymore for functions defined in ``glog/logging.h`` .
+
+.. code:: cpp
+
+   #define GLOG_NO_ABBREVIATED_SEVERITIES
+   #include <windows.h>
+   #include <glog/logging.h>
+
+   // ...
+
+   // This won’t work.
+   // google::FlushLogFiles(google::ERROR);
+
+   // Use this instead.
+   google::FlushLogFiles(google::GLOG_ERROR);
+
+If you don’t need ``ERROR`` defined by ``windows.h``, there are a couple
+of more workarounds which sometimes don’t work:
+
+-  ``#define WIN32_LEAN_AND_MEAN`` or ``NOGDI`` **before** you
+   ``#include windows.h``.
+-  ``#undef ERROR`` **after** you ``#include windows.h`` .
+
+See `this
+issue <http://code.google.com/p/google-glog/issues/detail?id=33>`__ for
+more detail.
+
+
+Installation Notes for 64-bit Linux Systems
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The glibc built-in stack-unwinder on 64-bit systems has some problems with glog.
+(In particular, if you are using :cpp:`InstallFailureSignalHandler()`, the
+signal may be raised in the middle of malloc, holding some malloc-related locks
+when they invoke the stack unwinder. The built-in stack unwinder may call malloc
+recursively, which may require the thread to acquire a lock it already holds:
+deadlock.)
+
+For that reason, if you use a 64-bit system and you need
+:cpp:`InstallFailureSignalHandler()`, we strongly recommend you install
+``libunwind`` before trying to configure or install google glog.
+libunwind can be found
+`here <http://download.savannah.nongnu.org/releases/libunwind/libunwind-snap-070410.tar.gz>`__.
+
+Even if you already have ``libunwind`` installed, you will probably
+still need to install from the snapshot to get the latest version.
+
+Caution: if you install libunwind from the URL above, be aware that you
+may have trouble if you try to statically link your binary with glog:
+that is, if you link with ``gcc -static -lgcc_eh ...``. This is because
+both ``libunwind`` and ``libgcc`` implement the same C++ exception
+handling APIs, but they implement them differently on some platforms.
+This is not likely to be a problem on ia64, but may be on x86-64.
+
+Also, if you link binaries statically, make sure that you add
+:cmd:`-Wl,--eh-frame-hdr` to your linker options. This is required so that
+``libunwind`` can find the information generated by the compiler required for
+stack unwinding.
+
+Using :cmd:`-static` is rare, though, so unless you know this will affect you it
+probably won’t.
+
+If you cannot or do not wish to install libunwind, you can still try to
+use two kinds of stack-unwinder: 1. glibc built-in stack-unwinder and 2.
+frame pointer based stack-unwinder.
+
+1. As we already mentioned, glibc’s unwinder has a deadlock issue.
+   However, if you don’t use :cpp:`InstallFailureSignalHandler()` or you
+   don’t worry about the rare possibilities of deadlocks, you can use
+   this stack-unwinder. If you specify no options and ``libunwind``
+   isn’t detected on your system, the configure script chooses this
+   unwinder by default.
+
+2. The frame pointer based stack unwinder requires that your
+   application, the glog library, and system libraries like libc, all be
+   compiled with a frame pointer. This is *not* the default for x86-64.
+
+
+How to Contribute
+-----------------
+
+We’d love to accept your patches and contributions to this project.
+There are a just a few small guidelines you need to follow.
+
+Contributor License Agreement (CLA)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Contributions to any Google project must be accompanied by a Contributor
+License Agreement. This is not a copyright **assignment**, it simply
+gives Google permission to use and redistribute your contributions as
+part of the project.
+
+* If you are an individual writing original source code and you’re sure
+  you own the intellectual property, then you’ll need to sign an
+  `individual
+  CLA <https://developers.google.com/open-source/cla/individual>`__.
+* If you work for a company that wants to allow you to contribute your
+  work, then you’ll need to sign a `corporate
+  CLA <https://developers.google.com/open-source/cla/corporate>`__.
+
+You generally only need to submit a CLA once, so if you’ve already
+submitted one (even if it was for a different project), you probably
+don’t need to do it again.
+
+Once your CLA is submitted (or if you already submitted one for another
+Google project), make a commit adding yourself to the
+`AUTHORS <./AUTHORS>`__ and `CONTRIBUTORS <./CONTRIBUTORS>`__ files. This
+commit can be part of your first `pull
+request <https://help.github.com/articles/creating-a-pull-request>`__.
+
+Submitting a Patch
+~~~~~~~~~~~~~~~~~~
+
+1. It’s generally best to start by opening a new issue describing the
+   bug or feature you’re intending to fix. Even if you think it’s
+   relatively minor, it’s helpful to know what people are working on.
+   Mention in the initial issue that you are planning to work on that
+   bug or feature so that it can be assigned to you.
+2. Follow the normal process of
+   `forking <https://help.github.com/articles/fork-a-repo>`__ the
+   project, and setup a new branch to work in. It’s important that each
+   group of changes be done in separate branches in order to ensure that
+   a pull request only includes the commits related to that bug or
+   feature.
+3. Do your best to have `well-formed commit
+   messages <http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html>`__
+   for each change. This provides consistency throughout the project,
+   and ensures that commit messages are able to be formatted properly by
+   various git tools.
+4. Finally, push the commits to your fork and submit a `pull
+   request <https://help.github.com/articles/creating-a-pull-request>`__.
+
+
+.. |Linux Github actions| image:: https://github.com/google/glog/actions/workflows/linux.yml/badge.svg
+   :target: https://github.com/google/glog/actions
+.. |Windows Github actions| image:: https://github.com/google/glog/actions/workflows/windows.yml/badge.svg
+   :target: https://github.com/google/glog/actions
+.. |macOS Github actions| image:: https://github.com/google/glog/actions/workflows/macos.yml/badge.svg
+   :target: https://github.com/google/glog/actions
+.. |Total alerts| image:: https://img.shields.io/lgtm/alerts/g/google/glog.svg?logo=lgtm&logoWidth=18
+   :target: https://lgtm.com/projects/g/google/glog/alerts/
+.. |Language grade: C++| image:: https://img.shields.io/lgtm/grade/cpp/g/google/glog.svg?logo=lgtm&logoWidth=18)
+   :target: https://lgtm.com/projects/g/google/glog/context:cpp
+.. |Codecov| image:: https://codecov.io/gh/google/glog/branch/master/graph/badge.svg?token=8an420vNju
+   :target: https://codecov.io/gh/google/glog
diff --git a/third_party/google-glog/README.windows b/third_party/google-glog/README.windows
deleted file mode 100644
index ea6ccc2..0000000
--- a/third_party/google-glog/README.windows
+++ /dev/null
@@ -1,17 +0,0 @@
-This project has been ported to Windows, including stack tracing, signal
-handling, and unit tests.
-
-A Visual Studio solution file is explicitly not provided because it is not
-maintainable. Instead, a CMake build system exists to generate the correct
-solution for your version of Visual Studio.
-
-In short,
-  (1) Install CMake from: https://cmake.org/download/
-  (2) With CMake on your PATH, run `cmake .` to generate the build files
-  (3) Either use `cmake --build`, or open the generated solution
-
-CMake provides different generators, and by default will pick the most relevant
-one to your environment. If you need a specific version of Visual Studio, use
-`cmake . -G <generator-name>`, and see `cmake --help` for the available
-generators. Also see `-T <toolset-name>`, which can used to request the native
-x64 toolchain with `-T host=x64`.
\ No newline at end of file
diff --git a/third_party/google-glog/WORKSPACE b/third_party/google-glog/WORKSPACE
index b5760d0..10c89f6 100644
--- a/third_party/google-glog/WORKSPACE
+++ b/third_party/google-glog/WORKSPACE
@@ -2,6 +2,7 @@
 
 http_archive(
     name = "com_github_gflags_gflags",
+    sha256 = "34af2f15cf7367513b352bdcd2493ab14ce43692d2dcd9dfc499492966c64dcf",
     strip_prefix = "gflags-2.2.2",
     urls = [
         "https://mirror.bazel.build/github.com/gflags/gflags/archive/v2.2.2.tar.gz",
diff --git a/third_party/google-glog/appveyor.yml b/third_party/google-glog/appveyor.yml
deleted file mode 100644
index ecc42c4..0000000
--- a/third_party/google-glog/appveyor.yml
+++ /dev/null
@@ -1,71 +0,0 @@
-# global environment variables
-environment:
-  global:
-    # path to source directory of project to be built
-    PROJECT_DIR: .
-    # output test results for failing tests
-    CTEST_OUTPUT_ON_FAILURE: 1
-
-  # test matrix
-  matrix:
-
-    - TOOLCHAIN: "vs-14-2015-sdk-8-1"
-      GENERATOR: "Visual Studio 14 2015 Win64"
-      TEST_TARGET: RUN_TESTS
-      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
-
-    - TOOLCHAIN: "vs-14-2015-win64"
-      GENERATOR: "Visual Studio 14 2015 Win64"
-      TEST_TARGET: RUN_TESTS
-      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
-
-    - TOOLCHAIN: "vs-15-2017-win64"
-      GENERATOR: "Visual Studio 15 2017 Win64"
-      TEST_TARGET: RUN_TESTS
-      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
-
-    - TOOLCHAIN: "vs-15-2017-win64-cxx17"
-      GENERATOR: "Visual Studio 15 2017 Win64"
-      TEST_TARGET: RUN_TESTS
-      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
-
-    - TOOLCHAIN: "mingw-cxx11"
-      GENERATOR: "MinGW Makefiles"
-      MINGW_PATH: "C:\\mingw-w64\\x86_64-7.2.0-posix-seh-rt_v5-rev1\\mingw64\\bin"
-      TEST_TARGET: test
-      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
-
-    - TOOLCHAIN: "mingw-gnuxx11"
-      GENERATOR: "MinGW Makefiles"
-      MINGW_PATH: "C:\\mingw-w64\\x86_64-7.2.0-posix-seh-rt_v5-rev1\\mingw64\\bin"
-      TEST_TARGET: test
-      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
-
-    - TOOLCHAIN: "mingw-cxx17"
-      GENERATOR: "MinGW Makefiles"
-      MINGW_PATH: "C:\\mingw-w64\\x86_64-7.2.0-posix-seh-rt_v5-rev1\\mingw64\\bin"
-      TEST_TARGET: test
-      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
-
-install:
-  # Remove entry with sh.exe from PATH to fix error with MinGW toolchain
-  # (For MinGW make to work correctly sh.exe must NOT be in your path)
-  # * http://stackoverflow.com/a/3870338/2288008
-  - cmd: set PATH=%PATH:C:\Program Files\Git\usr\bin;=%
-
-  # set MINGW path
-  - cmd: IF DEFINED MINGW_PATH set PATH=%MINGW_PATH%;%PATH%
-
-  # Visual Studio 15 2017: Mimic behavior of older versions
-  - cmd: set VS150COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools
-
-build_script:
-  - cmd: cmake -H. -B_build_%TOOLCHAIN%_Debug -G "%GENERATOR%" -DCMAKE_TOOLCHAIN_FILE="%cd%\toolchains\%TOOLCHAIN%.cmake"
-  - cmd: cmake --build _build_%TOOLCHAIN%_Debug --config Debug
-  #- cmd: cmake -H. -B_build_%TOOLCHAIN%_Release -G "%GENERATOR%" -DCMAKE_TOOLCHAIN_FILE="%cd%\toolchains\%TOOLCHAIN%.cmake"
-  #- cmd: cmake --build _build_%TOOLCHAIN%_Release --config Release
-  # add git back to PATH for `diff` command in case of error
-  - cmd: set PATH=C:\Program Files\Git\usr\bin;%PATH%
-  - cmd: IF DEFINED TEST_TARGET cmake --build _build_%TOOLCHAIN%_Debug --target %TEST_TARGET%
-  #- cmd: IF DEFINED TEST_TARGET cmake --build _build_%TOOLCHAIN%_Release --target %TEST_TARGET%
-
diff --git a/third_party/google-glog/autogen.sh b/third_party/google-glog/autogen.sh
deleted file mode 100755
index 08b6590..0000000
--- a/third_party/google-glog/autogen.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-
-set -eu
-
-autoreconf -i
diff --git a/third_party/google-glog/bazel/example/BUILD b/third_party/google-glog/bazel/example/BUILD
deleted file mode 100644
index 6b10e2b..0000000
--- a/third_party/google-glog/bazel/example/BUILD
+++ /dev/null
@@ -1,8 +0,0 @@
-cc_test(
-    name = "main",
-    size = "small",
-    srcs = ["main.cc"],
-    deps = [
-        "//:glog",
-    ],
-)
diff --git a/third_party/google-glog/bazel/example/BUILD.bazel b/third_party/google-glog/bazel/example/BUILD.bazel
new file mode 100644
index 0000000..05ab0f3
--- /dev/null
+++ b/third_party/google-glog/bazel/example/BUILD.bazel
@@ -0,0 +1,9 @@
+cc_test(
+    name = "main",
+    size = "small",
+    srcs = ["main.cc"],
+    deps = [
+        "//:glog",
+        "@com_github_gflags_gflags//:gflags",
+    ],
+)
diff --git a/third_party/google-glog/bazel/glog.bzl b/third_party/google-glog/bazel/glog.bzl
index d674fb4..2e7a8d4 100644
--- a/third_party/google-glog/bazel/glog.bzl
+++ b/third_party/google-glog/bazel/glog.bzl
@@ -1,4 +1,4 @@
-# Implement a macro glog_library() that the BUILD file can load.
+# Implement a macro glog_library() that the BUILD.bazel file can load.
 
 # By default, glog is built with gflags support.  You can change this behavior
 # by using glog_library(with_gflags=0)
@@ -6,136 +6,281 @@
 # This file is inspired by the following sample BUILD files:
 #       https://github.com/google/glog/issues/61
 #       https://github.com/google/glog/files/393474/BUILD.txt
+#
+# Known issue: the namespace parameter is not supported on Win32.
 
-def glog_library(namespace='google', with_gflags=1, **kwargs):
-    if native.repository_name() != '@':
-        gendir = '$(GENDIR)/external/' + native.repository_name().lstrip('@')
+def expand_template_impl(ctx):
+    ctx.actions.expand_template(
+        template = ctx.file.template,
+        output = ctx.outputs.out,
+        substitutions = ctx.attr.substitutions,
+    )
+
+expand_template = rule(
+    implementation = expand_template_impl,
+    attrs = {
+        "template": attr.label(mandatory = True, allow_single_file = True),
+        "substitutions": attr.string_dict(mandatory = True),
+        "out": attr.output(mandatory = True),
+    },
+)
+
+def dict_union(x, y):
+    z = {}
+    z.update(x)
+    z.update(y)
+    return z
+
+def glog_library(namespace = "google", with_gflags = 1, **kwargs):
+    if native.repository_name() != "@":
+        repo_name = native.repository_name()[1:]  # Strip the first leading @
+        gendir = "$(GENDIR)/external/" + repo_name
+        src_windows = "external/%s/src/windows" % repo_name
     else:
-        gendir = '$(GENDIR)'
+        gendir = "$(GENDIR)"
+        src_windows = "src/windows"
+
+    # Config setting for WebAssembly target.
+    native.config_setting(
+        name = "wasm",
+        values = {"cpu": "wasm"},
+    )
+
+    # Detect when building with clang-cl on Windows.
+    native.config_setting(
+        name = "clang-cl",
+        values = {"compiler": "clang-cl"},
+    )
+
+    common_copts = [
+        # Disable warnings that exists in glog.
+        "-Wno-sign-compare",
+        "-Wno-unused-function",
+        "-Wno-unused-local-typedefs",
+        "-Wno-unused-variable",
+        "-Wno-format-nonliteral",
+        "-DGLOG_BAZEL_BUILD",
+        # Inject a C++ namespace.
+        "-DGOOGLE_NAMESPACE='%s'" % namespace,
+        "-DHAVE_CXX11_NULLPTR_T",
+        "-DHAVE_STDINT_H",
+        "-DHAVE_STRING_H",
+        "-DGLOG_CUSTOM_PREFIX_SUPPORT",
+        "-I%s/glog_internal" % gendir,
+    ] + (["-DHAVE_LIB_GFLAGS"] if with_gflags else [])
+
+    wasm_copts = [
+        # Disable warnings that exists in glog.
+        "-Wno-sign-compare",
+        "-Wno-unused-function",
+        "-Wno-unused-local-typedefs",
+        "-Wno-unused-variable",
+        # Allows src/base/mutex.h to include pthread.h.
+        "-DHAVE_PTHREAD",
+        # Allows src/logging.cc to determine the host name.
+        "-DHAVE_SYS_UTSNAME_H",
+        # For src/utilities.cc.
+        "-DHAVE_SYS_TIME_H",
+        "-DHAVE_UNWIND_H",
+        # Enable dumping stacktrace upon sigaction.
+        "-DHAVE_SIGACTION",
+        # For logging.cc.
+        "-DHAVE_PREAD",
+        "-DHAVE___ATTRIBUTE__",
+    ]
+
+    linux_or_darwin_copts = wasm_copts + [
+        "-DGLOG_EXPORT=__attribute__((visibility(\\\"default\\\")))",
+        # For src/utilities.cc.
+        "-DHAVE_SYS_SYSCALL_H",
+        # For src/logging.cc to create symlinks.
+        "-DHAVE_UNISTD_H",
+        "-fvisibility-inlines-hidden",
+        "-fvisibility=hidden",
+    ]
+
+    freebsd_only_copts = [
+        # Enable declaration of _Unwind_Backtrace
+        "-D_GNU_SOURCE",
+    ]
+
+    darwin_only_copts = [
+        # For stacktrace.
+        "-DHAVE_DLADDR",
+        # Avoid deprecated syscall().
+        "-DHAVE_PTHREAD_THREADID_NP",
+    ]
+
+    windows_only_copts = [
+        # Override -DGLOG_EXPORT= from the cc_library's defines.
+        "-DGLOG_EXPORT=__declspec(dllexport)",
+        "-DGLOG_NO_ABBREVIATED_SEVERITIES",
+        "-DHAVE_SNPRINTF",
+        "-I" + src_windows,
+    ]
+
+    clang_cl_only_copts = [
+        # Allow the override of -DGLOG_EXPORT.
+        "-Wno-macro-redefined",
+    ]
+
+    windows_only_srcs = [
+        "src/glog/log_severity.h",
+        "src/windows/dirent.h",
+        "src/windows/port.cc",
+        "src/windows/port.h",
+    ]
+
+    gflags_deps = ["@com_github_gflags_gflags//:gflags"] if with_gflags else []
 
     native.cc_library(
-        name = 'glog',
-        visibility = [ '//visibility:public' ],
+        name = "glog",
+        visibility = ["//visibility:public"],
         srcs = [
-            ':config_h',
-            'src/base/commandlineflags.h',
-            'src/base/googleinit.h',
-            'src/base/mutex.h',
-            'src/demangle.cc',
-            'src/demangle.h',
-            'src/logging.cc',
-            'src/raw_logging.cc',
-            'src/signalhandler.cc',
-            'src/stacktrace.h',
-            'src/stacktrace_generic-inl.h',
-            'src/stacktrace_libunwind-inl.h',
-            'src/stacktrace_powerpc-inl.h',
-            'src/stacktrace_windows-inl.h',
-            'src/stacktrace_x86-inl.h',
-            'src/stacktrace_x86_64-inl.h',
-            'src/symbolize.cc',
-            'src/symbolize.h',
-            'src/utilities.cc',
-            'src/utilities.h',
-            'src/vlog_is_on.cc',
-        ],
+            ":config_h",
+            "src/base/commandlineflags.h",
+            "src/base/googleinit.h",
+            "src/base/mutex.h",
+            "src/demangle.cc",
+            "src/demangle.h",
+            "src/logging.cc",
+            "src/raw_logging.cc",
+            "src/signalhandler.cc",
+            "src/stacktrace.h",
+            "src/stacktrace_generic-inl.h",
+            "src/stacktrace_libunwind-inl.h",
+            "src/stacktrace_powerpc-inl.h",
+            "src/stacktrace_unwind-inl.h",
+            "src/stacktrace_windows-inl.h",
+            "src/stacktrace_x86-inl.h",
+            "src/symbolize.cc",
+            "src/symbolize.h",
+            "src/utilities.cc",
+            "src/utilities.h",
+            "src/vlog_is_on.cc",
+        ] + select({
+            "@bazel_tools//src/conditions:windows": windows_only_srcs,
+            "//conditions:default": [],
+        }),
         hdrs = [
-            ':logging_h',
-            ':raw_logging_h',
-            ':stl_logging_h',
-            ':vlog_is_on_h',
-            'src/glog/log_severity.h',
+            "src/glog/log_severity.h",
+            "src/glog/platform.h",
+            ":logging_h",
+            ":raw_logging_h",
+            ":stl_logging_h",
+            ":vlog_is_on_h",
         ],
-        strip_include_prefix = 'src',
-        copts = [
-            # Disable warnings that exists in glog.
-            '-Wno-sign-compare',
-            '-Wno-unused-function',
-            '-Wno-unused-local-typedefs',
-            '-Wno-unused-variable',
-            '-Wno-format-nonliteral',
-            "-DGLOG_BAZEL_BUILD",
-            # Inject a C++ namespace.
-            "-DGOOGLE_NAMESPACE='%s'" % namespace,
-            # Allows src/base/mutex.h to include pthread.h.
-            '-DHAVE_PTHREAD',
-            # Allows src/logging.cc to determine the host name.
-            '-DHAVE_SYS_UTSNAME_H',
-            # For src/utilities.cc.
-            '-DHAVE_SYS_SYSCALL_H',
-            '-DHAVE_SYS_TIME_H',
-            '-DHAVE_STDINT_H',
-            '-DHAVE_STRING_H',
-            # Enable dumping stacktrace upon sigaction.
-            '-DHAVE_SIGACTION',
-            '-DHAVE_EXECINFO_H',
-            # For logging.cc.
-            '-DHAVE_PREAD',
-            '-DHAVE___ATTRIBUTE__',
-
-            # Include generated header files.
-            '-I%s/glog_internal' % gendir,
-        ] + ([
-            # Use gflags to parse CLI arguments.
-            '-DHAVE_LIB_GFLAGS',
-        ] if with_gflags else []),
-        deps = [
-            '@com_github_gflags_gflags//:gflags',
-        ] if with_gflags else [],
+        strip_include_prefix = "src",
+        defines = select({
+            # GLOG_EXPORT is normally set by export.h, but that's not
+            # generated for Bazel.
+            "@bazel_tools//src/conditions:windows": [
+                "GLOG_EXPORT=",
+                "GLOG_DEPRECATED=__declspec(deprecated)",
+                "GLOG_NO_ABBREVIATED_SEVERITIES",
+            ],
+            "//conditions:default": [
+                "GLOG_DEPRECATED=__attribute__((deprecated))",
+                "GLOG_EXPORT=__attribute__((visibility(\\\"default\\\")))",
+            ],
+        }),
+        deps = gflags_deps + select({
+            "@bazel_tools//src/conditions:windows": [":strip_include_prefix_hack"],
+            "//conditions:default": [],
+        }),
+        copts =
+            select({
+                "@bazel_tools//src/conditions:windows": common_copts + windows_only_copts,
+                "@bazel_tools//src/conditions:darwin": common_copts + linux_or_darwin_copts + darwin_only_copts,
+                "@bazel_tools//src/conditions:freebsd": common_copts + linux_or_darwin_copts + freebsd_only_copts,
+                ":wasm": common_copts + wasm_copts,
+                "//conditions:default": common_copts + linux_or_darwin_copts,
+            }) +
+            select({
+                ":clang-cl": clang_cl_only_copts,
+                "//conditions:default": [],
+            }),
         **kwargs
     )
 
-    native.genrule(
-        name = 'gen_sh',
-        outs = [
-            'gen.sh',
+    # Workaround https://github.com/bazelbuild/bazel/issues/6337 by declaring
+    # the dependencies without strip_include_prefix.
+    native.cc_library(
+        name = "strip_include_prefix_hack",
+        hdrs = [
+            "src/glog/log_severity.h",
+            ":logging_h",
+            ":raw_logging_h",
+            ":stl_logging_h",
+            ":vlog_is_on_h",
         ],
-        cmd = r'''\
-#!/bin/sh
-cat > $@ <<"EOF"
-sed -e 's/@ac_cv_cxx_using_operator@/1/g' \
-    -e 's/@ac_cv_have_unistd_h@/1/g' \
-    -e 's/@ac_cv_have_stdint_h@/1/g' \
-    -e 's/@ac_cv_have_systypes_h@/1/g' \
-    -e 's/@ac_cv_have_libgflags@/{}/g' \
-    -e 's/@ac_cv_have_uint16_t@/1/g' \
-    -e 's/@ac_cv_have___builtin_expect@/1/g' \
-    -e 's/@ac_cv_have_.*@/0/g' \
-    -e 's/@ac_google_start_namespace@/namespace google {{/g' \
-    -e 's/@ac_google_end_namespace@/}}/g' \
-    -e 's/@ac_google_namespace@/google/g' \
-    -e 's/@ac_cv___attribute___noinline@/__attribute__((noinline))/g' \
-    -e 's/@ac_cv___attribute___noreturn@/__attribute__((noreturn))/g' \
-    -e 's/@ac_cv___attribute___printf_4_5@/__attribute__((__format__ (__printf__, 4, 5)))/g'
-EOF
-'''.format(int(with_gflags)),
     )
 
-    native.genrule(
-        name = 'config_h',
-        srcs = [
-            'src/config.h.cmake.in',
-        ],
-        outs = [
-            'glog_internal/config.h',
-        ],
-        cmd = "awk '{ gsub(/^#cmakedefine/, \"//cmakedefine\"); print; }' $< > $@",
+    expand_template(
+        name = "config_h",
+        template = "src/config.h.cmake.in",
+        out = "glog_internal/config.h",
+        substitutions = {"#cmakedefine": "//cmakedefine"},
     )
 
-    [native.genrule(
-        name = '%s_h' % f,
-        srcs = [
-            'src/glog/%s.h.in' % f,
-        ],
-        outs = [
-            'src/glog/%s.h' % f,
-        ],
-        cmd = '$(location :gen_sh) < $< > $@',
-        tools = [':gen_sh'],
-    ) for f in [
-            'vlog_is_on',
-            'stl_logging',
-            'raw_logging',
-            'logging',
+    common_config = {
+        "@ac_cv_cxx11_atomic@": "1",
+        "@ac_cv_cxx11_constexpr@": "1",
+        "@ac_cv_cxx11_chrono@": "1",
+        "@ac_cv_cxx11_nullptr_t@": "1",
+        "@ac_cv_cxx_using_operator@": "1",
+        "@ac_cv_have_inttypes_h@": "0",
+        "@ac_cv_have_u_int16_t@": "0",
+        "@ac_cv_have_glog_export@": "0",
+        "@ac_google_start_namespace@": "namespace google {",
+        "@ac_google_end_namespace@": "}",
+        "@ac_google_namespace@": "google",
+    }
+
+    posix_config = dict_union(common_config, {
+        "@ac_cv___attribute___noinline@": "__attribute__((noinline))",
+        "@ac_cv___attribute___noreturn@": "__attribute__((noreturn))",
+        "@ac_cv___attribute___printf_4_5@": "__attribute__((__format__(__printf__, 4, 5)))",
+        "@ac_cv_have___builtin_expect@": "1",
+        "@ac_cv_have___uint16@": "0",
+        "@ac_cv_have_libgflags@": "1" if with_gflags else "0",
+        "@ac_cv_have_mode_t@": "1",
+        "@ac_cv_have_ssize_t@": "1",
+        "@ac_cv_have_stdint_h@": "1",
+        "@ac_cv_have_systypes_h@": "1",
+        "@ac_cv_have_uint16_t@": "1",
+        "@ac_cv_have_unistd_h@": "1",
+    })
+
+    windows_config = dict_union(common_config, {
+        "@ac_cv___attribute___noinline@": "",
+        "@ac_cv___attribute___noreturn@": "__declspec(noreturn)",
+        "@ac_cv___attribute___printf_4_5@": "",
+        "@ac_cv_have___builtin_expect@": "0",
+        "@ac_cv_have___uint16@": "1",
+        "@ac_cv_have_libgflags@": "0",
+        "@ac_cv_have_mode_t@": "0",
+        "@ac_cv_have_ssize_t@": "0",
+        "@ac_cv_have_stdint_h@": "0",
+        "@ac_cv_have_systypes_h@": "0",
+        "@ac_cv_have_uint16_t@": "0",
+        "@ac_cv_have_unistd_h@": "0",
+    })
+
+    [
+        expand_template(
+            name = "%s_h" % f,
+            template = "src/glog/%s.h.in" % f,
+            out = "src/glog/%s.h" % f,
+            substitutions = select({
+                "@bazel_tools//src/conditions:windows": windows_config,
+                "//conditions:default": posix_config,
+            }),
+        )
+        for f in [
+            "vlog_is_on",
+            "stl_logging",
+            "raw_logging",
+            "logging",
         ]
     ]
diff --git a/third_party/google-glog/cmake/DetermineGflagsNamespace.cmake b/third_party/google-glog/cmake/DetermineGflagsNamespace.cmake
old mode 100755
new mode 100644
diff --git a/third_party/google-glog/cmake/FindUnwind.cmake b/third_party/google-glog/cmake/FindUnwind.cmake
new file mode 100644
index 0000000..a7a976b
--- /dev/null
+++ b/third_party/google-glog/cmake/FindUnwind.cmake
@@ -0,0 +1,61 @@
+# - Try to find libunwind
+# Once done this will define
+#
+#  Unwind_FOUND - system has libunwind
+#  unwind::unwind - cmake target for libunwind
+
+include (FindPackageHandleStandardArgs)
+
+find_path (Unwind_INCLUDE_DIR NAMES unwind.h libunwind.h DOC "unwind include directory")
+find_library (Unwind_LIBRARY NAMES unwind DOC "unwind library")
+
+mark_as_advanced (Unwind_INCLUDE_DIR Unwind_LIBRARY)
+
+# Extract version information
+if (Unwind_LIBRARY)
+  set (_Unwind_VERSION_HEADER ${Unwind_INCLUDE_DIR}/libunwind-common.h)
+
+  if (EXISTS ${_Unwind_VERSION_HEADER})
+    file (READ ${_Unwind_VERSION_HEADER} _Unwind_VERSION_CONTENTS)
+
+    string (REGEX REPLACE ".*#define UNW_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1"
+      Unwind_VERSION_MAJOR "${_Unwind_VERSION_CONTENTS}")
+    string (REGEX REPLACE ".*#define UNW_VERSION_MINOR[ \t]+([0-9]+).*" "\\1"
+      Unwind_VERSION_MINOR "${_Unwind_VERSION_CONTENTS}")
+    string (REGEX REPLACE ".*#define UNW_VERSION_EXTRA[ \t]+([0-9]+).*" "\\1"
+      Unwind_VERSION_PATCH "${_Unwind_VERSION_CONTENTS}")
+
+    set (Unwind_VERSION ${Unwind_VERSION_MAJOR}.${Unwind_VERSION_MINOR})
+
+    if (CMAKE_MATCH_0)
+      # Third version component may be empty
+      set (Unwind_VERSION ${Unwind_VERSION}.${Unwind_VERSION_PATCH})
+      set (Unwind_VERSION_COMPONENTS 3)
+    else (CMAKE_MATCH_0)
+      set (Unwind_VERSION_COMPONENTS 2)
+    endif (CMAKE_MATCH_0)
+  endif (EXISTS ${_Unwind_VERSION_HEADER})
+endif (Unwind_LIBRARY)
+
+# handle the QUIETLY and REQUIRED arguments and set Unwind_FOUND to TRUE
+# if all listed variables are TRUE
+find_package_handle_standard_args (Unwind
+  REQUIRED_VARS Unwind_INCLUDE_DIR Unwind_LIBRARY
+  VERSION_VAR Unwind_VERSION
+)
+
+if (Unwind_FOUND)
+  if (NOT TARGET unwind::unwind)
+    add_library (unwind::unwind INTERFACE IMPORTED)
+
+    set_property (TARGET unwind::unwind PROPERTY
+      INTERFACE_INCLUDE_DIRECTORIES ${Unwind_INCLUDE_DIR}
+    )
+    set_property (TARGET unwind::unwind PROPERTY
+      INTERFACE_LINK_LIBRARIES ${Unwind_LIBRARY}
+    )
+    set_property (TARGET unwind::unwind PROPERTY
+      IMPORTED_CONFIGURATIONS RELEASE
+    )
+  endif (NOT TARGET unwind::unwind)
+endif (Unwind_FOUND)
diff --git a/third_party/google-glog/cmake/GetCacheVariables.cmake b/third_party/google-glog/cmake/GetCacheVariables.cmake
new file mode 100644
index 0000000..ead3589
--- /dev/null
+++ b/third_party/google-glog/cmake/GetCacheVariables.cmake
@@ -0,0 +1,70 @@
+cmake_policy (PUSH)
+cmake_policy (VERSION 3.3)
+
+include (CMakeParseArguments)
+
+function (get_cache_variables _CACHEVARS)
+  set (_SINGLE)
+  set (_MULTI EXCLUDE)
+  set (_OPTIONS)
+
+  cmake_parse_arguments (_ARGS "${_OPTIONS}" "${_SINGLE}" "${_MULTI}" ${ARGS} ${ARGN})
+
+  get_cmake_property (_VARIABLES VARIABLES)
+
+  set (CACHEVARS)
+
+  foreach (_VAR ${_VARIABLES})
+    if (DEFINED _ARGS_EXCLUDE)
+      if ("${_VAR}" IN_LIST _ARGS_EXCLUDE)
+        continue ()
+      endif ("${_VAR}" IN_LIST _ARGS_EXCLUDE)
+    endif (DEFINED _ARGS_EXCLUDE)
+
+    get_property (_CACHEVARTYPE CACHE ${_VAR} PROPERTY TYPE)
+
+    if ("${_CACHEVARTYPE}" STREQUAL INTERNAL OR
+        "${_CACHEVARTYPE}" STREQUAL STATIC OR
+        "${_CACHEVARTYPE}" STREQUAL UNINITIALIZED)
+        continue ()
+    endif ("${_CACHEVARTYPE}" STREQUAL INTERNAL OR
+        "${_CACHEVARTYPE}" STREQUAL STATIC OR
+        "${_CACHEVARTYPE}" STREQUAL UNINITIALIZED)
+
+    get_property (_CACHEVARVAL CACHE ${_VAR} PROPERTY VALUE)
+
+    if ("${_CACHEVARVAL}" STREQUAL "")
+      continue ()
+    endif ("${_CACHEVARVAL}" STREQUAL "")
+
+    get_property (_CACHEVARDOC CACHE ${_VAR} PROPERTY HELPSTRING)
+
+    # Escape " in values
+    string (REPLACE "\"" "\\\"" _CACHEVARVAL "${_CACHEVARVAL}")
+    # Escape " in help strings
+    string (REPLACE "\"" "\\\"" _CACHEVARDOC "${_CACHEVARDOC}")
+    # Escape ; in values
+    string (REPLACE ";" "\\\;" _CACHEVARVAL "${_CACHEVARVAL}")
+    # Escape ; in help strings
+    string (REPLACE ";" "\\\;" _CACHEVARDOC "${_CACHEVARDOC}")
+    # Escape backslashes in values except those that are followed by a
+    # quote.
+    string (REGEX REPLACE "\\\\([^\"])" "\\\\\\1" _CACHEVARVAL "${_CACHEVARVAL}")
+    # Escape backslashes in values that are followed by a letter to avoid
+    # invalid escape sequence errors.
+    string (REGEX REPLACE "\\\\([a-zA-Z])" "\\\\\\\\1" _CACHEVARVAL "${_CACHEVARVAL}")
+    string (REPLACE "\\\\" "\\\\\\\\" _CACHEVARDOC "${_CACHEVARDOC}")
+
+    if (NOT "${_CACHEVARTYPE}" STREQUAL BOOL)
+      set (_CACHEVARVAL "\"${_CACHEVARVAL}\"")
+    endif (NOT "${_CACHEVARTYPE}" STREQUAL BOOL)
+
+    if (NOT "${_CACHEVARTYPE}" STREQUAL "" AND NOT "${_CACHEVARVAL}" STREQUAL "")
+      set (CACHEVARS "${CACHEVARS}set (${_VAR} ${_CACHEVARVAL} CACHE ${_CACHEVARTYPE} \"${_CACHEVARDOC}\")\n")
+    endif (NOT "${_CACHEVARTYPE}" STREQUAL "" AND NOT "${_CACHEVARVAL}" STREQUAL "")
+  endforeach (_VAR)
+
+  set (${_CACHEVARS} ${CACHEVARS} PARENT_SCOPE)
+endfunction (get_cache_variables)
+
+cmake_policy (POP)
diff --git a/third_party/google-glog/cmake/INSTALL.md b/third_party/google-glog/cmake/INSTALL.md
deleted file mode 100644
index a73f05e..0000000
--- a/third_party/google-glog/cmake/INSTALL.md
+++ /dev/null
@@ -1,81 +0,0 @@
-# Glog - CMake Support
-
-Glog comes with a CMake build script ([CMakeLists.txt](../CMakeLists.txt)) that can be used on a wide range of platforms.  
-If you don't have CMake installed already, you can download it for free from <http://www.cmake.org/>.
-
-CMake works by generating native makefiles or build projects that can be used in the compiler environment of your choice.  
-You can either build Glog with CMake as a standalone project or it can be incorporated into an existing CMake build for another project.
-
-## Table of Contents
-
-- [Building Glog with CMake](#building-glog-with-cmake)
-- [Consuming Glog in a CMake Project](#consuming-glog-in-a-cmake-project)
-- [Incorporating Glog into a CMake Project](#incorporating-glog-into-a-cmake-project)
-
-## Building Glog with CMake
-
-When building Glog as a standalone project, on Unix-like systems with GNU Make as build tool, the typical workflow is:  
-
-1. Get the source code and change to it.
-e.g. cloning with git:
-```bash
-git clone git@github.com:google/glog.git
-cd glog
-```
-
-2. Run CMake to configure the build tree.
-```bash
-cmake -H. -Bbuild -G "Unix Makefiles"
-```
-note: To get the list of available generators (e.g. Visual Studio), use `-G ""`
-
-3. Afterwards, generated files can be used to compile the project.
-```bash
-cmake --build build
-```
-
-4. Test the build software (optional).
-```bash
-cmake --build build --target test
-```
-
-5. Install the built files (optional).
-```bash
-cmake --build build --target install
-```
-
-## Consuming Glog in a CMake Project
-
-If you have Glog installed in your system, you can use the CMake command
-`find_package()` to include it in your CMake Project.
-
-```cmake
-cmake_minimum_required(VERSION 3.0.2)
-project(myproj VERSION 1.0)
-
-find_package(glog 0.3.5 REQUIRED)
-
-add_executable(myapp main.cpp)
-target_link_libraries(myapp glog::glog)
-```
-
-Compile definitions and options will be added automatically to your target as
-needed.
-
-## Incorporating Glog into a CMake Project
-
-You can also use the CMake command `add_subdirectory()` to include Glog directly from a subdirectory of your project.  
-The **glog::glog** target is in this case an ALIAS library target for the **glog** library target. 
-
-```cmake
-cmake_minimum_required(VERSION 3.0.2)
-project(myproj VERSION 1.0)
-
-add_subdirectory(glog)
-
-add_executable(myapp main.cpp)
-target_link_libraries(myapp glog::glog)
-```
-
-Again, compile definitions and options will be added automatically to your target as
-needed.
diff --git a/third_party/google-glog/cmake/RunCleanerTest1.cmake b/third_party/google-glog/cmake/RunCleanerTest1.cmake
new file mode 100644
index 0000000..7fbf463
--- /dev/null
+++ b/third_party/google-glog/cmake/RunCleanerTest1.cmake
@@ -0,0 +1,22 @@
+set (RUNS 3)
+
+foreach (iter RANGE 1 ${RUNS})
+  set (ENV{GOOGLE_LOG_DIR} ${TEST_DIR})
+  execute_process (COMMAND ${LOGCLEANUP} RESULT_VARIABLE _RESULT)
+
+  if (NOT _RESULT EQUAL 0)
+    message (FATAL_ERROR "Failed to run logcleanup_unittest (error: ${_RESULT})")
+  endif (NOT _RESULT EQUAL 0)
+
+  # Ensure the log files to have different modification timestamps such that
+  # exactly one log file remains at the end. Otherwise all log files will be
+  # retained.
+  execute_process (COMMAND ${CMAKE_COMMAND} -E sleep 1)
+endforeach (iter)
+
+file (GLOB LOG_FILES ${TEST_DIR}/*.foobar)
+list (LENGTH LOG_FILES NUM_FILES)
+
+if (NOT NUM_FILES EQUAL 1)
+  message (SEND_ERROR "Expected 1 log file in log directory but found ${NUM_FILES}")
+endif (NOT NUM_FILES EQUAL 1)
diff --git a/third_party/google-glog/cmake/RunCleanerTest2.cmake b/third_party/google-glog/cmake/RunCleanerTest2.cmake
new file mode 100644
index 0000000..d3b51e3
--- /dev/null
+++ b/third_party/google-glog/cmake/RunCleanerTest2.cmake
@@ -0,0 +1,22 @@
+set (RUNS 3)
+
+foreach (iter RANGE 1 ${RUNS})
+  execute_process (COMMAND ${LOGCLEANUP} -log_dir=${TEST_DIR}
+    RESULT_VARIABLE _RESULT)
+
+  if (NOT _RESULT EQUAL 0)
+    message (FATAL_ERROR "Failed to run logcleanup_unittest (error: ${_RESULT})")
+  endif (NOT _RESULT EQUAL 0)
+
+  # Ensure the log files to have different modification timestamps such that
+  # exactly one log file remains at the end. Otherwise all log files will be
+  # retained.
+  execute_process (COMMAND ${CMAKE_COMMAND} -E sleep 1)
+endforeach (iter)
+
+file (GLOB LOG_FILES ${TEST_DIR}/test_cleanup_*.barfoo)
+list (LENGTH LOG_FILES NUM_FILES)
+
+if (NOT NUM_FILES EQUAL 1)
+  message (SEND_ERROR "Expected 1 log file in build directory ${TEST_DIR} but found ${NUM_FILES}")
+endif (NOT NUM_FILES EQUAL 1)
diff --git a/third_party/google-glog/cmake/RunCleanerTest3.cmake b/third_party/google-glog/cmake/RunCleanerTest3.cmake
new file mode 100644
index 0000000..e8105d1
--- /dev/null
+++ b/third_party/google-glog/cmake/RunCleanerTest3.cmake
@@ -0,0 +1,28 @@
+set (RUNS 3)
+
+# Create the subdirectory required by this unit test.
+file (MAKE_DIRECTORY ${TEST_DIR}/${TEST_SUBDIR})
+
+foreach (iter RANGE 1 ${RUNS})
+  execute_process (COMMAND ${LOGCLEANUP} -log_dir=${TEST_DIR}
+    RESULT_VARIABLE _RESULT)
+
+  if (NOT _RESULT EQUAL 0)
+    message (FATAL_ERROR "Failed to run logcleanup_unittest (error: ${_RESULT})")
+  endif (NOT _RESULT EQUAL 0)
+
+  # Ensure the log files to have different modification timestamps such that
+  # exactly one log file remains at the end. Otherwise all log files will be
+  # retained.
+  execute_process (COMMAND ${CMAKE_COMMAND} -E sleep 2)
+endforeach (iter)
+
+file (GLOB LOG_FILES ${TEST_DIR}/${TEST_SUBDIR}/test_cleanup_*.relativefoo)
+list (LENGTH LOG_FILES NUM_FILES)
+
+if (NOT NUM_FILES EQUAL 1)
+  message (SEND_ERROR "Expected 1 log file in build directory ${TEST_DIR}${TEST_SUBDIR} but found ${NUM_FILES}")
+endif (NOT NUM_FILES EQUAL 1)
+
+# Remove the subdirectory required by this unit test.
+file (REMOVE_RECURSE ${TEST_DIR}/${TEST_SUBDIR})
diff --git a/third_party/google-glog/cmake/TestInitPackageConfig.cmake b/third_party/google-glog/cmake/TestInitPackageConfig.cmake
new file mode 100644
index 0000000..01d3a40
--- /dev/null
+++ b/third_party/google-glog/cmake/TestInitPackageConfig.cmake
@@ -0,0 +1,11 @@
+# Create the build directory
+execute_process (
+  COMMAND ${CMAKE_COMMAND} -E make_directory ${TEST_BINARY_DIR}
+  RESULT_VARIABLE _DIRECTORY_CREATED_SUCCEEDED
+)
+
+if (NOT _DIRECTORY_CREATED_SUCCEEDED EQUAL 0)
+  message (FATAL_ERROR "Failed to create build directory")
+endif (NOT _DIRECTORY_CREATED_SUCCEEDED EQUAL 0)
+
+file (WRITE ${INITIAL_CACHE} "${CACHEVARS}")
diff --git a/third_party/google-glog/cmake/TestPackageConfig.cmake b/third_party/google-glog/cmake/TestPackageConfig.cmake
new file mode 100644
index 0000000..97244ab
--- /dev/null
+++ b/third_party/google-glog/cmake/TestPackageConfig.cmake
@@ -0,0 +1,40 @@
+# Create the build directory
+execute_process (
+  COMMAND ${CMAKE_COMMAND} -E make_directory ${TEST_BINARY_DIR}
+  RESULT_VARIABLE _DIRECTORY_CREATED_SUCCEEDED
+)
+
+if (NOT _DIRECTORY_CREATED_SUCCEEDED EQUAL 0)
+  message (FATAL_ERROR "Failed to create build directory")
+endif (NOT _DIRECTORY_CREATED_SUCCEEDED EQUAL 0)
+
+if (GENERATOR_TOOLSET)
+  list (APPEND _ADDITIONAL_ARGS -T ${GENERATOR_TOOLSET})
+endif (GENERATOR_TOOLSET)
+
+if (GENERATOR_PLATFORM)
+  list (APPEND _ADDITIONAL_ARGS -A ${GENERATOR_PLATFORM})
+endif (GENERATOR_PLATFORM)
+
+# Run CMake
+execute_process (
+  # Capture the PATH environment variable content set during project generation
+  # stage. This is required because later during the build stage the PATH is
+  # modified again (e.g., for MinGW AppVeyor CI builds) by adding back the
+  # directory containing git.exe. Incidently, the Git installation directory
+  # also contains sh.exe which causes MinGW Makefile generation to fail.
+  COMMAND ${CMAKE_COMMAND} -E env PATH=${PATH}
+  ${CMAKE_COMMAND} -C ${INITIAL_CACHE}
+    -G ${GENERATOR}
+    ${_ADDITIONAL_ARGS}
+    -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON
+    -DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=ON
+    -DCMAKE_PREFIX_PATH=${PACKAGE_DIR}
+    ${SOURCE_DIR}
+  WORKING_DIRECTORY ${TEST_BINARY_DIR}
+  RESULT_VARIABLE _GENERATE_SUCCEEDED
+)
+
+if (NOT _GENERATE_SUCCEEDED EQUAL 0)
+  message (FATAL_ERROR "Failed to generate project files using CMake")
+endif (NOT _GENERATE_SUCCEEDED EQUAL 0)
diff --git a/third_party/google-glog/configure.ac b/third_party/google-glog/configure.ac
deleted file mode 100644
index 02a767f..0000000
--- a/third_party/google-glog/configure.ac
+++ /dev/null
@@ -1,246 +0,0 @@
-## Process this file with autoconf to produce configure.
-## In general, the safest way to proceed is to run the following:
-##    % aclocal -I . -I `pwd`/../autoconf && autoheader && autoconf && automake
-
-# make sure we're interpreted by some minimal autoconf
-AC_PREREQ(2.57)
-
-AC_INIT(glog, 0.3.5, opensource@google.com)
-# The argument here is just something that should be in the current directory
-# (for sanity checking)
-AC_CONFIG_SRCDIR(README.md)
-AC_CONFIG_MACRO_DIR([m4])
-AM_INIT_AUTOMAKE
-AM_CONFIG_HEADER(src/config.h)
-
-AC_LANG(C++)
-
-# Checks for programs.
-AC_PROG_CC
-AC_PROG_CPP
-AC_PROG_CXX
-AM_CONDITIONAL(GCC, test "$GCC" = yes)   # let the Makefile know if we're gcc
-
-AC_PROG_LIBTOOL
-AC_SUBST(LIBTOOL_DEPS)
-
-# Check whether some low-level functions/files are available
-AC_HEADER_STDC
-
-# These are tested for by AC_HEADER_STDC, but I check again to set the var
-AC_CHECK_HEADER(stdint.h, ac_cv_have_stdint_h=1, ac_cv_have_stdint_h=0)
-AC_CHECK_HEADER(sys/types.h, ac_cv_have_systypes_h=1, ac_cv_have_systypes_h=0)
-AC_CHECK_HEADER(inttypes.h, ac_cv_have_inttypes_h=1, ac_cv_have_inttypes_h=0)
-AC_CHECK_HEADER(pwd.h, ac_cv_have_pwd_h=1, ac_cv_have_pwd_h=0)
-AC_CHECK_HEADERS(unistd.h, ac_cv_have_unistd_h=1, ac_cv_have_unistd_h=0)
-AC_CHECK_HEADERS(syscall.h)
-AC_CHECK_HEADERS(sys/syscall.h)
-# For backtrace with glibc.
-AC_CHECK_HEADERS(execinfo.h)
-# For backtrace with libunwind.
-AC_CHECK_HEADERS(libunwind.h, ac_cv_have_libunwind_h=1, ac_cv_have_libunwind_h=0)
-AC_CHECK_HEADERS(ucontext.h)
-AC_CHECK_HEADERS(sys/utsname.h)
-AC_CHECK_HEADERS(pwd.h)
-AC_CHECK_HEADERS(syslog.h)
-AC_CHECK_HEADERS(sys/time.h)
-AC_CHECK_HEADERS(glob.h)
-# For backtrace with gcc.
-AC_CHECK_HEADERS(unwind.h)
-
-AC_CHECK_HEADER(windows.h, ac_cv_have_windows_h=1, ac_cv_have_windows_h=0)
-if test x"$ac_cv_have_windows_h" = x"1"; then
-  MINGW_CFLAGS=-Isrc/windows
-fi
-
-AC_CHECK_SIZEOF(void *)
-
-# These are the types I need.  We look for them in either stdint.h,
-# sys/types.h, or inttypes.h, all of which are part of the default-includes.
-AC_CHECK_TYPE(uint16_t, ac_cv_have_uint16_t=1, ac_cv_have_uint16_t=0)
-AC_CHECK_TYPE(u_int16_t, ac_cv_have_u_int16_t=1, ac_cv_have_u_int16_t=0)
-AC_CHECK_TYPE(__uint16, ac_cv_have___uint16=1, ac_cv_have___uint16=0)
-
-AC_CHECK_FUNC(sigaltstack,
-              AC_DEFINE(HAVE_SIGALTSTACK, 1,
-                        [Define if you have the `sigaltstack' function]))
-AC_CHECK_FUNC(sigaction,
-              AC_DEFINE(HAVE_SIGACTION, 1,
-                        [Define if you have the 'sigaction' function]))
-AC_CHECK_FUNC(dladdr,
-              AC_DEFINE(HAVE_DLADDR, 1,
-                        [Define if you have the `dladdr' function]))
-AC_CHECK_FUNC(fcntl,
-              AC_DEFINE(HAVE_FCNTL, 1,
-                        [Define if you have the `fcntl' function]))
-AC_CHECK_FUNC(pread,
-              AC_DEFINE(HAVE_PREAD, 1,
-                        [Define if you have the 'pread' function]))
-AC_CHECK_FUNC(pwrite,
-              AC_DEFINE(HAVE_PWRITE, 1,
-                        [Define if you have the 'pwrite' function]))
-
-AX_C___ATTRIBUTE__
-# We only care about these two attributes.
-if test x"$ac_cv___attribute__" = x"yes"; then
-  ac_cv___attribute___noreturn="__attribute__ ((noreturn))"
-  ac_cv___attribute___noinline="__attribute__ ((noinline))"
-  ac_cv___attribute___printf_4_5="__attribute__((__format__ (__printf__, 4, 5)))"
-else
-  ac_cv___attribute___noreturn=
-  ac_cv___attribute___noinline=
-  ac_cv___attribute___printf_4_5=
-fi
-
-AX_C___BUILTIN_EXPECT
-if test x"$ac_cv___builtin_expect" = x"yes"; then
-  ac_cv_have___builtin_expect=1
-else
-  ac_cv_have___builtin_expect=0
-fi
-
-AX_C___SYNC_VAL_COMPARE_AND_SWAP
-
-# On x86_64, instead of libunwind, we can choose to compile with frame-pointers
-# (This isn't needed on i386, where -fno-omit-frame-pointer is the default).
-AC_ARG_ENABLE(frame_pointers,
-              AS_HELP_STRING([--enable-frame-pointers],
-                             [On x86_64 systems, compile with -fno-omit-frame-pointer (see INSTALL)]),,
-              enable_frame_pointers=no)
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __x86_64__ == 1 ? 0 : 1])],
-                  [is_x86_64=yes], [is_x86_64=no])
-AM_CONDITIONAL(ENABLE_FRAME_POINTERS, test "$enable_frame_pointers" = yes)
-AM_CONDITIONAL(X86_64, test "$is_x86_64" = yes)
-
-AC_ARG_ENABLE(rtti,
-              AS_HELP_STRING([--disable-rtti],
-                             [Disable RTTI in glog]))
-AM_CONDITIONAL(DISABLE_RTTI, test x"$enable_rtti" = x"no")
-if test x"$enable_rtti" = x"no"; then
-  AC_DEFINE(DISABLE_RTTI, 1, [define if glog doesn't use RTTI])
-fi
-
-# Some of the code in this directory depends on pthreads
-ACX_PTHREAD
-if test x"$acx_pthread_ok" = x"yes"; then
-  # To make libglog depend on libpthread on Linux, we need to add
-  # -lpthread in addition to -pthread.
-  AC_CHECK_LIB(pthread, pthread_self)
-fi
-
-# Check if there is google-gflags library installed.
-SAVE_CFLAGS="$CFLAGS"
-SAVE_LIBS="$LIBS"
-AC_ARG_WITH(gflags, AS_HELP_STRING[--with-gflags=GFLAGS_DIR],
-  GFLAGS_CFLAGS="-I${with_gflags}/include"
-  GFLAGS_LIBS="-L${with_gflags}/lib -lgflags"
-  CFLAGS="$CFLAGS $GFLAGS_CFLAGS"
-  LIBS="$LIBS $GFLAGS_LIBS"
-)
-AC_CHECK_LIB(gflags, main, ac_cv_have_libgflags=1, ac_cv_have_libgflags=0)
-if test x"$ac_cv_have_libgflags" = x"1"; then
-  AC_DEFINE(HAVE_LIB_GFLAGS, 1, [define if you have google gflags library])
-  if test x"$GFLAGS_LIBS" = x""; then
-    GFLAGS_LIBS="-lgflags"
-  fi
-else
-  GFLAGS_CFLAGS=
-  GFLAGS_LIBS=
-fi
-CFLAGS="$SAVE_CFLAGS"
-LIBS="$SAVE_LIBS"
-
-# TODO(hamaji): Use official m4 macros provided by testing libraries
-#               once the m4 macro of Google Mocking becomes ready.
-# Check if there is Google Test library installed.
-AC_CHECK_PROG(GTEST_CONFIG, gtest-config, "yes")
-AC_CHECK_LIB(gtest, main, have_gtest_lib="yes")
-if test x"$GTEST_CONFIG" = "xyes" -a x"$have_gtest_lib" = "xyes"; then
-  GTEST_CFLAGS=`gtest-config --cppflags --cxxflags`
-  GTEST_LIBS=`gtest-config --ldflags --libs`
-  AC_DEFINE(HAVE_LIB_GTEST, 1, [define if you have google gtest library])
-
-  # Check if there is Google Mocking library installed.
-  AC_CHECK_PROG(GMOCK_CONFIG, gmock-config, "yes")
-  if test x"$GMOCK_CONFIG" = "xyes"; then
-    GMOCK_CFLAGS=`gmock-config --cppflags --cxxflags`
-    GMOCK_LIBS=`gmock-config --ldflags --libs`
-    AC_DEFINE(HAVE_LIB_GMOCK, 1, [define if you have google gmock library])
-  else
-    # We don't run test cases which use Google Mocking framework.
-    GMOCK_CFLAGS=
-    GMOCK_LIBS=
-  fi
-else
-  # We'll use src/googletest.h for our unittests.
-  GTEST_CFLAGS=
-  GTEST_LIBS=
-fi
-AM_CONDITIONAL(HAVE_GMOCK, test x"$GMOCK_CONFIG" = "xyes")
-
-# We want to link in libunwind if it exists
-UNWIND_LIBS=
-# Unfortunately, we need to check the header file in addition to the
-# lib file to check if libunwind is available since libunwind-0.98
-# doesn't install all necessary header files.
-if test x"$ac_cv_have_libunwind_h" = x"1"; then
- AC_CHECK_LIB(unwind, backtrace, UNWIND_LIBS=-lunwind)
-fi
-AC_SUBST(UNWIND_LIBS)
-if test x"$UNWIND_LIBS" != x""; then
-  AC_DEFINE(HAVE_LIB_UNWIND, 1, [define if you have libunwind])
-fi
-
-# We'd like to use read/write locks in several places in the code.
-# See if our pthreads support extends to that.  Note: for linux, it
-# does as long as you define _XOPEN_SOURCE appropriately.
-AC_RWLOCK
-
-# Find out what namespace 'normal' STL code lives in, and also what namespace
-# the user wants our classes to be defined in
-AC_CXX_STL_NAMESPACE
-AC_DEFINE_GOOGLE_NAMESPACE(google)
-
-AC_CXX_USING_OPERATOR
-
-AC_PC_FROM_UCONTEXT(AC_MSG_WARN(Could not find the PC.  Will not output failed addresses...))
-
-AC_DEFINE_UNQUOTED(TEST_SRC_DIR, "$srcdir", [location of source code])
-
-AC_ARG_ENABLE(unsymbolized-traces,
-              AS_HELP_STRING([--enable-unsymbolized-traces],
-                             [Print raw pc values when symbolization is failed.]),
-              enable_unsymbolized_traces=yes)
-if test x"$enable_unsymbolized_traces" = x"yes"; then
-  AC_DEFINE(PRINT_UNSYMBOLIZED_STACK_TRACES, 1,
-            [define if we should print raw pc values on symbolization failure.])
-fi
-
-# These are what's needed by logging.h.in and raw_logging.h.in
-AC_SUBST(ac_google_start_namespace)
-AC_SUBST(ac_google_end_namespace)
-AC_SUBST(ac_google_namespace)
-AC_SUBST(ac_cv_cxx_using_operator)
-AC_SUBST(ac_cv___attribute___noreturn)
-AC_SUBST(ac_cv___attribute___noinline)
-AC_SUBST(ac_cv___attribute___printf_4_5)
-AC_SUBST(ac_cv_have___builtin_expect)
-AC_SUBST(ac_cv_have_stdint_h)
-AC_SUBST(ac_cv_have_systypes_h)
-AC_SUBST(ac_cv_have_inttypes_h)
-AC_SUBST(ac_cv_have_unistd_h)
-AC_SUBST(ac_cv_have_uint16_t)
-AC_SUBST(ac_cv_have_u_int16_t)
-AC_SUBST(ac_cv_have___uint16)
-AC_SUBST(ac_cv_have_libgflags)
-AC_SUBST(GFLAGS_CFLAGS)
-AC_SUBST(GTEST_CFLAGS)
-AC_SUBST(GMOCK_CFLAGS)
-AC_SUBST(MINGW_CFLAGS)
-AC_SUBST(GFLAGS_LIBS)
-AC_SUBST(GTEST_LIBS)
-AC_SUBST(GMOCK_LIBS)
-
-# Write generated configuration file
-AC_CONFIG_FILES([Makefile src/glog/logging.h src/glog/raw_logging.h src/glog/vlog_is_on.h src/glog/stl_logging.h])
-AC_OUTPUT(libglog.pc)
diff --git a/third_party/google-glog/doc/designstyle.css b/third_party/google-glog/doc/designstyle.css
deleted file mode 100644
index f5d1ec2..0000000
--- a/third_party/google-glog/doc/designstyle.css
+++ /dev/null
@@ -1,115 +0,0 @@
-body {
-  background-color: #ffffff;
-  color: black;
-  margin-right: 1in;
-  margin-left: 1in;
-}
-
-
-h1, h2, h3, h4, h5, h6 {
-  color: #3366ff;
-  font-family: sans-serif;
-}
-@media print {
-  /* Darker version for printing */
-  h1, h2, h3, h4, h5, h6 {
-    color: #000080;
-    font-family: helvetica, sans-serif;
-  }
-}
-
-h1 { 
-  text-align: center;
-  font-size: 18pt;
-}
-h2 {
-  margin-left: -0.5in;
-}
-h3 {
-  margin-left: -0.25in;
-}
-h4 {
-  margin-left: -0.125in;
-}
-hr {
-  margin-left: -1in;
-}
-
-/* Definition lists: definition term bold */
-dt {
-  font-weight: bold;
-}
-
-address {
-  text-align: right;
-}
-/* Use the <code> tag for bits of code and <var> for variables and objects. */
-code,pre,samp,var {
-  color: #006000;
-}
-/* Use the <file> tag for file and directory paths and names. */
-file {
-  color: #905050;
-  font-family: monospace;
-}
-/* Use the <kbd> tag for stuff the user should type. */
-kbd {
-  color: #600000;
-}
-div.note p {
-  float: right;
-  width: 3in;
-  margin-right: 0%;
-  padding: 1px;
-  border: 2px solid #6060a0;
-  background-color: #fffff0;
-}
-
-UL.nobullets {
-  list-style-type: none;
-  list-style-image: none;
-  margin-left: -1em;
-}
-
-/*
-body:after {
-  content: "Google Confidential";
-}
-*/
-
-/* pretty printing styles.  See prettify.js */
-.str { color: #080; }
-.kwd { color: #008; }
-.com { color: #800; }
-.typ { color: #606; }
-.lit { color: #066; }
-.pun { color: #660; }
-.pln { color: #000; }
-.tag { color: #008; }
-.atn { color: #606; }
-.atv { color: #080; }
-pre.prettyprint { padding: 2px; border: 1px solid #888; }
-
-.embsrc { background: #eee; }
-
-@media print {
-  .str { color: #060; }
-  .kwd { color: #006; font-weight: bold; }
-  .com { color: #600; font-style: italic; }
-  .typ { color: #404; font-weight: bold; }
-  .lit { color: #044; }
-  .pun { color: #440; }
-  .pln { color: #000; }
-  .tag { color: #006; font-weight: bold; }
-  .atn { color: #404; }
-  .atv { color: #060; }
-}
-
-/* Table Column Headers */
-.hdr { 
-  color: #006; 
-  font-weight: bold; 
-  background-color: #dddddd; }
-.hdr2 { 
-  color: #006; 
-  background-color: #eeeeee; }
\ No newline at end of file
diff --git a/third_party/google-glog/doc/glog.html b/third_party/google-glog/doc/glog.html
deleted file mode 100644
index 0edaa66..0000000
--- a/third_party/google-glog/doc/glog.html
+++ /dev/null
@@ -1,613 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<head>
-<title>How To Use Google Logging Library (glog)</title>
-
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<link href="http://www.google.com/favicon.ico" type="image/x-icon"
-      rel="shortcut icon">
-<link href="designstyle.css" type="text/css" rel="stylesheet">
-<style type="text/css">
-<!--
-  ol.bluelist li {
-    color: #3366ff;
-    font-family: sans-serif;
-  }
-  ol.bluelist li p {
-    color: #000;
-    font-family: "Times Roman", times, serif;
-  }
-  ul.blacklist li {
-    color: #000;
-    font-family: "Times Roman", times, serif;
-  }
-//-->
-</style>
-</head>
-
-<body>
-
-<h1>How To Use Google Logging Library (glog)</h1>
-<small>(as of
-<script type=text/javascript>
-  var lm = new Date(document.lastModified);
-  document.write(lm.toDateString());
-</script>)
-</small>
-<br>
-
-<h2> <A NAME=intro>Introduction</A> </h2>
-
-<p><b>Google glog</b> is a library that implements application-level
-logging.  This library provides logging APIs based on C++-style
-streams and various helper macros.
-You can log a message by simply streaming things to LOG(&lt;a
-particular <a href="#severity">severity level</a>&gt;), e.g.
-
-<pre>
-   #include &lt;glog/logging.h&gt;
-
-   int main(int argc, char* argv[]) {
-     // Initialize Google's logging library.
-     google::InitGoogleLogging(argv[0]);
-
-     // ...
-     LOG(INFO) &lt;&lt; "Found " &lt;&lt; num_cookies &lt;&lt; " cookies";
-   }
-</pre>
-
-<p>Google glog defines a series of macros that simplify many common logging
-tasks.  You can log messages by severity level, control logging
-behavior from the command line, log based on conditionals, abort the
-program when expected conditions are not met, introduce your own
-verbose logging levels, and more.  This document describes the
-functionality supported by glog.  Please note that this document
-doesn't describe all features in this library, but the most useful
-ones.  If you want to find less common features, please check
-header files under <code>src/glog</code> directory.
-
-<h2> <A NAME=severity>Severity Level</A> </h2>
-
-<p>
-You can specify one of the following severity levels (in
-increasing order of severity): <code>INFO</code>, <code>WARNING</code>,
-<code>ERROR</code>, and <code>FATAL</code>.
-Logging a <code>FATAL</code> message terminates the program (after the
-message is logged).
-Note that messages of a given severity are logged not only in the
-logfile for that severity, but also in all logfiles of lower severity.
-E.g., a message of severity <code>FATAL</code> will be logged to the
-logfiles of severity <code>FATAL</code>, <code>ERROR</code>,
-<code>WARNING</code>, and <code>INFO</code>.
-
-<p>
-The <code>DFATAL</code> severity logs a <code>FATAL</code> error in
-debug mode (i.e., there is no <code>NDEBUG</code> macro defined), but
-avoids halting the program in production by automatically reducing the
-severity to <code>ERROR</code>.
-
-<p>Unless otherwise specified, glog writes to the filename
-"/tmp/&lt;program name&gt;.&lt;hostname&gt;.&lt;user name&gt;.log.&lt;severity level&gt;.&lt;date&gt;.&lt;time&gt;.&lt;pid&gt;"
-(e.g., "/tmp/hello_world.example.com.hamaji.log.INFO.20080709-222411.10474").
-By default, glog copies the log messages of severity level
-<code>ERROR</code> or <code>FATAL</code> to standard error (stderr)
-in addition to log files.
-
-<h2><A NAME=flags>Setting Flags</A></h2>
-
-<p>Several flags influence glog's output behavior.
-If the <a href="https://github.com/gflags/gflags">Google
-gflags library</a> is installed on your machine, the
-<code>configure</code> script (see the INSTALL file in the package for
-detail of this script) will automatically detect and use it,
-allowing you to pass flags on the command line.  For example, if you
-want to turn the flag <code>--logtostderr</code> on, you can start
-your application with the following command line:
-
-<pre>
-   ./your_application --logtostderr=1
-</pre>
-
-If the Google gflags library isn't installed, you set flags via
-environment variables, prefixing the flag name with "GLOG_", e.g.
-
-<pre>
-   GLOG_logtostderr=1 ./your_application
-</pre>
-
-<!-- TODO(hamaji): Fill the version number
-<p>By glog version 0.x.x, you can use GLOG_* environment variables
-even if you have gflags. If both an environment variable and a flag
-are specified, the value specified by a flag wins. E.g., if GLOG_v=0
-and --v=1, the verbosity will be 1, not 0.
--->
-
-<p>The following flags are most commonly used:
-
-<dl>
-<dt><code>logtostderr</code> (<code>bool</code>, default=<code>false</code>)
-<dd>Log messages to stderr instead of logfiles.<br>
-Note: you can set binary flags to <code>true</code> by specifying
-<code>1</code>, <code>true</code>, or <code>yes</code> (case
-insensitive).
-Also, you can set binary flags to <code>false</code> by specifying
-<code>0</code>, <code>false</code>, or <code>no</code> (again, case
-insensitive).
-<dt><code>stderrthreshold</code> (<code>int</code>, default=2, which
-is <code>ERROR</code>)
-<dd>Copy log messages at or above this level to stderr in
-addition to logfiles.  The numbers of severity levels
-<code>INFO</code>, <code>WARNING</code>, <code>ERROR</code>, and
-<code>FATAL</code> are 0, 1, 2, and 3, respectively.
-<dt><code>minloglevel</code> (<code>int</code>, default=0, which
-is <code>INFO</code>)
-<dd>Log messages at or above this level.  Again, the numbers of
-severity levels <code>INFO</code>, <code>WARNING</code>,
-<code>ERROR</code>, and <code>FATAL</code> are 0, 1, 2, and 3,
-respectively.
-<dt><code>log_dir</code> (<code>string</code>, default="")
-<dd>If specified, logfiles are written into this directory instead
-of the default logging directory.
-<dt><code>v</code> (<code>int</code>, default=0)
-<dd>Show all <code>VLOG(m)</code> messages for <code>m</code> less or
-equal the value of this flag.  Overridable by --vmodule.
-See <a href="#verbose">the section about verbose logging</a> for more
-detail.
-<dt><code>vmodule</code> (<code>string</code>, default="")
-<dd>Per-module verbose level.  The argument has to contain a
-comma-separated list of &lt;module name&gt;=&lt;log level&gt;.
-&lt;module name&gt;
-is a glob pattern (e.g., <code>gfs*</code> for all modules whose name
-starts with "gfs"), matched against the filename base
-(that is, name ignoring .cc/.h./-inl.h).
-&lt;log level&gt; overrides any value given by --v.
-See also <a href="#verbose">the section about verbose logging</a>.
-</dl>
-
-<p>There are some other flags defined in logging.cc.  Please grep the
-source code for "DEFINE_" to see a complete list of all flags.
-
-<p>You can also modify flag values in your program by modifying global
-variables <code>FLAGS_*</code> . Most settings start working
-immediately after you update <code>FLAGS_*</code> . The exceptions are
-the flags related to destination files. For example, you might want to
-set <code>FLAGS_log_dir</code> before
-calling <code>google::InitGoogleLogging</code> . Here is an example:
-
-<pre>
-   LOG(INFO) << "file";
-   // Most flags work immediately after updating values.
-   FLAGS_logtostderr = 1;
-   LOG(INFO) << "stderr";
-   FLAGS_logtostderr = 0;
-   // This won't change the log destination. If you want to set this
-   // value, you should do this before google::InitGoogleLogging .
-   FLAGS_log_dir = "/some/log/directory";
-   LOG(INFO) << "the same file";
-</pre>
-
-<h2><A NAME=conditional>Conditional / Occasional Logging</A></h2>
-
-<p>Sometimes, you may only want to log a message under certain
-conditions. You can use the following macros to perform conditional
-logging:
-
-<pre>
-   LOG_IF(INFO, num_cookies &gt; 10) &lt;&lt; "Got lots of cookies";
-</pre>
-
-The "Got lots of cookies" message is logged only when the variable
-<code>num_cookies</code> exceeds 10.
-
-If a line of code is executed many times, it may be useful to only log
-a message at certain intervals.  This kind of logging is most useful
-for informational messages.
-
-<pre>
-   LOG_EVERY_N(INFO, 10) &lt;&lt; "Got the " &lt;&lt; google::COUNTER &lt;&lt; "th cookie";
-</pre>
-
-<p>The above line outputs a log messages on the 1st, 11th,
-21st, ... times it is executed.  Note that the special
-<code>google::COUNTER</code> value is used to identify which repetition is
-happening.
-
-<p>You can combine conditional and occasional logging with the
-following macro.
-
-<pre>
-   LOG_IF_EVERY_N(INFO, (size &gt; 1024), 10) &lt;&lt; "Got the " &lt;&lt; google::COUNTER
-                                           &lt;&lt; "th big cookie";
-</pre>
-
-<p>Instead of outputting a message every nth time, you can also limit
-the output to the first n occurrences:
-
-<pre>
-   LOG_FIRST_N(INFO, 20) &lt;&lt; "Got the " &lt;&lt; google::COUNTER &lt;&lt; "th cookie";
-</pre>
-
-<p>Outputs log messages for the first 20 times it is executed.  Again,
-the <code>google::COUNTER</code> identifier indicates which repetition is
-happening.
-
-<h2><A NAME=debug>Debug Mode Support</A></h2>
-
-<p>Special "debug mode" logging macros only have an effect in debug
-mode and are compiled away to nothing for non-debug mode
-compiles.  Use these macros to avoid slowing down your production
-application due to excessive logging.
-
-<pre>
-   DLOG(INFO) &lt;&lt; "Found cookies";
-
-   DLOG_IF(INFO, num_cookies &gt; 10) &lt;&lt; "Got lots of cookies";
-
-   DLOG_EVERY_N(INFO, 10) &lt;&lt; "Got the " &lt;&lt; google::COUNTER &lt;&lt; "th cookie";
-</pre>
-
-<h2><A NAME=check>CHECK Macros</A></h2>
-
-<p>It is a good practice to check expected conditions in your program
-frequently to detect errors as early as possible. The
-<code>CHECK</code> macro provides the ability to abort the application
-when a condition is not met, similar to the <code>assert</code> macro
-defined in the standard C library.
-
-<p><code>CHECK</code> aborts the application if a condition is not
-true.  Unlike <code>assert</code>, it is *not* controlled by
-<code>NDEBUG</code>, so the check will be executed regardless of
-compilation mode.  Therefore, <code>fp-&gt;Write(x)</code> in the
-following example is always executed:
-
-<pre>
-   CHECK(fp-&gt;Write(x) == 4) &lt;&lt; "Write failed!";
-</pre>
-
-<p>There are various helper macros for
-equality/inequality checks - <code>CHECK_EQ</code>,
-<code>CHECK_NE</code>, <code>CHECK_LE</code>, <code>CHECK_LT</code>,
-<code>CHECK_GE</code>, and <code>CHECK_GT</code>.
-They compare two values, and log a
-<code>FATAL</code> message including the two values when the result is
-not as expected.  The values must have <code>operator&lt;&lt;(ostream,
-...)</code> defined.
-
-<p>You may append to the error message like so:
-
-<pre>
-   CHECK_NE(1, 2) &lt;&lt; ": The world must be ending!";
-</pre>
-
-<p>We are very careful to ensure that each argument is evaluated exactly
-once, and that anything which is legal to pass as a function argument is
-legal here.  In particular, the arguments may be temporary expressions
-which will end up being destroyed at the end of the apparent statement,
-for example:
-
-<pre>
-   CHECK_EQ(string("abc")[1], 'b');
-</pre>
-
-<p>The compiler reports an error if one of the arguments is a
-pointer and the other is NULL. To work around this, simply static_cast
-NULL to the type of the desired pointer.
-
-<pre>
-   CHECK_EQ(some_ptr, static_cast&lt;SomeType*&gt;(NULL));
-</pre>
-
-<p>Better yet, use the CHECK_NOTNULL macro:
-
-<pre>
-   CHECK_NOTNULL(some_ptr);
-   some_ptr-&gt;DoSomething();
-</pre>
-
-<p>Since this macro returns the given pointer, this is very useful in
-constructor initializer lists.
-
-<pre>
-   struct S {
-     S(Something* ptr) : ptr_(CHECK_NOTNULL(ptr)) {}
-     Something* ptr_;
-   };
-</pre>
-
-<p>Note that you cannot use this macro as a C++ stream due to this
-feature.  Please use <code>CHECK_EQ</code> described above to log a
-custom message before aborting the application.
-
-<p>If you are comparing C strings (char *), a handy set of macros
-performs case sensitive as well as case insensitive comparisons -
-<code>CHECK_STREQ</code>, <code>CHECK_STRNE</code>,
-<code>CHECK_STRCASEEQ</code>, and <code>CHECK_STRCASENE</code>.  The
-CASE versions are case-insensitive.  You can safely pass <code>NULL</code>
-pointers for this macro.  They treat <code>NULL</code> and any
-non-<code>NULL</code> string as not equal.  Two <code>NULL</code>s are
-equal.
-
-<p>Note that both arguments may be temporary strings which are
-destructed at the end of the current "full expression"
-(e.g., <code>CHECK_STREQ(Foo().c_str(), Bar().c_str())</code> where
-<code>Foo</code> and <code>Bar</code> return C++'s
-<code>std::string</code>).
-
-<p>The <code>CHECK_DOUBLE_EQ</code> macro checks the equality of two
-floating point values, accepting a small error margin.
-<code>CHECK_NEAR</code> accepts a third floating point argument, which
-specifies the acceptable error margin.
-
-<h2><A NAME=verbose>Verbose Logging</A></h2>
-
-<p>When you are chasing difficult bugs, thorough log messages are very
-useful.  However, you may want to ignore too verbose messages in usual
-development.  For such verbose logging, glog provides the
-<code>VLOG</code> macro, which allows you to define your own numeric
-logging levels.  The <code>--v</code> command line option controls
-which verbose messages are logged:
-
-<pre>
-   VLOG(1) &lt;&lt; "I'm printed when you run the program with --v=1 or higher";
-   VLOG(2) &lt;&lt; "I'm printed when you run the program with --v=2 or higher";
-</pre>
-
-<p>With <code>VLOG</code>, the lower the verbose level, the more
-likely messages are to be logged.  For example, if
-<code>--v==1</code>, <code>VLOG(1)</code> will log, but
-<code>VLOG(2)</code> will not log.  This is opposite of the severity
-level, where <code>INFO</code> is 0, and <code>ERROR</code> is 2.
-<code>--minloglevel</code> of 1 will log <code>WARNING</code> and
-above.  Though you can specify any integers for both <code>VLOG</code>
-macro and <code>--v</code> flag, the common values for them are small
-positive integers.  For example, if you write <code>VLOG(0)</code>,
-you should specify <code>--v=-1</code> or lower to silence it.  This
-is less useful since we may not want verbose logs by default in most
-cases.  The <code>VLOG</code> macros always log at the
-<code>INFO</code> log level (when they log at all).
-
-<p>Verbose logging can be controlled from the command line on a
-per-module basis:
-
-<pre>
-   --vmodule=mapreduce=2,file=1,gfs*=3 --v=0
-</pre>
-
-<p>will:
-
-<ul>
-  <li>a. Print VLOG(2) and lower messages from mapreduce.{h,cc}
-  <li>b. Print VLOG(1) and lower messages from file.{h,cc}
-  <li>c. Print VLOG(3) and lower messages from files prefixed with "gfs"
-  <li>d. Print VLOG(0) and lower messages from elsewhere
-</ul>
-
-<p>The wildcarding functionality shown by (c) supports both '*'
-(matches 0 or more characters) and '?' (matches any single character)
-wildcards.  Please also check the section about <a
-href="#flags">command line flags</a>.
-
-<p>There's also <code>VLOG_IS_ON(n)</code> "verbose level" condition
-macro.  This macro returns true when the <code>--v</code> is equal or
-greater than <code>n</code>.  To be used as
-
-<pre>
-   if (VLOG_IS_ON(2)) {
-     // do some logging preparation and logging
-     // that can't be accomplished with just VLOG(2) &lt;&lt; ...;
-   }
-</pre>
-
-<p>Verbose level condition macros <code>VLOG_IF</code>,
-<code>VLOG_EVERY_N</code> and <code>VLOG_IF_EVERY_N</code> behave
-analogous to <code>LOG_IF</code>, <code>LOG_EVERY_N</code>,
-<code>LOF_IF_EVERY</code>, but accept a numeric verbosity level as
-opposed to a severity level.
-
-<pre>
-   VLOG_IF(1, (size &gt; 1024))
-      &lt;&lt; "I'm printed when size is more than 1024 and when you run the "
-         "program with --v=1 or more";
-   VLOG_EVERY_N(1, 10)
-      &lt;&lt; "I'm printed every 10th occurrence, and when you run the program "
-         "with --v=1 or more. Present occurence is " &lt;&lt; google::COUNTER;
-   VLOG_IF_EVERY_N(1, (size &gt; 1024), 10)
-      &lt;&lt; "I'm printed on every 10th occurence of case when size is more "
-         " than 1024, when you run the program with --v=1 or more. ";
-         "Present occurence is " &lt;&lt; google::COUNTER;
-</pre>
-
-<h2> <A name="signal">Failure Signal Handler</A> </h2>
-
-<p>
-The library provides a convenient signal handler that will dump useful
-information when the program crashes on certain signals such as SIGSEGV.
-The signal handler can be installed by
-google::InstallFailureSignalHandler().  The following is an example of output
-from the signal handler.
-
-<pre>
-*** Aborted at 1225095260 (unix time) try "date -d @1225095260" if you are using GNU date ***
-*** SIGSEGV (@0x0) received by PID 17711 (TID 0x7f893090a6f0) from PID 0; stack trace: ***
-PC: @           0x412eb1 TestWaitingLogSink::send()
-    @     0x7f892fb417d0 (unknown)
-    @           0x412eb1 TestWaitingLogSink::send()
-    @     0x7f89304f7f06 google::LogMessage::SendToLog()
-    @     0x7f89304f35af google::LogMessage::Flush()
-    @     0x7f89304f3739 google::LogMessage::~LogMessage()
-    @           0x408cf4 TestLogSinkWaitTillSent()
-    @           0x4115de main
-    @     0x7f892f7ef1c4 (unknown)
-    @           0x4046f9 (unknown)
-</pre>
-
-<p>
-By default, the signal handler writes the failure dump to the standard
-error.  You can customize the destination by InstallFailureWriter().
-
-<h2> <A name="misc">Miscellaneous Notes</A> </h2>
-
-<h3><A NAME=message>Performance of Messages</A></h3>
-
-<p>The conditional logging macros provided by glog (e.g.,
-<code>CHECK</code>, <code>LOG_IF</code>, <code>VLOG</code>, ...) are
-carefully implemented and don't execute the right hand side
-expressions when the conditions are false.  So, the following check
-may not sacrifice the performance of your application.
-
-<pre>
-   CHECK(obj.ok) &lt;&lt; obj.CreatePrettyFormattedStringButVerySlow();
-</pre>
-
-<h3><A NAME=failure>User-defined Failure Function</A></h3>
-
-<p><code>FATAL</code> severity level messages or unsatisfied
-<code>CHECK</code> condition terminate your program.  You can change
-the behavior of the termination by
-<code>InstallFailureFunction</code>.
-
-<pre>
-   void YourFailureFunction() {
-     // Reports something...
-     exit(1);
-   }
-
-   int main(int argc, char* argv[]) {
-     google::InstallFailureFunction(&amp;YourFailureFunction);
-   }
-</pre>
-
-<p>By default, glog tries to dump stacktrace and makes the program
-exit with status 1.  The stacktrace is produced only when you run the
-program on an architecture for which glog supports stack tracing (as
-of September 2008, glog supports stack tracing for x86 and x86_64).
-
-<h3><A NAME=raw>Raw Logging</A></h3>
-
-<p>The header file <code>&lt;glog/raw_logging.h&gt;</code> can be
-used for thread-safe logging, which does not allocate any memory or
-acquire any locks.  Therefore, the macros defined in this
-header file can be used by low-level memory allocation and
-synchronization code.
-Please check <code>src/glog/raw_logging.h.in</code> for detail.
-</p>
-
-<h3><A NAME=plog>Google Style perror()</A></h3>
-
-<p><code>PLOG()</code> and <code>PLOG_IF()</code> and
-<code>PCHECK()</code> behave exactly like their <code>LOG*</code> and
-<code>CHECK</code> equivalents with the addition that they append a
-description of the current state of errno to their output lines.
-E.g.
-
-<pre>
-   PCHECK(write(1, NULL, 2) &gt;= 0) &lt;&lt; "Write NULL failed";
-</pre>
-
-<p>This check fails with the following error message.
-
-<pre>
-   F0825 185142 test.cc:22] Check failed: write(1, NULL, 2) &gt;= 0 Write NULL failed: Bad address [14]
-</pre>
-
-<h3><A NAME=syslog>Syslog</A></h3>
-
-<p><code>SYSLOG</code>, <code>SYSLOG_IF</code>, and
-<code>SYSLOG_EVERY_N</code> macros are available.
-These log to syslog in addition to the normal logs.  Be aware that
-logging to syslog can drastically impact performance, especially if
-syslog is configured for remote logging!  Make sure you understand the
-implications of outputting to syslog before you use these macros. In
-general, it's wise to use these macros sparingly.
-
-<h3><A NAME=strip>Strip Logging Messages</A></h3>
-
-<p>Strings used in log messages can increase the size of your binary
-and present a privacy concern.  You can therefore instruct glog to
-remove all strings which fall below a certain severity level by using
-the GOOGLE_STRIP_LOG macro:
-
-<p>If your application has code like this:
-
-<pre>
-   #define GOOGLE_STRIP_LOG 1    // this must go before the #include!
-   #include &lt;glog/logging.h&gt;
-</pre>
-
-<p>The compiler will remove the log messages whose severities are less
-than the specified integer value.  Since
-<code>VLOG</code> logs at the severity level <code>INFO</code>
-(numeric value <code>0</code>),
-setting <code>GOOGLE_STRIP_LOG</code> to 1 or greater removes
-all log messages associated with <code>VLOG</code>s as well as
-<code>INFO</code> log statements.
-
-<h3><A NAME=windows>Notes for Windows users</A></h3>
-
-<p>Google glog defines a severity level <code>ERROR</code>, which is
-also defined in <code>windows.h</code> . You can make glog not define
-<code>INFO</code>, <code>WARNING</code>, <code>ERROR</code>,
-and <code>FATAL</code> by defining
-<code>GLOG_NO_ABBREVIATED_SEVERITIES</code> before
-including <code>glog/logging.h</code> . Even with this macro, you can
-still use the iostream like logging facilities:
-
-<pre>
-  #define GLOG_NO_ABBREVIATED_SEVERITIES
-  #include &lt;windows.h&gt;
-  #include &lt;glog/logging.h&gt;
-
-  // ...
-
-  LOG(ERROR) &lt;&lt; "This should work";
-  LOG_IF(ERROR, x &gt; y) &lt;&lt; "This should be also OK";
-</pre>
-
-<p>
-However, you cannot
-use <code>INFO</code>, <code>WARNING</code>, <code>ERROR</code>,
-and <code>FATAL</code> anymore for functions defined
-in <code>glog/logging.h</code> .
-
-<pre>
-  #define GLOG_NO_ABBREVIATED_SEVERITIES
-  #include &lt;windows.h&gt;
-  #include &lt;glog/logging.h&gt;
-
-  // ...
-
-  // This won't work.
-  // google::FlushLogFiles(google::ERROR);
-
-  // Use this instead.
-  google::FlushLogFiles(google::GLOG_ERROR);
-</pre>
-
-<p>
-If you don't need <code>ERROR</code> defined
-by <code>windows.h</code>, there are a couple of more workarounds
-which sometimes don't work:
-
-<ul>
-  <li>#define <code>WIN32_LEAN_AND_MEAN</code> or <code>NOGDI</code>
-      <strong>before</strong> you #include <code>windows.h</code> .
-  <li>#undef <code>ERROR</code> <strong>after</strong> you #include
-      <code>windows.h</code> .
-</ul>
-
-<p>See <a href="http://code.google.com/p/google-glog/issues/detail?id=33">
-this issue</a> for more detail.
-
-<hr>
-<address>
-Shinichiro Hamaji<br>
-Gregor Hohpe<br>
-<script type=text/javascript>
-  var lm = new Date(document.lastModified);
-  document.write(lm.toDateString());
-</script>
-</address>
-
-</body>
-</html>
diff --git a/third_party/google-glog/glog-config.cmake.in b/third_party/google-glog/glog-config.cmake.in
index aabdedc..5c5c9c0 100644
--- a/third_party/google-glog/glog-config.cmake.in
+++ b/third_party/google-glog/glog-config.cmake.in
@@ -5,7 +5,9 @@
 @PACKAGE_INIT@
 
 include (CMakeFindDependencyMacro)
+include (${CMAKE_CURRENT_LIST_DIR}/glog-modules.cmake)
 
 @gflags_DEPENDENCY@
+@Unwind_DEPENDENCY@
 
-include ("${CMAKE_CURRENT_LIST_DIR}/glog-targets.cmake")
+include (${CMAKE_CURRENT_LIST_DIR}/glog-targets.cmake)
diff --git a/third_party/google-glog/glog-modules.cmake.in b/third_party/google-glog/glog-modules.cmake.in
new file mode 100644
index 0000000..71c5160
--- /dev/null
+++ b/third_party/google-glog/glog-modules.cmake.in
@@ -0,0 +1,18 @@
+cmake_policy (PUSH)
+cmake_policy (SET CMP0057 NEW)
+
+if (CMAKE_VERSION VERSION_LESS 3.3)
+  message (FATAL_ERROR "glog-modules.cmake requires the consumer "
+    "to use CMake 3.3 (or newer)")
+endif (CMAKE_VERSION VERSION_LESS 3.3)
+
+set (glog_MODULE_PATH "@glog_FULL_CMake_DATADIR@")
+list (APPEND CMAKE_MODULE_PATH ${glog_MODULE_PATH})
+
+if (NOT glog_MODULE_PATH IN_LIST CMAKE_MODULE_PATH)
+  message (FATAL_ERROR "Cannot add '${glog_MODULE_PATH}' to "
+    "CMAKE_MODULE_PATH. This will cause glog-config.cmake to fail at "
+    "locating required find modules. Make sure CMAKE_MODULE_PATH is not a cache variable.")
+endif (NOT glog_MODULE_PATH IN_LIST CMAKE_MODULE_PATH)
+
+cmake_policy (POP)
diff --git a/third_party/google-glog/libglog.pc.in b/third_party/google-glog/libglog.pc.in
index ad2b077..2303e2e 100644
--- a/third_party/google-glog/libglog.pc.in
+++ b/third_party/google-glog/libglog.pc.in
@@ -7,4 +7,5 @@
 Description: Google Log (glog) C++ logging framework
 Version: @VERSION@
 Libs: -L${libdir} -lglog
+Libs.private: @glog_libraries_options_for_static_linking@
 Cflags: -I${includedir}
diff --git a/third_party/google-glog/m4/ac_have_attribute.m4 b/third_party/google-glog/m4/ac_have_attribute.m4
deleted file mode 100644
index 19f4021..0000000
--- a/third_party/google-glog/m4/ac_have_attribute.m4
+++ /dev/null
@@ -1,16 +0,0 @@
-AC_DEFUN([AX_C___ATTRIBUTE__], [
-  AC_MSG_CHECKING(for __attribute__)
-  AC_CACHE_VAL(ac_cv___attribute__, [
-    AC_TRY_COMPILE(
-      [#include <stdlib.h>
-       static void foo(void) __attribute__ ((unused));
-       void foo(void) { exit(1); }],
-      [],
-      ac_cv___attribute__=yes,
-      ac_cv___attribute__=no
-    )])
-  if test "$ac_cv___attribute__" = "yes"; then
-    AC_DEFINE(HAVE___ATTRIBUTE__, 1, [define if your compiler has __attribute__])
-  fi
-  AC_MSG_RESULT($ac_cv___attribute__)
-])
diff --git a/third_party/google-glog/m4/ac_have_builtin_expect.m4 b/third_party/google-glog/m4/ac_have_builtin_expect.m4
deleted file mode 100644
index e91b6fd..0000000
--- a/third_party/google-glog/m4/ac_have_builtin_expect.m4
+++ /dev/null
@@ -1,14 +0,0 @@
-AC_DEFUN([AX_C___BUILTIN_EXPECT], [
-  AC_MSG_CHECKING(for __builtin_expect)
-  AC_CACHE_VAL(ac_cv___builtin_expect, [
-    AC_TRY_COMPILE(
-      [int foo(void) { if (__builtin_expect(0, 0)) return 1; return 0; }],
-      [],
-      ac_cv___builtin_expect=yes,
-      ac_cv___builtin_expect=no
-    )])
-  if test "$ac_cv___builtin_expect" = "yes"; then
-    AC_DEFINE(HAVE___BUILTIN_EXPECT, 1, [define if your compiler has __builtin_expect])
-  fi
-  AC_MSG_RESULT($ac_cv___builtin_expect)
-])
diff --git a/third_party/google-glog/m4/ac_have_sync_val_compare_and_swap.m4 b/third_party/google-glog/m4/ac_have_sync_val_compare_and_swap.m4
deleted file mode 100644
index 88b027e..0000000
--- a/third_party/google-glog/m4/ac_have_sync_val_compare_and_swap.m4
+++ /dev/null
@@ -1,14 +0,0 @@
-AC_DEFUN([AX_C___SYNC_VAL_COMPARE_AND_SWAP], [
-  AC_MSG_CHECKING(for __sync_val_compare_and_swap)
-  AC_CACHE_VAL(ac_cv___sync_val_compare_and_swap, [
-    AC_TRY_LINK(
-      [],
-      [int a; if (__sync_val_compare_and_swap(&a, 0, 1)) return 1; return 0;],
-      ac_cv___sync_val_compare_and_swap=yes,
-      ac_cv___sync_val_compare_and_swap=no
-    )])
-  if test "$ac_cv___sync_val_compare_and_swap" = "yes"; then
-    AC_DEFINE(HAVE___SYNC_VAL_COMPARE_AND_SWAP, 1, [define if your compiler has __sync_val_compare_and_swap])
-  fi
-  AC_MSG_RESULT($ac_cv___sync_val_compare_and_swap)
-])
diff --git a/third_party/google-glog/m4/ac_rwlock.m4 b/third_party/google-glog/m4/ac_rwlock.m4
deleted file mode 100644
index 5065bcc..0000000
--- a/third_party/google-glog/m4/ac_rwlock.m4
+++ /dev/null
@@ -1,31 +0,0 @@
-# TODO(csilvers): it would be better to actually try to link against
-# -pthreads, to make sure it defines these methods, but that may be
-# too hard, since pthread support is really tricky.
-
-# Check for support for pthread_rwlock_init() etc.
-# These aren't posix, but are widely supported.  To get them on linux,
-# you need to define _XOPEN_SOURCE first, so this check assumes your
-# application does that.
-#
-# Note: OS X (as of 6/1/06) seems to support pthread_rwlock, but
-# doesn't define PTHREAD_RWLOCK_INITIALIZER.  Therefore, we don't test
-# that particularly macro.  It's probably best if you don't use that
-# macro in your code either.
-
-AC_DEFUN([AC_RWLOCK],
-[AC_CACHE_CHECK(support for pthread_rwlock_* functions,
-ac_cv_rwlock,
-[AC_LANG_SAVE
- AC_LANG_C
- AC_TRY_COMPILE([#define _XOPEN_SOURCE 500
-                 #include <pthread.h>],
-		[pthread_rwlock_t l; pthread_rwlock_init(&l, NULL);
-                 pthread_rwlock_rdlock(&l); 
-                 return 0;],
-                ac_cv_rwlock=yes, ac_cv_rwlock=no)
- AC_LANG_RESTORE
-])
-if test "$ac_cv_rwlock" = yes; then
-  AC_DEFINE(HAVE_RWLOCK,1,[define if the compiler implements pthread_rwlock_*])
-fi
-])
diff --git a/third_party/google-glog/m4/acx_pthread.m4 b/third_party/google-glog/m4/acx_pthread.m4
deleted file mode 100644
index 2cf20de..0000000
--- a/third_party/google-glog/m4/acx_pthread.m4
+++ /dev/null
@@ -1,363 +0,0 @@
-# This was retrieved from
-#    http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?revision=1277&root=avahi
-# See also (perhaps for new versions?)
-#    http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?root=avahi
-#
-# We've rewritten the inconsistency check code (from avahi), to work
-# more broadly.  In particular, it no longer assumes ld accepts -zdefs.
-# This caused a restructing of the code, but the functionality has only
-# changed a little.
-
-dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
-dnl
-dnl @summary figure out how to build C programs using POSIX threads
-dnl
-dnl This macro figures out how to build C programs using POSIX threads.
-dnl It sets the PTHREAD_LIBS output variable to the threads library and
-dnl linker flags, and the PTHREAD_CFLAGS output variable to any special
-dnl C compiler flags that are needed. (The user can also force certain
-dnl compiler flags/libs to be tested by setting these environment
-dnl variables.)
-dnl
-dnl Also sets PTHREAD_CC to any special C compiler that is needed for
-dnl multi-threaded programs (defaults to the value of CC otherwise).
-dnl (This is necessary on AIX to use the special cc_r compiler alias.)
-dnl
-dnl NOTE: You are assumed to not only compile your program with these
-dnl flags, but also link it with them as well. e.g. you should link
-dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
-dnl $LIBS
-dnl
-dnl If you are only building threads programs, you may wish to use
-dnl these variables in your default LIBS, CFLAGS, and CC:
-dnl
-dnl        LIBS="$PTHREAD_LIBS $LIBS"
-dnl        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-dnl        CC="$PTHREAD_CC"
-dnl
-dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
-dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
-dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
-dnl
-dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
-dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to
-dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the
-dnl default action will define HAVE_PTHREAD.
-dnl
-dnl Please let the authors know if this macro fails on any platform, or
-dnl if you have any other suggestions or comments. This macro was based
-dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with
-dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros
-dnl posted by Alejandro Forero Cuervo to the autoconf macro repository.
-dnl We are also grateful for the helpful feedback of numerous users.
-dnl
-dnl @category InstalledPackages
-dnl @author Steven G. Johnson <stevenj@alum.mit.edu>
-dnl @version 2006-05-29
-dnl @license GPLWithACException
-dnl 
-dnl Checks for GCC shared/pthread inconsistency based on work by
-dnl Marcin Owsiany <marcin@owsiany.pl>
-
-
-AC_DEFUN([ACX_PTHREAD], [
-AC_REQUIRE([AC_CANONICAL_HOST])
-AC_LANG_SAVE
-AC_LANG_C
-acx_pthread_ok=no
-
-# We used to check for pthread.h first, but this fails if pthread.h
-# requires special compiler flags (e.g. on True64 or Sequent).
-# It gets checked for in the link test anyway.
-
-# First of all, check if the user has set any of the PTHREAD_LIBS,
-# etcetera environment variables, and if threads linking works using
-# them:
-if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
-        save_CFLAGS="$CFLAGS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-        save_LIBS="$LIBS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-        AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
-        AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
-        AC_MSG_RESULT($acx_pthread_ok)
-        if test x"$acx_pthread_ok" = xno; then
-                PTHREAD_LIBS=""
-                PTHREAD_CFLAGS=""
-        fi
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
-fi
-
-# We must check for the threads library under a number of different
-# names; the ordering is very important because some systems
-# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
-# libraries is broken (non-POSIX).
-
-# Create a list of thread flags to try.  Items starting with a "-" are
-# C compiler flags, and other items are library names, except for "none"
-# which indicates that we try without any flags at all, and "pthread-config"
-# which is a program returning the flags for the Pth emulation library.
-
-acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
-
-# The ordering *is* (sometimes) important.  Some notes on the
-# individual items follow:
-
-# pthreads: AIX (must check this before -lpthread)
-# none: in case threads are in libc; should be tried before -Kthread and
-#       other compiler flags to prevent continual compiler warnings
-# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
-# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
-# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
-# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
-# -pthreads: Solaris/gcc
-# -mthreads: Mingw32/gcc, Lynx/gcc
-# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
-#      doesn't hurt to check since this sometimes defines pthreads too;
-#      also defines -D_REENTRANT)
-#      ... -mt is also the pthreads flag for HP/aCC
-# pthread: Linux, etcetera
-# --thread-safe: KAI C++
-# pthread-config: use pthread-config program (for GNU Pth library)
-
-case "${host_cpu}-${host_os}" in
-        *solaris*)
-
-        # On Solaris (at least, for some versions), libc contains stubbed
-        # (non-functional) versions of the pthreads routines, so link-based
-        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
-        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
-        # a function called by this macro, so we could check for that, but
-        # who knows whether they'll stub that too in a future libc.)  So,
-        # we'll just look for -pthreads and -lpthread first:
-
-        acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
-        ;;
-esac
-
-if test x"$acx_pthread_ok" = xno; then
-for flag in $acx_pthread_flags; do
-
-        case $flag in
-                none)
-                AC_MSG_CHECKING([whether pthreads work without any flags])
-                ;;
-
-                -*)
-                AC_MSG_CHECKING([whether pthreads work with $flag])
-                PTHREAD_CFLAGS="$flag"
-                ;;
-
-		pthread-config)
-		AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
-		if test x"$acx_pthread_config" = xno; then continue; fi
-		PTHREAD_CFLAGS="`pthread-config --cflags`"
-		PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
-		;;
-
-                *)
-                AC_MSG_CHECKING([for the pthreads library -l$flag])
-                PTHREAD_LIBS="-l$flag"
-                ;;
-        esac
-
-        save_LIBS="$LIBS"
-        save_CFLAGS="$CFLAGS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
-        # Check for various functions.  We must include pthread.h,
-        # since some functions may be macros.  (On the Sequent, we
-        # need a special flag -Kthread to make this header compile.)
-        # We check for pthread_join because it is in -lpthread on IRIX
-        # while pthread_create is in libc.  We check for pthread_attr_init
-        # due to DEC craziness with -lpthreads.  We check for
-        # pthread_cleanup_push because it is one of the few pthread
-        # functions on Solaris that doesn't have a non-functional libc stub.
-        # We try pthread_create on general principles.
-        AC_TRY_LINK([#include <pthread.h>],
-                    [pthread_t th; pthread_join(th, 0);
-                     pthread_attr_init(0); pthread_cleanup_push(0, 0);
-                     pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
-                    [acx_pthread_ok=yes])
-
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
-
-        AC_MSG_RESULT($acx_pthread_ok)
-        if test "x$acx_pthread_ok" = xyes; then
-                break;
-        fi
-
-        PTHREAD_LIBS=""
-        PTHREAD_CFLAGS=""
-done
-fi
-
-# Various other checks:
-if test "x$acx_pthread_ok" = xyes; then
-        save_LIBS="$LIBS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-        save_CFLAGS="$CFLAGS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
-        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
-	AC_MSG_CHECKING([for joinable pthread attribute])
-	attr_name=unknown
-	for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
-	    AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
-                        [attr_name=$attr; break])
-	done
-        AC_MSG_RESULT($attr_name)
-        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
-            AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
-                               [Define to necessary symbol if this constant
-                                uses a non-standard name on your system.])
-        fi
-
-        AC_MSG_CHECKING([if more special flags are required for pthreads])
-        flag=no
-        case "${host_cpu}-${host_os}" in
-            *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
-            *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
-        esac
-        AC_MSG_RESULT(${flag})
-        if test "x$flag" != xno; then
-            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
-        fi
-
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
-        # More AIX lossage: must compile with xlc_r or cc_r
-	if test x"$GCC" != xyes; then
-          AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
-        else
-          PTHREAD_CC=$CC
-	fi
-
-	# The next part tries to detect GCC inconsistency with -shared on some
-	# architectures and systems. The problem is that in certain
-	# configurations, when -shared is specified, GCC "forgets" to
-	# internally use various flags which are still necessary.
-	
-	#
-	# Prepare the flags
-	#
-	save_CFLAGS="$CFLAGS"
-	save_LIBS="$LIBS"
-	save_CC="$CC"
-	
-	# Try with the flags determined by the earlier checks.
-	#
-	# -Wl,-z,defs forces link-time symbol resolution, so that the
-	# linking checks with -shared actually have any value
-	#
-	# FIXME: -fPIC is required for -shared on many architectures,
-	# so we specify it here, but the right way would probably be to
-	# properly detect whether it is actually required.
-	CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS"
-	LIBS="$PTHREAD_LIBS $LIBS"
-	CC="$PTHREAD_CC"
-	
-	# In order not to create several levels of indentation, we test
-	# the value of "$done" until we find the cure or run out of ideas.
-	done="no"
-	
-	# First, make sure the CFLAGS we added are actually accepted by our
-	# compiler.  If not (and OS X's ld, for instance, does not accept -z),
-	# then we can't do this test.
-	if test x"$done" = xno; then
-	   AC_MSG_CHECKING([whether to check for GCC pthread/shared inconsistencies])
-	   AC_TRY_LINK(,, , [done=yes])
-	
-	   if test "x$done" = xyes ; then
-	      AC_MSG_RESULT([no])
-	   else
-	      AC_MSG_RESULT([yes])
-	   fi
-	fi
-	
-	if test x"$done" = xno; then
-	   AC_MSG_CHECKING([whether -pthread is sufficient with -shared])
-	   AC_TRY_LINK([#include <pthread.h>],
-	      [pthread_t th; pthread_join(th, 0);
-	      pthread_attr_init(0); pthread_cleanup_push(0, 0);
-	      pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
-	      [done=yes])
-	   
-	   if test "x$done" = xyes; then
-	      AC_MSG_RESULT([yes])
-	   else
-	      AC_MSG_RESULT([no])
-	   fi
-	fi
-	
-	#
-	# Linux gcc on some architectures such as mips/mipsel forgets
-	# about -lpthread
-	#
-	if test x"$done" = xno; then
-	   AC_MSG_CHECKING([whether -lpthread fixes that])
-	   LIBS="-lpthread $PTHREAD_LIBS $save_LIBS"
-	   AC_TRY_LINK([#include <pthread.h>],
-	      [pthread_t th; pthread_join(th, 0);
-	      pthread_attr_init(0); pthread_cleanup_push(0, 0);
-	      pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
-	      [done=yes])
-	
-	   if test "x$done" = xyes; then
-	      AC_MSG_RESULT([yes])
-	      PTHREAD_LIBS="-lpthread $PTHREAD_LIBS"
-	   else
-	      AC_MSG_RESULT([no])
-	   fi
-	fi
-	#
-	# FreeBSD 4.10 gcc forgets to use -lc_r instead of -lc
-	#
-	if test x"$done" = xno; then
-	   AC_MSG_CHECKING([whether -lc_r fixes that])
-	   LIBS="-lc_r $PTHREAD_LIBS $save_LIBS"
-	   AC_TRY_LINK([#include <pthread.h>],
-	       [pthread_t th; pthread_join(th, 0);
-	        pthread_attr_init(0); pthread_cleanup_push(0, 0);
-	        pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
-	       [done=yes])
-	
-	   if test "x$done" = xyes; then
-	      AC_MSG_RESULT([yes])
-	      PTHREAD_LIBS="-lc_r $PTHREAD_LIBS"
-	   else
-	      AC_MSG_RESULT([no])
-	   fi
-	fi
-	if test x"$done" = xno; then
-	   # OK, we have run out of ideas
-	   AC_MSG_WARN([Impossible to determine how to use pthreads with shared libraries])
-	
-	   # so it's not safe to assume that we may use pthreads
-	   acx_pthread_ok=no
-	fi
-	
-	CFLAGS="$save_CFLAGS"
-	LIBS="$save_LIBS"
-	CC="$save_CC"
-else
-        PTHREAD_CC="$CC"
-fi
-
-AC_SUBST(PTHREAD_LIBS)
-AC_SUBST(PTHREAD_CFLAGS)
-AC_SUBST(PTHREAD_CC)
-
-# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test x"$acx_pthread_ok" = xyes; then
-        ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
-        :
-else
-        acx_pthread_ok=no
-        $2
-fi
-AC_LANG_RESTORE
-])dnl ACX_PTHREAD
diff --git a/third_party/google-glog/m4/google_namespace.m4 b/third_party/google-glog/m4/google_namespace.m4
deleted file mode 100644
index 79e0a6d..0000000
--- a/third_party/google-glog/m4/google_namespace.m4
+++ /dev/null
@@ -1,36 +0,0 @@
-# Allow users to override the namespace we define our application's classes in
-# Arg $1 is the default namespace to use if --enable-namespace isn't present.
-
-# In general, $1 should be 'google', so we put all our exported symbols in a
-# unique namespace that is not likely to conflict with anyone else.  However,
-# when it makes sense -- for instance, when publishing stl-like code -- you
-# may want to go with a different default, like 'std'.
-
-AC_DEFUN([AC_DEFINE_GOOGLE_NAMESPACE],
-  [google_namespace_default=[$1]
-   AC_ARG_ENABLE(namespace, [  --enable-namespace=FOO to define these Google
-                             classes in the FOO namespace. --disable-namespace
-                             to define them in the global namespace. Default
-                             is to define them in namespace $1.],
-                 [case "$enableval" in
-                    yes) google_namespace="$google_namespace_default" ;;
-                     no) google_namespace="" ;;
-                      *) google_namespace="$enableval" ;;
-                  esac],
-                 [google_namespace="$google_namespace_default"])
-   if test -n "$google_namespace"; then
-     ac_google_namespace="$google_namespace"
-     ac_google_start_namespace="namespace $google_namespace {"
-     ac_google_end_namespace="}"
-   else
-     ac_google_namespace=""
-     ac_google_start_namespace=""
-     ac_google_end_namespace=""
-   fi
-   AC_DEFINE_UNQUOTED(GOOGLE_NAMESPACE, $ac_google_namespace,
-                      Namespace for Google classes)
-   AC_DEFINE_UNQUOTED(_START_GOOGLE_NAMESPACE_, $ac_google_start_namespace,
-                      Puts following code inside the Google namespace)
-   AC_DEFINE_UNQUOTED(_END_GOOGLE_NAMESPACE_,  $ac_google_end_namespace,
-                      Stops putting the code inside the Google namespace)
-])
diff --git a/third_party/google-glog/m4/ltsugar.m4 b/third_party/google-glog/m4/ltsugar.m4
deleted file mode 100644
index 9000a05..0000000
--- a/third_party/google-glog/m4/ltsugar.m4
+++ /dev/null
@@ -1,123 +0,0 @@
-# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
-#
-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-# Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltsugar.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
-
-
-# lt_join(SEP, ARG1, [ARG2...])
-# -----------------------------
-# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
-# associated separator.
-# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
-# versions in m4sugar had bugs.
-m4_define([lt_join],
-[m4_if([$#], [1], [],
-       [$#], [2], [[$2]],
-       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
-m4_define([_lt_join],
-[m4_if([$#$2], [2], [],
-       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
-
-
-# lt_car(LIST)
-# lt_cdr(LIST)
-# ------------
-# Manipulate m4 lists.
-# These macros are necessary as long as will still need to support
-# Autoconf-2.59 which quotes differently.
-m4_define([lt_car], [[$1]])
-m4_define([lt_cdr],
-[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
-       [$#], 1, [],
-       [m4_dquote(m4_shift($@))])])
-m4_define([lt_unquote], $1)
-
-
-# lt_append(MACRO-NAME, STRING, [SEPARATOR])
-# ------------------------------------------
-# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
-# Note that neither SEPARATOR nor STRING are expanded; they are appended
-# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
-# No SEPARATOR is output if MACRO-NAME was previously undefined (different
-# than defined and empty).
-#
-# This macro is needed until we can rely on Autoconf 2.62, since earlier
-# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
-m4_define([lt_append],
-[m4_define([$1],
-	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
-
-
-
-# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
-# ----------------------------------------------------------
-# Produce a SEP delimited list of all paired combinations of elements of
-# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
-# has the form PREFIXmINFIXSUFFIXn.
-# Needed until we can rely on m4_combine added in Autoconf 2.62.
-m4_define([lt_combine],
-[m4_if(m4_eval([$# > 3]), [1],
-       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
-[[m4_foreach([_Lt_prefix], [$2],
-	     [m4_foreach([_Lt_suffix],
-		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
-	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
-
-
-# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
-# -----------------------------------------------------------------------
-# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
-# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
-m4_define([lt_if_append_uniq],
-[m4_ifdef([$1],
-	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
-		 [lt_append([$1], [$2], [$3])$4],
-		 [$5])],
-	  [lt_append([$1], [$2], [$3])$4])])
-
-
-# lt_dict_add(DICT, KEY, VALUE)
-# -----------------------------
-m4_define([lt_dict_add],
-[m4_define([$1($2)], [$3])])
-
-
-# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
-# --------------------------------------------
-m4_define([lt_dict_add_subkey],
-[m4_define([$1($2:$3)], [$4])])
-
-
-# lt_dict_fetch(DICT, KEY, [SUBKEY])
-# ----------------------------------
-m4_define([lt_dict_fetch],
-[m4_ifval([$3],
-	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
-    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
-
-
-# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
-# -----------------------------------------------------------------
-m4_define([lt_if_dict_fetch],
-[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
-	[$5],
-    [$6])])
-
-
-# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
-# --------------------------------------------------------------
-m4_define([lt_dict_filter],
-[m4_if([$5], [], [],
-  [lt_join(m4_quote(m4_default([$4], [[, ]])),
-           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
-		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
-])
diff --git a/third_party/google-glog/m4/lt~obsolete.m4 b/third_party/google-glog/m4/lt~obsolete.m4
deleted file mode 100644
index c573da9..0000000
--- a/third_party/google-glog/m4/lt~obsolete.m4
+++ /dev/null
@@ -1,98 +0,0 @@
-# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
-#
-#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004.
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 5 lt~obsolete.m4
-
-# These exist entirely to fool aclocal when bootstrapping libtool.
-#
-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
-# which have later been changed to m4_define as they aren't part of the
-# exported API, or moved to Autoconf or Automake where they belong.
-#
-# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
-# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
-# using a macro with the same name in our local m4/libtool.m4 it'll
-# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
-# and doesn't know about Autoconf macros at all.)
-#
-# So we provide this file, which has a silly filename so it's always
-# included after everything else.  This provides aclocal with the
-# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
-# because those macros already exist, or will be overwritten later.
-# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
-#
-# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
-# Yes, that means every name once taken will need to remain here until
-# we give up compatibility with versions before 1.7, at which point
-# we need to keep only those names which we still refer to.
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
-
-m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
-m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
-m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
-m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
-m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
-m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
-m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
-m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
-m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
-m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
-m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
-m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
-m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
-m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
-m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
-m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
-m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
-m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
-m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
-m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
-m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
-m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
-m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
-m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
-m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
-m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
-m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
-m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
-m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
-m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
-m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
-m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
-m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
-m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
-m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
-m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
-m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
-m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
-m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
-m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
-m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
-m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
-m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
-m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
-m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
-m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
-m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],	[AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
-m4_ifndef([_LT_AC_PROG_CXXCPP],		[AC_DEFUN([_LT_AC_PROG_CXXCPP])])
-m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],	[AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
-m4_ifndef([_LT_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
-m4_ifndef([_LT_PROG_F77],		[AC_DEFUN([_LT_PROG_F77])])
-m4_ifndef([_LT_PROG_FC],		[AC_DEFUN([_LT_PROG_FC])])
-m4_ifndef([_LT_PROG_CXX],		[AC_DEFUN([_LT_PROG_CXX])])
diff --git a/third_party/google-glog/m4/namespaces.m4 b/third_party/google-glog/m4/namespaces.m4
deleted file mode 100644
index d78dbe4..0000000
--- a/third_party/google-glog/m4/namespaces.m4
+++ /dev/null
@@ -1,15 +0,0 @@
-# Checks whether the compiler implements namespaces
-AC_DEFUN([AC_CXX_NAMESPACES],
- [AC_CACHE_CHECK(whether the compiler implements namespaces,
-                 ac_cv_cxx_namespaces,
-                 [AC_LANG_SAVE
-                  AC_LANG_CPLUSPLUS
-                  AC_TRY_COMPILE([namespace Outer {
-                                    namespace Inner { int i = 0; }}],
-                                 [using namespace Outer::Inner; return i;],
-                                 ac_cv_cxx_namespaces=yes,
-                                 ac_cv_cxx_namespaces=no)
-                  AC_LANG_RESTORE])
-  if test "$ac_cv_cxx_namespaces" = yes; then
-    AC_DEFINE(HAVE_NAMESPACES, 1, [define if the compiler implements namespaces])
-  fi])
diff --git a/third_party/google-glog/m4/pc_from_ucontext.m4 b/third_party/google-glog/m4/pc_from_ucontext.m4
deleted file mode 100644
index daffddb..0000000
--- a/third_party/google-glog/m4/pc_from_ucontext.m4
+++ /dev/null
@@ -1,71 +0,0 @@
-# We want to access the "PC" (Program Counter) register from a struct
-# ucontext.  Every system has its own way of doing that.  We try all the
-# possibilities we know about.  Note REG_PC should come first (REG_RIP
-# is also defined on solaris, but does the wrong thing).
-
-# OpenBSD doesn't have ucontext.h, but we can get PC from ucontext_t
-# by using signal.h.
-
-# The first argument of AC_PC_FROM_UCONTEXT will be invoked when we
-# cannot find a way to obtain PC from ucontext.
-
-AC_DEFUN([AC_PC_FROM_UCONTEXT],
-  [AC_CHECK_HEADERS(ucontext.h)
-   AC_CHECK_HEADERS(sys/ucontext.h)       # ucontext on OS X 10.6 (at least)
-   AC_MSG_CHECKING([how to access the program counter from a struct ucontext])
-   pc_fields="           uc_mcontext.gregs[[REG_PC]]"  # Solaris x86 (32 + 64 bit)
-   pc_fields="$pc_fields uc_mcontext.gregs[[REG_EIP]]" # Linux (i386)
-   pc_fields="$pc_fields uc_mcontext.gregs[[REG_RIP]]" # Linux (x86_64)
-   pc_fields="$pc_fields uc_mcontext.sc_ip"            # Linux (ia64)
-   pc_fields="$pc_fields uc_mcontext.uc_regs->gregs[[PT_NIP]]" # Linux (ppc)
-   pc_fields="$pc_fields uc_mcontext.gregs[[R15]]"     # Linux (arm old [untested])
-   pc_fields="$pc_fields uc_mcontext.arm_pc"           # Linux (arm new [untested])
-   pc_fields="$pc_fields uc_mcontext.mc_eip"           # FreeBSD (i386)
-   pc_fields="$pc_fields uc_mcontext.mc_rip"           # FreeBSD (x86_64 [untested])
-   pc_fields="$pc_fields uc_mcontext.__gregs[[_REG_EIP]]"  # NetBSD (i386)
-   pc_fields="$pc_fields uc_mcontext.__gregs[[_REG_RIP]]"  # NetBSD (x86_64)
-   pc_fields="$pc_fields uc_mcontext->ss.eip"          # OS X (i386, <=10.4)
-   pc_fields="$pc_fields uc_mcontext->__ss.__eip"      # OS X (i386, >=10.5)
-   pc_fields="$pc_fields uc_mcontext->ss.rip"          # OS X (x86_64)
-   pc_fields="$pc_fields uc_mcontext->__ss.__rip"      # OS X (>=10.5 [untested])
-   pc_fields="$pc_fields uc_mcontext->ss.srr0"         # OS X (ppc, ppc64 [untested])
-   pc_fields="$pc_fields uc_mcontext->__ss.__srr0"     # OS X (>=10.5 [untested])
-   pc_field_found=false
-   for pc_field in $pc_fields; do
-     if ! $pc_field_found; then
-       if test "x$ac_cv_header_sys_ucontext_h" = xyes; then
-         AC_TRY_COMPILE([#define _GNU_SOURCE 1
-                         #include <sys/ucontext.h>],
-                        [ucontext_t u; return u.$pc_field == 0;],
-                        AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field,
-                                           How to access the PC from a struct ucontext)
-                        AC_MSG_RESULT([$pc_field])
-                        pc_field_found=true)
-       else
-         AC_TRY_COMPILE([#define _GNU_SOURCE 1
-                         #include <ucontext.h>],
-                        [ucontext_t u; return u.$pc_field == 0;],
-                        AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field,
-                                           How to access the PC from a struct ucontext)
-                        AC_MSG_RESULT([$pc_field])
-                        pc_field_found=true)
-       fi
-     fi
-   done
-   if ! $pc_field_found; then
-     pc_fields="           sc_eip"  # OpenBSD (i386)
-     pc_fields="$pc_fields sc_rip"  # OpenBSD (x86_64)
-     for pc_field in $pc_fields; do
-       if ! $pc_field_found; then
-         AC_TRY_COMPILE([#include <signal.h>],
-                        [ucontext_t u; return u.$pc_field == 0;],
-                        AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field,
-                                           How to access the PC from a struct ucontext)
-                        AC_MSG_RESULT([$pc_field])
-                        pc_field_found=true)
-       fi
-     done
-   fi
-   if ! $pc_field_found; then
-     [$1]
-   fi])
diff --git a/third_party/google-glog/m4/stl_namespace.m4 b/third_party/google-glog/m4/stl_namespace.m4
deleted file mode 100644
index 989ad80..0000000
--- a/third_party/google-glog/m4/stl_namespace.m4
+++ /dev/null
@@ -1,25 +0,0 @@
-# We check what namespace stl code like vector expects to be executed in
-
-AC_DEFUN([AC_CXX_STL_NAMESPACE],
-  [AC_CACHE_CHECK(
-      what namespace STL code is in,
-      ac_cv_cxx_stl_namespace,
-      [AC_REQUIRE([AC_CXX_NAMESPACES])
-      AC_LANG_SAVE
-      AC_LANG_CPLUSPLUS
-      AC_TRY_COMPILE([#include <vector>],
-                     [vector<int> t; return 0;],
-                     ac_cv_cxx_stl_namespace=none)
-      AC_TRY_COMPILE([#include <vector>],
-                     [std::vector<int> t; return 0;],
-                     ac_cv_cxx_stl_namespace=std)
-      AC_LANG_RESTORE])
-   if test "$ac_cv_cxx_stl_namespace" = none; then
-      AC_DEFINE(STL_NAMESPACE,,
-                [the namespace where STL code like vector<> is defined])
-   fi
-   if test "$ac_cv_cxx_stl_namespace" = std; then
-      AC_DEFINE(STL_NAMESPACE,std,
-                [the namespace where STL code like vector<> is defined])
-   fi
-])
diff --git a/third_party/google-glog/m4/using_operator.m4 b/third_party/google-glog/m4/using_operator.m4
deleted file mode 100644
index 95a9951..0000000
--- a/third_party/google-glog/m4/using_operator.m4
+++ /dev/null
@@ -1,15 +0,0 @@
-AC_DEFUN([AC_CXX_USING_OPERATOR],
-  [AC_CACHE_CHECK(
-      whether compiler supports using ::operator<<,
-      ac_cv_cxx_using_operator,
-      [AC_LANG_SAVE
-       AC_LANG_CPLUSPLUS
-       AC_TRY_COMPILE([#include <iostream>
-                       std::ostream& operator<<(std::ostream&, struct s);],
-                      [using ::operator<<; return 0;],
-                      ac_cv_cxx_using_operator=1,
-		      ac_cv_cxx_using_operator=0)
-      AC_LANG_RESTORE])
-  if test "$ac_cv_cxx_using_operator" = 1; then
-    AC_DEFINE(HAVE_USING_OPERATOR, 1, [define if the compiler supports using expression for operator])
-  fi])
diff --git a/third_party/google-glog/packages/deb.sh b/third_party/google-glog/packages/deb.sh
deleted file mode 100755
index a1cdf32..0000000
--- a/third_party/google-glog/packages/deb.sh
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/bin/bash -e
-
-# This takes one commandline argument, the name of the package.  If no
-# name is given, then we'll end up just using the name associated with
-# an arbitrary .tar.gz file in the rootdir.  That's fine: there's probably
-# only one.
-#
-# Run this from the 'packages' directory, just under rootdir
-
-## Set LIB to lib if exporting a library, empty-string else
-LIB=
-#LIB=lib
-
-PACKAGE="$1"
-VERSION="$2"
-
-# We can only build Debian packages, if the Debian build tools are installed
-if [ \! -x /usr/bin/debuild ]; then
-  echo "Cannot find /usr/bin/debuild. Not building Debian packages." 1>&2
-  exit 0
-fi
-
-# Double-check we're in the packages directory, just under rootdir
-if [ \! -r ../Makefile -a \! -r ../INSTALL ]; then
-  echo "Must run $0 in the 'packages' directory, under the root directory." 1>&2
-  echo "Also, you must run \"make dist\" before running this script." 1>&2
-  exit 0
-fi
-
-# Find the top directory for this package
-topdir="${PWD%/*}"
-
-# Find the tar archive built by "make dist"
-archive="$PACKAGE-$VERSION"
-if [ -z "${archive}" ]; then
-  echo "Cannot find ../$PACKAGE*.tar.gz. Run \"make dist\" first." 1>&2
-  exit 0
-fi
-
-# Create a pristine directory for building the Debian package files
-trap 'rm -rf '`pwd`/tmp'; exit $?' EXIT SIGHUP SIGINT SIGTERM
-
-rm -rf tmp
-mkdir -p tmp
-cd tmp
-
-package="google-glog_$VERSION"
-
-# Debian has very specific requirements about the naming of build
-# directories, and tar archives. It also wants to write all generated
-# packages to the parent of the source directory. We accommodate these
-# requirements by building directly from the tar file.
-ln -s "${topdir}/${archive}.tar.gz" "${LIB}${package}.orig.tar.gz"
-tar zfx "${LIB}${package}.orig.tar.gz"
-mv "${archive}" "${LIB}${package}"
-cd "${LIB}${package}"
-# This is one of those 'specific requirements': where the deb control files live
-cp -a "packages/deb" "debian"
-
-# Now, we can call Debian's standard build tool
-debuild -uc -us
-cd ../..                            # get back to the original top-level dir
-
-# We'll put the result in a subdirectory that's named after the OS version
-# we've made this .deb file for.
-destdir="debian-$(cat /etc/debian_version 2>/dev/null || echo UNKNOWN)"
-
-rm -rf "$destdir"
-mkdir -p "$destdir"
-mv $(find tmp -mindepth 1 -maxdepth 1 -type f) "$destdir"
-
-echo
-echo "The Debian package files are located in $PWD/$destdir"
diff --git a/third_party/google-glog/packages/deb/README b/third_party/google-glog/packages/deb/README
deleted file mode 100644
index 57becfd..0000000
--- a/third_party/google-glog/packages/deb/README
+++ /dev/null
@@ -1,7 +0,0 @@
-The list of files here isn't complete.  For a step-by-step guide on
-how to set this package up correctly, check out
-    http://www.debian.org/doc/maint-guide/
-
-Most of the files that are in this directory are boilerplate.
-However, you may need to change the list of binary-arch dependencies
-in 'rules'.
diff --git a/third_party/google-glog/packages/deb/changelog b/third_party/google-glog/packages/deb/changelog
deleted file mode 100644
index 261cfd5..0000000
--- a/third_party/google-glog/packages/deb/changelog
+++ /dev/null
@@ -1,65 +0,0 @@
-google-glog (0.3.5-1) unstable; urgency=low
-
-  * New upstream release.
-
- -- Google Inc. <opensource@google.com>  Tue, 09 May 2017 16:22:12 +0900
-
-google-glog (0.3.4-1) unstable; urgency=low
-
-  * New upstream release.
-
- -- Google Inc. <opensource@google.com>  Tue, 10 Mar 2015 12:02:20 +0900
-
-google-glog (0.3.3-1) unstable; urgency=low
-
-  * New upstream release.
-
- -- Google Inc. <opensource@google.com>  Fri, 01 Feb 2012 14:54:14 +0900
-
-google-glog (0.3.2-1) unstable; urgency=low
-
-  * New upstream release.
-
- -- Google Inc. <opensource@google.com>  Thu, 12 Jan 2012 17:36:14 +0900
-
-google-glog (0.3.1-1) unstable; urgency=low
-
-  * New upstream release.
-
- -- Google Inc. <opensource@google.com>  Tue, 15 Jun 2010 13:50:47 +0900
-
-google-glog (0.3-1) unstable; urgency=low
-
-  * New upstream release.
-
- -- Google Inc. <opensource@google.com>  Thu, 30 Jul 2009 21:31:35 +0900
-
-google-glog (0.2.1-1) unstable; urgency=low
-
-  * New upstream release.
-
- -- Google Inc. <opensource@google.com>  Fri, 10 Apr 2009 15:24:17 +0900
-
-google-glog (0.2-1) unstable; urgency=low
-
-  * New upstream release.
-
- -- Google Inc. <opensource@google.com>  Fri, 23 Jan 2009 03:14:29 +0900
-
-google-glog (0.1.2-1) unstable; urgency=low
-
-  * New upstream release.
-
- -- Google Inc. <opensource@google.com>  Tue, 18 Nov 2008 20:37:00 +0900
-
-google-glog (0.1.1-1) unstable; urgency=low
-
-  * New upstream release.
-
- -- Google Inc. <opensource@google.com>  Wed, 15 Oct 2008 20:38:19 +0900
-
-google-glog (0.1-1) unstable; urgency=low
-
-  * Initial release.
-
- -- Google Inc. <opensource@google.com>  Sat, 10 May 2008 12:31:10 +0900
diff --git a/third_party/google-glog/packages/deb/compat b/third_party/google-glog/packages/deb/compat
deleted file mode 100644
index b8626c4..0000000
--- a/third_party/google-glog/packages/deb/compat
+++ /dev/null
@@ -1 +0,0 @@
-4
diff --git a/third_party/google-glog/packages/deb/control b/third_party/google-glog/packages/deb/control
deleted file mode 100644
index 110a72c..0000000
--- a/third_party/google-glog/packages/deb/control
+++ /dev/null
@@ -1,23 +0,0 @@
-Source: google-glog
-Priority: optional
-Maintainer: Google Inc. <opensource@google.com>
-Build-Depends: debhelper (>= 4.0.0), binutils
-Standards-Version: 3.6.1
-
-Package: libgoogle-glog-dev
-Section: libdevel
-Architecture: any
-Depends: libgoogle-glog0 (= ${Source-Version})
-Description:  a library that implements application-level logging.
- This library provides logging APIs based on C++-style streams and
- various helper macros.  The devel package contains static and debug
- libraries and header files for developing applications that use the
- google-glog package.
-
-Package: libgoogle-glog0
-Section: libs
-Architecture: any
-Depends: ${shlibs:Depends}
-Description:  a library that implements application-level logging.
- This library provides logging APIs based on C++-style streams and
- various helper macros.
diff --git a/third_party/google-glog/packages/deb/copyright b/third_party/google-glog/packages/deb/copyright
deleted file mode 100644
index b2ce8e8..0000000
--- a/third_party/google-glog/packages/deb/copyright
+++ /dev/null
@@ -1,35 +0,0 @@
-This package was debianized by Google Inc. <opensource@google.com> on
-13 June 2008.
-
-It was downloaded from https://github.com/google/glog
-
-Upstream Author: opensource@google.com
-
-Copyright (c) 2008, Google Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-    * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/third_party/google-glog/packages/deb/docs b/third_party/google-glog/packages/deb/docs
deleted file mode 100644
index 6da25d4..0000000
--- a/third_party/google-glog/packages/deb/docs
+++ /dev/null
@@ -1,7 +0,0 @@
-AUTHORS
-COPYING
-ChangeLog
-INSTALL
-README.md
-doc/designstyle.css
-doc/glog.html
diff --git a/third_party/google-glog/packages/deb/libgoogle-glog-dev.dirs b/third_party/google-glog/packages/deb/libgoogle-glog-dev.dirs
deleted file mode 100644
index bddfbf5..0000000
--- a/third_party/google-glog/packages/deb/libgoogle-glog-dev.dirs
+++ /dev/null
@@ -1,4 +0,0 @@
-usr/lib
-usr/lib/pkgconfig
-usr/include
-usr/include/glog
diff --git a/third_party/google-glog/packages/deb/libgoogle-glog-dev.install b/third_party/google-glog/packages/deb/libgoogle-glog-dev.install
deleted file mode 100644
index 9c61e86..0000000
--- a/third_party/google-glog/packages/deb/libgoogle-glog-dev.install
+++ /dev/null
@@ -1,10 +0,0 @@
-usr/include/glog/*
-usr/lib/lib*.so
-usr/lib/lib*.a
-usr/lib/*.la
-usr/lib/pkgconfig/*
-debian/tmp/usr/include/glog/*
-debian/tmp/usr/lib/lib*.so
-debian/tmp/usr/lib/lib*.a
-debian/tmp/usr/lib/*.la
-debian/tmp/usr/lib/pkgconfig/*
diff --git a/third_party/google-glog/packages/deb/libgoogle-glog0.dirs b/third_party/google-glog/packages/deb/libgoogle-glog0.dirs
deleted file mode 100644
index 6845771..0000000
--- a/third_party/google-glog/packages/deb/libgoogle-glog0.dirs
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib
diff --git a/third_party/google-glog/packages/deb/libgoogle-glog0.install b/third_party/google-glog/packages/deb/libgoogle-glog0.install
deleted file mode 100644
index 704ea87..0000000
--- a/third_party/google-glog/packages/deb/libgoogle-glog0.install
+++ /dev/null
@@ -1,2 +0,0 @@
-usr/lib/lib*.so.*
-debian/tmp/usr/lib/lib*.so.*
diff --git a/third_party/google-glog/packages/deb/rules b/third_party/google-glog/packages/deb/rules
deleted file mode 100755
index f520bef..0000000
--- a/third_party/google-glog/packages/deb/rules
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/usr/bin/make -f
-# -*- makefile -*-
-# Sample debian/rules that uses debhelper.
-# This file was originally written by Joey Hess and Craig Small.
-# As a special exception, when this file is copied by dh-make into a
-# dh-make output file, you may use that output file without restriction.
-# This special exception was added by Craig Small in version 0.37 of dh-make.
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-
-# These are used for cross-compiling and for saving the configure script
-# from having to guess our platform (since we know it already)
-DEB_HOST_GNU_TYPE   ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
-DEB_BUILD_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
-
-
-CFLAGS = -Wall -g
-
-ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
-	CFLAGS += -O0
-else
-	CFLAGS += -O2
-endif
-ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
-	INSTALL_PROGRAM += -s
-endif
-
-# shared library versions, option 1
-#version=2.0.5
-#major=2
-# option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so
-version=`ls src/.libs/lib*.so.* | \
- awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'`
-major=`ls src/.libs/lib*.so.* | \
- awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}'`
-
-config.status: configure
-	dh_testdir
-	# Add here commands to configure the package.
-	CFLAGS="$(CFLAGS)" ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info
-
-
-build: build-stamp
-build-stamp:  config.status
-	dh_testdir
-
-	# Add here commands to compile the package.
-	$(MAKE)
-
-	touch build-stamp
-
-clean:
-	dh_testdir
-	dh_testroot
-	rm -f build-stamp 
-
-	# Add here commands to clean up after the build process.
-	-$(MAKE) distclean
-ifneq "$(wildcard /usr/share/misc/config.sub)" ""
-	cp -f /usr/share/misc/config.sub config.sub
-endif
-ifneq "$(wildcard /usr/share/misc/config.guess)" ""
-	cp -f /usr/share/misc/config.guess config.guess
-endif
-
-
-	dh_clean 
-
-install: build
-	dh_testdir
-	dh_testroot
-	dh_clean -k 
-	dh_installdirs
-
-	# Add here commands to install the package into debian/tmp
-	$(MAKE) install DESTDIR=$(CURDIR)/debian/tmp
-
-
-# Build architecture-independent files here.
-binary-indep: build install
-# We have nothing to do by default.
-
-# Build architecture-dependent files here.
-binary-arch: build install
-	dh_testdir
-	dh_testroot
-	dh_installchangelogs ChangeLog
-	dh_installdocs
-	dh_installexamples
-	dh_install --sourcedir=debian/tmp
-#	dh_installmenu
-#	dh_installdebconf	
-#	dh_installlogrotate
-#	dh_installemacsen
-#	dh_installpam
-#	dh_installmime
-#	dh_installinit
-#	dh_installcron
-#	dh_installinfo
-	dh_installman
-	dh_link
-	dh_strip
-	dh_compress
-	dh_fixperms
-#	dh_perl
-#	dh_python
-	dh_makeshlibs
-	dh_installdeb
-	dh_shlibdeps
-	dh_gencontrol
-	dh_md5sums
-	dh_builddeb
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install 
diff --git a/third_party/google-glog/packages/rpm.sh b/third_party/google-glog/packages/rpm.sh
deleted file mode 100755
index e5649a2..0000000
--- a/third_party/google-glog/packages/rpm.sh
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/bin/sh -e
-
-# Run this from the 'packages' directory, just under rootdir
-
-# We can only build rpm packages, if the rpm build tools are installed
-if [ \! -x /usr/bin/rpmbuild ]
-then
-  echo "Cannot find /usr/bin/rpmbuild. Not building an rpm." 1>&2
-  exit 0
-fi
-
-# Check the commandline flags
-PACKAGE="$1"
-VERSION="$2"
-fullname="${PACKAGE}-${VERSION}"
-archive=../$fullname.tar.gz
-
-if [ -z "$1" -o -z "$2" ]
-then
-  echo "Usage: $0 <package name> <package version>" 1>&2
-  exit 0
-fi
-
-# Double-check we're in the packages directory, just under rootdir
-if [ \! -r ../Makefile -a \! -r ../INSTALL ]
-then
-  echo "Must run $0 in the 'packages' directory, under the root directory." 1>&2
-  echo "Also, you must run \"make dist\" before running this script." 1>&2
-  exit 0
-fi
-
-if [ \! -r "$archive" ]
-then
-  echo "Cannot find $archive. Run \"make dist\" first." 1>&2
-  exit 0
-fi
-
-# Create the directory where the input lives, and where the output should live
-RPM_SOURCE_DIR="/tmp/rpmsource-$fullname"
-RPM_BUILD_DIR="/tmp/rpmbuild-$fullname"
-
-trap 'rm -rf $RPM_SOURCE_DIR $RPM_BUILD_DIR; exit $?' EXIT SIGHUP SIGINT SIGTERM
-
-rm -rf "$RPM_SOURCE_DIR" "$RPM_BUILD_DIR"
-mkdir "$RPM_SOURCE_DIR"
-mkdir "$RPM_BUILD_DIR"
-
-cp "$archive" "$RPM_SOURCE_DIR"/v"$VERSION".tar.gz
-
-rpmbuild -bb rpm/rpm.spec \
-  --define "NAME $PACKAGE" \
-  --define "VERSION $VERSION" \
-  --define "_sourcedir $RPM_SOURCE_DIR" \
-  --define "_builddir $RPM_BUILD_DIR" \
-  --define "_rpmdir $RPM_SOURCE_DIR"
-
-# We put the output in a directory based on what system we've built for
-destdir=rpm-unknown
-if [ -r /etc/issue ]
-then
-   grep "Red Hat.*release 7" /etc/issue >/dev/null 2>&1 && destdir=rh7
-   grep "Red Hat.*release 8" /etc/issue >/dev/null 2>&1 && destdir=rh8
-   grep "Red Hat.*release 9" /etc/issue >/dev/null 2>&1 && destdir=rh9
-   if grep Fedora /etc/issue >/dev/null; then 
-	destdir=fc`grep Fedora /etc/issue | cut -d' ' -f 4`;
-   fi
-fi
-
-rm -rf "$destdir"
-mkdir -p "$destdir"
-# We want to get not only the main package but devel etc, hence the middle *
-mv "$RPM_SOURCE_DIR"/*/"${PACKAGE}"-*"${VERSION}"*.rpm "$destdir"
-
-echo
-echo "The rpm package file(s) are located in $PWD/$destdir"
diff --git a/third_party/google-glog/packages/rpm/rpm.spec b/third_party/google-glog/packages/rpm/rpm.spec
deleted file mode 100644
index 24ef134..0000000
--- a/third_party/google-glog/packages/rpm/rpm.spec
+++ /dev/null
@@ -1,72 +0,0 @@
-%define	RELEASE	1
-%define rel     %{?CUSTOM_RELEASE} %{!?CUSTOM_RELEASE:%RELEASE}
-%define	prefix	/usr
-
-Name: %NAME
-Summary: A C++ application logging library
-Version: %VERSION
-Release: %rel
-Group: Development/Libraries
-URL: http://github.com/google/glog
-License: BSD
-Vendor: Google
-Packager: Google Inc. <opensource@google.com>
-Source: https://github.com/google/glog/archive/v%{VERSION}.tar.gz
-Distribution: Redhat 7 and above.
-Buildroot: %{_tmppath}/%{name}-root
-Prefix: %prefix
-
-%description
-The %name package contains a library that implements application-level
-logging.  This library provides logging APIs based on C++-style
-streams and various helper macros.
-
-%package devel
-Summary: A C++ application logging library
-Group: Development/Libraries
-Requires: %{NAME} = %{VERSION}
-
-%description devel
-The %name-devel package contains static and debug libraries and header
-files for developing applications that use the %name package.
-
-%changelog
-    * Wed Mar 26 2008 <opensource@google.com>
-    - First draft
-
-%prep
-%setup
-
-%build
-./configure
-make prefix=%prefix
-
-%install
-rm -rf $RPM_BUILD_ROOT
-make prefix=$RPM_BUILD_ROOT%{prefix} install
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%files
-%defattr(-,root,root)
-
-## Mark all installed files within /usr/share/doc/{package name} as
-## documentation.  This depends on the following two lines appearing in
-## Makefile.am:
-##     docdir = $(prefix)/share/doc/$(PACKAGE)-$(VERSION)
-##     dist_doc_DATA = AUTHORS COPYING ChangeLog INSTALL README.md
-%docdir %{prefix}/share/doc/%{NAME}-%{VERSION}
-%{prefix}/share/doc/%{NAME}-%{VERSION}/*
-
-%{prefix}/lib/libglog.so.0
-%{prefix}/lib/libglog.so.0.0.0
-
-%files devel
-%defattr(-,root,root)
-
-%{prefix}/include/glog
-%{prefix}/lib/libglog.a
-%{prefix}/lib/libglog.la
-%{prefix}/lib/libglog.so
-%{prefix}/lib/pkgconfig/libglog.pc
diff --git a/third_party/google-glog/src/base/commandlineflags.h b/third_party/google-glog/src/base/commandlineflags.h
index c8d5089..bcb12de 100644
--- a/third_party/google-glog/src/base/commandlineflags.h
+++ b/third_party/google-glog/src/base/commandlineflags.h
@@ -1,10 +1,10 @@
 // Copyright (c) 2008, Google Inc.
 // All rights reserved.
-// 
+//
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions are
 // met:
-// 
+//
 //     * Redistributions of source code must retain the above copyright
 // notice, this list of conditions and the following disclaimer.
 //     * Redistributions in binary form must reproduce the above
@@ -14,7 +14,7 @@
 //     * Neither the name of Google Inc. nor the names of its
 // contributors may be used to endorse or promote products derived from
 // this software without specific prior written permission.
-// 
+//
 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -49,9 +49,9 @@
 #define BASE_COMMANDLINEFLAGS_H__
 
 #include "config.h"
+#include <cstdlib>               // for getenv
+#include <cstring>               // for memchr
 #include <string>
-#include <string.h>               // for memchr
-#include <stdlib.h>               // for getenv
 
 #ifdef HAVE_LIB_GFLAGS
 
@@ -59,18 +59,18 @@
 
 #else
 
-#include "glog/logging.h"
+#include <glog/logging.h>
 
-#define DECLARE_VARIABLE(type, shorttype, name, tn)                     \
-  namespace fL##shorttype {                                             \
-    extern GOOGLE_GLOG_DLL_DECL type FLAGS_##name;                      \
-  }                                                                     \
+#define DECLARE_VARIABLE(type, shorttype, name, tn) \
+  namespace fL##shorttype {                         \
+    extern GLOG_EXPORT type FLAGS_##name;           \
+  }                                                 \
   using fL##shorttype::FLAGS_##name
-#define DEFINE_VARIABLE(type, shorttype, name, value, meaning, tn)      \
-  namespace fL##shorttype {                                             \
-    GOOGLE_GLOG_DLL_DECL type FLAGS_##name(value);                      \
-    char FLAGS_no##name;                                                \
-  }                                                                     \
+#define DEFINE_VARIABLE(type, shorttype, name, value, meaning, tn) \
+  namespace fL##shorttype {                                        \
+    GLOG_EXPORT type FLAGS_##name(value);                          \
+    char FLAGS_no##name;                                           \
+  }                                                                \
   using fL##shorttype::FLAGS_##name
 
 // bool specialization
@@ -85,19 +85,27 @@
 #define DEFINE_int32(name, value, meaning) \
   DEFINE_VARIABLE(GOOGLE_NAMESPACE::int32, I, name, value, meaning, int32)
 
+// uint32 specialization
+#ifndef DECLARE_uint32
+#define DECLARE_uint32(name) \
+  DECLARE_VARIABLE(GOOGLE_NAMESPACE::uint32, U, name, uint32)
+#endif // DECLARE_uint64
+#define DEFINE_uint32(name, value, meaning) \
+  DEFINE_VARIABLE(GOOGLE_NAMESPACE::uint32, U, name, value, meaning, uint32)
+
 // Special case for string, because we have to specify the namespace
 // std::string, which doesn't play nicely with our FLAG__namespace hackery.
-#define DECLARE_string(name)                                            \
-  namespace fLS {                                                       \
-    extern GOOGLE_GLOG_DLL_DECL std::string& FLAGS_##name;              \
-  }                                                                     \
+#define DECLARE_string(name)                    \
+  namespace fLS {                               \
+  extern GLOG_EXPORT std::string& FLAGS_##name; \
+  }                                             \
   using fLS::FLAGS_##name
-#define DEFINE_string(name, value, meaning)                             \
-  namespace fLS {                                                       \
-    std::string FLAGS_##name##_buf(value);                              \
-    GOOGLE_GLOG_DLL_DECL std::string& FLAGS_##name = FLAGS_##name##_buf; \
-    char FLAGS_no##name;                                                \
-  }                                                                     \
+#define DEFINE_string(name, value, meaning)                   \
+  namespace fLS {                                             \
+  std::string FLAGS_##name##_buf(value);                      \
+  GLOG_EXPORT std::string& FLAGS_##name = FLAGS_##name##_buf; \
+  char FLAGS_no##name;                                        \
+  }                                                           \
   using fLS::FLAGS_##name
 
 #endif  // HAVE_LIB_GFLAGS
@@ -115,6 +123,9 @@
 #define GLOG_DEFINE_int32(name, value, meaning) \
   DEFINE_int32(name, EnvToInt("GLOG_" #name, value), meaning)
 
+#define GLOG_DEFINE_uint32(name, value, meaning) \
+  DEFINE_uint32(name, EnvToUInt("GLOG_" #name, value), meaning)
+
 #define GLOG_DEFINE_string(name, value, meaning) \
   DEFINE_string(name, EnvToString("GLOG_" #name, value), meaning)
 
@@ -130,4 +141,7 @@
 #define EnvToInt(envname, dflt)  \
   (!getenv(envname) ? (dflt) : strtol(getenv(envname), NULL, 10))
 
+#define EnvToUInt(envname, dflt)  \
+  (!getenv(envname) ? (dflt) : strtoul(getenv(envname), NULL, 10))
+
 #endif  // BASE_COMMANDLINEFLAGS_H__
diff --git a/third_party/google-glog/src/base/mutex.h b/third_party/google-glog/src/base/mutex.h
index ced2b99..e82c597 100644
--- a/third_party/google-glog/src/base/mutex.h
+++ b/third_party/google-glog/src/base/mutex.h
@@ -1,10 +1,10 @@
 // Copyright (c) 2007, Google Inc.
 // All rights reserved.
-// 
+//
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions are
 // met:
-// 
+//
 //     * Redistributions of source code must retain the above copyright
 // notice, this list of conditions and the following disclaimer.
 //     * Redistributions in binary form must reproduce the above
@@ -14,7 +14,7 @@
 //     * Neither the name of Google Inc. nor the names of its
 // contributors may be used to endorse or promote products derived from
 // this software without specific prior written permission.
-// 
+//
 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -26,7 +26,7 @@
 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// 
+//
 // ---
 // Author: Craig Silverstein.
 //
@@ -106,7 +106,7 @@
 
 #if defined(NO_THREADS)
   typedef int MutexType;      // to keep a lock-count
-#elif defined(_WIN32) || defined(__CYGWIN32__) || defined(__CYGWIN64__)
+#elif defined(_WIN32) || defined(__CYGWIN__)
 # ifndef WIN32_LEAN_AND_MEAN
 #  define WIN32_LEAN_AND_MEAN  // We only need minimal includes
 # endif
@@ -149,8 +149,8 @@
 
 // We need to include these header files after defining _XOPEN_SOURCE
 // as they may define the _XOPEN_SOURCE macro.
-#include <assert.h>
-#include <stdlib.h>      // for abort()
+#include <cassert>
+#include <cstdlib>      // for abort()
 
 #define MUTEX_NAMESPACE glog_internal_namespace_
 
@@ -223,7 +223,7 @@
 void Mutex::ReaderLock()   { assert(++mutex_ > 0); }
 void Mutex::ReaderUnlock() { assert(mutex_-- > 0); }
 
-#elif defined(_WIN32) || defined(__CYGWIN32__) || defined(__CYGWIN64__)
+#elif defined(_WIN32) || defined(__CYGWIN__)
 
 Mutex::Mutex()             { InitializeCriticalSection(&mutex_); SetIsSafe(); }
 Mutex::~Mutex()            { DeleteCriticalSection(&mutex_); }
diff --git a/third_party/google-glog/src/cleanup_immediately_unittest.cc b/third_party/google-glog/src/cleanup_immediately_unittest.cc
new file mode 100644
index 0000000..89d008e
--- /dev/null
+++ b/third_party/google-glog/src/cleanup_immediately_unittest.cc
@@ -0,0 +1,96 @@
+// Copyright (c) 2021, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include <glog/logging.h>
+#include <glog/raw_logging.h>
+
+#include "base/commandlineflags.h"
+#include "googletest.h"
+
+#ifdef HAVE_LIB_GFLAGS
+#include <gflags/gflags.h>
+using namespace GFLAGS_NAMESPACE;
+#endif
+
+#ifdef HAVE_LIB_GMOCK
+#include <gmock/gmock.h>
+
+#include "mock-log.h"
+// Introduce several symbols from gmock.
+using GOOGLE_NAMESPACE::glog_testing::ScopedMockLog;
+using testing::_;
+using testing::AllOf;
+using testing::AnyNumber;
+using testing::HasSubstr;
+using testing::InitGoogleMock;
+using testing::StrictMock;
+using testing::StrNe;
+#endif
+
+using namespace GOOGLE_NAMESPACE;
+
+TEST(CleanImmediately, logging) {
+  google::SetLogFilenameExtension(".foobar");
+  google::EnableLogCleaner(0);
+
+  for (unsigned i = 0; i < 1000; ++i) {
+    LOG(INFO) << "cleanup test";
+  }
+
+  google::DisableLogCleaner();
+}
+
+int main(int argc, char **argv) {
+  FLAGS_colorlogtostderr = false;
+  FLAGS_timestamp_in_logfile_name = true;
+#ifdef HAVE_LIB_GFLAGS
+  ParseCommandLineFlags(&argc, &argv, true);
+#endif
+  // Make sure stderr is not buffered as stderr seems to be buffered
+  // on recent windows.
+  setbuf(stderr, NULL);
+
+  // Test some basics before InitGoogleLogging:
+  CaptureTestStderr();
+  const string early_stderr = GetCapturedTestStderr();
+
+  EXPECT_FALSE(IsGoogleLoggingInitialized());
+
+  InitGoogleLogging(argv[0]);
+
+  EXPECT_TRUE(IsGoogleLoggingInitialized());
+
+  InitGoogleTest(&argc, argv);
+#ifdef HAVE_LIB_GMOCK
+  InitGoogleMock(&argc, argv);
+#endif
+
+  // so that death tests run before we use threads
+  CHECK_EQ(RUN_ALL_TESTS(), 0);
+}
diff --git a/third_party/google-glog/src/cleanup_with_absolute_prefix_unittest.cc b/third_party/google-glog/src/cleanup_with_absolute_prefix_unittest.cc
new file mode 100644
index 0000000..d4bb47e
--- /dev/null
+++ b/third_party/google-glog/src/cleanup_with_absolute_prefix_unittest.cc
@@ -0,0 +1,101 @@
+// Copyright (c) 2021, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include <glog/logging.h>
+#include <glog/raw_logging.h>
+
+#include "base/commandlineflags.h"
+#include "googletest.h"
+
+#ifdef HAVE_LIB_GFLAGS
+#include <gflags/gflags.h>
+using namespace GFLAGS_NAMESPACE;
+#endif
+
+#ifdef HAVE_LIB_GMOCK
+#include <gmock/gmock.h>
+
+#include "mock-log.h"
+// Introduce several symbols from gmock.
+using GOOGLE_NAMESPACE::glog_testing::ScopedMockLog;
+using testing::_;
+using testing::AllOf;
+using testing::AnyNumber;
+using testing::HasSubstr;
+using testing::InitGoogleMock;
+using testing::StrictMock;
+using testing::StrNe;
+#endif
+
+using namespace GOOGLE_NAMESPACE;
+
+TEST(CleanImmediatelyWithAbsolutePrefix, logging) {
+  google::EnableLogCleaner(0);
+  google::SetLogFilenameExtension(".barfoo");
+  google::SetLogDestination(GLOG_INFO, "test_cleanup_");
+
+  for (unsigned i = 0; i < 1000; ++i) {
+    LOG(INFO) << "cleanup test";
+  }
+
+  for (unsigned i = 0; i < 10; ++i) {
+    LOG(ERROR) << "cleanup test";
+  }
+
+  google::DisableLogCleaner();
+}
+
+int main(int argc, char **argv) {
+  FLAGS_colorlogtostderr = false;
+  FLAGS_timestamp_in_logfile_name = true;
+#ifdef HAVE_LIB_GFLAGS
+  ParseCommandLineFlags(&argc, &argv, true);
+#endif
+  // Make sure stderr is not buffered as stderr seems to be buffered
+  // on recent windows.
+  setbuf(stderr, NULL);
+
+  // Test some basics before InitGoogleLogging:
+  CaptureTestStderr();
+  const string early_stderr = GetCapturedTestStderr();
+
+  EXPECT_FALSE(IsGoogleLoggingInitialized());
+
+  InitGoogleLogging(argv[0]);
+
+  EXPECT_TRUE(IsGoogleLoggingInitialized());
+
+  InitGoogleTest(&argc, argv);
+#ifdef HAVE_LIB_GMOCK
+  InitGoogleMock(&argc, argv);
+#endif
+
+  // so that death tests run before we use threads
+  CHECK_EQ(RUN_ALL_TESTS(), 0);
+}
diff --git a/third_party/google-glog/src/cleanup_with_relative_prefix_unittest.cc b/third_party/google-glog/src/cleanup_with_relative_prefix_unittest.cc
new file mode 100644
index 0000000..330f465
--- /dev/null
+++ b/third_party/google-glog/src/cleanup_with_relative_prefix_unittest.cc
@@ -0,0 +1,97 @@
+// Copyright (c) 2021, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include <glog/logging.h>
+#include <glog/raw_logging.h>
+
+#include "base/commandlineflags.h"
+#include "googletest.h"
+
+#ifdef HAVE_LIB_GFLAGS
+#include <gflags/gflags.h>
+using namespace GFLAGS_NAMESPACE;
+#endif
+
+#ifdef HAVE_LIB_GMOCK
+#include <gmock/gmock.h>
+
+#include "mock-log.h"
+// Introduce several symbols from gmock.
+using GOOGLE_NAMESPACE::glog_testing::ScopedMockLog;
+using testing::_;
+using testing::AllOf;
+using testing::AnyNumber;
+using testing::HasSubstr;
+using testing::InitGoogleMock;
+using testing::StrictMock;
+using testing::StrNe;
+#endif
+
+using namespace GOOGLE_NAMESPACE;
+
+TEST(CleanImmediatelyWithRelativePrefix, logging) {
+  google::EnableLogCleaner(0);
+  google::SetLogFilenameExtension(".relativefoo");
+  google::SetLogDestination(GLOG_INFO, "test_subdir/test_cleanup_");
+
+  for (unsigned i = 0; i < 1000; ++i) {
+    LOG(INFO) << "cleanup test";
+  }
+
+  google::DisableLogCleaner();
+}
+
+int main(int argc, char **argv) {
+  FLAGS_colorlogtostderr = false;
+  FLAGS_timestamp_in_logfile_name = true;
+#ifdef HAVE_LIB_GFLAGS
+  ParseCommandLineFlags(&argc, &argv, true);
+#endif
+  // Make sure stderr is not buffered as stderr seems to be buffered
+  // on recent windows.
+  setbuf(stderr, NULL);
+
+  // Test some basics before InitGoogleLogging:
+  CaptureTestStderr();
+  const string early_stderr = GetCapturedTestStderr();
+
+  EXPECT_FALSE(IsGoogleLoggingInitialized());
+
+  InitGoogleLogging(argv[0]);
+
+  EXPECT_TRUE(IsGoogleLoggingInitialized());
+
+  InitGoogleTest(&argc, argv);
+#ifdef HAVE_LIB_GMOCK
+  InitGoogleMock(&argc, argv);
+#endif
+
+  // so that death tests run before we use threads
+  CHECK_EQ(RUN_ALL_TESTS(), 0);
+}
diff --git a/third_party/google-glog/src/config.h.cmake.in b/third_party/google-glog/src/config.h.cmake.in
index ee8cdfe..20b5f1c 100644
--- a/third_party/google-glog/src/config.h.cmake.in
+++ b/third_party/google-glog/src/config.h.cmake.in
@@ -16,8 +16,11 @@
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #cmakedefine HAVE_DLFCN_H
 
-/* Define to 1 if you have the <execinfo.h> header file. */
-#cmakedefine HAVE_EXECINFO_H
+/* Define if you have the `backtrace' function in <execinfo.h> */
+#cmakedefine HAVE_EXECINFO_BACKTRACE
+
+/* Define if you have the `backtrace_symbols' function in <execinfo.h> */
+#cmakedefine HAVE_EXECINFO_BACKTRACE_SYMBOLS
 
 /* Define if you have the `fcntl' function */
 #cmakedefine HAVE_FCNTL
@@ -31,9 +34,6 @@
 /* Define to 1 if you have the `pthread' library (-lpthread). */
 #cmakedefine HAVE_LIBPTHREAD
 
-/* Define to 1 if you have the <libunwind.h> header file. */
-#cmakedefine HAVE_LIBUNWIND_H
-
 /* define if you have google gflags library */
 #cmakedefine HAVE_LIB_GFLAGS
 
@@ -43,6 +43,9 @@
 /* define if you have google gtest library */
 #cmakedefine HAVE_LIB_GTEST
 
+/* define if you have dbghelp library */
+#cmakedefine HAVE_DBGHELP
+
 /* define if you have libunwind */
 #cmakedefine HAVE_LIB_UNWIND
 
@@ -79,15 +82,9 @@
 /* Define to 1 if you have the <stdint.h> header file. */
 #cmakedefine HAVE_STDINT_H ${HAVE_STDINT_H}
 
-/* Define to 1 if you have the <stdlib.h> header file. */
-#cmakedefine HAVE_STDLIB_H
-
 /* Define to 1 if you have the <strings.h> header file. */
 #cmakedefine HAVE_STRINGS_H
 
-/* Define to 1 if you have the <string.h> header file. */
-#cmakedefine HAVE_STRING_H
-
 /* Define to 1 if you have the <syscall.h> header file. */
 #cmakedefine HAVE_SYSCALL_H
 
@@ -112,14 +109,20 @@
 /* Define to 1 if you have the <sys/utsname.h> header file. */
 #cmakedefine HAVE_SYS_UTSNAME_H
 
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#cmakedefine HAVE_SYS_WAIT_H
+
 /* Define to 1 if you have the <ucontext.h> header file. */
 #cmakedefine HAVE_UCONTEXT_H
 
 /* Define to 1 if you have the <unistd.h> header file. */
 #cmakedefine HAVE_UNISTD_H ${HAVE_UNISTD_H}
 
-/* Define to 1 if you have the <unwind.h> header file. */
-#cmakedefine HAVE_UNWIND_H ${HAVE_UNWIND_H}
+/* Define if you linking to _Unwind_Backtrace is possible. */
+#cmakedefine HAVE__UNWIND_BACKTRACE
+
+/* Define if you linking to _Unwind_GetIP is possible. */
+#cmakedefine HAVE__UNWIND_GETIP
 
 /* define if the compiler supports using expression for operator */
 #cmakedefine HAVE_USING_OPERATOR
@@ -139,6 +142,9 @@
 /* define if localtime_r is available in time.h */
 #cmakedefine HAVE_LOCALTIME_R
 
+/* define if gmtime_r is available in time.h */
+#cmakedefine HAVE_GMTIME_R
+
 /* Define to the sub-directory in which libtool stores uninstalled libraries.
    */
 #cmakedefine LT_OBJDIR
@@ -167,7 +173,7 @@
 /* How to access the PC from a struct ucontext */
 #cmakedefine PC_FROM_UCONTEXT
 
-/* define if we should print raw pc values on symbolization failure. */
+/* define if we should print file offsets in traces instead of symbolizing. */
 #cmakedefine PRINT_UNSYMBOLIZED_STACK_TRACES
 
 /* Define to necessary symbol if this constant uses a non-standard name on
@@ -177,9 +183,6 @@
 /* The size of `void *', as computed by sizeof. */
 #cmakedefine SIZEOF_VOID_P ${SIZEOF_VOID_P}
 
-/* Define to 1 if you have the ANSI C header files. */
-#cmakedefine STDC_HEADERS
-
 /* the namespace where STL code like vector<> is defined */
 #cmakedefine STL_NAMESPACE ${STL_NAMESPACE}
 
@@ -192,6 +195,15 @@
 /* Check whether aligned_storage and alignof present */
 #cmakedefine HAVE_ALIGNED_STORAGE ${HAVE_ALIGNED_STORAGE}
 
+/* Check whether C++11 atomic is available */
+#cmakedefine HAVE_CXX11_ATOMIC ${HAVE_CXX11_ATOMIC}
+
+/* Check whether C++11 chrono is available */
+#cmakedefine HAVE_CXX11_CHRONO ${HAVE_CXX11_CHRONO}
+
+/* Check whether C++11 nullptr_t is available */
+#cmakedefine HAVE_CXX11_NULLPTR_T ${HAVE_CXX11_NULLPTR_T}
+
 /* Version number of package */
 #cmakedefine VERSION
 
@@ -213,4 +225,7 @@
 
 #endif
 
+/* Replacement for deprecated syscall(SYS_gettid) on macOS. */
+#cmakedefine HAVE_PTHREAD_THREADID_NP ${HAVE_PTHREAD_THREADID_NP}
+
 #endif  // GLOG_CONFIG_H
diff --git a/third_party/google-glog/src/config_for_unittests.h b/third_party/google-glog/src/config_for_unittests.h
deleted file mode 100644
index 13ea8ea..0000000
--- a/third_party/google-glog/src/config_for_unittests.h
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright (c) 2008, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// ---
-// All Rights Reserved.
-//
-// Author: Craig Silverstein
-// Copied from google-perftools and modified by Shinichiro Hamaji
-//
-// This file is needed for windows -- unittests are not part of the
-// glog dll, but still want to include config.h just like the
-// dll does, so they can use internal tools and APIs for testing.
-//
-// The problem is that config.h declares GOOGLE_GLOG_DLL_DECL to be
-// for exporting symbols, but the unittest needs to *import* symbols
-// (since it's not the dll).
-//
-// The solution is to have this file, which is just like config.h but
-// sets GOOGLE_GLOG_DLL_DECL to do a dllimport instead of a dllexport.
-//
-// The reason we need this extra GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS
-// variable is in case people want to set GOOGLE_GLOG_DLL_DECL explicitly
-// to something other than __declspec(dllexport).  In that case, they
-// may want to use something other than __declspec(dllimport) for the
-// unittest case.  For that, we allow folks to define both
-// GOOGLE_GLOG_DLL_DECL and GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS explicitly.
-//
-// NOTE: This file is equivalent to config.h on non-windows systems,
-// which never defined GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS and always
-// define GOOGLE_GLOG_DLL_DECL to the empty string.
-
-#include "config.h"
-
-#undef GOOGLE_GLOG_DLL_DECL
-#ifdef GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS
-# define GOOGLE_GLOG_DLL_DECL  GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS
-#else
-// if DLL_DECL_FOR_UNITTESTS isn't defined, use ""
-# define GOOGLE_GLOG_DLL_DECL
-#endif
diff --git a/third_party/google-glog/src/demangle.cc b/third_party/google-glog/src/demangle.cc
index 9369f9a..9276c5b 100644
--- a/third_party/google-glog/src/demangle.cc
+++ b/third_party/google-glog/src/demangle.cc
@@ -34,18 +34,18 @@
 //
 // Note that we only have partial C++0x support yet.
 
-#include <stdio.h>  // for NULL
-#include "utilities.h"
-#include "demangle.h"
+#include <cstdio>  // for NULL
 
-#if defined(OS_WINDOWS)
+#include "demangle.h"
+#include "utilities.h"
+
+#if defined(GLOG_OS_WINDOWS)
 #include <dbghelp.h>
-#pragma comment(lib, "dbghelp")
 #endif
 
 _START_GOOGLE_NAMESPACE_
 
-#if !defined(OS_WINDOWS)
+#if !defined(GLOG_OS_WINDOWS)
 typedef struct {
   const char *abbrev;
   const char *real_name;
@@ -149,15 +149,15 @@
 
 // State needed for demangling.
 typedef struct {
-  const char *mangled_cur;  // Cursor of mangled name.
-  char *out_cur;            // Cursor of output string.
-  const char *out_begin;    // Beginning of output string.
-  const char *out_end;      // End of output string.
-  const char *prev_name;    // For constructors/destructors.
-  int prev_name_length;     // For constructors/destructors.
-  short nest_level;         // For nested names.
-  bool append;              // Append flag.
-  bool overflowed;          // True if output gets overflowed.
+  const char *mangled_cur;   // Cursor of mangled name.
+  char *out_cur;             // Cursor of output string.
+  const char *out_begin;     // Beginning of output string.
+  const char *out_end;       // End of output string.
+  const char *prev_name;     // For constructors/destructors.
+  ssize_t prev_name_length;  // For constructors/destructors.
+  short nest_level;          // For nested names.
+  bool append;               // Append flag.
+  bool overflowed;           // True if output gets overflowed.
 } State;
 
 // We don't use strlen() in libc since it's not guaranteed to be async
@@ -172,8 +172,8 @@
 }
 
 // Returns true if "str" has at least "n" characters remaining.
-static bool AtLeastNumCharsRemaining(const char *str, int n) {
-  for (int i = 0; i < n; ++i) {
+static bool AtLeastNumCharsRemaining(const char *str, ssize_t n) {
+  for (ssize_t i = 0; i < n; ++i) {
     if (str[i] == '\0') {
       return false;
     }
@@ -192,7 +192,7 @@
 }
 
 static void InitState(State *state, const char *mangled,
-                      char *out, int out_size) {
+                      char *out, size_t out_size) {
   state->mangled_cur = mangled;
   state->out_cur = out;
   state->out_begin = out;
@@ -269,9 +269,8 @@
 // Append "str" at "out_cur".  If there is an overflow, "overflowed"
 // is set to true for later use.  The output string is ensured to
 // always terminate with '\0' as long as there is no overflow.
-static void Append(State *state, const char * const str, const int length) {
-  int i;
-  for (i = 0; i < length; ++i) {
+static void Append(State *state, const char * const str, ssize_t length) {
+  for (ssize_t i = 0; i < length; ++i) {
     if (state->out_cur + 1 < state->out_end) {  // +1 for '\0'
       *state->out_cur = str[i];
       ++state->out_cur;
@@ -327,7 +326,7 @@
 // Append "str" with some tweaks, iff "append" state is true.
 // Returns true so that it can be placed in "if" conditions.
 static void MaybeAppendWithLength(State *state, const char * const str,
-                                  const int length) {
+                                  ssize_t length) {
   if (state->append && length > 0) {
     // Append a space if the output buffer ends with '<' and "str"
     // starts with '<' to avoid <<<.
@@ -347,8 +346,8 @@
 // A convenient wrapper arount MaybeAppendWithLength().
 static bool MaybeAppend(State *state, const char * const str) {
   if (state->append) {
-    int length = StrLen(str);
-    MaybeAppendWithLength(state, str, length);
+    size_t length = StrLen(str);
+    MaybeAppendWithLength(state, str, static_cast<ssize_t>(length));
   }
   return true;
 }
@@ -402,9 +401,10 @@
 
 // Returns true if the identifier of the given length pointed to by
 // "mangled_cur" is anonymous namespace.
-static bool IdentifierIsAnonymousNamespace(State *state, int length) {
+static bool IdentifierIsAnonymousNamespace(State *state, ssize_t length) {
   static const char anon_prefix[] = "_GLOBAL__N_";
-  return (length > (int)sizeof(anon_prefix) - 1 &&  // Should be longer.
+  return (length > static_cast<ssize_t>(sizeof(anon_prefix)) -
+                       1 &&  // Should be longer.
           StrPrefix(state->mangled_cur, anon_prefix));
 }
 
@@ -422,7 +422,7 @@
 static bool ParseNumber(State *state, int *number_out);
 static bool ParseFloatNumber(State *state);
 static bool ParseSeqId(State *state);
-static bool ParseIdentifier(State *state, int length);
+static bool ParseIdentifier(State *state, ssize_t length);
 static bool ParseAbiTags(State *state);
 static bool ParseAbiTag(State *state);
 static bool ParseOperatorName(State *state);
@@ -691,7 +691,7 @@
 }
 
 // <identifier> ::= <unqualified source code identifier> (of given length)
-static bool ParseIdentifier(State *state, int length) {
+static bool ParseIdentifier(State *state, ssize_t length) {
   if (length == -1 ||
       !AtLeastNumCharsRemaining(state->mangled_cur, length)) {
     return false;
@@ -891,7 +891,7 @@
   if (ParseOneCharToken(state, 'C') &&
       ParseCharClass(state, "123")) {
     const char * const prev_name = state->prev_name;
-    const int prev_name_length = state->prev_name_length;
+    const ssize_t prev_name_length = state->prev_name_length;
     MaybeAppendWithLength(state, prev_name, prev_name_length);
     return true;
   }
@@ -900,7 +900,7 @@
   if (ParseOneCharToken(state, 'D') &&
       ParseCharClass(state, "012")) {
     const char * const prev_name = state->prev_name;
-    const int prev_name_length = state->prev_name_length;
+    const ssize_t prev_name_length = state->prev_name_length;
     MaybeAppend(state, "~");
     MaybeAppendWithLength(state, prev_name, prev_name_length);
     return true;
@@ -1323,8 +1323,9 @@
 #endif
 
 // The demangler entry point.
-bool Demangle(const char *mangled, char *out, int out_size) {
-#if defined(OS_WINDOWS)
+bool Demangle(const char *mangled, char *out, size_t out_size) {
+#if defined(GLOG_OS_WINDOWS)
+#if defined(HAVE_DBGHELP)
   // When built with incremental linking, the Windows debugger
   // library provides a more complicated `Symbol->Name` with the
   // Incremental Linking Table offset, which looks like
@@ -1339,7 +1340,7 @@
   if (lparen) {
     // Extract the string `(?...)`
     const char *rparen = strchr(lparen, ')');
-    size_t length = rparen - lparen - 1;
+    size_t length = static_cast<size_t>(rparen - lparen) - 1;
     strncpy(buffer, lparen + 1, length);
     buffer[length] = '\0';
     mangled = buffer;
@@ -1347,6 +1348,12 @@
   // We use the ANSI version to ensure the string type is always `char *`.
   return UnDecorateSymbolName(mangled, out, out_size, UNDNAME_COMPLETE);
 #else
+  (void)mangled;
+  (void)out;
+  (void)out_size;
+  return false;
+#endif
+#else
   State state;
   InitState(&state, mangled, out, out_size);
   return ParseTopLevelMangledName(&state) && !state.overflowed;
diff --git a/third_party/google-glog/src/demangle.h b/third_party/google-glog/src/demangle.h
index 991b6ff..f347b98 100644
--- a/third_party/google-glog/src/demangle.h
+++ b/third_party/google-glog/src/demangle.h
@@ -71,14 +71,14 @@
 #define BASE_DEMANGLE_H_
 
 #include "config.h"
-#include "glog/logging.h"
+#include <glog/logging.h>
 
 _START_GOOGLE_NAMESPACE_
 
 // Demangle "mangled".  On success, return true and write the
 // demangled symbol name to "out".  Otherwise, return false.
 // "out" is modified even if demangling is unsuccessful.
-bool GOOGLE_GLOG_DLL_DECL Demangle(const char *mangled, char *out, int out_size);
+bool GLOG_EXPORT Demangle(const char *mangled, char *out, size_t out_size);
 
 _END_GOOGLE_NAMESPACE_
 
diff --git a/third_party/google-glog/src/demangle_unittest.cc b/third_party/google-glog/src/demangle_unittest.cc
index be48341..ddc90b0 100644
--- a/third_party/google-glog/src/demangle_unittest.cc
+++ b/third_party/google-glog/src/demangle_unittest.cc
@@ -36,7 +36,7 @@
 #include <iostream>
 #include <fstream>
 #include <string>
-#include "glog/logging.h"
+#include <glog/logging.h>
 #include "demangle.h"
 #include "googletest.h"
 #include "config.h"
@@ -62,8 +62,9 @@
   }
 }
 
-#if defined(OS_WINDOWS)
+#if defined(GLOG_OS_WINDOWS)
 
+#if defined(HAVE_DBGHELP) && !defined(NDEBUG)
 TEST(Demangle, Windows) {
   EXPECT_STREQ(
     "public: static void __cdecl Foo::func(int)",
@@ -75,6 +76,7 @@
     "int __cdecl foobarArray(int * const)",
     DemangleIt("?foobarArray@@YAHQAH@Z"));
 }
+#endif
 
 #else
 
diff --git a/third_party/google-glog/src/glog/log_severity.h b/third_party/google-glog/src/glog/log_severity.h
index 99945a4..aa48f53 100644
--- a/third_party/google-glog/src/glog/log_severity.h
+++ b/third_party/google-glog/src/glog/log_severity.h
@@ -30,14 +30,20 @@
 #ifndef BASE_LOG_SEVERITY_H__
 #define BASE_LOG_SEVERITY_H__
 
-// Annoying stuff for windows -- makes sure clients can import these functions
-#ifndef GOOGLE_GLOG_DLL_DECL
-# if defined(_WIN32) && !defined(__CYGWIN__)
-#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)
-# else
-#   define GOOGLE_GLOG_DLL_DECL
-# endif
-#endif
+// The recommended semantics of the log levels are as follows:
+//
+// INFO:
+//   Use for state changes or other major events, or to aid debugging.
+// WARNING:
+//   Use for undesired but relatively expected events, which may indicate a
+//   problem
+// ERROR:
+//   Use for undesired and unexpected events that the program can recover from.
+//   All ERRORs should be actionable - it should be appropriate to file a bug
+//   whenever an ERROR occurs in production.
+// FATAL:
+//   Use for undesired and unexpected events that the program cannot recover
+//   from.
 
 // Variables of type LogSeverity are widely taken to lie in the range
 // [0, NUM_SEVERITIES-1].  Be careful to preserve this assumption if
@@ -61,7 +67,7 @@
 #define DFATAL_LEVEL FATAL
 #endif
 
-extern GOOGLE_GLOG_DLL_DECL const char* const LogSeverityNames[NUM_SEVERITIES];
+extern GLOG_EXPORT const char* const LogSeverityNames[NUM_SEVERITIES];
 
 // NDEBUG usage helpers related to (RAW_)DCHECK:
 //
diff --git a/third_party/google-glog/src/glog/logging.h.in b/third_party/google-glog/src/glog/logging.h.in
index 448253f..8a26cbc 100644
--- a/third_party/google-glog/src/glog/logging.h.in
+++ b/third_party/google-glog/src/glog/logging.h.in
@@ -1,4 +1,4 @@
-// Copyright (c) 1999, Google Inc.
+// Copyright (c) 2022, Google Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -33,12 +33,18 @@
 // Pretty much everybody needs to #include this file so that they can
 // log various happenings.
 //
-#ifndef _LOGGING_H_
-#define _LOGGING_H_
+#ifndef GLOG_LOGGING_H
+#define GLOG_LOGGING_H
 
-#include <errno.h>
-#include <string.h>
-#include <time.h>
+#if @ac_cv_cxx11_chrono@ && __cplusplus >= 201103L
+#include <chrono>
+#endif
+
+#include <cerrno>
+#include <cstddef>
+#include <cstdlib>
+#include <cstring>
+#include <ctime>
 #include <iosfwd>
 #include <ostream>
 #include <sstream>
@@ -57,13 +63,10 @@
 #define GLOG_MSVC_POP_WARNING()
 #endif
 
-// Annoying stuff for windows -- makes sure clients can import these functions
-#ifndef GOOGLE_GLOG_DLL_DECL
-# if defined(_WIN32) && !defined(__CYGWIN__)
-#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)
-# else
-#   define GOOGLE_GLOG_DLL_DECL
-# endif
+#include <glog/platform.h>
+
+#if @ac_cv_have_glog_export@
+#include <glog/export.h>
 #endif
 
 // We care a lot about number of bits things take up.  Unfortunately,
@@ -86,9 +89,15 @@
 #include <gflags/gflags.h>
 #endif
 
+#if @ac_cv_cxx11_atomic@ && __cplusplus >= 201103L
+#include <atomic>
+#elif defined(GLOG_OS_WINDOWS)
+#include <Windows.h>
+#endif
+
 @ac_google_start_namespace@
 
-#if @ac_cv_have_uint16_t@      // the C99 format
+#if @ac_cv_have_stdint_h@      // the C99 format
 typedef int32_t int32;
 typedef uint32_t uint32;
 typedef int64_t int64;
@@ -107,8 +116,70 @@
 #error Do not know how to define a 32-bit integer quantity on your system
 #endif
 
+#if !(@ac_cv_have_ssize_t@)
+typedef ptrdiff_t ssize_t;
+#endif
+
+#if !(@ac_cv_have_mode_t@)
+typedef int mode_t;
+#endif
+
+typedef double WallTime;
+
+struct GLOG_EXPORT LogMessageTime {
+  LogMessageTime();
+  LogMessageTime(std::tm t);
+  LogMessageTime(std::time_t timestamp, WallTime now);
+
+  const time_t& timestamp() const { return timestamp_; }
+  const int& sec() const { return time_struct_.tm_sec; }
+  const int32_t& usec() const { return usecs_; }
+  const int&(min)() const { return time_struct_.tm_min; }
+  const int& hour() const { return time_struct_.tm_hour; }
+  const int& day() const { return time_struct_.tm_mday; }
+  const int& month() const { return time_struct_.tm_mon; }
+  const int& year() const { return time_struct_.tm_year; }
+  const int& dayOfWeek() const { return time_struct_.tm_wday; }
+  const int& dayInYear() const { return time_struct_.tm_yday; }
+  const int& dst() const { return time_struct_.tm_isdst; }
+  const long int& gmtoff() const { return gmtoffset_; }
+  const std::tm& tm() const { return time_struct_; }
+
+ private:
+  void init(const std::tm& t, std::time_t timestamp, WallTime now);
+  std::tm time_struct_;  // Time of creation of LogMessage
+  time_t timestamp_;     // Time of creation of LogMessage in seconds
+  int32_t usecs_;        // Time of creation of LogMessage - microseconds part
+  long int gmtoffset_;
+
+  void CalcGmtOffset();
+};
+
+#ifdef GLOG_CUSTOM_PREFIX_SUPPORT
+struct LogMessageInfo {
+  explicit LogMessageInfo(const char* const severity_,
+                          const char* const filename_,
+                          const int& line_number_,
+                          const int& thread_id_,
+                          const LogMessageTime& time_):
+      severity(severity_), filename(filename_), line_number(line_number_),
+      thread_id(thread_id_), time(time_)
+  {}
+
+  const char* const severity;
+  const char* const filename;
+  const int &line_number;
+  const int &thread_id;
+  const LogMessageTime& time;
+};
+
+typedef void(*CustomPrefixCallback)(std::ostream& s, const LogMessageInfo& l, void* data);
+
+#endif
+
 @ac_google_end_namespace@
 
+
 // The global value of GOOGLE_STRIP_LOG. All the messages logged to
 // LOG(XXX) with severity less than GOOGLE_STRIP_LOG will not be displayed.
 // If it can be determined at compile time that the message will not be
@@ -280,12 +351,13 @@
 //
 // Log lines have this form:
 //
-//     Lmmdd hh:mm:ss.uuuuuu threadid file:line] msg...
+//     Lyyyymmdd hh:mm:ss.uuuuuu threadid file:line] msg...
 //
 // where the fields are defined as follows:
 //
 //   L                A single character, representing the log level
 //                    (eg 'I' for INFO)
+//   yyyy             The year
 //   mm               The month (zero padded; ie May is '05')
 //   dd               The day (zero padded)
 //   hh:mm:ss.uuuuuu  Time in hours, minutes and fractional seconds
@@ -305,11 +377,36 @@
 // synchronized.  Hence, use caution when comparing the low bits of
 // timestamps from different machines.
 
+#pragma push_macro("DECLARE_VARIABLE")
+#pragma push_macro("DECLARE_bool")
+#pragma push_macro("DECLARE_string")
+#pragma push_macro("DECLARE_int32")
+#pragma push_macro("DECLARE_uint32")
+
+#ifdef DECLARE_VARIABLE
+#undef DECLARE_VARIABLE
+#endif
+
+#ifdef DECLARE_bool
+#undef DECLARE_bool
+#endif
+
+#ifdef DECLARE_string
+#undef DECLARE_string
+#endif
+
+#ifdef DECLARE_int32
+#undef DECLARE_int32
+#endif
+
+#ifdef DECLARE_uint32
+#undef DECLARE_uint32
+#endif
+
 #ifndef DECLARE_VARIABLE
-#define MUST_UNDEF_GFLAGS_DECLARE_MACROS
 #define DECLARE_VARIABLE(type, shorttype, name, tn)                     \
   namespace fL##shorttype {                                             \
-    extern GOOGLE_GLOG_DLL_DECL type FLAGS_##name;                      \
+    extern GLOG_EXPORT type FLAGS_##name;                      \
   }                                                                     \
   using fL##shorttype::FLAGS_##name
 
@@ -321,15 +418,30 @@
 #define DECLARE_int32(name) \
   DECLARE_VARIABLE(@ac_google_namespace@::int32, I, name, int32)
 
+#if !defined(DECLARE_uint32)
+// uint32 specialization
+#define DECLARE_uint32(name) \
+  DECLARE_VARIABLE(@ac_google_namespace@::uint32, U, name, uint32)
+#endif // !defined(DECLARE_uint32) && !(@ac_cv_have_libgflags@)
+
 // Special case for string, because we have to specify the namespace
 // std::string, which doesn't play nicely with our FLAG__namespace hackery.
 #define DECLARE_string(name)                                            \
   namespace fLS {                                                       \
-    extern GOOGLE_GLOG_DLL_DECL std::string& FLAGS_##name;              \
+    extern GLOG_EXPORT std::string& FLAGS_##name;              \
   }                                                                     \
   using fLS::FLAGS_##name
 #endif
 
+// Set whether appending a timestamp to the log file name
+DECLARE_bool(timestamp_in_logfile_name);
+
+// Set whether log messages go to stdout instead of logfiles
+DECLARE_bool(logtostdout);
+
+// Set color messages logged to stdout (if supported by terminal).
+DECLARE_bool(colorlogtostdout);
+
 // Set whether log messages go to stderr instead of logfiles
 DECLARE_bool(logtostderr);
 
@@ -346,6 +458,9 @@
 // Set whether the log prefix should be prepended to each line of output.
 DECLARE_bool(log_prefix);
 
+// Set whether the year should be included in the log prefix.
+DECLARE_bool(log_year_in_prefix);
+
 // Log messages at a level <= this flag are buffered.
 // Log messages at a higher level are flushed immediately.
 DECLARE_int32(logbuflevel);
@@ -370,19 +485,16 @@
 
 DECLARE_int32(v);  // in vlog_is_on.cc
 
+DECLARE_string(vmodule); // also in vlog_is_on.cc
+
 // Sets the maximum log file size (in MB).
-DECLARE_int32(max_log_size);
+DECLARE_uint32(max_log_size);
 
 // Sets whether to avoid logging to the disk if the disk is full.
 DECLARE_bool(stop_logging_if_full_disk);
 
-#ifdef MUST_UNDEF_GFLAGS_DECLARE_MACROS
-#undef MUST_UNDEF_GFLAGS_DECLARE_MACROS
-#undef DECLARE_VARIABLE
-#undef DECLARE_bool
-#undef DECLARE_int32
-#undef DECLARE_string
-#endif
+// Use UTC time for logging
+DECLARE_bool(log_utc_time);
 
 // Log messages below the GOOGLE_STRIP_LOG level will be compiled away for
 // security reasons. See LOG(severtiy) below.
@@ -484,7 +596,8 @@
     LPSTR message = NULL; \
     LPSTR msg = reinterpret_cast<LPSTR>(&message); \
     DWORD message_length = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | \
-                         FORMAT_MESSAGE_FROM_SYSTEM, \
+                         FORMAT_MESSAGE_FROM_SYSTEM | \
+                         FORMAT_MESSAGE_IGNORE_INSERTS, \
                          0, result, 0, msg, 100, NULL); \
     if (message_length > 0) { \
       @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::GLOG_ERROR, 0, \
@@ -509,18 +622,38 @@
 @ac_google_start_namespace@
 
 // They need the definitions of integer types.
-#include "glog/log_severity.h"
-#include "glog/vlog_is_on.h"
+#include <glog/log_severity.h>
+#include <glog/vlog_is_on.h>
 
 // Initialize google's logging library. You will see the program name
 // specified by argv0 in log outputs.
-GOOGLE_GLOG_DLL_DECL void InitGoogleLogging(const char* argv0);
+GLOG_EXPORT void InitGoogleLogging(const char* argv0);
+
+#ifdef GLOG_CUSTOM_PREFIX_SUPPORT
+GLOG_EXPORT void InitGoogleLogging(const char* argv0,
+                                   CustomPrefixCallback prefix_callback,
+                                   void* prefix_callback_data = NULL);
+#endif
+
+// Check if google's logging library has been initialized.
+GLOG_EXPORT bool IsGoogleLoggingInitialized();
 
 // Shutdown google's logging library.
-GOOGLE_GLOG_DLL_DECL void ShutdownGoogleLogging();
+GLOG_EXPORT void ShutdownGoogleLogging();
+
+#if defined(__GNUC__)
+typedef void (*logging_fail_func_t)() __attribute__((noreturn));
+#else
+typedef void (*logging_fail_func_t)();
+#endif
 
 // Install a function which will be called after LOG(FATAL).
-GOOGLE_GLOG_DLL_DECL void InstallFailureFunction(void (*fail_func)());
+GLOG_EXPORT void InstallFailureFunction(logging_fail_func_t fail_func);
+
+// Enable/Disable old log cleaner.
+GLOG_EXPORT void EnableLogCleaner(unsigned int overdue_days);
+GLOG_EXPORT void DisableLogCleaner();
+GLOG_EXPORT void SetApplicationFingerprint(const std::string& fingerprint);
 
 class LogSink;  // defined below
 
@@ -554,7 +687,7 @@
 // NOTE: LOG(severity) expands to LogMessage().stream() for the specified
 // severity.
 #define LOG_TO_STRING(severity, message) \
-  LOG_TO_STRING_##severity(static_cast<string*>(message)).stream()
+  LOG_TO_STRING_##severity(static_cast<std::string*>(message)).stream()
 
 // If a non-NULL pointer is given, we push the message onto the end
 // of a vector of strings; otherwise, we report it with LOG(severity).
@@ -567,10 +700,8 @@
 #define LOG_STRING(severity, outvec) \
   LOG_TO_STRING_##severity(static_cast<std::vector<std::string>*>(outvec)).stream()
 
-#define LOG_IF(severity, condition) \
-  !(condition) ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(severity)
-#define SYSLOG_IF(severity, condition) \
-  !(condition) ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & SYSLOG(severity)
+#define LOG_IF(severity, condition) if(condition) LOG(severity)
+#define SYSLOG_IF(severity, condition) if(condition) SYSLOG(severity)
 
 #define LOG_ASSERT(condition)  \
   LOG_IF(FATAL, !(condition)) << "Assert failed: " #condition
@@ -611,10 +742,12 @@
 inline unsigned int   GetReferenceableValue(unsigned int       t) { return t; }
 inline long           GetReferenceableValue(long               t) { return t; }
 inline unsigned long  GetReferenceableValue(unsigned long      t) { return t; }
+#if __cplusplus >= 201103L
 inline long long      GetReferenceableValue(long long          t) { return t; }
 inline unsigned long long GetReferenceableValue(unsigned long long t) {
   return t;
 }
+#endif
 
 // This is a dummy class to define the following operator.
 struct DummyClassToDefineOperator {};
@@ -640,13 +773,20 @@
 
 // Overrides for char types provide readable values for unprintable
 // characters.
-template <> GOOGLE_GLOG_DLL_DECL
+template <> GLOG_EXPORT
 void MakeCheckOpValueString(std::ostream* os, const char& v);
-template <> GOOGLE_GLOG_DLL_DECL
+template <> GLOG_EXPORT
 void MakeCheckOpValueString(std::ostream* os, const signed char& v);
-template <> GOOGLE_GLOG_DLL_DECL
+template <> GLOG_EXPORT
 void MakeCheckOpValueString(std::ostream* os, const unsigned char& v);
 
+// This is required because nullptr is only present in c++ 11 and later.
+#if @ac_cv_cxx11_nullptr_t@ && __cplusplus >= 201103L
+// Provide printable value for nullptr_t
+template <> GLOG_EXPORT
+void MakeCheckOpValueString(std::ostream* os, const std::nullptr_t& v);
+#endif
+
 // Build the error message string. Specify no inlining for code size.
 template <typename T1, typename T2>
 std::string* MakeCheckOpString(const T1& v1, const T2& v2, const char* exprtext)
@@ -668,7 +808,7 @@
 // base::BuildCheckOpString(exprtext, base::Print<T1>, &v1,
 // base::Print<T2>, &v2), however this approach has complications
 // related to volatile arguments and function-pointer arguments).
-class GOOGLE_GLOG_DLL_DECL CheckOpMessageBuilder {
+class GLOG_EXPORT CheckOpMessageBuilder {
  public:
   // Inserts "exprtext" and " (" to the stream.
   explicit CheckOpMessageBuilder(const char *exprtext);
@@ -801,7 +941,7 @@
 // Helper functions for string comparisons.
 // To avoid bloat, the definitions are in logging.cc.
 #define DECLARE_CHECK_STROP_IMPL(func, expected) \
-  GOOGLE_GLOG_DLL_DECL std::string* Check##func##expected##Impl( \
+  GLOG_EXPORT std::string* Check##func##expected##Impl( \
       const char* s1, const char* s2, const char* names);
 DECLARE_CHECK_STROP_IMPL(strcmp, true)
 DECLARE_CHECK_STROP_IMPL(strcmp, false)
@@ -858,8 +998,7 @@
       __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity, counter, \
       &@ac_google_namespace@::LogMessage::SendToLog)
 
-#define PLOG_IF(severity, condition) \
-  !(condition) ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & PLOG(severity)
+#define PLOG_IF(severity, condition) if(condition) PLOG(severity)
 
 // A CHECK() macro that postpends errno if the condition is false. E.g.
 //
@@ -888,8 +1027,101 @@
 #define LOG_OCCURRENCES LOG_EVERY_N_VARNAME(occurrences_, __LINE__)
 #define LOG_OCCURRENCES_MOD_N LOG_EVERY_N_VARNAME(occurrences_mod_n_, __LINE__)
 
+#if @ac_cv_cxx11_constexpr@ && __cplusplus >= 201103L
+#define GLOG_CONSTEXPR constexpr
+#else
+#define GLOG_CONSTEXPR const
+#endif
+
+#define LOG_TIME_PERIOD LOG_EVERY_N_VARNAME(timePeriod_, __LINE__)
+#define LOG_PREVIOUS_TIME_RAW LOG_EVERY_N_VARNAME(previousTimeRaw_, __LINE__)
+#define LOG_TIME_DELTA LOG_EVERY_N_VARNAME(deltaTime_, __LINE__)
+#define LOG_CURRENT_TIME LOG_EVERY_N_VARNAME(currentTime_, __LINE__)
+#define LOG_PREVIOUS_TIME LOG_EVERY_N_VARNAME(previousTime_, __LINE__)
+
+#if defined(__has_feature)
+#  if __has_feature(thread_sanitizer)
+#    define GLOG_SANITIZE_THREAD 1
+#  endif
+#endif
+
+#if !defined(GLOG_SANITIZE_THREAD) && defined(__SANITIZE_THREAD__) && __SANITIZE_THREAD__
+#  define GLOG_SANITIZE_THREAD 1
+#endif
+
+#if defined(GLOG_SANITIZE_THREAD)
+#define GLOG_IFDEF_THREAD_SANITIZER(X) X
+#else
+#define GLOG_IFDEF_THREAD_SANITIZER(X)
+#endif
+
+#if defined(GLOG_SANITIZE_THREAD)
+} // namespace google
+
+// We need to identify the static variables as "benign" races
+// to avoid noisy reports from TSAN.
+extern "C" void AnnotateBenignRaceSized(
+  const char *file,
+  int line,
+  const volatile void *mem,
+  size_t size,
+  const char *description);
+
+namespace google {
+#endif
+
+#if __cplusplus >= 201103L && @ac_cv_cxx11_chrono@ && @ac_cv_cxx11_atomic@ // Have <chrono> and <atomic>
+#define SOME_KIND_OF_LOG_EVERY_T(severity, seconds) \
+  GLOG_CONSTEXPR std::chrono::nanoseconds LOG_TIME_PERIOD = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::duration<double>(seconds)); \
+  static std::atomic<@ac_google_namespace@::int64> LOG_PREVIOUS_TIME_RAW; \
+  GLOG_IFDEF_THREAD_SANITIZER( \
+          AnnotateBenignRaceSized(__FILE__, __LINE__, &LOG_TIME_PERIOD, sizeof(@ac_google_namespace@::int64), "")); \
+  GLOG_IFDEF_THREAD_SANITIZER( \
+          AnnotateBenignRaceSized(__FILE__, __LINE__, &LOG_PREVIOUS_TIME_RAW, sizeof(@ac_google_namespace@::int64), "")); \
+  const auto LOG_CURRENT_TIME = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::steady_clock::now().time_since_epoch()); \
+  const auto LOG_PREVIOUS_TIME = LOG_PREVIOUS_TIME_RAW.load(std::memory_order_relaxed); \
+  const auto LOG_TIME_DELTA = LOG_CURRENT_TIME - std::chrono::nanoseconds(LOG_PREVIOUS_TIME); \
+  if (LOG_TIME_DELTA > LOG_TIME_PERIOD) \
+    LOG_PREVIOUS_TIME_RAW.store(std::chrono::duration_cast<std::chrono::nanoseconds>(LOG_CURRENT_TIME).count(), std::memory_order_relaxed); \
+  if (LOG_TIME_DELTA > LOG_TIME_PERIOD) @ac_google_namespace@::LogMessage( \
+        __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity).stream()
+#elif defined(GLOG_OS_WINDOWS)
+#define SOME_KIND_OF_LOG_EVERY_T(severity, seconds) \
+  GLOG_CONSTEXPR LONGLONG LOG_TIME_PERIOD = (seconds) * LONGLONG(1000000000); \
+  static LARGE_INTEGER LOG_PREVIOUS_TIME; \
+  LONGLONG LOG_TIME_DELTA; \
+  { \
+    LARGE_INTEGER currTime; \
+    LARGE_INTEGER freq; \
+    QueryPerformanceCounter(&currTime); \
+    QueryPerformanceFrequency(&freq); \
+    InterlockedCompareExchange64(&LOG_PREVIOUS_TIME.QuadPart, currTime.QuadPart, 0); \
+    LOG_TIME_DELTA = (currTime.QuadPart - LOG_PREVIOUS_TIME.QuadPart) * LONGLONG(1000000000) / freq.QuadPart; \
+    if (LOG_TIME_DELTA > LOG_TIME_PERIOD) InterlockedExchange64(&LOG_PREVIOUS_TIME.QuadPart, currTime.QuadPart); \
+  } \
+  if (LOG_TIME_DELTA > LOG_TIME_PERIOD) \
+    @ac_google_namespace@::LogMessage( \
+        __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity).stream()
+#else
+#define SOME_KIND_OF_LOG_EVERY_T(severity, seconds) \
+  GLOG_CONSTEXPR @ac_google_namespace@::int64 LOG_TIME_PERIOD(seconds * 1000000000); \
+  static @ac_google_namespace@::int64 LOG_PREVIOUS_TIME; \
+  @ac_google_namespace@::int64 LOG_TIME_DELTA = 0; \
+  { \
+    timespec currentTime = {}; \
+    clock_gettime(CLOCK_MONOTONIC, &currentTime); \
+    LOG_TIME_DELTA = (currentTime.tv_sec * 1000000000 + currentTime.tv_nsec) - LOG_PREVIOUS_TIME; \
+  } \
+  if (LOG_TIME_DELTA > LOG_TIME_PERIOD) __sync_add_and_fetch(&LOG_PREVIOUS_TIME, LOG_TIME_DELTA); \
+  if (LOG_TIME_DELTA > LOG_TIME_PERIOD) @ac_google_namespace@::LogMessage( \
+        __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity).stream()
+#endif
+
+#if @ac_cv_cxx11_atomic@ && __cplusplus >= 201103L
 #define SOME_KIND_OF_LOG_EVERY_N(severity, n, what_to_do) \
-  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \
+  static std::atomic<int> LOG_OCCURRENCES(0), LOG_OCCURRENCES_MOD_N(0); \
+  GLOG_IFDEF_THREAD_SANITIZER(AnnotateBenignRaceSized(__FILE__, __LINE__, &LOG_OCCURRENCES, sizeof(int), "")); \
+  GLOG_IFDEF_THREAD_SANITIZER(AnnotateBenignRaceSized(__FILE__, __LINE__, &LOG_OCCURRENCES_MOD_N, sizeof(int), "")); \
   ++LOG_OCCURRENCES; \
   if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \
   if (LOG_OCCURRENCES_MOD_N == 1) \
@@ -898,16 +1130,20 @@
         &what_to_do).stream()
 
 #define SOME_KIND_OF_LOG_IF_EVERY_N(severity, condition, n, what_to_do) \
-  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \
+  static std::atomic<int> LOG_OCCURRENCES(0), LOG_OCCURRENCES_MOD_N(0); \
+  GLOG_IFDEF_THREAD_SANITIZER(AnnotateBenignRaceSized(__FILE__, __LINE__, &LOG_OCCURRENCES, sizeof(int), "")); \
+  GLOG_IFDEF_THREAD_SANITIZER(AnnotateBenignRaceSized(__FILE__, __LINE__, &LOG_OCCURRENCES_MOD_N, sizeof(int), "")); \
   ++LOG_OCCURRENCES; \
-  if (condition && \
+  if ((condition) && \
       ((LOG_OCCURRENCES_MOD_N=(LOG_OCCURRENCES_MOD_N + 1) % n) == (1 % n))) \
     @ac_google_namespace@::LogMessage( \
         __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity, LOG_OCCURRENCES, \
                  &what_to_do).stream()
 
 #define SOME_KIND_OF_PLOG_EVERY_N(severity, n, what_to_do) \
-  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \
+  static std::atomic<int> LOG_OCCURRENCES(0), LOG_OCCURRENCES_MOD_N(0); \
+  GLOG_IFDEF_THREAD_SANITIZER(AnnotateBenignRaceSized(__FILE__, __LINE__, &LOG_OCCURRENCES, sizeof(int), "")); \
+  GLOG_IFDEF_THREAD_SANITIZER(AnnotateBenignRaceSized(__FILE__, __LINE__, &LOG_OCCURRENCES_MOD_N, sizeof(int), "")); \
   ++LOG_OCCURRENCES; \
   if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \
   if (LOG_OCCURRENCES_MOD_N == 1) \
@@ -916,7 +1152,8 @@
         &what_to_do).stream()
 
 #define SOME_KIND_OF_LOG_FIRST_N(severity, n, what_to_do) \
-  static int LOG_OCCURRENCES = 0; \
+  static std::atomic<int> LOG_OCCURRENCES(0); \
+  GLOG_IFDEF_THREAD_SANITIZER(AnnotateBenignRaceSized(__FILE__, __LINE__, &LOG_OCCURRENCES, sizeof(int), "")); \
   if (LOG_OCCURRENCES <= n) \
     ++LOG_OCCURRENCES; \
   if (LOG_OCCURRENCES <= n) \
@@ -924,6 +1161,94 @@
         __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity, LOG_OCCURRENCES, \
         &what_to_do).stream()
 
+#elif defined(GLOG_OS_WINDOWS)
+
+#define SOME_KIND_OF_LOG_EVERY_N(severity, n, what_to_do) \
+  static volatile unsigned LOG_OCCURRENCES = 0; \
+  static volatile unsigned LOG_OCCURRENCES_MOD_N = 0; \
+  InterlockedIncrement(&LOG_OCCURRENCES); \
+  if (InterlockedIncrement(&LOG_OCCURRENCES_MOD_N) > n) \
+    InterlockedExchangeSubtract(&LOG_OCCURRENCES_MOD_N, n); \
+  if (LOG_OCCURRENCES_MOD_N == 1) \
+    @ac_google_namespace@::LogMessage( \
+        __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity, LOG_OCCURRENCES, \
+        &what_to_do).stream()
+
+#define SOME_KIND_OF_LOG_IF_EVERY_N(severity, condition, n, what_to_do) \
+  static volatile unsigned LOG_OCCURRENCES = 0; \
+  static volatile unsigned LOG_OCCURRENCES_MOD_N = 0; \
+  InterlockedIncrement(&LOG_OCCURRENCES); \
+  if ((condition) && \
+    ((InterlockedIncrement(&LOG_OCCURRENCES_MOD_N), \
+     (LOG_OCCURRENCES_MOD_N > n && InterlockedExchangeSubtract(&LOG_OCCURRENCES_MOD_N, n))), \
+     LOG_OCCURRENCES_MOD_N == 1)) \
+    @ac_google_namespace@::LogMessage( \
+        __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity, LOG_OCCURRENCES, \
+                 &what_to_do).stream()
+
+#define SOME_KIND_OF_PLOG_EVERY_N(severity, n, what_to_do) \
+  static volatile unsigned LOG_OCCURRENCES = 0; \
+  static volatile unsigned LOG_OCCURRENCES_MOD_N = 0; \
+  InterlockedIncrement(&LOG_OCCURRENCES); \
+  if (InterlockedIncrement(&LOG_OCCURRENCES_MOD_N) > n) \
+    InterlockedExchangeSubtract(&LOG_OCCURRENCES_MOD_N, n); \
+  if (LOG_OCCURRENCES_MOD_N == 1) \
+    @ac_google_namespace@::ErrnoLogMessage( \
+        __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity, LOG_OCCURRENCES, \
+        &what_to_do).stream()
+
+#define SOME_KIND_OF_LOG_FIRST_N(severity, n, what_to_do) \
+  static volatile unsigned LOG_OCCURRENCES = 0; \
+  if (LOG_OCCURRENCES <= n) \
+    InterlockedIncrement(&LOG_OCCURRENCES); \
+  if (LOG_OCCURRENCES <= n) \
+    @ac_google_namespace@::LogMessage( \
+        __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity, LOG_OCCURRENCES, \
+        &what_to_do).stream()
+
+#else
+
+#define SOME_KIND_OF_LOG_EVERY_N(severity, n, what_to_do) \
+  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \
+  __sync_add_and_fetch(&LOG_OCCURRENCES, 1); \
+  if (__sync_add_and_fetch(&LOG_OCCURRENCES_MOD_N, 1) > n) \
+    __sync_sub_and_fetch(&LOG_OCCURRENCES_MOD_N, n); \
+  if (LOG_OCCURRENCES_MOD_N == 1) \
+    @ac_google_namespace@::LogMessage( \
+        __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity, LOG_OCCURRENCES, \
+        &what_to_do).stream()
+
+#define SOME_KIND_OF_LOG_IF_EVERY_N(severity, condition, n, what_to_do) \
+  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \
+  __sync_add_and_fetch(&LOG_OCCURRENCES, 1); \
+  if ((condition) && \
+      (__sync_add_and_fetch(&LOG_OCCURRENCES_MOD_N, 1) || true) && \
+      ((LOG_OCCURRENCES_MOD_N >= n && __sync_sub_and_fetch(&LOG_OCCURRENCES_MOD_N, n)) || true) && \
+      LOG_OCCURRENCES_MOD_N == (1 % n)) \
+    @ac_google_namespace@::LogMessage( \
+        __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity, LOG_OCCURRENCES, \
+                 &what_to_do).stream()
+
+#define SOME_KIND_OF_PLOG_EVERY_N(severity, n, what_to_do) \
+  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \
+  __sync_add_and_fetch(&LOG_OCCURRENCES, 1); \
+  if (__sync_add_and_fetch(&LOG_OCCURRENCES_MOD_N, 1) > n) \
+    __sync_sub_and_fetch(&LOG_OCCURRENCES_MOD_N, n); \
+  if (LOG_OCCURRENCES_MOD_N == 1) \
+    @ac_google_namespace@::ErrnoLogMessage( \
+        __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity, LOG_OCCURRENCES, \
+        &what_to_do).stream()
+
+#define SOME_KIND_OF_LOG_FIRST_N(severity, n, what_to_do) \
+  static int LOG_OCCURRENCES = 0; \
+  if (LOG_OCCURRENCES <= n) \
+    __sync_add_and_fetch(&LOG_OCCURRENCES, 1); \
+  if (LOG_OCCURRENCES <= n) \
+    @ac_google_namespace@::LogMessage( \
+        __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity, LOG_OCCURRENCES, \
+        &what_to_do).stream()
+#endif
+
 namespace glog_internal_namespace_ {
 template <bool>
 struct CompileAssert {
@@ -932,12 +1257,14 @@
 
 // Returns true if FailureSignalHandler is installed.
 // Needs to be exported since it's used by the signalhandler_unittest.
-GOOGLE_GLOG_DLL_DECL bool IsFailureSignalHandlerInstalled();
+GLOG_EXPORT bool IsFailureSignalHandlerInstalled();
 }  // namespace glog_internal_namespace_
 
 #define LOG_EVERY_N(severity, n)                                        \
   SOME_KIND_OF_LOG_EVERY_N(severity, (n), @ac_google_namespace@::LogMessage::SendToLog)
 
+#define LOG_EVERY_T(severity, T) SOME_KIND_OF_LOG_EVERY_T(severity, (T))
+
 #define SYSLOG_EVERY_N(severity, n) \
   SOME_KIND_OF_LOG_EVERY_N(severity, (n), @ac_google_namespace@::LogMessage::SendToSyslogAndLog)
 
@@ -1003,24 +1330,17 @@
 
 #else  // !DCHECK_IS_ON()
 
-#define DLOG(severity) \
-  true ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(severity)
+#define DLOG(severity) if((false)) LOG(severity)
 
-#define DVLOG(verboselevel) \
-  (true || !VLOG_IS_ON(verboselevel)) ?\
-    (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(INFO)
+#define DVLOG(verboselevel) if((false) && VLOG_IS_ON(verboselevel)) LOG(INFO)
 
-#define DLOG_IF(severity, condition) \
-  (true || !(condition)) ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(severity)
+#define DLOG_IF(severity, condition) if((false) && (condition)) LOG(severity)
 
-#define DLOG_EVERY_N(severity, n) \
-  true ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(severity)
+#define DLOG_EVERY_N(severity, n) if((false)) LOG(severity)
 
-#define DLOG_IF_EVERY_N(severity, condition, n) \
-  (true || !(condition))? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(severity)
+#define DLOG_IF_EVERY_N(severity, condition, n) if((false) && (condition)) LOG(severity)
 
-#define DLOG_ASSERT(condition) \
-  true ? (void) 0 : LOG_ASSERT(condition)
+#define DLOG_ASSERT(condition) if((false)) LOG_ASSERT(condition)
 
 // MSVC warning C4127: conditional expression is constant
 #define DCHECK(condition) \
@@ -1102,7 +1422,7 @@
 // LogMessage::LogStream is a std::ostream backed by this streambuf.
 // This class ignores overflow and leaves two bytes at the end of the
 // buffer to allow for a '\n' and '\0'.
-class GOOGLE_GLOG_DLL_DECL LogStreamBuf : public std::streambuf {
+class GLOG_EXPORT LogStreamBuf : public std::streambuf {
  public:
   // REQUIREMENTS: "len" must be >= 2 to account for the '\n' and '\0'.
   LogStreamBuf(char *buf, int len) {
@@ -1110,12 +1430,12 @@
   }
 
   // This effectively ignores overflow.
-  virtual int_type overflow(int_type ch) {
+  int_type overflow(int_type ch) {
     return ch;
   }
 
   // Legacy public ostrstream method.
-  size_t pcount() const { return pptr() - pbase(); }
+  size_t pcount() const { return static_cast<size_t>(pptr() - pbase()); }
   char* pbase() const { return std::streambuf::pbase(); }
 };
 
@@ -1130,7 +1450,7 @@
 // You shouldn't actually use LogMessage's constructor to log things,
 // though.  You should use the LOG() macro (and variants thereof)
 // above.
-class GOOGLE_GLOG_DLL_DECL LogMessage {
+class GLOG_EXPORT LogMessage {
 public:
   enum {
     // Passing kNoLogPrefix for the line number disables the
@@ -1147,16 +1467,11 @@
   // 2005 if you are deriving from a type in the Standard C++ Library"
   // http://msdn.microsoft.com/en-us/library/3tdb471s(VS.80).aspx
   // Let's just ignore the warning.
-#ifdef _MSC_VER
-# pragma warning(push)
-# pragma warning(disable: 4275)
-#endif
-  class GOOGLE_GLOG_DLL_DECL LogStream : public std::ostream {
-#ifdef _MSC_VER
-# pragma warning(pop)
-#endif
+GLOG_MSVC_PUSH_DISABLE_WARNING(4275)
+  class GLOG_EXPORT LogStream : public std::ostream {
+GLOG_MSVC_POP_WARNING()
   public:
-    LogStream(char *buf, int len, int ctr)
+    LogStream(char *buf, int len, int64 ctr)
         : std::ostream(NULL),
           streambuf_(buf, len),
           ctr_(ctr),
@@ -1164,8 +1479,8 @@
       rdbuf(&streambuf_);
     }
 
-    int ctr() const { return ctr_; }
-    void set_ctr(int ctr) { ctr_ = ctr; }
+    int64 ctr() const { return ctr_; }
+    void set_ctr(int64 ctr) { ctr_ = ctr; }
     LogStream* self() const { return self_; }
 
     // Legacy std::streambuf methods.
@@ -1177,7 +1492,7 @@
     LogStream(const LogStream&);
     LogStream& operator=(const LogStream&);
     base_logging::LogStreamBuf streambuf_;
-    int ctr_;  // Counter hack (for the LOG_EVERY_X() macro)
+    int64 ctr_;  // Counter hack (for the LOG_EVERY_X() macro)
     LogStream *self_;  // Consistency check hack
   };
 
@@ -1185,7 +1500,7 @@
   // icc 8 requires this typedef to avoid an internal compiler error.
   typedef void (LogMessage::*SendMethod)();
 
-  LogMessage(const char* file, int line, LogSeverity severity, int ctr,
+  LogMessage(const char* file, int line, LogSeverity severity, int64 ctr,
              SendMethod send_method);
 
   // Two special constructors that generate reduced amounts of code at
@@ -1252,6 +1567,8 @@
   // Must be called without the log_mutex held.  (L < log_mutex)
   static int64 num_messages(int severity);
 
+  const LogMessageTime& getLogMessageTime() const;
+
   struct LogMessageData;
 
 private:
@@ -1277,6 +1594,7 @@
   // LogMessage uses less stack space.
   LogMessageData* allocated_;
   LogMessageData* data_;
+  LogMessageTime logmsgtime_;
 
   friend class LogDestination;
 
@@ -1287,7 +1605,7 @@
 // This class happens to be thread-hostile because all instances share
 // a single data buffer, but since it can only be created just before
 // the process dies, we don't worry so much.
-class GOOGLE_GLOG_DLL_DECL LogMessageFatal : public LogMessage {
+class GLOG_EXPORT LogMessageFatal : public LogMessage {
  public:
   LogMessageFatal(const char* file, int line);
   LogMessageFatal(const char* file, int line, const CheckOpString& result);
@@ -1316,7 +1634,7 @@
 // reasonably good C++11 support, so we set LANG_CXX for it and
 // newer versions (_MSC_VER >= 1900).
 #if (defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L || \
-     (defined(_MSC_VER) && _MSC_VER >= 1900))
+     (defined(_MSC_VER) && _MSC_VER >= 1900)) && !defined(__UCLIBCXX_MAJOR__)
 // Helper for CHECK_NOTNULL().
 //
 // In C++11, all cases can be handled by a single function. Since the value
@@ -1348,15 +1666,14 @@
 // Allow folks to put a counter in the LOG_EVERY_X()'ed messages. This
 // only works if ostream is a LogStream. If the ostream is not a
 // LogStream you'll get an assert saying as much at runtime.
-GOOGLE_GLOG_DLL_DECL std::ostream& operator<<(std::ostream &os,
+GLOG_EXPORT std::ostream& operator<<(std::ostream &os,
                                               const PRIVATE_Counter&);
 
 
 // Derived class for PLOG*() above.
-class GOOGLE_GLOG_DLL_DECL ErrnoLogMessage : public LogMessage {
+class GLOG_EXPORT ErrnoLogMessage : public LogMessage {
  public:
-
-  ErrnoLogMessage(const char* file, int line, LogSeverity severity, int ctr,
+  ErrnoLogMessage(const char* file, int line, LogSeverity severity, int64 ctr,
                   void (LogMessage::*send_method)());
 
   // Postpends ": strerror(errno) [errno]".
@@ -1368,34 +1685,21 @@
 };
 
 
-// This class is used to explicitly ignore values in the conditional
-// logging macros.  This avoids compiler warnings like "value computed
-// is not used" and "statement has no effect".
-
-class GOOGLE_GLOG_DLL_DECL LogMessageVoidify {
- public:
-  LogMessageVoidify() { }
-  // This has to be an operator with a precedence lower than << but
-  // higher than ?:
-  void operator&(std::ostream&) { }
-};
-
-
 // Flushes all log files that contains messages that are at least of
 // the specified severity level.  Thread-safe.
-GOOGLE_GLOG_DLL_DECL void FlushLogFiles(LogSeverity min_severity);
+GLOG_EXPORT void FlushLogFiles(LogSeverity min_severity);
 
 // Flushes all log files that contains messages that are at least of
 // the specified severity level. Thread-hostile because it ignores
 // locking -- used for catastrophic failures.
-GOOGLE_GLOG_DLL_DECL void FlushLogFilesUnsafe(LogSeverity min_severity);
+GLOG_EXPORT void FlushLogFilesUnsafe(LogSeverity min_severity);
 
 //
 // Set the destination to which a particular severity level of log
 // messages is sent.  If base_filename is "", it means "don't log this
 // severity".  Thread-safe.
 //
-GOOGLE_GLOG_DLL_DECL void SetLogDestination(LogSeverity severity,
+GLOG_EXPORT void SetLogDestination(LogSeverity severity,
                                             const char* base_filename);
 
 //
@@ -1404,7 +1708,7 @@
 // you don't call this function, the symlink basename is the
 // invocation name of the program.  Thread-safe.
 //
-GOOGLE_GLOG_DLL_DECL void SetLogSymlink(LogSeverity severity,
+GLOG_EXPORT void SetLogSymlink(LogSeverity severity,
                                         const char* symlink_basename);
 
 //
@@ -1412,7 +1716,7 @@
 // Users should subclass LogSink and override send to do whatever they want.
 // Implementations must be thread-safe because a shared instance will
 // be called from whichever thread ran the LOG(XXX) line.
-class GOOGLE_GLOG_DLL_DECL LogSink {
+class GLOG_EXPORT LogSink {
  public:
   virtual ~LogSink();
 
@@ -1421,8 +1725,13 @@
   // during this call.
   virtual void send(LogSeverity severity, const char* full_filename,
                     const char* base_filename, int line,
-                    const struct ::tm* tm_time,
-                    const char* message, size_t message_len) = 0;
+                    const LogMessageTime& logmsgtime, const char* message,
+                    size_t message_len);
+  // Provide an overload for compatibility purposes
+  GLOG_DEPRECATED
+  virtual void send(LogSeverity severity, const char* full_filename,
+                    const char* base_filename, int line, const std::tm* t,
+                    const char* message, size_t message_len);
 
   // Redefine this to implement waiting for
   // the sink's logging logic to complete.
@@ -1442,13 +1751,13 @@
   // Returns the normal text output of the log message.
   // Can be useful to implement send().
   static std::string ToString(LogSeverity severity, const char* file, int line,
-                              const struct ::tm* tm_time,
+                              const LogMessageTime &logmsgtime,
                               const char* message, size_t message_len);
 };
 
 // Add or remove a LogSink as a consumer of logging data.  Thread-safe.
-GOOGLE_GLOG_DLL_DECL void AddLogSink(LogSink *destination);
-GOOGLE_GLOG_DLL_DECL void RemoveLogSink(LogSink *destination);
+GLOG_EXPORT void AddLogSink(LogSink *destination);
+GLOG_EXPORT void RemoveLogSink(LogSink *destination);
 
 //
 // Specify an "extension" added to the filename specified via
@@ -1456,7 +1765,7 @@
 // often used to append the port we're listening on to the logfile
 // name.  Thread-safe.
 //
-GOOGLE_GLOG_DLL_DECL void SetLogFilenameExtension(
+GLOG_EXPORT void SetLogFilenameExtension(
     const char* filename_extension);
 
 //
@@ -1464,12 +1773,12 @@
 // are logged to stderr (in addition to logging to the usual log
 // file(s)).  Thread-safe.
 //
-GOOGLE_GLOG_DLL_DECL void SetStderrLogging(LogSeverity min_severity);
+GLOG_EXPORT void SetStderrLogging(LogSeverity min_severity);
 
 //
 // Make it so that all log messages go only to stderr.  Thread-safe.
 //
-GOOGLE_GLOG_DLL_DECL void LogToStderr();
+GLOG_EXPORT void LogToStderr();
 
 //
 // Make it so that all log messages of at least a particular severity are
@@ -1477,15 +1786,15 @@
 // usual log file(s)).  The list of addresses is just a string containing
 // the email addresses to send to (separated by spaces, say).  Thread-safe.
 //
-GOOGLE_GLOG_DLL_DECL void SetEmailLogging(LogSeverity min_severity,
+GLOG_EXPORT void SetEmailLogging(LogSeverity min_severity,
                                           const char* addresses);
 
 // A simple function that sends email. dest is a commma-separated
 // list of addressess.  Thread-safe.
-GOOGLE_GLOG_DLL_DECL bool SendEmail(const char *dest,
-                                    const char *subject, const char *body);
+GLOG_EXPORT bool SendEmail(const char* dest, const char* subject,
+                           const char* body);
 
-GOOGLE_GLOG_DLL_DECL const std::vector<std::string>& GetLoggingDirectories();
+GLOG_EXPORT const std::vector<std::string>& GetLoggingDirectories();
 
 // For tests only:  Clear the internal [cached] list of logging directories to
 // force a refresh the next time GetLoggingDirectories is called.
@@ -1493,15 +1802,15 @@
 void TestOnly_ClearLoggingDirectoriesList();
 
 // Returns a set of existing temporary directories, which will be a
-// subset of the directories returned by GetLogginDirectories().
+// subset of the directories returned by GetLoggingDirectories().
 // Thread-safe.
-GOOGLE_GLOG_DLL_DECL void GetExistingTempDirectories(
+GLOG_EXPORT void GetExistingTempDirectories(
     std::vector<std::string>* list);
 
 // Print any fatal message again -- useful to call from signal handler
 // so that the last thing in the output is the fatal message.
 // Thread-hostile, but a race is unlikely.
-GOOGLE_GLOG_DLL_DECL void ReprintFatalMessage();
+GLOG_EXPORT void ReprintFatalMessage();
 
 // Truncate a log file that may be the append-only output of multiple
 // processes and hence can't simply be renamed/reopened (typically a
@@ -1510,17 +1819,16 @@
 // be racing with other writers, this approach has the potential to
 // lose very small amounts of data. For security, only follow symlinks
 // if the path is /proc/self/fd/*
-GOOGLE_GLOG_DLL_DECL void TruncateLogFile(const char *path,
-                                          int64 limit, int64 keep);
+GLOG_EXPORT void TruncateLogFile(const char* path, uint64 limit, uint64 keep);
 
 // Truncate stdout and stderr if they are over the value specified by
 // --max_log_size; keep the final 1MB.  This function has the same
 // race condition as TruncateLogFile.
-GOOGLE_GLOG_DLL_DECL void TruncateStdoutStderr();
+GLOG_EXPORT void TruncateStdoutStderr();
 
 // Return the string representation of the provided LogSeverity level.
 // Thread-safe.
-GOOGLE_GLOG_DLL_DECL const char* GetLogSeverityName(LogSeverity severity);
+GLOG_EXPORT const char* GetLogSeverityName(LogSeverity severity);
 
 // ---------------------------------------------------------------------
 // Implementation details that are not useful to most clients
@@ -1535,7 +1843,7 @@
 
 namespace base {
 
-class GOOGLE_GLOG_DLL_DECL Logger {
+class GLOG_EXPORT Logger {
  public:
   virtual ~Logger();
 
@@ -1550,7 +1858,7 @@
   virtual void Write(bool force_flush,
                      time_t timestamp,
                      const char* message,
-                     int message_len) = 0;
+                     size_t message_len) = 0;
 
   // Flush any buffered messages
   virtual void Flush() = 0;
@@ -1564,12 +1872,12 @@
 // Get the logger for the specified severity level.  The logger
 // remains the property of the logging module and should not be
 // deleted by the caller.  Thread-safe.
-extern GOOGLE_GLOG_DLL_DECL Logger* GetLogger(LogSeverity level);
+extern GLOG_EXPORT Logger* GetLogger(LogSeverity level);
 
 // Set the logger for the specified severity level.  The logger
 // becomes the property of the logging module and should not
 // be deleted by the caller.  Thread-safe.
-extern GOOGLE_GLOG_DLL_DECL void SetLogger(LogSeverity level, Logger* logger);
+extern GLOG_EXPORT void SetLogger(LogSeverity level, Logger* logger);
 
 }
 
@@ -1584,14 +1892,14 @@
 // cases, you do not need to check the error code and you can directly
 // use the value of "buf". It will never have an undefined value.
 // DEPRECATED: Use StrError(int) instead.
-GOOGLE_GLOG_DLL_DECL int posix_strerror_r(int err, char *buf, size_t len);
+GLOG_EXPORT int posix_strerror_r(int err, char *buf, size_t len);
 
 // A thread-safe replacement for strerror(). Returns a string describing the
 // given POSIX error code.
-GOOGLE_GLOG_DLL_DECL std::string StrError(int err);
+GLOG_EXPORT std::string StrError(int err);
 
 // A class for which we define operator<<, which does nothing.
-class GOOGLE_GLOG_DLL_DECL NullStream : public LogMessage::LogStream {
+class GLOG_EXPORT NullStream : public LogMessage::LogStream {
  public:
   // Initialize the LogStream so the messages can be written somewhere
   // (they'll never be actually displayed). This will be needed if a
@@ -1620,12 +1928,19 @@
 
 // Similar to NullStream, but aborts the program (without stack
 // trace), like LogMessageFatal.
-class GOOGLE_GLOG_DLL_DECL NullStreamFatal : public NullStream {
+class GLOG_EXPORT NullStreamFatal : public NullStream {
  public:
   NullStreamFatal() { }
   NullStreamFatal(const char* file, int line, const CheckOpString& result) :
       NullStream(file, line, result) { }
-  @ac_cv___attribute___noreturn@ ~NullStreamFatal() throw () { _exit(1); }
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4722)
+#endif // _MSC_VER
+  @ac_cv___attribute___noreturn@ ~NullStreamFatal() throw () { _exit(EXIT_FAILURE); }
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif // _MSC_VER
 };
 
 // Install a signal handler that will dump signal information and a stack
@@ -1644,15 +1959,21 @@
 // to use the failure signal handler for all threads.  The stack trace
 // will be shown only for the thread that receives the signal.  In other
 // words, stack traces of other threads won't be shown.
-GOOGLE_GLOG_DLL_DECL void InstallFailureSignalHandler();
+GLOG_EXPORT void InstallFailureSignalHandler();
 
 // Installs a function that is used for writing the failure dump.  "data"
 // is the pointer to the beginning of a message to be written, and "size"
 // is the size of the message.  You should not expect the data is
 // terminated with '\0'.
-GOOGLE_GLOG_DLL_DECL void InstallFailureWriter(
-    void (*writer)(const char* data, int size));
+GLOG_EXPORT void InstallFailureWriter(
+    void (*writer)(const char* data, size_t size));
 
 @ac_google_end_namespace@
 
-#endif // _LOGGING_H_
+#pragma pop_macro("DECLARE_VARIABLE")
+#pragma pop_macro("DECLARE_bool")
+#pragma pop_macro("DECLARE_string")
+#pragma pop_macro("DECLARE_int32")
+#pragma pop_macro("DECLARE_uint32")
+
+#endif // GLOG_LOGGING_H
diff --git a/third_party/google-glog/src/glog/platform.h b/third_party/google-glog/src/glog/platform.h
new file mode 100644
index 0000000..7893c45
--- /dev/null
+++ b/third_party/google-glog/src/glog/platform.h
@@ -0,0 +1,60 @@
+// Copyright (c) 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: Shinichiro Hamaji
+//
+// Detect supported platforms.
+
+#ifndef GLOG_PLATFORM_H
+#define GLOG_PLATFORM_H
+
+#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
+#define GLOG_OS_WINDOWS
+#elif defined(__CYGWIN__) || defined(__CYGWIN32__)
+#define GLOG_OS_CYGWIN
+#elif defined(linux) || defined(__linux) || defined(__linux__)
+#ifndef GLOG_OS_LINUX
+#define GLOG_OS_LINUX
+#endif
+#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
+#define GLOG_OS_MACOSX
+#elif defined(__FreeBSD__)
+#define GLOG_OS_FREEBSD
+#elif defined(__NetBSD__)
+#define GLOG_OS_NETBSD
+#elif defined(__OpenBSD__)
+#define GLOG_OS_OPENBSD
+#elif defined(__EMSCRIPTEN__)
+#define GLOG_OS_EMSCRIPTEN
+#else
+// TODO(hamaji): Add other platforms.
+#error Platform not supported by glog. Please consider to contribute platform information by submitting a pull request on Github.
+#endif
+
+#endif // GLOG_PLATFORM_H
diff --git a/third_party/google-glog/src/glog/raw_logging.h.in b/third_party/google-glog/src/glog/raw_logging.h.in
index fa17057..66fec91 100644
--- a/third_party/google-glog/src/glog/raw_logging.h.in
+++ b/third_party/google-glog/src/glog/raw_logging.h.in
@@ -33,23 +33,20 @@
 // acquire any locks, and can therefore be used by low-level memory
 // allocation and synchronization code.
 
-#ifndef BASE_RAW_LOGGING_H_
-#define BASE_RAW_LOGGING_H_
+#ifndef GLOG_RAW_LOGGING_H
+#define GLOG_RAW_LOGGING_H
 
-#include <time.h>
+#include <ctime>
 
 @ac_google_start_namespace@
 
-#include "glog/log_severity.h"
-#include "glog/vlog_is_on.h"
+#include <glog/log_severity.h>
+#include <glog/logging.h>
+#include <glog/vlog_is_on.h>
 
-// Annoying stuff for windows -- makes sure clients can import these functions
-#ifndef GOOGLE_GLOG_DLL_DECL
-# if defined(_WIN32) && !defined(__CYGWIN__)
-#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)
-# else
-#   define GOOGLE_GLOG_DLL_DECL
-# endif
+#if defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvariadic-macros"
 #endif
 
 // This is similar to LOG(severity) << format... and VLOG(level) << format..,
@@ -64,8 +61,8 @@
 //   RAW_LOG(ERROR, "Failed foo with %i: %s", status, error);
 //   RAW_VLOG(3, "status is %i", status);
 // These will print an almost standard log lines like this to stderr only:
-//   E0821 211317 file.cc:123] RAW: Failed foo with 22: bad_file
-//   I0821 211317 file.cc:142] RAW: status is 20
+//   E20200821 211317 file.cc:123] RAW: Failed foo with 22: bad_file
+//   I20200821 211317 file.cc:142] RAW: status is 20
 #define RAW_LOG(severity, ...) \
   do { \
     switch (@ac_google_namespace@::GLOG_ ## severity) {  \
@@ -88,7 +85,7 @@
 
 // The following STRIP_LOG testing is performed in the header file so that it's
 // possible to completely compile out the logging code and the log messages.
-#if STRIP_LOG == 0
+#if !defined(STRIP_LOG) || STRIP_LOG == 0
 #define RAW_VLOG(verboselevel, ...) \
   do { \
     if (VLOG_IS_ON(verboselevel)) { \
@@ -99,35 +96,35 @@
 #define RAW_VLOG(verboselevel, ...) RawLogStub__(0, __VA_ARGS__)
 #endif // STRIP_LOG == 0
 
-#if STRIP_LOG == 0
+#if !defined(STRIP_LOG) || STRIP_LOG == 0
 #define RAW_LOG_INFO(...) @ac_google_namespace@::RawLog__(@ac_google_namespace@::GLOG_INFO, \
                                    __FILE__, __LINE__, __VA_ARGS__)
 #else
 #define RAW_LOG_INFO(...) @ac_google_namespace@::RawLogStub__(0, __VA_ARGS__)
 #endif // STRIP_LOG == 0
 
-#if STRIP_LOG <= 1
+#if !defined(STRIP_LOG) || STRIP_LOG <= 1
 #define RAW_LOG_WARNING(...) @ac_google_namespace@::RawLog__(@ac_google_namespace@::GLOG_WARNING,   \
                                       __FILE__, __LINE__, __VA_ARGS__)
 #else
 #define RAW_LOG_WARNING(...) @ac_google_namespace@::RawLogStub__(0, __VA_ARGS__)
 #endif // STRIP_LOG <= 1
 
-#if STRIP_LOG <= 2
+#if !defined(STRIP_LOG) || STRIP_LOG <= 2
 #define RAW_LOG_ERROR(...) @ac_google_namespace@::RawLog__(@ac_google_namespace@::GLOG_ERROR,       \
                                     __FILE__, __LINE__, __VA_ARGS__)
 #else
 #define RAW_LOG_ERROR(...) @ac_google_namespace@::RawLogStub__(0, __VA_ARGS__)
 #endif // STRIP_LOG <= 2
 
-#if STRIP_LOG <= 3
+#if !defined(STRIP_LOG) || STRIP_LOG <= 3
 #define RAW_LOG_FATAL(...) @ac_google_namespace@::RawLog__(@ac_google_namespace@::GLOG_FATAL,       \
                                     __FILE__, __LINE__, __VA_ARGS__)
 #else
 #define RAW_LOG_FATAL(...) \
   do { \
     @ac_google_namespace@::RawLogStub__(0, __VA_ARGS__);        \
-    exit(1); \
+    exit(EXIT_FAILURE); \
   } while (0)
 #endif // STRIP_LOG <= 3
 
@@ -160,6 +157,10 @@
 
 #endif  // NDEBUG
 
+#if defined(__GNUC__)
+#pragma GCC diagnostic pop
+#endif
+
 // Stub log function used to work around for unused variable warnings when
 // building with STRIP_LOG > 0.
 static inline void RawLogStub__(int /* ignored */, ...) {
@@ -169,17 +170,10 @@
 // Logs format... at "severity" level, reporting it
 // as called from file:line.
 // This does not allocate memory or acquire locks.
-GOOGLE_GLOG_DLL_DECL void RawLog__(LogSeverity severity,
-                                   const char* file,
-                                   int line,
-                                   const char* format, ...)
-   @ac_cv___attribute___printf_4_5@;
-
-// Hack to propagate time information into this module so that
-// this module does not have to directly call localtime_r(),
-// which could allocate memory.
-GOOGLE_GLOG_DLL_DECL void RawLog__SetLastTime(const struct tm& t, int usecs);
+GLOG_EXPORT void RawLog__(LogSeverity severity, const char* file, int line,
+                          const char* format, ...)
+    @ac_cv___attribute___printf_4_5@;
 
 @ac_google_end_namespace@
 
-#endif  // BASE_RAW_LOGGING_H_
+#endif  // GLOG_RAW_LOGGING_H
diff --git a/third_party/google-glog/src/glog/stl_logging.h.in b/third_party/google-glog/src/glog/stl_logging.h.in
index 600945d..bdfdc8b 100644
--- a/third_party/google-glog/src/glog/stl_logging.h.in
+++ b/third_party/google-glog/src/glog/stl_logging.h.in
@@ -59,7 +59,7 @@
 #include <utility>
 #include <vector>
 
-#ifdef GLOG_STL_LOGGING_FOR_UNORDERED
+#if defined(GLOG_STL_LOGGING_FOR_UNORDERED) && __cplusplus >= 201103L
 # include <unordered_map>
 # include <unordered_set>
 #endif
@@ -130,7 +130,7 @@
 
 OUTPUT_FOUR_ARG_CONTAINER(std::map)
 OUTPUT_FOUR_ARG_CONTAINER(std::multimap)
-#ifdef GLOG_STL_LOGGING_FOR_UNORDERED
+#if defined(GLOG_STL_LOGGING_FOR_UNORDERED) && __cplusplus >= 201103L
 OUTPUT_FOUR_ARG_CONTAINER(std::unordered_set)
 OUTPUT_FOUR_ARG_CONTAINER(std::unordered_multiset)
 #endif
@@ -153,7 +153,7 @@
   return out; \
 }
 
-#ifdef GLOG_STL_LOGGING_FOR_UNORDERED
+#if defined(GLOG_STL_LOGGING_FOR_UNORDERED) && __cplusplus >= 201103L
 OUTPUT_FIVE_ARG_CONTAINER(std::unordered_map)
 OUTPUT_FIVE_ARG_CONTAINER(std::unordered_multimap)
 #endif
diff --git a/third_party/google-glog/src/glog/vlog_is_on.h.in b/third_party/google-glog/src/glog/vlog_is_on.h.in
index 3f4c4a3..7526fc3 100644
--- a/third_party/google-glog/src/glog/vlog_is_on.h.in
+++ b/third_party/google-glog/src/glog/vlog_is_on.h.in
@@ -41,7 +41,7 @@
 //     // that can't be accomplished e.g. via just VLOG(2) << ...;
 //   }
 //
-// The truth value that VLOG_IS_ON(level) returns is determined by 
+// The truth value that VLOG_IS_ON(level) returns is determined by
 // the three verbosity level flags:
 //   --v=<n>  Gives the default maximal active V-logging level;
 //            0 is the default.
@@ -61,16 +61,7 @@
 #ifndef BASE_VLOG_IS_ON_H_
 #define BASE_VLOG_IS_ON_H_
 
-#include "glog/log_severity.h"
-
-// Annoying stuff for windows -- makes sure clients can import these functions
-#ifndef GOOGLE_GLOG_DLL_DECL
-# if defined(_WIN32) && !defined(__CYGWIN__)
-#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)
-# else
-#   define GOOGLE_GLOG_DLL_DECL
-# endif
-#endif
+#include <glog/log_severity.h>
 
 #if defined(__GNUC__)
 // We emit an anonymous static int* variable at every VLOG_IS_ON(n) site.
@@ -81,12 +72,11 @@
 // parsing of --vmodule flag and/or SetVLOGLevel calls.
 #define VLOG_IS_ON(verboselevel)                                \
   __extension__  \
-  ({ static @ac_google_namespace@::int32* vlocal__ = &@ac_google_namespace@::kLogSiteUninitialized;           \
+  ({ static @ac_google_namespace@::SiteFlag vlocal__ = {NULL, NULL, 0, NULL};       \
      @ac_google_namespace@::int32 verbose_level__ = (verboselevel);                    \
-     (*vlocal__ >= verbose_level__) &&                          \
-     ((vlocal__ != &@ac_google_namespace@::kLogSiteUninitialized) ||                   \
-      (@ac_google_namespace@::InitVLOG3__(&vlocal__, &FLAGS_v,                         \
-                   __FILE__, verbose_level__))); })
+     (vlocal__.level == NULL ? @ac_google_namespace@::InitVLOG3__(&vlocal__, &FLAGS_v, \
+                        __FILE__, verbose_level__) : *vlocal__.level >= verbose_level__); \
+  })
 #else
 // GNU extensions not available, so we do not support --vmodule.
 // Dynamic value of FLAGS_v always controls the logging level.
@@ -101,16 +91,16 @@
 //	 one needs to supply the exact --vmodule pattern that applied to them.
 //       (If no --vmodule pattern applied to them
 //       the value of FLAGS_v will continue to control them.)
-extern GOOGLE_GLOG_DLL_DECL int SetVLOGLevel(const char* module_pattern,
-                                             int log_level);
+extern GLOG_EXPORT int SetVLOGLevel(const char* module_pattern, int log_level);
 
 // Various declarations needed for VLOG_IS_ON above: =========================
 
-// Special value used to indicate that a VLOG_IS_ON site has not been
-// initialized.  We make this a large value, so the common-case check
-// of "*vlocal__ >= verbose_level__" in VLOG_IS_ON definition
-// passes in such cases and InitVLOG3__ is then triggered.
-extern @ac_google_namespace@::int32 kLogSiteUninitialized;
+struct SiteFlag {
+  @ac_google_namespace@::int32* level;
+  const char* base_name;
+  size_t base_len;
+  SiteFlag* next;
+};
 
 // Helper routine which determines the logging info for a particalur VLOG site.
 //   site_flag     is the address of the site-local pointer to the controlling
@@ -120,10 +110,9 @@
 //   verbose_level is the argument to VLOG_IS_ON
 // We will return the return value for VLOG_IS_ON
 // and if possible set *site_flag appropriately.
-extern GOOGLE_GLOG_DLL_DECL bool InitVLOG3__(
-    @ac_google_namespace@::int32** site_flag,
-    @ac_google_namespace@::int32* site_default,
-    const char* fname,
+extern GLOG_EXPORT bool InitVLOG3__(
+    @ac_google_namespace@::SiteFlag* site_flag,
+    @ac_google_namespace@::int32* site_default, const char* fname,
     @ac_google_namespace@::int32 verbose_level);
 
 #endif  // BASE_VLOG_IS_ON_H_
diff --git a/third_party/google-glog/src/googletest.h b/third_party/google-glog/src/googletest.h
index 49ddbc0..5761361 100644
--- a/third_party/google-glog/src/googletest.h
+++ b/third_party/google-glog/src/googletest.h
@@ -37,18 +37,16 @@
 
 #include "utilities.h"
 
-#include <ctype.h>
-#include <setjmp.h>
-#include <time.h>
-
+#include <cctype>
+#include <csetjmp>
+#include <cstdio>
+#include <cstdlib>
+#include <ctime>
 #include <map>
 #include <sstream>
 #include <string>
 #include <vector>
 
-#include <stdio.h>
-#include <stdlib.h>
-
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -58,30 +56,39 @@
 
 #include "base/commandlineflags.h"
 
+#if __cplusplus < 201103L && !defined(_MSC_VER)
+#define GOOGLE_GLOG_THROW_BAD_ALLOC throw (std::bad_alloc)
+#else
+#define GOOGLE_GLOG_THROW_BAD_ALLOC
+#endif
+
 using std::map;
 using std::string;
 using std::vector;
 
 _START_GOOGLE_NAMESPACE_
 
-extern GOOGLE_GLOG_DLL_DECL void (*g_logging_fail_func)();
+extern GLOG_EXPORT void (*g_logging_fail_func)();
 
 _END_GOOGLE_NAMESPACE_
 
-#undef GOOGLE_GLOG_DLL_DECL
-#define GOOGLE_GLOG_DLL_DECL
+#undef GLOG_EXPORT
+#define GLOG_EXPORT
 
 static inline string GetTempDir() {
-#ifndef OS_WINDOWS
-  return "/tmp";
-#else
-  char tmp[MAX_PATH];
-  GetTempPathA(MAX_PATH, tmp);
-  return tmp;
-#endif
+  vector<string> temp_directories_list;
+  google::GetExistingTempDirectories(&temp_directories_list);
+
+  if (temp_directories_list.empty()) {
+    fprintf(stderr, "No temporary directory found\n");
+    exit(EXIT_FAILURE);
+  }
+
+  // Use first directory from list of existing temporary directories.
+  return temp_directories_list.front();
 }
 
-#if defined(OS_WINDOWS) && defined(_MSC_VER) && !defined(TEST_SRC_DIR)
+#if defined(GLOG_OS_WINDOWS) && defined(_MSC_VER) && !defined(TEST_SRC_DIR)
 // The test will run in glog/vsproject/<project name>
 // (e.g., glog/vsproject/logging_unittest).
 static const char TEST_SRC_DIR[] = "../..";
@@ -118,11 +125,20 @@
 
 // The following is some bare-bones testing infrastructure
 
+#define EXPECT_NEAR(val1, val2, abs_error)                                     \
+  do {                                                                         \
+    if (abs(val1 - val2) > abs_error) {                                        \
+      fprintf(stderr, "Check failed: %s within %s of %s\n", #val1, #abs_error, \
+              #val2);                                                          \
+      exit(EXIT_FAILURE);                                                      \
+    }                                                                          \
+  } while (0)
+
 #define EXPECT_TRUE(cond)                               \
   do {                                                  \
     if (!(cond)) {                                      \
       fprintf(stderr, "Check failed: %s\n", #cond);     \
-      exit(1);                                          \
+      exit(EXIT_FAILURE);                               \
     }                                                   \
   } while (0)
 
@@ -132,7 +148,7 @@
   do {                                                                  \
     if (!((val1) op (val2))) {                                          \
       fprintf(stderr, "Check failed: %s %s %s\n", #val1, #op, #val2);   \
-      exit(1);                                                          \
+      exit(EXIT_FAILURE);                                               \
     }                                                                   \
   } while (0)
 
@@ -145,7 +161,7 @@
   do {                                                          \
     if (!isnan(arg)) {                                          \
       fprintf(stderr, "Check failed: isnan(%s)\n", #arg);       \
-      exit(1);                                                  \
+      exit(EXIT_FAILURE);                                       \
     }                                                           \
   } while (0)
 
@@ -153,7 +169,7 @@
   do {                                                          \
     if (!isinf(arg)) {                                          \
       fprintf(stderr, "Check failed: isinf(%s)\n", #arg);       \
-      exit(1);                                                  \
+      exit(EXIT_FAILURE);                                       \
     }                                                           \
   } while (0)
 
@@ -161,7 +177,7 @@
   do {                                                                  \
     if (((val1) < (val2) - 0.001 || (val1) > (val2) + 0.001)) {         \
       fprintf(stderr, "Check failed: %s == %s\n", #val1, #val2);        \
-      exit(1);                                                          \
+      exit(EXIT_FAILURE);                                               \
     }                                                                   \
   } while (0)
 
@@ -169,7 +185,7 @@
   do {                                                                  \
     if (strcmp((val1), (val2)) != 0) {                                  \
       fprintf(stderr, "Check failed: streq(%s, %s)\n", #val1, #val2);   \
-      exit(1);                                                          \
+      exit(EXIT_FAILURE);                                               \
     }                                                                   \
   } while (0)
 
@@ -190,7 +206,8 @@
   for (it = g_testlist.begin(); it != g_testlist.end(); ++it) {
     (*it)();
   }
-  fprintf(stderr, "Passed %d tests\n\nPASS\n", (int)g_testlist.size());
+  fprintf(stderr, "Passed %d tests\n\nPASS\n",
+          static_cast<int>(g_testlist.size()));
   return 0;
 }
 
@@ -207,7 +224,7 @@
   longjmp(g_jmp_buf, 1);
 }
 
-#ifdef OS_WINDOWS
+#ifdef GLOG_OS_WINDOWS
 // TODO(hamaji): Death test somehow doesn't work in Windows.
 #define ASSERT_DEATH(fn, msg)
 #else
@@ -222,7 +239,7 @@
     g_logging_fail_func = original_logging_fail_func;                   \
     if (!g_called_abort) {                                              \
       fprintf(stderr, "Function didn't die (%s): %s\n", msg, #fn);      \
-      exit(1);                                                          \
+      exit(EXIT_FAILURE);                                               \
     }                                                                   \
   } while (0)
 #endif
@@ -258,10 +275,17 @@
        ++iter) {
     clock_t start = clock();
     iter->second(iter_cnt);
-    double elapsed_ns =
-        ((double)clock() - start) / CLOCKS_PER_SEC * 1000*1000*1000;
+    double elapsed_ns = (static_cast<double>(clock()) - start) /
+                        CLOCKS_PER_SEC * 1000 * 1000 * 1000;
+#if defined(__GNUC__) && !defined(__clang__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wformat="
+#endif
     printf("%s\t%8.2lf\t%10d\n",
            iter->first.c_str(), elapsed_ns / iter_cnt, iter_cnt);
+#if defined(__GNUC__) && !defined(__clang__)
+#pragma GCC diagnostic pop
+#endif
   }
   puts("");
 }
@@ -329,6 +353,9 @@
   CHECK(s_captured_streams[fd] == NULL);
   s_captured_streams[fd] = new CapturedStream(fd, filename);
 }
+static inline void CaptureTestStdout() {
+  CaptureTestOutput(STDOUT_FILENO, FLAGS_test_tmpdir + "/captured.out");
+}
 static inline void CaptureTestStderr() {
   CaptureTestOutput(STDERR_FILENO, FLAGS_test_tmpdir + "/captured.err");
 }
@@ -385,12 +412,16 @@
   return GetCapturedTestOutput(STDERR_FILENO);
 }
 
-// Check if the string is [IWEF](\d{4}|DATE)
+static const std::size_t kLoggingPrefixLength = 9;
+
+// Check if the string is [IWEF](\d{8}|YEARDATE)
 static inline bool IsLoggingPrefix(const string& s) {
-  if (s.size() != 5) return false;
+  if (s.size() != kLoggingPrefixLength) {
+    return false;
+  }
   if (!strchr("IWEF", s[0])) return false;
-  for (int i = 1; i <= 4; ++i) {
-    if (!isdigit(s[i]) && s[i] != "DATE"[i-1]) return false;
+  for (size_t i = 1; i <= 8; ++i) {
+    if (!isdigit(s[i]) && s[i] != "YEARDATE"[i-1]) return false;
   }
   return true;
 }
@@ -398,20 +429,25 @@
 // Convert log output into normalized form.
 //
 // Example:
-//     I0102 030405 logging_unittest.cc:345] RAW: vlog -1
-//  => IDATE TIME__ logging_unittest.cc:LINE] RAW: vlog -1
+//     I20200102 030405 logging_unittest.cc:345] RAW: vlog -1
+//  => IYEARDATE TIME__ logging_unittest.cc:LINE] RAW: vlog -1
 static inline string MungeLine(const string& line) {
-  std::istringstream iss(line);
   string before, logcode_date, time, thread_lineinfo;
-  iss >> logcode_date;
-  while (!IsLoggingPrefix(logcode_date)) {
-    before += " " + logcode_date;
-    if (!(iss >> logcode_date)) {
-      // We cannot find the header of log output.
-      return before;
+  std::size_t begin_of_logging_prefix = 0;
+  for (; begin_of_logging_prefix + kLoggingPrefixLength < line.size();
+       ++begin_of_logging_prefix) {
+    if (IsLoggingPrefix(
+            line.substr(begin_of_logging_prefix, kLoggingPrefixLength))) {
+      break;
     }
   }
-  if (!before.empty()) before += " ";
+  if (begin_of_logging_prefix + kLoggingPrefixLength >= line.size()) {
+    return line;
+  } else if (begin_of_logging_prefix > 0) {
+    before = line.substr(0, begin_of_logging_prefix - 1);
+  }
+  std::istringstream iss(line.substr(begin_of_logging_prefix));
+  iss >> logcode_date;
   iss >> time;
   iss >> thread_lineinfo;
   CHECK(!thread_lineinfo.empty());
@@ -428,7 +464,7 @@
   thread_lineinfo = thread_lineinfo.substr(0, index+1) + "LINE]";
   string rest;
   std::getline(iss, rest);
-  return (before + logcode_date[0] + "DATE TIME__ " + thread_lineinfo +
+  return (before + logcode_date[0] + "YEARDATE TIME__ " + thread_lineinfo +
           MungeLine(rest));
 }
 
@@ -437,7 +473,7 @@
                           const string& newsub) {
   size_t pos = str->find(oldsub);
   if (pos != string::npos) {
-    str->replace(pos, oldsub.size(), newsub.c_str());
+    str->replace(pos, oldsub.size(), newsub);
   }
 }
 
@@ -448,10 +484,11 @@
   string result;
   while (fgets(buf, 4095, fp)) {
     string line = MungeLine(buf);
-    char null_str[256];
-    char ptr_str[256];
-    sprintf(null_str, "%p", static_cast<void*>(NULL));
-    sprintf(ptr_str, "%p", reinterpret_cast<void*>(PTR_TEST_VALUE));
+    const size_t str_size = 256;
+    char null_str[str_size];
+    char ptr_str[str_size];
+    snprintf(null_str, str_size, "%p", static_cast<void*>(NULL));
+    snprintf(ptr_str, str_size, "%p", reinterpret_cast<void*>(PTR_TEST_VALUE));
 
     StringReplace(&line, "__NULLP__", null_str);
     StringReplace(&line, "__PTRTEST__", ptr_str);
@@ -473,9 +510,13 @@
   fclose(fp);
 }
 
-static inline bool MungeAndDiffTestStderr(const string& golden_filename) {
-  CapturedStream* cap = s_captured_streams[STDERR_FILENO];
-  CHECK(cap) << ": did you forget CaptureTestStderr()?";
+static inline bool MungeAndDiffTest(const string& golden_filename,
+                                    CapturedStream* cap) {
+  if (cap == s_captured_streams[STDOUT_FILENO]) {
+    CHECK(cap) << ": did you forget CaptureTestStdout()?";
+  } else {
+    CHECK(cap) << ": did you forget CaptureTestStderr()?";
+  }
 
   cap->StopCapture();
 
@@ -489,7 +530,7 @@
     WriteToFile(golden, munged_golden);
     string munged_captured = cap->filename() + ".munged";
     WriteToFile(captured, munged_captured);
-#ifdef OS_WINDOWS
+#ifdef GLOG_OS_WINDOWS
     string diffcmd("fc " + munged_golden + " " + munged_captured);
 #else
     string diffcmd("diff -u " + munged_golden + " " + munged_captured);
@@ -505,6 +546,14 @@
   return true;
 }
 
+static inline bool MungeAndDiffTestStderr(const string& golden_filename) {
+  return MungeAndDiffTest(golden_filename, s_captured_streams[STDERR_FILENO]);
+}
+
+static inline bool MungeAndDiffTestStdout(const string& golden_filename) {
+  return MungeAndDiffTest(golden_filename, s_captured_streams[STDOUT_FILENO]);
+}
+
 // Save flags used from logging_unittest.cc.
 #ifndef HAVE_LIB_GFLAGS
 struct FlagSaver {
@@ -531,12 +580,12 @@
   virtual ~Thread() {}
 
   void SetJoinable(bool) {}
-#if defined(OS_WINDOWS) && !defined(OS_CYGWIN)
+#if defined(GLOG_OS_WINDOWS) && !defined(GLOG_OS_CYGWIN)
   void Start() {
     handle_ = CreateThread(NULL,
                            0,
-                           (LPTHREAD_START_ROUTINE)&Thread::InvokeThread,
-                           (LPVOID)this,
+                           &Thread::InvokeThreadW,
+                           this,
                            0,
                            &th_);
     CHECK(handle_) << "CreateThread";
@@ -560,11 +609,15 @@
 
  private:
   static void* InvokeThread(void* self) {
-    ((Thread*)self)->Run();
+    (static_cast<Thread*>(self))->Run();
     return NULL;
   }
 
-#if defined(OS_WINDOWS) && !defined(OS_CYGWIN)
+#if defined(GLOG_OS_WINDOWS) && !defined(GLOG_OS_CYGWIN)
+  static DWORD __stdcall InvokeThreadW(LPVOID self) {
+    InvokeThread(self);
+    return 0;
+  }
   HANDLE handle_;
   DWORD th_;
 #else
@@ -572,9 +625,14 @@
 #endif
 };
 
-static inline void SleepForMilliseconds(int t) {
-#ifndef OS_WINDOWS
+static inline void SleepForMilliseconds(unsigned t) {
+#ifndef GLOG_OS_WINDOWS
+# if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309L
+  const struct timespec req = {0, t * 1000 * 1000};
+  nanosleep(&req, NULL);
+# else
   usleep(t * 1000);
+# endif
 #else
   Sleep(t);
 #endif
@@ -586,21 +644,29 @@
 
 _END_GOOGLE_NAMESPACE_
 
-void* operator new(size_t size) {
+void* operator new(size_t size) GOOGLE_GLOG_THROW_BAD_ALLOC {
   if (GOOGLE_NAMESPACE::g_new_hook) {
     GOOGLE_NAMESPACE::g_new_hook();
   }
   return malloc(size);
 }
 
-void* operator new[](size_t size) {
+void* operator new[](size_t size) GOOGLE_GLOG_THROW_BAD_ALLOC {
   return ::operator new(size);
 }
 
-void operator delete(void* p) {
+void operator delete(void* p) throw() {
   free(p);
 }
 
-void operator delete[](void* p) {
+void operator delete(void* p, size_t) throw() {
+  ::operator delete(p);
+}
+
+void operator delete[](void* p) throw() {
+  ::operator delete(p);
+}
+
+void operator delete[](void* p, size_t) throw() {
   ::operator delete(p);
 }
diff --git a/third_party/google-glog/src/logging.cc b/third_party/google-glog/src/logging.cc
index a12ea46..f7e3111 100644
--- a/third_party/google-glog/src/logging.cc
+++ b/third_party/google-glog/src/logging.cc
@@ -32,7 +32,7 @@
 #include "utilities.h"
 
 #include <algorithm>
-#include <assert.h>
+#include <cassert>
 #include <iomanip>
 #include <string>
 #ifdef HAVE_UNISTD_H
@@ -45,11 +45,12 @@
 # include <sys/utsname.h>  // For uname.
 #endif
 #include <dirent.h>
+#include <ctime>
 #include <fcntl.h>
 #include <cstdio>
 #include <iostream>
-#include <stdarg.h>
-#include <stdlib.h>
+#include <cstdarg>
+#include <cstdlib>
 #ifdef HAVE_PWD_H
 # include <pwd.h>
 #endif
@@ -57,17 +58,26 @@
 # include <syslog.h>
 #endif
 #include <vector>
-#include <errno.h>                   // for errno
+#include <cerrno>                   // for errno
 #include <sstream>
+#ifdef GLOG_OS_WINDOWS
+#include "windows/dirent.h"
+#else
+#include <dirent.h> // for automatic removal of old logs
+#endif
 #include "base/commandlineflags.h"        // to get the program name
-#include "glog/logging.h"
-#include "glog/raw_logging.h"
+#include <glog/logging.h>
+#include <glog/raw_logging.h>
 #include "base/googleinit.h"
 
 #ifdef HAVE_STACKTRACE
 # include "stacktrace.h"
 #endif
 
+#ifdef __ANDROID__
+#include <android/log.h>
+#endif
+
 using std::string;
 using std::vector;
 using std::setw;
@@ -104,13 +114,20 @@
   return memchr("tTyY1\0", valstr[0], 6) != NULL;
 }
 
+GLOG_DEFINE_bool(timestamp_in_logfile_name,
+                 BoolFromEnv("GOOGLE_TIMESTAMP_IN_LOGFILE_NAME", true),
+                 "put a timestamp at the end of the log file name");
 GLOG_DEFINE_bool(logtostderr, BoolFromEnv("GOOGLE_LOGTOSTDERR", false),
                  "log messages go to stderr instead of logfiles");
 GLOG_DEFINE_bool(alsologtostderr, BoolFromEnv("GOOGLE_ALSOLOGTOSTDERR", false),
                  "log messages go to stderr in addition to logfiles");
 GLOG_DEFINE_bool(colorlogtostderr, false,
                  "color messages logged to stderr (if supported by terminal)");
-#ifdef OS_LINUX
+GLOG_DEFINE_bool(colorlogtostdout, false,
+                 "color messages logged to stdout (if supported by terminal)");
+GLOG_DEFINE_bool(logtostdout, BoolFromEnv("GOOGLE_LOGTOSTDOUT", false),
+                 "log messages go to stdout instead of logfiles");
+#ifdef GLOG_OS_LINUX
 GLOG_DEFINE_bool(drop_log_memory, true, "Drop in-memory buffers of log contents. "
                  "Logs can grow very quickly and they are rarely read before they "
                  "need to be evicted from memory. Instead, drop them from memory "
@@ -132,6 +149,8 @@
                    "in addition to logfiles");
 GLOG_DEFINE_bool(log_prefix, true,
                  "Prepend the log prefix to the start of each log line");
+GLOG_DEFINE_bool(log_year_in_prefix, true,
+                 "Include the year in the log prefix");
 GLOG_DEFINE_int32(minloglevel, 0, "Messages logged at a lower level than this don't "
                   "actually get logged anywhere");
 GLOG_DEFINE_int32(logbuflevel, 0,
@@ -140,11 +159,15 @@
                   " ...)");
 GLOG_DEFINE_int32(logbufsecs, 30,
                   "Buffer log messages for at most this many seconds");
+
+GLOG_DEFINE_int32(logcleansecs, 60 * 5, // every 5 minutes
+                  "Clean overdue logs every this many seconds");
+
 GLOG_DEFINE_int32(logemaillevel, 999,
                   "Email log messages logged at this level or higher"
                   " (0 means email all; 3 means email FATAL only;"
                   " ...)");
-GLOG_DEFINE_string(logmailer, "/bin/mail",
+GLOG_DEFINE_string(logmailer, "",
                    "Mailer used to send logging email");
 
 // Compute the default value for --log_dir
@@ -179,9 +202,9 @@
 GLOG_DEFINE_string(log_link, "", "Put additional links to the log "
                    "files in this directory");
 
-GLOG_DEFINE_int32(max_log_size, 1800,
-                  "approx. maximum log file size (in MB). A value of 0 will "
-                  "be silently overridden to 1.");
+GLOG_DEFINE_uint32(max_log_size, 1800,
+                   "approx. maximum log file size (in MB). A value of 0 will "
+                   "be silently overridden to 1.");
 
 GLOG_DEFINE_bool(stop_logging_if_full_disk, false,
                  "Stop attempting to log to disk if the disk is full.");
@@ -189,11 +212,14 @@
 GLOG_DEFINE_string(log_backtrace_at, "",
                    "Emit a backtrace when logging at file:linenum.");
 
+GLOG_DEFINE_bool(log_utc_time, false,
+    "Use UTC time for logging.");
+
 // TODO(hamaji): consider windows
 #define PATH_SEPARATOR '/'
 
 #ifndef HAVE_PREAD
-#if defined(OS_WINDOWS)
+#if defined(GLOG_OS_WINDOWS)
 #include <basetsd.h>
 #define ssize_t SSIZE_T
 #endif
@@ -231,12 +257,12 @@
 static void GetHostName(string* hostname) {
 #if defined(HAVE_SYS_UTSNAME_H)
   struct utsname buf;
-  if (0 != uname(&buf)) {
+  if (uname(&buf) < 0) {
     // ensure null termination on failure
     *buf.nodename = '\0';
   }
   *hostname = buf.nodename;
-#elif defined(OS_WINDOWS)
+#elif defined(GLOG_OS_WINDOWS)
   char buf[MAX_COMPUTERNAME_LENGTH + 1];
   DWORD len = MAX_COMPUTERNAME_LENGTH + 1;
   if (GetComputerNameA(buf, &len)) {
@@ -253,7 +279,7 @@
 // Returns true iff terminal supports using colors in output.
 static bool TerminalSupportsColor() {
   bool term_supports_color = false;
-#ifdef OS_WINDOWS
+#ifdef GLOG_OS_WINDOWS
   // on Windows TERM variable is usually not set, but the console does
   // support colors.
   term_supports_color = true;
@@ -307,7 +333,7 @@
   return color;
 }
 
-#ifdef OS_WINDOWS
+#ifdef GLOG_OS_WINDOWS
 
 // Returns the character attribute for the given color.
 static WORD GetColorAttribute(GLogColor color) {
@@ -332,11 +358,13 @@
   return NULL; // stop warning about return type.
 }
 
-#endif  // OS_WINDOWS
+#endif  // GLOG_OS_WINDOWS
 
 // Safely get max_log_size, overriding to 1 if it somehow gets defined as 0
-static int32 MaxLogSize() {
-  return (FLAGS_max_log_size > 0 ? FLAGS_max_log_size : 1);
+static uint32 MaxLogSize() {
+  return (FLAGS_max_log_size > 0 && FLAGS_max_log_size < 4096
+              ? FLAGS_max_log_size
+              : 1);
 }
 
 // An arbitrary limit on the length of a single log message.  This
@@ -358,8 +386,6 @@
     std::vector<std::string>* outvec_; // NULL or vector to push message onto
     std::string* message_;             // NULL or string to write message into
   };
-  time_t timestamp_;            // Time of creation of LogMessage
-  struct ::tm tm_time_;         // Time of creation of LogMessage
   size_t num_prefix_chars_;     // # of chars of prefix in this message
   size_t num_chars_to_log_;     // # of chars of msg to send to log
   size_t num_chars_to_syslog_;  // # of chars of msg to send to syslog
@@ -403,6 +429,15 @@
 base::Logger::~Logger() {
 }
 
+#ifdef GLOG_CUSTOM_PREFIX_SUPPORT
+namespace  {
+  // Optional user-configured callback to print custom prefixes.
+  CustomPrefixCallback custom_prefix_callback = NULL;
+  // User-provided data to pass to the callback:
+  void* custom_prefix_callback_data = NULL;
+}
+#endif
+
 namespace {
 
 // Encapsulates all file-system related state
@@ -414,7 +449,7 @@
   virtual void Write(bool force_flush, // Should we force a flush here?
                      time_t timestamp,  // Timestamp for this entry
                      const char* message,
-                     int message_len);
+                     size_t message_len);
 
   // Configuration options
   void SetBasename(const char* basename);
@@ -451,13 +486,50 @@
   uint32 file_length_;
   unsigned int rollover_attempt_;
   int64 next_flush_time_;         // cycle count at which to flush log
+  WallTime start_time_;
 
   // Actually create a logfile using the value of base_filename_ and the
-  // supplied argument time_pid_string
+  // optional argument time_pid_string
   // REQUIRES: lock_ is held
   bool CreateLogfile(const string& time_pid_string);
 };
 
+// Encapsulate all log cleaner related states
+class LogCleaner {
+ public:
+  LogCleaner();
+
+  // Setting overdue_days to 0 days will delete all logs.
+  void Enable(unsigned int overdue_days);
+  void Disable();
+
+  // update next_cleanup_time_
+  void UpdateCleanUpTime();
+
+  void Run(bool base_filename_selected,
+           const string& base_filename,
+           const string& filename_extension);
+
+  bool enabled() const { return enabled_; }
+
+ private:
+  vector<string> GetOverdueLogNames(string log_directory, unsigned int days,
+                                    const string& base_filename,
+                                    const string& filename_extension) const;
+
+  bool IsLogFromCurrentProject(const string& filepath,
+                               const string& base_filename,
+                               const string& filename_extension) const;
+
+  bool IsLogLastModifiedOver(const string& filepath, unsigned int days) const;
+
+  bool enabled_;
+  unsigned int overdue_days_;
+  int64 next_cleanup_time_;         // cycle count at which to clean overdue log
+};
+
+LogCleaner log_cleaner;
+
 }  // namespace
 
 class LogDestination {
@@ -496,12 +568,12 @@
 
  private:
   LogDestination(LogSeverity severity, const char* base_filename);
-  ~LogDestination() { }
+  ~LogDestination();
 
   // Take a log message of a particular severity and log it to stderr
   // iff it's of a high enough severity to deserve it.
   static void MaybeLogToStderr(LogSeverity severity, const char* message,
-			       size_t len);
+			       size_t message_len, size_t prefix_len);
 
   // Take a log message of a particular severity and log it to email
   // iff it's of a high enough severity to deserve it.
@@ -520,12 +592,9 @@
                                const char* message, size_t len);
 
   // Send logging info to all registered sinks.
-  static void LogToSinks(LogSeverity severity,
-                         const char *full_filename,
-                         const char *base_filename,
-                         int line,
-                         const struct ::tm* tm_time,
-                         const char* message,
+  static void LogToSinks(LogSeverity severity, const char* full_filename,
+                         const char* base_filename, int line,
+                         const LogMessageTime& logmsgtime, const char* message,
                          size_t message_len);
 
   // Wait for all registered sinks via WaitTillSent
@@ -582,6 +651,13 @@
     logger_(&fileobject_) {
 }
 
+LogDestination::~LogDestination() {
+  if (logger_ && logger_ != &fileobject_) {
+    // Delete user-specified logger set via SetLogger().
+    delete logger_;
+  }
+}
+
 inline void LogDestination::FlushLogFilesUnsafe(int min_severity) {
   // assume we have the log_mutex or we simply don't care
   // about it
@@ -638,13 +714,7 @@
   MutexLock l(&sink_mutex_);
   // This doesn't keep the sinks in order, but who cares?
   if (sinks_) {
-    for (int i = sinks_->size() - 1; i >= 0; i--) {
-      if ((*sinks_)[i] == destination) {
-        (*sinks_)[i] = (*sinks_)[sinks_->size() - 1];
-        sinks_->pop_back();
-        break;
-      }
-    }
+    sinks_->erase(std::remove(sinks_->begin(), sinks_->end(), destination), sinks_->end());
   }
 }
 
@@ -684,41 +754,61 @@
   LogDestination::addresses_ = addresses;
 }
 
-static void ColoredWriteToStderr(LogSeverity severity,
-                                 const char* message, size_t len) {
-  const GLogColor color =
-      (LogDestination::terminal_supports_color() && FLAGS_colorlogtostderr) ?
-      SeverityToColor(severity) : COLOR_DEFAULT;
+static void ColoredWriteToStderrOrStdout(FILE* output, LogSeverity severity,
+                                         const char* message, size_t len) {
+  bool is_stdout = (output == stdout);
+  const GLogColor color = (LogDestination::terminal_supports_color() &&
+                           ((!is_stdout && FLAGS_colorlogtostderr) ||
+                            (is_stdout && FLAGS_colorlogtostdout)))
+                              ? SeverityToColor(severity)
+                              : COLOR_DEFAULT;
 
   // Avoid using cerr from this module since we may get called during
   // exit code, and cerr may be partially or fully destroyed by then.
   if (COLOR_DEFAULT == color) {
-    fwrite(message, len, 1, stderr);
+    fwrite(message, len, 1, output);
     return;
   }
-#ifdef OS_WINDOWS
-  const HANDLE stderr_handle = GetStdHandle(STD_ERROR_HANDLE);
+#ifdef GLOG_OS_WINDOWS
+  const HANDLE output_handle =
+      GetStdHandle(is_stdout ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE);
 
   // Gets the current text color.
   CONSOLE_SCREEN_BUFFER_INFO buffer_info;
-  GetConsoleScreenBufferInfo(stderr_handle, &buffer_info);
+  GetConsoleScreenBufferInfo(output_handle, &buffer_info);
   const WORD old_color_attrs = buffer_info.wAttributes;
 
   // We need to flush the stream buffers into the console before each
   // SetConsoleTextAttribute call lest it affect the text that is already
   // printed but has not yet reached the console.
-  fflush(stderr);
-  SetConsoleTextAttribute(stderr_handle,
+  fflush(output);
+  SetConsoleTextAttribute(output_handle,
                           GetColorAttribute(color) | FOREGROUND_INTENSITY);
-  fwrite(message, len, 1, stderr);
-  fflush(stderr);
+  fwrite(message, len, 1, output);
+  fflush(output);
   // Restores the text color.
-  SetConsoleTextAttribute(stderr_handle, old_color_attrs);
+  SetConsoleTextAttribute(output_handle, old_color_attrs);
 #else
-  fprintf(stderr, "\033[0;3%sm", GetAnsiColorCode(color));
-  fwrite(message, len, 1, stderr);
-  fprintf(stderr, "\033[m");  // Resets the terminal to default.
-#endif  // OS_WINDOWS
+  fprintf(output, "\033[0;3%sm", GetAnsiColorCode(color));
+  fwrite(message, len, 1, output);
+  fprintf(output, "\033[m");  // Resets the terminal to default.
+#endif  // GLOG_OS_WINDOWS
+}
+
+static void ColoredWriteToStdout(LogSeverity severity, const char* message,
+                                 size_t len) {
+  FILE* output = stdout;
+  // We also need to send logs to the stderr when the severity is
+  // higher or equal to the stderr threshold.
+  if (severity >= FLAGS_stderrthreshold) {
+    output = stderr;
+  }
+  ColoredWriteToStderrOrStdout(output, severity, message, len);
+}
+
+static void ColoredWriteToStderr(LogSeverity severity, const char* message,
+                                 size_t len) {
+  ColoredWriteToStderrOrStdout(stderr, severity, message, len);
 }
 
 static void WriteToStderr(const char* message, size_t len) {
@@ -728,12 +818,26 @@
 }
 
 inline void LogDestination::MaybeLogToStderr(LogSeverity severity,
-					     const char* message, size_t len) {
+					     const char* message, size_t message_len, size_t prefix_len) {
   if ((severity >= FLAGS_stderrthreshold) || FLAGS_alsologtostderr) {
-    ColoredWriteToStderr(severity, message, len);
-#ifdef OS_WINDOWS
+    ColoredWriteToStderr(severity, message, message_len);
+#ifdef GLOG_OS_WINDOWS
+    (void) prefix_len;
     // On Windows, also output to the debugger
-    ::OutputDebugStringA(string(message,len).c_str());
+    ::OutputDebugStringA(message);
+#elif defined(__ANDROID__)
+    // On Android, also output to logcat
+    const int android_log_levels[NUM_SEVERITIES] = {
+      ANDROID_LOG_INFO,
+      ANDROID_LOG_WARN,
+      ANDROID_LOG_ERROR,
+      ANDROID_LOG_FATAL,
+    };
+    __android_log_write(android_log_levels[severity],
+                        glog_internal_namespace_::ProgramInvocationShortName(),
+                        message + prefix_len);
+#else
+    (void) prefix_len;
 #endif
   }
 }
@@ -778,27 +882,28 @@
                                              time_t timestamp,
                                              const char* message,
                                              size_t len) {
-
-  if ( FLAGS_logtostderr ) {           // global flag: never log to file
+  if (FLAGS_logtostdout) {  // global flag: never log to file
+    ColoredWriteToStdout(severity, message, len);
+  } else if (FLAGS_logtostderr) {  // global flag: never log to file
     ColoredWriteToStderr(severity, message, len);
   } else {
-    for (int i = severity; i >= 0; --i)
+    for (int i = severity; i >= 0; --i) {
       LogDestination::MaybeLogToLogfile(i, timestamp, message, len);
+    }
   }
 }
 
 inline void LogDestination::LogToSinks(LogSeverity severity,
-                                       const char *full_filename,
-                                       const char *base_filename,
-                                       int line,
-                                       const struct ::tm* tm_time,
+                                       const char* full_filename,
+                                       const char* base_filename, int line,
+                                       const LogMessageTime& logmsgtime,
                                        const char* message,
                                        size_t message_len) {
   ReaderMutexLock l(&sink_mutex_);
   if (sinks_) {
-    for (int i = sinks_->size() - 1; i >= 0; i--) {
+    for (size_t i = sinks_->size(); i-- > 0; ) {
       (*sinks_)[i]->send(severity, full_filename, base_filename,
-                         line, tm_time, message, message_len);
+                         line, logmsgtime, message, message_len);
     }
   }
 }
@@ -806,7 +911,7 @@
 inline void LogDestination::WaitForSinks(LogMessage::LogMessageData* data) {
   ReaderMutexLock l(&sink_mutex_);
   if (sinks_) {
-    for (int i = sinks_->size() - 1; i >= 0; i--) {
+    for (size_t i = sinks_->size(); i-- > 0; ) {
       (*sinks_)[i]->WaitTillSent();
     }
   }
@@ -840,6 +945,35 @@
 
 namespace {
 
+std::string g_application_fingerprint;
+
+} // namespace
+
+void SetApplicationFingerprint(const std::string& fingerprint) {
+  g_application_fingerprint = fingerprint;
+}
+
+namespace {
+
+// Directory delimiter; Windows supports both forward slashes and backslashes
+#ifdef GLOG_OS_WINDOWS
+const char possible_dir_delim[] = {'\\', '/'};
+#else
+const char possible_dir_delim[] = {'/'};
+#endif
+
+string PrettyDuration(int secs) {
+  std::stringstream result;
+  int mins = secs / 60;
+  int hours = mins / 60;
+  mins = mins % 60;
+  secs = secs % 60;
+  result.fill('0');
+  result << hours << ':' << setw(2) << mins << ':' << setw(2) << secs;
+  return result.str();
+}
+
+
 LogFileObject::LogFileObject(LogSeverity severity,
                              const char* base_filename)
   : base_filename_selected_(base_filename != NULL),
@@ -852,7 +986,8 @@
     dropped_mem_length_(0),
     file_length_(0),
     rollover_attempt_(kRolloverAttemptFrequency-1),
-    next_flush_time_(0) {
+    next_flush_time_(0),
+    start_time_(WallTime_Now()) {
   assert(severity >= 0);
   assert(severity < NUM_SEVERITIES);
 }
@@ -914,23 +1049,65 @@
 }
 
 bool LogFileObject::CreateLogfile(const string& time_pid_string) {
-  string string_filename = base_filename_+filename_extension_+
-                           time_pid_string;
+  string string_filename = base_filename_;
+  if (FLAGS_timestamp_in_logfile_name) {
+    string_filename += time_pid_string;
+  }
+  string_filename += filename_extension_;
   const char* filename = string_filename.c_str();
-  int fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, FLAGS_logfile_mode);
+  //only write to files, create if non-existant.
+  int flags = O_WRONLY | O_CREAT;
+  if (FLAGS_timestamp_in_logfile_name) {
+    //demand that the file is unique for our timestamp (fail if it exists).
+    flags = flags | O_EXCL;
+  }
+  int fd = open(filename, flags, static_cast<mode_t>(FLAGS_logfile_mode));
   if (fd == -1) return false;
 #ifdef HAVE_FCNTL
   // Mark the file close-on-exec. We don't really care if this fails
   fcntl(fd, F_SETFD, FD_CLOEXEC);
+
+  // Mark the file as exclusive write access to avoid two clients logging to the
+  // same file. This applies particularly when !FLAGS_timestamp_in_logfile_name
+  // (otherwise open would fail because the O_EXCL flag on similar filename).
+  // locks are released on unlock or close() automatically, only after log is
+  // released.
+  // This will work after a fork as it is not inherited (not stored in the fd).
+  // Lock will not be lost because the file is opened with exclusive lock (write)
+  // and we will never read from it inside the process.
+  // TODO windows implementation of this (as flock is not available on mingw).
+  static struct flock w_lock;
+
+  w_lock.l_type = F_WRLCK;
+  w_lock.l_start = 0;
+  w_lock.l_whence = SEEK_SET;
+  w_lock.l_len = 0;
+
+  int wlock_ret = fcntl(fd, F_SETLK, &w_lock);
+  if (wlock_ret == -1) {
+      close(fd); //as we are failing already, do not check errors here
+      return false;
+  }
 #endif
 
+  //fdopen in append mode so if the file exists it will fseek to the end
   file_ = fdopen(fd, "a");  // Make a FILE*.
   if (file_ == NULL) {  // Man, we're screwed!
     close(fd);
-    unlink(filename);  // Erase the half-baked evidence: an unusable log file
+    if (FLAGS_timestamp_in_logfile_name) {
+      unlink(filename);  // Erase the half-baked evidence: an unusable log file, only if we just created it.
+    }
     return false;
   }
-
+#ifdef GLOG_OS_WINDOWS
+  // https://github.com/golang/go/issues/27638 - make sure we seek to the end to append
+  // empirically replicated with wine over mingw build
+  if (!FLAGS_timestamp_in_logfile_name) {
+    if (fseek(file_, 0, SEEK_END) != 0) {
+      return false;
+    }
+  }
+#endif
   // We try to create a symlink called <program_name>.<severity>,
   // which is easier to use.  (Every time we create a new logfile,
   // we destroy the old symlink and create a new one, so it always
@@ -942,11 +1119,11 @@
     const string linkname =
       symlink_basename_ + '.' + LogSeverityNames[severity_];
     string linkpath;
-    if ( slash ) linkpath = string(filename, slash-filename+1);  // get dirname
+    if ( slash ) linkpath = string(filename, static_cast<size_t>(slash-filename+1));  // get dirname
     linkpath += linkname;
     unlink(linkpath.c_str());                    // delete old one if it exists
 
-#if defined(OS_WINDOWS)
+#if defined(GLOG_OS_WINDOWS)
     // TODO(hamaji): Create lnk file on Windows?
 #elif defined(HAVE_UNISTD_H)
     // We must have unistd.h.
@@ -975,7 +1152,7 @@
 void LogFileObject::Write(bool force_flush,
                           time_t timestamp,
                           const char* message,
-                          int message_len) {
+                          size_t message_len) {
   MutexLock l(&lock_);
 
   // We don't log if the base_name_ is "" (which means "don't write")
@@ -983,12 +1160,11 @@
     return;
   }
 
-  if (static_cast<int>(file_length_ >> 20) >= MaxLogSize() ||
-      PidHasChanged()) {
+  if (file_length_ >> 20U >= MaxLogSize() || PidHasChanged()) {
     if (file_ != NULL) fclose(file_);
     file_ = NULL;
     file_length_ = bytes_since_flush_ = dropped_mem_length_ = 0;
-    rollover_attempt_ = kRolloverAttemptFrequency-1;
+    rollover_attempt_ = kRolloverAttemptFrequency - 1;
   }
 
   // If there's no destination file, make one before outputting
@@ -1000,7 +1176,11 @@
     rollover_attempt_ = 0;
 
     struct ::tm tm_time;
-    localtime_r(&timestamp, &tm_time);
+    if (FLAGS_log_utc_time) {
+      gmtime_r(&timestamp, &tm_time);
+    } else {
+      localtime_r(&timestamp, &tm_time);
+    }
 
     // The logfile's filename will have the date/time & pid in it
     ostringstream time_pid_stream;
@@ -1084,14 +1264,23 @@
                        << ' '
                        << setw(2) << tm_time.tm_hour << ':'
                        << setw(2) << tm_time.tm_min << ':'
-                       << setw(2) << tm_time.tm_sec << '\n'
+                       << setw(2) << tm_time.tm_sec << (FLAGS_log_utc_time ? " UTC\n" : "\n")
                        << "Running on machine: "
-                       << LogDestination::hostname() << '\n'
-                       << "Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu "
+                       << LogDestination::hostname() << '\n';
+
+    if(!g_application_fingerprint.empty()) {
+      file_header_stream << "Application fingerprint: " << g_application_fingerprint << '\n';
+    }
+    const char* const date_time_format = FLAGS_log_year_in_prefix
+                                             ? "yyyymmdd hh:mm:ss.uuuuuu"
+                                             : "mmdd hh:mm:ss.uuuuuu";
+    file_header_stream << "Running duration (h:mm:ss): "
+                       << PrettyDuration(static_cast<int>(WallTime_Now() - start_time_)) << '\n'
+                       << "Log line format: [IWEF]" << date_time_format << " "
                        << "threadid file:line] msg" << '\n';
     const string& file_header_string = file_header_stream.str();
 
-    const int header_len = file_header_string.size();
+    const size_t header_len = file_header_string.size();
     fwrite(file_header_string.data(), 1, header_len, file_);
     file_length_ += header_len;
     bytes_since_flush_ += header_len;
@@ -1115,8 +1304,9 @@
       bytes_since_flush_ += message_len;
     }
   } else {
-    if ( CycleClock_Now() >= next_flush_time_ )
+    if (CycleClock_Now() >= next_flush_time_) {
       stop_writing = false;  // check to see if disk has free space.
+    }
     return;  // no need to flush
   }
 
@@ -1126,26 +1316,226 @@
        (bytes_since_flush_ >= 1000000) ||
        (CycleClock_Now() >= next_flush_time_) ) {
     FlushUnlocked();
-#ifdef OS_LINUX
+#ifdef GLOG_OS_LINUX
     // Only consider files >= 3MiB
-    if (FLAGS_drop_log_memory && file_length_ >= (3 << 20)) {
+    if (FLAGS_drop_log_memory && file_length_ >= (3U << 20U)) {
       // Don't evict the most recent 1-2MiB so as not to impact a tailer
       // of the log file and to avoid page rounding issue on linux < 4.7
-      uint32 total_drop_length = (file_length_ & ~((1 << 20) - 1)) - (1 << 20);
+      uint32 total_drop_length =
+          (file_length_ & ~((1U << 20U) - 1U)) - (1U << 20U);
       uint32 this_drop_length = total_drop_length - dropped_mem_length_;
-      if (this_drop_length >= (2 << 20)) {
+      if (this_drop_length >= (2U << 20U)) {
         // Only advise when >= 2MiB to drop
-        posix_fadvise(fileno(file_), dropped_mem_length_, this_drop_length,
+# if defined(__ANDROID__) && defined(__ANDROID_API__) && (__ANDROID_API__ < 21)
+        // 'posix_fadvise' introduced in API 21:
+        // * https://android.googlesource.com/platform/bionic/+/6880f936173081297be0dc12f687d341b86a4cfa/libc/libc.map.txt#732
+# else
+        posix_fadvise(fileno(file_), static_cast<off_t>(dropped_mem_length_),
+                      static_cast<off_t>(this_drop_length),
                       POSIX_FADV_DONTNEED);
+# endif
         dropped_mem_length_ = total_drop_length;
       }
     }
 #endif
+
+    // Remove old logs
+    if (log_cleaner.enabled()) {
+      log_cleaner.Run(base_filename_selected_,
+                      base_filename_,
+                      filename_extension_);
+    }
   }
 }
 
-}  // namespace
+LogCleaner::LogCleaner() : enabled_(false), overdue_days_(7), next_cleanup_time_(0) {}
 
+void LogCleaner::Enable(unsigned int overdue_days) {
+  enabled_ = true;
+  overdue_days_ = overdue_days;
+}
+
+void LogCleaner::Disable() {
+  enabled_ = false;
+}
+
+void LogCleaner::UpdateCleanUpTime() {
+  const int64 next = (FLAGS_logcleansecs
+                      * 1000000);  // in usec
+  next_cleanup_time_ = CycleClock_Now() + UsecToCycles(next);
+}
+
+void LogCleaner::Run(bool base_filename_selected,
+                     const string& base_filename,
+                     const string& filename_extension) {
+  assert(enabled_);
+  assert(!base_filename_selected || !base_filename.empty());
+
+  // avoid scanning logs too frequently
+  if (CycleClock_Now() < next_cleanup_time_) {
+    return;
+  }
+  UpdateCleanUpTime();
+
+  vector<string> dirs;
+
+  if (!base_filename_selected) {
+    dirs = GetLoggingDirectories();
+  } else {
+    size_t pos = base_filename.find_last_of(possible_dir_delim, string::npos,
+                                            sizeof(possible_dir_delim));
+    if (pos != string::npos) {
+      string dir = base_filename.substr(0, pos + 1);
+      dirs.push_back(dir);
+    } else {
+      dirs.push_back(".");
+    }
+  }
+
+  for (size_t i = 0; i < dirs.size(); i++) {
+    vector<string> logs = GetOverdueLogNames(dirs[i],
+                                             overdue_days_,
+                                             base_filename,
+                                             filename_extension);
+    for (size_t j = 0; j < logs.size(); j++) {
+      static_cast<void>(unlink(logs[j].c_str()));
+    }
+  }
+}
+
+vector<string> LogCleaner::GetOverdueLogNames(
+    string log_directory, unsigned int days, const string& base_filename,
+    const string& filename_extension) const {
+  // The names of overdue logs.
+  vector<string> overdue_log_names;
+
+  // Try to get all files within log_directory.
+  DIR *dir;
+  struct dirent *ent;
+
+  if ((dir = opendir(log_directory.c_str()))) {
+    while ((ent = readdir(dir))) {
+      if (strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0) {
+        continue;
+      }
+
+      string filepath = ent->d_name;
+      const char* const dir_delim_end =
+          possible_dir_delim + sizeof(possible_dir_delim);
+
+      if (!log_directory.empty() &&
+          std::find(possible_dir_delim, dir_delim_end,
+                    log_directory[log_directory.size() - 1]) != dir_delim_end) {
+        filepath = log_directory + filepath;
+      }
+
+      if (IsLogFromCurrentProject(filepath, base_filename, filename_extension) &&
+          IsLogLastModifiedOver(filepath, days)) {
+        overdue_log_names.push_back(filepath);
+      }
+    }
+    closedir(dir);
+  }
+
+  return overdue_log_names;
+}
+
+bool LogCleaner::IsLogFromCurrentProject(const string& filepath,
+                                         const string& base_filename,
+                                         const string& filename_extension) const {
+  // We should remove duplicated delimiters from `base_filename`, e.g.,
+  // before: "/tmp//<base_filename>.<create_time>.<pid>"
+  // after:  "/tmp/<base_filename>.<create_time>.<pid>"
+  string cleaned_base_filename;
+
+  const char* const dir_delim_end =
+      possible_dir_delim + sizeof(possible_dir_delim);
+
+  size_t real_filepath_size = filepath.size();
+  for (size_t i = 0; i < base_filename.size(); ++i) {
+    const char& c = base_filename[i];
+
+    if (cleaned_base_filename.empty()) {
+      cleaned_base_filename += c;
+    } else if (std::find(possible_dir_delim, dir_delim_end, c) ==
+                   dir_delim_end ||
+               (!cleaned_base_filename.empty() &&
+                c != cleaned_base_filename[cleaned_base_filename.size() - 1])) {
+      cleaned_base_filename += c;
+    }
+  }
+
+  // Return early if the filename doesn't start with `cleaned_base_filename`.
+  if (filepath.find(cleaned_base_filename) != 0) {
+    return false;
+  }
+
+  // Check if in the string `filename_extension` is right next to
+  // `cleaned_base_filename` in `filepath` if the user
+  // has set a custom filename extension.
+  if (!filename_extension.empty()) {
+    if (cleaned_base_filename.size() >= real_filepath_size) {
+      return false;
+    }
+    // for origin version, `filename_extension` is middle of the `filepath`.
+    string ext = filepath.substr(cleaned_base_filename.size(), filename_extension.size());
+    if (ext == filename_extension) {
+      cleaned_base_filename += filename_extension;
+    }
+    else {
+      // for new version, `filename_extension` is right of the `filepath`.
+      if (filename_extension.size() >= real_filepath_size) {
+        return false;
+      }
+      real_filepath_size = filepath.size() - filename_extension.size();
+      if (filepath.substr(real_filepath_size) != filename_extension) {
+        return false;
+      }
+    }
+  }
+
+  // The characters after `cleaned_base_filename` should match the format:
+  // YYYYMMDD-HHMMSS.pid
+  for (size_t i = cleaned_base_filename.size(); i < real_filepath_size; i++) {
+    const char& c = filepath[i];
+
+    if (i <= cleaned_base_filename.size() + 7) { // 0 ~ 7 : YYYYMMDD
+      if (c < '0' || c > '9') { return false; }
+
+    } else if (i == cleaned_base_filename.size() + 8) { // 8: -
+      if (c != '-') { return false; }
+
+    } else if (i <= cleaned_base_filename.size() + 14) { // 9 ~ 14: HHMMSS
+      if (c < '0' || c > '9') { return false; }
+
+    } else if (i == cleaned_base_filename.size() + 15) { // 15: .
+      if (c != '.') { return false; }
+
+    } else if (i >= cleaned_base_filename.size() + 16) { // 16+: pid
+      if (c < '0' || c > '9') { return false; }
+    }
+  }
+
+  return true;
+}
+
+bool LogCleaner::IsLogLastModifiedOver(const string& filepath,
+                                       unsigned int days) const {
+  // Try to get the last modified time of this file.
+  struct stat file_stat;
+
+  if (stat(filepath.c_str(), &file_stat) == 0) {
+    const time_t seconds_in_a_day = 60 * 60 * 24;
+    time_t last_modified_time = file_stat.st_mtime;
+    time_t current_time = time(NULL);
+    return difftime(current_time, last_modified_time) > days * seconds_in_a_day;
+  }
+
+  // If failed to get file stat, don't return true!
+  return false;
+}
+
+}  // namespace
 
 // Static log data space to avoid alloc failures in a LOG(FATAL)
 //
@@ -1165,7 +1555,7 @@
 // allocations).
 static GLOG_THREAD_LOCAL_STORAGE bool thread_data_available = true;
 
-#ifdef HAVE_ALIGNED_STORAGE
+#if defined(HAVE_ALIGNED_STORAGE) && __cplusplus >= 201103L
 static GLOG_THREAD_LOCAL_STORAGE
     std::aligned_storage<sizeof(LogMessage::LogMessageData),
                          alignof(LogMessage::LogMessageData)>::type thread_msg_data;
@@ -1180,7 +1570,7 @@
 }
 
 LogMessage::LogMessage(const char* file, int line, LogSeverity severity,
-                       int ctr, void (LogMessage::*send_method)())
+                       int64 ctr, void (LogMessage::*send_method)())
     : allocated_(NULL) {
   Init(file, line, severity, send_method);
   data_->stream_.set_ctr(ctr);
@@ -1267,7 +1657,6 @@
     MaybeUnsetRealtime();
   }
 
-  stream().fill('0');
   data_->preserved_errno_ = errno;
   data_->severity_ = severity;
   data_->line_ = line;
@@ -1275,10 +1664,8 @@
   data_->sink_ = NULL;
   data_->outvec_ = NULL;
   WallTime now = WallTime_Now();
-  data_->timestamp_ = static_cast<time_t>(now);
-  localtime_r(&data_->timestamp_, &data_->tm_time_);
-  int usecs = static_cast<int>((now - data_->timestamp_) * 1000000);
-  RawLog__SetLastTime(data_->tm_time_, usecs);
+  time_t timestamp_now = static_cast<time_t>(now);
+  logmsgtime_ = LogMessageTime(timestamp_now, now);
 
   data_->num_chars_to_log_ = 0;
   data_->num_chars_to_syslog_ = 0;
@@ -1287,23 +1674,45 @@
   data_->has_been_flushed_ = false;
 
   // If specified, prepend a prefix to each line.  For example:
-  //    I1018 160715 f5d4fbb0 logging.cc:1153]
-  //    (log level, GMT month, date, time, thread_id, file basename, line)
+  //    I20201018 160715 f5d4fbb0 logging.cc:1153]
+  //    (log level, GMT year, month, date, time, thread_id, file basename, line)
   // We exclude the thread_id for the default thread.
   if (FLAGS_log_prefix && (line != kNoLogPrefix)) {
-    stream() << LogSeverityNames[severity][0]
-             << setw(2) << 1+data_->tm_time_.tm_mon
-             << setw(2) << data_->tm_time_.tm_mday
-             << ' '
-             << setw(2) << data_->tm_time_.tm_hour  << ':'
-             << setw(2) << data_->tm_time_.tm_min   << ':'
-             << setw(2) << data_->tm_time_.tm_sec   << "."
-             << setw(6) << usecs
-             << ' '
-             << setfill(' ') << setw(5)
-             << static_cast<unsigned int>(GetTID()) << setfill('0')
-             << ' '
-             << data_->basename_ << ':' << data_->line_ << "] ";
+      std::ios saved_fmt(NULL);
+      saved_fmt.copyfmt(stream());
+      stream().fill('0');
+    #ifdef GLOG_CUSTOM_PREFIX_SUPPORT
+      if (custom_prefix_callback == NULL) {
+    #endif
+          stream() << LogSeverityNames[severity][0];
+          if (FLAGS_log_year_in_prefix) {
+            stream() << setw(4) << 1900 + logmsgtime_.year();
+          }
+          stream() << setw(2) << 1 + logmsgtime_.month()
+                   << setw(2) << logmsgtime_.day()
+                   << ' '
+                   << setw(2) << logmsgtime_.hour() << ':'
+                   << setw(2) << logmsgtime_.min() << ':'
+                   << setw(2) << logmsgtime_.sec() << "."
+                   << setw(6) << logmsgtime_.usec()
+                   << ' '
+                   << setfill(' ') << setw(5)
+                   << static_cast<unsigned int>(GetTID()) << setfill('0')
+                   << ' '
+                   << data_->basename_ << ':' << data_->line_ << "] ";
+    #ifdef GLOG_CUSTOM_PREFIX_SUPPORT
+      } else {
+        custom_prefix_callback(
+                stream(),
+                LogMessageInfo(LogSeverityNames[severity],
+                               data_->basename_, data_->line_, GetTID(),
+                               logmsgtime_),
+                custom_prefix_callback_data
+                );
+        stream() << " ";
+      }
+    #endif
+      stream().copyfmt(saved_fmt);
   }
   data_->num_prefix_chars_ = data_->stream_.pcount();
 
@@ -1311,7 +1720,7 @@
     char fileline[128];
     snprintf(fileline, sizeof(fileline), "%s:%d", data_->basename_, line);
 #ifdef HAVE_STACKTRACE
-    if (!strcmp(FLAGS_log_backtrace_at.c_str(), fileline)) {
+    if (FLAGS_log_backtrace_at == fileline) {
       string stacktrace;
       DumpStackTraceToString(&stacktrace);
       stream() << " (stacktrace:\n" << stacktrace << ") ";
@@ -1320,6 +1729,10 @@
   }
 }
 
+const LogMessageTime& LogMessage::getLogMessageTime() const {
+  return logmsgtime_;
+}
+
 LogMessage::~LogMessage() {
   Flush();
 #ifdef GLOG_THREAD_LOCAL_STORAGE
@@ -1346,8 +1759,9 @@
 // Flush buffered message, called by the destructor, or any other function
 // that needs to synchronize the log.
 void LogMessage::Flush() {
-  if (data_->has_been_flushed_ || data_->severity_ < FLAGS_minloglevel)
+  if (data_->has_been_flushed_ || data_->severity_ < FLAGS_minloglevel) {
     return;
+  }
 
   data_->num_chars_to_log_ = data_->stream_.pcount();
   data_->num_chars_to_syslog_ =
@@ -1367,6 +1781,7 @@
     original_final_char = data_->message_text_[data_->num_chars_to_log_];
     data_->message_text_[data_->num_chars_to_log_++] = '\n';
   }
+  data_->message_text_[data_->num_chars_to_log_] = '\0';
 
   // Prevent any subtle race conditions by wrapping a mutex lock around
   // the actual logging action per se.
@@ -1405,7 +1820,7 @@
 
 void ReprintFatalMessage() {
   if (fatal_message[0]) {
-    const int n = strlen(fatal_message);
+    const size_t n = strlen(fatal_message);
     if (!FLAGS_logtostderr) {
       // Also write to stderr (don't color to avoid terminal checks)
       WriteToStderr(fatal_message, n);
@@ -1440,34 +1855,39 @@
   // global flag: never log to file if set.  Also -- don't log to a
   // file if we haven't parsed the command line flags to get the
   // program name.
-  if (FLAGS_logtostderr || !IsGoogleLoggingInitialized()) {
-    ColoredWriteToStderr(data_->severity_,
-                         data_->message_text_, data_->num_chars_to_log_);
+  if (FLAGS_logtostderr || FLAGS_logtostdout || !IsGoogleLoggingInitialized()) {
+    if (FLAGS_logtostdout) {
+      ColoredWriteToStdout(data_->severity_, data_->message_text_,
+                           data_->num_chars_to_log_);
+    } else {
+      ColoredWriteToStderr(data_->severity_, data_->message_text_,
+                           data_->num_chars_to_log_);
+    }
 
     // this could be protected by a flag if necessary.
     LogDestination::LogToSinks(data_->severity_,
                                data_->fullname_, data_->basename_,
-                               data_->line_, &data_->tm_time_,
+                               data_->line_, logmsgtime_,
                                data_->message_text_ + data_->num_prefix_chars_,
                                (data_->num_chars_to_log_ -
-                                data_->num_prefix_chars_ - 1));
+                                data_->num_prefix_chars_ - 1) );
   } else {
-
     // log this message to all log files of severity <= severity_
-    LogDestination::LogToAllLogfiles(data_->severity_, data_->timestamp_,
+    LogDestination::LogToAllLogfiles(data_->severity_, logmsgtime_.timestamp(),
                                      data_->message_text_,
                                      data_->num_chars_to_log_);
 
     LogDestination::MaybeLogToStderr(data_->severity_, data_->message_text_,
-                                     data_->num_chars_to_log_);
+                                     data_->num_chars_to_log_,
+                                     data_->num_prefix_chars_);
     LogDestination::MaybeLogToEmail(data_->severity_, data_->message_text_,
                                     data_->num_chars_to_log_);
     LogDestination::LogToSinks(data_->severity_,
                                data_->fullname_, data_->basename_,
-                               data_->line_, &data_->tm_time_,
+                               data_->line_, logmsgtime_,
                                data_->message_text_ + data_->num_prefix_chars_,
                                (data_->num_chars_to_log_
-                                - data_->num_prefix_chars_ - 1));
+                                - data_->num_prefix_chars_ - 1) );
     // NOTE: -1 removes trailing \n
   }
 
@@ -1482,17 +1902,18 @@
       SetCrashReason(&crash_reason);
 
       // Store shortened fatal message for other logs and GWQ status
-      const int copy = min<int>(data_->num_chars_to_log_,
+      const size_t copy = min(data_->num_chars_to_log_,
                                 sizeof(fatal_message)-1);
       memcpy(fatal_message, data_->message_text_, copy);
       fatal_message[copy] = '\0';
-      fatal_time = data_->timestamp_;
+      fatal_time = logmsgtime_.timestamp();
     }
 
-    if (!FLAGS_logtostderr) {
+    if (!FLAGS_logtostderr && !FLAGS_logtostdout) {
       for (int i = 0; i < NUM_SEVERITIES; ++i) {
-        if ( LogDestination::log_destinations_[i] )
+        if (LogDestination::log_destinations_[i]) {
           LogDestination::log_destinations_[i]->logger_->Write(true, 0, "", 0);
+        }
       }
     }
 
@@ -1508,6 +1929,12 @@
     if (write(STDERR_FILENO, message, strlen(message)) < 0) {
       // Ignore errors.
     }
+#if defined(__ANDROID__)
+    // ANDROID_LOG_FATAL as this message is of FATAL severity.
+    __android_log_write(ANDROID_LOG_FATAL,
+                        glog_internal_namespace_::ProgramInvocationShortName(),
+                        message);
+#endif
     Fail();
   }
 }
@@ -1526,28 +1953,11 @@
 #endif
 }
 
-#ifdef HAVE___ATTRIBUTE__
-# define ATTRIBUTE_NORETURN __attribute__((noreturn))
-#else
-# define ATTRIBUTE_NORETURN
-#endif
+GLOG_EXPORT logging_fail_func_t g_logging_fail_func =
+    reinterpret_cast<logging_fail_func_t>(&abort);
 
-#if defined(OS_WINDOWS)
-__declspec(noreturn)
-#endif
-static void logging_fail() ATTRIBUTE_NORETURN;
-
-static void logging_fail() {
-  abort();
-}
-
-typedef void (*logging_fail_func_t)() ATTRIBUTE_NORETURN;
-
-GOOGLE_GLOG_DLL_DECL
-logging_fail_func_t g_logging_fail_func = &logging_fail;
-
-void InstallFailureFunction(void (*fail_func)()) {
-  g_logging_fail_func = (logging_fail_func_t)fail_func;
+void InstallFailureFunction(logging_fail_func_t fail_func) {
+  g_logging_fail_func = fail_func;
 }
 
 void LogMessage::Fail() {
@@ -1560,10 +1970,10 @@
     RAW_DCHECK(data_->num_chars_to_log_ > 0 &&
                data_->message_text_[data_->num_chars_to_log_-1] == '\n', "");
     data_->sink_->send(data_->severity_, data_->fullname_, data_->basename_,
-                       data_->line_, &data_->tm_time_,
+                       data_->line_, logmsgtime_,
                        data_->message_text_ + data_->num_prefix_chars_,
                        (data_->num_chars_to_log_ -
-                        data_->num_prefix_chars_ - 1));
+                        data_->num_prefix_chars_ - 1) );
   }
 }
 
@@ -1580,7 +1990,7 @@
                data_->message_text_[data_->num_chars_to_log_-1] == '\n', "");
     // Omit prefix of message and trailing newline when recording in outvec_.
     const char *start = data_->message_text_ + data_->num_prefix_chars_;
-    int len = data_->num_chars_to_log_ - data_->num_prefix_chars_ - 1;
+    size_t len = data_->num_chars_to_log_ - data_->num_prefix_chars_ - 1;
     data_->outvec_->push_back(string(start, len));
   } else {
     SendToLog();
@@ -1593,7 +2003,7 @@
                data_->message_text_[data_->num_chars_to_log_-1] == '\n', "");
     // Omit prefix of message and trailing newline when writing to message_.
     const char *start = data_->message_text_ + data_->num_prefix_chars_;
-    int len = data_->num_chars_to_log_ - data_->num_prefix_chars_ - 1;
+    size_t len = data_->num_chars_to_log_ - data_->num_prefix_chars_ - 1;
     data_->message_->assign(start, len);
   }
   SendToLog();
@@ -1653,10 +2063,9 @@
 }
 
 ErrnoLogMessage::ErrnoLogMessage(const char* file, int line,
-                                 LogSeverity severity, int ctr,
+                                 LogSeverity severity, int64 ctr,
                                  void (LogMessage::*send_method)())
-    : LogMessage(file, line, severity, ctr, send_method) {
-}
+    : LogMessage(file, line, severity, ctr, send_method) {}
 
 ErrnoLogMessage::~ErrnoLogMessage() {
   // Don't access errno directly because it may have been altered
@@ -1684,30 +2093,57 @@
 LogSink::~LogSink() {
 }
 
+void LogSink::send(LogSeverity severity, const char* full_filename,
+                   const char* base_filename, int line,
+                   const LogMessageTime& time, const char* message,
+                   size_t message_len) {
+#if defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#elif defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4996)
+#endif  // __GNUC__
+  send(severity, full_filename, base_filename, line, &time.tm(), message,
+       message_len);
+#if defined(__GNUC__)
+#pragma GCC diagnostic pop
+#elif defined(_MSC_VER)
+#pragma warning(pop)
+#endif  // __GNUC__
+}
+
+void LogSink::send(LogSeverity severity, const char* full_filename,
+                   const char* base_filename, int line, const std::tm* t,
+                   const char* message, size_t message_len) {
+  (void)severity;
+  (void)full_filename;
+  (void)base_filename;
+  (void)line;
+  (void)t;
+  (void)message;
+  (void)message_len;
+}
+
 void LogSink::WaitTillSent() {
   // noop default
 }
 
 string LogSink::ToString(LogSeverity severity, const char* file, int line,
-                         const struct ::tm* tm_time,
-                         const char* message, size_t message_len) {
+                         const LogMessageTime& logmsgtime, const char* message,
+                         size_t message_len) {
   ostringstream stream(string(message, message_len));
   stream.fill('0');
 
-  // FIXME(jrvb): Updating this to use the correct value for usecs
-  // requires changing the signature for both this method and
-  // LogSink::send().  This change needs to be done in a separate CL
-  // so subclasses of LogSink can be updated at the same time.
-  int usecs = 0;
-
   stream << LogSeverityNames[severity][0]
-         << setw(2) << 1+tm_time->tm_mon
-         << setw(2) << tm_time->tm_mday
+         << setw(4) << 1900 + logmsgtime.year()
+         << setw(2) << 1 + logmsgtime.month()
+         << setw(2) << logmsgtime.day()
          << ' '
-         << setw(2) << tm_time->tm_hour << ':'
-         << setw(2) << tm_time->tm_min << ':'
-         << setw(2) << tm_time->tm_sec << '.'
-         << setw(6) << usecs
+         << setw(2) << logmsgtime.hour() << ':'
+         << setw(2) << logmsgtime.min() << ':'
+         << setw(2) << logmsgtime.sec() << '.'
+         << setw(6) << logmsgtime.usec()
          << ' '
          << setfill(' ') << setw(5) << GetTID() << setfill('0')
          << ' '
@@ -1769,6 +2205,7 @@
 }  // namespace internal
 }  // namespace base
 
+#ifndef GLOG_OS_EMSCRIPTEN
 // Shell-escaping as we need to shell out ot /bin/mail.
 static const char kDontNeedShellEscapeChars[] =
             "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
@@ -1803,13 +2240,14 @@
   }
   return result;
 }
-
+#endif
 
 // use_logging controls whether the logging functions LOG/VLOG are used
 // to log errors.  It should be set to false when the caller holds the
 // log_mutex.
 static bool SendEmailInternal(const char*dest, const char *subject,
                               const char*body, bool use_logging) {
+#ifndef GLOG_OS_EMSCRIPTEN
   if (dest && *dest) {
     if ( use_logging ) {
       VLOG(1) << "Trying to send TITLE:" << subject
@@ -1819,16 +2257,23 @@
               subject, body, dest);
     }
 
+    string logmailer = FLAGS_logmailer;
+    if (logmailer.empty()) {
+        logmailer = "/bin/mail";
+    }
     string cmd =
-        FLAGS_logmailer + " -s" +
+        logmailer + " -s" +
         ShellEscape(subject) + " " + ShellEscape(dest);
-    VLOG(4) << "Mailing command: " << cmd;
+    if (use_logging) {
+        VLOG(4) << "Mailing command: " << cmd;
+    }
 
     FILE* pipe = popen(cmd.c_str(), "w");
     if (pipe != NULL) {
       // Add the body if we have one
-      if (body)
+      if (body) {
         fwrite(body, sizeof(char), strlen(body), pipe);
+      }
       bool ok = pclose(pipe) != -1;
       if ( !ok ) {
         if ( use_logging ) {
@@ -1848,6 +2293,13 @@
       }
     }
   }
+#else
+  (void)dest;
+  (void)subject;
+  (void)body;
+  (void)use_logging;
+  LOG(WARNING) << "Email support not available; not sending message";
+#endif
   return false;
 }
 
@@ -1857,7 +2309,7 @@
 
 static void GetTempDirectories(vector<string>* list) {
   list->clear();
-#ifdef OS_WINDOWS
+#ifdef GLOG_OS_WINDOWS
   // On windows we'll try to find a directory in this order:
   //   C:/Documents & Settings/whomever/TEMP (or whatever GetTempPath() is)
   //   C:/TMP/
@@ -1913,10 +2365,10 @@
 
     if ( !FLAGS_log_dir.empty() ) {
       // A dir was specified, we should use it
-      logging_directories_list->push_back(FLAGS_log_dir.c_str());
+      logging_directories_list->push_back(FLAGS_log_dir);
     } else {
       GetTempDirectories(logging_directories_list);
-#ifdef OS_WINDOWS
+#ifdef GLOG_OS_WINDOWS
       char tmp[MAX_PATH];
       if (GetWindowsDirectoryA(tmp, MAX_PATH))
         logging_directories_list->push_back(tmp);
@@ -1950,16 +2402,16 @@
   }
 }
 
-void TruncateLogFile(const char *path, int64 limit, int64 keep) {
+void TruncateLogFile(const char *path, uint64 limit, uint64 keep) {
 #ifdef HAVE_UNISTD_H
   struct stat statbuf;
   const int kCopyBlockSize = 8 << 10;
   char copybuf[kCopyBlockSize];
-  int64 read_offset, write_offset;
+  off_t read_offset, write_offset;
   // Don't follow symlinks unless they're our own fd symlinks in /proc
   int flags = O_RDWR;
   // TODO(hamaji): Support other environments.
-#ifdef OS_LINUX
+#ifdef GLOG_OS_LINUX
   const char *procfd_prefix = "/proc/self/fd/";
   if (strncmp(procfd_prefix, path, strlen(procfd_prefix))) flags |= O_NOFOLLOW;
 #endif
@@ -1991,18 +2443,18 @@
   // See if the path refers to a regular file bigger than the
   // specified limit
   if (!S_ISREG(statbuf.st_mode)) goto out_close_fd;
-  if (statbuf.st_size <= limit)  goto out_close_fd;
-  if (statbuf.st_size <= keep) goto out_close_fd;
+  if (statbuf.st_size <= static_cast<off_t>(limit))  goto out_close_fd;
+  if (statbuf.st_size <= static_cast<off_t>(keep)) goto out_close_fd;
 
   // This log file is too large - we need to truncate it
   LOG(INFO) << "Truncating " << path << " to " << keep << " bytes";
 
   // Copy the last "keep" bytes of the file to the beginning of the file
-  read_offset = statbuf.st_size - keep;
+  read_offset = statbuf.st_size - static_cast<off_t>(keep);
   write_offset = 0;
-  int bytesin, bytesout;
+  ssize_t bytesin, bytesout;
   while ((bytesin = pread(fd, copybuf, sizeof(copybuf), read_offset)) > 0) {
-    bytesout = pwrite(fd, copybuf, bytesin, write_offset);
+    bytesout = pwrite(fd, copybuf, static_cast<size_t>(bytesin), write_offset);
     if (bytesout == -1) {
       PLOG(ERROR) << "Unable to write to " << path;
       break;
@@ -2029,12 +2481,12 @@
   (void)limit;
   (void)keep;
 #endif
-}
+ }
 
 void TruncateStdoutStderr() {
 #ifdef HAVE_UNISTD_H
-  int64 limit = MaxLogSize() << 20;
-  int64 keep = 1 << 20;
+  uint64 limit = MaxLogSize() << 20U;
+  uint64 keep = 1U << 20U;
   TruncateLogFile("/proc/self/fd/1", limit, keep);
   TruncateLogFile("/proc/self/fd/2", limit, keep);
 #else
@@ -2101,7 +2553,7 @@
       return 0;
     } else {
       buf[0] = '\000';
-#if defined(OS_MACOSX) || defined(OS_FREEBSD) || defined(OS_OPENBSD)
+#if defined(GLOG_OS_MACOSX) || defined(GLOG_OS_FREEBSD) || defined(GLOG_OS_OPENBSD)
       if (reinterpret_cast<intptr_t>(rc) < sys_nerr) {
         // This means an error on MacOSX or FreeBSD.
         return -1;
@@ -2169,7 +2621,7 @@
   if (v >= 32 && v <= 126) {
     (*os) << "'" << v << "'";
   } else {
-    (*os) << "char value " << (short)v;
+    (*os) << "char value " << static_cast<short>(v);
   }
 }
 
@@ -2178,7 +2630,7 @@
   if (v >= 32 && v <= 126) {
     (*os) << "'" << v << "'";
   } else {
-    (*os) << "signed char value " << (short)v;
+    (*os) << "signed char value " << static_cast<short>(v);
   }
 }
 
@@ -2187,14 +2639,31 @@
   if (v >= 32 && v <= 126) {
     (*os) << "'" << v << "'";
   } else {
-    (*os) << "unsigned char value " << (unsigned short)v;
+    (*os) << "unsigned char value " << static_cast<unsigned short>(v);
   }
 }
 
+#if defined(HAVE_CXX11_NULLPTR_T) && __cplusplus >= 201103L
+template <>
+void MakeCheckOpValueString(std::ostream* os, const std::nullptr_t& /*v*/) {
+  (*os) << "nullptr";
+}
+#endif // defined(HAVE_CXX11_NULLPTR_T)
+
 void InitGoogleLogging(const char* argv0) {
   glog_internal_namespace_::InitGoogleLoggingUtilities(argv0);
 }
 
+#ifdef GLOG_CUSTOM_PREFIX_SUPPORT
+void InitGoogleLogging(const char* argv0,
+                       CustomPrefixCallback prefix_callback,
+                       void* prefix_callback_data) {
+  custom_prefix_callback = prefix_callback;
+  custom_prefix_callback_data = prefix_callback_data;
+  InitGoogleLogging(argv0);
+}
+#endif
+
 void ShutdownGoogleLogging() {
   glog_internal_namespace_::ShutdownGoogleLoggingUtilities();
   LogDestination::DeleteLogDestinations();
@@ -2202,4 +2671,56 @@
   logging_directories_list = NULL;
 }
 
+void EnableLogCleaner(unsigned int overdue_days) {
+  log_cleaner.Enable(overdue_days);
+}
+
+void DisableLogCleaner() {
+  log_cleaner.Disable();
+}
+
+LogMessageTime::LogMessageTime()
+    : time_struct_(), timestamp_(0), usecs_(0), gmtoffset_(0) {}
+
+LogMessageTime::LogMessageTime(std::tm t) {
+  std::time_t timestamp = std::mktime(&t);
+  init(t, timestamp, 0);
+}
+
+LogMessageTime::LogMessageTime(std::time_t timestamp, WallTime now) {
+  std::tm t;
+  if (FLAGS_log_utc_time)
+    gmtime_r(&timestamp, &t);
+  else
+    localtime_r(&timestamp, &t);
+  init(t, timestamp, now);
+}
+
+void LogMessageTime::init(const std::tm& t, std::time_t timestamp,
+                          WallTime now) {
+  time_struct_ = t;
+  timestamp_ = timestamp;
+  usecs_ = static_cast<int32>((now - timestamp) * 1000000);
+
+  CalcGmtOffset();
+}
+
+void LogMessageTime::CalcGmtOffset() {
+  std::tm gmt_struct;
+  int isDst = 0;
+  if ( FLAGS_log_utc_time ) {
+    localtime_r(&timestamp_, &gmt_struct);
+    isDst = gmt_struct.tm_isdst;
+    gmt_struct = time_struct_;
+  } else {
+    isDst = time_struct_.tm_isdst;
+    gmtime_r(&timestamp_, &gmt_struct);
+  }
+
+  time_t gmt_sec = mktime(&gmt_struct);
+  const long hour_secs = 3600;
+  // If the Daylight Saving Time(isDst) is active subtract an hour from the current timestamp.
+  gmtoffset_ = static_cast<long int>(timestamp_ - gmt_sec + (isDst ? hour_secs : 0) ) ;
+}
+
 _END_GOOGLE_NAMESPACE_
diff --git a/third_party/google-glog/src/logging_custom_prefix_unittest.cc b/third_party/google-glog/src/logging_custom_prefix_unittest.cc
new file mode 100644
index 0000000..615dce7
--- /dev/null
+++ b/third_party/google-glog/src/logging_custom_prefix_unittest.cc
@@ -0,0 +1,1384 @@
+// Copyright (c) 2002, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: Ray Sidney
+
+#include "utilities.h"
+
+#include <fcntl.h>
+#ifdef HAVE_GLOB_H
+# include <glob.h>
+#endif
+#include <sys/stat.h>
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+#ifdef HAVE_SYS_WAIT_H
+# include <sys/wait.h>
+#endif
+
+#include <cstdio>
+#include <cstdlib>
+#include <fstream>
+#include <iomanip>
+#include <iostream>
+#include <fstream>
+#include <memory>
+#include <queue>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include "base/commandlineflags.h"
+#include <glog/logging.h>
+#include <glog/raw_logging.h>
+#include "googletest.h"
+
+DECLARE_string(log_backtrace_at);  // logging.cc
+
+#ifdef HAVE_LIB_GFLAGS
+#include <gflags/gflags.h>
+using namespace GFLAGS_NAMESPACE;
+#endif
+
+#ifdef HAVE_LIB_GMOCK
+#include <gmock/gmock.h>
+#include "mock-log.h"
+// Introduce several symbols from gmock.
+using testing::_;
+using testing::AnyNumber;
+using testing::HasSubstr;
+using testing::AllOf;
+using testing::StrNe;
+using testing::StrictMock;
+using testing::InitGoogleMock;
+using GOOGLE_NAMESPACE::glog_testing::ScopedMockLog;
+#endif
+
+using namespace std;
+using namespace GOOGLE_NAMESPACE;
+
+// Some non-advertised functions that we want to test or use.
+_START_GOOGLE_NAMESPACE_
+namespace base {
+namespace internal {
+bool GetExitOnDFatal();
+void SetExitOnDFatal(bool value);
+}  // namespace internal
+}  // namespace base
+_END_GOOGLE_NAMESPACE_
+
+static void TestLogging(bool check_counts);
+static void TestRawLogging();
+static void LogWithLevels(int v, int severity, bool err, bool alsoerr);
+static void TestLoggingLevels();
+static void TestLogString();
+static void TestLogSink();
+static void TestLogToString();
+static void TestLogSinkWaitTillSent();
+static void TestCHECK();
+static void TestDCHECK();
+static void TestSTREQ();
+static void TestBasename();
+static void TestBasenameAppendWhenNoTimestamp();
+static void TestTwoProcessesWrite();
+static void TestSymlink();
+static void TestExtension();
+static void TestWrapper();
+static void TestErrno();
+static void TestTruncate();
+static void TestCustomLoggerDeletionOnShutdown();
+
+static int x = -1;
+static void BM_Check1(int n) {
+  while (n-- > 0) {
+    CHECK_GE(n, x);
+    CHECK_GE(n, x);
+    CHECK_GE(n, x);
+    CHECK_GE(n, x);
+    CHECK_GE(n, x);
+    CHECK_GE(n, x);
+    CHECK_GE(n, x);
+    CHECK_GE(n, x);
+  }
+}
+BENCHMARK(BM_Check1)
+
+static void CheckFailure(int a, int b, const char* file, int line, const char* msg);
+static void BM_Check3(int n) {
+  while (n-- > 0) {
+    if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x");
+    if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x");
+    if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x");
+    if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x");
+    if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x");
+    if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x");
+    if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x");
+    if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x");
+  }
+}
+BENCHMARK(BM_Check3)
+
+static void BM_Check2(int n) {
+  if (n == 17) {
+    x = 5;
+  }
+  while (n-- > 0) {
+    CHECK(n >= x);
+    CHECK(n >= x);
+    CHECK(n >= x);
+    CHECK(n >= x);
+    CHECK(n >= x);
+    CHECK(n >= x);
+    CHECK(n >= x);
+    CHECK(n >= x);
+  }
+}
+BENCHMARK(BM_Check2)
+
+static void CheckFailure(int, int, const char* /* file */, int /* line */,
+                         const char* /* msg */) {
+}
+
+static void BM_logspeed(int n) {
+  while (n-- > 0) {
+    LOG(INFO) << "test message";
+  }
+}
+BENCHMARK(BM_logspeed)
+
+static void BM_vlog(int n) {
+  while (n-- > 0) {
+    VLOG(1) << "test message";
+  }
+}
+BENCHMARK(BM_vlog)
+
+// Dynamically generate a prefix using the default format and write it to the stream.
+void PrefixAttacher(std::ostream &s, const LogMessageInfo &l, void* data) {
+  // Assert that `data` contains the expected contents before producing the
+  // prefix (otherwise causing the tests to fail):
+  if (data == NULL || *static_cast<string*>(data) != "good data") {
+    return;
+  }
+
+  s << l.severity[0]
+    << setw(4) << 1900 + l.time.year()
+    << setw(2) << 1 + l.time.month()
+    << setw(2) << l.time.day()
+    << ' '
+    << setw(2) << l.time.hour() << ':'
+    << setw(2) << l.time.min()  << ':'
+    << setw(2) << l.time.sec() << "."
+    << setw(6) << l.time.usec()
+    << ' '
+    << setfill(' ') << setw(5)
+    << l.thread_id << setfill('0')
+    << ' '
+    << l.filename << ':' << l.line_number << "]";
+}
+
+int main(int argc, char **argv) {
+  FLAGS_colorlogtostderr = false;
+  FLAGS_timestamp_in_logfile_name = true;
+
+  // Make sure stderr is not buffered as stderr seems to be buffered
+  // on recent windows.
+  setbuf(stderr, NULL);
+
+  // Test some basics before InitGoogleLogging:
+  CaptureTestStderr();
+  LogWithLevels(FLAGS_v, FLAGS_stderrthreshold,
+                FLAGS_logtostderr, FLAGS_alsologtostderr);
+  LogWithLevels(0, 0, 0, 0);  // simulate "before global c-tors"
+  const string early_stderr = GetCapturedTestStderr();
+
+  EXPECT_FALSE(IsGoogleLoggingInitialized());
+
+  // Setting a custom prefix generator (it will use the default format so that
+  // the golden outputs can be reused):
+  string prefix_attacher_data = "good data";
+  InitGoogleLogging(argv[0], &PrefixAttacher, static_cast<void*>(&prefix_attacher_data));
+
+  EXPECT_TRUE(IsGoogleLoggingInitialized());
+
+  RunSpecifiedBenchmarks();
+
+  FLAGS_logtostderr = true;
+
+  InitGoogleTest(&argc, argv);
+#ifdef HAVE_LIB_GMOCK
+  InitGoogleMock(&argc, argv);
+#endif
+
+#ifdef HAVE_LIB_GFLAGS
+  ParseCommandLineFlags(&argc, &argv, true);
+#endif
+
+  // so that death tests run before we use threads
+  CHECK_EQ(RUN_ALL_TESTS(), 0);
+
+  CaptureTestStderr();
+
+  // re-emit early_stderr
+  LogMessage("dummy", LogMessage::kNoLogPrefix, GLOG_INFO).stream() << early_stderr;
+
+  TestLogging(true);
+  TestRawLogging();
+  TestLoggingLevels();
+  TestLogString();
+  TestLogSink();
+  TestLogToString();
+  TestLogSinkWaitTillSent();
+  TestCHECK();
+  TestDCHECK();
+  TestSTREQ();
+
+  // TODO: The golden test portion of this test is very flakey.
+  EXPECT_TRUE(
+      MungeAndDiffTestStderr(FLAGS_test_srcdir + "/src/logging_custom_prefix_unittest.err"));
+
+  FLAGS_logtostderr = false;
+
+  TestBasename();
+  TestBasenameAppendWhenNoTimestamp();
+  TestTwoProcessesWrite();
+  TestSymlink();
+  TestExtension();
+  TestWrapper();
+  TestErrno();
+  TestTruncate();
+  TestCustomLoggerDeletionOnShutdown();
+
+  fprintf(stdout, "PASS\n");
+  return 0;
+}
+
+void TestLogging(bool check_counts) {
+  int64 base_num_infos   = LogMessage::num_messages(GLOG_INFO);
+  int64 base_num_warning = LogMessage::num_messages(GLOG_WARNING);
+  int64 base_num_errors  = LogMessage::num_messages(GLOG_ERROR);
+
+  LOG(INFO) << string("foo ") << "bar " << 10 << ' ' << 3.4;
+  for ( int i = 0; i < 10; ++i ) {
+    int old_errno = errno;
+    errno = i;
+    PLOG_EVERY_N(ERROR, 2) << "Plog every 2, iteration " << COUNTER;
+    errno = old_errno;
+
+    LOG_EVERY_N(ERROR, 3) << "Log every 3, iteration " << COUNTER << endl;
+    LOG_EVERY_N(ERROR, 4) << "Log every 4, iteration " << COUNTER << endl;
+
+    LOG_IF_EVERY_N(WARNING, true, 5) << "Log if every 5, iteration " << COUNTER;
+    LOG_IF_EVERY_N(WARNING, false, 3)
+        << "Log if every 3, iteration " << COUNTER;
+    LOG_IF_EVERY_N(INFO, true, 1) << "Log if every 1, iteration " << COUNTER;
+    LOG_IF_EVERY_N(ERROR, (i < 3), 2)
+        << "Log if less than 3 every 2, iteration " << COUNTER;
+  }
+  LOG_IF(WARNING, true) << "log_if this";
+  LOG_IF(WARNING, false) << "don't log_if this";
+
+  char s[] = "array";
+  LOG(INFO) << s;
+  const char const_s[] = "const array";
+  LOG(INFO) << const_s;
+  int j = 1000;
+  LOG(ERROR) << string("foo") << ' '<< j << ' ' << setw(10) << j << " "
+             << setw(1) << hex << j;
+  LOG(INFO) << "foo " << std::setw(10) << 1.0;
+
+  {
+    google::LogMessage outer(__FILE__, __LINE__, GLOG_ERROR);
+    outer.stream() << "outer";
+
+    LOG(ERROR) << "inner";
+  }
+
+  LogMessage("foo", LogMessage::kNoLogPrefix, GLOG_INFO).stream() << "no prefix";
+
+  if (check_counts) {
+    CHECK_EQ(base_num_infos   + 15, LogMessage::num_messages(GLOG_INFO));
+    CHECK_EQ(base_num_warning + 3,  LogMessage::num_messages(GLOG_WARNING));
+    CHECK_EQ(base_num_errors  + 17, LogMessage::num_messages(GLOG_ERROR));
+  }
+}
+
+static void NoAllocNewHook() {
+  LOG(FATAL) << "unexpected new";
+}
+
+struct NewHook {
+  NewHook() {
+    g_new_hook = &NoAllocNewHook;
+  }
+  ~NewHook() {
+    g_new_hook = NULL;
+  }
+};
+
+TEST(DeathNoAllocNewHook, logging) {
+  // tests that NewHook used below works
+  NewHook new_hook;
+  ASSERT_DEATH({
+    new int;
+  }, "unexpected new");
+}
+
+void TestRawLogging() {
+  string* foo = new string("foo ");
+  string huge_str(50000, 'a');
+
+  FlagSaver saver;
+
+  // Check that RAW loggging does not use mallocs.
+  NewHook new_hook;
+
+  RAW_LOG(INFO, "%s%s%d%c%f", foo->c_str(), "bar ", 10, ' ', 3.4);
+  char s[] = "array";
+  RAW_LOG(WARNING, "%s", s);
+  const char const_s[] = "const array";
+  RAW_LOG(INFO, "%s", const_s);
+  void* p = reinterpret_cast<void*>(PTR_TEST_VALUE);
+  RAW_LOG(INFO, "ptr %p", p);
+  p = NULL;
+  RAW_LOG(INFO, "ptr %p", p);
+  int j = 1000;
+  RAW_LOG(ERROR, "%s%d%c%010d%s%1x", foo->c_str(), j, ' ', j, " ", j);
+  RAW_VLOG(0, "foo %d", j);
+
+#if defined(NDEBUG)
+  RAW_LOG(INFO, "foo %d", j);  // so that have same stderr to compare
+#else
+  RAW_DLOG(INFO, "foo %d", j);  // test RAW_DLOG in debug mode
+#endif
+
+  // test how long messages are chopped:
+  RAW_LOG(WARNING, "Huge string: %s", huge_str.c_str());
+  RAW_VLOG(0, "Huge string: %s", huge_str.c_str());
+
+  FLAGS_v = 0;
+  RAW_LOG(INFO, "log");
+  RAW_VLOG(0, "vlog 0 on");
+  RAW_VLOG(1, "vlog 1 off");
+  RAW_VLOG(2, "vlog 2 off");
+  RAW_VLOG(3, "vlog 3 off");
+  FLAGS_v = 2;
+  RAW_LOG(INFO, "log");
+  RAW_VLOG(1, "vlog 1 on");
+  RAW_VLOG(2, "vlog 2 on");
+  RAW_VLOG(3, "vlog 3 off");
+
+#if defined(NDEBUG)
+  RAW_DCHECK(1 == 2, " RAW_DCHECK's shouldn't be compiled in normal mode");
+#endif
+
+  RAW_CHECK(1 == 1, "should be ok");
+  RAW_DCHECK(true, "should be ok");
+
+  delete foo;
+}
+
+void LogWithLevels(int v, int severity, bool err, bool alsoerr) {
+  RAW_LOG(INFO,
+          "Test: v=%d stderrthreshold=%d logtostderr=%d alsologtostderr=%d",
+          v, severity, err, alsoerr);
+
+  FlagSaver saver;
+
+  FLAGS_v = v;
+  FLAGS_stderrthreshold = severity;
+  FLAGS_logtostderr = err;
+  FLAGS_alsologtostderr = alsoerr;
+
+  RAW_VLOG(-1, "vlog -1");
+  RAW_VLOG(0, "vlog 0");
+  RAW_VLOG(1, "vlog 1");
+  RAW_LOG(INFO, "log info");
+  RAW_LOG(WARNING, "log warning");
+  RAW_LOG(ERROR, "log error");
+
+  VLOG(-1) << "vlog -1";
+  VLOG(0) << "vlog 0";
+  VLOG(1) << "vlog 1";
+  LOG(INFO) << "log info";
+  LOG(WARNING) << "log warning";
+  LOG(ERROR) << "log error";
+
+  VLOG_IF(-1, true) << "vlog_if -1";
+  VLOG_IF(-1, false) << "don't vlog_if -1";
+  VLOG_IF(0, true) << "vlog_if 0";
+  VLOG_IF(0, false) << "don't vlog_if 0";
+  VLOG_IF(1, true) << "vlog_if 1";
+  VLOG_IF(1, false) << "don't vlog_if 1";
+  LOG_IF(INFO, true) << "log_if info";
+  LOG_IF(INFO, false) << "don't log_if info";
+  LOG_IF(WARNING, true) << "log_if warning";
+  LOG_IF(WARNING, false) << "don't log_if warning";
+  LOG_IF(ERROR, true) << "log_if error";
+  LOG_IF(ERROR, false) << "don't log_if error";
+
+  int c;
+  c = 1; VLOG_IF(100, c -= 2) << "vlog_if 100 expr"; EXPECT_EQ(c, -1);
+  c = 1; VLOG_IF(0, c -= 2) << "vlog_if 0 expr"; EXPECT_EQ(c, -1);
+  c = 1; LOG_IF(INFO, c -= 2) << "log_if info expr"; EXPECT_EQ(c, -1);
+  c = 1; LOG_IF(ERROR, c -= 2) << "log_if error expr"; EXPECT_EQ(c, -1);
+  c = 2; VLOG_IF(0, c -= 2) << "don't vlog_if 0 expr"; EXPECT_EQ(c, 0);
+  c = 2; LOG_IF(ERROR, c -= 2) << "don't log_if error expr"; EXPECT_EQ(c, 0);
+
+  c = 3; LOG_IF_EVERY_N(INFO, c -= 4, 1) << "log_if info every 1 expr";
+  EXPECT_EQ(c, -1);
+  c = 3; LOG_IF_EVERY_N(ERROR, c -= 4, 1) << "log_if error every 1 expr";
+  EXPECT_EQ(c, -1);
+  c = 4; LOG_IF_EVERY_N(ERROR, c -= 4, 3) << "don't log_if info every 3 expr";
+  EXPECT_EQ(c, 0);
+  c = 4; LOG_IF_EVERY_N(ERROR, c -= 4, 3) << "don't log_if error every 3 expr";
+  EXPECT_EQ(c, 0);
+  c = 5; VLOG_IF_EVERY_N(0, c -= 4, 1) << "vlog_if 0 every 1 expr";
+  EXPECT_EQ(c, 1);
+  c = 5; VLOG_IF_EVERY_N(100, c -= 4, 3) << "vlog_if 100 every 3 expr";
+  EXPECT_EQ(c, 1);
+  c = 6; VLOG_IF_EVERY_N(0, c -= 6, 1) << "don't vlog_if 0 every 1 expr";
+  EXPECT_EQ(c, 0);
+  c = 6; VLOG_IF_EVERY_N(100, c -= 6, 3) << "don't vlog_if 100 every 1 expr";
+  EXPECT_EQ(c, 0);
+}
+
+void TestLoggingLevels() {
+  LogWithLevels(0, GLOG_INFO, false, false);
+  LogWithLevels(1, GLOG_INFO, false, false);
+  LogWithLevels(-1, GLOG_INFO, false, false);
+  LogWithLevels(0, GLOG_WARNING, false, false);
+  LogWithLevels(0, GLOG_ERROR, false, false);
+  LogWithLevels(0, GLOG_FATAL, false, false);
+  LogWithLevels(0, GLOG_FATAL, true, false);
+  LogWithLevels(0, GLOG_FATAL, false, true);
+  LogWithLevels(1, GLOG_WARNING, false, false);
+  LogWithLevels(1, GLOG_FATAL, false, true);
+}
+
+TEST(DeathRawCHECK, logging) {
+  ASSERT_DEATH(RAW_CHECK(false, "failure 1"),
+               "RAW: Check false failed: failure 1");
+  ASSERT_DEBUG_DEATH(RAW_DCHECK(1 == 2, "failure 2"),
+               "RAW: Check 1 == 2 failed: failure 2");
+}
+
+void TestLogString() {
+  vector<string> errors;
+  vector<string> *no_errors = NULL;
+
+  LOG_STRING(INFO, &errors) << "LOG_STRING: " << "collected info";
+  LOG_STRING(WARNING, &errors) << "LOG_STRING: " << "collected warning";
+  LOG_STRING(ERROR, &errors) << "LOG_STRING: " << "collected error";
+
+  LOG_STRING(INFO, no_errors) << "LOG_STRING: " << "reported info";
+  LOG_STRING(WARNING, no_errors) << "LOG_STRING: " << "reported warning";
+  LOG_STRING(ERROR, NULL) << "LOG_STRING: " << "reported error";
+
+  for (size_t i = 0; i < errors.size(); ++i) {
+    LOG(INFO) << "Captured by LOG_STRING:  " << errors[i];
+  }
+}
+
+void TestLogToString() {
+  string error;
+  string* no_error = NULL;
+
+  LOG_TO_STRING(INFO, &error) << "LOG_TO_STRING: " << "collected info";
+  LOG(INFO) << "Captured by LOG_TO_STRING:  " << error;
+  LOG_TO_STRING(WARNING, &error) << "LOG_TO_STRING: " << "collected warning";
+  LOG(INFO) << "Captured by LOG_TO_STRING:  " << error;
+  LOG_TO_STRING(ERROR, &error) << "LOG_TO_STRING: " << "collected error";
+  LOG(INFO) << "Captured by LOG_TO_STRING:  " << error;
+
+  LOG_TO_STRING(INFO, no_error) << "LOG_TO_STRING: " << "reported info";
+  LOG_TO_STRING(WARNING, no_error) << "LOG_TO_STRING: " << "reported warning";
+  LOG_TO_STRING(ERROR, NULL) << "LOG_TO_STRING: " << "reported error";
+}
+
+class TestLogSinkImpl : public LogSink {
+ public:
+  vector<string> errors;
+  virtual void send(LogSeverity severity, const char* /* full_filename */,
+                    const char* base_filename, int line,
+                    const LogMessageTime &logmsgtime,
+                    const char* message, size_t message_len) {
+    errors.push_back(
+      ToString(severity, base_filename, line, logmsgtime, message, message_len));
+  }
+};
+
+void TestLogSink() {
+  TestLogSinkImpl sink;
+  LogSink *no_sink = NULL;
+
+  LOG_TO_SINK(&sink, INFO) << "LOG_TO_SINK: " << "collected info";
+  LOG_TO_SINK(&sink, WARNING) << "LOG_TO_SINK: " << "collected warning";
+  LOG_TO_SINK(&sink, ERROR) << "LOG_TO_SINK: " << "collected error";
+
+  LOG_TO_SINK(no_sink, INFO) << "LOG_TO_SINK: " << "reported info";
+  LOG_TO_SINK(no_sink, WARNING) << "LOG_TO_SINK: " << "reported warning";
+  LOG_TO_SINK(NULL, ERROR) << "LOG_TO_SINK: " << "reported error";
+
+  LOG_TO_SINK_BUT_NOT_TO_LOGFILE(&sink, INFO)
+      << "LOG_TO_SINK_BUT_NOT_TO_LOGFILE: " << "collected info";
+  LOG_TO_SINK_BUT_NOT_TO_LOGFILE(&sink, WARNING)
+      << "LOG_TO_SINK_BUT_NOT_TO_LOGFILE: " << "collected warning";
+  LOG_TO_SINK_BUT_NOT_TO_LOGFILE(&sink, ERROR)
+      << "LOG_TO_SINK_BUT_NOT_TO_LOGFILE: " << "collected error";
+
+  LOG_TO_SINK_BUT_NOT_TO_LOGFILE(no_sink, INFO)
+      << "LOG_TO_SINK_BUT_NOT_TO_LOGFILE: " << "thrashed info";
+  LOG_TO_SINK_BUT_NOT_TO_LOGFILE(no_sink, WARNING)
+      << "LOG_TO_SINK_BUT_NOT_TO_LOGFILE: " << "thrashed warning";
+  LOG_TO_SINK_BUT_NOT_TO_LOGFILE(NULL, ERROR)
+      << "LOG_TO_SINK_BUT_NOT_TO_LOGFILE: " << "thrashed error";
+
+  LOG(INFO) << "Captured by LOG_TO_SINK:";
+  for (size_t i = 0; i < sink.errors.size(); ++i) {
+    LogMessage("foo", LogMessage::kNoLogPrefix, GLOG_INFO).stream()
+      << sink.errors[i];
+  }
+}
+
+// For testing using CHECK*() on anonymous enums.
+enum {
+  CASE_A,
+  CASE_B
+};
+
+void TestCHECK() {
+  // Tests using CHECK*() on int values.
+  CHECK(1 == 1);
+  CHECK_EQ(1, 1);
+  CHECK_NE(1, 2);
+  CHECK_GE(1, 1);
+  CHECK_GE(2, 1);
+  CHECK_LE(1, 1);
+  CHECK_LE(1, 2);
+  CHECK_GT(2, 1);
+  CHECK_LT(1, 2);
+
+  // Tests using CHECK*() on anonymous enums.
+  // Apple's GCC doesn't like this.
+#if !defined(GLOG_OS_MACOSX)
+  CHECK_EQ(CASE_A, CASE_A);
+  CHECK_NE(CASE_A, CASE_B);
+  CHECK_GE(CASE_A, CASE_A);
+  CHECK_GE(CASE_B, CASE_A);
+  CHECK_LE(CASE_A, CASE_A);
+  CHECK_LE(CASE_A, CASE_B);
+  CHECK_GT(CASE_B, CASE_A);
+  CHECK_LT(CASE_A, CASE_B);
+#endif
+}
+
+void TestDCHECK() {
+#if defined(NDEBUG)
+  DCHECK( 1 == 2 ) << " DCHECK's shouldn't be compiled in normal mode";
+#endif
+  DCHECK( 1 == 1 );
+  DCHECK_EQ(1, 1);
+  DCHECK_NE(1, 2);
+  DCHECK_GE(1, 1);
+  DCHECK_GE(2, 1);
+  DCHECK_LE(1, 1);
+  DCHECK_LE(1, 2);
+  DCHECK_GT(2, 1);
+  DCHECK_LT(1, 2);
+
+  int64* orig_ptr = new int64;
+  int64* ptr = DCHECK_NOTNULL(orig_ptr);
+  CHECK_EQ(ptr, orig_ptr);
+  delete orig_ptr;
+}
+
+void TestSTREQ() {
+  CHECK_STREQ("this", "this");
+  CHECK_STREQ(NULL, NULL);
+  CHECK_STRCASEEQ("this", "tHiS");
+  CHECK_STRCASEEQ(NULL, NULL);
+  CHECK_STRNE("this", "tHiS");
+  CHECK_STRNE("this", NULL);
+  CHECK_STRCASENE("this", "that");
+  CHECK_STRCASENE(NULL, "that");
+  CHECK_STREQ((string("a")+"b").c_str(), "ab");
+  CHECK_STREQ(string("test").c_str(),
+              (string("te") + string("st")).c_str());
+}
+
+TEST(DeathSTREQ, logging) {
+  ASSERT_DEATH(CHECK_STREQ(NULL, "this"), "");
+  ASSERT_DEATH(CHECK_STREQ("this", "siht"), "");
+  ASSERT_DEATH(CHECK_STRCASEEQ(NULL, "siht"), "");
+  ASSERT_DEATH(CHECK_STRCASEEQ("this", "siht"), "");
+  ASSERT_DEATH(CHECK_STRNE(NULL, NULL), "");
+  ASSERT_DEATH(CHECK_STRNE("this", "this"), "");
+  ASSERT_DEATH(CHECK_STREQ((string("a")+"b").c_str(), "abc"), "");
+}
+
+TEST(CheckNOTNULL, Simple) {
+  int64 t;
+  void *ptr = static_cast<void *>(&t);
+  void *ref = CHECK_NOTNULL(ptr);
+  EXPECT_EQ(ptr, ref);
+  CHECK_NOTNULL(reinterpret_cast<char *>(ptr));
+  CHECK_NOTNULL(reinterpret_cast<unsigned char *>(ptr));
+  CHECK_NOTNULL(reinterpret_cast<int *>(ptr));
+  CHECK_NOTNULL(reinterpret_cast<int64 *>(ptr));
+}
+
+TEST(DeathCheckNN, Simple) {
+  ASSERT_DEATH(CHECK_NOTNULL(static_cast<void *>(NULL)), "");
+}
+
+// Get list of file names that match pattern
+static void GetFiles(const string& pattern, vector<string>* files) {
+  files->clear();
+#if defined(HAVE_GLOB_H)
+  glob_t g;
+  const int r = glob(pattern.c_str(), 0, NULL, &g);
+  CHECK((r == 0) || (r == GLOB_NOMATCH)) << ": error matching " << pattern;
+  for (size_t i = 0; i < g.gl_pathc; i++) {
+    files->push_back(string(g.gl_pathv[i]));
+  }
+  globfree(&g);
+#elif defined(GLOG_OS_WINDOWS)
+  WIN32_FIND_DATAA data;
+  HANDLE handle = FindFirstFileA(pattern.c_str(), &data);
+  size_t index = pattern.rfind('\\');
+  if (index == string::npos) {
+    LOG(FATAL) << "No directory separator.";
+  }
+  const string dirname = pattern.substr(0, index + 1);
+  if (handle == INVALID_HANDLE_VALUE) {
+    // Finding no files is OK.
+    return;
+  }
+  do {
+    files->push_back(dirname + data.cFileName);
+  } while (FindNextFileA(handle, &data));
+  BOOL result = FindClose(handle);
+  LOG_SYSRESULT(result != 0);
+#else
+# error There is no way to do glob.
+#endif
+}
+
+// Delete files patching pattern
+static void DeleteFiles(const string& pattern) {
+  vector<string> files;
+  GetFiles(pattern, &files);
+  for (size_t i = 0; i < files.size(); i++) {
+    CHECK(unlink(files[i].c_str()) == 0) << ": " << strerror(errno);
+  }
+}
+
+//check string is in file (or is *NOT*, depending on optional checkInFileOrNot)
+static void CheckFile(const string& name, const string& expected_string, const bool checkInFileOrNot = true) {
+  vector<string> files;
+  GetFiles(name + "*", &files);
+  CHECK_EQ(files.size(), 1UL);
+
+  FILE* file = fopen(files[0].c_str(), "r");
+  CHECK(file != NULL) << ": could not open " << files[0];
+  char buf[1000];
+  while (fgets(buf, sizeof(buf), file) != NULL) {
+    char* first = strstr(buf, expected_string.c_str());
+    //if first == NULL, not found.
+    //Terser than if (checkInFileOrNot && first != NULL || !check...
+    if (checkInFileOrNot != (first == NULL)) {
+      fclose(file);
+      return;
+    }
+  }
+  fclose(file);
+  LOG(FATAL) << "Did " << (checkInFileOrNot? "not " : "") << "find " << expected_string << " in " << files[0];
+}
+
+static void TestBasename() {
+  fprintf(stderr, "==== Test setting log file basename\n");
+  const string dest = FLAGS_test_tmpdir + "/logging_test_basename";
+  DeleteFiles(dest + "*");
+
+  SetLogDestination(GLOG_INFO, dest.c_str());
+  LOG(INFO) << "message to new base";
+  FlushLogFiles(GLOG_INFO);
+
+  CheckFile(dest, "message to new base");
+
+  // Release file handle for the destination file to unlock the file in Windows.
+  LogToStderr();
+  DeleteFiles(dest + "*");
+}
+
+static void TestBasenameAppendWhenNoTimestamp() {
+  fprintf(stderr, "==== Test setting log file basename without timestamp and appending properly\n");
+  const string dest = FLAGS_test_tmpdir + "/logging_test_basename_append_when_no_timestamp";
+  DeleteFiles(dest + "*");
+
+  ofstream out(dest.c_str());
+  out << "test preexisting content" << endl;
+  out.close();
+
+  CheckFile(dest, "test preexisting content");
+
+  FLAGS_timestamp_in_logfile_name=false;
+  SetLogDestination(GLOG_INFO, dest.c_str());
+  LOG(INFO) << "message to new base, appending to preexisting file";
+  FlushLogFiles(GLOG_INFO);
+  FLAGS_timestamp_in_logfile_name=true;
+
+  //if the logging overwrites the file instead of appending it will fail.
+  CheckFile(dest, "test preexisting content");
+  CheckFile(dest, "message to new base, appending to preexisting file");
+
+  // Release file handle for the destination file to unlock the file in Windows.
+  LogToStderr();
+  DeleteFiles(dest + "*");
+}
+
+static void TestTwoProcessesWrite() {
+// test only implemented for platforms with fork & wait; the actual implementation relies on flock
+#if defined(HAVE_SYS_WAIT_H) && defined(HAVE_UNISTD_H) && defined(HAVE_FCNTL)
+  fprintf(stderr, "==== Test setting log file basename and two processes writing - second should fail\n");
+  const string dest = FLAGS_test_tmpdir + "/logging_test_basename_two_processes_writing";
+  DeleteFiles(dest + "*");
+
+  //make both processes write into the same file (easier test)
+  FLAGS_timestamp_in_logfile_name=false;
+  SetLogDestination(GLOG_INFO, dest.c_str());
+  LOG(INFO) << "message to new base, parent";
+  FlushLogFiles(GLOG_INFO);
+
+  pid_t pid = fork();
+  CHECK_ERR(pid);
+  if (pid == 0) {
+    LOG(INFO) << "message to new base, child - should only appear on STDERR not on the file";
+    ShutdownGoogleLogging(); //for children proc
+    exit(EXIT_SUCCESS);
+  } else if (pid > 0) {
+    wait(NULL);
+  }
+  FLAGS_timestamp_in_logfile_name=true;
+
+  CheckFile(dest, "message to new base, parent");
+  CheckFile(dest, "message to new base, child - should only appear on STDERR not on the file", false);
+
+  // Release
+  LogToStderr();
+  DeleteFiles(dest + "*");
+#endif
+}
+
+static void TestSymlink() {
+#ifndef GLOG_OS_WINDOWS
+  fprintf(stderr, "==== Test setting log file symlink\n");
+  string dest = FLAGS_test_tmpdir + "/logging_test_symlink";
+  string sym = FLAGS_test_tmpdir + "/symlinkbase";
+  DeleteFiles(dest + "*");
+  DeleteFiles(sym + "*");
+
+  SetLogSymlink(GLOG_INFO, "symlinkbase");
+  SetLogDestination(GLOG_INFO, dest.c_str());
+  LOG(INFO) << "message to new symlink";
+  FlushLogFiles(GLOG_INFO);
+  CheckFile(sym, "message to new symlink");
+
+  DeleteFiles(dest + "*");
+  DeleteFiles(sym + "*");
+#endif
+}
+
+static void TestExtension() {
+  fprintf(stderr, "==== Test setting log file extension\n");
+  string dest = FLAGS_test_tmpdir + "/logging_test_extension";
+  DeleteFiles(dest + "*");
+
+  SetLogDestination(GLOG_INFO, dest.c_str());
+  SetLogFilenameExtension("specialextension");
+  LOG(INFO) << "message to new extension";
+  FlushLogFiles(GLOG_INFO);
+  CheckFile(dest, "message to new extension");
+
+  // Check that file name ends with extension
+  vector<string> filenames;
+  GetFiles(dest + "*", &filenames);
+  CHECK_EQ(filenames.size(), 1UL);
+  CHECK(strstr(filenames[0].c_str(), "specialextension") != NULL);
+
+  // Release file handle for the destination file to unlock the file in Windows.
+  LogToStderr();
+  DeleteFiles(dest + "*");
+}
+
+struct MyLogger : public base::Logger {
+  string data;
+
+  virtual void Write(bool /* should_flush */,
+                     time_t /* timestamp */,
+                     const char* message,
+                     size_t length) {
+    data.append(message, length);
+  }
+
+  virtual void Flush() { }
+
+  virtual uint32 LogSize() { return data.length(); }
+};
+
+static void TestWrapper() {
+  fprintf(stderr, "==== Test log wrapper\n");
+
+  MyLogger my_logger;
+  base::Logger* old_logger = base::GetLogger(GLOG_INFO);
+  base::SetLogger(GLOG_INFO, &my_logger);
+  LOG(INFO) << "Send to wrapped logger";
+  FlushLogFiles(GLOG_INFO);
+  base::SetLogger(GLOG_INFO, old_logger);
+
+  CHECK(strstr(my_logger.data.c_str(), "Send to wrapped logger") != NULL);
+}
+
+static void TestErrno() {
+  fprintf(stderr, "==== Test errno preservation\n");
+
+  errno = ENOENT;
+  TestLogging(false);
+  CHECK_EQ(errno, ENOENT);
+}
+
+static void TestOneTruncate(const char *path, uint64 limit, uint64 keep,
+                            size_t dsize, size_t ksize, size_t expect) {
+  int fd;
+  CHECK_ERR(fd = open(path, O_RDWR | O_CREAT | O_TRUNC, 0600));
+
+  const char *discardstr = "DISCARDME!", *keepstr = "KEEPME!";
+  const size_t discard_size = strlen(discardstr), keep_size = strlen(keepstr);
+
+  // Fill the file with the requested data; first discard data, then kept data
+  size_t written = 0;
+  while (written < dsize) {
+    size_t bytes = min(dsize - written, discard_size);
+    CHECK_ERR(write(fd, discardstr, bytes));
+    written += bytes;
+  }
+  written = 0;
+  while (written < ksize) {
+    size_t bytes = min(ksize - written, keep_size);
+    CHECK_ERR(write(fd, keepstr, bytes));
+    written += bytes;
+  }
+
+  TruncateLogFile(path, limit, keep);
+
+  // File should now be shorter
+  struct stat statbuf;
+  CHECK_ERR(fstat(fd, &statbuf));
+  CHECK_EQ(static_cast<size_t>(statbuf.st_size), expect);
+  CHECK_ERR(lseek(fd, 0, SEEK_SET));
+
+  // File should contain the suffix of the original file
+  const size_t buf_size = static_cast<size_t>(statbuf.st_size) + 1;
+  char* buf = new char[buf_size];
+  memset(buf, 0, buf_size);
+  CHECK_ERR(read(fd, buf, buf_size));
+
+  const char* p = buf;
+  size_t checked = 0;
+  while (checked < expect) {
+    size_t bytes = min(expect - checked, keep_size);
+    CHECK(!memcmp(p, keepstr, bytes));
+    checked += bytes;
+  }
+  close(fd);
+  delete[] buf;
+}
+
+static void TestTruncate() {
+#ifdef HAVE_UNISTD_H
+  fprintf(stderr, "==== Test log truncation\n");
+  string path = FLAGS_test_tmpdir + "/truncatefilecustom";
+
+  // Test on a small file
+  TestOneTruncate(path.c_str(), 10, 10, 10, 10, 10);
+
+  // And a big file (multiple blocks to copy)
+  TestOneTruncate(path.c_str(), 2U << 20U, 4U << 10U, 3U << 20U, 4U << 10U,
+                  4U << 10U);
+
+  // Check edge-case limits
+  TestOneTruncate(path.c_str(), 10, 20, 0, 20, 20);
+  TestOneTruncate(path.c_str(), 10, 0, 0, 0, 0);
+  TestOneTruncate(path.c_str(), 10, 50, 0, 10, 10);
+  TestOneTruncate(path.c_str(), 50, 100, 0, 30, 30);
+
+  // MacOSX 10.4 doesn't fail in this case.
+  // Windows doesn't have symlink.
+  // Let's just ignore this test for these cases.
+#if !defined(GLOG_OS_MACOSX) && !defined(GLOG_OS_WINDOWS)
+  // Through a symlink should fail to truncate
+  string linkname = path + ".link";
+  unlink(linkname.c_str());
+  CHECK_ERR(symlink(path.c_str(), linkname.c_str()));
+  TestOneTruncate(linkname.c_str(), 10, 10, 0, 30, 30);
+#endif
+
+  // The /proc/self path makes sense only for linux.
+#if defined(GLOG_OS_LINUX)
+  // Through an open fd symlink should work
+  int fd;
+  CHECK_ERR(fd = open(path.c_str(), O_APPEND | O_WRONLY));
+  char fdpath[64];
+  snprintf(fdpath, sizeof(fdpath), "/proc/self/fd/%d", fd);
+  TestOneTruncate(fdpath, 10, 10, 10, 10, 10);
+#endif
+
+#endif
+}
+
+struct RecordDeletionLogger : public base::Logger {
+  RecordDeletionLogger(bool* set_on_destruction,
+                       base::Logger* wrapped_logger) :
+      set_on_destruction_(set_on_destruction),
+      wrapped_logger_(wrapped_logger)
+  {
+    *set_on_destruction_ = false;
+  }
+  virtual ~RecordDeletionLogger() {
+    *set_on_destruction_ = true;
+  }
+  virtual void Write(bool force_flush,
+                     time_t timestamp,
+                     const char* message,
+                     size_t length) {
+    wrapped_logger_->Write(force_flush, timestamp, message, length);
+  }
+  virtual void Flush() { wrapped_logger_->Flush(); }
+  virtual uint32 LogSize() { return wrapped_logger_->LogSize(); }
+ private:
+  bool* set_on_destruction_;
+  base::Logger* wrapped_logger_;
+};
+
+static void TestCustomLoggerDeletionOnShutdown() {
+  bool custom_logger_deleted = false;
+  base::SetLogger(GLOG_INFO,
+                  new RecordDeletionLogger(&custom_logger_deleted,
+                                           base::GetLogger(GLOG_INFO)));
+  EXPECT_TRUE(IsGoogleLoggingInitialized());
+  ShutdownGoogleLogging();
+  EXPECT_TRUE(custom_logger_deleted);
+  EXPECT_FALSE(IsGoogleLoggingInitialized());
+}
+
+_START_GOOGLE_NAMESPACE_
+namespace glog_internal_namespace_ {
+extern  // in logging.cc
+bool SafeFNMatch_(const char* pattern, size_t patt_len,
+                  const char* str, size_t str_len);
+} // namespace glog_internal_namespace_
+using glog_internal_namespace_::SafeFNMatch_;
+_END_GOOGLE_NAMESPACE_
+
+static bool WrapSafeFNMatch(string pattern, string str) {
+  pattern += "abc";
+  str += "defgh";
+  return SafeFNMatch_(pattern.data(), pattern.size() - 3,
+                      str.data(), str.size() - 5);
+}
+
+TEST(SafeFNMatch, logging) {
+  CHECK(WrapSafeFNMatch("foo", "foo"));
+  CHECK(!WrapSafeFNMatch("foo", "bar"));
+  CHECK(!WrapSafeFNMatch("foo", "fo"));
+  CHECK(!WrapSafeFNMatch("foo", "foo2"));
+  CHECK(WrapSafeFNMatch("bar/foo.ext", "bar/foo.ext"));
+  CHECK(WrapSafeFNMatch("*ba*r/fo*o.ext*", "bar/foo.ext"));
+  CHECK(!WrapSafeFNMatch("bar/foo.ext", "bar/baz.ext"));
+  CHECK(!WrapSafeFNMatch("bar/foo.ext", "bar/foo"));
+  CHECK(!WrapSafeFNMatch("bar/foo.ext", "bar/foo.ext.zip"));
+  CHECK(WrapSafeFNMatch("ba?/*.ext", "bar/foo.ext"));
+  CHECK(WrapSafeFNMatch("ba?/*.ext", "baZ/FOO.ext"));
+  CHECK(!WrapSafeFNMatch("ba?/*.ext", "barr/foo.ext"));
+  CHECK(!WrapSafeFNMatch("ba?/*.ext", "bar/foo.ext2"));
+  CHECK(WrapSafeFNMatch("ba?/*", "bar/foo.ext2"));
+  CHECK(WrapSafeFNMatch("ba?/*", "bar/"));
+  CHECK(!WrapSafeFNMatch("ba?/?", "bar/"));
+  CHECK(!WrapSafeFNMatch("ba?/*", "bar"));
+}
+
+// TestWaitingLogSink will save messages here
+// No lock: Accessed only by TestLogSinkWriter thread
+// and after its demise by its creator.
+static vector<string> global_messages;
+
+// helper for TestWaitingLogSink below.
+// Thread that does the logic of TestWaitingLogSink
+// It's free to use LOG() itself.
+class TestLogSinkWriter : public Thread {
+ public:
+
+  TestLogSinkWriter() : should_exit_(false) {
+    SetJoinable(true);
+    Start();
+  }
+
+  // Just buffer it (can't use LOG() here).
+  void Buffer(const string& message) {
+    mutex_.Lock();
+    RAW_LOG(INFO, "Buffering");
+    messages_.push(message);
+    mutex_.Unlock();
+    RAW_LOG(INFO, "Buffered");
+  }
+
+  // Wait for the buffer to clear (can't use LOG() here).
+  void Wait() {
+    RAW_LOG(INFO, "Waiting");
+    mutex_.Lock();
+    while (!NoWork()) {
+      mutex_.Unlock();
+      SleepForMilliseconds(1);
+      mutex_.Lock();
+    }
+    RAW_LOG(INFO, "Waited");
+    mutex_.Unlock();
+  }
+
+  // Trigger thread exit.
+  void Stop() {
+    MutexLock l(&mutex_);
+    should_exit_ = true;
+  }
+
+ private:
+
+  // helpers ---------------
+
+  // For creating a "Condition".
+  bool NoWork() { return messages_.empty(); }
+  bool HaveWork() { return !messages_.empty() || should_exit_; }
+
+  // Thread body; CAN use LOG() here!
+  virtual void Run() {
+    while (1) {
+      mutex_.Lock();
+      while (!HaveWork()) {
+        mutex_.Unlock();
+        SleepForMilliseconds(1);
+        mutex_.Lock();
+      }
+      if (should_exit_ && messages_.empty()) {
+        mutex_.Unlock();
+        break;
+      }
+      // Give the main thread time to log its message,
+      // so that we get a reliable log capture to compare to golden file.
+      // Same for the other sleep below.
+      SleepForMilliseconds(20);
+      RAW_LOG(INFO, "Sink got a messages");  // only RAW_LOG under mutex_ here
+      string message = messages_.front();
+      messages_.pop();
+      // Normally this would be some more real/involved logging logic
+      // where LOG() usage can't be eliminated,
+      // e.g. pushing the message over with an RPC:
+      size_t messages_left = messages_.size();
+      mutex_.Unlock();
+      SleepForMilliseconds(20);
+      // May not use LOG while holding mutex_, because Buffer()
+      // acquires mutex_, and Buffer is called from LOG(),
+      // which has its own internal mutex:
+      // LOG()->LogToSinks()->TestWaitingLogSink::send()->Buffer()
+      LOG(INFO) << "Sink is sending out a message: " << message;
+      LOG(INFO) << "Have " << messages_left << " left";
+      global_messages.push_back(message);
+    }
+  }
+
+  // data ---------------
+
+  Mutex mutex_;
+  bool should_exit_;
+  queue<string> messages_;  // messages to be logged
+};
+
+// A log sink that exercises WaitTillSent:
+// it pushes data to a buffer and wakes up another thread to do the logging
+// (that other thread can than use LOG() itself),
+class TestWaitingLogSink : public LogSink {
+ public:
+
+  TestWaitingLogSink() {
+    tid_ = pthread_self();  // for thread-specific behavior
+    AddLogSink(this);
+  }
+  ~TestWaitingLogSink() {
+    RemoveLogSink(this);
+    writer_.Stop();
+    writer_.Join();
+  }
+
+  // (re)define LogSink interface
+
+  virtual void send(LogSeverity severity, const char* /* full_filename */,
+                    const char* base_filename, int line,
+                    const LogMessageTime &logmsgtime,
+                    const char* message, size_t message_len) {
+    // Push it to Writer thread if we are the original logging thread.
+    // Note: Something like ThreadLocalLogSink is a better choice
+    //       to do thread-specific LogSink logic for real.
+    if (pthread_equal(tid_, pthread_self())) {
+      writer_.Buffer(ToString(severity, base_filename, line,
+                              logmsgtime, message, message_len));
+    }
+  }
+
+  virtual void WaitTillSent() {
+    // Wait for Writer thread if we are the original logging thread.
+    if (pthread_equal(tid_, pthread_self()))  writer_.Wait();
+  }
+
+ private:
+
+  pthread_t tid_;
+  TestLogSinkWriter writer_;
+};
+
+// Check that LogSink::WaitTillSent can be used in the advertised way.
+// We also do golden-stderr comparison.
+static void TestLogSinkWaitTillSent() {
+  { TestWaitingLogSink sink;
+    // Sleeps give the sink threads time to do all their work,
+    // so that we get a reliable log capture to compare to the golden file.
+    LOG(INFO) << "Message 1";
+    SleepForMilliseconds(60);
+    LOG(ERROR) << "Message 2";
+    SleepForMilliseconds(60);
+    LOG(WARNING) << "Message 3";
+    SleepForMilliseconds(60);
+  }
+  for (size_t i = 0; i < global_messages.size(); ++i) {
+    LOG(INFO) << "Sink capture: " << global_messages[i];
+  }
+  CHECK_EQ(global_messages.size(), 3UL);
+}
+
+TEST(Strerror, logging) {
+  int errcode = EINTR;
+  char *msg = strdup(strerror(errcode));
+  const size_t buf_size = strlen(msg) + 1;
+  char *buf = new char[buf_size];
+  CHECK_EQ(posix_strerror_r(errcode, NULL, 0), -1);
+  buf[0] = 'A';
+  CHECK_EQ(posix_strerror_r(errcode, buf, 0), -1);
+  CHECK_EQ(buf[0], 'A');
+  CHECK_EQ(posix_strerror_r(errcode, NULL, buf_size), -1);
+#if defined(GLOG_OS_MACOSX) || defined(GLOG_OS_FREEBSD) || defined(GLOG_OS_OPENBSD)
+  // MacOSX or FreeBSD considers this case is an error since there is
+  // no enough space.
+  CHECK_EQ(posix_strerror_r(errcode, buf, 1), -1);
+#else
+  CHECK_EQ(posix_strerror_r(errcode, buf, 1), 0);
+#endif
+  CHECK_STREQ(buf, "");
+  CHECK_EQ(posix_strerror_r(errcode, buf, buf_size), 0);
+  CHECK_STREQ(buf, msg);
+  delete[] buf;
+  CHECK_EQ(msg, StrError(errcode));
+  free(msg);
+}
+
+// Simple routines to look at the sizes of generated code for LOG(FATAL) and
+// CHECK(..) via objdump
+/*
+static void MyFatal() {
+  LOG(FATAL) << "Failed";
+}
+static void MyCheck(bool a, bool b) {
+  CHECK_EQ(a, b);
+}
+*/
+#ifdef HAVE_LIB_GMOCK
+
+TEST(DVLog, Basic) {
+  ScopedMockLog log;
+
+#if defined(NDEBUG)
+  // We are expecting that nothing is logged.
+  EXPECT_CALL(log, Log(_, _, _)).Times(0);
+#else
+  EXPECT_CALL(log, Log(GLOG_INFO, __FILE__, "debug log"));
+#endif
+
+  FLAGS_v = 1;
+  DVLOG(1) << "debug log";
+}
+
+TEST(DVLog, V0) {
+  ScopedMockLog log;
+
+  // We are expecting that nothing is logged.
+  EXPECT_CALL(log, Log(_, _, _)).Times(0);
+
+  FLAGS_v = 0;
+  DVLOG(1) << "debug log";
+}
+
+TEST(LogAtLevel, Basic) {
+  ScopedMockLog log;
+
+  // The function version outputs "logging.h" as a file name.
+  EXPECT_CALL(log, Log(GLOG_WARNING, StrNe(__FILE__), "function version"));
+  EXPECT_CALL(log, Log(GLOG_INFO, __FILE__, "macro version"));
+
+  int severity = GLOG_WARNING;
+  LogAtLevel(severity, "function version");
+
+  severity = GLOG_INFO;
+  // We can use the macro version as a C++ stream.
+  LOG_AT_LEVEL(severity) << "macro" << ' ' << "version";
+}
+
+TEST(TestExitOnDFatal, ToBeOrNotToBe) {
+  // Check the default setting...
+  EXPECT_TRUE(base::internal::GetExitOnDFatal());
+
+  // Turn off...
+  base::internal::SetExitOnDFatal(false);
+  EXPECT_FALSE(base::internal::GetExitOnDFatal());
+
+  // We don't die.
+  {
+    ScopedMockLog log;
+    //EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber());
+    // LOG(DFATAL) has severity FATAL if debugging, but is
+    // downgraded to ERROR if not debugging.
+    const LogSeverity severity =
+#if defined(NDEBUG)
+        GLOG_ERROR;
+#else
+        GLOG_FATAL;
+#endif
+    EXPECT_CALL(log, Log(severity, __FILE__, "This should not be fatal"));
+    LOG(DFATAL) << "This should not be fatal";
+  }
+
+  // Turn back on...
+  base::internal::SetExitOnDFatal(true);
+  EXPECT_TRUE(base::internal::GetExitOnDFatal());
+
+#ifdef GTEST_HAS_DEATH_TEST
+  // Death comes on little cats' feet.
+  EXPECT_DEBUG_DEATH({
+      LOG(DFATAL) << "This should be fatal in debug mode";
+    }, "This should be fatal in debug mode");
+#endif
+}
+
+#ifdef HAVE_STACKTRACE
+
+static void BacktraceAtHelper() {
+  LOG(INFO) << "Not me";
+
+// The vertical spacing of the next 3 lines is significant.
+  LOG(INFO) << "Backtrace me";
+}
+static int kBacktraceAtLine = __LINE__ - 2;  // The line of the LOG(INFO) above
+
+TEST(LogBacktraceAt, DoesNotBacktraceWhenDisabled) {
+  StrictMock<ScopedMockLog> log;
+
+  FLAGS_log_backtrace_at = "";
+
+  EXPECT_CALL(log, Log(_, _, "Backtrace me"));
+  EXPECT_CALL(log, Log(_, _, "Not me"));
+
+  BacktraceAtHelper();
+}
+
+TEST(LogBacktraceAt, DoesBacktraceAtRightLineWhenEnabled) {
+  StrictMock<ScopedMockLog> log;
+
+  char where[100];
+  snprintf(where, 100, "%s:%d", const_basename(__FILE__), kBacktraceAtLine);
+  FLAGS_log_backtrace_at = where;
+
+  // The LOG at the specified line should include a stacktrace which includes
+  // the name of the containing function, followed by the log message.
+  // We use HasSubstr()s instead of ContainsRegex() for environments
+  // which don't have regexp.
+  EXPECT_CALL(log, Log(_, _, AllOf(HasSubstr("stacktrace:"),
+                                   HasSubstr("BacktraceAtHelper"),
+                                   HasSubstr("main"),
+                                   HasSubstr("Backtrace me"))));
+  // Other LOGs should not include a backtrace.
+  EXPECT_CALL(log, Log(_, _, "Not me"));
+
+  BacktraceAtHelper();
+}
+
+#endif // HAVE_STACKTRACE
+
+#endif // HAVE_LIB_GMOCK
+
+struct UserDefinedClass {
+  bool operator==(const UserDefinedClass&) const { return true; }
+};
+
+inline ostream& operator<<(ostream& out, const UserDefinedClass&) {
+  out << "OK";
+  return out;
+}
+
+TEST(UserDefinedClass, logging) {
+  UserDefinedClass u;
+  vector<string> buf;
+  LOG_STRING(INFO, &buf) << u;
+  CHECK_EQ(1UL, buf.size());
+  CHECK(buf[0].find("OK") != string::npos);
+
+  // We must be able to compile this.
+  CHECK_EQ(u, u);
+}
+
+TEST(LogMsgTime, gmtoff) {
+  /*
+   * Unit test for GMT offset API
+   * TODO: To properly test this API, we need a platform independent way to set time-zone.
+   * */
+  google::LogMessage log_obj(__FILE__, __LINE__);
+
+  long int nGmtOff = log_obj.getLogMessageTime().gmtoff();
+  // GMT offset ranges from UTC-12:00 to UTC+14:00
+  const long utc_min_offset = -43200;
+  const long utc_max_offset = 50400;
+  EXPECT_TRUE( (nGmtOff >= utc_min_offset) && (nGmtOff <= utc_max_offset) );
+}
diff --git a/third_party/google-glog/src/logging_custom_prefix_unittest.err b/third_party/google-glog/src/logging_custom_prefix_unittest.err
new file mode 100644
index 0000000..ccd5ba9
--- /dev/null
+++ b/third_party/google-glog/src/logging_custom_prefix_unittest.err
@@ -0,0 +1,308 @@
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=2 logtostderr=0 alsologtostderr=0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log error
+WARNING: Logging before InitGoogleLogging() is written to STDERR
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=0 logtostderr=0 alsologtostderr=0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] foo bar 10 3.4
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Plog every 2, iteration 1: __SUCCESS__ [0]
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log every 3, iteration 1
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log every 4, iteration 1
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log if every 5, iteration 1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log if every 1, iteration 1
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log if less than 3 every 2, iteration 1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log if every 1, iteration 2
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Plog every 2, iteration 3: __ENOENT__ [2]
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log if every 1, iteration 3
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log if less than 3 every 2, iteration 3
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log every 3, iteration 4
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log if every 1, iteration 4
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Plog every 2, iteration 5: __EINTR__ [4]
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log every 4, iteration 5
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log if every 1, iteration 5
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log if every 5, iteration 6
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log if every 1, iteration 6
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Plog every 2, iteration 7: __ENXIO__ [6]
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log every 3, iteration 7
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log if every 1, iteration 7
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log if every 1, iteration 8
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Plog every 2, iteration 9: __ENOEXEC__ [8]
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log every 4, iteration 9
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log if every 1, iteration 9
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log every 3, iteration 10
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Log if every 1, iteration 10
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if this
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] array
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] const array
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] foo 1000       1000 3e8
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] foo          1
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] inner
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] outer
+no prefix
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: foo bar 10 3.400000
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: array
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: const array
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: ptr __PTRTEST__
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: ptr __NULLP__
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: foo 1000 0000001000 3e8
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: foo 1000
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: foo 1000
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: RAW_LOG ERROR: The Message was too long!
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: RAW_LOG ERROR: The Message was too long!
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog 0 on
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog 1 on
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog 2 on
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=0 logtostderr=0 alsologtostderr=0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Test: v=1 stderrthreshold=0 logtostderr=0 alsologtostderr=0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog 1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog 1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Test: v=-1 stderrthreshold=0 logtostderr=0 alsologtostderr=0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=1 logtostderr=0 alsologtostderr=0
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log error
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log error
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=2 logtostderr=0 alsologtostderr=0
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log error
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log error
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=3 logtostderr=0 alsologtostderr=0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=3 logtostderr=1 alsologtostderr=0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=3 logtostderr=0 alsologtostderr=1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Test: v=1 stderrthreshold=1 logtostderr=0 alsologtostderr=0
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log error
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log error
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Test: v=1 stderrthreshold=3 logtostderr=0 alsologtostderr=1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: vlog 1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: log error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog 1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_STRING: reported info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_STRING: reported warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_STRING: reported error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Captured by LOG_STRING:  LOG_STRING: collected info
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Captured by LOG_STRING:  LOG_STRING: collected warning
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Captured by LOG_STRING:  LOG_STRING: collected error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_SINK: collected info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_SINK: collected warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_SINK: collected error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_SINK: reported info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_SINK: reported warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_SINK: reported error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Captured by LOG_TO_SINK:
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_SINK: collected info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_SINK: collected warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_SINK: collected error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_SINK_BUT_NOT_TO_LOGFILE: collected info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_SINK_BUT_NOT_TO_LOGFILE: collected warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_SINK_BUT_NOT_TO_LOGFILE: collected error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_STRING: collected info
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Captured by LOG_TO_STRING:  LOG_TO_STRING: collected info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_STRING: collected warning
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Captured by LOG_TO_STRING:  LOG_TO_STRING: collected warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_STRING: collected error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Captured by LOG_TO_STRING:  LOG_TO_STRING: collected error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_STRING: reported info
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_STRING: reported warning
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] LOG_TO_STRING: reported error
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Message 1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Buffering
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Buffered
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Waiting
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Sink got a messages
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Waited
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Sink is sending out a message: IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Message 1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Have 0 left
+EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Message 2
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Buffering
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Buffered
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Waiting
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Sink got a messages
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Waited
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Sink is sending out a message: EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Message 2
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Have 0 left
+WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Message 3
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Buffering
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Buffered
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Waiting
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Sink got a messages
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] RAW: Waited
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Sink is sending out a message: WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Message 3
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Have 0 left
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Sink capture: IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Message 1
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Sink capture: EYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Message 2
+IYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Sink capture: WYEARDATE TIME__ THREADID logging_custom_prefix_unittest.cc:LINE] Message 3
diff --git a/third_party/google-glog/src/logging_striptest_main.cc b/third_party/google-glog/src/logging_striptest_main.cc
index 2fb9127..27e1254 100644
--- a/third_party/google-glog/src/logging_striptest_main.cc
+++ b/third_party/google-glog/src/logging_striptest_main.cc
@@ -31,10 +31,10 @@
 
 // The common part of the striplog tests.
 
-#include <stdio.h>
+#include <cstdio>
 #include <string>
 #include <iosfwd>
-#include "glog/logging.h"
+#include <glog/logging.h>
 #include "base/commandlineflags.h"
 #include "config.h"
 
diff --git a/third_party/google-glog/src/logging_unittest.cc b/third_party/google-glog/src/logging_unittest.cc
index 8770d52..728b5fe 100644
--- a/third_party/google-glog/src/logging_unittest.cc
+++ b/third_party/google-glog/src/logging_unittest.cc
@@ -29,7 +29,7 @@
 //
 // Author: Ray Sidney
 
-#include "config_for_unittests.h"
+#include "config.h"
 #include "utilities.h"
 
 #include <fcntl.h>
@@ -40,7 +40,13 @@
 #ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif
+#ifdef HAVE_SYS_WAIT_H
+# include <sys/wait.h>
+#endif
 
+#include <cstdio>
+#include <cstdlib>
+#include <fstream>
 #include <iomanip>
 #include <iostream>
 #include <memory>
@@ -49,12 +55,9 @@
 #include <string>
 #include <vector>
 
-#include <stdio.h>
-#include <stdlib.h>
-
 #include "base/commandlineflags.h"
-#include "glog/logging.h"
-#include "glog/raw_logging.h"
+#include <glog/logging.h>
+#include <glog/raw_logging.h>
 #include "googletest.h"
 
 DECLARE_string(log_backtrace_at);  // logging.cc
@@ -95,6 +98,7 @@
 static void TestRawLogging();
 static void LogWithLevels(int v, int severity, bool err, bool alsoerr);
 static void TestLoggingLevels();
+static void TestVLogModule();
 static void TestLogString();
 static void TestLogSink();
 static void TestLogToString();
@@ -103,11 +107,15 @@
 static void TestDCHECK();
 static void TestSTREQ();
 static void TestBasename();
+static void TestBasenameAppendWhenNoTimestamp();
+static void TestTwoProcessesWrite();
 static void TestSymlink();
 static void TestExtension();
 static void TestWrapper();
 static void TestErrno();
 static void TestTruncate();
+static void TestCustomLoggerDeletionOnShutdown();
+static void TestLogPeriodically();
 
 static int x = -1;
 static void BM_Check1(int n) {
@@ -122,7 +130,7 @@
     CHECK_GE(n, x);
   }
 }
-BENCHMARK(BM_Check1);
+BENCHMARK(BM_Check1)
 
 static void CheckFailure(int a, int b, const char* file, int line, const char* msg);
 static void BM_Check3(int n) {
@@ -137,7 +145,7 @@
     if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x");
   }
 }
-BENCHMARK(BM_Check3);
+BENCHMARK(BM_Check3)
 
 static void BM_Check2(int n) {
   if (n == 17) {
@@ -154,7 +162,7 @@
     CHECK(n >= x);
   }
 }
-BENCHMARK(BM_Check2);
+BENCHMARK(BM_Check2)
 
 static void CheckFailure(int, int, const char* /* file */, int /* line */,
                          const char* /* msg */) {
@@ -165,20 +173,19 @@
     LOG(INFO) << "test message";
   }
 }
-BENCHMARK(BM_logspeed);
+BENCHMARK(BM_logspeed)
 
 static void BM_vlog(int n) {
   while (n-- > 0) {
     VLOG(1) << "test message";
   }
 }
-BENCHMARK(BM_vlog);
+BENCHMARK(BM_vlog)
 
 int main(int argc, char **argv) {
   FLAGS_colorlogtostderr = false;
-#ifdef HAVE_LIB_GFLAGS
-  ParseCommandLineFlags(&argc, &argv, true);
-#endif
+  FLAGS_timestamp_in_logfile_name = true;
+
   // Make sure stderr is not buffered as stderr seems to be buffered
   // on recent windows.
   setbuf(stderr, NULL);
@@ -190,8 +197,12 @@
   LogWithLevels(0, 0, 0, 0);  // simulate "before global c-tors"
   const string early_stderr = GetCapturedTestStderr();
 
+  EXPECT_FALSE(IsGoogleLoggingInitialized());
+
   InitGoogleLogging(argv[0]);
 
+  EXPECT_TRUE(IsGoogleLoggingInitialized());
+
   RunSpecifiedBenchmarks();
 
   FLAGS_logtostderr = true;
@@ -201,6 +212,10 @@
   InitGoogleMock(&argc, argv);
 #endif
 
+#ifdef HAVE_LIB_GFLAGS
+  ParseCommandLineFlags(&argc, &argv, true);
+#endif
+
   // so that death tests run before we use threads
   CHECK_EQ(RUN_ALL_TESTS(), 0);
 
@@ -212,6 +227,7 @@
   TestLogging(true);
   TestRawLogging();
   TestLoggingLevels();
+  TestVLogModule();
   TestLogString();
   TestLogSink();
   TestLogToString();
@@ -226,14 +242,32 @@
 
   FLAGS_logtostderr = false;
 
+  FLAGS_logtostdout = true;
+  FLAGS_stderrthreshold = NUM_SEVERITIES;
+  CaptureTestStdout();
+  TestRawLogging();
+  TestLoggingLevels();
+  TestLogString();
+  TestLogSink();
+  TestLogToString();
+  TestLogSinkWaitTillSent();
+  TestCHECK();
+  TestDCHECK();
+  TestSTREQ();
+  EXPECT_TRUE(
+      MungeAndDiffTestStdout(FLAGS_test_srcdir + "/src/logging_unittest.out"));
+  FLAGS_logtostdout = false;
+
   TestBasename();
+  TestBasenameAppendWhenNoTimestamp();
+  TestTwoProcessesWrite();
   TestSymlink();
   TestExtension();
   TestWrapper();
   TestErrno();
   TestTruncate();
-
-  ShutdownGoogleLogging();
+  TestCustomLoggerDeletionOnShutdown();
+  TestLogPeriodically();
 
   fprintf(stdout, "PASS\n");
   return 0;
@@ -271,6 +305,7 @@
   int j = 1000;
   LOG(ERROR) << string("foo") << ' '<< j << ' ' << setw(10) << j << " "
              << setw(1) << hex << j;
+  LOG(INFO) << "foo " << std::setw(10) << 1.0;
 
   {
     google::LogMessage outer(__FILE__, __LINE__, GLOG_ERROR);
@@ -282,7 +317,7 @@
   LogMessage("foo", LogMessage::kNoLogPrefix, GLOG_INFO).stream() << "no prefix";
 
   if (check_counts) {
-    CHECK_EQ(base_num_infos   + 14, LogMessage::num_messages(GLOG_INFO));
+    CHECK_EQ(base_num_infos   + 15, LogMessage::num_messages(GLOG_INFO));
     CHECK_EQ(base_num_warning + 3,  LogMessage::num_messages(GLOG_WARNING));
     CHECK_EQ(base_num_errors  + 17, LogMessage::num_messages(GLOG_ERROR));
   }
@@ -331,7 +366,7 @@
   RAW_LOG(ERROR, "%s%d%c%010d%s%1x", foo->c_str(), j, ' ', j, " ", j);
   RAW_VLOG(0, "foo %d", j);
 
-#ifdef NDEBUG
+#if defined(NDEBUG)
   RAW_LOG(INFO, "foo %d", j);  // so that have same stderr to compare
 #else
   RAW_DLOG(INFO, "foo %d", j);  // test RAW_DLOG in debug mode
@@ -353,7 +388,7 @@
   RAW_VLOG(2, "vlog 2 on");
   RAW_VLOG(3, "vlog 3 off");
 
-#ifdef NDEBUG
+#if defined(NDEBUG)
   RAW_DCHECK(1 == 2, " RAW_DCHECK's shouldn't be compiled in normal mode");
 #endif
 
@@ -441,6 +476,24 @@
   LogWithLevels(1, GLOG_FATAL, false, true);
 }
 
+int TestVlogHelper() {
+  if (VLOG_IS_ON(1)) {
+    return 1;
+  }
+  return 0;
+}
+
+void TestVLogModule() {
+  int c = TestVlogHelper();
+  EXPECT_EQ(0, c);
+
+#if defined(__GNUC__)
+  EXPECT_EQ(0, SetVLOGLevel("logging_unittest", 1));
+  c = TestVlogHelper();
+  EXPECT_EQ(1, c);
+#endif
+}
+
 TEST(DeathRawCHECK, logging) {
   ASSERT_DEATH(RAW_CHECK(false, "failure 1"),
                "RAW: Check false failed: failure 1");
@@ -486,10 +539,10 @@
   vector<string> errors;
   virtual void send(LogSeverity severity, const char* /* full_filename */,
                     const char* base_filename, int line,
-                    const struct tm* tm_time,
+                    const LogMessageTime &logmsgtime,
                     const char* message, size_t message_len) {
     errors.push_back(
-      ToString(severity, base_filename, line, tm_time, message, message_len));
+      ToString(severity, base_filename, line, logmsgtime, message, message_len));
   }
 };
 
@@ -546,7 +599,7 @@
 
   // Tests using CHECK*() on anonymous enums.
   // Apple's GCC doesn't like this.
-#if !defined(OS_MACOSX)
+#if !defined(GLOG_OS_MACOSX)
   CHECK_EQ(CASE_A, CASE_A);
   CHECK_NE(CASE_A, CASE_B);
   CHECK_GE(CASE_A, CASE_A);
@@ -559,7 +612,7 @@
 }
 
 void TestDCHECK() {
-#ifdef NDEBUG
+#if defined(NDEBUG)
   DCHECK( 1 == 2 ) << " DCHECK's shouldn't be compiled in normal mode";
 #endif
   DCHECK( 1 == 1 );
@@ -572,9 +625,10 @@
   DCHECK_GT(2, 1);
   DCHECK_LT(1, 2);
 
-  auto_ptr<int64> sptr(new int64);
-  int64* ptr = DCHECK_NOTNULL(sptr.get());
-  CHECK_EQ(ptr, sptr.get());
+  int64* orig_ptr = new int64;
+  int64* ptr = DCHECK_NOTNULL(orig_ptr);
+  CHECK_EQ(ptr, orig_ptr);
+  delete orig_ptr;
 }
 
 void TestSTREQ() {
@@ -627,7 +681,7 @@
     files->push_back(string(g.gl_pathv[i]));
   }
   globfree(&g);
-#elif defined(OS_WINDOWS)
+#elif defined(GLOG_OS_WINDOWS)
   WIN32_FIND_DATAA data;
   HANDLE handle = FindFirstFileA(pattern.c_str(), &data);
   size_t index = pattern.rfind('\\');
@@ -643,7 +697,7 @@
     files->push_back(dirname + data.cFileName);
   } while (FindNextFileA(handle, &data));
   BOOL result = FindClose(handle);
-  LOG_SYSRESULT(result);
+  LOG_SYSRESULT(result != 0);
 #else
 # error There is no way to do glob.
 #endif
@@ -658,7 +712,8 @@
   }
 }
 
-static void CheckFile(const string& name, const string& expected_string) {
+//check string is in file (or is *NOT*, depending on optional checkInFileOrNot)
+static void CheckFile(const string& name, const string& expected_string, const bool checkInFileOrNot = true) {
   vector<string> files;
   GetFiles(name + "*", &files);
   CHECK_EQ(files.size(), 1UL);
@@ -667,13 +722,16 @@
   CHECK(file != NULL) << ": could not open " << files[0];
   char buf[1000];
   while (fgets(buf, sizeof(buf), file) != NULL) {
-    if (strstr(buf, expected_string.c_str()) != NULL) {
+    char* first = strstr(buf, expected_string.c_str());
+    //if first == NULL, not found.
+    //Terser than if (checkInFileOrNot && first != NULL || !check...
+    if (checkInFileOrNot != (first == NULL)) {
       fclose(file);
       return;
     }
   }
   fclose(file);
-  LOG(FATAL) << "Did not find " << expected_string << " in " << files[0];
+  LOG(FATAL) << "Did " << (checkInFileOrNot? "not " : "") << "find " << expected_string << " in " << files[0];
 }
 
 static void TestBasename() {
@@ -692,8 +750,67 @@
   DeleteFiles(dest + "*");
 }
 
+static void TestBasenameAppendWhenNoTimestamp() {
+  fprintf(stderr, "==== Test setting log file basename without timestamp and appending properly\n");
+  const string dest = FLAGS_test_tmpdir + "/logging_test_basename_append_when_no_timestamp";
+  DeleteFiles(dest + "*");
+
+  ofstream out(dest.c_str());
+  out << "test preexisting content" << endl;
+  out.close();
+
+  CheckFile(dest, "test preexisting content");
+
+  FLAGS_timestamp_in_logfile_name=false;
+  SetLogDestination(GLOG_INFO, dest.c_str());
+  LOG(INFO) << "message to new base, appending to preexisting file";
+  FlushLogFiles(GLOG_INFO);
+  FLAGS_timestamp_in_logfile_name=true;
+
+  //if the logging overwrites the file instead of appending it will fail.
+  CheckFile(dest, "test preexisting content");
+  CheckFile(dest, "message to new base, appending to preexisting file");
+
+  // Release file handle for the destination file to unlock the file in Windows.
+  LogToStderr();
+  DeleteFiles(dest + "*");
+}
+
+static void TestTwoProcessesWrite() {
+// test only implemented for platforms with fork & wait; the actual implementation relies on flock
+#if defined(HAVE_SYS_WAIT_H) && defined(HAVE_UNISTD_H) && defined(HAVE_FCNTL)
+  fprintf(stderr, "==== Test setting log file basename and two processes writing - second should fail\n");
+  const string dest = FLAGS_test_tmpdir + "/logging_test_basename_two_processes_writing";
+  DeleteFiles(dest + "*");
+
+  //make both processes write into the same file (easier test)
+  FLAGS_timestamp_in_logfile_name=false;
+  SetLogDestination(GLOG_INFO, dest.c_str());
+  LOG(INFO) << "message to new base, parent";
+  FlushLogFiles(GLOG_INFO);
+
+  pid_t pid = fork();
+  CHECK_ERR(pid);
+  if (pid == 0) {
+    LOG(INFO) << "message to new base, child - should only appear on STDERR not on the file";
+    ShutdownGoogleLogging(); //for children proc
+    exit(EXIT_SUCCESS);
+  } else if (pid > 0) {
+    wait(NULL);
+  }
+  FLAGS_timestamp_in_logfile_name=true;
+
+  CheckFile(dest, "message to new base, parent");
+  CheckFile(dest, "message to new base, child - should only appear on STDERR not on the file", false);
+
+  // Release
+  LogToStderr();
+  DeleteFiles(dest + "*");
+#endif
+}
+
 static void TestSymlink() {
-#ifndef OS_WINDOWS
+#ifndef GLOG_OS_WINDOWS
   fprintf(stderr, "==== Test setting log file symlink\n");
   string dest = FLAGS_test_tmpdir + "/logging_test_symlink";
   string sym = FLAGS_test_tmpdir + "/symlinkbase";
@@ -739,7 +856,7 @@
   virtual void Write(bool /* should_flush */,
                      time_t /* timestamp */,
                      const char* message,
-                     int length) {
+                     size_t length) {
     data.append(message, length);
   }
 
@@ -769,8 +886,8 @@
   CHECK_EQ(errno, ENOENT);
 }
 
-static void TestOneTruncate(const char *path, int64 limit, int64 keep,
-                            int64 dsize, int64 ksize, int64 expect) {
+static void TestOneTruncate(const char *path, uint64 limit, uint64 keep,
+                            size_t dsize, size_t ksize, size_t expect) {
   int fd;
   CHECK_ERR(fd = open(path, O_RDWR | O_CREAT | O_TRUNC, 0600));
 
@@ -778,15 +895,15 @@
   const size_t discard_size = strlen(discardstr), keep_size = strlen(keepstr);
 
   // Fill the file with the requested data; first discard data, then kept data
-  int64 written = 0;
+  size_t written = 0;
   while (written < dsize) {
-    int bytes = min<int64>(dsize - written, discard_size);
+    size_t bytes = min(dsize - written, discard_size);
     CHECK_ERR(write(fd, discardstr, bytes));
     written += bytes;
   }
   written = 0;
   while (written < ksize) {
-    int bytes = min<int64>(ksize - written, keep_size);
+    size_t bytes = min(ksize - written, keep_size);
     CHECK_ERR(write(fd, keepstr, bytes));
     written += bytes;
   }
@@ -796,19 +913,19 @@
   // File should now be shorter
   struct stat statbuf;
   CHECK_ERR(fstat(fd, &statbuf));
-  CHECK_EQ(statbuf.st_size, expect);
+  CHECK_EQ(static_cast<size_t>(statbuf.st_size), expect);
   CHECK_ERR(lseek(fd, 0, SEEK_SET));
 
   // File should contain the suffix of the original file
-  const size_t buf_size = statbuf.st_size + 1;
+  const size_t buf_size = static_cast<size_t>(statbuf.st_size) + 1;
   char* buf = new char[buf_size];
   memset(buf, 0, buf_size);
   CHECK_ERR(read(fd, buf, buf_size));
 
-  const char *p = buf;
-  int64 checked = 0;
+  const char* p = buf;
+  size_t checked = 0;
   while (checked < expect) {
-    int bytes = min<int64>(expect - checked, keep_size);
+    size_t bytes = min(expect - checked, keep_size);
     CHECK(!memcmp(p, keepstr, bytes));
     checked += bytes;
   }
@@ -825,7 +942,8 @@
   TestOneTruncate(path.c_str(), 10, 10, 10, 10, 10);
 
   // And a big file (multiple blocks to copy)
-  TestOneTruncate(path.c_str(), 2<<20, 4<<10, 3<<20, 4<<10, 4<<10);
+  TestOneTruncate(path.c_str(), 2U << 20U, 4U << 10U, 3U << 20U, 4U << 10U,
+                  4U << 10U);
 
   // Check edge-case limits
   TestOneTruncate(path.c_str(), 10, 20, 0, 20, 20);
@@ -836,7 +954,7 @@
   // MacOSX 10.4 doesn't fail in this case.
   // Windows doesn't have symlink.
   // Let's just ignore this test for these cases.
-#if !defined(OS_MACOSX) && !defined(OS_WINDOWS)
+#if !defined(GLOG_OS_MACOSX) && !defined(GLOG_OS_WINDOWS)
   // Through a symlink should fail to truncate
   string linkname = path + ".link";
   unlink(linkname.c_str());
@@ -845,7 +963,7 @@
 #endif
 
   // The /proc/self path makes sense only for linux.
-#if defined(OS_LINUX)
+#if defined(GLOG_OS_LINUX)
   // Through an open fd symlink should work
   int fd;
   CHECK_ERR(fd = open(path.c_str(), O_APPEND | O_WRONLY));
@@ -857,6 +975,134 @@
 #endif
 }
 
+struct RecordDeletionLogger : public base::Logger {
+  RecordDeletionLogger(bool* set_on_destruction,
+                       base::Logger* wrapped_logger) :
+      set_on_destruction_(set_on_destruction),
+      wrapped_logger_(wrapped_logger)
+  {
+    *set_on_destruction_ = false;
+  }
+  virtual ~RecordDeletionLogger() {
+    *set_on_destruction_ = true;
+  }
+  virtual void Write(bool force_flush,
+                     time_t timestamp,
+                     const char* message,
+                     size_t length) {
+    wrapped_logger_->Write(force_flush, timestamp, message, length);
+  }
+  virtual void Flush() { wrapped_logger_->Flush(); }
+  virtual uint32 LogSize() { return wrapped_logger_->LogSize(); }
+ private:
+  bool* set_on_destruction_;
+  base::Logger* wrapped_logger_;
+};
+
+static void TestCustomLoggerDeletionOnShutdown() {
+  bool custom_logger_deleted = false;
+  base::SetLogger(GLOG_INFO,
+                  new RecordDeletionLogger(&custom_logger_deleted,
+                                           base::GetLogger(GLOG_INFO)));
+  EXPECT_TRUE(IsGoogleLoggingInitialized());
+  ShutdownGoogleLogging();
+  EXPECT_TRUE(custom_logger_deleted);
+  EXPECT_FALSE(IsGoogleLoggingInitialized());
+}
+
+namespace LogTimes {
+// Log a "message" every 10ms, 10 times. These numbers are nice compromise
+// between total running time of 100ms and the period of 10ms. The period is
+// large enough such that any CPU and OS scheduling variation shouldn't affect
+// the results from the ideal case by more than 5% (500us or 0.5ms)
+GLOG_CONSTEXPR int64_t LOG_PERIOD_NS     = 10000000;  // 10ms
+GLOG_CONSTEXPR int64_t LOG_PERIOD_TOL_NS = 500000;    // 500us
+
+// Set an upper limit for the number of times the stream operator can be
+// called. Make sure not to exceed this number of times the stream operator is
+// called, since it is also the array size and will be indexed by the stream
+// operator.
+GLOG_CONSTEXPR size_t MAX_CALLS = 10;
+}  // namespace LogTimes
+
+#if defined(HAVE_CXX11_CHRONO) && __cplusplus >= 201103L
+struct LogTimeRecorder {
+  LogTimeRecorder() : m_streamTimes(0) {}
+  size_t m_streamTimes;
+  std::chrono::steady_clock::time_point m_callTimes[LogTimes::MAX_CALLS];
+};
+// The stream operator is called by LOG_EVERY_T every time a logging event
+// occurs. Make sure to save the times for each call as they will be used later
+// to verify the time delta between each call.
+std::ostream& operator<<(std::ostream& stream, LogTimeRecorder& t) {
+  t.m_callTimes[t.m_streamTimes++] = std::chrono::steady_clock::now();
+  return stream;
+}
+// get elapsed time in nanoseconds
+int64 elapsedTime_ns(const std::chrono::steady_clock::time_point& begin,
+        const std::chrono::steady_clock::time_point& end) {
+  return std::chrono::duration_cast<std::chrono::nanoseconds>((end - begin))
+          .count();
+}
+#elif defined(GLOG_OS_WINDOWS)
+struct LogTimeRecorder {
+  LogTimeRecorder() : m_streamTimes(0) {}
+  size_t m_streamTimes;
+  LARGE_INTEGER m_callTimes[LogTimes::MAX_CALLS];
+};
+std::ostream& operator<<(std::ostream& stream, LogTimeRecorder& t) {
+  QueryPerformanceCounter(&t.m_callTimes[t.m_streamTimes++]);
+  return stream;
+}
+// get elapsed time in nanoseconds
+int64 elapsedTime_ns(const LARGE_INTEGER& begin, const LARGE_INTEGER& end) {
+  LARGE_INTEGER freq;
+  QueryPerformanceFrequency(&freq);
+  return (end.QuadPart - begin.QuadPart) * LONGLONG(1000000000) / freq.QuadPart;
+}
+#else
+struct LogTimeRecorder {
+  LogTimeRecorder() : m_streamTimes(0) {}
+  size_t m_streamTimes;
+  timespec m_callTimes[LogTimes::MAX_CALLS];
+};
+std::ostream& operator<<(std::ostream& stream, LogTimeRecorder& t) {
+  clock_gettime(CLOCK_MONOTONIC, &t.m_callTimes[t.m_streamTimes++]);
+  return stream;
+}
+// get elapsed time in nanoseconds
+int64 elapsedTime_ns(const timespec& begin, const timespec& end) {
+  return (end.tv_sec - begin.tv_sec) * 1000000000 +
+         (end.tv_nsec - begin.tv_nsec);
+}
+#endif
+
+static void TestLogPeriodically() {
+  fprintf(stderr, "==== Test log periodically\n");
+
+  LogTimeRecorder timeLogger;
+
+  GLOG_CONSTEXPR double LOG_PERIOD_SEC = LogTimes::LOG_PERIOD_NS * 1e-9;
+
+  while (timeLogger.m_streamTimes < LogTimes::MAX_CALLS) {
+      LOG_EVERY_T(INFO, LOG_PERIOD_SEC)
+          << timeLogger << "Timed Message #" << timeLogger.m_streamTimes;
+  }
+
+  // Calculate time between each call in nanoseconds for higher resolution to
+  // minimize error.
+  int64 nsBetweenCalls[LogTimes::MAX_CALLS - 1];
+  for (size_t i = 1; i < LogTimes::MAX_CALLS; ++i) {
+    nsBetweenCalls[i - 1] = elapsedTime_ns(
+            timeLogger.m_callTimes[i - 1], timeLogger.m_callTimes[i]);
+  }
+
+  for (size_t idx = 0; idx < LogTimes::MAX_CALLS - 1; ++idx) {
+    int64 time_ns = nsBetweenCalls[idx];
+    EXPECT_NEAR(time_ns, LogTimes::LOG_PERIOD_NS, LogTimes::LOG_PERIOD_TOL_NS);
+  }
+}
+
 _START_GOOGLE_NAMESPACE_
 namespace glog_internal_namespace_ {
 extern  // in logging.cc
@@ -968,7 +1214,7 @@
       // Normally this would be some more real/involved logging logic
       // where LOG() usage can't be eliminated,
       // e.g. pushing the message over with an RPC:
-      int messages_left = messages_.size();
+      size_t messages_left = messages_.size();
       mutex_.Unlock();
       SleepForMilliseconds(20);
       // May not use LOG while holding mutex_, because Buffer()
@@ -1008,16 +1254,17 @@
 
   virtual void send(LogSeverity severity, const char* /* full_filename */,
                     const char* base_filename, int line,
-                    const struct tm* tm_time,
+                    const LogMessageTime &logmsgtime,
                     const char* message, size_t message_len) {
     // Push it to Writer thread if we are the original logging thread.
     // Note: Something like ThreadLocalLogSink is a better choice
     //       to do thread-specific LogSink logic for real.
     if (pthread_equal(tid_, pthread_self())) {
       writer_.Buffer(ToString(severity, base_filename, line,
-                              tm_time, message, message_len));
+                              logmsgtime, message, message_len));
     }
   }
+
   virtual void WaitTillSent() {
     // Wait for Writer thread if we are the original logging thread.
     if (pthread_equal(tid_, pthread_self()))  writer_.Wait();
@@ -1032,6 +1279,9 @@
 // Check that LogSink::WaitTillSent can be used in the advertised way.
 // We also do golden-stderr comparison.
 static void TestLogSinkWaitTillSent() {
+  // Clear global_messages here to make sure that this test case can be
+  // reentered
+  global_messages.clear();
   { TestWaitingLogSink sink;
     // Sleeps give the sink threads time to do all their work,
     // so that we get a reliable log capture to compare to the golden file.
@@ -1058,7 +1308,7 @@
   CHECK_EQ(posix_strerror_r(errcode, buf, 0), -1);
   CHECK_EQ(buf[0], 'A');
   CHECK_EQ(posix_strerror_r(errcode, NULL, buf_size), -1);
-#if defined(OS_MACOSX) || defined(OS_FREEBSD) || defined(OS_OPENBSD)
+#if defined(GLOG_OS_MACOSX) || defined(GLOG_OS_FREEBSD) || defined(GLOG_OS_OPENBSD)
   // MacOSX or FreeBSD considers this case is an error since there is
   // no enough space.
   CHECK_EQ(posix_strerror_r(errcode, buf, 1), -1);
@@ -1075,23 +1325,24 @@
 
 // Simple routines to look at the sizes of generated code for LOG(FATAL) and
 // CHECK(..) via objdump
+/*
 static void MyFatal() {
   LOG(FATAL) << "Failed";
 }
 static void MyCheck(bool a, bool b) {
   CHECK_EQ(a, b);
 }
-
+*/
 #ifdef HAVE_LIB_GMOCK
 
 TEST(DVLog, Basic) {
   ScopedMockLog log;
 
-#if NDEBUG
+#if defined(NDEBUG)
   // We are expecting that nothing is logged.
   EXPECT_CALL(log, Log(_, _, _)).Times(0);
 #else
-  EXPECT_CALL(log, Log(INFO, __FILE__, "debug log"));
+  EXPECT_CALL(log, Log(GLOG_INFO, __FILE__, "debug log"));
 #endif
 
   FLAGS_v = 1;
@@ -1112,13 +1363,13 @@
   ScopedMockLog log;
 
   // The function version outputs "logging.h" as a file name.
-  EXPECT_CALL(log, Log(WARNING, StrNe(__FILE__), "function version"));
-  EXPECT_CALL(log, Log(INFO, __FILE__, "macro version"));
+  EXPECT_CALL(log, Log(GLOG_WARNING, StrNe(__FILE__), "function version"));
+  EXPECT_CALL(log, Log(GLOG_INFO, __FILE__, "macro version"));
 
-  int severity = WARNING;
+  int severity = GLOG_WARNING;
   LogAtLevel(severity, "function version");
 
-  severity = INFO;
+  severity = GLOG_INFO;
   // We can use the macro version as a C++ stream.
   LOG_AT_LEVEL(severity) << "macro" << ' ' << "version";
 }
@@ -1138,10 +1389,10 @@
     // LOG(DFATAL) has severity FATAL if debugging, but is
     // downgraded to ERROR if not debugging.
     const LogSeverity severity =
-#ifdef NDEBUG
-        ERROR;
+#if defined(NDEBUG)
+        GLOG_ERROR;
 #else
-        FATAL;
+        GLOG_FATAL;
 #endif
     EXPECT_CALL(log, Log(severity, __FILE__, "This should not be fatal"));
     LOG(DFATAL) << "This should not be fatal";
diff --git a/third_party/google-glog/src/logging_unittest.err b/third_party/google-glog/src/logging_unittest.err
index 2ecc1b0..21517cb 100644
--- a/third_party/google-glog/src/logging_unittest.err
+++ b/third_party/google-glog/src/logging_unittest.err
@@ -1,307 +1,308 @@
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=2 logtostderr=0 alsologtostderr=0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=2 logtostderr=0 alsologtostderr=0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
 WARNING: Logging before InitGoogleLogging() is written to STDERR
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=0 logtostderr=0 alsologtostderr=0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] foo bar 10 3.4
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 1: __SUCCESS__ [0]
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 3, iteration 1
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 4, iteration 1
-WDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 5, iteration 1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 1
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Log if less than 3 every 2, iteration 1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 2
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 3: __ENOENT__ [2]
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 3
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Log if less than 3 every 2, iteration 3
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 3, iteration 4
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 4
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 5: __EINTR__ [4]
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 4, iteration 5
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 5
-WDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 5, iteration 6
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 6
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 7: __ENXIO__ [6]
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 3, iteration 7
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 7
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 8
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 9: __ENOEXEC__ [8]
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 4, iteration 9
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 9
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 3, iteration 10
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 10
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if this
-IDATE TIME__ THREADID logging_unittest.cc:LINE] array
-IDATE TIME__ THREADID logging_unittest.cc:LINE] const array
-EDATE TIME__ THREADID logging_unittest.cc:LINE] foo 1000 0000001000 3e8
-EDATE TIME__ THREADID logging_unittest.cc:LINE] inner
-EDATE TIME__ THREADID logging_unittest.cc:LINE] outer
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=0 logtostderr=0 alsologtostderr=0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] foo bar 10 3.4
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 1: __SUCCESS__ [0]
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 3, iteration 1
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 4, iteration 1
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 5, iteration 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 1
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log if less than 3 every 2, iteration 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 2
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 3: __ENOENT__ [2]
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 3
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log if less than 3 every 2, iteration 3
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 3, iteration 4
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 4
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 5: __EINTR__ [4]
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 4, iteration 5
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 5
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 5, iteration 6
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 6
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 7: __ENXIO__ [6]
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 3, iteration 7
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 7
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 8
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 9: __ENOEXEC__ [8]
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 4, iteration 9
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 9
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 3, iteration 10
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 10
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if this
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] array
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] const array
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] foo 1000       1000 3e8
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] foo          1
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] inner
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] outer
 no prefix
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: foo bar 10 3.400000
-WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: array
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: const array
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: ptr __PTRTEST__
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: ptr __NULLP__
-EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: foo 1000 0000001000 3e8
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: foo 1000
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: foo 1000
-WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: RAW_LOG ERROR: The Message was too long!
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: RAW_LOG ERROR: The Message was too long!
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0 on
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 1 on
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 2 on
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=0 logtostderr=0 alsologtostderr=0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=1 stderrthreshold=0 logtostderr=0 alsologtostderr=0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=-1 stderrthreshold=0 logtostderr=0 alsologtostderr=0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=1 logtostderr=0 alsologtostderr=0
-WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log error
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=2 logtostderr=0 alsologtostderr=0
-EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log error
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=3 logtostderr=0 alsologtostderr=0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=3 logtostderr=1 alsologtostderr=0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=3 logtostderr=0 alsologtostderr=1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=1 stderrthreshold=1 logtostderr=0 alsologtostderr=0
-WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log error
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=1 stderrthreshold=3 logtostderr=0 alsologtostderr=1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
-EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
-IDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_STRING: reported info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_STRING: reported warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_STRING: reported error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_STRING:  LOG_STRING: collected info
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_STRING:  LOG_STRING: collected warning
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_STRING:  LOG_STRING: collected error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: reported info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: reported warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: reported error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_TO_SINK:
-IDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK_BUT_NOT_TO_LOGFILE: collected info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK_BUT_NOT_TO_LOGFILE: collected warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK_BUT_NOT_TO_LOGFILE: collected error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: collected info
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_TO_STRING:  LOG_TO_STRING: collected info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: collected warning
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_TO_STRING:  LOG_TO_STRING: collected warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: collected error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_TO_STRING:  LOG_TO_STRING: collected error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: reported info
-WDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: reported warning
-EDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: reported error
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Message 1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffering
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffered
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waiting
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Sink got a messages
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waited
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Sink is sending out a message: IDATE TIME__ THREADID logging_unittest.cc:LINE] Message 1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Have 0 left
-EDATE TIME__ THREADID logging_unittest.cc:LINE] Message 2
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffering
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffered
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waiting
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Sink got a messages
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waited
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Sink is sending out a message: EDATE TIME__ THREADID logging_unittest.cc:LINE] Message 2
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Have 0 left
-WDATE TIME__ THREADID logging_unittest.cc:LINE] Message 3
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffering
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffered
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waiting
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Sink got a messages
-IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waited
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Sink is sending out a message: WDATE TIME__ THREADID logging_unittest.cc:LINE] Message 3
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Have 0 left
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Sink capture: IDATE TIME__ THREADID logging_unittest.cc:LINE] Message 1
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Sink capture: EDATE TIME__ THREADID logging_unittest.cc:LINE] Message 2
-IDATE TIME__ THREADID logging_unittest.cc:LINE] Sink capture: WDATE TIME__ THREADID logging_unittest.cc:LINE] Message 3
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: foo bar 10 3.400000
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: array
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: const array
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: ptr __PTRTEST__
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: ptr __NULLP__
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: foo 1000 0000001000 3e8
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: foo 1000
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: foo 1000
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: RAW_LOG ERROR: The Message was too long!
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: RAW_LOG ERROR: The Message was too long!
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0 on
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 1 on
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 2 on
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=0 logtostderr=0 alsologtostderr=0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=1 stderrthreshold=0 logtostderr=0 alsologtostderr=0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=-1 stderrthreshold=0 logtostderr=0 alsologtostderr=0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=1 logtostderr=0 alsologtostderr=0
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log error
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=2 logtostderr=0 alsologtostderr=0
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log error
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=3 logtostderr=0 alsologtostderr=0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=3 logtostderr=1 alsologtostderr=0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=3 logtostderr=0 alsologtostderr=1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=1 stderrthreshold=1 logtostderr=0 alsologtostderr=0
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log error
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=1 stderrthreshold=3 logtostderr=0 alsologtostderr=1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_STRING: reported info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_STRING: reported warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_STRING: reported error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_STRING:  LOG_STRING: collected info
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_STRING:  LOG_STRING: collected warning
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_STRING:  LOG_STRING: collected error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: reported info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: reported warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: reported error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_TO_SINK:
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK_BUT_NOT_TO_LOGFILE: collected info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK_BUT_NOT_TO_LOGFILE: collected warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK_BUT_NOT_TO_LOGFILE: collected error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: collected info
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_TO_STRING:  LOG_TO_STRING: collected info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: collected warning
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_TO_STRING:  LOG_TO_STRING: collected warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: collected error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_TO_STRING:  LOG_TO_STRING: collected error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: reported info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: reported warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: reported error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffering
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffered
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waiting
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Sink got a messages
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waited
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Sink is sending out a message: IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Have 0 left
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 2
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffering
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffered
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waiting
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Sink got a messages
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waited
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Sink is sending out a message: EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 2
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Have 0 left
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 3
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffering
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffered
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waiting
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Sink got a messages
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waited
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Sink is sending out a message: WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 3
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Have 0 left
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Sink capture: IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Sink capture: EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 2
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Sink capture: WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 3
diff --git a/third_party/google-glog/src/logging_unittest.out b/third_party/google-glog/src/logging_unittest.out
new file mode 100644
index 0000000..18795e1
--- /dev/null
+++ b/third_party/google-glog/src/logging_unittest.out
@@ -0,0 +1,150 @@
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log info
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log info
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_STRING: reported info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_STRING: reported warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_STRING: reported error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_STRING:  LOG_STRING: collected info
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_STRING:  LOG_STRING: collected warning
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_STRING:  LOG_STRING: collected error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: reported info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: reported warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: reported error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_TO_SINK:
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK_BUT_NOT_TO_LOGFILE: collected info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK_BUT_NOT_TO_LOGFILE: collected warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK_BUT_NOT_TO_LOGFILE: collected error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: collected info
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_TO_STRING:  LOG_TO_STRING: collected info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: collected warning
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_TO_STRING:  LOG_TO_STRING: collected warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: collected error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_TO_STRING:  LOG_TO_STRING: collected error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: reported info
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: reported warning
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: reported error
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Sink is sending out a message: IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Have 0 left
+EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 2
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Sink is sending out a message: EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 2
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Have 0 left
+WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 3
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Sink is sending out a message: WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 3
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Have 0 left
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Sink capture: IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 1
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Sink capture: EYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 2
+IYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Sink capture: WYEARDATE TIME__ THREADID logging_unittest.cc:LINE] Message 3
diff --git a/third_party/google-glog/src/mock-log.h b/third_party/google-glog/src/mock-log.h
index 30a0f74..bdfb3c5 100644
--- a/third_party/google-glog/src/mock-log.h
+++ b/third_party/google-glog/src/mock-log.h
@@ -42,7 +42,7 @@
 
 #include <gmock/gmock.h>
 
-#include "glog/logging.h"
+#include <glog/logging.h>
 
 _START_GOOGLE_NAMESPACE_
 namespace glog_testing {
@@ -72,7 +72,7 @@
   ScopedMockLog() { AddLogSink(this); }
 
   // When the object is destructed, it stops intercepting logs.
-  virtual ~ScopedMockLog() { RemoveLogSink(this); }
+  ~ScopedMockLog() { RemoveLogSink(this); }
 
   // Implements the mock method:
   //
@@ -116,7 +116,7 @@
   virtual void send(GOOGLE_NAMESPACE::LogSeverity severity,
                     const char* full_filename,
                     const char* /*base_filename*/, int /*line*/,
-                    const tm* /*tm_time*/,
+                    const LogMessageTime & /*logmsgtime*/,
                     const char* message, size_t message_len) {
     // We are only interested in the log severity, full file name, and
     // log message.
diff --git a/third_party/google-glog/src/mock-log_test.cc b/third_party/google-glog/src/mock-log_test.cc
deleted file mode 100644
index 7d58a30..0000000
--- a/third_party/google-glog/src/mock-log_test.cc
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright (c) 2007, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Author: Zhanyong Wan
-
-// Tests the ScopedMockLog class.
-
-#include "mock-log.h"
-
-#include <string>
-
-#include <gmock/gmock.h>
-#include <gtest/gtest.h>
-
-namespace {
-
-using GOOGLE_NAMESPACE::INFO;
-using GOOGLE_NAMESPACE::WARNING;
-using GOOGLE_NAMESPACE::ERROR;
-using GOOGLE_NAMESPACE::glog_testing::ScopedMockLog;
-using std::string;
-using testing::_;
-using testing::HasSubstr;
-using testing::InSequence;
-using testing::InvokeWithoutArgs;
-
-// Tests that ScopedMockLog intercepts LOG()s when it's alive.
-TEST(ScopedMockLogTest, InterceptsLog) {
-  ScopedMockLog log;
-
-  InSequence s;
-  EXPECT_CALL(log, Log(WARNING, HasSubstr("/mock-log_test.cc"), "Fishy."));
-  EXPECT_CALL(log, Log(INFO, _, "Working..."))
-      .Times(2);
-  EXPECT_CALL(log, Log(ERROR, _, "Bad!!"));
-
-  LOG(WARNING) << "Fishy.";
-  LOG(INFO) << "Working...";
-  LOG(INFO) << "Working...";
-  LOG(ERROR) << "Bad!!";
-}
-
-void LogBranch() {
-  LOG(INFO) << "Logging a branch...";
-}
-
-void LogTree() {
-  LOG(INFO) << "Logging the whole tree...";
-}
-
-void LogForest() {
-  LOG(INFO) << "Logging the entire forest.";
-  LOG(INFO) << "Logging the entire forest..";
-  LOG(INFO) << "Logging the entire forest...";
-}
-
-// The purpose of the following test is to verify that intercepting logging
-// continues to work properly if a LOG statement is executed within the scope
-// of a mocked call.
-TEST(ScopedMockLogTest, LogDuringIntercept) {
-  ScopedMockLog log;
-  InSequence s;
-  EXPECT_CALL(log, Log(INFO, __FILE__, "Logging a branch..."))
-      .WillOnce(InvokeWithoutArgs(LogTree));
-  EXPECT_CALL(log, Log(INFO, __FILE__, "Logging the whole tree..."))
-      .WillOnce(InvokeWithoutArgs(LogForest));
-  EXPECT_CALL(log, Log(INFO, __FILE__, "Logging the entire forest."));
-  EXPECT_CALL(log, Log(INFO, __FILE__, "Logging the entire forest.."));
-  EXPECT_CALL(log, Log(INFO, __FILE__, "Logging the entire forest..."));
-  LogBranch();
-}
-
-}  // namespace
-
-int main(int argc, char **argv) {
-  GOOGLE_NAMESPACE::InitGoogleLogging(argv[0]);
-  testing::InitGoogleMock(&argc, argv);
-
-  return RUN_ALL_TESTS();
-}
diff --git a/third_party/google-glog/src/mock-log_unittest.cc b/third_party/google-glog/src/mock-log_unittest.cc
new file mode 100644
index 0000000..b9bef4e
--- /dev/null
+++ b/third_party/google-glog/src/mock-log_unittest.cc
@@ -0,0 +1,108 @@
+// Copyright (c) 2022, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: Zhanyong Wan
+
+// Tests the ScopedMockLog class.
+
+#include "mock-log.h"
+
+#include <string>
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+
+namespace {
+
+using GOOGLE_NAMESPACE::GLOG_ERROR;
+using GOOGLE_NAMESPACE::GLOG_INFO;
+using GOOGLE_NAMESPACE::GLOG_WARNING;
+using GOOGLE_NAMESPACE::glog_testing::ScopedMockLog;
+using std::string;
+using testing::_;
+using testing::EndsWith;
+using testing::InSequence;
+using testing::InvokeWithoutArgs;
+
+// Tests that ScopedMockLog intercepts LOG()s when it's alive.
+TEST(ScopedMockLogTest, InterceptsLog) {
+  ScopedMockLog log;
+
+  InSequence s;
+  EXPECT_CALL(log,
+              Log(GLOG_WARNING, EndsWith("mock-log_unittest.cc"), "Fishy."));
+  EXPECT_CALL(log, Log(GLOG_INFO, _, "Working..."))
+      .Times(2);
+  EXPECT_CALL(log, Log(GLOG_ERROR, _, "Bad!!"));
+
+  LOG(WARNING) << "Fishy.";
+  LOG(INFO) << "Working...";
+  LOG(INFO) << "Working...";
+  LOG(ERROR) << "Bad!!";
+}
+
+void LogBranch() {
+  LOG(INFO) << "Logging a branch...";
+}
+
+void LogTree() {
+  LOG(INFO) << "Logging the whole tree...";
+}
+
+void LogForest() {
+  LOG(INFO) << "Logging the entire forest.";
+  LOG(INFO) << "Logging the entire forest..";
+  LOG(INFO) << "Logging the entire forest...";
+}
+
+// The purpose of the following test is to verify that intercepting logging
+// continues to work properly if a LOG statement is executed within the scope
+// of a mocked call.
+TEST(ScopedMockLogTest, LogDuringIntercept) {
+  ScopedMockLog log;
+  InSequence s;
+  EXPECT_CALL(log, Log(GLOG_INFO, __FILE__, "Logging a branch..."))
+      .WillOnce(InvokeWithoutArgs(LogTree));
+  EXPECT_CALL(log, Log(GLOG_INFO, __FILE__, "Logging the whole tree..."))
+      .WillOnce(InvokeWithoutArgs(LogForest));
+  EXPECT_CALL(log, Log(GLOG_INFO, __FILE__, "Logging the entire forest."));
+  EXPECT_CALL(log, Log(GLOG_INFO, __FILE__, "Logging the entire forest.."));
+  EXPECT_CALL(log, Log(GLOG_INFO, __FILE__, "Logging the entire forest..."));
+  LogBranch();
+}
+
+}  // namespace
+
+int main(int argc, char **argv) {
+  GOOGLE_NAMESPACE::InitGoogleLogging(argv[0]);
+  testing::InitGoogleTest(&argc, argv);
+  testing::InitGoogleMock(&argc, argv);
+
+  return RUN_ALL_TESTS();
+}
diff --git a/third_party/google-glog/src/package_config_unittest/working_config/CMakeLists.txt b/third_party/google-glog/src/package_config_unittest/working_config/CMakeLists.txt
new file mode 100644
index 0000000..5fcfe7f
--- /dev/null
+++ b/third_party/google-glog/src/package_config_unittest/working_config/CMakeLists.txt
@@ -0,0 +1,8 @@
+cmake_minimum_required (VERSION 3.16)
+project (glog_package_config LANGUAGES CXX)
+
+find_package (glog REQUIRED NO_MODULE)
+
+add_executable (glog_package_config glog_package_config.cc)
+
+target_link_libraries (glog_package_config PRIVATE glog::glog)
diff --git a/third_party/google-glog/src/package_config_unittest/working_config/glog_package_config.cc b/third_party/google-glog/src/package_config_unittest/working_config/glog_package_config.cc
new file mode 100644
index 0000000..b7b5cf6
--- /dev/null
+++ b/third_party/google-glog/src/package_config_unittest/working_config/glog_package_config.cc
@@ -0,0 +1,6 @@
+#include <glog/logging.h>
+
+int main(int /*argc*/, char** argv)
+{
+    google::InitGoogleLogging(argv[0]);
+}
diff --git a/third_party/google-glog/src/raw_logging.cc b/third_party/google-glog/src/raw_logging.cc
index efe6e7d..be02981 100644
--- a/third_party/google-glog/src/raw_logging.cc
+++ b/third_party/google-glog/src/raw_logging.cc
@@ -34,16 +34,16 @@
 #include "utilities.h"
 
 #include <stdarg.h>
-#include <stdio.h>
-#include <errno.h>
+#include <cstdio>
+#include <cerrno>
 #ifdef HAVE_UNISTD_H
 # include <unistd.h>               // for close() and write()
 #endif
 #include <fcntl.h>                 // for open()
-#include <time.h>
+#include <ctime>
 #include "config.h"
-#include "glog/logging.h"          // To pick up flag settings etc.
-#include "glog/raw_logging.h"
+#include <glog/logging.h>          // To pick up flag settings etc.
+#include <glog/raw_logging.h>
 #include "base/commandlineflags.h"
 
 #ifdef HAVE_STACKTRACE
@@ -59,11 +59,12 @@
 # include <unistd.h>
 #endif
 
-#if defined(HAVE_SYSCALL_H) || defined(HAVE_SYS_SYSCALL_H)
-# define safe_write(fd, s, len)  syscall(SYS_write, fd, s, len)
+#if (defined(HAVE_SYSCALL_H) || defined(HAVE_SYS_SYSCALL_H)) && \
+    (!(defined(GLOG_OS_MACOSX))) && !defined(GLOG_OS_EMSCRIPTEN)
+#define safe_write(fd, s, len) syscall(SYS_write, fd, s, len)
 #else
-  // Not so safe, but what can you do?
-# define safe_write(fd, s, len)  write(fd, s, len)
+// Not so safe, but what can you do?
+#define safe_write(fd, s, len) write(fd, s, len)
 #endif
 
 namespace aos {
@@ -78,16 +79,15 @@
 
 _START_GOOGLE_NAMESPACE_
 
-// Data for RawLog__ below. We simply pick up the latest
-// time data created by a normal log message to avoid calling
-// localtime_r which can allocate memory.
-static struct ::tm last_tm_time_for_raw_log;
-static int last_usecs_for_raw_log;
-
-void RawLog__SetLastTime(const struct ::tm& t, int usecs) {
-  memcpy(&last_tm_time_for_raw_log, &t, sizeof(last_tm_time_for_raw_log));
-  last_usecs_for_raw_log = usecs;
-}
+#if defined(__GNUC__)
+#define GLOG_ATTRIBUTE_FORMAT(archetype, stringIndex, firstToCheck) \
+  __attribute__((format(archetype, stringIndex, firstToCheck)))
+#define GLOG_ATTRIBUTE_FORMAT_ARG(stringIndex) \
+  __attribute__((format_arg(stringIndex)))
+#else
+#define GLOG_ATTRIBUTE_FORMAT(archetype, stringIndex, firstToCheck)
+#define GLOG_ATTRIBUTE_FORMAT_ARG(stringIndex)
+#endif
 
 // CAVEAT: vsnprintf called from *DoRawLog below has some (exotic) code paths
 // that invoke malloc() and getenv() that might acquire some locks.
@@ -97,23 +97,31 @@
 // Helper for RawLog__ below.
 // *DoRawLog writes to *buf of *size and move them past the written portion.
 // It returns true iff there was no overflow or error.
-static bool DoRawLog(char** buf, int* size, const char* format, ...) {
+GLOG_ATTRIBUTE_FORMAT(printf, 3, 4)
+static bool DoRawLog(char** buf, size_t* size, const char* format, ...) {
   va_list ap;
   va_start(ap, format);
   int n = vsnprintf(*buf, *size, format, ap);
   va_end(ap);
-  if (n < 0 || n > *size) return false;
-  *size -= n;
+  if (n < 0 || static_cast<size_t>(n) > *size) return false;
+  *size -= static_cast<size_t>(n);
   *buf += n;
   return true;
 }
 
 // Helper for RawLog__ below.
-inline static bool VADoRawLog(char** buf, int* size,
+inline static bool VADoRawLog(char** buf, size_t* size,
                               const char* format, va_list ap) {
+#if defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wformat-nonliteral"
+#endif
   int n = vsnprintf(*buf, *size, format, ap);
-  if (n < 0 || n > *size) return false;
-  *size -= n;
+#if defined(__GNUC__)
+#pragma GCC diagnostic pop
+#endif
+  if (n < 0 || static_cast<size_t>(n) > *size) return false;
+  *size -= static_cast<size_t>(n);
   *buf += n;
   return true;
 }
@@ -123,29 +131,28 @@
 static CrashReason crash_reason;
 static char crash_buf[kLogBufSize + 1] = { 0 };  // Will end in '\0'
 
+GLOG_ATTRIBUTE_FORMAT(printf, 4, 5)
 void RawLog__(LogSeverity severity, const char* file, int line,
               const char* format, ...) {
-  if (!(FLAGS_logtostderr || severity >= FLAGS_stderrthreshold ||
-        FLAGS_alsologtostderr || !IsGoogleLoggingInitialized())) {
+  if (!(FLAGS_logtostdout || FLAGS_logtostderr ||
+        severity >= FLAGS_stderrthreshold || FLAGS_alsologtostderr ||
+        !IsGoogleLoggingInitialized())) {
     return;  // this stderr log message is suppressed
   }
   // can't call localtime_r here: it can allocate
-  struct ::tm& t = last_tm_time_for_raw_log;
   char buffer[kLogBufSize];
   char* buf = buffer;
-  int size = sizeof(buffer);
+  size_t size = sizeof(buffer);
 
   // NOTE: this format should match the specification in base/logging.h
-  DoRawLog(&buf, &size, "%c%02d%02d %02d:%02d:%02d.%06d %5u %s:%d] RAW: ",
+  DoRawLog(&buf, &size, "%c00000000 00:00:00.000000 %5u %s:%d] RAW: ",
            LogSeverityNames[severity][0],
-           1 + t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec,
-           last_usecs_for_raw_log,
            static_cast<unsigned int>(GetTID()),
            const_basename(const_cast<char *>(file)), line);
 
   // Record the position and size of the buffer after the prefix
   const char* msg_start = buf;
-  const int msg_size = size;
+  const size_t msg_size = size;
 
   va_list ap;
   va_start(ap, format);
diff --git a/third_party/google-glog/src/signalhandler.cc b/third_party/google-glog/src/signalhandler.cc
index 768d72f..5e43fa3 100644
--- a/third_party/google-glog/src/signalhandler.cc
+++ b/third_party/google-glog/src/signalhandler.cc
@@ -34,10 +34,10 @@
 #include "utilities.h"
 #include "stacktrace.h"
 #include "symbolize.h"
-#include "glog/logging.h"
+#include <glog/logging.h>
 
-#include <signal.h>
-#include <time.h>
+#include <csignal>
+#include <ctime>
 #ifdef HAVE_UCONTEXT_H
 # include <ucontext.h>
 #endif
@@ -73,7 +73,7 @@
   { SIGILL, "SIGILL" },
   { SIGFPE, "SIGFPE" },
   { SIGABRT, "SIGABRT" },
-#if !defined(OS_WINDOWS)
+#if !defined(GLOG_OS_WINDOWS)
   { SIGBUS, "SIGBUS" },
 #endif
   { SIGTERM, "SIGTERM" },
@@ -81,6 +81,7 @@
 
 static bool kFailureSignalHandlerInstalled = false;
 
+#if !defined(GLOG_OS_WINDOWS)
 // Returns the program counter from signal context, NULL if unknown.
 void* GetPC(void* ucontext_in_void) {
 #if (defined(HAVE_UCONTEXT_H) || defined(HAVE_SYS_UCONTEXT_H)) && defined(PC_FROM_UCONTEXT)
@@ -93,23 +94,24 @@
 #endif
   return NULL;
 }
+#endif
 
 // The class is used for formatting error messages.  We don't use printf()
 // as it's not async signal safe.
 class MinimalFormatter {
  public:
-  MinimalFormatter(char *buffer, int size)
+  MinimalFormatter(char *buffer, size_t size)
       : buffer_(buffer),
         cursor_(buffer),
         end_(buffer + size) {
   }
 
   // Returns the number of bytes written in the buffer.
-  int num_bytes_written() const { return (int) (cursor_ - buffer_); }
+  std::size_t num_bytes_written() const { return static_cast<std::size_t>(cursor_ - buffer_); }
 
   // Appends string from "str" and updates the internal cursor.
   void AppendString(const char* str) {
-    int i = 0;
+    ptrdiff_t i = 0;
     while (str[i] != '\0' && cursor_ + i < end_) {
       cursor_[i] = str[i];
       ++i;
@@ -119,12 +121,12 @@
 
   // Formats "number" in "radix" and updates the internal cursor.
   // Lowercase letters are used for 'a' - 'z'.
-  void AppendUint64(uint64 number, int radix) {
-    int i = 0;
+  void AppendUint64(uint64 number, unsigned radix) {
+    unsigned i = 0;
     while (cursor_ + i < end_) {
-      const int tmp = number % radix;
+      const uint64 tmp = number % radix;
       number /= radix;
-      cursor_[i] = (tmp < 10 ? '0' + tmp : 'a' + tmp - 10);
+      cursor_[i] = static_cast<char>(tmp < 10 ? '0' + tmp : 'a' + tmp - 10);
       ++i;
       if (number == 0) {
         break;
@@ -157,14 +159,14 @@
 };
 
 // Writes the given data with the size to the standard error.
-void WriteToStderr(const char* data, int size) {
+void WriteToStderr(const char* data, size_t size) {
   if (write(STDERR_FILENO, data, size) < 0) {
     // Ignore errors.
   }
 }
 
 // The writer function can be changed by InstallFailureWriter().
-void (*g_failure_writer)(const char* data, int size) = WriteToStderr;
+void (*g_failure_writer)(const char* data, size_t size) = WriteToStderr;
 
 // Dumps time information.  We don't dump human-readable time information
 // as localtime() is not guaranteed to be async signal safe.
@@ -173,16 +175,16 @@
   char buf[256];  // Big enough for time info.
   MinimalFormatter formatter(buf, sizeof(buf));
   formatter.AppendString("*** Aborted at ");
-  formatter.AppendUint64(time_in_sec, 10);
+  formatter.AppendUint64(static_cast<uint64>(time_in_sec), 10);
   formatter.AppendString(" (unix time)");
   formatter.AppendString(" try \"date -d @");
-  formatter.AppendUint64(time_in_sec, 10);
+  formatter.AppendUint64(static_cast<uint64>(time_in_sec), 10);
   formatter.AppendString("\" if you are using GNU date ***\n");
   g_failure_writer(buf, formatter.num_bytes_written());
 }
 
-// TOOD(hamaji): Use signal instead of sigaction?
-#ifdef HAVE_SIGACTION
+// TODO(hamaji): Use signal instead of sigaction?
+#if defined(HAVE_STACKTRACE) && defined(HAVE_SIGACTION)
 
 // Dumps information about the signal to STDERR.
 void DumpSignalInfo(int signal_number, siginfo_t *siginfo) {
@@ -204,25 +206,26 @@
     // Use the signal number if the name is unknown.  The signal name
     // should be known, but just in case.
     formatter.AppendString("Signal ");
-    formatter.AppendUint64(signal_number, 10);
+    formatter.AppendUint64(static_cast<uint64>(signal_number), 10);
   }
   formatter.AppendString(" (@0x");
   formatter.AppendUint64(reinterpret_cast<uintptr_t>(siginfo->si_addr), 16);
   formatter.AppendString(")");
   formatter.AppendString(" received by PID ");
-  formatter.AppendUint64(getpid(), 10);
+  formatter.AppendUint64(static_cast<uint64>(getpid()), 10);
   formatter.AppendString(" (TID 0x");
   // We assume pthread_t is an integral number or a pointer, rather
   // than a complex struct.  In some environments, pthread_self()
   // returns an uint64 but in some other environments pthread_self()
-  // returns a pointer.  Hence we use C-style cast here, rather than
-  // reinterpret/static_cast, to support both types of environments.
-  formatter.AppendUint64((uintptr_t)pthread_self(), 16);
+  // returns a pointer.
+  pthread_t id = pthread_self();
+  formatter.AppendUint64(
+      reinterpret_cast<uint64>(reinterpret_cast<const char*>(id)), 16);
   formatter.AppendString(") ");
   // Only linux has the PID of the signal sender in si_pid.
-#ifdef OS_LINUX
+#ifdef GLOG_OS_LINUX
   formatter.AppendString("from PID ");
-  formatter.AppendUint64(siginfo->si_pid, 10);
+  formatter.AppendUint64(static_cast<uint64>(siginfo->si_pid), 10);
   formatter.AppendString("; ");
 #endif
   formatter.AppendString("stack trace: ***\n");
@@ -265,7 +268,7 @@
   sig_action.sa_handler = SIG_DFL;
   sigaction(signal_number, &sig_action, NULL);
   kill(getpid(), signal_number);
-#elif defined(OS_WINDOWS)
+#elif defined(GLOG_OS_WINDOWS)
   signal(signal_number, SIG_DFL);
   raise(signal_number);
 #endif
@@ -279,7 +282,7 @@
 
 // Dumps signal and stack frame information, and invokes the default
 // signal handler once our job is done.
-#if defined(OS_WINDOWS)
+#if defined(GLOG_OS_WINDOWS)
 void FailureSignalHandler(int signal_number)
 #else
 void FailureSignalHandler(int signal_number,
@@ -328,7 +331,7 @@
   // First dump time info.
   DumpTimeInfo();
 
-#if !defined(OS_WINDOWS)
+#if !defined(GLOG_OS_WINDOWS)
   // Get the program counter from ucontext.
   void *pc = GetPC(ucontext);
   DumpStackFrameInfo("PC: ", pc);
@@ -343,14 +346,14 @@
   const int depth = GetStackTrace(stack, ARRAYSIZE(stack), 1);
 # ifdef HAVE_SIGACTION
   DumpSignalInfo(signal_number, signal_info);
-# else
+#elif !defined(GLOG_OS_WINDOWS)
   (void)signal_info;
 # endif
   // Dump the stack traces.
   for (int i = 0; i < depth; ++i) {
     DumpStackFrameInfo("    ", stack[i]);
   }
-#else
+#elif !defined(GLOG_OS_WINDOWS)
   (void)signal_info;
 #endif
 
@@ -382,9 +385,10 @@
   memset(&sig_action, 0, sizeof(sig_action));
   sigemptyset(&sig_action.sa_mask);
   sigaction(SIGABRT, NULL, &sig_action);
-  if (sig_action.sa_sigaction == &FailureSignalHandler)
+  if (sig_action.sa_sigaction == &FailureSignalHandler) {
     return true;
-#elif defined(OS_WINDOWS)
+  }
+#elif defined(GLOG_OS_WINDOWS)
   return kFailureSignalHandlerInstalled;
 #endif  // HAVE_SIGACTION
   return false;
@@ -405,7 +409,7 @@
     CHECK_ERR(sigaction(kFailureSignals[i].number, &sig_action, NULL));
   }
   kFailureSignalHandlerInstalled = true;
-#elif defined(OS_WINDOWS)
+#elif defined(GLOG_OS_WINDOWS)
   for (size_t i = 0; i < ARRAYSIZE(kFailureSignals); ++i) {
     CHECK_NE(signal(kFailureSignals[i].number, &FailureSignalHandler),
              SIG_ERR);
@@ -414,8 +418,8 @@
 #endif  // HAVE_SIGACTION
 }
 
-void InstallFailureWriter(void (*writer)(const char* data, int size)) {
-#if defined(HAVE_SIGACTION) || defined(OS_WINDOWS)
+void InstallFailureWriter(void (*writer)(const char* data, size_t size)) {
+#if defined(HAVE_SIGACTION) || defined(GLOG_OS_WINDOWS)
   g_failure_writer = writer;
 #endif  // HAVE_SIGACTION
 }
diff --git a/third_party/google-glog/src/signalhandler_unittest.cc b/third_party/google-glog/src/signalhandler_unittest.cc
index 36d957b..c4c99cc 100644
--- a/third_party/google-glog/src/signalhandler_unittest.cc
+++ b/third_party/google-glog/src/signalhandler_unittest.cc
@@ -37,11 +37,11 @@
 #if defined(HAVE_PTHREAD)
 # include <pthread.h>
 #endif
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
+#include <csignal>
+#include <cstdio>
+#include <cstdlib>
 #include <string>
-#include "glog/logging.h"
+#include <glog/logging.h>
 
 #ifdef HAVE_LIB_GFLAGS
 #include <gflags/gflags.h>
@@ -54,9 +54,10 @@
   // We assume pthread_t is an integral number or a pointer, rather
   // than a complex struct.  In some environments, pthread_self()
   // returns an uint64 but in some other environments pthread_self()
-  // returns a pointer.  Hence we use C-style cast here, rather than
-  // reinterpret/static_cast, to support both types of environments.
-  fprintf(stderr, "0x%lx is dying\n", (long)pthread_self());
+  // returns a pointer.
+  fprintf(
+      stderr, "0x%px is dying\n",
+      static_cast<const void*>(reinterpret_cast<const char*>(pthread_self())));
   // Use volatile to prevent from these to be optimized away.
   volatile int a = 0;
   volatile int b = 1 / a;
@@ -64,7 +65,7 @@
   return NULL;
 }
 
-static void WriteToStdout(const char* data, int size) {
+static void WriteToStdout(const char* data, size_t size) {
   if (write(STDOUT_FILENO, data, size) < 0) {
     // Ignore errors.
   }
diff --git a/third_party/google-glog/src/stacktrace.h b/third_party/google-glog/src/stacktrace.h
index cb64b33..55b98b2 100644
--- a/third_party/google-glog/src/stacktrace.h
+++ b/third_party/google-glog/src/stacktrace.h
@@ -34,7 +34,7 @@
 #define BASE_STACKTRACE_H_
 
 #include "config.h"
-#include "glog/logging.h"
+#include <glog/logging.h>
 
 _START_GOOGLE_NAMESPACE_
 
@@ -54,7 +54,7 @@
 //           ....       ...
 //
 // "result" must not be NULL.
-GOOGLE_GLOG_DLL_DECL int GetStackTrace(void** result, int max_depth, int skip_count);
+GLOG_EXPORT int GetStackTrace(void** result, int max_depth, int skip_count);
 
 _END_GOOGLE_NAMESPACE_
 
diff --git a/third_party/google-glog/src/stacktrace_generic-inl.h b/third_party/google-glog/src/stacktrace_generic-inl.h
index fad81d3..96397d0 100644
--- a/third_party/google-glog/src/stacktrace_generic-inl.h
+++ b/third_party/google-glog/src/stacktrace_generic-inl.h
@@ -46,12 +46,15 @@
   size = backtrace(stack, kStackLength);
   skip_count++;  // we want to skip the current frame as well
   int result_count = size - skip_count;
-  if (result_count < 0)
+  if (result_count < 0) {
     result_count = 0;
-  if (result_count > max_depth)
+  }
+  if (result_count > max_depth) {
     result_count = max_depth;
-  for (int i = 0; i < result_count; i++)
+  }
+  for (int i = 0; i < result_count; i++) {
     result[i] = stack[i + skip_count];
+  }
 
   return result_count;
 }
diff --git a/third_party/google-glog/src/stacktrace_libunwind-inl.h b/third_party/google-glog/src/stacktrace_libunwind-inl.h
index 0dc14c6..0b20d23 100644
--- a/third_party/google-glog/src/stacktrace_libunwind-inl.h
+++ b/third_party/google-glog/src/stacktrace_libunwind-inl.h
@@ -37,7 +37,7 @@
 #define UNW_LOCAL_ONLY
 #include <libunwind.h>
 }
-#include "glog/raw_logging.h"
+#include <glog/raw_logging.h>
 #include "stacktrace.h"
 
 _START_GOOGLE_NAMESPACE_
@@ -49,7 +49,9 @@
 // recursive request, we'd end up with infinite recursion or deadlock.
 // Luckily, it's safe to ignore those subsequent traces.  In such
 // cases, we return 0 to indicate the situation.
-static bool g_now_entering = false;
+// We can use the GCC __thread syntax here since libunwind is not supported on
+// Windows.
+static __thread bool g_tl_entered; // Initialized to false.
 
 // If you change this function, also change GetStackFrames below.
 int GetStackTrace(void** result, int max_depth, int skip_count) {
@@ -58,29 +60,33 @@
   unw_cursor_t cursor;
   unw_context_t uc;
 
-  if (sync_val_compare_and_swap(&g_now_entering, false, true)) {
+  if (g_tl_entered) {
     return 0;
   }
+  g_tl_entered = true;
 
   unw_getcontext(&uc);
   RAW_CHECK(unw_init_local(&cursor, &uc) >= 0, "unw_init_local failed");
   skip_count++;         // Do not include the "GetStackTrace" frame
 
   while (n < max_depth) {
-    int ret = unw_get_reg(&cursor, UNW_REG_IP, (unw_word_t *) &ip);
-    if (ret < 0)
+    int ret =
+        unw_get_reg(&cursor, UNW_REG_IP, reinterpret_cast<unw_word_t *>(&ip));
+    if (ret < 0) {
       break;
+    }
     if (skip_count > 0) {
       skip_count--;
     } else {
       result[n++] = ip;
     }
     ret = unw_step(&cursor);
-    if (ret <= 0)
+    if (ret <= 0) {
       break;
+    }
   }
 
-  g_now_entering = false;
+  g_tl_entered = false;
   return n;
 }
 
diff --git a/third_party/google-glog/src/stacktrace_powerpc-inl.h b/third_party/google-glog/src/stacktrace_powerpc-inl.h
index 03b9108..911970c 100644
--- a/third_party/google-glog/src/stacktrace_powerpc-inl.h
+++ b/third_party/google-glog/src/stacktrace_powerpc-inl.h
@@ -35,7 +35,7 @@
 //    http://www.linux-foundation.org/spec/ELF/ppc64/PPC-elf64abi-1.9.html#STACK
 // Linux has similar code: http://patchwork.ozlabs.org/linuxppc/patch?id=8882
 
-#include <stdio.h>
+#include <cstdio>
 #include <stdint.h>   // for uintptr_t
 #include "stacktrace.h"
 
@@ -47,7 +47,7 @@
 // "STRICT_UNWINDING") to reduce the chance that a bad pointer is returned.
 template<bool STRICT_UNWINDING>
 static void **NextStackFrame(void **old_sp) {
-  void **new_sp = (void **) *old_sp;
+  void **new_sp = static_cast<void **>(*old_sp);
 
   // Check that the transition from frame pointer old_sp to frame
   // pointer new_sp isn't clearly bogus
@@ -114,7 +114,7 @@
 #elif defined(__APPLE__) || ((defined(__linux) || defined(__linux__)) && defined(__PPC64__))
       // This check is in case the compiler doesn't define _CALL_AIX/etc.
       result[n++] = *(sp+2);
-#elif defined(__linux)
+#elif defined(__linux) || defined(__OpenBSD__)
       // This check is in case the compiler doesn't define _CALL_SYSV.
       result[n++] = *(sp+1);
 #else
diff --git a/third_party/google-glog/src/stacktrace_unittest.cc b/third_party/google-glog/src/stacktrace_unittest.cc
index c6ab638..7213284 100644
--- a/third_party/google-glog/src/stacktrace_unittest.cc
+++ b/third_party/google-glog/src/stacktrace_unittest.cc
@@ -29,14 +29,14 @@
 
 #include "utilities.h"
 
-#include <stdio.h>
-#include <stdlib.h>
+#include <cstdio>
+#include <cstdlib>
 #include "config.h"
 #include "base/commandlineflags.h"
-#include "glog/logging.h"
+#include <glog/logging.h>
 #include "stacktrace.h"
 
-#ifdef HAVE_EXECINFO_H
+#ifdef HAVE_EXECINFO_BACKTRACE_SYMBOLS
 # include <execinfo.h>
 #endif
 
@@ -111,6 +111,11 @@
 
 //-----------------------------------------------------------------------//
 
+#if defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wgnu-label-as-value"
+#endif
+
 void ATTRIBUTE_NOINLINE CheckStackTrace(int);
 static void ATTRIBUTE_NOINLINE CheckStackTraceLeaf(void) {
   const int STACK_LEN = 10;
@@ -126,12 +131,19 @@
   CHECK_LE(size, STACK_LEN);
 
   if (1) {
-#ifdef HAVE_EXECINFO_H
+#ifdef HAVE_EXECINFO_BACKTRACE_SYMBOLS
     char **strings = backtrace_symbols(stack, size);
     printf("Obtained %d stack frames.\n", size);
-    for (int i = 0; i < size; i++)
+    for (int i = 0; i < size; i++) {
       printf("%s %p\n", strings[i], stack[i]);
-    printf("CheckStackTrace() addr: %p\n", &CheckStackTrace);
+    }
+
+    union {
+      void (*p1)(int);
+      void* p2;
+    } p = {&CheckStackTrace};
+
+    printf("CheckStackTrace() addr: %p\n", p.p2);
     free(strings);
 #endif
   }
@@ -152,42 +164,61 @@
   ADJUST_ADDRESS_RANGE_FROM_RA(&expected_range[2]);
   INIT_ADDRESS_RANGE(CheckStackTrace4, start, end, &expected_range[1]);
   DECLARE_ADDRESS_LABEL(start);
-  for (int j = i; j >= 0; j--)
+  for (int j = i; j >= 0; j--) {
     CheckStackTraceLeaf();
+  }
   DECLARE_ADDRESS_LABEL(end);
 }
 static void ATTRIBUTE_NOINLINE CheckStackTrace3(int i) {
   ADJUST_ADDRESS_RANGE_FROM_RA(&expected_range[3]);
   INIT_ADDRESS_RANGE(CheckStackTrace3, start, end, &expected_range[2]);
   DECLARE_ADDRESS_LABEL(start);
-  for (int j = i; j >= 0; j--)
+  for (int j = i; j >= 0; j--) {
     CheckStackTrace4(j);
+  }
   DECLARE_ADDRESS_LABEL(end);
 }
 static void ATTRIBUTE_NOINLINE CheckStackTrace2(int i) {
   ADJUST_ADDRESS_RANGE_FROM_RA(&expected_range[4]);
   INIT_ADDRESS_RANGE(CheckStackTrace2, start, end, &expected_range[3]);
   DECLARE_ADDRESS_LABEL(start);
-  for (int j = i; j >= 0; j--)
+  for (int j = i; j >= 0; j--) {
     CheckStackTrace3(j);
+  }
   DECLARE_ADDRESS_LABEL(end);
 }
 static void ATTRIBUTE_NOINLINE CheckStackTrace1(int i) {
   ADJUST_ADDRESS_RANGE_FROM_RA(&expected_range[5]);
   INIT_ADDRESS_RANGE(CheckStackTrace1, start, end, &expected_range[4]);
   DECLARE_ADDRESS_LABEL(start);
-  for (int j = i; j >= 0; j--)
+  for (int j = i; j >= 0; j--) {
     CheckStackTrace2(j);
+  }
   DECLARE_ADDRESS_LABEL(end);
 }
+
+#ifndef __GNUC__
+// On non-GNU environment, we use the address of `CheckStackTrace` to
+// guess the address range of this function. This guess is wrong for
+// non-static function on Windows. This is probably because
+// `&CheckStackTrace` returns the address of a trampoline like PLT,
+// not the actual address of `CheckStackTrace`.
+// See https://github.com/google/glog/issues/421 for the detail.
+static
+#endif
 void ATTRIBUTE_NOINLINE CheckStackTrace(int i) {
   INIT_ADDRESS_RANGE(CheckStackTrace, start, end, &expected_range[5]);
   DECLARE_ADDRESS_LABEL(start);
-  for (int j = i; j >= 0; j--)
+  for (int j = i; j >= 0; j--) {
     CheckStackTrace1(j);
+  }
   DECLARE_ADDRESS_LABEL(end);
 }
 
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#endif
+
 //-----------------------------------------------------------------------//
 
 int main(int, char ** argv) {
diff --git a/third_party/google-glog/src/stacktrace_unwind-inl.h b/third_party/google-glog/src/stacktrace_unwind-inl.h
new file mode 100644
index 0000000..dc1665b
--- /dev/null
+++ b/third_party/google-glog/src/stacktrace_unwind-inl.h
@@ -0,0 +1,106 @@
+// Copyright (c) 2005 - 2007, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: Arun Sharma
+//
+// Produce stack trace using libgcc
+
+#include <cstdlib> // for NULL
+#include <unwind.h> // ABI defined unwinder
+
+#include "stacktrace.h"
+
+_START_GOOGLE_NAMESPACE_
+
+typedef struct {
+  void **result;
+  int max_depth;
+  int skip_count;
+  int count;
+} trace_arg_t;
+
+
+// Workaround for the malloc() in _Unwind_Backtrace() issue.
+static _Unwind_Reason_Code nop_backtrace(struct _Unwind_Context */*uc*/, void */*opq*/) {
+  return _URC_NO_REASON;
+}
+
+
+// This code is not considered ready to run until
+// static initializers run so that we are guaranteed
+// that any malloc-related initialization is done.
+static bool ready_to_run = false;
+class StackTraceInit {
+ public:
+   StackTraceInit() {
+     // Extra call to force initialization
+     _Unwind_Backtrace(nop_backtrace, NULL);
+     ready_to_run = true;
+   }
+};
+
+static StackTraceInit module_initializer;  // Force initialization
+
+static _Unwind_Reason_Code GetOneFrame(struct _Unwind_Context *uc, void *opq) {
+  trace_arg_t *targ = static_cast<trace_arg_t *>(opq);
+
+  if (targ->skip_count > 0) {
+    targ->skip_count--;
+  } else {
+    targ->result[targ->count++] = reinterpret_cast<void *>(_Unwind_GetIP(uc));
+  }
+
+  if (targ->count == targ->max_depth) {
+    return _URC_END_OF_STACK;
+  }
+
+  return _URC_NO_REASON;
+}
+
+// If you change this function, also change GetStackFrames below.
+int GetStackTrace(void** result, int max_depth, int skip_count) {
+  if (!ready_to_run) {
+    return 0;
+  }
+
+  trace_arg_t targ;
+
+  skip_count += 1;         // Do not include the "GetStackTrace" frame
+
+  targ.result = result;
+  targ.max_depth = max_depth;
+  targ.skip_count = skip_count;
+  targ.count = 0;
+
+  _Unwind_Backtrace(GetOneFrame, &targ);
+
+  return targ.count;
+}
+
+_END_GOOGLE_NAMESPACE_
diff --git a/third_party/google-glog/src/stacktrace_windows-inl.h b/third_party/google-glog/src/stacktrace_windows-inl.h
index 7263188..e6af561 100644
--- a/third_party/google-glog/src/stacktrace_windows-inl.h
+++ b/third_party/google-glog/src/stacktrace_windows-inl.h
@@ -34,7 +34,7 @@
 #include "config.h"
 #include "port.h"
 #include "stacktrace.h"
-#include <DbgHelp.h>
+#include <dbghelp.h>
 
 _START_GOOGLE_NAMESPACE_
 
@@ -44,7 +44,7 @@
   }
   skip_count++;  // we want to skip the current frame as well
   // This API is thread-safe (moreover it walks only the current thread).
-  return CaptureStackBackTrace(skip_count, max_depth, result, NULL);
+  return CaptureStackBackTrace(static_cast<DWORD>(skip_count), static_cast<DWORD>(max_depth), result, NULL);
 }
 
 _END_GOOGLE_NAMESPACE_
diff --git a/third_party/google-glog/src/stacktrace_x86-inl.h b/third_party/google-glog/src/stacktrace_x86-inl.h
index 3b8d5a8..48e87f7 100644
--- a/third_party/google-glog/src/stacktrace_x86-inl.h
+++ b/third_party/google-glog/src/stacktrace_x86-inl.h
@@ -33,12 +33,12 @@
 
 #include "utilities.h"   // for OS_* macros
 
-#if !defined(OS_WINDOWS)
+#if !defined(GLOG_OS_WINDOWS)
 #include <unistd.h>
 #include <sys/mman.h>
 #endif
 
-#include <stdio.h>  // for NULL
+#include <cstdio>  // for NULL
 #include "stacktrace.h"
 
 _START_GOOGLE_NAMESPACE_
@@ -49,7 +49,7 @@
 // "STRICT_UNWINDING") to reduce the chance that a bad pointer is returned.
 template<bool STRICT_UNWINDING>
 static void **NextStackFrame(void **old_sp) {
-  void **new_sp = (void **) *old_sp;
+  void **new_sp = static_cast<void **>(*old_sp);
 
   // Check that the transition from frame pointer old_sp to frame
   // pointer new_sp isn't clearly bogus
@@ -58,23 +58,28 @@
     // at a greater address that the current one.
     if (new_sp <= old_sp) return NULL;
     // Assume stack frames larger than 100,000 bytes are bogus.
-    if ((uintptr_t)new_sp - (uintptr_t)old_sp > 100000) return NULL;
+    if (reinterpret_cast<uintptr_t>(new_sp) -
+            reinterpret_cast<uintptr_t>(old_sp) >
+        100000)
+      return NULL;
   } else {
     // In the non-strict mode, allow discontiguous stack frames.
     // (alternate-signal-stacks for example).
     if (new_sp == old_sp) return NULL;
     // And allow frames upto about 1MB.
-    if ((new_sp > old_sp)
-        && ((uintptr_t)new_sp - (uintptr_t)old_sp > 1000000)) return NULL;
+    if ((new_sp > old_sp) && (reinterpret_cast<uintptr_t>(new_sp) -
+                                  reinterpret_cast<uintptr_t>(old_sp) >
+                              1000000))
+      return NULL;
   }
-  if ((uintptr_t)new_sp & (sizeof(void *) - 1)) return NULL;
+  if (reinterpret_cast<uintptr_t>(new_sp) & (sizeof(void *) - 1)) return NULL;
 #ifdef __i386__
   // On 64-bit machines, the stack pointer can be very close to
   // 0xffffffff, so we explicitly check for a pointer into the
   // last two pages in the address space
   if ((uintptr_t)new_sp >= 0xffffe000) return NULL;
 #endif
-#if !defined(OS_WINDOWS)
+#if !defined(GLOG_OS_WINDOWS)
   if (!STRICT_UNWINDING) {
     // Lax sanity checks cause a crash in 32-bit tcmalloc/crash_reason_test
     // on AMD-based machines with VDSO-enabled kernels.
@@ -82,9 +87,12 @@
     // Note: NextStackFrame<false>() is only called while the program
     //       is already on its last leg, so it's ok to be slow here.
     static int page_size = getpagesize();
-    void *new_sp_aligned = (void *)((uintptr_t)new_sp & ~(page_size - 1));
-    if (msync(new_sp_aligned, page_size, MS_ASYNC) == -1)
+    void *new_sp_aligned =
+        reinterpret_cast<void *>(reinterpret_cast<uintptr_t>(new_sp) &
+                                 static_cast<uintptr_t>(~(page_size - 1)));
+    if (msync(new_sp_aligned, static_cast<size_t>(page_size), MS_ASYNC) == -1) {
       return NULL;
+    }
   }
 #endif
   return new_sp;
@@ -127,7 +135,7 @@
 
   int n = 0;
   while (sp && n < max_depth) {
-    if (*(sp+1) == (void *)0) {
+    if (*(sp + 1) == NULL) {
       // In 64-bit code, we often see a frame that
       // points to itself and has a return address of 0.
       break;
diff --git a/third_party/google-glog/src/stacktrace_x86_64-inl.h b/third_party/google-glog/src/stacktrace_x86_64-inl.h
deleted file mode 100644
index f7d1dca..0000000
--- a/third_party/google-glog/src/stacktrace_x86_64-inl.h
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright (c) 2005 - 2007, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Author: Arun Sharma
-//
-// Produce stack trace using libgcc
-
-extern "C" {
-#include <stdlib.h> // for NULL
-#include <unwind.h> // ABI defined unwinder
-}
-#include "stacktrace.h"
-
-_START_GOOGLE_NAMESPACE_
-
-typedef struct {
-  void **result;
-  int max_depth;
-  int skip_count;
-  int count;
-} trace_arg_t;
-
-
-// Workaround for the malloc() in _Unwind_Backtrace() issue.
-static _Unwind_Reason_Code nop_backtrace(struct _Unwind_Context *uc, void *opq) {
-  return _URC_NO_REASON;
-}
-
-
-// This code is not considered ready to run until
-// static initializers run so that we are guaranteed
-// that any malloc-related initialization is done.
-static bool ready_to_run = false;
-class StackTraceInit {
- public:
-   StackTraceInit() {
-     // Extra call to force initialization
-     _Unwind_Backtrace(nop_backtrace, NULL);
-     ready_to_run = true;
-   }
-};
-
-static StackTraceInit module_initializer;  // Force initialization
-
-static _Unwind_Reason_Code GetOneFrame(struct _Unwind_Context *uc, void *opq) {
-  trace_arg_t *targ = (trace_arg_t *) opq;
-
-  if (targ->skip_count > 0) {
-    targ->skip_count--;
-  } else {
-    targ->result[targ->count++] = (void *) _Unwind_GetIP(uc);
-  }
-
-  if (targ->count == targ->max_depth)
-    return _URC_END_OF_STACK;
-
-  return _URC_NO_REASON;
-}
-
-// If you change this function, also change GetStackFrames below.
-int GetStackTrace(void** result, int max_depth, int skip_count) {
-  if (!ready_to_run)
-    return 0;
-
-  trace_arg_t targ;
-
-  skip_count += 1;         // Do not include the "GetStackTrace" frame
-
-  targ.result = result;
-  targ.max_depth = max_depth;
-  targ.skip_count = skip_count;
-  targ.count = 0;
-
-  _Unwind_Backtrace(GetOneFrame, &targ);
-
-  return targ.count;
-}
-
-_END_GOOGLE_NAMESPACE_
diff --git a/third_party/google-glog/src/stl_logging_unittest.cc b/third_party/google-glog/src/stl_logging_unittest.cc
index 269094c..5ab2414 100644
--- a/third_party/google-glog/src/stl_logging_unittest.cc
+++ b/third_party/google-glog/src/stl_logging_unittest.cc
@@ -58,8 +58,8 @@
 # endif
 #endif
 
-#include "glog/logging.h"
-#include "glog/stl_logging.h"
+#include <glog/logging.h>
+#include <glog/stl_logging.h>
 #include "googletest.h"
 
 using namespace std;
@@ -68,7 +68,7 @@
 #endif
 
 struct user_hash {
-  size_t operator()(int x) const { return x; }
+  size_t operator()(int x) const { return static_cast<size_t>(x); }
 };
 
 static void TestSTLLogging() {
@@ -107,7 +107,10 @@
     hs.insert(30);
     ostringstream ss;
     ss << hs;
-    EXPECT_EQ(ss.str(), "10 20 30");
+    EXPECT_EQ(ss.str().size(), 8);
+    EXPECT_TRUE(ss.str().find("10") != string::npos);
+    EXPECT_TRUE(ss.str().find("20") != string::npos);
+    EXPECT_TRUE(ss.str().find("30") != string::npos);
     hash_set<int> copied_hs(hs);
     CHECK_EQ(hs, copied_hs);  // This must compile.
   }
@@ -122,7 +125,10 @@
     hm[30] = "thirty";
     ostringstream ss;
     ss << hm;
-    EXPECT_EQ(ss.str(), "(10, ten) (20, twenty) (30, thirty)");
+    EXPECT_EQ(ss.str().size(), 35);
+    EXPECT_TRUE(ss.str().find("(10, ten)") != string::npos);
+    EXPECT_TRUE(ss.str().find("(20, twenty)") != string::npos);
+    EXPECT_TRUE(ss.str().find("(30, thirty)") != string::npos);
     hash_map<int, string> copied_hm(hm);
     CHECK_EQ(hm, copied_hm);  // this must compile
   }
@@ -135,8 +141,9 @@
     for (int i = 0; i < 100; i++) {
       v.push_back(i);
       if (i > 0) expected += ' ';
-      char buf[256];
-      sprintf(buf, "%d", i);
+      const size_t buf_size = 256;
+      char buf[buf_size];
+      snprintf(buf, buf_size, "%d", i);
       expected += buf;
     }
     v.push_back(100);
@@ -170,7 +177,10 @@
     hs.insert(30);
     ostringstream ss;
     ss << hs;
-    EXPECT_EQ(ss.str(), "10 20 30");
+    EXPECT_EQ(ss.str().size(), 8);
+    EXPECT_TRUE(ss.str().find("10") != string::npos);
+    EXPECT_TRUE(ss.str().find("20") != string::npos);
+    EXPECT_TRUE(ss.str().find("30") != string::npos);
     hash_set<int, user_hash> copied_hs(hs);
     CHECK_EQ(hs, copied_hs);  // This must compile.
   }
diff --git a/third_party/google-glog/src/symbolize.cc b/third_party/google-glog/src/symbolize.cc
index 1ffc607..f56e97c 100644
--- a/third_party/google-glog/src/symbolize.cc
+++ b/third_party/google-glog/src/symbolize.cc
@@ -46,7 +46,7 @@
 // and memmove().  We assume they are async-signal-safe.
 //
 // Additional header can be specified by the GLOG_BUILD_CONFIG_INCLUDE
-// macro to add platform specific defines (e.g. OS_OPENBSD).
+// macro to add platform specific defines (e.g. GLOG_OS_OPENBSD).
 
 #ifdef GLOG_BUILD_CONFIG_INCLUDE
 #include GLOG_BUILD_CONFIG_INCLUDE
@@ -56,7 +56,7 @@
 
 #if defined(HAVE_SYMBOLIZE)
 
-#include <string.h>
+#include <cstring>
 
 #include <algorithm>
 #include <limits>
@@ -94,12 +94,12 @@
 // where the input symbol is demangled in-place.
 // To keep stack consumption low, we would like this function to not
 // get inlined.
-static ATTRIBUTE_NOINLINE void DemangleInplace(char *out, int out_size) {
+static ATTRIBUTE_NOINLINE void DemangleInplace(char *out, size_t out_size) {
   char demangled[256];  // Big enough for sane demangled symbols.
   if (Demangle(out, demangled, sizeof(demangled))) {
     // Demangling succeeded. Copy to out if the space allows.
     size_t len = strlen(demangled);
-    if (len + 1 <= (size_t)out_size) {  // +1 for '\0'.
+    if (len + 1 <= out_size) {  // +1 for '\0'.
       SAFE_ASSERT(len < sizeof(demangled));
       memmove(out, demangled, len + 1);
     }
@@ -110,27 +110,29 @@
 
 #if defined(__ELF__)
 
+#if defined(HAVE_DLFCN_H)
 #include <dlfcn.h>
-#if defined(OS_OPENBSD)
+#endif
+#if defined(GLOG_OS_OPENBSD)
 #include <sys/exec_elf.h>
 #else
 #include <elf.h>
 #endif
-#include <errno.h>
+#include <cerrno>
+#include <climits>
+#include <cstddef>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
 #include <fcntl.h>
-#include <limits.h>
 #include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <string.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
 
 #include "symbolize.h"
 #include "config.h"
-#include "glog/raw_logging.h"
+#include <glog/raw_logging.h>
 
 // Re-runs fn until it doesn't cause EINTR.
 #define NO_INTR(fn)   do {} while ((fn) < 0 && errno == EINTR)
@@ -142,25 +144,25 @@
 // and EINTR.  On success, return the number of bytes read.  Otherwise, return
 // -1.
 static ssize_t ReadFromOffset(const int fd, void *buf, const size_t count,
-                              const off_t offset) {
+                              const size_t offset) {
   SAFE_ASSERT(fd >= 0);
-  SAFE_ASSERT(count <= std::numeric_limits<ssize_t>::max());
+  SAFE_ASSERT(count <= static_cast<size_t>(std::numeric_limits<ssize_t>::max()));
   char *buf0 = reinterpret_cast<char *>(buf);
-  ssize_t num_bytes = 0;
+  size_t num_bytes = 0;
   while (num_bytes < count) {
     ssize_t len;
     NO_INTR(len = pread(fd, buf0 + num_bytes, count - num_bytes,
-                        offset + num_bytes));
+                        static_cast<off_t>(offset + num_bytes)));
     if (len < 0) {  // There was an error other than EINTR.
       return -1;
     }
     if (len == 0) {  // Reached EOF.
       break;
     }
-    num_bytes += len;
+    num_bytes += static_cast<size_t>(len);
   }
   SAFE_ASSERT(num_bytes <= count);
-  return num_bytes;
+  return static_cast<ssize_t>(num_bytes);
 }
 
 // Try reading exactly "count" bytes from "offset" bytes in a file
@@ -168,9 +170,9 @@
 // short reads and EINTR.  On success, return true. Otherwise, return
 // false.
 static bool ReadFromOffsetExact(const int fd, void *buf,
-                                const size_t count, const off_t offset) {
+                                const size_t count, const size_t offset) {
   ssize_t len = ReadFromOffset(fd, buf, count, offset);
-  return len == count;
+  return static_cast<size_t>(len) == count;
 }
 
 // Returns elf_header.e_type if the file pointed by fd is an ELF binary.
@@ -191,23 +193,23 @@
 // To keep stack consumption low, we would like this function to not get
 // inlined.
 static ATTRIBUTE_NOINLINE bool
-GetSectionHeaderByType(const int fd, ElfW(Half) sh_num, const off_t sh_offset,
+GetSectionHeaderByType(const int fd, ElfW(Half) sh_num, const size_t sh_offset,
                        ElfW(Word) type, ElfW(Shdr) *out) {
   // Read at most 16 section headers at a time to save read calls.
   ElfW(Shdr) buf[16];
-  for (int i = 0; i < sh_num;) {
-    const ssize_t num_bytes_left = (sh_num - i) * sizeof(buf[0]);
-    const ssize_t num_bytes_to_read =
+  for (size_t i = 0; i < sh_num;) {
+    const size_t num_bytes_left = (sh_num - i) * sizeof(buf[0]);
+    const size_t num_bytes_to_read =
         (sizeof(buf) > num_bytes_left) ? num_bytes_left : sizeof(buf);
     const ssize_t len = ReadFromOffset(fd, buf, num_bytes_to_read,
                                        sh_offset + i * sizeof(buf[0]));
     if (len == -1) {
       return false;
     }
-    SAFE_ASSERT(len % sizeof(buf[0]) == 0);
-    const ssize_t num_headers_in_buf = len / sizeof(buf[0]);
+    SAFE_ASSERT(static_cast<size_t>(len) % sizeof(buf[0]) == 0);
+    const size_t num_headers_in_buf = static_cast<size_t>(len) / sizeof(buf[0]);
     SAFE_ASSERT(num_headers_in_buf <= sizeof(buf) / sizeof(buf[0]));
-    for (int j = 0; j < num_headers_in_buf; ++j) {
+    for (size_t j = 0; j < num_headers_in_buf; ++j) {
       if (buf[j].sh_type == type) {
         *out = buf[j];
         return true;
@@ -231,14 +233,15 @@
   }
 
   ElfW(Shdr) shstrtab;
-  off_t shstrtab_offset = (elf_header.e_shoff +
-                           elf_header.e_shentsize * elf_header.e_shstrndx);
+  size_t shstrtab_offset =
+      (elf_header.e_shoff + static_cast<size_t>(elf_header.e_shentsize) *
+                                static_cast<size_t>(elf_header.e_shstrndx));
   if (!ReadFromOffsetExact(fd, &shstrtab, sizeof(shstrtab), shstrtab_offset)) {
     return false;
   }
 
-  for (int i = 0; i < elf_header.e_shnum; ++i) {
-    off_t section_header_offset = (elf_header.e_shoff +
+  for (size_t i = 0; i < elf_header.e_shnum; ++i) {
+    size_t section_header_offset = (elf_header.e_shoff +
                                    elf_header.e_shentsize * i);
     if (!ReadFromOffsetExact(fd, out, sizeof(*out), section_header_offset)) {
       return false;
@@ -250,11 +253,11 @@
       // No point in even trying.
       return false;
     }
-    off_t name_offset = shstrtab.sh_offset + out->sh_name;
+    size_t name_offset = shstrtab.sh_offset + out->sh_name;
     ssize_t n_read = ReadFromOffset(fd, &header_name, name_len, name_offset);
     if (n_read == -1) {
       return false;
-    } else if (n_read != name_len) {
+    } else if (static_cast<size_t>(n_read) != name_len) {
       // Short read -- name could be at end of file.
       continue;
     }
@@ -272,34 +275,34 @@
 // To keep stack consumption low, we would like this function to not get
 // inlined.
 static ATTRIBUTE_NOINLINE bool
-FindSymbol(uint64_t pc, const int fd, char *out, int out_size,
+FindSymbol(uint64_t pc, const int fd, char *out, size_t out_size,
            uint64_t symbol_offset, const ElfW(Shdr) *strtab,
            const ElfW(Shdr) *symtab) {
   if (symtab == NULL) {
     return false;
   }
-  const int num_symbols = symtab->sh_size / symtab->sh_entsize;
-  for (int i = 0; i < num_symbols;) {
-    off_t offset = symtab->sh_offset + i * symtab->sh_entsize;
+  const size_t num_symbols = symtab->sh_size / symtab->sh_entsize;
+  for (unsigned i = 0; i < num_symbols;) {
+    size_t offset = symtab->sh_offset + i * symtab->sh_entsize;
 
     // If we are reading Elf64_Sym's, we want to limit this array to
     // 32 elements (to keep stack consumption low), otherwise we can
     // have a 64 element Elf32_Sym array.
-#if __WORDSIZE == 64
-#define NUM_SYMBOLS 32
+#if defined(__WORDSIZE) && __WORDSIZE == 64
+    const size_t NUM_SYMBOLS = 32U;
 #else
-#define NUM_SYMBOLS 64
+    const size_t NUM_SYMBOLS = 64U;
 #endif
 
     // Read at most NUM_SYMBOLS symbols at once to save read() calls.
     ElfW(Sym) buf[NUM_SYMBOLS];
-    int num_symbols_to_read = std::min(NUM_SYMBOLS, num_symbols - i);
+    size_t num_symbols_to_read = std::min(NUM_SYMBOLS, num_symbols - i);
     const ssize_t len =
         ReadFromOffset(fd, &buf, sizeof(buf[0]) * num_symbols_to_read, offset);
-    SAFE_ASSERT(len % sizeof(buf[0]) == 0);
-    const ssize_t num_symbols_in_buf = len / sizeof(buf[0]);
+    SAFE_ASSERT(static_cast<size_t>(len) % sizeof(buf[0]) == 0);
+    const size_t num_symbols_in_buf = static_cast<size_t>(len) / sizeof(buf[0]);
     SAFE_ASSERT(num_symbols_in_buf <= num_symbols_to_read);
-    for (int j = 0; j < num_symbols_in_buf; ++j) {
+    for (unsigned j = 0; j < num_symbols_in_buf; ++j) {
       const ElfW(Sym)& symbol = buf[j];
       uint64_t start_address = symbol.st_value;
       start_address += symbol_offset;
@@ -310,6 +313,7 @@
         ssize_t len1 = ReadFromOffset(fd, out, out_size,
                                       strtab->sh_offset + symbol.st_name);
         if (len1 <= 0 || memchr(out, '\0', out_size) == NULL) {
+          memset(out, 0, out_size);
           return false;
         }
         return true;  // Obtained the symbol name.
@@ -327,7 +331,7 @@
 static bool GetSymbolFromObjectFile(const int fd,
                                     uint64_t pc,
                                     char* out,
-                                    int out_size,
+                                    size_t out_size,
                                     uint64_t base_address) {
   // Read the ELF header.
   ElfW(Ehdr) elf_header;
@@ -372,13 +376,13 @@
   explicit FileDescriptor(int fd) : fd_(fd) {}
   ~FileDescriptor() {
     if (fd_ >= 0) {
-      NO_INTR(close(fd_));
+      close(fd_);
     }
   }
   int get() { return fd_; }
 
  private:
-  explicit FileDescriptor(const FileDescriptor&);
+  FileDescriptor(const FileDescriptor &);
   void operator=(const FileDescriptor&);
 };
 
@@ -389,7 +393,7 @@
 // and snprintf().
 class LineReader {
  public:
-  explicit LineReader(int fd, char *buf, int buf_len, off_t offset)
+  explicit LineReader(int fd, char *buf, size_t buf_len, size_t offset)
       : fd_(fd),
         buf_(buf),
         buf_len_(buf_len),
@@ -409,25 +413,25 @@
       if (num_bytes <= 0) {  // EOF or error.
         return false;
       }
-      offset_ += num_bytes;
+      offset_ += static_cast<size_t>(num_bytes);
       eod_ = buf_ + num_bytes;
       bol_ = buf_;
     } else {
       bol_ = eol_ + 1;  // Advance to the next line in the buffer.
       SAFE_ASSERT(bol_ <= eod_);  // "bol_" can point to "eod_".
       if (!HasCompleteLine()) {
-        const int incomplete_line_length = eod_ - bol_;
+        const size_t incomplete_line_length = static_cast<size_t>(eod_ - bol_);
         // Move the trailing incomplete line to the beginning.
         memmove(buf_, bol_, incomplete_line_length);
         // Read text from file and append it.
         char * const append_pos = buf_ + incomplete_line_length;
-        const int capacity_left = buf_len_ - incomplete_line_length;
+        const size_t capacity_left = buf_len_ - incomplete_line_length;
         const ssize_t num_bytes =
             ReadFromOffset(fd_, append_pos, capacity_left, offset_);
         if (num_bytes <= 0) {  // EOF or error.
           return false;
         }
-        offset_ += num_bytes;
+        offset_ += static_cast<size_t>(num_bytes);
         eod_ = append_pos + num_bytes;
         bol_ = buf_;
       }
@@ -454,11 +458,11 @@
   }
 
  private:
-  explicit LineReader(const LineReader&);
+  LineReader(const LineReader &);
   void operator=(const LineReader&);
 
   char *FindLineFeed() {
-    return reinterpret_cast<char *>(memchr(bol_, '\n', eod_ - bol_));
+    return reinterpret_cast<char *>(memchr(bol_, '\n', static_cast<size_t>(eod_ - bol_)));
   }
 
   bool BufferIsEmpty() {
@@ -471,8 +475,8 @@
 
   const int fd_;
   char * const buf_;
-  const int buf_len_;
-  off_t offset_;
+  const size_t buf_len_;
+  size_t offset_;
   char *bol_;
   char *eol_;
   const char *eod_;  // End of data in "buf_".
@@ -488,7 +492,7 @@
     int ch = *p;
     if ((ch >= '0' && ch <= '9') ||
         (ch >= 'A' && ch <= 'F') || (ch >= 'a' && ch <= 'f')) {
-      *hex = (*hex << 4) | (ch < 'A' ? ch - '0' : (ch & 0xF) + 9);
+      *hex = (*hex << 4U) | (ch < 'A' ? static_cast<uint64_t>(ch - '0') : (ch & 0xF) + 9U);
     } else {  // Encountered the first non-hex character.
       break;
     }
@@ -510,7 +514,7 @@
                                              uint64_t &start_address,
                                              uint64_t &base_address,
                                              char *out_file_name,
-                                             int out_file_name_size) {
+                                             size_t out_file_name_size) {
   int object_fd;
 
   int maps_fd;
@@ -530,7 +534,7 @@
   // Iterate over maps and look for the map containing the pc.  Then
   // look into the symbol tables inside.
   char buf[1024];  // Big enough for line of sane /proc/self/maps
-  int num_maps = 0;
+  unsigned num_maps = 0;
   LineReader reader(wrapped_maps_fd.get(), buf, sizeof(buf), 0);
   while (true) {
     num_maps++;
@@ -662,16 +666,17 @@
 
 // POSIX doesn't define any async-signal safe function for converting
 // an integer to ASCII. We'll have to define our own version.
-// itoa_r() converts a (signed) integer to ASCII. It returns "buf", if the
+// itoa_r() converts an (unsigned) integer to ASCII. It returns "buf", if the
 // conversion was successful or NULL otherwise. It never writes more than "sz"
 // bytes. Output will be truncated as needed, and a NUL character is always
 // appended.
 // NOTE: code from sandbox/linux/seccomp-bpf/demo.cc.
-static char *itoa_r(intptr_t i, char *buf, size_t sz, int base, size_t padding) {
+static char *itoa_r(uintptr_t i, char *buf, size_t sz, unsigned base, size_t padding) {
   // Make sure we can write at least one NUL byte.
   size_t n = 1;
-  if (n > sz)
+  if (n > sz) {
     return NULL;
+  }
 
   if (base < 2 || base > 16) {
     buf[0] = '\000';
@@ -680,21 +685,6 @@
 
   char *start = buf;
 
-  uintptr_t j = i;
-
-  // Handle negative numbers (only for base 10).
-  if (i < 0 && base == 10) {
-    // This does "j = -i" while avoiding integer overflow.
-    j = static_cast<uintptr_t>(-(i + 1)) + 1;
-
-    // Make sure we can write the '-' character.
-    if (++n > sz) {
-      buf[0] = '\000';
-      return NULL;
-    }
-    *start++ = '-';
-  }
-
   // Loop until we have converted the entire number. Output at least one
   // character (i.e. '0').
   char *ptr = start;
@@ -706,12 +696,13 @@
     }
 
     // Output the next digit.
-    *ptr++ = "0123456789abcdef"[j % base];
-    j /= base;
+    *ptr++ = "0123456789abcdef"[i % base];
+    i /= base;
 
-    if (padding > 0)
+    if (padding > 0) {
       padding--;
-  } while (j > 0 || padding > 0);
+    }
+  } while (i > 0 || padding > 0);
 
   // Terminate the output with a NUL character.
   *ptr = '\000';
@@ -730,8 +721,8 @@
 
 // Safely appends string |source| to string |dest|.  Never writes past the
 // buffer size |dest_size| and guarantees that |dest| is null-terminated.
-static void SafeAppendString(const char* source, char* dest, int dest_size) {
-  int dest_string_length = strlen(dest);
+static void SafeAppendString(const char* source, char* dest, size_t dest_size) {
+  size_t dest_string_length = strlen(dest);
   SAFE_ASSERT(dest_string_length < dest_size);
   dest += dest_string_length;
   dest_size -= dest_string_length;
@@ -743,7 +734,7 @@
 // Converts a 64-bit value into a hex string, and safely appends it to |dest|.
 // Never writes past the buffer size |dest_size| and guarantees that |dest| is
 // null-terminated.
-static void SafeAppendHexNumber(uint64_t value, char* dest, int dest_size) {
+static void SafeAppendHexNumber(uint64_t value, char* dest, size_t dest_size) {
   // 64-bit numbers in hex can have up to 16 digits.
   char buf[17] = {'\0'};
   SafeAppendString(itoa_r(value, buf, sizeof(buf), 16, 0), dest, dest_size);
@@ -758,7 +749,7 @@
 // To keep stack consumption low, we would like this function to not
 // get inlined.
 static ATTRIBUTE_NOINLINE bool SymbolizeAndDemangle(void *pc, char *out,
-                                                    int out_size) {
+                                                    size_t out_size) {
   uint64_t pc0 = reinterpret_cast<uintptr_t>(pc);
   uint64_t start_address = 0;
   uint64_t base_address = 0;
@@ -781,9 +772,10 @@
                                                              out_size - 1);
   }
 
+  FileDescriptor wrapped_object_fd(object_fd);
+
 #if defined(PRINT_UNSYMBOLIZED_STACK_TRACES)
   {
-    FileDescriptor wrapped_object_fd(object_fd);
 #else
   // Check whether a file name was returned.
   if (object_fd < 0) {
@@ -802,7 +794,6 @@
     // Failed to determine the object file containing PC.  Bail out.
     return false;
   }
-  FileDescriptor wrapped_object_fd(object_fd);
   int elf_type = FileGetElfType(wrapped_object_fd.get());
   if (elf_type == -1) {
     return false;
@@ -816,12 +807,23 @@
                                                  pc, out, out_size,
                                                  relocation);
     if (num_bytes_written > 0) {
-      out += num_bytes_written;
-      out_size -= num_bytes_written;
+      out += static_cast<size_t>(num_bytes_written);
+      out_size -= static_cast<size_t>(num_bytes_written);
     }
   }
   if (!GetSymbolFromObjectFile(wrapped_object_fd.get(), pc0,
                                out, out_size, base_address)) {
+    if (out[1] && !g_symbolize_callback) {
+      // The object file containing PC was opened successfully however the
+      // symbol was not found. The object may have been stripped. This is still
+      // considered success because the object file name and offset are known
+      // and tools like asan_symbolize.py can be used for the symbolization.
+      out[out_size - 1] = '\0';  // Making sure |out| is always null-terminated.
+      SafeAppendString("+0x", out, out_size);
+      SafeAppendHexNumber(pc0 - base_address, out, out_size);
+      SafeAppendString(")", out, out_size);
+      return true;
+    }
     return false;
   }
 
@@ -832,22 +834,24 @@
 
 _END_GOOGLE_NAMESPACE_
 
-#elif defined(OS_MACOSX) && defined(HAVE_DLADDR)
+#elif (defined(GLOG_OS_MACOSX) || defined(GLOG_OS_EMSCRIPTEN)) && defined(HAVE_DLADDR)
 
 #include <dlfcn.h>
-#include <string.h>
+#include <cstring>
 
 _START_GOOGLE_NAMESPACE_
 
 static ATTRIBUTE_NOINLINE bool SymbolizeAndDemangle(void *pc, char *out,
-                                                    int out_size) {
+                                                    size_t out_size) {
   Dl_info info;
   if (dladdr(pc, &info)) {
-    if ((int)strlen(info.dli_sname) < out_size) {
-      strcpy(out, info.dli_sname);
-      // Symbolization succeeded.  Now we try to demangle the symbol.
-      DemangleInplace(out, out_size);
-      return true;
+    if (info.dli_sname) {
+      if (strlen(info.dli_sname) < out_size) {
+        strcpy(out, info.dli_sname);
+        // Symbolization succeeded.  Now we try to demangle the symbol.
+        DemangleInplace(out, out_size);
+        return true;
+      }
     }
   }
   return false;
@@ -855,7 +859,7 @@
 
 _END_GOOGLE_NAMESPACE_
 
-#elif defined(OS_WINDOWS) || defined(OS_CYGWIN)
+#elif defined(GLOG_OS_WINDOWS) || defined(GLOG_OS_CYGWIN)
 
 #include <windows.h>
 #include <dbghelp.h>
@@ -892,7 +896,7 @@
 };
 
 static ATTRIBUTE_NOINLINE bool SymbolizeAndDemangle(void *pc, char *out,
-                                                      int out_size) {
+                                                    size_t out_size) {
   const static SymInitializer symInitializer;
   if (!symInitializer.ready) {
     return false;
@@ -907,7 +911,7 @@
   // This could break if a symbol has Unicode in it.
   BOOL ret = SymFromAddr(symInitializer.process,
                          reinterpret_cast<DWORD64>(pc), 0, symbol);
-  if (ret == 1 && static_cast<int>(symbol->NameLen) < out_size) {
+  if (ret == 1 && static_cast<ssize_t>(symbol->NameLen) < out_size) {
     // `NameLen` does not include the null terminating character.
     strncpy(out, symbol->Name, static_cast<size_t>(symbol->NameLen) + 1);
     out[static_cast<size_t>(symbol->NameLen)] = '\0';
@@ -926,8 +930,7 @@
 
 _START_GOOGLE_NAMESPACE_
 
-bool Symbolize(void *pc, char *out, int out_size) {
-  SAFE_ASSERT(out_size >= 0);
+bool Symbolize(void *pc, char *out, size_t out_size) {
   return SymbolizeAndDemangle(pc, out, out_size);
 }
 
@@ -935,14 +938,14 @@
 
 #else  /* HAVE_SYMBOLIZE */
 
-#include <assert.h>
+#include <cassert>
 
 #include "config.h"
 
 _START_GOOGLE_NAMESPACE_
 
 // TODO: Support other environments.
-bool Symbolize(void *pc, char *out, int out_size) {
+bool Symbolize(void* /*pc*/, char* /*out*/, size_t /*out_size*/) {
   assert(0);
   return false;
 }
diff --git a/third_party/google-glog/src/symbolize.h b/third_party/google-glog/src/symbolize.h
index c6f9ec4..dcbb194 100644
--- a/third_party/google-glog/src/symbolize.h
+++ b/third_party/google-glog/src/symbolize.h
@@ -56,7 +56,7 @@
 
 #include "utilities.h"
 #include "config.h"
-#include "glog/logging.h"
+#include <glog/logging.h>
 
 #ifdef HAVE_SYMBOLIZE
 
@@ -121,6 +121,7 @@
                                  char* out,
                                  size_t out_size,
                                  uint64_t relocation);
+GLOG_EXPORT
 void InstallSymbolizeCallback(SymbolizeCallback callback);
 
 // Installs a callback function, which will be called instead of
@@ -137,7 +138,7 @@
                                                uint64_t& start_address,
                                                uint64_t& base_address,
                                                char* out_file_name,
-                                               int out_file_name_size);
+                                               size_t out_file_name_size);
 void InstallSymbolizeOpenObjectFileCallback(
     SymbolizeOpenObjectFileCallback callback);
 
@@ -151,7 +152,7 @@
 // symbol name to "out".  The symbol name is demangled if possible
 // (supports symbols generated by GCC 3.x or newer).  Otherwise,
 // returns false.
-GOOGLE_GLOG_DLL_DECL bool Symbolize(void *pc, char *out, int out_size);
+GLOG_EXPORT bool Symbolize(void* pc, char* out, size_t out_size);
 
 _END_GOOGLE_NAMESPACE_
 
diff --git a/third_party/google-glog/src/symbolize_unittest.cc b/third_party/google-glog/src/symbolize_unittest.cc
index 9a17e7b..2522e73 100644
--- a/third_party/google-glog/src/symbolize_unittest.cc
+++ b/third_party/google-glog/src/symbolize_unittest.cc
@@ -31,15 +31,16 @@
 //
 // Unit tests for functions in symbolize.cc.
 
-#include "utilities.h"
+#include "symbolize.h"
 
-#include <signal.h>
+#include <glog/logging.h>
+
+#include <csignal>
 #include <iostream>
 
-#include "glog/logging.h"
-#include "symbolize.h"
-#include "googletest.h"
 #include "config.h"
+#include "googletest.h"
+#include "utilities.h"
 
 #ifdef HAVE_LIB_GFLAGS
 #include <gflags/gflags.h>
@@ -49,10 +50,18 @@
 using namespace std;
 using namespace GOOGLE_NAMESPACE;
 
+// Avoid compile error due to "cast between pointer-to-function and
+// pointer-to-object is an extension" warnings.
+#if defined(__GNUG__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+
 #if defined(HAVE_STACKTRACE)
 
 #define always_inline
 
+#if defined(__ELF__) || defined(GLOG_OS_WINDOWS) || defined(GLOG_OS_CYGWIN)
 // A wrapper function for Symbolize() to make the unit test simple.
 static const char *TrySymbolize(void *pc) {
   static char symbol[4096];
@@ -62,6 +71,7 @@
     return NULL;
   }
 }
+#endif
 
 # if defined(__ELF__)
 
@@ -70,7 +80,7 @@
 #if defined(__GNUC__) && !defined(__OPENCC__)
 #  if __GNUC__ >= 4
 #    define TEST_WITH_MODERN_GCC
-#    if __i386__  // always_inline isn't supported for x86_64 with GCC 4.1.0.
+#    if defined(__i386__) && __i386__  // always_inline isn't supported for x86_64 with GCC 4.1.0.
 #      undef always_inline
 #      define always_inline __attribute__((always_inline))
 #      define HAVE_ALWAYS_INLINE
@@ -87,12 +97,16 @@
 void nonstatic_func();
 void nonstatic_func() {
   volatile int a = 0;
-  ++a;
+  // NOTE: In C++20, increment of object of volatile-qualified type is
+  // deprecated.
+  a = a + 1;
 }
 
 static void static_func() {
   volatile int a = 0;
-  ++a;
+  // NOTE: In C++20, increment of object of volatile-qualified type is
+  // deprecated.
+  a = a + 1;
 }
 }
 
@@ -105,10 +119,14 @@
 
   // The name of an internal linkage symbol is not specified; allow either a
   // mangled or an unmangled name here.
-  const char *static_func_symbol = TrySymbolize((void *)(&static_func));
+  const char *static_func_symbol =
+      TrySymbolize(reinterpret_cast<void *>(&static_func));
+
+#if !defined(_MSC_VER) || !defined(NDEBUG)
   CHECK(NULL != static_func_symbol);
   EXPECT_TRUE(strcmp("static_func", static_func_symbol) == 0 ||
               strcmp("static_func()", static_func_symbol) == 0);
+#endif
 
   EXPECT_TRUE(NULL == TrySymbolize(NULL));
 }
@@ -119,7 +137,9 @@
 
 void ATTRIBUTE_NOINLINE Foo::func(int x) {
   volatile int a = x;
-  ++a;
+  // NOTE: In C++20, increment of object of volatile-qualified type is
+  // deprecated.
+  a = a + 1;
 }
 
 // With a modern GCC, Symbolize() should return demangled symbol
@@ -127,7 +147,9 @@
 #ifdef TEST_WITH_MODERN_GCC
 TEST(Symbolize, SymbolizeWithDemangling) {
   Foo::func(100);
+#if !defined(_MSC_VER) || !defined(NDEBUG)
   EXPECT_STREQ("Foo::func()", TrySymbolize((void *)(&Foo::func)));
+#endif
 }
 #endif
 
@@ -152,9 +174,9 @@
 static char g_symbolize_buffer[4096];
 static char *g_symbolize_result;
 
-static void EmptySignalHandler(int signo) {}
+static void EmptySignalHandler(int /*signo*/) {}
 
-static void SymbolizeSignalHandler(int signo) {
+static void SymbolizeSignalHandler(int /*signo*/) {
   if (Symbolize(g_pc_to_symbolize, g_symbolize_buffer,
                 sizeof(g_symbolize_buffer))) {
     g_symbolize_result = g_symbolize_buffer;
@@ -275,7 +297,7 @@
   int stack_consumed;
   const char* symbol;
 
-  symbol = SymbolizeStackConsumption((void *)(&nonstatic_func),
+  symbol = SymbolizeStackConsumption(reinterpret_cast<void *>(&nonstatic_func),
                                      &stack_consumed);
   EXPECT_STREQ("nonstatic_func", symbol);
   EXPECT_GT(stack_consumed, 0);
@@ -283,7 +305,7 @@
 
   // The name of an internal linkage symbol is not specified; allow either a
   // mangled or an unmangled name here.
-  symbol = SymbolizeStackConsumption((void *)(&static_func),
+  symbol = SymbolizeStackConsumption(reinterpret_cast<void *>(&static_func),
                                      &stack_consumed);
   CHECK(NULL != symbol);
   EXPECT_TRUE(strcmp("static_func", symbol) == 0 ||
@@ -298,7 +320,8 @@
   int stack_consumed;
   const char* symbol;
 
-  symbol = SymbolizeStackConsumption((void *)(&Foo::func), &stack_consumed);
+  symbol = SymbolizeStackConsumption(reinterpret_cast<void *>(&Foo::func),
+                                     &stack_consumed);
 
   EXPECT_STREQ("Foo::func()", symbol);
   EXPECT_GT(stack_consumed, 0);
@@ -331,8 +354,11 @@
 #if defined(TEST_X86_32_AND_64) && defined(HAVE_ATTRIBUTE_NOINLINE)
   void *pc = non_inline_func();
   const char *symbol = TrySymbolize(pc);
+
+#if !defined(_MSC_VER) || !defined(NDEBUG)
   CHECK(symbol != NULL);
   CHECK_STREQ(symbol, "non_inline_func");
+#endif
   cout << "Test case TestWithPCInsideNonInlineFunction passed." << endl;
 #endif
 }
@@ -341,8 +367,11 @@
 #if defined(TEST_X86_32_AND_64) && defined(HAVE_ALWAYS_INLINE)
   void *pc = inline_func();  // Must be inlined.
   const char *symbol = TrySymbolize(pc);
+
+#if !defined(_MSC_VER) || !defined(NDEBUG)
   CHECK(symbol != NULL);
   CHECK_STREQ(symbol, __FUNCTION__);
+#endif
   cout << "Test case TestWithPCInsideInlineFunction passed." << endl;
 #endif
 }
@@ -353,13 +382,16 @@
 #if defined(HAVE_ATTRIBUTE_NOINLINE)
   void *return_address = __builtin_return_address(0);
   const char *symbol = TrySymbolize(return_address);
+
+#if !defined(_MSC_VER) || !defined(NDEBUG)
   CHECK(symbol != NULL);
   CHECK_STREQ(symbol, "main");
+#endif
   cout << "Test case TestWithReturnAddress passed." << endl;
 #endif
 }
 
-# elif defined(OS_WINDOWS) || defined(OS_CYGWIN)
+# elif defined(GLOG_OS_WINDOWS) || defined(GLOG_OS_CYGWIN)
 
 #ifdef _MSC_VER
 #include <intrin.h>
@@ -372,13 +404,18 @@
 
 __declspec(noinline) void Foo::func(int x) {
   volatile int a = x;
-  ++a;
+  // NOTE: In C++20, increment of object of volatile-qualified type is
+  // deprecated.
+  a = a + 1;
 }
 
 TEST(Symbolize, SymbolizeWithDemangling) {
   Foo::func(100);
   const char* ret = TrySymbolize((void *)(&Foo::func));
+
+#if defined(HAVE_DBGHELP) && !defined(NDEBUG)
   EXPECT_STREQ("public: static void __cdecl Foo::func(int)", ret);
+#endif
 }
 
 __declspec(noinline) void TestWithReturnAddress() {
@@ -390,8 +427,10 @@
 #endif
 	  ;
   const char *symbol = TrySymbolize(return_address);
+#if !defined(_MSC_VER) || !defined(NDEBUG)
   CHECK(symbol != NULL);
   CHECK_STREQ(symbol, "main");
+#endif
   cout << "Test case TestWithReturnAddress passed." << endl;
 }
 # endif  // __ELF__
@@ -401,7 +440,7 @@
   FLAGS_logtostderr = true;
   InitGoogleLogging(argv[0]);
   InitGoogleTest(&argc, argv);
-#if defined(HAVE_SYMBOLIZE)
+#if defined(HAVE_SYMBOLIZE) && defined(HAVE_STACKTRACE)
 # if defined(__ELF__)
   // We don't want to get affected by the callback interface, that may be
   // used to install some callback function at InitGoogle() time.
@@ -411,10 +450,10 @@
   TestWithPCInsideNonInlineFunction();
   TestWithReturnAddress();
   return RUN_ALL_TESTS();
-# elif defined(OS_WINDOWS) || defined(OS_CYGWIN)
+# elif defined(GLOG_OS_WINDOWS) || defined(GLOG_OS_CYGWIN)
   TestWithReturnAddress();
   return RUN_ALL_TESTS();
-# else  // OS_WINDOWS
+# else  // GLOG_OS_WINDOWS
   printf("PASS (no symbolize_unittest support)\n");
   return 0;
 # endif  // __ELF__
@@ -423,3 +462,7 @@
   return 0;
 #endif  // HAVE_SYMBOLIZE
 }
+
+#if defined(__GNUG__)
+#pragma GCC diagnostic pop
+#endif
diff --git a/third_party/google-glog/src/utilities.cc b/third_party/google-glog/src/utilities.cc
index 25c4b76..a332f1a 100644
--- a/third_party/google-glog/src/utilities.cc
+++ b/third_party/google-glog/src/utilities.cc
@@ -29,16 +29,17 @@
 //
 // Author: Shinichiro Hamaji
 
+#include "config.h"
 #include "utilities.h"
 
-#include <stdio.h>
-#include <stdlib.h>
+#include <cstdio>
+#include <cstdlib>
 
-#include <signal.h>
+#include <csignal>
 #ifdef HAVE_SYS_TIME_H
 # include <sys/time.h>
 #endif
-#include <time.h>
+#include <ctime>
 #if defined(HAVE_SYSCALL_H)
 #include <syscall.h>                 // for syscall()
 #elif defined(HAVE_SYS_SYSCALL_H)
@@ -53,6 +54,9 @@
 #ifdef HAVE_PWD_H
 # include <pwd.h>
 #endif
+#ifdef __ANDROID__
+#include <android/log.h>
+#endif
 
 #include "base/googleinit.h"
 
@@ -61,7 +65,10 @@
 _START_GOOGLE_NAMESPACE_
 
 static const char* g_program_invocation_short_name = NULL;
-static pthread_t g_main_thread_id;
+
+bool IsGoogleLoggingInitialized() {
+  return g_program_invocation_short_name != NULL;
+}
 
 _END_GOOGLE_NAMESPACE_
 
@@ -88,6 +95,12 @@
   if (write(STDERR_FILENO, data, strlen(data)) < 0) {
     // Ignore errors.
   }
+#if defined(__ANDROID__)
+  // ANDROID_LOG_FATAL as fatal error occurred and now is dumping call stack.
+  __android_log_write(ANDROID_LOG_FATAL,
+                      glog_internal_namespace_::ProgramInvocationShortName(),
+                      data);
+#endif
 }
 
 static void DebugWriteToString(const char* data, void *arg) {
@@ -139,10 +152,15 @@
   }
 }
 
+#if defined(__GNUC__)
+__attribute__((noreturn))
+#elif defined(_MSC_VER)
+__declspec(noreturn)
+#endif
 static void DumpStackTraceAndExit() {
   DumpStackTrace(1, DebugWriteToStderr, NULL);
 
-  // TOOD(hamaji): Use signal instead of sigaction?
+  // TODO(hamaji): Use signal instead of sigaction?
   if (IsFailureSignalHandlerInstalled()) {
     // Set the default signal handler for SIGABRT, to avoid invoking our
     // own signal handler installed by InstallFailureSignalHandler().
@@ -152,7 +170,7 @@
     sigemptyset(&sig_action.sa_mask);
     sig_action.sa_handler = SIG_DFL;
     sigaction(SIGABRT, &sig_action, NULL);
-#elif defined(OS_WINDOWS)
+#elif defined(GLOG_OS_WINDOWS)
     signal(SIGABRT, SIG_DFL);
 #endif  // HAVE_SIGACTION
   }
@@ -177,31 +195,21 @@
   }
 }
 
-bool IsGoogleLoggingInitialized() {
-  return g_program_invocation_short_name != NULL;
-}
-
-bool is_default_thread() {
-  if (g_program_invocation_short_name == NULL) {
-    // InitGoogleLogging() not yet called, so unlikely to be in a different
-    // thread
-    return true;
-  } else {
-    return pthread_equal(pthread_self(), g_main_thread_id);
-  }
-}
-
-#ifdef OS_WINDOWS
+#ifdef GLOG_OS_WINDOWS
 struct timeval {
   long tv_sec, tv_usec;
 };
 
 // Based on: http://www.google.com/codesearch/p?hl=en#dR3YEbitojA/os_win32.c&q=GetSystemTimeAsFileTime%20license:bsd
 // See COPYING for copyright information.
-static int gettimeofday(struct timeval *tv, void* tz) {
+static int gettimeofday(struct timeval *tv, void* /*tz*/) {
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wlong-long"
+#endif
 #define EPOCHFILETIME (116444736000000000ULL)
   FILETIME ft;
-  LARGE_INTEGER li;
+  ULARGE_INTEGER li;
   uint64 tt;
 
   GetSystemTimeAsFileTime(&ft);
@@ -210,6 +218,9 @@
   tt = (li.QuadPart - EPOCHFILETIME) / 10;
   tv->tv_sec = tt / 1000000;
   tv->tv_usec = tt % 1000000;
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
 
   return 0;
 }
@@ -247,9 +258,9 @@
 
 pid_t GetTID() {
   // On Linux and MacOSX, we try to use gettid().
-#if defined OS_LINUX || defined OS_MACOSX
+#if defined GLOG_OS_LINUX || defined GLOG_OS_MACOSX
 #ifndef __NR_gettid
-#ifdef OS_MACOSX
+#ifdef GLOG_OS_MACOSX
 #define __NR_gettid SYS_gettid
 #elif ! defined __i386__
 #error "Must define __NR_gettid for non-x86 platforms"
@@ -259,7 +270,13 @@
 #endif
   static bool lacks_gettid = false;
   if (!lacks_gettid) {
-    pid_t tid = syscall(__NR_gettid);
+#if (defined(GLOG_OS_MACOSX) && defined(HAVE_PTHREAD_THREADID_NP))
+    uint64_t tid64;
+    const int error = pthread_threadid_np(NULL, &tid64);
+    pid_t tid = error ? -1 : static_cast<pid_t>(tid64);
+#else
+    pid_t tid = static_cast<pid_t>(syscall(__NR_gettid));
+#endif
     if (tid != -1) {
       return tid;
     }
@@ -269,22 +286,24 @@
     // the value change to "true".
     lacks_gettid = true;
   }
-#endif  // OS_LINUX || OS_MACOSX
+#endif  // GLOG_OS_LINUX || GLOG_OS_MACOSX
 
   // If gettid() could not be used, we use one of the following.
-#if defined OS_LINUX
+#if defined GLOG_OS_LINUX
   return getpid();  // Linux:  getpid returns thread ID when gettid is absent
-#elif defined OS_WINDOWS && !defined OS_CYGWIN
-  return GetCurrentThreadId();
-#else
+#elif defined GLOG_OS_WINDOWS && !defined GLOG_OS_CYGWIN
+  return static_cast<pid_t>(GetCurrentThreadId());
+#elif defined(HAVE_PTHREAD)
   // If none of the techniques above worked, we use pthread_self().
   return (pid_t)(uintptr_t)pthread_self();
+#else
+  return -1;
 #endif
 }
 
 const char* const_basename(const char* filepath) {
   const char* base = strrchr(filepath, '/');
-#ifdef OS_WINDOWS  // Look for either path separator in Windows
+#ifdef GLOG_OS_WINDOWS  // Look for either path separator in Windows
   if (!base)
     base = strrchr(filepath, '\\');
 #endif
@@ -297,7 +316,7 @@
 }
 static void MyUserNameInitializer() {
   // TODO(hamaji): Probably this is not portable.
-#if defined(OS_WINDOWS)
+#if defined(GLOG_OS_WINDOWS)
   const char* user = getenv("USERNAME");
 #else
   const char* user = getenv("USER");
@@ -311,7 +330,7 @@
     char buffer[1024] = {'\0'};
     uid_t uid = geteuid();
     int pwuid_res = getpwuid_r(uid, &pwd, buffer, sizeof(buffer), &result);
-    if (pwuid_res == 0) {
+    if (pwuid_res == 0 && result) {
       g_my_user_name = pwd.pw_name;
     } else {
       snprintf(buffer, sizeof(buffer), "uid%d", uid);
@@ -324,7 +343,7 @@
   }
 
 }
-REGISTER_MODULE_INITIALIZER(utilities, MyUserNameInitializer());
+REGISTER_MODULE_INITIALIZER(utilities, MyUserNameInitializer())
 
 #ifdef HAVE_STACKTRACE
 void DumpStackTraceToString(string* stacktrace) {
@@ -346,11 +365,10 @@
   CHECK(!IsGoogleLoggingInitialized())
       << "You called InitGoogleLogging() twice!";
   const char* slash = strrchr(argv0, '/');
-#ifdef OS_WINDOWS
+#ifdef GLOG_OS_WINDOWS
   if (!slash)  slash = strrchr(argv0, '\\');
 #endif
   g_program_invocation_short_name = slash ? slash + 1 : argv0;
-  g_main_thread_id = pthread_self();
 
 #ifdef HAVE_STACKTRACE
   InstallFailureFunction(&DumpStackTraceAndExit);
diff --git a/third_party/google-glog/src/utilities.h b/third_party/google-glog/src/utilities.h
index ca21cfb..760c142 100644
--- a/third_party/google-glog/src/utilities.h
+++ b/third_party/google-glog/src/utilities.h
@@ -34,26 +34,6 @@
 #ifndef UTILITIES_H__
 #define UTILITIES_H__
 
-#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
-# define OS_WINDOWS
-#elif defined(__CYGWIN__) || defined(__CYGWIN32__)
-# define OS_CYGWIN
-#elif defined(linux) || defined(__linux) || defined(__linux__)
-# ifndef OS_LINUX
-#  define OS_LINUX
-# endif
-#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
-# define OS_MACOSX
-#elif defined(__FreeBSD__)
-# define OS_FREEBSD
-#elif defined(__NetBSD__)
-# define OS_NETBSD
-#elif defined(__OpenBSD__)
-# define OS_OPENBSD
-#else
-// TODO(hamaji): Add other platforms.
-#endif
-
 // printf macros for size_t, in the style of inttypes.h
 #ifdef _LP64
 #define __PRIS_PREFIX "z"
@@ -76,12 +56,13 @@
 
 #include <string>
 
-#if defined(OS_WINDOWS)
+#include <glog/logging.h>
+
+#if defined(GLOG_OS_WINDOWS)
 # include "port.h"
 #endif
 
 #include "config.h"
-#include "glog/logging.h"
 
 // There are three different ways we can try to get the stack trace:
 //
@@ -107,19 +88,19 @@
 
 #if defined(HAVE_LIB_UNWIND)
 # define STACKTRACE_H "stacktrace_libunwind-inl.h"
+#elif defined(HAVE__UNWIND_BACKTRACE) && defined(HAVE__UNWIND_GETIP)
+# define STACKTRACE_H "stacktrace_unwind-inl.h"
 #elif !defined(NO_FRAME_POINTER)
 # if defined(__i386__) && __GNUC__ >= 2
 #  define STACKTRACE_H "stacktrace_x86-inl.h"
-# elif defined(__x86_64__) && __GNUC__ >= 2 && HAVE_UNWIND_H
-#  define STACKTRACE_H "stacktrace_x86_64-inl.h"
 # elif (defined(__ppc__) || defined(__PPC__)) && __GNUC__ >= 2
 #  define STACKTRACE_H "stacktrace_powerpc-inl.h"
-# elif defined(OS_WINDOWS)
+# elif defined(GLOG_OS_WINDOWS)
 #  define STACKTRACE_H "stacktrace_windows-inl.h"
 # endif
 #endif
 
-#if !defined(STACKTRACE_H) && defined(HAVE_EXECINFO_H)
+#if !defined(STACKTRACE_H) && defined(HAVE_EXECINFO_BACKTRACE)
 # define STACKTRACE_H "stacktrace_generic-inl.h"
 #endif
 
@@ -127,18 +108,20 @@
 # define HAVE_STACKTRACE
 #endif
 
+#ifndef GLOG_NO_SYMBOLIZE_DETECTION
 #ifndef HAVE_SYMBOLIZE
 // defined by gcc
-#if defined(__ELF__) && defined(OS_LINUX)
+#if defined(__ELF__) && defined(GLOG_OS_LINUX)
 # define HAVE_SYMBOLIZE
-#elif defined(OS_MACOSX) && defined(HAVE_DLADDR)
+#elif defined(GLOG_OS_MACOSX) && defined(HAVE_DLADDR)
 // Use dladdr to symbolize.
 # define HAVE_SYMBOLIZE
-#elif defined(OS_WINDOWS)
+#elif defined(GLOG_OS_WINDOWS)
 // Use DbgHelp to symbolize
 # define HAVE_SYMBOLIZE
 #endif
 #endif // !defined(HAVE_SYMBOLIZE)
+#endif // !defined(GLOG_NO_SYMBOLIZE_DETECTION)
 
 #ifndef ARRAYSIZE
 // There is a better way, but this is good enough for our purpose.
@@ -152,7 +135,7 @@
 #ifdef HAVE___ATTRIBUTE__
 # define ATTRIBUTE_NOINLINE __attribute__ ((noinline))
 # define HAVE_ATTRIBUTE_NOINLINE
-#elif defined(OS_WINDOWS)
+#elif defined(GLOG_OS_WINDOWS)
 # define ATTRIBUTE_NOINLINE __declspec(noinline)
 # define HAVE_ATTRIBUTE_NOINLINE
 #else
@@ -161,15 +144,9 @@
 
 const char* ProgramInvocationShortName();
 
-bool IsGoogleLoggingInitialized();
-
-bool is_default_thread();
-
 int64 CycleClock_Now();
 
 int64 UsecToCycles(int64 usec);
-
-typedef double WallTime;
 WallTime WallTime_Now();
 
 int32 GetMainThreadPid();
diff --git a/third_party/google-glog/src/utilities_unittest.cc b/third_party/google-glog/src/utilities_unittest.cc
index 38e847d..93b1acd 100644
--- a/third_party/google-glog/src/utilities_unittest.cc
+++ b/third_party/google-glog/src/utilities_unittest.cc
@@ -30,7 +30,7 @@
 // Author: Shinichiro Hamaji
 #include "utilities.h"
 #include "googletest.h"
-#include "glog/logging.h"
+#include <glog/logging.h>
 
 #ifdef HAVE_LIB_GFLAGS
 #include <gflags/gflags.h>
diff --git a/third_party/google-glog/src/vlog_is_on.cc b/third_party/google-glog/src/vlog_is_on.cc
index e8fdbae..e478a36 100644
--- a/third_party/google-glog/src/vlog_is_on.cc
+++ b/third_party/google-glog/src/vlog_is_on.cc
@@ -34,14 +34,14 @@
 
 #include "utilities.h"
 
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
+#include <cstring>
+#include <cstdlib>
+#include <cerrno>
 #include <cstdio>
 #include <string>
 #include "base/commandlineflags.h"
-#include "glog/logging.h"
-#include "glog/raw_logging.h"
+#include <glog/logging.h>
+#include <glog/raw_logging.h>
 #include "base/googleinit.h"
 
 // glog doesn't have annotation
@@ -63,19 +63,15 @@
 namespace glog_internal_namespace_ {
 
 // Used by logging_unittests.cc so can't make it static here.
-GOOGLE_GLOG_DLL_DECL bool SafeFNMatch_(const char* pattern,
-                                       size_t patt_len,
-                                       const char* str,
-                                       size_t str_len);
+GLOG_EXPORT bool SafeFNMatch_(const char* pattern, size_t patt_len,
+                              const char* str, size_t str_len);
 
 // Implementation of fnmatch that does not need 0-termination
 // of arguments and does not allocate any memory,
 // but we only support "*" and "?" wildcards, not the "[...]" patterns.
 // It's not a static function for the unittest.
-GOOGLE_GLOG_DLL_DECL bool SafeFNMatch_(const char* pattern,
-                                       size_t patt_len,
-                                       const char* str,
-                                       size_t str_len) {
+GLOG_EXPORT bool SafeFNMatch_(const char* pattern, size_t patt_len,
+                              const char* str, size_t str_len) {
   size_t p = 0;
   size_t s = 0;
   while (1) {
@@ -105,8 +101,6 @@
 
 using glog_internal_namespace_::SafeFNMatch_;
 
-int32 kLogSiteUninitialized = 1000;
-
 // List of per-module log levels from FLAGS_vmodule.
 // Once created each element is never deleted/modified
 // except for the vlog_level: other threads will read VModuleInfo blobs
@@ -127,6 +121,8 @@
 // Pointer to head of the VModuleInfo list.
 // It's a map from module pattern to logging level for those module(s).
 static VModuleInfo* vmodule_list = 0;
+static SiteFlag* cached_site_list = 0;
+
 // Boolean initialization flag.
 static bool inited_vmodule = false;
 
@@ -141,14 +137,17 @@
   VModuleInfo* head = NULL;
   VModuleInfo* tail = NULL;
   while ((sep = strchr(vmodule, '=')) != NULL) {
-    string pattern(vmodule, sep - vmodule);
+    string pattern(vmodule, static_cast<size_t>(sep - vmodule));
     int module_level;
     if (sscanf(sep, "=%d", &module_level) == 1) {
       VModuleInfo* info = new VModuleInfo;
       info->module_pattern = pattern;
       info->vlog_level = module_level;
-      if (head)  tail->next = info;
-      else  head = info;
+      if (head) {
+        tail->next = info;
+      } else {
+        head = info;
+      }
       tail = info;
     }
     // Skip past this entry
@@ -166,7 +165,7 @@
 // This can be called very early, so we use SpinLock and RAW_VLOG here.
 int SetVLOGLevel(const char* module_pattern, int log_level) {
   int result = FLAGS_v;
-  int const pattern_len = strlen(module_pattern);
+  size_t const pattern_len = strlen(module_pattern);
   bool found = false;
   {
     MutexLock l(&vmodule_lock);  // protect whole read-modify-write
@@ -192,6 +191,23 @@
       info->vlog_level = log_level;
       info->next = vmodule_list;
       vmodule_list = info;
+
+      SiteFlag** item_ptr = &cached_site_list;
+      SiteFlag* item = cached_site_list;
+
+      // We traverse the list fully because the pattern can match several items
+      // from the list.
+      while (item) {
+        if (SafeFNMatch_(module_pattern, pattern_len, item->base_name,
+                         item->base_len)) {
+          // Redirect the cached value to its module override.
+          item->level = &info->vlog_level;
+          *item_ptr = item->next;  // Remove the item from the list.
+        } else {
+          item_ptr = &item->next;
+        }
+        item = *item_ptr;
+      }
     }
   }
   RAW_VLOG(1, "Set VLOG level for \"%s\" to %d", module_pattern, log_level);
@@ -200,7 +216,7 @@
 
 // NOTE: Individual VLOG statements cache the integer log level pointers.
 // NOTE: This function must not allocate memory or require any locks.
-bool InitVLOG3__(int32** site_flag, int32* site_default,
+bool InitVLOG3__(SiteFlag* site_flag, int32* level_default,
                  const char* fname, int32 verbose_level) {
   MutexLock l(&vmodule_lock);
   bool read_vmodule_flag = inited_vmodule;
@@ -213,10 +229,17 @@
   int old_errno = errno;
 
   // site_default normally points to FLAGS_v
-  int32* site_flag_value = site_default;
+  int32* site_flag_value = level_default;
 
   // Get basename for file
   const char* base = strrchr(fname, '/');
+
+#ifdef _WIN32
+  if (!base) {
+    base = strrchr(fname, '\\');
+  }
+#endif
+
   base = base ? (base+1) : fname;
   const char* base_end = strchr(base, '.');
   size_t base_length = base_end ? size_t(base_end - base) : strlen(base);
@@ -246,7 +269,20 @@
   ANNOTATE_BENIGN_RACE(site_flag,
                        "*site_flag may be written by several threads,"
                        " but the value will be the same");
-  if (read_vmodule_flag) *site_flag = site_flag_value;
+  if (read_vmodule_flag) {
+    site_flag->level = site_flag_value;
+    // If VLOG flag has been cached to the default site pointer,
+    // we want to add to the cached list in order to invalidate in case
+    // SetVModule is called afterwards with new modules.
+    // The performance penalty here is neglible, because InitVLOG3__ is called
+    // once per site.
+    if (site_flag_value == level_default && !site_flag->base_name) {
+      site_flag->base_name = base;
+      site_flag->base_len = base_length;
+      site_flag->next = cached_site_list;
+      cached_site_list = site_flag;
+    }
+  }
 
   // restore the errno in case something recoverable went wrong during
   // the initialization of the VLOG mechanism (see above note "protect the..")
diff --git a/third_party/google-glog/src/windows/config.h b/third_party/google-glog/src/windows/config.h
deleted file mode 100755
index 2d23fb0..0000000
--- a/third_party/google-glog/src/windows/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* src/config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Namespace for Google classes */
-#define GOOGLE_NAMESPACE google
-
-/* Stops putting the code inside the Google namespace */
-#define _END_GOOGLE_NAMESPACE_ }
-
-/* Puts following code inside the Google namespace */
-#define _START_GOOGLE_NAMESPACE_ namespace google {
-
-/* Always the empty-string on non-windows systems. On windows, should be
-   "__declspec(dllexport)". This way, when we compile the dll, we export our
-   functions/classes. It's safe to define this here because config.h is only
-   used internally, to compile the DLL, and every DLL source file #includes
-   "config.h" before anything else. */
-#ifndef GOOGLE_GLOG_DLL_DECL
-# define GOOGLE_GLOG_IS_A_DLL  1   /* not set if you're statically linking */
-# define GOOGLE_GLOG_DLL_DECL  __declspec(dllexport)
-# define GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS  __declspec(dllimport)
-#endif
diff --git a/third_party/google-glog/src/windows/dirent.h b/third_party/google-glog/src/windows/dirent.h
new file mode 100644
index 0000000..12cf00a
--- /dev/null
+++ b/third_party/google-glog/src/windows/dirent.h
@@ -0,0 +1,1159 @@
+/*
+ * Dirent interface for Microsoft Visual Studio
+ *
+ * Copyright (C) 1998-2019 Toni Ronkko
+ * This file is part of dirent.  Dirent may be freely distributed
+ * under the MIT license.  For all details and documentation, see
+ * https://github.com/tronkko/dirent
+ */
+#ifndef DIRENT_H
+#define DIRENT_H
+
+/* Hide warnings about unreferenced local functions */
+#if defined(__clang__)
+#   pragma clang diagnostic ignored "-Wunused-function"
+#elif defined(_MSC_VER)
+#   pragma warning(disable:4505)
+#elif defined(__GNUC__)
+#   pragma GCC diagnostic ignored "-Wunused-function"
+#endif
+
+/*
+ * Include windows.h without Windows Sockets 1.1 to prevent conflicts with
+ * Windows Sockets 2.0.
+ */
+#ifndef WIN32_LEAN_AND_MEAN
+#   define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+
+#include <cerrno>
+#include <cstdarg>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <cwchar>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+/* Indicates that d_type field is available in dirent structure */
+#define _DIRENT_HAVE_D_TYPE
+
+/* Indicates that d_namlen field is available in dirent structure */
+#define _DIRENT_HAVE_D_NAMLEN
+
+/* Entries missing from MSVC 6.0 */
+#if !defined(FILE_ATTRIBUTE_DEVICE)
+#   define FILE_ATTRIBUTE_DEVICE 0x40
+#endif
+
+/* File type and permission flags for stat(), general mask */
+#if !defined(S_IFMT)
+#   define S_IFMT _S_IFMT
+#endif
+
+/* Directory bit */
+#if !defined(S_IFDIR)
+#   define S_IFDIR _S_IFDIR
+#endif
+
+/* Character device bit */
+#if !defined(S_IFCHR)
+#   define S_IFCHR _S_IFCHR
+#endif
+
+/* Pipe bit */
+#if !defined(S_IFFIFO)
+#   define S_IFFIFO _S_IFFIFO
+#endif
+
+/* Regular file bit */
+#if !defined(S_IFREG)
+#   define S_IFREG _S_IFREG
+#endif
+
+/* Read permission */
+#if !defined(S_IREAD)
+#   define S_IREAD _S_IREAD
+#endif
+
+/* Write permission */
+#if !defined(S_IWRITE)
+#   define S_IWRITE _S_IWRITE
+#endif
+
+/* Execute permission */
+#if !defined(S_IEXEC)
+#   define S_IEXEC _S_IEXEC
+#endif
+
+/* Pipe */
+#if !defined(S_IFIFO)
+#   define S_IFIFO _S_IFIFO
+#endif
+
+/* Block device */
+#if !defined(S_IFBLK)
+#   define S_IFBLK 0
+#endif
+
+/* Link */
+#if !defined(S_IFLNK)
+#   define S_IFLNK 0
+#endif
+
+/* Socket */
+#if !defined(S_IFSOCK)
+#   define S_IFSOCK 0
+#endif
+
+/* Read user permission */
+#if !defined(S_IRUSR)
+#   define S_IRUSR S_IREAD
+#endif
+
+/* Write user permission */
+#if !defined(S_IWUSR)
+#   define S_IWUSR S_IWRITE
+#endif
+
+/* Execute user permission */
+#if !defined(S_IXUSR)
+#   define S_IXUSR 0
+#endif
+
+/* Read group permission */
+#if !defined(S_IRGRP)
+#   define S_IRGRP 0
+#endif
+
+/* Write group permission */
+#if !defined(S_IWGRP)
+#   define S_IWGRP 0
+#endif
+
+/* Execute group permission */
+#if !defined(S_IXGRP)
+#   define S_IXGRP 0
+#endif
+
+/* Read others permission */
+#if !defined(S_IROTH)
+#   define S_IROTH 0
+#endif
+
+/* Write others permission */
+#if !defined(S_IWOTH)
+#   define S_IWOTH 0
+#endif
+
+/* Execute others permission */
+#if !defined(S_IXOTH)
+#   define S_IXOTH 0
+#endif
+
+/* Maximum length of file name */
+#if !defined(PATH_MAX)
+#   define PATH_MAX MAX_PATH
+#endif
+#if !defined(FILENAME_MAX)
+#   define FILENAME_MAX MAX_PATH
+#endif
+#if !defined(NAME_MAX)
+#   define NAME_MAX FILENAME_MAX
+#endif
+
+/* File type flags for d_type */
+#define DT_UNKNOWN 0
+#define DT_REG S_IFREG
+#define DT_DIR S_IFDIR
+#define DT_FIFO S_IFIFO
+#define DT_SOCK S_IFSOCK
+#define DT_CHR S_IFCHR
+#define DT_BLK S_IFBLK
+#define DT_LNK S_IFLNK
+
+/* Macros for converting between st_mode and d_type */
+#define IFTODT(mode) ((mode) & S_IFMT)
+#define DTTOIF(type) (type)
+
+/*
+ * File type macros.  Note that block devices, sockets and links cannot be
+ * distinguished on Windows and the macros S_ISBLK, S_ISSOCK and S_ISLNK are
+ * only defined for compatibility.  These macros should always return false
+ * on Windows.
+ */
+#if !defined(S_ISFIFO)
+#   define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
+#endif
+#if !defined(S_ISDIR)
+#   define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
+#endif
+#if !defined(S_ISREG)
+#   define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
+#endif
+#if !defined(S_ISLNK)
+#   define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)
+#endif
+#if !defined(S_ISSOCK)
+#   define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
+#endif
+#if !defined(S_ISCHR)
+#   define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR)
+#endif
+#if !defined(S_ISBLK)
+#   define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK)
+#endif
+
+/* Return the exact length of the file name without zero terminator */
+#define _D_EXACT_NAMLEN(p) ((p)->d_namlen)
+
+/* Return the maximum size of a file name */
+#define _D_ALLOC_NAMLEN(p) ((PATH_MAX)+1)
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Wide-character version */
+struct _wdirent {
+    /* Always zero */
+    long d_ino;
+
+    /* File position within stream */
+    long d_off;
+
+    /* Structure size */
+    unsigned short d_reclen;
+
+    /* Length of name without \0 */
+    size_t d_namlen;
+
+    /* File type */
+    int d_type;
+
+    /* File name */
+    wchar_t d_name[PATH_MAX+1];
+};
+typedef struct _wdirent _wdirent;
+
+struct _WDIR {
+    /* Current directory entry */
+    struct _wdirent ent;
+
+    /* Private file data */
+    WIN32_FIND_DATAW data;
+
+    /* True if data is valid */
+    int cached;
+
+    /* Win32 search handle */
+    HANDLE handle;
+
+    /* Initial directory name */
+    wchar_t *patt;
+};
+typedef struct _WDIR _WDIR;
+
+/* Multi-byte character version */
+struct dirent {
+    /* Always zero */
+    long d_ino;
+
+    /* File position within stream */
+    long d_off;
+
+    /* Structure size */
+    unsigned short d_reclen;
+
+    /* Length of name without \0 */
+    size_t d_namlen;
+
+    /* File type */
+    int d_type;
+
+    /* File name */
+    char d_name[PATH_MAX+1];
+};
+typedef struct dirent dirent;
+
+struct DIR {
+    struct dirent ent;
+    struct _WDIR *wdirp;
+};
+typedef struct DIR DIR;
+
+
+/* Dirent functions */
+static DIR *opendir (const char *dirname);
+static _WDIR *_wopendir (const wchar_t *dirname);
+
+static struct dirent *readdir (DIR *dirp);
+static struct _wdirent *_wreaddir (_WDIR *dirp);
+
+static int readdir_r(
+    DIR *dirp, struct dirent *entry, struct dirent **result);
+static int _wreaddir_r(
+    _WDIR *dirp, struct _wdirent *entry, struct _wdirent **result);
+
+static int closedir (DIR *dirp);
+static int _wclosedir (_WDIR *dirp);
+
+static void rewinddir (DIR* dirp);
+static void _wrewinddir (_WDIR* dirp);
+
+static int scandir (const char *dirname, struct dirent ***namelist,
+    int (*filter)(const struct dirent*),
+    int (*compare)(const struct dirent**, const struct dirent**));
+
+static int alphasort (const struct dirent **a, const struct dirent **b);
+
+static int versionsort (const struct dirent **a, const struct dirent **b);
+
+
+/* For compatibility with Symbian */
+#define wdirent _wdirent
+#define WDIR _WDIR
+#define wopendir _wopendir
+#define wreaddir _wreaddir
+#define wclosedir _wclosedir
+#define wrewinddir _wrewinddir
+
+
+/* Internal utility functions */
+static WIN32_FIND_DATAW *dirent_first (_WDIR *dirp);
+static WIN32_FIND_DATAW *dirent_next (_WDIR *dirp);
+
+static int dirent_mbstowcs_s(
+    size_t *pReturnValue,
+    wchar_t *wcstr,
+    size_t sizeInWords,
+    const char *mbstr,
+    size_t count);
+
+static int dirent_wcstombs_s(
+    size_t *pReturnValue,
+    char *mbstr,
+    size_t sizeInBytes,
+    const wchar_t *wcstr,
+    size_t count);
+
+static void dirent_set_errno (int error);
+
+
+/*
+ * Open directory stream DIRNAME for read and return a pointer to the
+ * internal working area that is used to retrieve individual directory
+ * entries.
+ */
+static _WDIR*
+_wopendir(
+    const wchar_t *dirname)
+{
+    _WDIR *dirp;
+    DWORD n;
+    wchar_t *p;
+
+    /* Must have directory name */
+    if (dirname == NULL  ||  dirname[0] == '\0') {
+        dirent_set_errno (ENOENT);
+        return NULL;
+    }
+
+    /* Allocate new _WDIR structure */
+    dirp = (_WDIR*) malloc (sizeof (struct _WDIR));
+    if (!dirp) {
+        return NULL;
+    }
+
+    /* Reset _WDIR structure */
+    dirp->handle = INVALID_HANDLE_VALUE;
+    dirp->patt = NULL;
+    dirp->cached = 0;
+
+    /*
+     * Compute the length of full path plus zero terminator
+     *
+     * Note that on WinRT there's no way to convert relative paths
+     * into absolute paths, so just assume it is an absolute path.
+     */
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+    /* Desktop */
+    n = GetFullPathNameW (dirname, 0, NULL, NULL);
+#else
+    /* WinRT */
+    n = wcslen (dirname);
+#endif
+
+    /* Allocate room for absolute directory name and search pattern */
+    dirp->patt = (wchar_t*) malloc (sizeof (wchar_t) * n + 16);
+    if (dirp->patt == NULL) {
+        goto exit_closedir;
+    }
+
+    /*
+     * Convert relative directory name to an absolute one.  This
+     * allows rewinddir() to function correctly even when current
+     * working directory is changed between opendir() and rewinddir().
+     *
+     * Note that on WinRT there's no way to convert relative paths
+     * into absolute paths, so just assume it is an absolute path.
+     */
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+    /* Desktop */
+    n = GetFullPathNameW (dirname, n, dirp->patt, NULL);
+    if (n <= 0) {
+        goto exit_closedir;
+    }
+#else
+    /* WinRT */
+    wcsncpy_s (dirp->patt, n+1, dirname, n);
+#endif
+
+    /* Append search pattern \* to the directory name */
+    p = dirp->patt + n;
+    switch (p[-1]) {
+    case '\\':
+    case '/':
+    case ':':
+        /* Directory ends in path separator, e.g. c:\temp\ */
+        /*NOP*/;
+        break;
+
+    default:
+        /* Directory name doesn't end in path separator */
+        *p++ = '\\';
+    }
+    *p++ = '*';
+    *p = '\0';
+
+    /* Open directory stream and retrieve the first entry */
+    if (!dirent_first (dirp)) {
+        goto exit_closedir;
+    }
+
+    /* Success */
+    return dirp;
+
+    /* Failure */
+exit_closedir:
+    _wclosedir (dirp);
+    return NULL;
+}
+
+/*
+ * Read next directory entry.
+ *
+ * Returns pointer to static directory entry which may be overwritten by
+ * subsequent calls to _wreaddir().
+ */
+static struct _wdirent*
+_wreaddir(
+    _WDIR *dirp)
+{
+    struct _wdirent *entry;
+
+    /*
+     * Read directory entry to buffer.  We can safely ignore the return value
+     * as entry will be set to NULL in case of error.
+     */
+    (void) _wreaddir_r (dirp, &dirp->ent, &entry);
+
+    /* Return pointer to statically allocated directory entry */
+    return entry;
+}
+
+/*
+ * Read next directory entry.
+ *
+ * Returns zero on success.  If end of directory stream is reached, then sets
+ * result to NULL and returns zero.
+ */
+static int
+_wreaddir_r(
+    _WDIR *dirp,
+    struct _wdirent *entry,
+    struct _wdirent **result)
+{
+    WIN32_FIND_DATAW *datap;
+
+    /* Read next directory entry */
+    datap = dirent_next (dirp);
+    if (datap) {
+        size_t n;
+        DWORD attr;
+
+        /*
+         * Copy file name as wide-character string.  If the file name is too
+         * long to fit in to the destination buffer, then truncate file name
+         * to PATH_MAX characters and zero-terminate the buffer.
+         */
+        n = 0;
+        while (n < PATH_MAX  &&  datap->cFileName[n] != 0) {
+            entry->d_name[n] = datap->cFileName[n];
+            n++;
+        }
+        entry->d_name[n] = 0;
+
+        /* Length of file name excluding zero terminator */
+        entry->d_namlen = n;
+
+        /* File type */
+        attr = datap->dwFileAttributes;
+        if ((attr & FILE_ATTRIBUTE_DEVICE) != 0) {
+            entry->d_type = DT_CHR;
+        } else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) {
+            entry->d_type = DT_DIR;
+        } else {
+            entry->d_type = DT_REG;
+        }
+
+        /* Reset dummy fields */
+        entry->d_ino = 0;
+        entry->d_off = 0;
+        entry->d_reclen = sizeof (struct _wdirent);
+
+        /* Set result address */
+        *result = entry;
+
+    } else {
+
+        /* Return NULL to indicate end of directory */
+        *result = NULL;
+
+    }
+
+    return /*OK*/0;
+}
+
+/*
+ * Close directory stream opened by opendir() function.  This invalidates the
+ * DIR structure as well as any directory entry read previously by
+ * _wreaddir().
+ */
+static int
+_wclosedir(
+    _WDIR *dirp)
+{
+    int ok;
+    if (dirp) {
+
+        /* Release search handle */
+        if (dirp->handle != INVALID_HANDLE_VALUE) {
+            FindClose (dirp->handle);
+        }
+
+        /* Release search pattern */
+        free (dirp->patt);
+
+        /* Release directory structure */
+        free (dirp);
+        ok = /*success*/0;
+
+    } else {
+
+        /* Invalid directory stream */
+        dirent_set_errno (EBADF);
+        ok = /*failure*/-1;
+
+    }
+    return ok;
+}
+
+/*
+ * Rewind directory stream such that _wreaddir() returns the very first
+ * file name again.
+ */
+static void
+_wrewinddir(
+    _WDIR* dirp)
+{
+    if (dirp) {
+        /* Release existing search handle */
+        if (dirp->handle != INVALID_HANDLE_VALUE) {
+            FindClose (dirp->handle);
+        }
+
+        /* Open new search handle */
+        dirent_first (dirp);
+    }
+}
+
+/* Get first directory entry (internal) */
+static WIN32_FIND_DATAW*
+dirent_first(
+    _WDIR *dirp)
+{
+    WIN32_FIND_DATAW *datap;
+    DWORD error;
+
+    /* Open directory and retrieve the first entry */
+    dirp->handle = FindFirstFileExW(
+        dirp->patt, FindExInfoStandard, &dirp->data,
+        FindExSearchNameMatch, NULL, 0);
+    if (dirp->handle != INVALID_HANDLE_VALUE) {
+
+        /* a directory entry is now waiting in memory */
+        datap = &dirp->data;
+        dirp->cached = 1;
+
+    } else {
+
+        /* Failed to open directory: no directory entry in memory */
+        dirp->cached = 0;
+        datap = NULL;
+
+        /* Set error code */
+        error = GetLastError ();
+        switch (error) {
+        case ERROR_ACCESS_DENIED:
+            /* No read access to directory */
+            dirent_set_errno (EACCES);
+            break;
+
+        case ERROR_DIRECTORY:
+            /* Directory name is invalid */
+            dirent_set_errno (ENOTDIR);
+            break;
+
+        case ERROR_PATH_NOT_FOUND:
+        default:
+            /* Cannot find the file */
+            dirent_set_errno (ENOENT);
+        }
+
+    }
+    return datap;
+}
+
+/*
+ * Get next directory entry (internal).
+ *
+ * Returns
+ */
+static WIN32_FIND_DATAW*
+dirent_next(
+    _WDIR *dirp)
+{
+    WIN32_FIND_DATAW *p;
+
+    /* Get next directory entry */
+    if (dirp->cached != 0) {
+
+        /* A valid directory entry already in memory */
+        p = &dirp->data;
+        dirp->cached = 0;
+
+    } else if (dirp->handle != INVALID_HANDLE_VALUE) {
+
+        /* Get the next directory entry from stream */
+        if (FindNextFileW (dirp->handle, &dirp->data) != FALSE) {
+            /* Got a file */
+            p = &dirp->data;
+        } else {
+            /* The very last entry has been processed or an error occurred */
+            FindClose (dirp->handle);
+            dirp->handle = INVALID_HANDLE_VALUE;
+            p = NULL;
+        }
+
+    } else {
+
+        /* End of directory stream reached */
+        p = NULL;
+
+    }
+
+    return p;
+}
+
+/*
+ * Open directory stream using plain old C-string.
+ */
+static DIR*
+opendir(
+    const char *dirname)
+{
+    struct DIR *dirp;
+
+    /* Must have directory name */
+    if (dirname == NULL  ||  dirname[0] == '\0') {
+        dirent_set_errno (ENOENT);
+        return NULL;
+    }
+
+    /* Allocate memory for DIR structure */
+    dirp = (DIR*) malloc (sizeof (struct DIR));
+    if (!dirp) {
+        return NULL;
+    }
+    {
+        int error;
+        wchar_t wname[PATH_MAX + 1];
+        size_t n;
+
+        /* Convert directory name to wide-character string */
+        error = dirent_mbstowcs_s(
+            &n, wname, PATH_MAX + 1, dirname, PATH_MAX + 1);
+        if (error) {
+            /*
+             * Cannot convert file name to wide-character string.  This
+             * occurs if the string contains invalid multi-byte sequences or
+             * the output buffer is too small to contain the resulting
+             * string.
+             */
+            goto exit_free;
+        }
+
+
+        /* Open directory stream using wide-character name */
+        dirp->wdirp = _wopendir (wname);
+        if (!dirp->wdirp) {
+            goto exit_free;
+        }
+
+    }
+
+    /* Success */
+    return dirp;
+
+    /* Failure */
+exit_free:
+    free (dirp);
+    return NULL;
+}
+
+/*
+ * Read next directory entry.
+ */
+static struct dirent*
+readdir(
+    DIR *dirp)
+{
+    struct dirent *entry;
+
+    /*
+     * Read directory entry to buffer.  We can safely ignore the return value
+     * as entry will be set to NULL in case of error.
+     */
+    (void) readdir_r (dirp, &dirp->ent, &entry);
+
+    /* Return pointer to statically allocated directory entry */
+    return entry;
+}
+
+/*
+ * Read next directory entry into called-allocated buffer.
+ *
+ * Returns zero on success.  If the end of directory stream is reached, then
+ * sets result to NULL and returns zero.
+ */
+static int
+readdir_r(
+    DIR *dirp,
+    struct dirent *entry,
+    struct dirent **result)
+{
+    WIN32_FIND_DATAW *datap;
+
+    /* Read next directory entry */
+    datap = dirent_next (dirp->wdirp);
+    if (datap) {
+        size_t n;
+        int error;
+
+        /* Attempt to convert file name to multi-byte string */
+        error = dirent_wcstombs_s(
+            &n, entry->d_name, PATH_MAX + 1, datap->cFileName, PATH_MAX + 1);
+
+        /*
+         * If the file name cannot be represented by a multi-byte string,
+         * then attempt to use old 8+3 file name.  This allows traditional
+         * Unix-code to access some file names despite of unicode
+         * characters, although file names may seem unfamiliar to the user.
+         *
+         * Be ware that the code below cannot come up with a short file
+         * name unless the file system provides one.  At least
+         * VirtualBox shared folders fail to do this.
+         */
+        if (error  &&  datap->cAlternateFileName[0] != '\0') {
+            error = dirent_wcstombs_s(
+                &n, entry->d_name, PATH_MAX + 1,
+                datap->cAlternateFileName, PATH_MAX + 1);
+        }
+
+        if (!error) {
+            DWORD attr;
+
+            /* Length of file name excluding zero terminator */
+            entry->d_namlen = n - 1;
+
+            /* File attributes */
+            attr = datap->dwFileAttributes;
+            if ((attr & FILE_ATTRIBUTE_DEVICE) != 0) {
+                entry->d_type = DT_CHR;
+            } else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) {
+                entry->d_type = DT_DIR;
+            } else {
+                entry->d_type = DT_REG;
+            }
+
+            /* Reset dummy fields */
+            entry->d_ino = 0;
+            entry->d_off = 0;
+            entry->d_reclen = sizeof (struct dirent);
+
+        } else {
+
+            /*
+             * Cannot convert file name to multi-byte string so construct
+             * an erroneous directory entry and return that.  Note that
+             * we cannot return NULL as that would stop the processing
+             * of directory entries completely.
+             */
+            entry->d_name[0] = '?';
+            entry->d_name[1] = '\0';
+            entry->d_namlen = 1;
+            entry->d_type = DT_UNKNOWN;
+            entry->d_ino = 0;
+            entry->d_off = -1;
+            entry->d_reclen = 0;
+
+        }
+
+        /* Return pointer to directory entry */
+        *result = entry;
+
+    } else {
+
+        /* No more directory entries */
+        *result = NULL;
+
+    }
+
+    return /*OK*/0;
+}
+
+/*
+ * Close directory stream.
+ */
+static int
+closedir(
+    DIR *dirp)
+{
+    int ok;
+    if (dirp) {
+
+        /* Close wide-character directory stream */
+        ok = _wclosedir (dirp->wdirp);
+        dirp->wdirp = NULL;
+
+        /* Release multi-byte character version */
+        free (dirp);
+
+    } else {
+
+        /* Invalid directory stream */
+        dirent_set_errno (EBADF);
+        ok = /*failure*/-1;
+
+    }
+    return ok;
+}
+
+/*
+ * Rewind directory stream to beginning.
+ */
+static void
+rewinddir(
+    DIR* dirp)
+{
+    /* Rewind wide-character string directory stream */
+    _wrewinddir (dirp->wdirp);
+}
+
+/*
+ * Scan directory for entries.
+ */
+static int
+scandir(
+    const char *dirname,
+    struct dirent ***namelist,
+    int (*filter)(const struct dirent*),
+    int (*compare)(const struct dirent**, const struct dirent**))
+{
+    struct dirent **files = NULL;
+    size_t size = 0;
+    size_t allocated = 0;
+    const size_t init_size = 1;
+    DIR *dir = NULL;
+    struct dirent *entry;
+    struct dirent *tmp = NULL;
+    size_t i;
+    int result = 0;
+
+    /* Open directory stream */
+    dir = opendir (dirname);
+    if (dir) {
+
+        /* Read directory entries to memory */
+        while (1) {
+
+            /* Enlarge pointer table to make room for another pointer */
+            if (size >= allocated) {
+                void *p;
+                size_t num_entries;
+
+                /* Compute number of entries in the enlarged pointer table */
+                if (size < init_size) {
+                    /* Allocate initial pointer table */
+                    num_entries = init_size;
+                } else {
+                    /* Double the size */
+                    num_entries = size * 2;
+                }
+
+                /* Allocate first pointer table or enlarge existing table */
+                p = realloc (files, sizeof (void*) * num_entries);
+                if (p != NULL) {
+                    /* Got the memory */
+                    files = (dirent**) p;
+                    allocated = num_entries;
+                } else {
+                    /* Out of memory */
+                    result = -1;
+                    break;
+                }
+
+            }
+
+            /* Allocate room for temporary directory entry */
+            if (tmp == NULL) {
+                tmp = (struct dirent*) malloc (sizeof (struct dirent));
+                if (tmp == NULL) {
+                    /* Cannot allocate temporary directory entry */
+                    result = -1;
+                    break;
+                }
+            }
+
+            /* Read directory entry to temporary area */
+            if (readdir_r (dir, tmp, &entry) == /*OK*/0) {
+
+                /* Did we get an entry? */
+                if (entry != NULL) {
+                    int pass;
+
+                    /* Determine whether to include the entry in result */
+                    if (filter) {
+                        /* Let the filter function decide */
+                        pass = filter (tmp);
+                    } else {
+                        /* No filter function, include everything */
+                        pass = 1;
+                    }
+
+                    if (pass) {
+                        /* Store the temporary entry to pointer table */
+                        files[size++] = tmp;
+                        tmp = NULL;
+
+                        /* Keep up with the number of files */
+                        result++;
+                    }
+
+                } else {
+
+                    /*
+                     * End of directory stream reached => sort entries and
+                     * exit.
+                     */
+                    qsort (files, size, sizeof (void*),
+                        (int (*) (const void*, const void*)) compare);
+                    break;
+
+                }
+
+            } else {
+                /* Error reading directory entry */
+                result = /*Error*/ -1;
+                break;
+            }
+
+        }
+
+    } else {
+        /* Cannot open directory */
+        result = /*Error*/ -1;
+    }
+
+    /* Release temporary directory entry */
+    free (tmp);
+
+    /* Release allocated memory on error */
+    if (result < 0) {
+        for (i = 0; i < size; i++) {
+            free (files[i]);
+        }
+        free (files);
+        files = NULL;
+    }
+
+    /* Close directory stream */
+    if (dir) {
+        closedir (dir);
+    }
+
+    /* Pass pointer table to caller */
+    if (namelist) {
+        *namelist = files;
+    }
+    return result;
+}
+
+/* Alphabetical sorting */
+static int
+alphasort(
+    const struct dirent **a, const struct dirent **b)
+{
+    return strcoll ((*a)->d_name, (*b)->d_name);
+}
+
+/* Sort versions */
+static int
+versionsort(
+    const struct dirent **a, const struct dirent **b)
+{
+    /* FIXME: implement strverscmp and use that */
+    return alphasort (a, b);
+}
+
+/* Convert multi-byte string to wide character string */
+static int
+dirent_mbstowcs_s(
+    size_t *pReturnValue,
+    wchar_t *wcstr,
+    size_t sizeInWords,
+    const char *mbstr,
+    size_t count)
+{
+    int error;
+
+#if defined(_MSC_VER)  &&  _MSC_VER >= 1400
+
+    /* Microsoft Visual Studio 2005 or later */
+    error = mbstowcs_s (pReturnValue, wcstr, sizeInWords, mbstr, count);
+
+#else
+
+    /* Older Visual Studio or non-Microsoft compiler */
+    size_t n;
+
+    /* Convert to wide-character string (or count characters) */
+    n = mbstowcs (wcstr, mbstr, sizeInWords);
+    if (!wcstr  ||  n < count) {
+
+        /* Zero-terminate output buffer */
+        if (wcstr  &&  sizeInWords) {
+            if (n >= sizeInWords) {
+                n = sizeInWords - 1;
+            }
+            wcstr[n] = 0;
+        }
+
+        /* Length of resulting multi-byte string WITH zero terminator */
+        if (pReturnValue) {
+            *pReturnValue = n + 1;
+        }
+
+        /* Success */
+        error = 0;
+
+    } else {
+
+        /* Could not convert string */
+        error = 1;
+
+    }
+
+#endif
+    return error;
+}
+
+/* Convert wide-character string to multi-byte string */
+static int
+dirent_wcstombs_s(
+    size_t *pReturnValue,
+    char *mbstr,
+    size_t sizeInBytes, /* max size of mbstr */
+    const wchar_t *wcstr,
+    size_t count)
+{
+    int error;
+
+#if defined(_MSC_VER)  &&  _MSC_VER >= 1400
+
+    /* Microsoft Visual Studio 2005 or later */
+    error = wcstombs_s (pReturnValue, mbstr, sizeInBytes, wcstr, count);
+
+#else
+
+    /* Older Visual Studio or non-Microsoft compiler */
+    size_t n;
+
+    /* Convert to multi-byte string (or count the number of bytes needed) */
+    n = wcstombs (mbstr, wcstr, sizeInBytes);
+    if (!mbstr  ||  n < count) {
+
+        /* Zero-terminate output buffer */
+        if (mbstr  &&  sizeInBytes) {
+            if (n >= sizeInBytes) {
+                n = sizeInBytes - 1;
+            }
+            mbstr[n] = '\0';
+        }
+
+        /* Length of resulting multi-bytes string WITH zero-terminator */
+        if (pReturnValue) {
+            *pReturnValue = n + 1;
+        }
+
+        /* Success */
+        error = 0;
+
+    } else {
+
+        /* Cannot convert string */
+        error = 1;
+
+    }
+
+#endif
+    return error;
+}
+
+/* Set errno variable */
+static void
+dirent_set_errno(
+    int error)
+{
+#if defined(_MSC_VER)  &&  _MSC_VER >= 1400
+
+    /* Microsoft Visual Studio 2005 and later */
+    _set_errno (error);
+
+#else
+
+    /* Non-Microsoft compiler or older Microsoft compiler */
+    errno = error;
+
+#endif
+}
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*DIRENT_H*/
diff --git a/third_party/google-glog/src/windows/glog/log_severity.h b/third_party/google-glog/src/windows/glog/log_severity.h
deleted file mode 100644
index 22a4191..0000000
--- a/third_party/google-glog/src/windows/glog/log_severity.h
+++ /dev/null
@@ -1,96 +0,0 @@
-// This file is automatically generated from src/glog/log_severity.h
-// using src/windows/preprocess.sh.
-// DO NOT EDIT!
-
-// Copyright (c) 2007, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#ifndef BASE_LOG_SEVERITY_H__
-#define BASE_LOG_SEVERITY_H__
-
-// Annoying stuff for windows -- makes sure clients can import these functions
-#ifndef GOOGLE_GLOG_DLL_DECL
-# if defined(_WIN32) && !defined(__CYGWIN__)
-#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)
-# else
-#   define GOOGLE_GLOG_DLL_DECL
-# endif
-#endif
-
-// Variables of type LogSeverity are widely taken to lie in the range
-// [0, NUM_SEVERITIES-1].  Be careful to preserve this assumption if
-// you ever need to change their values or add a new severity.
-typedef int LogSeverity;
-
-const int GLOG_INFO = 0, GLOG_WARNING = 1, GLOG_ERROR = 2, GLOG_FATAL = 3,
-  NUM_SEVERITIES = 4;
-#ifndef GLOG_NO_ABBREVIATED_SEVERITIES
-# ifdef ERROR
-#  error ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail.
-# endif
-const int INFO = GLOG_INFO, WARNING = GLOG_WARNING,
-  ERROR = GLOG_ERROR, FATAL = GLOG_FATAL;
-#endif
-
-// DFATAL is FATAL in debug mode, ERROR in normal mode
-#ifdef NDEBUG
-#define DFATAL_LEVEL ERROR
-#else
-#define DFATAL_LEVEL FATAL
-#endif
-
-extern GOOGLE_GLOG_DLL_DECL const char* const LogSeverityNames[NUM_SEVERITIES];
-
-// NDEBUG usage helpers related to (RAW_)DCHECK:
-//
-// DEBUG_MODE is for small !NDEBUG uses like
-//   if (DEBUG_MODE) foo.CheckThatFoo();
-// instead of substantially more verbose
-//   #ifndef NDEBUG
-//     foo.CheckThatFoo();
-//   #endif
-//
-// IF_DEBUG_MODE is for small !NDEBUG uses like
-//   IF_DEBUG_MODE( string error; )
-//   DCHECK(Foo(&error)) << error;
-// instead of substantially more verbose
-//   #ifndef NDEBUG
-//     string error;
-//     DCHECK(Foo(&error)) << error;
-//   #endif
-//
-#ifdef NDEBUG
-enum { DEBUG_MODE = 0 };
-#define IF_DEBUG_MODE(x)
-#else
-enum { DEBUG_MODE = 1 };
-#define IF_DEBUG_MODE(x) x
-#endif
-
-#endif  // BASE_LOG_SEVERITY_H__
diff --git a/third_party/google-glog/src/windows/glog/logging.h b/third_party/google-glog/src/windows/glog/logging.h
deleted file mode 100755
index 26e080b..0000000
--- a/third_party/google-glog/src/windows/glog/logging.h
+++ /dev/null
@@ -1,1662 +0,0 @@
-// This file is automatically generated from src/glog/logging.h.in
-// using src/windows/preprocess.sh.
-// DO NOT EDIT!
-
-// Copyright (c) 1999, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Author: Ray Sidney
-//
-// This file contains #include information about logging-related stuff.
-// Pretty much everybody needs to #include this file so that they can
-// log various happenings.
-//
-#ifndef _LOGGING_H_
-#define _LOGGING_H_
-
-#include <errno.h>
-#include <string.h>
-#include <time.h>
-#include <iosfwd>
-#include <ostream>
-#include <sstream>
-#include <string>
-#if 0
-# include <unistd.h>
-#endif
-#include <vector>
-
-#if defined(_MSC_VER)
-#define GLOG_MSVC_PUSH_DISABLE_WARNING(n) __pragma(warning(push)) \
-                                     __pragma(warning(disable:n))
-#define GLOG_MSVC_POP_WARNING() __pragma(warning(pop))
-#else
-#define GLOG_MSVC_PUSH_DISABLE_WARNING(n)
-#define GLOG_MSVC_POP_WARNING()
-#endif
-
-// Annoying stuff for windows -- makes sure clients can import these functions
-#ifndef GOOGLE_GLOG_DLL_DECL
-# if defined(_WIN32) && !defined(__CYGWIN__)
-#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)
-# else
-#   define GOOGLE_GLOG_DLL_DECL
-# endif
-#endif
-
-// We care a lot about number of bits things take up.  Unfortunately,
-// systems define their bit-specific ints in a lot of different ways.
-// We use our own way, and have a typedef to get there.
-// Note: these commands below may look like "#if 1" or "#if 0", but
-// that's because they were constructed that way at ./configure time.
-// Look at logging.h.in to see how they're calculated (based on your config).
-#if 0
-#include <stdint.h>             // the normal place uint16_t is defined
-#endif
-#if 0
-#include <sys/types.h>          // the normal place u_int16_t is defined
-#endif
-#if 0
-#include <inttypes.h>           // a third place for uint16_t or u_int16_t
-#endif
-
-#if 0
-#include <gflags/gflags.h>
-#endif
-
-namespace google {
-
-#if 0      // the C99 format
-typedef int32_t int32;
-typedef uint32_t uint32;
-typedef int64_t int64;
-typedef uint64_t uint64;
-#elif 0   // the BSD format
-typedef int32_t int32;
-typedef u_int32_t uint32;
-typedef int64_t int64;
-typedef u_int64_t uint64;
-#elif 1    // the windows (vc7) format
-typedef __int32 int32;
-typedef unsigned __int32 uint32;
-typedef __int64 int64;
-typedef unsigned __int64 uint64;
-#else
-#error Do not know how to define a 32-bit integer quantity on your system
-#endif
-
-}
-
-// The global value of GOOGLE_STRIP_LOG. All the messages logged to
-// LOG(XXX) with severity less than GOOGLE_STRIP_LOG will not be displayed.
-// If it can be determined at compile time that the message will not be
-// printed, the statement will be compiled out.
-//
-// Example: to strip out all INFO and WARNING messages, use the value
-// of 2 below. To make an exception for WARNING messages from a single
-// file, add "#define GOOGLE_STRIP_LOG 1" to that file _before_ including
-// base/logging.h
-#ifndef GOOGLE_STRIP_LOG
-#define GOOGLE_STRIP_LOG 0
-#endif
-
-// GCC can be told that a certain branch is not likely to be taken (for
-// instance, a CHECK failure), and use that information in static analysis.
-// Giving it this information can help it optimize for the common case in
-// the absence of better information (ie. -fprofile-arcs).
-//
-#ifndef GOOGLE_PREDICT_BRANCH_NOT_TAKEN
-#if 0
-#define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x) (__builtin_expect(x, 0))
-#else
-#define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x) x
-#endif
-#endif
-
-#ifndef GOOGLE_PREDICT_FALSE
-#if 0
-#define GOOGLE_PREDICT_FALSE(x) (__builtin_expect(x, 0))
-#else
-#define GOOGLE_PREDICT_FALSE(x) x
-#endif
-#endif
-
-#ifndef GOOGLE_PREDICT_TRUE
-#if 0
-#define GOOGLE_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
-#else
-#define GOOGLE_PREDICT_TRUE(x) x
-#endif
-#endif
-
-
-// Make a bunch of macros for logging.  The way to log things is to stream
-// things to LOG(<a particular severity level>).  E.g.,
-//
-//   LOG(INFO) << "Found " << num_cookies << " cookies";
-//
-// You can capture log messages in a string, rather than reporting them
-// immediately:
-//
-//   vector<string> errors;
-//   LOG_STRING(ERROR, &errors) << "Couldn't parse cookie #" << cookie_num;
-//
-// This pushes back the new error onto 'errors'; if given a NULL pointer,
-// it reports the error via LOG(ERROR).
-//
-// You can also do conditional logging:
-//
-//   LOG_IF(INFO, num_cookies > 10) << "Got lots of cookies";
-//
-// You can also do occasional logging (log every n'th occurrence of an
-// event):
-//
-//   LOG_EVERY_N(INFO, 10) << "Got the " << google::COUNTER << "th cookie";
-//
-// The above will cause log messages to be output on the 1st, 11th, 21st, ...
-// times it is executed.  Note that the special google::COUNTER value is used
-// to identify which repetition is happening.
-//
-// You can also do occasional conditional logging (log every n'th
-// occurrence of an event, when condition is satisfied):
-//
-//   LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << google::COUNTER
-//                                           << "th big cookie";
-//
-// You can log messages the first N times your code executes a line. E.g.
-//
-//   LOG_FIRST_N(INFO, 20) << "Got the " << google::COUNTER << "th cookie";
-//
-// Outputs log messages for the first 20 times it is executed.
-//
-// Analogous SYSLOG, SYSLOG_IF, and SYSLOG_EVERY_N macros are available.
-// These log to syslog as well as to the normal logs.  If you use these at
-// all, you need to be aware that syslog can drastically reduce performance,
-// especially if it is configured for remote logging!  Don't use these
-// unless you fully understand this and have a concrete need to use them.
-// Even then, try to minimize your use of them.
-//
-// There are also "debug mode" logging macros like the ones above:
-//
-//   DLOG(INFO) << "Found cookies";
-//
-//   DLOG_IF(INFO, num_cookies > 10) << "Got lots of cookies";
-//
-//   DLOG_EVERY_N(INFO, 10) << "Got the " << google::COUNTER << "th cookie";
-//
-// All "debug mode" logging is compiled away to nothing for non-debug mode
-// compiles.
-//
-// We also have
-//
-//   LOG_ASSERT(assertion);
-//   DLOG_ASSERT(assertion);
-//
-// which is syntactic sugar for {,D}LOG_IF(FATAL, assert fails) << assertion;
-//
-// There are "verbose level" logging macros.  They look like
-//
-//   VLOG(1) << "I'm printed when you run the program with --v=1 or more";
-//   VLOG(2) << "I'm printed when you run the program with --v=2 or more";
-//
-// These always log at the INFO log level (when they log at all).
-// The verbose logging can also be turned on module-by-module.  For instance,
-//    --vmodule=mapreduce=2,file=1,gfs*=3 --v=0
-// will cause:
-//   a. VLOG(2) and lower messages to be printed from mapreduce.{h,cc}
-//   b. VLOG(1) and lower messages to be printed from file.{h,cc}
-//   c. VLOG(3) and lower messages to be printed from files prefixed with "gfs"
-//   d. VLOG(0) and lower messages to be printed from elsewhere
-//
-// The wildcarding functionality shown by (c) supports both '*' (match
-// 0 or more characters) and '?' (match any single character) wildcards.
-//
-// There's also VLOG_IS_ON(n) "verbose level" condition macro. To be used as
-//
-//   if (VLOG_IS_ON(2)) {
-//     // do some logging preparation and logging
-//     // that can't be accomplished with just VLOG(2) << ...;
-//   }
-//
-// There are also VLOG_IF, VLOG_EVERY_N and VLOG_IF_EVERY_N "verbose level"
-// condition macros for sample cases, when some extra computation and
-// preparation for logs is not needed.
-//   VLOG_IF(1, (size > 1024))
-//      << "I'm printed when size is more than 1024 and when you run the "
-//         "program with --v=1 or more";
-//   VLOG_EVERY_N(1, 10)
-//      << "I'm printed every 10th occurrence, and when you run the program "
-//         "with --v=1 or more. Present occurence is " << google::COUNTER;
-//   VLOG_IF_EVERY_N(1, (size > 1024), 10)
-//      << "I'm printed on every 10th occurence of case when size is more "
-//         " than 1024, when you run the program with --v=1 or more. ";
-//         "Present occurence is " << google::COUNTER;
-//
-// The supported severity levels for macros that allow you to specify one
-// are (in increasing order of severity) INFO, WARNING, ERROR, and FATAL.
-// Note that messages of a given severity are logged not only in the
-// logfile for that severity, but also in all logfiles of lower severity.
-// E.g., a message of severity FATAL will be logged to the logfiles of
-// severity FATAL, ERROR, WARNING, and INFO.
-//
-// There is also the special severity of DFATAL, which logs FATAL in
-// debug mode, ERROR in normal mode.
-//
-// Very important: logging a message at the FATAL severity level causes
-// the program to terminate (after the message is logged).
-//
-// Unless otherwise specified, logs will be written to the filename
-// "<program name>.<hostname>.<user name>.log.<severity level>.", followed
-// by the date, time, and pid (you can't prevent the date, time, and pid
-// from being in the filename).
-//
-// The logging code takes two flags:
-//     --v=#           set the verbose level
-//     --logtostderr   log all the messages to stderr instead of to logfiles
-
-// LOG LINE PREFIX FORMAT
-//
-// Log lines have this form:
-//
-//     Lmmdd hh:mm:ss.uuuuuu threadid file:line] msg...
-//
-// where the fields are defined as follows:
-//
-//   L                A single character, representing the log level
-//                    (eg 'I' for INFO)
-//   mm               The month (zero padded; ie May is '05')
-//   dd               The day (zero padded)
-//   hh:mm:ss.uuuuuu  Time in hours, minutes and fractional seconds
-//   threadid         The space-padded thread ID as returned by GetTID()
-//                    (this matches the PID on Linux)
-//   file             The file name
-//   line             The line number
-//   msg              The user-supplied message
-//
-// Example:
-//
-//   I1103 11:57:31.739339 24395 google.cc:2341] Command line: ./some_prog
-//   I1103 11:57:31.739403 24395 google.cc:2342] Process id 24395
-//
-// NOTE: although the microseconds are useful for comparing events on
-// a single machine, clocks on different machines may not be well
-// synchronized.  Hence, use caution when comparing the low bits of
-// timestamps from different machines.
-
-#ifndef DECLARE_VARIABLE
-#define MUST_UNDEF_GFLAGS_DECLARE_MACROS
-#define DECLARE_VARIABLE(type, shorttype, name, tn)                     \
-  namespace fL##shorttype {                                             \
-    extern GOOGLE_GLOG_DLL_DECL type FLAGS_##name;                      \
-  }                                                                     \
-  using fL##shorttype::FLAGS_##name
-
-// bool specialization
-#define DECLARE_bool(name) \
-  DECLARE_VARIABLE(bool, B, name, bool)
-
-// int32 specialization
-#define DECLARE_int32(name) \
-  DECLARE_VARIABLE(google::int32, I, name, int32)
-
-// Special case for string, because we have to specify the namespace
-// std::string, which doesn't play nicely with our FLAG__namespace hackery.
-#define DECLARE_string(name)                                            \
-  namespace fLS {                                                       \
-    extern GOOGLE_GLOG_DLL_DECL std::string& FLAGS_##name;              \
-  }                                                                     \
-  using fLS::FLAGS_##name
-#endif
-
-// Set whether log messages go to stderr instead of logfiles
-DECLARE_bool(logtostderr);
-
-// Set whether log messages go to stderr in addition to logfiles.
-DECLARE_bool(alsologtostderr);
-
-// Set color messages logged to stderr (if supported by terminal).
-DECLARE_bool(colorlogtostderr);
-
-// Log messages at a level >= this flag are automatically sent to
-// stderr in addition to log files.
-DECLARE_int32(stderrthreshold);
-
-// Set whether the log prefix should be prepended to each line of output.
-DECLARE_bool(log_prefix);
-
-// Log messages at a level <= this flag are buffered.
-// Log messages at a higher level are flushed immediately.
-DECLARE_int32(logbuflevel);
-
-// Sets the maximum number of seconds which logs may be buffered for.
-DECLARE_int32(logbufsecs);
-
-// Log suppression level: messages logged at a lower level than this
-// are suppressed.
-DECLARE_int32(minloglevel);
-
-// If specified, logfiles are written into this directory instead of the
-// default logging directory.
-DECLARE_string(log_dir);
-
-// Set the log file mode.
-DECLARE_int32(logfile_mode);
-
-// Sets the path of the directory into which to put additional links
-// to the log files.
-DECLARE_string(log_link);
-
-DECLARE_int32(v);  // in vlog_is_on.cc
-
-// Sets the maximum log file size (in MB).
-DECLARE_int32(max_log_size);
-
-// Sets whether to avoid logging to the disk if the disk is full.
-DECLARE_bool(stop_logging_if_full_disk);
-
-#ifdef MUST_UNDEF_GFLAGS_DECLARE_MACROS
-#undef MUST_UNDEF_GFLAGS_DECLARE_MACROS
-#undef DECLARE_VARIABLE
-#undef DECLARE_bool
-#undef DECLARE_int32
-#undef DECLARE_string
-#endif
-
-// Log messages below the GOOGLE_STRIP_LOG level will be compiled away for
-// security reasons. See LOG(severtiy) below.
-
-// A few definitions of macros that don't generate much code.  Since
-// LOG(INFO) and its ilk are used all over our code, it's
-// better to have compact code for these operations.
-
-#if GOOGLE_STRIP_LOG == 0
-#define COMPACT_GOOGLE_LOG_INFO google::LogMessage( \
-      __FILE__, __LINE__)
-#define LOG_TO_STRING_INFO(message) google::LogMessage( \
-      __FILE__, __LINE__, google::GLOG_INFO, message)
-#else
-#define COMPACT_GOOGLE_LOG_INFO google::NullStream()
-#define LOG_TO_STRING_INFO(message) google::NullStream()
-#endif
-
-#if GOOGLE_STRIP_LOG <= 1
-#define COMPACT_GOOGLE_LOG_WARNING google::LogMessage( \
-      __FILE__, __LINE__, google::GLOG_WARNING)
-#define LOG_TO_STRING_WARNING(message) google::LogMessage( \
-      __FILE__, __LINE__, google::GLOG_WARNING, message)
-#else
-#define COMPACT_GOOGLE_LOG_WARNING google::NullStream()
-#define LOG_TO_STRING_WARNING(message) google::NullStream()
-#endif
-
-#if GOOGLE_STRIP_LOG <= 2
-#define COMPACT_GOOGLE_LOG_ERROR google::LogMessage( \
-      __FILE__, __LINE__, google::GLOG_ERROR)
-#define LOG_TO_STRING_ERROR(message) google::LogMessage( \
-      __FILE__, __LINE__, google::GLOG_ERROR, message)
-#else
-#define COMPACT_GOOGLE_LOG_ERROR google::NullStream()
-#define LOG_TO_STRING_ERROR(message) google::NullStream()
-#endif
-
-#if GOOGLE_STRIP_LOG <= 3
-#define COMPACT_GOOGLE_LOG_FATAL google::LogMessageFatal( \
-      __FILE__, __LINE__)
-#define LOG_TO_STRING_FATAL(message) google::LogMessage( \
-      __FILE__, __LINE__, google::GLOG_FATAL, message)
-#else
-#define COMPACT_GOOGLE_LOG_FATAL google::NullStreamFatal()
-#define LOG_TO_STRING_FATAL(message) google::NullStreamFatal()
-#endif
-
-#if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON)
-#define DCHECK_IS_ON() 0
-#else
-#define DCHECK_IS_ON() 1
-#endif
-
-// For DFATAL, we want to use LogMessage (as opposed to
-// LogMessageFatal), to be consistent with the original behavior.
-#if !DCHECK_IS_ON()
-#define COMPACT_GOOGLE_LOG_DFATAL COMPACT_GOOGLE_LOG_ERROR
-#elif GOOGLE_STRIP_LOG <= 3
-#define COMPACT_GOOGLE_LOG_DFATAL google::LogMessage( \
-      __FILE__, __LINE__, google::GLOG_FATAL)
-#else
-#define COMPACT_GOOGLE_LOG_DFATAL google::NullStreamFatal()
-#endif
-
-#define GOOGLE_LOG_INFO(counter) google::LogMessage(__FILE__, __LINE__, google::GLOG_INFO, counter, &google::LogMessage::SendToLog)
-#define SYSLOG_INFO(counter) \
-  google::LogMessage(__FILE__, __LINE__, google::GLOG_INFO, counter, \
-  &google::LogMessage::SendToSyslogAndLog)
-#define GOOGLE_LOG_WARNING(counter)  \
-  google::LogMessage(__FILE__, __LINE__, google::GLOG_WARNING, counter, \
-  &google::LogMessage::SendToLog)
-#define SYSLOG_WARNING(counter)  \
-  google::LogMessage(__FILE__, __LINE__, google::GLOG_WARNING, counter, \
-  &google::LogMessage::SendToSyslogAndLog)
-#define GOOGLE_LOG_ERROR(counter)  \
-  google::LogMessage(__FILE__, __LINE__, google::GLOG_ERROR, counter, \
-  &google::LogMessage::SendToLog)
-#define SYSLOG_ERROR(counter)  \
-  google::LogMessage(__FILE__, __LINE__, google::GLOG_ERROR, counter, \
-  &google::LogMessage::SendToSyslogAndLog)
-#define GOOGLE_LOG_FATAL(counter) \
-  google::LogMessage(__FILE__, __LINE__, google::GLOG_FATAL, counter, \
-  &google::LogMessage::SendToLog)
-#define SYSLOG_FATAL(counter) \
-  google::LogMessage(__FILE__, __LINE__, google::GLOG_FATAL, counter, \
-  &google::LogMessage::SendToSyslogAndLog)
-#define GOOGLE_LOG_DFATAL(counter) \
-  google::LogMessage(__FILE__, __LINE__, google::DFATAL_LEVEL, counter, \
-  &google::LogMessage::SendToLog)
-#define SYSLOG_DFATAL(counter) \
-  google::LogMessage(__FILE__, __LINE__, google::DFATAL_LEVEL, counter, \
-  &google::LogMessage::SendToSyslogAndLog)
-
-#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) || defined(__CYGWIN32__)
-// A very useful logging macro to log windows errors:
-#define LOG_SYSRESULT(result) \
-  if (FAILED(HRESULT_FROM_WIN32(result))) { \
-    LPSTR message = NULL; \
-    LPSTR msg = reinterpret_cast<LPSTR>(&message); \
-    DWORD message_length = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | \
-                         FORMAT_MESSAGE_FROM_SYSTEM, \
-                         0, result, 0, msg, 100, NULL); \
-    if (message_length > 0) { \
-      google::LogMessage(__FILE__, __LINE__, google::GLOG_ERROR, 0, \
-          &google::LogMessage::SendToLog).stream() \
-          << reinterpret_cast<const char*>(message); \
-      LocalFree(message); \
-    } \
-  }
-#endif
-
-// We use the preprocessor's merging operator, "##", so that, e.g.,
-// LOG(INFO) becomes the token GOOGLE_LOG_INFO.  There's some funny
-// subtle difference between ostream member streaming functions (e.g.,
-// ostream::operator<<(int) and ostream non-member streaming functions
-// (e.g., ::operator<<(ostream&, string&): it turns out that it's
-// impossible to stream something like a string directly to an unnamed
-// ostream. We employ a neat hack by calling the stream() member
-// function of LogMessage which seems to avoid the problem.
-#define LOG(severity) COMPACT_GOOGLE_LOG_ ## severity.stream()
-#define SYSLOG(severity) SYSLOG_ ## severity(0).stream()
-
-namespace google {
-
-// They need the definitions of integer types.
-#include "glog/log_severity.h"
-#include "glog/vlog_is_on.h"
-
-// Initialize google's logging library. You will see the program name
-// specified by argv0 in log outputs.
-GOOGLE_GLOG_DLL_DECL void InitGoogleLogging(const char* argv0);
-
-// Shutdown google's logging library.
-GOOGLE_GLOG_DLL_DECL void ShutdownGoogleLogging();
-
-// Install a function which will be called after LOG(FATAL).
-GOOGLE_GLOG_DLL_DECL void InstallFailureFunction(void (*fail_func)());
-
-class LogSink;  // defined below
-
-// If a non-NULL sink pointer is given, we push this message to that sink.
-// For LOG_TO_SINK we then do normal LOG(severity) logging as well.
-// This is useful for capturing messages and passing/storing them
-// somewhere more specific than the global log of the process.
-// Argument types:
-//   LogSink* sink;
-//   LogSeverity severity;
-// The cast is to disambiguate NULL arguments.
-#define LOG_TO_SINK(sink, severity) \
-  google::LogMessage(                                    \
-      __FILE__, __LINE__,                                               \
-      google::GLOG_ ## severity,                         \
-      static_cast<google::LogSink*>(sink), true).stream()
-#define LOG_TO_SINK_BUT_NOT_TO_LOGFILE(sink, severity)                  \
-  google::LogMessage(                                    \
-      __FILE__, __LINE__,                                               \
-      google::GLOG_ ## severity,                         \
-      static_cast<google::LogSink*>(sink), false).stream()
-
-// If a non-NULL string pointer is given, we write this message to that string.
-// We then do normal LOG(severity) logging as well.
-// This is useful for capturing messages and storing them somewhere more
-// specific than the global log of the process.
-// Argument types:
-//   string* message;
-//   LogSeverity severity;
-// The cast is to disambiguate NULL arguments.
-// NOTE: LOG(severity) expands to LogMessage().stream() for the specified
-// severity.
-#define LOG_TO_STRING(severity, message) \
-  LOG_TO_STRING_##severity(static_cast<string*>(message)).stream()
-
-// If a non-NULL pointer is given, we push the message onto the end
-// of a vector of strings; otherwise, we report it with LOG(severity).
-// This is handy for capturing messages and perhaps passing them back
-// to the caller, rather than reporting them immediately.
-// Argument types:
-//   LogSeverity severity;
-//   vector<string> *outvec;
-// The cast is to disambiguate NULL arguments.
-#define LOG_STRING(severity, outvec) \
-  LOG_TO_STRING_##severity(static_cast<std::vector<std::string>*>(outvec)).stream()
-
-#define LOG_IF(severity, condition) \
-  !(condition) ? (void) 0 : google::LogMessageVoidify() & LOG(severity)
-#define SYSLOG_IF(severity, condition) \
-  !(condition) ? (void) 0 : google::LogMessageVoidify() & SYSLOG(severity)
-
-#define LOG_ASSERT(condition)  \
-  LOG_IF(FATAL, !(condition)) << "Assert failed: " #condition
-#define SYSLOG_ASSERT(condition) \
-  SYSLOG_IF(FATAL, !(condition)) << "Assert failed: " #condition
-
-// CHECK dies with a fatal error if condition is not true.  It is *not*
-// controlled by DCHECK_IS_ON(), so the check will be executed regardless of
-// compilation mode.  Therefore, it is safe to do things like:
-//    CHECK(fp->Write(x) == 4)
-#define CHECK(condition)  \
-      LOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN(!(condition))) \
-             << "Check failed: " #condition " "
-
-// A container for a string pointer which can be evaluated to a bool -
-// true iff the pointer is NULL.
-struct CheckOpString {
-  CheckOpString(std::string* str) : str_(str) { }
-  // No destructor: if str_ is non-NULL, we're about to LOG(FATAL),
-  // so there's no point in cleaning up str_.
-  operator bool() const {
-    return GOOGLE_PREDICT_BRANCH_NOT_TAKEN(str_ != NULL);
-  }
-  std::string* str_;
-};
-
-// Function is overloaded for integral types to allow static const
-// integrals declared in classes and not defined to be used as arguments to
-// CHECK* macros. It's not encouraged though.
-template <class T>
-inline const T&       GetReferenceableValue(const T&           t) { return t; }
-inline char           GetReferenceableValue(char               t) { return t; }
-inline unsigned char  GetReferenceableValue(unsigned char      t) { return t; }
-inline signed char    GetReferenceableValue(signed char        t) { return t; }
-inline short          GetReferenceableValue(short              t) { return t; }
-inline unsigned short GetReferenceableValue(unsigned short     t) { return t; }
-inline int            GetReferenceableValue(int                t) { return t; }
-inline unsigned int   GetReferenceableValue(unsigned int       t) { return t; }
-inline long           GetReferenceableValue(long               t) { return t; }
-inline unsigned long  GetReferenceableValue(unsigned long      t) { return t; }
-inline long long      GetReferenceableValue(long long          t) { return t; }
-inline unsigned long long GetReferenceableValue(unsigned long long t) {
-  return t;
-}
-
-// This is a dummy class to define the following operator.
-struct DummyClassToDefineOperator {};
-
-}
-
-// Define global operator<< to declare using ::operator<<.
-// This declaration will allow use to use CHECK macros for user
-// defined classes which have operator<< (e.g., stl_logging.h).
-inline std::ostream& operator<<(
-    std::ostream& out, const google::DummyClassToDefineOperator&) {
-  return out;
-}
-
-namespace google {
-
-// This formats a value for a failing CHECK_XX statement.  Ordinarily,
-// it uses the definition for operator<<, with a few special cases below.
-template <typename T>
-inline void MakeCheckOpValueString(std::ostream* os, const T& v) {
-  (*os) << v;
-}
-
-// Overrides for char types provide readable values for unprintable
-// characters.
-template <> GOOGLE_GLOG_DLL_DECL
-void MakeCheckOpValueString(std::ostream* os, const char& v);
-template <> GOOGLE_GLOG_DLL_DECL
-void MakeCheckOpValueString(std::ostream* os, const signed char& v);
-template <> GOOGLE_GLOG_DLL_DECL
-void MakeCheckOpValueString(std::ostream* os, const unsigned char& v);
-
-// Build the error message string. Specify no inlining for code size.
-template <typename T1, typename T2>
-std::string* MakeCheckOpString(const T1& v1, const T2& v2, const char* exprtext)
-    ;
-
-namespace base {
-namespace internal {
-
-// If "s" is less than base_logging::INFO, returns base_logging::INFO.
-// If "s" is greater than base_logging::FATAL, returns
-// base_logging::ERROR.  Otherwise, returns "s".
-LogSeverity NormalizeSeverity(LogSeverity s);
-
-}  // namespace internal
-
-// A helper class for formatting "expr (V1 vs. V2)" in a CHECK_XX
-// statement.  See MakeCheckOpString for sample usage.  Other
-// approaches were considered: use of a template method (e.g.,
-// base::BuildCheckOpString(exprtext, base::Print<T1>, &v1,
-// base::Print<T2>, &v2), however this approach has complications
-// related to volatile arguments and function-pointer arguments).
-class GOOGLE_GLOG_DLL_DECL CheckOpMessageBuilder {
- public:
-  // Inserts "exprtext" and " (" to the stream.
-  explicit CheckOpMessageBuilder(const char *exprtext);
-  // Deletes "stream_".
-  ~CheckOpMessageBuilder();
-  // For inserting the first variable.
-  std::ostream* ForVar1() { return stream_; }
-  // For inserting the second variable (adds an intermediate " vs. ").
-  std::ostream* ForVar2();
-  // Get the result (inserts the closing ")").
-  std::string* NewString();
-
- private:
-  std::ostringstream *stream_;
-};
-
-}  // namespace base
-
-template <typename T1, typename T2>
-std::string* MakeCheckOpString(const T1& v1, const T2& v2, const char* exprtext) {
-  base::CheckOpMessageBuilder comb(exprtext);
-  MakeCheckOpValueString(comb.ForVar1(), v1);
-  MakeCheckOpValueString(comb.ForVar2(), v2);
-  return comb.NewString();
-}
-
-// Helper functions for CHECK_OP macro.
-// The (int, int) specialization works around the issue that the compiler
-// will not instantiate the template version of the function on values of
-// unnamed enum type - see comment below.
-#define DEFINE_CHECK_OP_IMPL(name, op) \
-  template <typename T1, typename T2> \
-  inline std::string* name##Impl(const T1& v1, const T2& v2,    \
-                            const char* exprtext) { \
-    if (GOOGLE_PREDICT_TRUE(v1 op v2)) return NULL; \
-    else return MakeCheckOpString(v1, v2, exprtext); \
-  } \
-  inline std::string* name##Impl(int v1, int v2, const char* exprtext) { \
-    return name##Impl<int, int>(v1, v2, exprtext); \
-  }
-
-// We use the full name Check_EQ, Check_NE, etc. in case the file including
-// base/logging.h provides its own #defines for the simpler names EQ, NE, etc.
-// This happens if, for example, those are used as token names in a
-// yacc grammar.
-DEFINE_CHECK_OP_IMPL(Check_EQ, ==)  // Compilation error with CHECK_EQ(NULL, x)?
-DEFINE_CHECK_OP_IMPL(Check_NE, !=)  // Use CHECK(x == NULL) instead.
-DEFINE_CHECK_OP_IMPL(Check_LE, <=)
-DEFINE_CHECK_OP_IMPL(Check_LT, < )
-DEFINE_CHECK_OP_IMPL(Check_GE, >=)
-DEFINE_CHECK_OP_IMPL(Check_GT, > )
-#undef DEFINE_CHECK_OP_IMPL
-
-// Helper macro for binary operators.
-// Don't use this macro directly in your code, use CHECK_EQ et al below.
-
-#if defined(STATIC_ANALYSIS)
-// Only for static analysis tool to know that it is equivalent to assert
-#define CHECK_OP_LOG(name, op, val1, val2, log) CHECK((val1) op (val2))
-#elif DCHECK_IS_ON()
-// In debug mode, avoid constructing CheckOpStrings if possible,
-// to reduce the overhead of CHECK statments by 2x.
-// Real DCHECK-heavy tests have seen 1.5x speedups.
-
-// The meaning of "string" might be different between now and
-// when this macro gets invoked (e.g., if someone is experimenting
-// with other string implementations that get defined after this
-// file is included).  Save the current meaning now and use it
-// in the macro.
-typedef std::string _Check_string;
-#define CHECK_OP_LOG(name, op, val1, val2, log)                         \
-  while (google::_Check_string* _result =                \
-         google::Check##name##Impl(                      \
-             google::GetReferenceableValue(val1),        \
-             google::GetReferenceableValue(val2),        \
-             #val1 " " #op " " #val2))                                  \
-    log(__FILE__, __LINE__,                                             \
-        google::CheckOpString(_result)).stream()
-#else
-// In optimized mode, use CheckOpString to hint to compiler that
-// the while condition is unlikely.
-#define CHECK_OP_LOG(name, op, val1, val2, log)                         \
-  while (google::CheckOpString _result =                 \
-         google::Check##name##Impl(                      \
-             google::GetReferenceableValue(val1),        \
-             google::GetReferenceableValue(val2),        \
-             #val1 " " #op " " #val2))                                  \
-    log(__FILE__, __LINE__, _result).stream()
-#endif  // STATIC_ANALYSIS, DCHECK_IS_ON()
-
-#if GOOGLE_STRIP_LOG <= 3
-#define CHECK_OP(name, op, val1, val2) \
-  CHECK_OP_LOG(name, op, val1, val2, google::LogMessageFatal)
-#else
-#define CHECK_OP(name, op, val1, val2) \
-  CHECK_OP_LOG(name, op, val1, val2, google::NullStreamFatal)
-#endif // STRIP_LOG <= 3
-
-// Equality/Inequality checks - compare two values, and log a FATAL message
-// including the two values when the result is not as expected.  The values
-// must have operator<<(ostream, ...) defined.
-//
-// You may append to the error message like so:
-//   CHECK_NE(1, 2) << ": The world must be ending!";
-//
-// We are very careful to ensure that each argument is evaluated exactly
-// once, and that anything which is legal to pass as a function argument is
-// legal here.  In particular, the arguments may be temporary expressions
-// which will end up being destroyed at the end of the apparent statement,
-// for example:
-//   CHECK_EQ(string("abc")[1], 'b');
-//
-// WARNING: These don't compile correctly if one of the arguments is a pointer
-// and the other is NULL. To work around this, simply static_cast NULL to the
-// type of the desired pointer.
-
-#define CHECK_EQ(val1, val2) CHECK_OP(_EQ, ==, val1, val2)
-#define CHECK_NE(val1, val2) CHECK_OP(_NE, !=, val1, val2)
-#define CHECK_LE(val1, val2) CHECK_OP(_LE, <=, val1, val2)
-#define CHECK_LT(val1, val2) CHECK_OP(_LT, < , val1, val2)
-#define CHECK_GE(val1, val2) CHECK_OP(_GE, >=, val1, val2)
-#define CHECK_GT(val1, val2) CHECK_OP(_GT, > , val1, val2)
-
-// Check that the input is non NULL.  This very useful in constructor
-// initializer lists.
-
-#define CHECK_NOTNULL(val) \
-  google::CheckNotNull(__FILE__, __LINE__, "'" #val "' Must be non NULL", (val))
-
-// Helper functions for string comparisons.
-// To avoid bloat, the definitions are in logging.cc.
-#define DECLARE_CHECK_STROP_IMPL(func, expected) \
-  GOOGLE_GLOG_DLL_DECL std::string* Check##func##expected##Impl( \
-      const char* s1, const char* s2, const char* names);
-DECLARE_CHECK_STROP_IMPL(strcmp, true)
-DECLARE_CHECK_STROP_IMPL(strcmp, false)
-DECLARE_CHECK_STROP_IMPL(strcasecmp, true)
-DECLARE_CHECK_STROP_IMPL(strcasecmp, false)
-#undef DECLARE_CHECK_STROP_IMPL
-
-// Helper macro for string comparisons.
-// Don't use this macro directly in your code, use CHECK_STREQ et al below.
-#define CHECK_STROP(func, op, expected, s1, s2) \
-  while (google::CheckOpString _result = \
-         google::Check##func##expected##Impl((s1), (s2), \
-                                     #s1 " " #op " " #s2)) \
-    LOG(FATAL) << *_result.str_
-
-
-// String (char*) equality/inequality checks.
-// CASE versions are case-insensitive.
-//
-// Note that "s1" and "s2" may be temporary strings which are destroyed
-// by the compiler at the end of the current "full expression"
-// (e.g. CHECK_STREQ(Foo().c_str(), Bar().c_str())).
-
-#define CHECK_STREQ(s1, s2) CHECK_STROP(strcmp, ==, true, s1, s2)
-#define CHECK_STRNE(s1, s2) CHECK_STROP(strcmp, !=, false, s1, s2)
-#define CHECK_STRCASEEQ(s1, s2) CHECK_STROP(strcasecmp, ==, true, s1, s2)
-#define CHECK_STRCASENE(s1, s2) CHECK_STROP(strcasecmp, !=, false, s1, s2)
-
-#define CHECK_INDEX(I,A) CHECK(I < (sizeof(A)/sizeof(A[0])))
-#define CHECK_BOUND(B,A) CHECK(B <= (sizeof(A)/sizeof(A[0])))
-
-#define CHECK_DOUBLE_EQ(val1, val2)              \
-  do {                                           \
-    CHECK_LE((val1), (val2)+0.000000000000001L); \
-    CHECK_GE((val1), (val2)-0.000000000000001L); \
-  } while (0)
-
-#define CHECK_NEAR(val1, val2, margin)           \
-  do {                                           \
-    CHECK_LE((val1), (val2)+(margin));           \
-    CHECK_GE((val1), (val2)-(margin));           \
-  } while (0)
-
-// perror()..googly style!
-//
-// PLOG() and PLOG_IF() and PCHECK() behave exactly like their LOG* and
-// CHECK equivalents with the addition that they postpend a description
-// of the current state of errno to their output lines.
-
-#define PLOG(severity) GOOGLE_PLOG(severity, 0).stream()
-
-#define GOOGLE_PLOG(severity, counter)  \
-  google::ErrnoLogMessage( \
-      __FILE__, __LINE__, google::GLOG_ ## severity, counter, \
-      &google::LogMessage::SendToLog)
-
-#define PLOG_IF(severity, condition) \
-  !(condition) ? (void) 0 : google::LogMessageVoidify() & PLOG(severity)
-
-// A CHECK() macro that postpends errno if the condition is false. E.g.
-//
-// if (poll(fds, nfds, timeout) == -1) { PCHECK(errno == EINTR); ... }
-#define PCHECK(condition)  \
-      PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN(!(condition))) \
-              << "Check failed: " #condition " "
-
-// A CHECK() macro that lets you assert the success of a function that
-// returns -1 and sets errno in case of an error. E.g.
-//
-// CHECK_ERR(mkdir(path, 0700));
-//
-// or
-//
-// int fd = open(filename, flags); CHECK_ERR(fd) << ": open " << filename;
-#define CHECK_ERR(invocation)                                          \
-PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN((invocation) == -1))    \
-        << #invocation
-
-// Use macro expansion to create, for each use of LOG_EVERY_N(), static
-// variables with the __LINE__ expansion as part of the variable name.
-#define LOG_EVERY_N_VARNAME(base, line) LOG_EVERY_N_VARNAME_CONCAT(base, line)
-#define LOG_EVERY_N_VARNAME_CONCAT(base, line) base ## line
-
-#define LOG_OCCURRENCES LOG_EVERY_N_VARNAME(occurrences_, __LINE__)
-#define LOG_OCCURRENCES_MOD_N LOG_EVERY_N_VARNAME(occurrences_mod_n_, __LINE__)
-
-#define SOME_KIND_OF_LOG_EVERY_N(severity, n, what_to_do) \
-  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \
-  ++LOG_OCCURRENCES; \
-  if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \
-  if (LOG_OCCURRENCES_MOD_N == 1) \
-    google::LogMessage( \
-        __FILE__, __LINE__, google::GLOG_ ## severity, LOG_OCCURRENCES, \
-        &what_to_do).stream()
-
-#define SOME_KIND_OF_LOG_IF_EVERY_N(severity, condition, n, what_to_do) \
-  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \
-  ++LOG_OCCURRENCES; \
-  if (condition && \
-      ((LOG_OCCURRENCES_MOD_N=(LOG_OCCURRENCES_MOD_N + 1) % n) == (1 % n))) \
-    google::LogMessage( \
-        __FILE__, __LINE__, google::GLOG_ ## severity, LOG_OCCURRENCES, \
-                 &what_to_do).stream()
-
-#define SOME_KIND_OF_PLOG_EVERY_N(severity, n, what_to_do) \
-  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \
-  ++LOG_OCCURRENCES; \
-  if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \
-  if (LOG_OCCURRENCES_MOD_N == 1) \
-    google::ErrnoLogMessage( \
-        __FILE__, __LINE__, google::GLOG_ ## severity, LOG_OCCURRENCES, \
-        &what_to_do).stream()
-
-#define SOME_KIND_OF_LOG_FIRST_N(severity, n, what_to_do) \
-  static int LOG_OCCURRENCES = 0; \
-  if (LOG_OCCURRENCES <= n) \
-    ++LOG_OCCURRENCES; \
-  if (LOG_OCCURRENCES <= n) \
-    google::LogMessage( \
-        __FILE__, __LINE__, google::GLOG_ ## severity, LOG_OCCURRENCES, \
-        &what_to_do).stream()
-
-namespace glog_internal_namespace_ {
-template <bool>
-struct CompileAssert {
-};
-struct CrashReason;
-
-// Returns true if FailureSignalHandler is installed.
-bool IsFailureSignalHandlerInstalled();
-}  // namespace glog_internal_namespace_
-
-#define LOG_EVERY_N(severity, n)                                        \
-  SOME_KIND_OF_LOG_EVERY_N(severity, (n), google::LogMessage::SendToLog)
-
-#define SYSLOG_EVERY_N(severity, n) \
-  SOME_KIND_OF_LOG_EVERY_N(severity, (n), google::LogMessage::SendToSyslogAndLog)
-
-#define PLOG_EVERY_N(severity, n) \
-  SOME_KIND_OF_PLOG_EVERY_N(severity, (n), google::LogMessage::SendToLog)
-
-#define LOG_FIRST_N(severity, n) \
-  SOME_KIND_OF_LOG_FIRST_N(severity, (n), google::LogMessage::SendToLog)
-
-#define LOG_IF_EVERY_N(severity, condition, n) \
-  SOME_KIND_OF_LOG_IF_EVERY_N(severity, (condition), (n), google::LogMessage::SendToLog)
-
-// We want the special COUNTER value available for LOG_EVERY_X()'ed messages
-enum PRIVATE_Counter {COUNTER};
-
-#ifdef GLOG_NO_ABBREVIATED_SEVERITIES
-// wingdi.h defines ERROR to be 0. When we call LOG(ERROR), it gets
-// substituted with 0, and it expands to COMPACT_GOOGLE_LOG_0. To allow us
-// to keep using this syntax, we define this macro to do the same thing
-// as COMPACT_GOOGLE_LOG_ERROR.
-#define COMPACT_GOOGLE_LOG_0 COMPACT_GOOGLE_LOG_ERROR
-#define SYSLOG_0 SYSLOG_ERROR
-#define LOG_TO_STRING_0 LOG_TO_STRING_ERROR
-// Needed for LOG_IS_ON(ERROR).
-const LogSeverity GLOG_0 = GLOG_ERROR;
-#else
-// Users may include windows.h after logging.h without
-// GLOG_NO_ABBREVIATED_SEVERITIES nor WIN32_LEAN_AND_MEAN.
-// For this case, we cannot detect if ERROR is defined before users
-// actually use ERROR. Let's make an undefined symbol to warn users.
-# define GLOG_ERROR_MSG ERROR_macro_is_defined_Define_GLOG_NO_ABBREVIATED_SEVERITIES_before_including_logging_h_See_the_document_for_detail
-# define COMPACT_GOOGLE_LOG_0 GLOG_ERROR_MSG
-# define SYSLOG_0 GLOG_ERROR_MSG
-# define LOG_TO_STRING_0 GLOG_ERROR_MSG
-# define GLOG_0 GLOG_ERROR_MSG
-#endif
-
-// Plus some debug-logging macros that get compiled to nothing for production
-
-#if DCHECK_IS_ON()
-
-#define DLOG(severity) LOG(severity)
-#define DVLOG(verboselevel) VLOG(verboselevel)
-#define DLOG_IF(severity, condition) LOG_IF(severity, condition)
-#define DLOG_EVERY_N(severity, n) LOG_EVERY_N(severity, n)
-#define DLOG_IF_EVERY_N(severity, condition, n) \
-  LOG_IF_EVERY_N(severity, condition, n)
-#define DLOG_ASSERT(condition) LOG_ASSERT(condition)
-
-// debug-only checking.  executed if DCHECK_IS_ON().
-#define DCHECK(condition) CHECK(condition)
-#define DCHECK_EQ(val1, val2) CHECK_EQ(val1, val2)
-#define DCHECK_NE(val1, val2) CHECK_NE(val1, val2)
-#define DCHECK_LE(val1, val2) CHECK_LE(val1, val2)
-#define DCHECK_LT(val1, val2) CHECK_LT(val1, val2)
-#define DCHECK_GE(val1, val2) CHECK_GE(val1, val2)
-#define DCHECK_GT(val1, val2) CHECK_GT(val1, val2)
-#define DCHECK_NOTNULL(val) CHECK_NOTNULL(val)
-#define DCHECK_STREQ(str1, str2) CHECK_STREQ(str1, str2)
-#define DCHECK_STRCASEEQ(str1, str2) CHECK_STRCASEEQ(str1, str2)
-#define DCHECK_STRNE(str1, str2) CHECK_STRNE(str1, str2)
-#define DCHECK_STRCASENE(str1, str2) CHECK_STRCASENE(str1, str2)
-
-#else  // !DCHECK_IS_ON()
-
-#define DLOG(severity) \
-  true ? (void) 0 : google::LogMessageVoidify() & LOG(severity)
-
-#define DVLOG(verboselevel) \
-  (true || !VLOG_IS_ON(verboselevel)) ?\
-    (void) 0 : google::LogMessageVoidify() & LOG(INFO)
-
-#define DLOG_IF(severity, condition) \
-  (true || !(condition)) ? (void) 0 : google::LogMessageVoidify() & LOG(severity)
-
-#define DLOG_EVERY_N(severity, n) \
-  true ? (void) 0 : google::LogMessageVoidify() & LOG(severity)
-
-#define DLOG_IF_EVERY_N(severity, condition, n) \
-  (true || !(condition))? (void) 0 : google::LogMessageVoidify() & LOG(severity)
-
-#define DLOG_ASSERT(condition) \
-  true ? (void) 0 : LOG_ASSERT(condition)
-
-// MSVC warning C4127: conditional expression is constant
-#define DCHECK(condition) \
-  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
-  while (false) \
-    GLOG_MSVC_POP_WARNING() CHECK(condition)
-
-#define DCHECK_EQ(val1, val2) \
-  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
-  while (false) \
-    GLOG_MSVC_POP_WARNING() CHECK_EQ(val1, val2)
-
-#define DCHECK_NE(val1, val2) \
-  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
-  while (false) \
-    GLOG_MSVC_POP_WARNING() CHECK_NE(val1, val2)
-
-#define DCHECK_LE(val1, val2) \
-  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
-  while (false) \
-    GLOG_MSVC_POP_WARNING() CHECK_LE(val1, val2)
-
-#define DCHECK_LT(val1, val2) \
-  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
-  while (false) \
-    GLOG_MSVC_POP_WARNING() CHECK_LT(val1, val2)
-
-#define DCHECK_GE(val1, val2) \
-  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
-  while (false) \
-    GLOG_MSVC_POP_WARNING() CHECK_GE(val1, val2)
-
-#define DCHECK_GT(val1, val2) \
-  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
-  while (false) \
-    GLOG_MSVC_POP_WARNING() CHECK_GT(val1, val2)
-
-// You may see warnings in release mode if you don't use the return
-// value of DCHECK_NOTNULL. Please just use DCHECK for such cases.
-#define DCHECK_NOTNULL(val) (val)
-
-#define DCHECK_STREQ(str1, str2) \
-  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
-  while (false) \
-    GLOG_MSVC_POP_WARNING() CHECK_STREQ(str1, str2)
-
-#define DCHECK_STRCASEEQ(str1, str2) \
-  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
-  while (false) \
-    GLOG_MSVC_POP_WARNING() CHECK_STRCASEEQ(str1, str2)
-
-#define DCHECK_STRNE(str1, str2) \
-  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
-  while (false) \
-    GLOG_MSVC_POP_WARNING() CHECK_STRNE(str1, str2)
-
-#define DCHECK_STRCASENE(str1, str2) \
-  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
-  while (false) \
-    GLOG_MSVC_POP_WARNING() CHECK_STRCASENE(str1, str2)
-
-#endif  // DCHECK_IS_ON()
-
-// Log only in verbose mode.
-
-#define VLOG(verboselevel) LOG_IF(INFO, VLOG_IS_ON(verboselevel))
-
-#define VLOG_IF(verboselevel, condition) \
-  LOG_IF(INFO, (condition) && VLOG_IS_ON(verboselevel))
-
-#define VLOG_EVERY_N(verboselevel, n) \
-  LOG_IF_EVERY_N(INFO, VLOG_IS_ON(verboselevel), n)
-
-#define VLOG_IF_EVERY_N(verboselevel, condition, n) \
-  LOG_IF_EVERY_N(INFO, (condition) && VLOG_IS_ON(verboselevel), n)
-
-namespace base_logging {
-
-// LogMessage::LogStream is a std::ostream backed by this streambuf.
-// This class ignores overflow and leaves two bytes at the end of the
-// buffer to allow for a '\n' and '\0'.
-class GOOGLE_GLOG_DLL_DECL LogStreamBuf : public std::streambuf {
- public:
-  // REQUIREMENTS: "len" must be >= 2 to account for the '\n' and '\n'.
-  LogStreamBuf(char *buf, int len) {
-    setp(buf, buf + len - 2);
-  }
-
-  // Resets the buffer. Useful if we reuse it by means of TLS.
-  void reset() {
-     setp(pbase(), epptr());
-  }
-
-  // This effectively ignores overflow.
-  virtual int_type overflow(int_type ch) {
-    return ch;
-  }
-
-  // Legacy public ostrstream method.
-  size_t pcount() const { return pptr() - pbase(); }
-  char* pbase() const { return std::streambuf::pbase(); }
-};
-
-}  // namespace base_logging
-
-//
-// This class more or less represents a particular log message.  You
-// create an instance of LogMessage and then stream stuff to it.
-// When you finish streaming to it, ~LogMessage is called and the
-// full message gets streamed to the appropriate destination.
-//
-// You shouldn't actually use LogMessage's constructor to log things,
-// though.  You should use the LOG() macro (and variants thereof)
-// above.
-class GOOGLE_GLOG_DLL_DECL LogMessage {
-public:
-  enum {
-    // Passing kNoLogPrefix for the line number disables the
-    // log-message prefix. Useful for using the LogMessage
-    // infrastructure as a printing utility. See also the --log_prefix
-    // flag for controlling the log-message prefix on an
-    // application-wide basis.
-    kNoLogPrefix = -1
-  };
-
-  // LogStream inherit from non-DLL-exported class (std::ostrstream)
-  // and VC++ produces a warning for this situation.
-  // However, MSDN says "C4275 can be ignored in Microsoft Visual C++
-  // 2005 if you are deriving from a type in the Standard C++ Library"
-  // http://msdn.microsoft.com/en-us/library/3tdb471s(VS.80).aspx
-  // Let's just ignore the warning.
-GLOG_MSVC_PUSH_DISABLE_WARNING(4275)
-  class GOOGLE_GLOG_DLL_DECL LogStream : public std::ostream {
-GLOG_MSVC_POP_WARNING()
-  public:
-    LogStream(char *buf, int len, int ctr)
-        : std::ostream(NULL),
-          streambuf_(buf, len),
-          ctr_(ctr),
-          self_(this) {
-      rdbuf(&streambuf_);
-    }
-
-    int ctr() const { return ctr_; }
-    void set_ctr(int ctr) { ctr_ = ctr; }
-    LogStream* self() const { return self_; }
-
-    // Legacy std::streambuf methods.
-    size_t pcount() const { return streambuf_.pcount(); }
-    char* pbase() const { return streambuf_.pbase(); }
-    char* str() const { return pbase(); }
-    void reset() { streambuf_.reset(); }
-
-  private:
-    LogStream(const LogStream&);
-    LogStream& operator=(const LogStream&);
-    base_logging::LogStreamBuf streambuf_;
-    int ctr_;  // Counter hack (for the LOG_EVERY_X() macro)
-    LogStream *self_;  // Consistency check hack
-  };
-
-public:
-  // icc 8 requires this typedef to avoid an internal compiler error.
-  typedef void (LogMessage::*SendMethod)();
-
-  LogMessage(const char* file, int line, LogSeverity severity, int ctr,
-             SendMethod send_method);
-
-  // Two special constructors that generate reduced amounts of code at
-  // LOG call sites for common cases.
-
-  // Used for LOG(INFO): Implied are:
-  // severity = INFO, ctr = 0, send_method = &LogMessage::SendToLog.
-  //
-  // Using this constructor instead of the more complex constructor above
-  // saves 19 bytes per call site.
-  LogMessage(const char* file, int line);
-
-  // Used for LOG(severity) where severity != INFO.  Implied
-  // are: ctr = 0, send_method = &LogMessage::SendToLog
-  //
-  // Using this constructor instead of the more complex constructor above
-  // saves 17 bytes per call site.
-  LogMessage(const char* file, int line, LogSeverity severity);
-
-  // Constructor to log this message to a specified sink (if not NULL).
-  // Implied are: ctr = 0, send_method = &LogMessage::SendToSinkAndLog if
-  // also_send_to_log is true, send_method = &LogMessage::SendToSink otherwise.
-  LogMessage(const char* file, int line, LogSeverity severity, LogSink* sink,
-             bool also_send_to_log);
-
-  // Constructor where we also give a vector<string> pointer
-  // for storing the messages (if the pointer is not NULL).
-  // Implied are: ctr = 0, send_method = &LogMessage::SaveOrSendToLog.
-  LogMessage(const char* file, int line, LogSeverity severity,
-             std::vector<std::string>* outvec);
-
-  // Constructor where we also give a string pointer for storing the
-  // message (if the pointer is not NULL).  Implied are: ctr = 0,
-  // send_method = &LogMessage::WriteToStringAndLog.
-  LogMessage(const char* file, int line, LogSeverity severity,
-             std::string* message);
-
-  // A special constructor used for check failures
-  LogMessage(const char* file, int line, const CheckOpString& result);
-
-  ~LogMessage();
-
-  // Flush a buffered message to the sink set in the constructor.  Always
-  // called by the destructor, it may also be called from elsewhere if
-  // needed.  Only the first call is actioned; any later ones are ignored.
-  void Flush();
-
-  // An arbitrary limit on the length of a single log message.  This
-  // is so that streaming can be done more efficiently.
-  static const size_t kMaxLogMessageLen;
-
-  // Theses should not be called directly outside of logging.*,
-  // only passed as SendMethod arguments to other LogMessage methods:
-  void SendToLog();  // Actually dispatch to the logs
-  void SendToSyslogAndLog();  // Actually dispatch to syslog and the logs
-
-  // Call abort() or similar to perform LOG(FATAL) crash.
-  static void __declspec(noreturn) Fail();
-
-  std::ostream& stream();
-
-  int preserved_errno() const;
-
-  // Must be called without the log_mutex held.  (L < log_mutex)
-  static int64 num_messages(int severity);
-
-  struct LogMessageData;
-
-private:
-  // Fully internal SendMethod cases:
-  void SendToSinkAndLog();  // Send to sink if provided and dispatch to the logs
-  void SendToSink();  // Send to sink if provided, do nothing otherwise.
-
-  // Write to string if provided and dispatch to the logs.
-  void WriteToStringAndLog();
-
-  void SaveOrSendToLog();  // Save to stringvec if provided, else to logs
-
-  void Init(const char* file, int line, LogSeverity severity,
-            void (LogMessage::*send_method)());
-
-  // Used to fill in crash information during LOG(FATAL) failures.
-  void RecordCrashReason(glog_internal_namespace_::CrashReason* reason);
-
-  // Counts of messages sent at each priority:
-  static int64 num_messages_[NUM_SEVERITIES];  // under log_mutex
-
-  // We keep the data in a separate struct so that each instance of
-  // LogMessage uses less stack space.
-  LogMessageData* allocated_;
-  LogMessageData* data_;
-
-  friend class LogDestination;
-
-  LogMessage(const LogMessage&);
-  void operator=(const LogMessage&);
-};
-
-// This class happens to be thread-hostile because all instances share
-// a single data buffer, but since it can only be created just before
-// the process dies, we don't worry so much.
-class GOOGLE_GLOG_DLL_DECL LogMessageFatal : public LogMessage {
- public:
-  LogMessageFatal(const char* file, int line);
-  LogMessageFatal(const char* file, int line, const CheckOpString& result);
-  __declspec(noreturn) ~LogMessageFatal();
-};
-
-// A non-macro interface to the log facility; (useful
-// when the logging level is not a compile-time constant).
-inline void LogAtLevel(int const severity, std::string const &msg) {
-  LogMessage(__FILE__, __LINE__, severity).stream() << msg;
-}
-
-// A macro alternative of LogAtLevel. New code may want to use this
-// version since there are two advantages: 1. this version outputs the
-// file name and the line number where this macro is put like other
-// LOG macros, 2. this macro can be used as C++ stream.
-#define LOG_AT_LEVEL(severity) google::LogMessage(__FILE__, __LINE__, severity).stream()
-
-// Check if it's compiled in C++11 mode.
-//
-// GXX_EXPERIMENTAL_CXX0X is defined by gcc and clang up to at least
-// gcc-4.7 and clang-3.1 (2011-12-13).  __cplusplus was defined to 1
-// in gcc before 4.7 (Crosstool 16) and clang before 3.1, but is
-// defined according to the language version in effect thereafter.
-// Microsoft Visual Studio 14 (2015) sets __cplusplus==199711 despite
-// reasonably good C++11 support, so we set LANG_CXX for it and
-// newer versions (_MSC_VER >= 1900).
-#if (defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L || \
-     (defined(_MSC_VER) && _MSC_VER >= 1900))
-// Helper for CHECK_NOTNULL().
-//
-// In C++11, all cases can be handled by a single function. Since the value
-// category of the argument is preserved (also for rvalue references),
-// member initializer lists like the one below will compile correctly:
-//
-//   Foo()
-//     : x_(CHECK_NOTNULL(MethodReturningUniquePtr())) {}
-template <typename T>
-T CheckNotNull(const char* file, int line, const char* names, T&& t) {
- if (t == nullptr) {
-   LogMessageFatal(file, line, new std::string(names));
- }
- return std::forward<T>(t);
-}
-
-#else
-
-// A small helper for CHECK_NOTNULL().
-template <typename T>
-T* CheckNotNull(const char *file, int line, const char *names, T* t) {
-  if (t == NULL) {
-    LogMessageFatal(file, line, new std::string(names));
-  }
-  return t;
-}
-#endif
-
-// Allow folks to put a counter in the LOG_EVERY_X()'ed messages. This
-// only works if ostream is a LogStream. If the ostream is not a
-// LogStream you'll get an assert saying as much at runtime.
-GOOGLE_GLOG_DLL_DECL std::ostream& operator<<(std::ostream &os,
-                                              const PRIVATE_Counter&);
-
-
-// Derived class for PLOG*() above.
-class GOOGLE_GLOG_DLL_DECL ErrnoLogMessage : public LogMessage {
- public:
-
-  ErrnoLogMessage(const char* file, int line, LogSeverity severity, int ctr,
-                  void (LogMessage::*send_method)());
-
-  // Postpends ": strerror(errno) [errno]".
-  ~ErrnoLogMessage();
-
- private:
-  ErrnoLogMessage(const ErrnoLogMessage&);
-  void operator=(const ErrnoLogMessage&);
-};
-
-
-// This class is used to explicitly ignore values in the conditional
-// logging macros.  This avoids compiler warnings like "value computed
-// is not used" and "statement has no effect".
-
-class GOOGLE_GLOG_DLL_DECL LogMessageVoidify {
- public:
-  LogMessageVoidify() { }
-  // This has to be an operator with a precedence lower than << but
-  // higher than ?:
-  void operator&(std::ostream&) { }
-};
-
-
-// Flushes all log files that contains messages that are at least of
-// the specified severity level.  Thread-safe.
-GOOGLE_GLOG_DLL_DECL void FlushLogFiles(LogSeverity min_severity);
-
-// Flushes all log files that contains messages that are at least of
-// the specified severity level. Thread-hostile because it ignores
-// locking -- used for catastrophic failures.
-GOOGLE_GLOG_DLL_DECL void FlushLogFilesUnsafe(LogSeverity min_severity);
-
-//
-// Set the destination to which a particular severity level of log
-// messages is sent.  If base_filename is "", it means "don't log this
-// severity".  Thread-safe.
-//
-GOOGLE_GLOG_DLL_DECL void SetLogDestination(LogSeverity severity,
-                                            const char* base_filename);
-
-//
-// Set the basename of the symlink to the latest log file at a given
-// severity.  If symlink_basename is empty, do not make a symlink.  If
-// you don't call this function, the symlink basename is the
-// invocation name of the program.  Thread-safe.
-//
-GOOGLE_GLOG_DLL_DECL void SetLogSymlink(LogSeverity severity,
-                                        const char* symlink_basename);
-
-//
-// Used to send logs to some other kind of destination
-// Users should subclass LogSink and override send to do whatever they want.
-// Implementations must be thread-safe because a shared instance will
-// be called from whichever thread ran the LOG(XXX) line.
-class GOOGLE_GLOG_DLL_DECL LogSink {
- public:
-  virtual ~LogSink();
-
-  // Sink's logging logic (message_len is such as to exclude '\n' at the end).
-  // This method can't use LOG() or CHECK() as logging system mutex(s) are held
-  // during this call.
-  virtual void send(LogSeverity severity, const char* full_filename,
-                    const char* base_filename, int line,
-                    const struct ::tm* tm_time,
-                    const char* message, size_t message_len) = 0;
-
-  // Redefine this to implement waiting for
-  // the sink's logging logic to complete.
-  // It will be called after each send() returns,
-  // but before that LogMessage exits or crashes.
-  // By default this function does nothing.
-  // Using this function one can implement complex logic for send()
-  // that itself involves logging; and do all this w/o causing deadlocks and
-  // inconsistent rearrangement of log messages.
-  // E.g. if a LogSink has thread-specific actions, the send() method
-  // can simply add the message to a queue and wake up another thread that
-  // handles real logging while itself making some LOG() calls;
-  // WaitTillSent() can be implemented to wait for that logic to complete.
-  // See our unittest for an example.
-  virtual void WaitTillSent();
-
-  // Returns the normal text output of the log message.
-  // Can be useful to implement send().
-  static std::string ToString(LogSeverity severity, const char* file, int line,
-                              const struct ::tm* tm_time,
-                              const char* message, size_t message_len);
-};
-
-// Add or remove a LogSink as a consumer of logging data.  Thread-safe.
-GOOGLE_GLOG_DLL_DECL void AddLogSink(LogSink *destination);
-GOOGLE_GLOG_DLL_DECL void RemoveLogSink(LogSink *destination);
-
-//
-// Specify an "extension" added to the filename specified via
-// SetLogDestination.  This applies to all severity levels.  It's
-// often used to append the port we're listening on to the logfile
-// name.  Thread-safe.
-//
-GOOGLE_GLOG_DLL_DECL void SetLogFilenameExtension(
-    const char* filename_extension);
-
-//
-// Make it so that all log messages of at least a particular severity
-// are logged to stderr (in addition to logging to the usual log
-// file(s)).  Thread-safe.
-//
-GOOGLE_GLOG_DLL_DECL void SetStderrLogging(LogSeverity min_severity);
-
-//
-// Make it so that all log messages go only to stderr.  Thread-safe.
-//
-GOOGLE_GLOG_DLL_DECL void LogToStderr();
-
-//
-// Make it so that all log messages of at least a particular severity are
-// logged via email to a list of addresses (in addition to logging to the
-// usual log file(s)).  The list of addresses is just a string containing
-// the email addresses to send to (separated by spaces, say).  Thread-safe.
-//
-GOOGLE_GLOG_DLL_DECL void SetEmailLogging(LogSeverity min_severity,
-                                          const char* addresses);
-
-// A simple function that sends email. dest is a commma-separated
-// list of addressess.  Thread-safe.
-GOOGLE_GLOG_DLL_DECL bool SendEmail(const char *dest,
-                                    const char *subject, const char *body);
-
-GOOGLE_GLOG_DLL_DECL const std::vector<std::string>& GetLoggingDirectories();
-
-// For tests only:  Clear the internal [cached] list of logging directories to
-// force a refresh the next time GetLoggingDirectories is called.
-// Thread-hostile.
-void TestOnly_ClearLoggingDirectoriesList();
-
-// Returns a set of existing temporary directories, which will be a
-// subset of the directories returned by GetLogginDirectories().
-// Thread-safe.
-GOOGLE_GLOG_DLL_DECL void GetExistingTempDirectories(
-    std::vector<std::string>* list);
-
-// Print any fatal message again -- useful to call from signal handler
-// so that the last thing in the output is the fatal message.
-// Thread-hostile, but a race is unlikely.
-GOOGLE_GLOG_DLL_DECL void ReprintFatalMessage();
-
-// Truncate a log file that may be the append-only output of multiple
-// processes and hence can't simply be renamed/reopened (typically a
-// stdout/stderr).  If the file "path" is > "limit" bytes, copy the
-// last "keep" bytes to offset 0 and truncate the rest. Since we could
-// be racing with other writers, this approach has the potential to
-// lose very small amounts of data. For security, only follow symlinks
-// if the path is /proc/self/fd/*
-GOOGLE_GLOG_DLL_DECL void TruncateLogFile(const char *path,
-                                          int64 limit, int64 keep);
-
-// Truncate stdout and stderr if they are over the value specified by
-// --max_log_size; keep the final 1MB.  This function has the same
-// race condition as TruncateLogFile.
-GOOGLE_GLOG_DLL_DECL void TruncateStdoutStderr();
-
-// Return the string representation of the provided LogSeverity level.
-// Thread-safe.
-GOOGLE_GLOG_DLL_DECL const char* GetLogSeverityName(LogSeverity severity);
-
-// ---------------------------------------------------------------------
-// Implementation details that are not useful to most clients
-// ---------------------------------------------------------------------
-
-// A Logger is the interface used by logging modules to emit entries
-// to a log.  A typical implementation will dump formatted data to a
-// sequence of files.  We also provide interfaces that will forward
-// the data to another thread so that the invoker never blocks.
-// Implementations should be thread-safe since the logging system
-// will write to them from multiple threads.
-
-namespace base {
-
-class GOOGLE_GLOG_DLL_DECL Logger {
- public:
-  virtual ~Logger();
-
-  // Writes "message[0,message_len-1]" corresponding to an event that
-  // occurred at "timestamp".  If "force_flush" is true, the log file
-  // is flushed immediately.
-  //
-  // The input message has already been formatted as deemed
-  // appropriate by the higher level logging facility.  For example,
-  // textual log messages already contain timestamps, and the
-  // file:linenumber header.
-  virtual void Write(bool force_flush,
-                     time_t timestamp,
-                     const char* message,
-                     int message_len) = 0;
-
-  // Flush any buffered messages
-  virtual void Flush() = 0;
-
-  // Get the current LOG file size.
-  // The returned value is approximate since some
-  // logged data may not have been flushed to disk yet.
-  virtual uint32 LogSize() = 0;
-};
-
-// Get the logger for the specified severity level.  The logger
-// remains the property of the logging module and should not be
-// deleted by the caller.  Thread-safe.
-extern GOOGLE_GLOG_DLL_DECL Logger* GetLogger(LogSeverity level);
-
-// Set the logger for the specified severity level.  The logger
-// becomes the property of the logging module and should not
-// be deleted by the caller.  Thread-safe.
-extern GOOGLE_GLOG_DLL_DECL void SetLogger(LogSeverity level, Logger* logger);
-
-}
-
-// glibc has traditionally implemented two incompatible versions of
-// strerror_r(). There is a poorly defined convention for picking the
-// version that we want, but it is not clear whether it even works with
-// all versions of glibc.
-// So, instead, we provide this wrapper that automatically detects the
-// version that is in use, and then implements POSIX semantics.
-// N.B. In addition to what POSIX says, we also guarantee that "buf" will
-// be set to an empty string, if this function failed. This means, in most
-// cases, you do not need to check the error code and you can directly
-// use the value of "buf". It will never have an undefined value.
-// DEPRECATED: Use StrError(int) instead.
-GOOGLE_GLOG_DLL_DECL int posix_strerror_r(int err, char *buf, size_t len);
-
-// A thread-safe replacement for strerror(). Returns a string describing the
-// given POSIX error code.
-GOOGLE_GLOG_DLL_DECL std::string StrError(int err);
-
-// A class for which we define operator<<, which does nothing.
-class GOOGLE_GLOG_DLL_DECL NullStream : public LogMessage::LogStream {
- public:
-  // Initialize the LogStream so the messages can be written somewhere
-  // (they'll never be actually displayed). This will be needed if a
-  // NullStream& is implicitly converted to LogStream&, in which case
-  // the overloaded NullStream::operator<< will not be invoked.
-  NullStream() : LogMessage::LogStream(message_buffer_, 1, 0) { }
-  NullStream(const char* /*file*/, int /*line*/,
-             const CheckOpString& /*result*/) :
-      LogMessage::LogStream(message_buffer_, 1, 0) { }
-  NullStream &stream() { return *this; }
- private:
-  // A very short buffer for messages (which we discard anyway). This
-  // will be needed if NullStream& converted to LogStream& (e.g. as a
-  // result of a conditional expression).
-  char message_buffer_[2];
-};
-
-// Do nothing. This operator is inline, allowing the message to be
-// compiled away. The message will not be compiled away if we do
-// something like (flag ? LOG(INFO) : LOG(ERROR)) << message; when
-// SKIP_LOG=WARNING. In those cases, NullStream will be implicitly
-// converted to LogStream and the message will be computed and then
-// quietly discarded.
-template<class T>
-inline NullStream& operator<<(NullStream &str, const T &) { return str; }
-
-// Similar to NullStream, but aborts the program (without stack
-// trace), like LogMessageFatal.
-class GOOGLE_GLOG_DLL_DECL NullStreamFatal : public NullStream {
- public:
-  NullStreamFatal() { }
-  NullStreamFatal(const char* file, int line, const CheckOpString& result) :
-      NullStream(file, line, result) { }
-  __declspec(noreturn) ~NullStreamFatal() throw () { _exit(1); }
-};
-
-// Install a signal handler that will dump signal information and a stack
-// trace when the program crashes on certain signals.  We'll install the
-// signal handler for the following signals.
-//
-// SIGSEGV, SIGILL, SIGFPE, SIGABRT, SIGBUS, and SIGTERM.
-//
-// By default, the signal handler will write the failure dump to the
-// standard error.  You can customize the destination by installing your
-// own writer function by InstallFailureWriter() below.
-//
-// Note on threading:
-//
-// The function should be called before threads are created, if you want
-// to use the failure signal handler for all threads.  The stack trace
-// will be shown only for the thread that receives the signal.  In other
-// words, stack traces of other threads won't be shown.
-GOOGLE_GLOG_DLL_DECL void InstallFailureSignalHandler();
-
-// Installs a function that is used for writing the failure dump.  "data"
-// is the pointer to the beginning of a message to be written, and "size"
-// is the size of the message.  You should not expect the data is
-// terminated with '\0'.
-GOOGLE_GLOG_DLL_DECL void InstallFailureWriter(
-    void (*writer)(const char* data, int size));
-
-}
-
-#endif // _LOGGING_H_
diff --git a/third_party/google-glog/src/windows/glog/raw_logging.h b/third_party/google-glog/src/windows/glog/raw_logging.h
deleted file mode 100755
index 4757a71..0000000
--- a/third_party/google-glog/src/windows/glog/raw_logging.h
+++ /dev/null
@@ -1,189 +0,0 @@
-// This file is automatically generated from src/glog/raw_logging.h.in
-// using src/windows/preprocess.sh.
-// DO NOT EDIT!
-
-// Copyright (c) 2006, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Author: Maxim Lifantsev
-//
-// Thread-safe logging routines that do not allocate any memory or
-// acquire any locks, and can therefore be used by low-level memory
-// allocation and synchronization code.
-
-#ifndef BASE_RAW_LOGGING_H_
-#define BASE_RAW_LOGGING_H_
-
-#include <time.h>
-
-namespace google {
-
-#include "glog/log_severity.h"
-#include "glog/vlog_is_on.h"
-
-// Annoying stuff for windows -- makes sure clients can import these functions
-#ifndef GOOGLE_GLOG_DLL_DECL
-# if defined(_WIN32) && !defined(__CYGWIN__)
-#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)
-# else
-#   define GOOGLE_GLOG_DLL_DECL
-# endif
-#endif
-
-// This is similar to LOG(severity) << format... and VLOG(level) << format..,
-// but
-// * it is to be used ONLY by low-level modules that can't use normal LOG()
-// * it is desiged to be a low-level logger that does not allocate any
-//   memory and does not need any locks, hence:
-// * it logs straight and ONLY to STDERR w/o buffering
-// * it uses an explicit format and arguments list
-// * it will silently chop off really long message strings
-// Usage example:
-//   RAW_LOG(ERROR, "Failed foo with %i: %s", status, error);
-//   RAW_VLOG(3, "status is %i", status);
-// These will print an almost standard log lines like this to stderr only:
-//   E0821 211317 file.cc:123] RAW: Failed foo with 22: bad_file
-//   I0821 211317 file.cc:142] RAW: status is 20
-#define RAW_LOG(severity, ...) \
-  do { \
-    switch (google::GLOG_ ## severity) {  \
-      case 0: \
-        RAW_LOG_INFO(__VA_ARGS__); \
-        break; \
-      case 1: \
-        RAW_LOG_WARNING(__VA_ARGS__); \
-        break; \
-      case 2: \
-        RAW_LOG_ERROR(__VA_ARGS__); \
-        break; \
-      case 3: \
-        RAW_LOG_FATAL(__VA_ARGS__); \
-        break; \
-      default: \
-        break; \
-    } \
-  } while (0)
-
-// The following STRIP_LOG testing is performed in the header file so that it's
-// possible to completely compile out the logging code and the log messages.
-#if STRIP_LOG == 0
-#define RAW_VLOG(verboselevel, ...) \
-  do { \
-    if (VLOG_IS_ON(verboselevel)) { \
-      RAW_LOG_INFO(__VA_ARGS__); \
-    } \
-  } while (0)
-#else
-#define RAW_VLOG(verboselevel, ...) RawLogStub__(0, __VA_ARGS__)
-#endif // STRIP_LOG == 0
-
-#if STRIP_LOG == 0
-#define RAW_LOG_INFO(...) google::RawLog__(google::GLOG_INFO, \
-                                   __FILE__, __LINE__, __VA_ARGS__)
-#else
-#define RAW_LOG_INFO(...) google::RawLogStub__(0, __VA_ARGS__)
-#endif // STRIP_LOG == 0
-
-#if STRIP_LOG <= 1
-#define RAW_LOG_WARNING(...) google::RawLog__(google::GLOG_WARNING,   \
-                                      __FILE__, __LINE__, __VA_ARGS__)
-#else
-#define RAW_LOG_WARNING(...) google::RawLogStub__(0, __VA_ARGS__)
-#endif // STRIP_LOG <= 1
-
-#if STRIP_LOG <= 2
-#define RAW_LOG_ERROR(...) google::RawLog__(google::GLOG_ERROR,       \
-                                    __FILE__, __LINE__, __VA_ARGS__)
-#else
-#define RAW_LOG_ERROR(...) google::RawLogStub__(0, __VA_ARGS__)
-#endif // STRIP_LOG <= 2
-
-#if STRIP_LOG <= 3
-#define RAW_LOG_FATAL(...) google::RawLog__(google::GLOG_FATAL,       \
-                                    __FILE__, __LINE__, __VA_ARGS__)
-#else
-#define RAW_LOG_FATAL(...) \
-  do { \
-    google::RawLogStub__(0, __VA_ARGS__);        \
-    exit(1); \
-  } while (0)
-#endif // STRIP_LOG <= 3
-
-// Similar to CHECK(condition) << message,
-// but for low-level modules: we use only RAW_LOG that does not allocate memory.
-// We do not want to provide args list here to encourage this usage:
-//   if (!cond)  RAW_LOG(FATAL, "foo ...", hard_to_compute_args);
-// so that the args are not computed when not needed.
-#define RAW_CHECK(condition, message)                                   \
-  do {                                                                  \
-    if (!(condition)) {                                                 \
-      RAW_LOG(FATAL, "Check %s failed: %s", #condition, message);       \
-    }                                                                   \
-  } while (0)
-
-// Debug versions of RAW_LOG and RAW_CHECK
-#ifndef NDEBUG
-
-#define RAW_DLOG(severity, ...) RAW_LOG(severity, __VA_ARGS__)
-#define RAW_DCHECK(condition, message) RAW_CHECK(condition, message)
-
-#else  // NDEBUG
-
-#define RAW_DLOG(severity, ...)                                 \
-  while (false)                                                 \
-    RAW_LOG(severity, __VA_ARGS__)
-#define RAW_DCHECK(condition, message) \
-  while (false) \
-    RAW_CHECK(condition, message)
-
-#endif  // NDEBUG
-
-// Stub log function used to work around for unused variable warnings when
-// building with STRIP_LOG > 0.
-static inline void RawLogStub__(int /* ignored */, ...) {
-}
-
-// Helper function to implement RAW_LOG and RAW_VLOG
-// Logs format... at "severity" level, reporting it
-// as called from file:line.
-// This does not allocate memory or acquire locks.
-GOOGLE_GLOG_DLL_DECL void RawLog__(LogSeverity severity,
-                                   const char* file,
-                                   int line,
-                                   const char* format, ...)
-   ;
-
-// Hack to propagate time information into this module so that
-// this module does not have to directly call localtime_r(),
-// which could allocate memory.
-GOOGLE_GLOG_DLL_DECL void RawLog__SetLastTime(const struct tm& t, int usecs);
-
-}
-
-#endif  // BASE_RAW_LOGGING_H_
diff --git a/third_party/google-glog/src/windows/glog/stl_logging.h b/third_party/google-glog/src/windows/glog/stl_logging.h
deleted file mode 100755
index a97a908..0000000
--- a/third_party/google-glog/src/windows/glog/stl_logging.h
+++ /dev/null
@@ -1,224 +0,0 @@
-// This file is automatically generated from src/glog/stl_logging.h.in
-// using src/windows/preprocess.sh.
-// DO NOT EDIT!
-
-// Copyright (c) 2003, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Stream output operators for STL containers; to be used for logging *only*.
-// Inclusion of this file lets you do:
-//
-// list<string> x;
-// LOG(INFO) << "data: " << x;
-// vector<int> v1, v2;
-// CHECK_EQ(v1, v2);
-//
-// If you want to use this header file with hash_compare maps or slist, you
-// need to define macros before including this file:
-//
-// - GLOG_STL_LOGGING_FOR_UNORDERED     - <unordered_map> and <unordered_set>
-// - GLOG_STL_LOGGING_FOR_TR1_UNORDERED - <tr1/unordered_(map|set)>
-// - GLOG_STL_LOGGING_FOR_EXT_HASH      - <ext/hash_(map|set)>
-// - GLOG_STL_LOGGING_FOR_EXT_SLIST     - <ext/slist>
-//
-
-#ifndef UTIL_GTL_STL_LOGGING_INL_H_
-#define UTIL_GTL_STL_LOGGING_INL_H_
-
-#if !1
-# error We do not support stl_logging for this compiler
-#endif
-
-#include <deque>
-#include <list>
-#include <map>
-#include <ostream>
-#include <set>
-#include <utility>
-#include <vector>
-
-#ifdef GLOG_STL_LOGGING_FOR_UNORDERED
-# include <unordered_map>
-# include <unordered_set>
-#endif
-
-#ifdef GLOG_STL_LOGGING_FOR_TR1_UNORDERED
-# include <tr1/unordered_map>
-# include <tr1/unordered_set>
-#endif
-
-#ifdef GLOG_STL_LOGGING_FOR_EXT_HASH
-# include <ext/hash_set>
-# include <ext/hash_map>
-#endif
-#ifdef GLOG_STL_LOGGING_FOR_EXT_SLIST
-# include <ext/slist>
-#endif
-
-// Forward declare these two, and define them after all the container streams
-// operators so that we can recurse from pair -> container -> container -> pair
-// properly.
-template<class First, class Second>
-std::ostream& operator<<(std::ostream& out, const std::pair<First, Second>& p);
-
-namespace google {
-
-template<class Iter>
-void PrintSequence(std::ostream& out, Iter begin, Iter end);
-
-}
-
-#define OUTPUT_TWO_ARG_CONTAINER(Sequence) \
-template<class T1, class T2> \
-inline std::ostream& operator<<(std::ostream& out, \
-                                const Sequence<T1, T2>& seq) { \
-  google::PrintSequence(out, seq.begin(), seq.end()); \
-  return out; \
-}
-
-OUTPUT_TWO_ARG_CONTAINER(std::vector)
-OUTPUT_TWO_ARG_CONTAINER(std::deque)
-OUTPUT_TWO_ARG_CONTAINER(std::list)
-#ifdef GLOG_STL_LOGGING_FOR_EXT_SLIST
-OUTPUT_TWO_ARG_CONTAINER(__gnu_cxx::slist)
-#endif
-
-#undef OUTPUT_TWO_ARG_CONTAINER
-
-#define OUTPUT_THREE_ARG_CONTAINER(Sequence) \
-template<class T1, class T2, class T3> \
-inline std::ostream& operator<<(std::ostream& out, \
-                                const Sequence<T1, T2, T3>& seq) { \
-  google::PrintSequence(out, seq.begin(), seq.end()); \
-  return out; \
-}
-
-OUTPUT_THREE_ARG_CONTAINER(std::set)
-OUTPUT_THREE_ARG_CONTAINER(std::multiset)
-
-#undef OUTPUT_THREE_ARG_CONTAINER
-
-#define OUTPUT_FOUR_ARG_CONTAINER(Sequence) \
-template<class T1, class T2, class T3, class T4> \
-inline std::ostream& operator<<(std::ostream& out, \
-                                const Sequence<T1, T2, T3, T4>& seq) { \
-  google::PrintSequence(out, seq.begin(), seq.end()); \
-  return out; \
-}
-
-OUTPUT_FOUR_ARG_CONTAINER(std::map)
-OUTPUT_FOUR_ARG_CONTAINER(std::multimap)
-#ifdef GLOG_STL_LOGGING_FOR_UNORDERED
-OUTPUT_FOUR_ARG_CONTAINER(std::unordered_set)
-OUTPUT_FOUR_ARG_CONTAINER(std::unordered_multiset)
-#endif
-#ifdef GLOG_STL_LOGGING_FOR_TR1_UNORDERED
-OUTPUT_FOUR_ARG_CONTAINER(std::tr1::unordered_set)
-OUTPUT_FOUR_ARG_CONTAINER(std::tr1::unordered_multiset)
-#endif
-#ifdef GLOG_STL_LOGGING_FOR_EXT_HASH
-OUTPUT_FOUR_ARG_CONTAINER(__gnu_cxx::hash_set)
-OUTPUT_FOUR_ARG_CONTAINER(__gnu_cxx::hash_multiset)
-#endif
-
-#undef OUTPUT_FOUR_ARG_CONTAINER
-
-#define OUTPUT_FIVE_ARG_CONTAINER(Sequence) \
-template<class T1, class T2, class T3, class T4, class T5> \
-inline std::ostream& operator<<(std::ostream& out, \
-                                const Sequence<T1, T2, T3, T4, T5>& seq) { \
-  google::PrintSequence(out, seq.begin(), seq.end()); \
-  return out; \
-}
-
-#ifdef GLOG_STL_LOGGING_FOR_UNORDERED
-OUTPUT_FIVE_ARG_CONTAINER(std::unordered_map)
-OUTPUT_FIVE_ARG_CONTAINER(std::unordered_multimap)
-#endif
-#ifdef GLOG_STL_LOGGING_FOR_TR1_UNORDERED
-OUTPUT_FIVE_ARG_CONTAINER(std::tr1::unordered_map)
-OUTPUT_FIVE_ARG_CONTAINER(std::tr1::unordered_multimap)
-#endif
-#ifdef GLOG_STL_LOGGING_FOR_EXT_HASH
-OUTPUT_FIVE_ARG_CONTAINER(__gnu_cxx::hash_map)
-OUTPUT_FIVE_ARG_CONTAINER(__gnu_cxx::hash_multimap)
-#endif
-
-#undef OUTPUT_FIVE_ARG_CONTAINER
-
-template<class First, class Second>
-inline std::ostream& operator<<(std::ostream& out,
-                                const std::pair<First, Second>& p) {
-  out << '(' << p.first << ", " << p.second << ')';
-  return out;
-}
-
-namespace google {
-
-template<class Iter>
-inline void PrintSequence(std::ostream& out, Iter begin, Iter end) {
-  // Output at most 100 elements -- appropriate if used for logging.
-  for (int i = 0; begin != end && i < 100; ++i, ++begin) {
-    if (i > 0) out << ' ';
-    out << *begin;
-  }
-  if (begin != end) {
-    out << " ...";
-  }
-}
-
-}
-
-// Note that this is technically undefined behavior! We are adding things into
-// the std namespace for a reason though -- we are providing new operations on
-// types which are themselves defined with this namespace. Without this, these
-// operator overloads cannot be found via ADL. If these definitions are not
-// found via ADL, they must be #included before they're used, which requires
-// this header to be included before apparently independent other headers.
-//
-// For example, base/logging.h defines various template functions to implement
-// CHECK_EQ(x, y) and stream x and y into the log in the event the check fails.
-// It does so via the function template MakeCheckOpValueString:
-//   template<class T>
-//   void MakeCheckOpValueString(strstream* ss, const T& v) {
-//     (*ss) << v;
-//   }
-// Because 'glog/logging.h' is included before 'glog/stl_logging.h',
-// subsequent CHECK_EQ(v1, v2) for vector<...> typed variable v1 and v2 can only
-// find these operator definitions via ADL.
-//
-// Even this solution has problems -- it may pull unintended operators into the
-// namespace as well, allowing them to also be found via ADL, and creating code
-// that only works with a particular order of includes. Long term, we need to
-// move all of the *definitions* into namespace std, bet we need to ensure no
-// one references them first. This lets us take that step. We cannot define them
-// in both because that would create ambiguous overloads when both are found.
-namespace std { using ::operator<<; }
-
-#endif  // UTIL_GTL_STL_LOGGING_INL_H_
diff --git a/third_party/google-glog/src/windows/glog/vlog_is_on.h b/third_party/google-glog/src/windows/glog/vlog_is_on.h
deleted file mode 100755
index 409a401..0000000
--- a/third_party/google-glog/src/windows/glog/vlog_is_on.h
+++ /dev/null
@@ -1,133 +0,0 @@
-// This file is automatically generated from src/glog/vlog_is_on.h.in
-// using src/windows/preprocess.sh.
-// DO NOT EDIT!
-
-// Copyright (c) 1999, 2007, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Author: Ray Sidney and many others
-//
-// Defines the VLOG_IS_ON macro that controls the variable-verbosity
-// conditional logging.
-//
-// It's used by VLOG and VLOG_IF in logging.h
-// and by RAW_VLOG in raw_logging.h to trigger the logging.
-//
-// It can also be used directly e.g. like this:
-//   if (VLOG_IS_ON(2)) {
-//     // do some logging preparation and logging
-//     // that can't be accomplished e.g. via just VLOG(2) << ...;
-//   }
-//
-// The truth value that VLOG_IS_ON(level) returns is determined by 
-// the three verbosity level flags:
-//   --v=<n>  Gives the default maximal active V-logging level;
-//            0 is the default.
-//            Normally positive values are used for V-logging levels.
-//   --vmodule=<str>  Gives the per-module maximal V-logging levels to override
-//                    the value given by --v.
-//                    E.g. "my_module=2,foo*=3" would change the logging level
-//                    for all code in source files "my_module.*" and "foo*.*"
-//                    ("-inl" suffixes are also disregarded for this matching).
-//
-// SetVLOGLevel helper function is provided to do limited dynamic control over
-// V-logging by overriding the per-module settings given via --vmodule flag.
-//
-// CAVEAT: --vmodule functionality is not available in non gcc compilers.
-//
-
-#ifndef BASE_VLOG_IS_ON_H_
-#define BASE_VLOG_IS_ON_H_
-
-#include "glog/log_severity.h"
-
-// Annoying stuff for windows -- makes sure clients can import these functions
-#ifndef GOOGLE_GLOG_DLL_DECL
-# if defined(_WIN32) && !defined(__CYGWIN__)
-#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)
-# else
-#   define GOOGLE_GLOG_DLL_DECL
-# endif
-#endif
-
-#if defined(__GNUC__)
-// We emit an anonymous static int* variable at every VLOG_IS_ON(n) site.
-// (Normally) the first time every VLOG_IS_ON(n) site is hit,
-// we determine what variable will dynamically control logging at this site:
-// it's either FLAGS_v or an appropriate internal variable
-// matching the current source file that represents results of
-// parsing of --vmodule flag and/or SetVLOGLevel calls.
-#define VLOG_IS_ON(verboselevel)                                \
-  __extension__  \
-  ({ static google::int32* vlocal__ = &google::kLogSiteUninitialized;           \
-     google::int32 verbose_level__ = (verboselevel);                    \
-     (*vlocal__ >= verbose_level__) &&                          \
-     ((vlocal__ != &google::kLogSiteUninitialized) ||                   \
-      (google::InitVLOG3__(&vlocal__, &FLAGS_v,                         \
-                   __FILE__, verbose_level__))); })
-#else
-// GNU extensions not available, so we do not support --vmodule.
-// Dynamic value of FLAGS_v always controls the logging level.
-#define VLOG_IS_ON(verboselevel) (FLAGS_v >= (verboselevel))
-#endif
-
-// Set VLOG(_IS_ON) level for module_pattern to log_level.
-// This lets us dynamically control what is normally set by the --vmodule flag.
-// Returns the level that previously applied to module_pattern.
-// NOTE: To change the log level for VLOG(_IS_ON) sites
-//	 that have already executed after/during InitGoogleLogging,
-//	 one needs to supply the exact --vmodule pattern that applied to them.
-//       (If no --vmodule pattern applied to them
-//       the value of FLAGS_v will continue to control them.)
-extern GOOGLE_GLOG_DLL_DECL int SetVLOGLevel(const char* module_pattern,
-                                             int log_level);
-
-// Various declarations needed for VLOG_IS_ON above: =========================
-
-// Special value used to indicate that a VLOG_IS_ON site has not been
-// initialized.  We make this a large value, so the common-case check
-// of "*vlocal__ >= verbose_level__" in VLOG_IS_ON definition
-// passes in such cases and InitVLOG3__ is then triggered.
-extern google::int32 kLogSiteUninitialized;
-
-// Helper routine which determines the logging info for a particalur VLOG site.
-//   site_flag     is the address of the site-local pointer to the controlling
-//                 verbosity level
-//   site_default  is the default to use for *site_flag
-//   fname         is the current source file name
-//   verbose_level is the argument to VLOG_IS_ON
-// We will return the return value for VLOG_IS_ON
-// and if possible set *site_flag appropriately.
-extern GOOGLE_GLOG_DLL_DECL bool InitVLOG3__(
-    google::int32** site_flag,
-    google::int32* site_default,
-    const char* fname,
-    google::int32 verbose_level);
-
-#endif  // BASE_VLOG_IS_ON_H_
diff --git a/third_party/google-glog/src/windows/port.cc b/third_party/google-glog/src/windows/port.cc
index 19bda36..f0022e7 100755
--- a/third_party/google-glog/src/windows/port.cc
+++ b/third_party/google-glog/src/windows/port.cc
@@ -1,10 +1,10 @@
 /* Copyright (c) 2008, Google Inc.
  * All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
  * met:
- * 
+ *
  *     * Redistributions of source code must retain the above copyright
  * notice, this list of conditions and the following disclaimer.
  *     * Redistributions in binary form must reproduce the above
@@ -14,7 +14,7 @@
  *     * Neither the name of Google Inc. nor the names of its
  * contributors may be used to endorse or promote products derived from
  * this software without specific prior written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -37,7 +37,7 @@
 #endif
 
 #include "config.h"
-#include <stdarg.h>    // for va_list, va_start, va_end
+#include <cstdarg>    // for va_list, va_start, va_end
 #include "port.h"
 
 // These call the windows _vsnprintf, but always NUL-terminate.
@@ -54,6 +54,12 @@
   return result;
 }
 #endif // not HAVE_LOCALTIME_R
+#ifndef HAVE_GMTIME_R
+struct tm* gmtime_r(const time_t* timep, struct tm* result) {
+    gmtime_s(result, timep);
+    return result;
+}
+#endif // not HAVE_GMTIME_R
 #ifndef HAVE_SNPRINTF
 int snprintf(char *str, size_t size, const char *format, ...) {
   va_list ap;
diff --git a/third_party/google-glog/src/windows/port.h b/third_party/google-glog/src/windows/port.h
index 7b4b9c8..a71979f 100755
--- a/third_party/google-glog/src/windows/port.h
+++ b/third_party/google-glog/src/windows/port.h
@@ -1,10 +1,10 @@
 /* Copyright (c) 2008, Google Inc.
  * All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
  * met:
- * 
+ *
  *     * Redistributions of source code must retain the above copyright
  * notice, this list of conditions and the following disclaimer.
  *     * Redistributions in binary form must reproduce the above
@@ -14,7 +14,7 @@
  *     * Neither the name of Google Inc. nor the names of its
  * contributors may be used to endorse or promote products derived from
  * this software without specific prior written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -54,14 +54,16 @@
 #include <io.h>              /* because we so often use open/close/etc */
 #include <direct.h>          /* for _getcwd() */
 #include <process.h>         /* for _getpid() */
-#include <stdio.h>           /* read in vsnprintf decl. before redifining it */
-#include <stdarg.h>          /* template_dictionary.cc uses va_copy */
-#include <string.h>          /* for _strnicmp(), strerror_s() */
-#include <time.h>            /* for localtime_s() */
+#include <cstdarg>          /* template_dictionary.cc uses va_copy */
+#include <cstdio>           /* read in vsnprintf decl. before redifining it */
+#include <cstring>          /* for _strnicmp(), strerror_s() */
+#include <ctime>            /* for localtime_s() */
 /* Note: the C++ #includes are all together at the bottom.  This file is
  * used by both C and C++ code, so we put all the C++ together.
  */
 
+#include <glog/logging.h>
+
 #ifdef _MSC_VER
 
 /* 4244: otherwise we get problems when substracting two size_t's to an int
@@ -120,11 +122,11 @@
  * name vsnprintf, since windows defines that (but not snprintf (!)).
  */
 #ifndef HAVE_SNPRINTF
-extern int GOOGLE_GLOG_DLL_DECL snprintf(char *str, size_t size,
-                                       const char *format, ...);
+extern int GLOG_EXPORT snprintf(char* str, size_t size, const char* format,
+                                ...);
 #endif
-extern int GOOGLE_GLOG_DLL_DECL safe_vsnprintf(char *str, size_t size,
-                          const char *format, va_list ap);
+extern int GLOG_EXPORT safe_vsnprintf(char* str, size_t size,
+                                      const char* format, va_list ap);
 #define vsnprintf(str, size, format, ap)  safe_vsnprintf(str, size, format, ap)
 #ifndef va_copy
 #define va_copy(dst, src)  (dst) = (src)
@@ -156,9 +158,14 @@
 #endif // HAVE_PTHREAD
 
 #ifndef HAVE_LOCALTIME_R
-extern GOOGLE_GLOG_DLL_DECL struct tm* localtime_r(const time_t* timep, struct tm* result);
+extern GLOG_EXPORT struct tm* localtime_r(const time_t* timep,
+                                          struct tm* result);
 #endif // not HAVE_LOCALTIME_R
 
+#ifndef HAVE_GMTIME_R
+extern GLOG_EXPORT struct tm* gmtime_r(const time_t* timep, struct tm* result);
+#endif // not HAVE_GMTIME_R
+
 inline char* strerror_r(int errnum, char* buf, size_t buflen) {
   strerror_s(buf, buflen, errnum);
   return buf;
diff --git a/third_party/google-glog/src/windows/preprocess.sh b/third_party/google-glog/src/windows/preprocess.sh
deleted file mode 100755
index c35e929..0000000
--- a/third_party/google-glog/src/windows/preprocess.sh
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/bin/sh
-
-# Copyright (c) 2008, Google Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-#     * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# ---
-# Author: Craig Silverstein
-# Copied from google-perftools and modified by Shinichiro Hamaji
-#
-# This script is meant to be run at distribution-generation time, for
-# instance by autogen.sh.  It does some of the work configure would
-# normally do, for windows systems.  In particular, it expands all the
-# @...@ variables found in .in files, and puts them here, in the windows
-# directory.
-#
-# This script should be run before any new release.
-
-if [ -z "$1" ]; then
-   echo "USAGE: $0 <src/ directory>"
-   exit 1
-fi
-
-DLLDEF_MACRO_NAME="GLOG_DLL_DECL"
-
-# The text we put in every .h files we create.  As a courtesy, we'll
-# include a helpful comment for windows users as to how to use
-# GLOG_DLL_DECL.  Apparently sed expands \n into a newline.  Good!
-DLLDEF_DEFINES="\
-// NOTE: if you are statically linking the template library into your binary\n\
-// (rather than using the template .dll), set '/D $DLLDEF_MACRO_NAME='\n\
-// as a compiler flag in your project file to turn off the dllimports.\n\
-#ifndef $DLLDEF_MACRO_NAME\n\
-# define $DLLDEF_MACRO_NAME  __declspec(dllimport)\n\
-#endif"
-
-# Read all the windows config info into variables
-# In order for the 'set' to take, this requires putting all in a subshell.
-(
-  while read define varname value; do
-    [ "$define" != "#define" ] && continue
-    eval "$varname='$value'"
-  done
-
-  # Process all the .in files in the "glog" subdirectory
-  mkdir -p "$1/windows/glog"
-  for file in `echo "$1"/glog/*.in`; do
-     echo "Processing $file"
-     outfile="$1/windows/glog/`basename $file .in`"
-
-     echo "\
-// This file is automatically generated from $file
-// using src/windows/preprocess.sh.
-// DO NOT EDIT!
-" > "$outfile"
-     # Besides replacing @...@, we also need to turn on dllimport
-     # We also need to replace hash by hash_compare (annoying we hard-code :-( )
-     sed -e "s!@ac_windows_dllexport@!$DLLDEF_MACRO_NAME!g" \
-         -e "s!@ac_windows_dllexport_defines@!$DLLDEF_DEFINES!g" \
-         -e "s!@ac_cv_cxx_hash_map@!$HASH_MAP_H!g" \
-         -e "s!@ac_cv_cxx_hash_namespace@!$HASH_NAMESPACE!g" \
-         -e "s!@ac_cv_cxx_hash_set@!$HASH_SET_H!g" \
-         -e "s!@ac_cv_have_stdint_h@!0!g" \
-         -e "s!@ac_cv_have_systypes_h@!0!g" \
-         -e "s!@ac_cv_have_inttypes_h@!0!g" \
-         -e "s!@ac_cv_have_unistd_h@!0!g" \
-         -e "s!@ac_cv_have_uint16_t@!0!g" \
-         -e "s!@ac_cv_have_u_int16_t@!0!g" \
-         -e "s!@ac_cv_have___uint16@!1!g" \
-         -e "s!@ac_cv_have_libgflags@!0!g" \
-         -e "s!@ac_cv_have___builtin_expect@!0!g" \
-         -e "s!@ac_cv_cxx_using_operator@!1!g" \
-         -e "s!@ac_cv___attribute___noreturn@!__declspec(noreturn)!g" \
-         -e "s!@ac_cv___attribute___noinline@!!g" \
-         -e "s!@ac_cv___attribute___printf_4_5@!!g" \
-         -e "s!@ac_google_attribute@!${HAVE___ATTRIBUTE__:-0}!g" \
-         -e "s!@ac_google_end_namespace@!$_END_GOOGLE_NAMESPACE_!g" \
-         -e "s!@ac_google_namespace@!$GOOGLE_NAMESPACE!g" \
-         -e "s!@ac_google_start_namespace@!$_START_GOOGLE_NAMESPACE_!g" \
-         -e "s!@ac_htmlparser_namespace@!$HTMLPARSER_NAMESPACE!g" \
-         -e "s!\\bhash\\b!hash_compare!g" \
-         "$file" >> "$outfile"
-  done
-) < "$1/windows/config.h"
-
-# log_severity.h isn't a .in file.
-echo "\
-// This file is automatically generated from $1/glog/log_severity.h
-// using src/windows/preprocess.sh.
-// DO NOT EDIT!
-" > "$1/windows/glog/log_severity.h"
-cat "$1/glog/log_severity.h" >> "$1/windows/glog/log_severity.h"
-
-echo "DONE"
diff --git a/third_party/google-glog/toolchains/.gitignore b/third_party/google-glog/toolchains/.gitignore
deleted file mode 100644
index 13489ce..0000000
--- a/third_party/google-glog/toolchains/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# allow toolchain files to be tracked by git
-!*.cmake
diff --git a/third_party/google-glog/toolchains/clang-cxx17.cmake b/third_party/google-glog/toolchains/clang-cxx17.cmake
deleted file mode 100644
index 09d077a..0000000
--- a/third_party/google-glog/toolchains/clang-cxx17.cmake
+++ /dev/null
@@ -1,13 +0,0 @@
-# Sample toolchain file for building with gcc compiler
-#
-# Typical usage:
-#    *) cmake -H. -B_build -DCMAKE_TOOLCHAIN_FILE="${PWD}/toolchains/gcc.cmake"
-
-# set compiler
-set(CMAKE_C_COMPILER clang)
-set(CMAKE_CXX_COMPILER clang++)
-
-# set c++ standard
-set(CMAKE_CXX_STANDARD 17)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_EXTENSIONS OFF)
diff --git a/third_party/google-glog/toolchains/gcc-cxx11.cmake b/third_party/google-glog/toolchains/gcc-cxx11.cmake
deleted file mode 100644
index da1ab57..0000000
--- a/third_party/google-glog/toolchains/gcc-cxx11.cmake
+++ /dev/null
@@ -1,13 +0,0 @@
-# Sample toolchain file for building with gcc compiler
-#
-# Typical usage:
-#    *) cmake -H. -B_build -DCMAKE_TOOLCHAIN_FILE="${PWD}/toolchains/gcc.cmake"
-
-# set compiler
-set(CMAKE_C_COMPILER gcc)
-set(CMAKE_CXX_COMPILER g++)
-
-# set c++ standard
-set(CMAKE_CXX_STANDARD 11)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_EXTENSIONS OFF)
diff --git a/third_party/google-glog/toolchains/gcc-cxx17.cmake b/third_party/google-glog/toolchains/gcc-cxx17.cmake
deleted file mode 100644
index 1b834f1..0000000
--- a/third_party/google-glog/toolchains/gcc-cxx17.cmake
+++ /dev/null
@@ -1,13 +0,0 @@
-# Sample toolchain file for building with gcc compiler
-#
-# Typical usage:
-#    *) cmake -H. -B_build -DCMAKE_TOOLCHAIN_FILE="${PWD}/toolchains/gcc.cmake"
-
-# set compiler
-set(CMAKE_C_COMPILER gcc)
-set(CMAKE_CXX_COMPILER g++)
-
-# set c++ standard
-set(CMAKE_CXX_STANDARD 17)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_EXTENSIONS OFF)
diff --git a/third_party/google-glog/toolchains/gcc-cxx98.cmake b/third_party/google-glog/toolchains/gcc-cxx98.cmake
deleted file mode 100644
index 5697ab2..0000000
--- a/third_party/google-glog/toolchains/gcc-cxx98.cmake
+++ /dev/null
@@ -1,13 +0,0 @@
-# Sample toolchain file for building with gcc compiler
-#
-# Typical usage:
-#    *) cmake -H. -B_build -DCMAKE_TOOLCHAIN_FILE="${PWD}/toolchains/gcc.cmake"
-
-# set compiler
-set(CMAKE_C_COMPILER gcc)
-set(CMAKE_CXX_COMPILER g++)
-
-# set c++ standard
-set(CMAKE_CXX_STANDARD 98)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_EXTENSIONS OFF)
diff --git a/third_party/google-glog/toolchains/gcc-gnuxx11.cmake b/third_party/google-glog/toolchains/gcc-gnuxx11.cmake
deleted file mode 100644
index 91f0e4a..0000000
--- a/third_party/google-glog/toolchains/gcc-gnuxx11.cmake
+++ /dev/null
@@ -1,13 +0,0 @@
-# Sample toolchain file for building with gcc compiler
-#
-# Typical usage:
-#    *) cmake -H. -B_build -DCMAKE_TOOLCHAIN_FILE="${PWD}/toolchains/gcc.cmake"
-
-# set compiler
-set(CMAKE_C_COMPILER gcc)
-set(CMAKE_CXX_COMPILER g++)
-
-# set c++ standard
-set(CMAKE_CXX_STANDARD 11)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_EXTENSIONS ON)
diff --git a/third_party/google-glog/toolchains/linux-mingw-w64-cxx11.cmake b/third_party/google-glog/toolchains/linux-mingw-w64-cxx11.cmake
deleted file mode 100644
index 9c6e126..0000000
--- a/third_party/google-glog/toolchains/linux-mingw-w64-cxx11.cmake
+++ /dev/null
@@ -1,33 +0,0 @@
-# Sample toolchain file for building for Windows from an Ubuntu Linux system.
-#
-# Typical usage:
-#    *) install cross compiler: `sudo apt-get install mingw-w64`
-#    *) cmake -H. -B_build_mingw -DCMAKE_TOOLCHAIN_FILE="${PWD}/toolchains/linux-mingw-w64.cmake"
-
-set(CMAKE_SYSTEM_NAME Windows)
-set(CMAKE_SYSTEM_PROCESSOR x86_64)
-set(TOOLCHAIN_PREFIX x86_64-w64-mingw32)
-
-# set compiler
-set(CMAKE_C_COMPILER   ${TOOLCHAIN_PREFIX}-gcc)
-set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++)
-set(CMAKE_RC_COMPILER  ${TOOLCHAIN_PREFIX}-windres)
-
-# target environment on the build host system
-#   set 1st to dir with the cross compiler's C/C++ headers/libs
-set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})
-
-# modify default behavior of FIND_XXX() commands to
-# search for headers/libs in the target environment and
-# search for programs in the build host environment
-set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
-set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-
-# use emulator for `try_run` calls
-set(CMAKE_CROSSCOMPILING_EMULATOR wine64)
-
-# set c++ standard
-set(CMAKE_CXX_STANDARD 11)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_EXTENSIONS OFF)
diff --git a/third_party/google-glog/toolchains/linux-mingw-w64-cxx17.cmake b/third_party/google-glog/toolchains/linux-mingw-w64-cxx17.cmake
deleted file mode 100644
index 1c363f1..0000000
--- a/third_party/google-glog/toolchains/linux-mingw-w64-cxx17.cmake
+++ /dev/null
@@ -1,33 +0,0 @@
-# Sample toolchain file for building for Windows from an Ubuntu Linux system.
-#
-# Typical usage:
-#    *) install cross compiler: `sudo apt-get install mingw-w64`
-#    *) cmake -H. -B_build_mingw -DCMAKE_TOOLCHAIN_FILE="${PWD}/toolchains/linux-mingw-w64.cmake"
-
-set(CMAKE_SYSTEM_NAME Windows)
-set(CMAKE_SYSTEM_PROCESSOR x86_64)
-set(TOOLCHAIN_PREFIX x86_64-w64-mingw32)
-
-# set compiler
-set(CMAKE_C_COMPILER   ${TOOLCHAIN_PREFIX}-gcc)
-set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++)
-set(CMAKE_RC_COMPILER  ${TOOLCHAIN_PREFIX}-windres)
-
-# target environment on the build host system
-#   set 1st to dir with the cross compiler's C/C++ headers/libs
-set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})
-
-# modify default behavior of FIND_XXX() commands to
-# search for headers/libs in the target environment and
-# search for programs in the build host environment
-set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
-set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-
-# use emulator for `try_run` calls
-set(CMAKE_CROSSCOMPILING_EMULATOR wine64)
-
-# set c++ standard
-set(CMAKE_CXX_STANDARD 17)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_EXTENSIONS OFF)
diff --git a/third_party/google-glog/toolchains/linux-mingw-w64-gnuxx11.cmake b/third_party/google-glog/toolchains/linux-mingw-w64-gnuxx11.cmake
deleted file mode 100644
index 9902964..0000000
--- a/third_party/google-glog/toolchains/linux-mingw-w64-gnuxx11.cmake
+++ /dev/null
@@ -1,33 +0,0 @@
-# Sample toolchain file for building for Windows from an Ubuntu Linux system.
-#
-# Typical usage:
-#    *) install cross compiler: `sudo apt-get install mingw-w64`
-#    *) cmake -H. -B_build_mingw -DCMAKE_TOOLCHAIN_FILE="${PWD}/toolchains/linux-mingw-w64.cmake"
-
-set(CMAKE_SYSTEM_NAME Windows)
-set(CMAKE_SYSTEM_PROCESSOR x86_64)
-set(TOOLCHAIN_PREFIX x86_64-w64-mingw32)
-
-# set compiler
-set(CMAKE_C_COMPILER   ${TOOLCHAIN_PREFIX}-gcc)
-set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++)
-set(CMAKE_RC_COMPILER  ${TOOLCHAIN_PREFIX}-windres)
-
-# target environment on the build host system
-#   set 1st to dir with the cross compiler's C/C++ headers/libs
-set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})
-
-# modify default behavior of FIND_XXX() commands to
-# search for headers/libs in the target environment and
-# search for programs in the build host environment
-set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
-set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-
-# use emulator for `try_run` calls
-set(CMAKE_CROSSCOMPILING_EMULATOR wine64)
-
-# set c++ standard
-set(CMAKE_CXX_STANDARD 11)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_EXTENSIONS ON)
diff --git a/third_party/google-glog/toolchains/mingw-cxx11.cmake b/third_party/google-glog/toolchains/mingw-cxx11.cmake
deleted file mode 100644
index 873f623..0000000
--- a/third_party/google-glog/toolchains/mingw-cxx11.cmake
+++ /dev/null
@@ -1,13 +0,0 @@
-# Sample toolchain file for building with gcc compiler
-#
-# Typical usage:
-#    *) cmake -H. -B_build -DCMAKE_TOOLCHAIN_FILE="%cd%\toolchains\mingw.cmake"
-
-# set compiler
-set(CMAKE_C_COMPILER gcc)
-set(CMAKE_CXX_COMPILER g++)
-
-# set c++ standard
-set(CMAKE_CXX_STANDARD 11)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_EXTENSIONS OFF)
diff --git a/third_party/google-glog/toolchains/mingw-cxx17.cmake b/third_party/google-glog/toolchains/mingw-cxx17.cmake
deleted file mode 100644
index c0c89cc..0000000
--- a/third_party/google-glog/toolchains/mingw-cxx17.cmake
+++ /dev/null
@@ -1,13 +0,0 @@
-# Sample toolchain file for building with gcc compiler
-#
-# Typical usage:
-#    *) cmake -H. -B_build -DCMAKE_TOOLCHAIN_FILE="%cd%\toolchains\mingw.cmake"
-
-# set compiler
-set(CMAKE_C_COMPILER gcc)
-set(CMAKE_CXX_COMPILER g++)
-
-# set c++ standard
-set(CMAKE_CXX_STANDARD 17)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_EXTENSIONS OFF)
diff --git a/third_party/google-glog/toolchains/mingw-gnuxx11.cmake b/third_party/google-glog/toolchains/mingw-gnuxx11.cmake
deleted file mode 100644
index 6633705..0000000
--- a/third_party/google-glog/toolchains/mingw-gnuxx11.cmake
+++ /dev/null
@@ -1,13 +0,0 @@
-# Sample toolchain file for building with gcc compiler
-#
-# Typical usage:
-#    *) cmake -H. -B_build -DCMAKE_TOOLCHAIN_FILE="%cd%\toolchains\mingw.cmake"
-
-# set compiler
-set(CMAKE_C_COMPILER gcc)
-set(CMAKE_CXX_COMPILER g++)
-
-# set c++ standard
-set(CMAKE_CXX_STANDARD 11)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_EXTENSIONS YES)
diff --git a/third_party/google-glog/toolchains/vs-14-2015-sdk-8-1.cmake b/third_party/google-glog/toolchains/vs-14-2015-sdk-8-1.cmake
deleted file mode 100644
index 463bee0..0000000
--- a/third_party/google-glog/toolchains/vs-14-2015-sdk-8-1.cmake
+++ /dev/null
@@ -1,2 +0,0 @@
-# set c++ standard
-set(CMAKE_SYSTEM_VERSION 8.1)
diff --git a/third_party/google-glog/toolchains/vs-14-2015-win64.cmake b/third_party/google-glog/toolchains/vs-14-2015-win64.cmake
deleted file mode 100644
index 00beda2..0000000
--- a/third_party/google-glog/toolchains/vs-14-2015-win64.cmake
+++ /dev/null
@@ -1 +0,0 @@
-# dummy, nothing extra to set
diff --git a/third_party/google-glog/toolchains/vs-15-2017-win64-cxx17.cmake b/third_party/google-glog/toolchains/vs-15-2017-win64-cxx17.cmake
deleted file mode 100644
index 5e4e936..0000000
--- a/third_party/google-glog/toolchains/vs-15-2017-win64-cxx17.cmake
+++ /dev/null
@@ -1,2 +0,0 @@
-# set c++ standard
-set(CMAKE_CXX_FLAGS_INIT "${CMAKE_CXX_FLAGS_INIT} /std:c++17")
diff --git a/third_party/google-glog/toolchains/vs-15-2017-win64.cmake b/third_party/google-glog/toolchains/vs-15-2017-win64.cmake
deleted file mode 100644
index 00beda2..0000000
--- a/third_party/google-glog/toolchains/vs-15-2017-win64.cmake
+++ /dev/null
@@ -1 +0,0 @@
-# dummy, nothing extra to set
diff --git a/third_party/rules_rust/.bazelci/presubmit.yml b/third_party/rules_rust/.bazelci/presubmit.yml
index b948e0a..ac6b419 100644
--- a/third_party/rules_rust/.bazelci/presubmit.yml
+++ b/third_party/rules_rust/.bazelci/presubmit.yml
@@ -7,25 +7,25 @@
   # TODO: Switch manual tag to platform constraint after bazel 4.0.
   - "//test/versioned_dylib:versioned_dylib_test"
 default_macos_targets: &default_macos_targets
+  - "--"
   - "//..."
 default_windows_targets: &default_windows_targets
   - "--" # Allows negative patterns; hack for https://github.com/bazelbuild/continuous-integration/pull/245
   - "//..."
   - "-//bindgen/..."
   - "-//test/proto/..."
-  - "-//tools/rust_analyzer/..."
-  - "-//test/rustfmt/..."
+  - "-//test/unit/pipelined_compilation/..."
 crate_universe_vendor_example_targets: &crate_universe_vendor_example_targets
+  - "//vendor_external:crates_vendor"
   - "//vendor_local_manifests:crates_vendor"
   - "//vendor_local_pkgs:crates_vendor"
   - "//vendor_remote_manifests:crates_vendor_manifests"
   - "//vendor_remote_pkgs:crates_vendor_pkgs"
-cc_binary_example_targets: &cc_binary_example_targets
-  - "//..."
 tasks:
   ubuntu2004:
     build_targets: *default_linux_targets
     test_targets: *default_linux_targets
+    coverage_targets: *default_linux_targets
   rbe_ubuntu1604:
     shell_commands:
       - sed -i 's/^# load("@bazelci_rules/load("@bazelci_rules/' WORKSPACE.bazel
@@ -40,6 +40,7 @@
   macos:
     build_targets: *default_macos_targets
     test_targets: *default_macos_targets
+    coverage_targets: *default_macos_targets
     build_flags: *aspects_flags
   windows:
     build_flags:
@@ -123,8 +124,18 @@
       - "--config=rustfmt"
       - "--config=clippy"
       - "--repo_env=CC=clang"
-      # TODO(hlopko): Make this work (some tests were failing)
-      # - "--linkopt=-fuse-ld=lld"
+    build_targets: *default_linux_targets
+    test_targets: *default_linux_targets
+  ubuntu2004_clang_lld:
+    name: With Clang and LLD
+    platform: ubuntu2004
+    shell_commands:
+      - "sudo apt -y update && sudo apt -y install lld"
+    build_flags:
+      - "--config=rustfmt"
+      - "--config=clippy"
+      - "--repo_env=CC=clang"
+      - "--linkopt=-fuse-ld=lld"
     build_targets: *default_linux_targets
     test_targets: *default_linux_targets
   ubuntu2004_rolling_clang:
@@ -134,21 +145,19 @@
       - "--config=rustfmt"
       - "--config=clippy"
       - "--repo_env=CC=clang"
-      # TODO(hlopko): Make this work (some tests were failing)
-      # - "--linkopt=-fuse-ld=lld"
     build_targets: *default_linux_targets
     test_targets: *default_linux_targets
     soft_fail: yes
     bazel: "rolling"
   ubuntu1804:
     name: "Min Bazel Version"
-    bazel: "4.0.0"
+    bazel: "5.0.0"
     platform: ubuntu1804
     build_targets: *default_linux_targets
     test_targets: *default_linux_targets
   ubuntu1804_with_aspects:
     name: "Min Bazel Version With Aspects"
-    bazel: "4.0.0"
+    bazel: "5.0.0"
     platform: ubuntu1804
     build_targets: *default_linux_targets
     test_targets: *default_linux_targets
@@ -193,6 +202,31 @@
     test_targets:
       - "//..."
     build_flags: *aspects_flags
+  ubuntu2004_examples_clang:
+    name: Examples with Clang
+    platform: ubuntu2004
+    working_directory: examples
+    build_flags:
+      - "--repo_env=CC=clang"
+    build_targets:
+      - "//..."
+    test_targets:
+      - "//..."
+    build_flags: *aspects_flags
+  ubuntu2004_examples_clang_lld:
+    name: Examples with Clang and LLD
+    platform: ubuntu2004
+    shell_commands:
+      - "sudo apt -y update && sudo apt -y install lld"
+    working_directory: examples
+    build_flags:
+      - "--repo_env=CC=clang"
+      - "--linkopt=-fuse-ld=lld"
+    build_targets:
+      - "//..."
+    test_targets:
+      - "//..."
+    build_flags: *aspects_flags
   ubuntu2004_examples_rolling:
     name: "Examples with Rolling Bazel Version"
     platform: ubuntu2004
@@ -299,52 +333,18 @@
       - "//..."
     test_targets:
       - "//..."
-  cc_binary_examples_ubuntu2004:
-    name: Crate Universe Examples
+  cc_common_link_ubuntu2004:
+    name: Build via cc_common.link
     platform: ubuntu2004
-    working_directory: examples/cc_binary
-    run_targets: *cc_binary_example_targets
+    working_directory: test/cc_common_link
     build_targets:
       - "//..."
     test_targets:
       - "//..."
-    build_flags: *aspects_flags
-  cc_binary_rbe_ubuntu1604:
-    name: Crate Universe Examples
-    platform: rbe_ubuntu1604
-    working_directory: examples/cc_binary
-    shell_commands:
-      - sed -i 's/^# load("@bazelci_rules/load("@bazelci_rules/' WORKSPACE.bazel
-      - sed -i 's/^# rbe_preconfig/rbe_preconfig/' WORKSPACE.bazel
-    run_targets: *cc_binary_example_targets
-    build_targets:
-      - "//..."
-    test_targets:
-      - "//..."
-    build_flags: *aspects_flags
-  cc_binary_examples_macos:
-    name: Crate Universe Examples
-    platform: macos
-    working_directory: examples/cc_binary
-    run_targets: *cc_binary_example_targets
-    build_targets:
-      - "//..."
-    test_targets:
-      - "//..."
-    build_flags: *aspects_flags
-  cc_binary_examples_windows:
-    name: Crate Universe Examples
-    platform: windows
-    working_directory: examples/cc_binary
-    batch_commands:
-      - echo startup --windows_enable_symlinks >> user.bazelrc
-      - echo build --enable_runfiles >> user.bazelrc  # this is not enabled by default on windows and is necessary for the cargo build scripts
-    run_targets: *cc_binary_example_targets
-    build_flags: *aspects_flags
-    build_targets:
-      - "//..."
-    test_targets:
-      - "//..."
+    build_flags:
+      - "--@rules_rust//rust/settings:experimental_use_cc_common_link=True"
+
+
 buildifier:
   version: latest
   warnings: "all"
diff --git a/third_party/rules_rust/.bazelignore b/third_party/rules_rust/.bazelignore
index 2a58041..8c75c35 100644
--- a/third_party/rules_rust/.bazelignore
+++ b/third_party/rules_rust/.bazelignore
@@ -1,3 +1,4 @@
 docs
 examples
 crate_universe/private/bootstrap
+test/cc_common_link
diff --git a/third_party/rules_rust/.clang-format b/third_party/rules_rust/.clang-format
new file mode 100644
index 0000000..2296f7d
--- /dev/null
+++ b/third_party/rules_rust/.clang-format
@@ -0,0 +1,3 @@
+---
+BasedOnStyle: Google
+...
diff --git a/third_party/rules_rust/.github/.gitignore b/third_party/rules_rust/.github/.gitignore
new file mode 100644
index 0000000..cf7de92
--- /dev/null
+++ b/third_party/rules_rust/.github/.gitignore
@@ -0,0 +1,2 @@
+release_notes.txt
+rules_rust*.tar.gz
diff --git a/third_party/rules_rust/.github/github.bazelrc b/third_party/rules_rust/.github/github.bazelrc
new file mode 100644
index 0000000..74fb554
--- /dev/null
+++ b/third_party/rules_rust/.github/github.bazelrc
@@ -0,0 +1,20 @@
+# Bazel settings for use in Github CI
+
+# Always display the flags being used
+common --announce_rc
+
+# These settings make the windows workers behave similarly to unix workers
+startup --windows_enable_symlinks
+build --enable_runfiles
+
+# Show errors in CI
+test --test_output=errors
+
+# Show more information about failures
+build --verbose_failures
+
+# UI for cleaner CI output
+common --color=no
+common --curses=no
+common --show_task_finish
+common --show_timestamps
diff --git a/third_party/rules_rust/.github/release_notes.template b/third_party/rules_rust/.github/release_notes.template
new file mode 100644
index 0000000..26c3b67
--- /dev/null
+++ b/third_party/rules_rust/.github/release_notes.template
@@ -0,0 +1,15 @@
+# {version}
+
+```python
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+http_archive(
+    name = "rules_rust",
+    sha256 = "{sha256}",
+    urls = [
+        "https://mirror.bazel.build/github.com/bazelbuild/rules_rust/releases/download/{version}/rules_rust-v{version}.tar.gz",
+        "https://github.com/bazelbuild/rules_rust/releases/download/{version}/rules_rust-v{version}.tar.gz",
+    ],
+)
+```
+
+Additional documentation can be found at: https://bazelbuild.github.io/rules_rust/#setup
diff --git a/third_party/rules_rust/.github/version.bzl.template b/third_party/rules_rust/.github/version.bzl.template
deleted file mode 100644
index b3591a8..0000000
--- a/third_party/rules_rust/.github/version.bzl.template
+++ /dev/null
@@ -1,8 +0,0 @@
-"""The version of rules_rust.
-          
-Note: Any change to this file will trigger a new release. To make changes here,
-edit `./.github/version.bzl.template` instead and run the `Release` action to
-create a new release with an updated `./version.bzl` file.
-"""
-
-VERSION = "{VERSION}"
diff --git a/third_party/rules_rust/.github/workflows/release.yaml b/third_party/rules_rust/.github/workflows/release.yaml
new file mode 100644
index 0000000..bd4dbab
--- /dev/null
+++ b/third_party/rules_rust/.github/workflows/release.yaml
@@ -0,0 +1,225 @@
+---
+name: Release
+on:
+  workflow_dispatch:
+
+defaults:
+  run:
+    shell: bash
+
+env:
+  BAZEL_STARTUP_FLAGS: --bazelrc=${{ github.workspace }}/.github/github.bazelrc
+
+jobs:
+  validation:
+    runs-on: ubuntu-20.04
+    steps:
+      - uses: actions/checkout@v2
+      # TODO: Unfortunately it's not obvious how to restrict `workflow_dispatch` to a particular branch
+      # so this step ensures releases are always done off of `main`.
+      - name: Ensure branch is 'main'
+        run: |
+          git fetch origin &> /dev/null
+          branch="$(git rev-parse --abbrev-ref HEAD)"
+          if [[ "${branch}" != "main" ]]; then
+            echo "The release branch must be main. Got '${branch}'' instead." >&2
+            exit 1
+          else
+            echo "Branch is '${branch}'"
+          fi
+      - name: Ensure release does not already exist
+        run: |
+          git fetch origin &> /dev/null
+          version="$(grep 'VERSION =' ${{ github.workspace }}/version.bzl | sed 's/VERSION = "//' | sed 's/"//')"
+          if [[ -n "$(git tag -l ${version})" ]]; then
+            echo "A release '${version}' already exists." >&2
+            exit 1
+          else
+            echo "Tag '${version}' will be created"
+          fi
+  builds:
+    needs: validation
+    runs-on: ${{ matrix.os }}
+    strategy:
+      matrix:
+        # Create a job for each target triple
+        include:
+          - os: macos-11
+            env:
+              TARGET: "aarch64-apple-darwin"
+          - os: ubuntu-20.04
+            env:
+              TARGET: "aarch64-unknown-linux-gnu"
+          - os: macos-11
+            env:
+              TARGET: "x86_64-apple-darwin"
+          - os: ubuntu-20.04
+            env:
+              TARGET: "x86_64-pc-windows-gnu"
+          - os: windows-2019
+            env:
+              TARGET: "x86_64-pc-windows-msvc"
+          - os: ubuntu-20.04
+            env:
+              TARGET: "x86_64-unknown-linux-gnu"
+          - os: ubuntu-20.04
+            env:
+              TARGET: "x86_64-unknown-linux-musl"
+    steps:
+      - uses: actions/checkout@v2
+      - name: Install rust toolchains for host
+        run: |
+          # Detect the current version of rust
+          version="$(grep 'DEFAULT_RUST_VERSION =' ./rust/private/common.bzl | grep -o '[[:digit:].]\+')"
+          rustup override set "${version}"
+          rustup update stable && rustup default stable
+      - name: Setup macos build tooling
+        run: |
+          sudo xcode-select -s /Applications/Xcode_12.4.app/Contents/Developer/
+          # Set SDK environment variables
+          echo "SDKROOT=$(xcrun -sdk macosx11.1 --show-sdk-path)" >> $GITHUB_ENV
+          echo "MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx11.1 --show-sdk-platform-version)" >> $GITHUB_ENV
+        if: startswith(matrix.os, 'macos')
+      - name: Setup Windows Bazelrc
+        run: |
+          echo "startup --output_user_root=C:/tmp" > ./user.bazelrc
+        if: startswith(matrix.os, 'Windows')
+      - name: Build cargo-bazel binaries
+        run: |
+          # Build binaries
+          if [[ "${RUNNER_OS}" == "Windows" ]]; then
+            OUTPUT_PATH="$(cygpath "${{ github.workspace }}/crate_universe/target/artifacts" -m)"
+          else
+            OUTPUT_PATH="${{ github.workspace }}/crate_universe/target/artifacts"
+          fi
+            bazel ${BAZEL_STARTUP_FLAGS[@]} run //crate_universe/tools/cross_installer -- --target=${TARGET} --output="${OUTPUT_PATH}"
+        env:
+          TARGET: "${{ matrix.env.TARGET }}"
+      - uses: actions/upload-artifact@v2
+        with:
+          name: "${{ matrix.env.TARGET }}"
+          path: ${{ github.workspace }}/crate_universe/target/artifacts/${{ matrix.env.TARGET }}
+          if-no-files-found: error
+  release:
+    needs: builds
+    runs-on: ubuntu-20.04
+    steps:
+      - uses: actions/checkout@v2
+      - uses: actions/download-artifact@v2
+        with:
+          path: ${{ github.workspace }}/crate_universe/target/artifacts
+      - name: Detect the current version
+        run: |
+          version="$(grep 'VERSION =' ${{ github.workspace }}/version.bzl | grep -o '[[:digit:].]\+')"
+          echo "RELEASE_VERSION=${version}" >> $GITHUB_ENV
+      - name: Create the rules archive
+        run: |
+          # Update urls and sha256 values
+          bazel ${BAZEL_STARTUP_FLAGS[@]}  run //crate_universe/tools/urls_generator -- --artifacts-dir="${ARTIFACTS_DIR}" --url-prefix="${URL_PREFIX}"
+          bazel clean
+          # Build an archive of the repo contents
+          tar -czf ${{ github.workspace }}/.github/rules_rust.tar.gz --exclude=".git" --exclude=".github" --exclude="examples" -C ${{ github.workspace }} .
+          # Save the sha256 checksum of the distro archive to the environment
+          sha256="$(shasum --algorithm 256 ${{ github.workspace }}/.github/rules_rust.tar.gz | awk '{ print $1 }')"
+          echo "ARCHIVE_SHA256=${sha256}" >> $GITHUB_ENV
+        env:
+          CARGO_BAZEL_GENERATOR_URL: file://${{ github.workspace }}/crate_universe/target/artifacts/x86_64-unknown-linux-gnu/cargo-bazel
+          ARTIFACTS_DIR: ${{ github.workspace }}/crate_universe/target/artifacts
+          URL_PREFIX: https://github.com/${{ github.repository_owner }}/rules_rust/releases/download/${{ env.RELEASE_VERSION }}
+      # Upload the artifact in case creating a release fails so all artifacts can then be manually recovered.
+      - uses: actions/upload-artifact@v2
+        with:
+          name: "rules_rust.tar.gz"
+          path: ${{ github.workspace }}/.github/rules_rust.tar.gz
+          if-no-files-found: error
+      - name: Generate release notes
+        run: |
+          # Generate the release notes
+          sed 's/{version}/${{ env.RELEASE_VERSION }}/g' ${{ github.workspace }}/.github/release_notes.template \
+          | sed 's/{sha256}/${{ env.ARCHIVE_SHA256 }}/g' \
+          > ${{ github.workspace }}/.github/release_notes.txt
+      - name: Create release
+        uses: softprops/action-gh-release@v1
+        id: rules_rust_release
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          generate_release_notes: true
+          tag_name: ${{ env.RELEASE_VERSION }}
+          body_path: ${{ github.workspace }}/.github/release_notes.txt
+          target_commitish: ${{ github.base_ref }}
+
+      - name: "Upload the rules archive"
+        uses: actions/upload-release-asset@v1
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
+          asset_name: rules_rust-v${{ env.RELEASE_VERSION }}.tar.gz
+          asset_path: ${{ github.workspace }}/.github/rules_rust.tar.gz
+          asset_content_type: application/gzip
+
+      # There must be a upload action for each platform triple we create
+      - name: "Upload aarch64-apple-darwin"
+        uses: actions/upload-release-asset@v1
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
+          asset_name: cargo-bazel-aarch64-apple-darwin
+          asset_path: ${{ github.workspace }}/crate_universe/target/artifacts/aarch64-apple-darwin/cargo-bazel
+          asset_content_type: application/octet-stream
+      - name: "Upload aarch64-unknown-linux-gnu"
+        uses: actions/upload-release-asset@v1
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
+          asset_name: cargo-bazel-aarch64-unknown-linux-gnu
+          asset_path: ${{ github.workspace }}/crate_universe/target/artifacts/aarch64-unknown-linux-gnu/cargo-bazel
+          asset_content_type: application/octet-stream
+      - name: "Upload x86_64-apple-darwin"
+        uses: actions/upload-release-asset@v1
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
+          asset_name: cargo-bazel-x86_64-apple-darwin
+          asset_path: ${{ github.workspace }}/crate_universe/target/artifacts/x86_64-apple-darwin/cargo-bazel
+          asset_content_type: application/octet-stream
+      - name: "Upload x86_64-pc-windows-gnu"
+        uses: actions/upload-release-asset@v1
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
+          asset_name: cargo-bazel-x86_64-pc-windows-gnu.exe
+          asset_path: ${{ github.workspace }}/crate_universe/target/artifacts/x86_64-pc-windows-gnu/cargo-bazel.exe
+          asset_content_type: application/octet-stream
+      - name: "Upload x86_64-pc-windows-msvc"
+        uses: actions/upload-release-asset@v1
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
+          asset_name: cargo-bazel-x86_64-pc-windows-msvc.exe
+          asset_path: ${{ github.workspace }}/crate_universe/target/artifacts/x86_64-pc-windows-msvc/cargo-bazel.exe
+          asset_content_type: application/octet-stream
+      - name: "Upload x86_64-unknown-linux-gnu"
+        uses: actions/upload-release-asset@v1
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
+          asset_name: cargo-bazel-x86_64-unknown-linux-gnu
+          asset_path: ${{ github.workspace }}/crate_universe/target/artifacts/x86_64-unknown-linux-gnu/cargo-bazel
+          asset_content_type: application/octet-stream
+      - name: "Upload x86_64-unknown-linux-musl"
+        uses: actions/upload-release-asset@v1
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
+          asset_name: cargo-bazel-x86_64-unknown-linux-musl
+          asset_path: ${{ github.workspace }}/crate_universe/target/artifacts/x86_64-unknown-linux-musl/cargo-bazel
+          asset_content_type: application/octet-stream
diff --git a/third_party/rules_rust/.github/workflows/release_begin.yaml b/third_party/rules_rust/.github/workflows/release_begin.yaml
deleted file mode 100644
index 6313efa..0000000
--- a/third_party/rules_rust/.github/workflows/release_begin.yaml
+++ /dev/null
@@ -1,197 +0,0 @@
----
-name: Release
-on:
-  workflow_dispatch:
-    inputs:
-      version:
-        description: "The new version to release"
-        required: true
-
-defaults:
-  run:
-    shell: bash
-
-jobs:
-  crate_universe_builds:
-    if: ${{ github.repository_owner == 'bazelbuild' }}
-    runs-on: ${{ matrix.os }}
-    strategy:
-      matrix:
-        # Create a job for each target triple
-        include:
-          - os: macos-10.15
-            env:
-              TARGET: "aarch64-apple-darwin"
-              EXTENSION: ""
-          - os: ubuntu-20.04
-            env:
-              TARGET: "aarch64-unknown-linux-gnu"
-              EXTENSION: ""
-          - os: macos-10.15
-            env:
-              TARGET: "x86_64-apple-darwin"
-              EXTENSION: ""
-          - os: ubuntu-20.04
-            env:
-              TARGET: "x86_64-pc-windows-gnu"
-              EXTENSION: ".exe"
-          - os: ubuntu-20.04
-            env:
-              TARGET: "x86_64-unknown-linux-gnu"
-              EXTENSION: ""
-    steps:
-      - uses: actions/checkout@v2
-        with:
-          ref: "${{ github.base_ref }}"
-      - run: |
-          # Install cross
-          if [[ "${RUNNER_OS}" == "macOS" ]]; then
-            curl --fail -Lo ~/cross.tar.gz https://github.com/rust-embedded/cross/releases/download/v0.2.1/cross-v0.2.1-x86_64-apple-darwin.tar.gz
-          else
-            curl --fail -Lo ~/cross.tar.gz https://github.com/rust-embedded/cross/releases/download/v0.2.1/cross-v0.2.1-x86_64-unknown-linux-gnu.tar.gz
-          fi
-          sudo tar -xf ~/cross.tar.gz -C /usr/local/bin/
-          sudo chmod +x /usr/local/bin/cross
-        if: matrix.os != 'windows-2019'
-      - run: |
-          # Install rust toolchains for host
-
-          # Detect the current version of rust
-          version="$(grep 'DEFAULT_RUST_VERSION =' ./rust/private/common.bzl | sed 's/DEFAULT_RUST_VERSION = "//' | sed 's/"//')"
-
-          rustup override set "${version}"
-          rustup update stable && rustup default stable
-      - run: |
-          # Setup macos build tooling
-          sudo xcode-select -s /Applications/Xcode_12.4.app/Contents/Developer/
-
-          # Set SDK environment variables
-          echo "SDKROOT=$(xcrun -sdk macosx11.1 --show-sdk-path)" >> $GITHUB_ENV
-          echo "MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx11.1 --show-sdk-platform-version)" >> $GITHUB_ENV
-        if: matrix.os == 'macOS-10.15'
-      - run: |
-          # Build binaries
-          ./crate_universe/private/bootstrap/build.sh
-        env:
-          TARGET: "${{ matrix.env.TARGET }}"
-      - uses: actions/upload-artifact@v2
-        with:
-          name: "${{ matrix.env.TARGET }}"
-          path: ${{ github.workspace }}/crate_universe/private/bootstrap/bin/${{ matrix.env.TARGET }}
-          if-no-files-found: error
-  release:
-    if: ${{ github.repository_owner == 'bazelbuild' }}
-    needs: crate_universe_builds
-    runs-on: ubuntu-latest
-    steps:
-      - uses: actions/checkout@v2
-        with:
-          ref: main
-      - run: |
-          # Write new releases file
-          cat ${{ github.workspace }}/.github/version.bzl.template \
-          | sed 's/{VERSION}/${{ github.event.inputs.version }}/' \
-          > ${{ github.workspace }}/version.bzl
-      - run: |
-          # Get release candidate number
-          git fetch origin &> /dev/null
-          num_tags="$(git tag -l | grep "${{ github.event.inputs.version }}" | wc -l | xargs || true)"
-          echo "RELEASE_CANDIDATE_NUMBER=$( echo "${num_tags}" | python3 -c 'import sys; print(int(sys.stdin.read().strip()) + 1)')" >> $GITHUB_ENV
-      - uses: actions/download-artifact@v2
-        with:
-          path: ${{ github.workspace }}/crate_universe/private/bootstrap/bin
-      - run: |
-          # Write new crate_universe defaults.bzl file
-          # Copy the new template
-          cp ${{ github.workspace }}/crate_universe/private/defaults.bzl.template ${{ github.workspace }}/crate_universe/private/defaults.bzl
-
-          # Generate the release URL
-          url="${URL_PREFIX}/crate_universe_resolver-{host_triple}{extension}"
-          sed -i "s|{DEFAULT_URL_TEMPLATE}|${url}|" ${{ github.workspace }}/crate_universe/private/defaults.bzl
-          sed -i "s|{rc}|${RELEASE_CANDIDATE_NUMBER}|" ${{ github.workspace }}/crate_universe/private/defaults.bzl
-
-          # Populate all sha256 values
-          TARGETS=(
-            aarch64-apple-darwin
-            aarch64-unknown-linux-gnu
-            x86_64-apple-darwin
-            x86_64-pc-windows-gnu
-            x86_64-unknown-linux-gnu
-          )
-          for triple in ${TARGETS[@]}; do
-            if [[ "${triple}" == *"windows"* ]]; then
-                bin_name=crate_universe_resolver.exe
-            else
-                bin_name=crate_universe_resolver
-            fi
-            sha256="$(shasum --algorithm 256 ${{ github.workspace }}/crate_universe/private/bootstrap/bin/${triple}/release/${bin_name} | awk '{ print $1 }')"
-            sed -i "s|{${triple}--sha256}|${sha256}|" ${{ github.workspace }}/crate_universe/private/defaults.bzl
-          done
-        env:
-          URL_PREFIX: https://github.com/${{ github.repository_owner }}/rules_rust/releases/download/${{ github.event.inputs.version }}
-      - run: |
-          # Update docs for release
-          SKIP_COMMIT=1 ${{ github.workspace }}/docs/update_docs.sh
-      - uses: actions/create-release@v1
-        id: rules_rust_release
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          prerelease: true
-          tag_name: ${{ github.event.inputs.version }}rc-${{ env.RELEASE_CANDIDATE_NUMBER }}
-          release_name: ${{ github.event.inputs.version }}rc-${{ env.RELEASE_CANDIDATE_NUMBER }}
-          body: ${{ github.event.inputs.version }}rc-${{ env.RELEASE_CANDIDATE_NUMBER }}
-          commitish: main
-      # There must be a upload action for each platform triple we create
-      - name: "Upload aarch64-apple-darwin"
-        uses: actions/upload-release-asset@v1
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
-          asset_name: crate_universe_resolver-aarch64-apple-darwin
-          asset_path: ${{ github.workspace }}/crate_universe/private/bootstrap/bin/aarch64-apple-darwin/release/crate_universe_resolver
-          asset_content_type: application/octet-stream
-      - name: "Upload aarch64-unknown-linux-gnu"
-        uses: actions/upload-release-asset@v1
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
-          asset_name: crate_universe_resolver-aarch64-unknown-linux-gnu
-          asset_path: ${{ github.workspace }}/crate_universe/private/bootstrap/bin/aarch64-unknown-linux-gnu/release/crate_universe_resolver
-          asset_content_type: application/octet-stream
-      - name: "Upload x86_64-apple-darwin"
-        uses: actions/upload-release-asset@v1
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
-          asset_name: crate_universe_resolver-x86_64-apple-darwin
-          asset_path: ${{ github.workspace }}/crate_universe/private/bootstrap/bin/x86_64-apple-darwin/release/crate_universe_resolver
-          asset_content_type: application/octet-stream
-      - name: "Upload x86_64-pc-windows-gnu"
-        uses: actions/upload-release-asset@v1
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
-          asset_name: crate_universe_resolver-x86_64-pc-windows-gnu.exe
-          asset_path: ${{ github.workspace }}/crate_universe/private/bootstrap/bin/x86_64-pc-windows-gnu/release/crate_universe_resolver.exe
-          asset_content_type: application/octet-stream
-      - name: "Upload x86_64-unknown-linux-gnu"
-        uses: actions/upload-release-asset@v1
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
-          asset_name: crate_universe_resolver-x86_64-unknown-linux-gnu
-          asset_path: ${{ github.workspace }}/crate_universe/private/bootstrap/bin/x86_64-unknown-linux-gnu/release/crate_universe_resolver
-          asset_content_type: application/octet-stream
-      - uses: peter-evans/create-pull-request@v3
-        with:
-          title: Release ${{ github.event.inputs.version }}
-          commit-message: release ${{ github.event.inputs.version }}
-          branch: release/${{ github.event.inputs.version }}
-          delete-branch: true
-          body: Release ${{ github.event.inputs.version }}
diff --git a/third_party/rules_rust/.github/workflows/release_finish.yaml b/third_party/rules_rust/.github/workflows/release_finish.yaml
deleted file mode 100644
index 116422e..0000000
--- a/third_party/rules_rust/.github/workflows/release_finish.yaml
+++ /dev/null
@@ -1,122 +0,0 @@
----
-name: Release Finalize
-on:
-  push:
-    branches:
-      - main
-    paths:
-      # Only trigger for new releases
-      - "version.bzl"
-
-defaults:
-  run:
-    shell: bash
-
-jobs:
-  release:
-    if: ${{ github.repository_owner == 'bazelbuild' }}
-    runs-on: ubuntu-latest
-    steps:
-      - uses: actions/checkout@v2
-      - run: |
-          # Get current release version
-          git fetch origin &> /dev/null
-          RELEASE_VERSION=$(cat version.bzl | grep VERSION | sed 's/VERSION = "//' | sed 's/"//')
-          echo "RELEASE_VERSION=${RELEASE_VERSION}" >> $GITHUB_ENV
-
-          # Get release candidate number
-          echo "RELEASE_CANDIDATE_NUMBER=$(git tag -l | grep "${RELEASE_VERSION}" | wc -l | xargs || true)" >> $GITHUB_ENV
-      - run: |
-          # Ensure there is at least 1 release candidate in the environment
-          if [[ -z "${RELEASE_CANDIDATE_NUMBER}" ]]; then
-            exit 1
-          elif [[ "${RELEASE_CANDIDATE_NUMBER}" -eq "0" ]]; then
-            exit 1
-          fi
-      - run: |
-          # Download all artifacts from the release candidate
-          TARGETS=(
-            aarch64-apple-darwin
-            aarch64-unknown-linux-gnu
-            x86_64-apple-darwin
-            x86_64-pc-windows-gnu
-            x86_64-unknown-linux-gnu
-          )
-
-          for triple in ${TARGETS[@]}; do
-            if [[ "${triple}" == *"windows"* ]]; then
-                ext=".exe"
-            else
-                ext=""
-            fi
-            resolver="${ARTIFACT_DIR}/${triple}/release/crate_universe_resolver${ext}"
-            mkdir -p "$(dirname "${resolver}")"
-            url="${ARTIFACT_URL}/crate_universe_resolver-${triple}${ext}"
-            echo "Downloading '${url}' to '${resolver}'"
-            curl --fail -Lo "${resolver}" "${url}"
-            sha256="$(shasum --algorithm 256 "${resolver}" | awk '{ print $1 }')"
-
-            if [[ -z "$(grep "\"${triple}\": \"${sha256}\"" ${{ github.workspace }}/crate_universe/private/defaults.bzl)" ]]; then
-              echo "Unexpected sha256 value from `${url}`: got ${sha256}, expected value in `defaults.bzl`"
-              exit 1
-            fi
-          done
-        env:
-          ARTIFACT_URL: https://github.com/${{ github.repository_owner }}/rules_rust/releases/download/${{env.RELEASE_VERSION}}rc-${{ env.RELEASE_CANDIDATE_NUMBER }}
-          ARTIFACT_DIR: ${{ github.workspace }}/crate_universe/private/bootstrap/bin
-      - uses: actions/create-release@v1
-        id: rules_rust_release
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          prerelease: true
-          tag_name: ${{env.RELEASE_VERSION}}
-          release_name: ${{env.RELEASE_VERSION}}
-          body: ${{env.RELEASE_VERSION}}
-          commitish: ${{ github.base_ref }}
-      # There must be a upload action for each platform triple we create
-      - name: "Upload aarch64-apple-darwin"
-        uses: actions/upload-release-asset@v1
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
-          asset_name: crate_universe_resolver-aarch64-apple-darwin
-          asset_path: ${{ github.workspace }}/crate_universe/private/bootstrap/bin/aarch64-apple-darwin/release/crate_universe_resolver
-          asset_content_type: application/octet-stream
-      - name: "Upload aarch64-unknown-linux-gnu"
-        uses: actions/upload-release-asset@v1
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
-          asset_name: crate_universe_resolver-aarch64-unknown-linux-gnu
-          asset_path: ${{ github.workspace }}/crate_universe/private/bootstrap/bin/aarch64-unknown-linux-gnu/release/crate_universe_resolver
-          asset_content_type: application/octet-stream
-      - name: "Upload x86_64-apple-darwin"
-        uses: actions/upload-release-asset@v1
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
-          asset_name: crate_universe_resolver-x86_64-apple-darwin
-          asset_path: ${{ github.workspace }}/crate_universe/private/bootstrap/bin/x86_64-apple-darwin/release/crate_universe_resolver
-          asset_content_type: application/octet-stream
-      - name: "Upload x86_64-pc-windows-gnu"
-        uses: actions/upload-release-asset@v1
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
-          asset_name: crate_universe_resolver-x86_64-pc-windows-gnu.exe
-          asset_path: ${{ github.workspace }}/crate_universe/private/bootstrap/bin/x86_64-pc-windows-gnu/release/crate_universe_resolver.exe
-          asset_content_type: application/octet-stream
-      - name: "Upload x86_64-unknown-linux-gnu"
-        uses: actions/upload-release-asset@v1
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          upload_url: ${{ steps.rules_rust_release.outputs.upload_url }}
-          asset_name: crate_universe_resolver-x86_64-unknown-linux-gnu
-          asset_path: ${{ github.workspace }}/crate_universe/private/bootstrap/bin/x86_64-unknown-linux-gnu/release/crate_universe_resolver
-          asset_content_type: application/octet-stream
diff --git a/third_party/rules_rust/.gitignore b/third_party/rules_rust/.gitignore
index ca118a2..cccba25 100644
--- a/third_party/rules_rust/.gitignore
+++ b/third_party/rules_rust/.gitignore
@@ -6,7 +6,10 @@
 # bazel
 /bazel-*
 /examples/bazel-*
+/examples/cargo_manifest_dir/external_crate/bazel-*
+/examples/crate_universe/bazel-*
 /examples/crate_universe/*/bazel-*
+/test/cc_common_link/bazel-*
 /docs/bazel-*
 user.bazelrc
 
diff --git a/third_party/rules_rust/BUILD.bazel b/third_party/rules_rust/BUILD.bazel
index 598746e..69e43c7 100644
--- a/third_party/rules_rust/BUILD.bazel
+++ b/third_party/rules_rust/BUILD.bazel
@@ -1,5 +1,5 @@
 load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
-load("//rust:defs.bzl", "capture_clippy_output", "error_format", "extra_exec_rustc_flags", "extra_rustc_flags")
+load("//rust:defs.bzl", "capture_clippy_output", "clippy_flags", "error_format", "extra_exec_rustc_flag", "extra_exec_rustc_flags", "extra_rustc_flag", "extra_rustc_flags", "is_proc_macro_dep", "is_proc_macro_dep_enabled")
 
 exports_files(["LICENSE"])
 
@@ -11,13 +11,6 @@
     visibility = ["//visibility:public"],
 )
 
-alias(
-    name = "rules",
-    actual = ":bzl_lib",
-    deprecation = "Please use the `@rules_rust//:bzl_lib` target instead",
-    visibility = ["//visibility:public"],
-)
-
 # This setting may be changed from the command line to generate machine readable errors.
 error_format(
     name = "error_format",
@@ -25,6 +18,32 @@
     visibility = ["//visibility:public"],
 )
 
+# This setting may be used to pass extra options to clippy from the command line.
+# It applies across all targets.
+clippy_flags(
+    name = "clippy_flags",
+    build_setting_default = [],
+    visibility = ["//visibility:public"],
+)
+
+# This setting may be used to identify dependencies of proc-macro-s.
+# This feature is only enabled if `is_proc_macro_dep_enabled` is true.
+# Its value controls the BAZEL_RULES_RUST_IS_PROC_MACRO_DEP environment variable
+# made available to the rustc invocation.
+is_proc_macro_dep(
+    name = "is_proc_macro_dep",
+    build_setting_default = False,
+    visibility = ["//visibility:public"],
+)
+
+# This setting enables the feature to identify dependencies of proc-macro-s,
+# see `is_proc_macro_dep`.
+is_proc_macro_dep_enabled(
+    name = "is_proc_macro_dep_enabled",
+    build_setting_default = False,
+    visibility = ["//visibility:public"],
+)
+
 # This setting may be used to pass extra options to rustc from the command line
 # in non-exec configuration.
 # It applies across all targets whereas the rustc_flags option on targets applies only
@@ -35,6 +54,12 @@
     visibility = ["//visibility:public"],
 )
 
+extra_rustc_flag(
+    name = "extra_rustc_flag",
+    build_setting_default = "",
+    visibility = ["//visibility:public"],
+)
+
 # This setting may be used to pass extra options to rustc from the command line
 # in exec configuration.
 # It applies across all targets whereas the rustc_flags option on targets applies only
@@ -45,6 +70,12 @@
     visibility = ["//visibility:public"],
 )
 
+extra_exec_rustc_flag(
+    name = "extra_exec_rustc_flag",
+    build_setting_default = "",
+    visibility = ["//visibility:public"],
+)
+
 # This setting is used by the clippy rules. See https://bazelbuild.github.io/rules_rust/rust_clippy.html
 label_flag(
     name = "clippy.toml",
diff --git a/third_party/rules_rust/WORKSPACE.bazel b/third_party/rules_rust/WORKSPACE.bazel
index 9610b09..6c3f851 100644
--- a/third_party/rules_rust/WORKSPACE.bazel
+++ b/third_party/rules_rust/WORKSPACE.bazel
@@ -4,11 +4,11 @@
 
 rules_rust_dependencies()
 
-rust_register_toolchains(include_rustc_srcs = True)
+rust_register_toolchains()
 
-load("@rules_rust//crate_universe:crates.bzl", "crate_deps_repository")
+load("@rules_rust//crate_universe:repositories.bzl", "crate_universe_dependencies")
 
-crate_deps_repository(bootstrap = True)
+crate_universe_dependencies(bootstrap = True)
 
 load("@rules_rust//proto:repositories.bzl", "rust_proto_repositories")
 
@@ -18,13 +18,15 @@
 
 rust_proto_transitive_repositories()
 
-load("@rules_rust//bindgen:repositories.bzl", "rust_bindgen_repositories")
+load("@rules_rust//bindgen:repositories.bzl", "rust_bindgen_dependencies", "rust_bindgen_register_toolchains")
 
-rust_bindgen_repositories()
+rust_bindgen_dependencies()
 
-load("@rules_rust//tools/rust_analyzer:deps.bzl", "rust_analyzer_deps")
+rust_bindgen_register_toolchains()
 
-rust_analyzer_deps()
+load("@rules_rust//tools/rust_analyzer:deps.bzl", "rust_analyzer_dependencies")
+
+rust_analyzer_dependencies()
 
 load("@rules_rust//util/import:deps.bzl", "import_deps")
 
diff --git a/third_party/rules_rust/bindgen/3rdparty/BUILD.bazel b/third_party/rules_rust/bindgen/3rdparty/BUILD.bazel
new file mode 100644
index 0000000..2317ac9
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/BUILD.bazel
@@ -0,0 +1,52 @@
+load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
+load("//crate_universe:defs.bzl", "crate", "crates_vendor")
+
+crates_vendor(
+    name = "crates_vendor",
+    annotations = {
+        "bindgen": [crate.annotation(
+            gen_build_script = True,
+        )],
+        "clang-sys": [crate.annotation(
+            gen_build_script = True,
+        )],
+        "indexmap": [crate.annotation(
+            gen_build_script = True,
+        )],
+        "libloading": [crate.annotation(
+            gen_build_script = True,
+        )],
+        "log": [crate.annotation(
+            rustc_flags = ["--cfg=atomic_cas"],
+        )],
+    },
+    cargo_lockfile = "Cargo.Bazel.lock",
+    generate_build_scripts = False,
+    mode = "remote",
+    packages = {
+        "bindgen": crate.spec(
+            version = "0.60.1",
+        ),
+        "libloading": crate.spec(
+            version = "0.7.3",
+        ),
+    },
+    repository_name = "rules_rust_bindgen",
+    tags = ["manual"],
+)
+
+alias(
+    name = "bindgen",
+    actual = "//bindgen/3rdparty/crates:bindgen__bindgen",
+    tags = ["manual"],
+    visibility = ["//visibility:public"],
+)
+
+bzl_library(
+    name = "bzl_lib",
+    srcs = glob(["**/*.bzl"]) + [
+        "//bindgen/3rdparty/crates:defs.bzl",
+        "//bindgen/3rdparty/crates:crates.bzl",
+    ],
+    visibility = ["//bindgen:__pkg__"],
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/Cargo.Bazel.lock b/third_party/rules_rust/bindgen/3rdparty/Cargo.Bazel.lock
new file mode 100644
index 0000000..0ed2fcd
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/Cargo.Bazel.lock
@@ -0,0 +1,359 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bindgen"
+version = "0.60.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "clap",
+ "env_logger",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "which",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clang-sys"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a050e2153c5be08febd6734e29298e844fdb0fa21aeddd63b4eb7baa106c69b"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab8b79fe3946ceb4a0b1c080b4018992b8d27e9ff363644c1c9b6387c854614d"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_lex",
+ "indexmap",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "direct-cargo-bazel-deps"
+version = "0.0.1"
+dependencies = [
+ "bindgen",
+ "libloading",
+]
+
+[[package]]
+name = "either"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be"
+
+[[package]]
+name = "env_logger"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "indexmap"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "libloading"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "nom"
+version = "7.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "648001efe5d5c0102d8cea768e348da85d90af8ba91f0bea908f157951493cd4"
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "regex"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7"
+
+[[package]]
+name = "which"
+version = "4.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae"
+dependencies = [
+ "either",
+ "lazy_static",
+ "libc",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel
new file mode 100644
index 0000000..a0b54c3
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "aho_corasick",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.7.18",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__memchr-2.5.0//:memchr",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.atty-0.2.14.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.atty-0.2.14.bazel
new file mode 100644
index 0000000..3429815
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.atty-0.2.14.bazel
@@ -0,0 +1,132 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "atty",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.14",
+    deps = [
+    ] + select_with_or({
+        # cfg(target_os = "hermit")
+        #
+        # No supported platform triples for cfg: 'cfg(target_os = "hermit")'
+        # Skipped dependencies: [{"id":"hermit-abi 0.1.19","target":"hermit_abi"}]
+        #
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_bindgen__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_bindgen__winapi-0.3.9//:winapi",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.autocfg-1.1.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.autocfg-1.1.0.bazel
new file mode 100644
index 0000000..d8c2b8b
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.autocfg-1.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "autocfg",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.bazel
new file mode 100644
index 0000000..7021421
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.bazel
@@ -0,0 +1,53 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+package(default_visibility = ["//visibility:public"])
+
+exports_files(
+    [
+        "cargo-bazel.json",
+        "defs.bzl",
+        "crates.bzl",
+    ] + glob([
+        "*.bazel",
+    ]),
+)
+
+filegroup(
+    name = "srcs",
+    srcs = glob([
+        "*.bazel",
+        "*.bzl",
+    ]),
+)
+
+# Workspace Member Dependencies
+alias(
+    name = "bindgen",
+    actual = "@rules_rust_bindgen__bindgen-0.60.1//:bindgen",
+    tags = ["manual"],
+)
+
+alias(
+    name = "libloading",
+    actual = "@rules_rust_bindgen__libloading-0.7.3//:libloading",
+    tags = ["manual"],
+)
+
+# Binaries
+alias(
+    name = "bindgen__bindgen",
+    actual = "@rules_rust_bindgen__bindgen-0.60.1//:bindgen__bin",
+    tags = ["manual"],
+)
+
+alias(
+    name = "clap__stdio-fixture",
+    actual = "@rules_rust_bindgen__clap-3.2.12//:stdio-fixture__bin",
+    tags = ["manual"],
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.bindgen-0.60.1.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.bindgen-0.60.1.bazel
new file mode 100644
index 0000000..65ed0d9
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.bindgen-0.60.1.bazel
@@ -0,0 +1,296 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # BSD-3-Clause
+# ])
+
+rust_library(
+    name = "bindgen",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clap",
+        "default",
+        "env_logger",
+        "log",
+        "logging",
+        "runtime",
+        "which",
+        "which-rustfmt",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.60.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__bindgen-0.60.1//:build_script_build",
+            "@rules_rust_bindgen__bitflags-1.3.2//:bitflags",
+            "@rules_rust_bindgen__cexpr-0.6.0//:cexpr",
+            "@rules_rust_bindgen__clang-sys-1.3.3//:clang_sys",
+            "@rules_rust_bindgen__clap-3.2.12//:clap",
+            "@rules_rust_bindgen__env_logger-0.9.0//:env_logger",
+            "@rules_rust_bindgen__lazy_static-1.4.0//:lazy_static",
+            "@rules_rust_bindgen__lazycell-1.3.0//:lazycell",
+            "@rules_rust_bindgen__log-0.4.17//:log",
+            "@rules_rust_bindgen__peeking_take_while-0.1.2//:peeking_take_while",
+            "@rules_rust_bindgen__proc-macro2-1.0.40//:proc_macro2",
+            "@rules_rust_bindgen__quote-1.0.20//:quote",
+            "@rules_rust_bindgen__regex-1.6.0//:regex",
+            "@rules_rust_bindgen__rustc-hash-1.1.0//:rustc_hash",
+            "@rules_rust_bindgen__shlex-1.1.0//:shlex",
+            "@rules_rust_bindgen__which-4.2.5//:which",
+        ],
+    }),
+)
+
+rust_binary(
+    name = "bindgen__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clap",
+        "default",
+        "env_logger",
+        "log",
+        "logging",
+        "runtime",
+        "which",
+        "which-rustfmt",
+    ],
+    crate_root = "src/main.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.60.1",
+    deps = [
+        ":bindgen",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__bindgen-0.60.1//:build_script_build",
+            "@rules_rust_bindgen__bitflags-1.3.2//:bitflags",
+            "@rules_rust_bindgen__cexpr-0.6.0//:cexpr",
+            "@rules_rust_bindgen__clang-sys-1.3.3//:clang_sys",
+            "@rules_rust_bindgen__clap-3.2.12//:clap",
+            "@rules_rust_bindgen__env_logger-0.9.0//:env_logger",
+            "@rules_rust_bindgen__lazy_static-1.4.0//:lazy_static",
+            "@rules_rust_bindgen__lazycell-1.3.0//:lazycell",
+            "@rules_rust_bindgen__log-0.4.17//:log",
+            "@rules_rust_bindgen__peeking_take_while-0.1.2//:peeking_take_while",
+            "@rules_rust_bindgen__proc-macro2-1.0.40//:proc_macro2",
+            "@rules_rust_bindgen__quote-1.0.20//:quote",
+            "@rules_rust_bindgen__regex-1.6.0//:regex",
+            "@rules_rust_bindgen__rustc-hash-1.1.0//:rustc_hash",
+            "@rules_rust_bindgen__shlex-1.1.0//:shlex",
+            "@rules_rust_bindgen__which-4.2.5//:which",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "bindgen_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clap",
+        "default",
+        "env_logger",
+        "log",
+        "logging",
+        "runtime",
+        "which",
+        "which-rustfmt",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.60.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "bindgen_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.bitflags-1.3.2.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.bitflags-1.3.2.bazel
new file mode 100644
index 0000000..a2c944a
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.bitflags-1.3.2.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "bitflags",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.3.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.cexpr-0.6.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.cexpr-0.6.0.bazel
new file mode 100644
index 0000000..62b2c50
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.cexpr-0.6.0.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0/MIT
+# ])
+
+rust_library(
+    name = "cexpr",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__nom-7.1.1//:nom",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
new file mode 100644
index 0000000..7f979d3
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "cfg_if",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.clang-sys-1.3.3.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.clang-sys-1.3.3.bazel
new file mode 100644
index 0000000..fd28d2b
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.clang-sys-1.3.3.bazel
@@ -0,0 +1,199 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0
+# ])
+
+rust_library(
+    name = "clang_sys",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clang_3_5",
+        "clang_3_6",
+        "clang_3_7",
+        "clang_3_8",
+        "clang_3_9",
+        "clang_4_0",
+        "clang_5_0",
+        "clang_6_0",
+        "libloading",
+        "runtime",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.3.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__clang-sys-1.3.3//:build_script_build",
+            "@rules_rust_bindgen__glob-0.3.0//:glob",
+            "@rules_rust_bindgen__libc-0.2.126//:libc",
+            "@rules_rust_bindgen__libloading-0.7.3//:libloading",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "clang-sys_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clang_3_5",
+        "clang_3_6",
+        "clang_3_7",
+        "clang_3_8",
+        "clang_3_9",
+        "clang_4_0",
+        "clang_5_0",
+        "clang_6_0",
+        "libloading",
+        "runtime",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    links = "clang",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.3.3",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__glob-0.3.0//:glob",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "clang-sys_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.clap-3.2.12.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.clap-3.2.12.bazel
new file mode 100644
index 0000000..de7dad1
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.clap-3.2.12.bazel
@@ -0,0 +1,185 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "clap",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "atty",
+        "color",
+        "default",
+        "std",
+        "strsim",
+        "suggestions",
+        "termcolor",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "3.2.12",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__atty-0.2.14//:atty",
+            "@rules_rust_bindgen__bitflags-1.3.2//:bitflags",
+            "@rules_rust_bindgen__clap_lex-0.2.4//:clap_lex",
+            "@rules_rust_bindgen__indexmap-1.9.1//:indexmap",
+            "@rules_rust_bindgen__strsim-0.10.0//:strsim",
+            "@rules_rust_bindgen__termcolor-1.1.3//:termcolor",
+            "@rules_rust_bindgen__textwrap-0.15.0//:textwrap",
+        ],
+    }),
+)
+
+rust_binary(
+    name = "stdio-fixture__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "atty",
+        "color",
+        "default",
+        "std",
+        "strsim",
+        "suggestions",
+        "termcolor",
+    ],
+    crate_root = "src/bin/stdio-fixture.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "3.2.12",
+    deps = [
+        ":clap",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__atty-0.2.14//:atty",
+            "@rules_rust_bindgen__bitflags-1.3.2//:bitflags",
+            "@rules_rust_bindgen__clap_lex-0.2.4//:clap_lex",
+            "@rules_rust_bindgen__indexmap-1.9.1//:indexmap",
+            "@rules_rust_bindgen__strsim-0.10.0//:strsim",
+            "@rules_rust_bindgen__termcolor-1.1.3//:termcolor",
+            "@rules_rust_bindgen__textwrap-0.15.0//:textwrap",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.clap_lex-0.2.4.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.clap_lex-0.2.4.bazel
new file mode 100644
index 0000000..6d7a45c
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.clap_lex-0.2.4.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "clap_lex",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__os_str_bytes-6.2.0//:os_str_bytes",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.either-1.7.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.either-1.7.0.bazel
new file mode 100644
index 0000000..b9a02d0
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.either-1.7.0.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "either",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "use_std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.7.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.env_logger-0.9.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.env_logger-0.9.0.bazel
new file mode 100644
index 0000000..8cef2f1
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.env_logger-0.9.0.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "env_logger",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "atty",
+        "default",
+        "humantime",
+        "regex",
+        "termcolor",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.9.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__atty-0.2.14//:atty",
+            "@rules_rust_bindgen__humantime-2.1.0//:humantime",
+            "@rules_rust_bindgen__log-0.4.17//:log",
+            "@rules_rust_bindgen__regex-1.6.0//:regex",
+            "@rules_rust_bindgen__termcolor-1.1.3//:termcolor",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.glob-0.3.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.glob-0.3.0.bazel
new file mode 100644
index 0000000..b229170
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.glob-0.3.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "glob",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.hashbrown-0.12.3.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.hashbrown-0.12.3.bazel
new file mode 100644
index 0000000..2324de1
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.hashbrown-0.12.3.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "hashbrown",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "raw",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.12.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel
new file mode 100644
index 0000000..f4755d6
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "hermit_abi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.19",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__libc-0.2.126//:libc",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.humantime-2.1.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.humantime-2.1.0.bazel
new file mode 100644
index 0000000..e4d9eba
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.humantime-2.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "humantime",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.indexmap-1.9.1.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.indexmap-1.9.1.bazel
new file mode 100644
index 0000000..e2235d8
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.indexmap-1.9.1.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "indexmap",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.9.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__hashbrown-0.12.3//:hashbrown",
+            "@rules_rust_bindgen__indexmap-1.9.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "indexmap_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.9.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "indexmap_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel
new file mode 100644
index 0000000..65ba91f
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "lazy_static",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.lazycell-1.3.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.lazycell-1.3.0.bazel
new file mode 100644
index 0000000..3496e7f
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.lazycell-1.3.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "lazycell",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.3.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.libc-0.2.126.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.libc-0.2.126.bazel
new file mode 100644
index 0000000..81fa84b
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.libc-0.2.126.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.126",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.libloading-0.7.3.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.libloading-0.7.3.bazel
new file mode 100644
index 0000000..cd99f1a
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.libloading-0.7.3.bazel
@@ -0,0 +1,127 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # ISC
+# ])
+
+rust_library(
+    name = "libloading",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.7.3",
+    deps = [
+    ] + select_with_or({
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_bindgen__cfg-if-1.0.0//:cfg_if",
+
+            # Common Deps
+        ],
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_bindgen__winapi-0.3.9//:winapi",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.log-0.4.17.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.log-0.4.17.bazel
new file mode 100644
index 0000000..ef9ffa5
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.log-0.4.17.bazel
@@ -0,0 +1,95 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "log",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+
+        # User provided rustc_flags
+        "--cfg=atomic_cas",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.17",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__cfg-if-1.0.0//:cfg_if",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.memchr-2.5.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.memchr-2.5.0.bazel
new file mode 100644
index 0000000..e549393
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.memchr-2.5.0.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "memchr",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.5.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.minimal-lexical-0.2.1.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.minimal-lexical-0.2.1.bazel
new file mode 100644
index 0000000..bb6a767
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.minimal-lexical-0.2.1.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "minimal_lexical",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.nom-7.1.1.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.nom-7.1.1.bazel
new file mode 100644
index 0000000..cbfbefb
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.nom-7.1.1.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "nom",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "7.1.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__memchr-2.5.0//:memchr",
+            "@rules_rust_bindgen__minimal-lexical-0.2.1//:minimal_lexical",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.os_str_bytes-6.2.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.os_str_bytes-6.2.0.bazel
new file mode 100644
index 0000000..95c948d
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.os_str_bytes-6.2.0.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "os_str_bytes",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "raw_os_str",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "6.2.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.peeking_take_while-0.1.2.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.peeking_take_while-0.1.2.bazel
new file mode 100644
index 0000000..2618979
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.peeking_take_while-0.1.2.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0/MIT
+# ])
+
+rust_library(
+    name = "peeking_take_while",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.proc-macro2-1.0.40.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.proc-macro2-1.0.40.bazel
new file mode 100644
index 0000000..e1e99e6
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.proc-macro2-1.0.40.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "proc_macro2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.40",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__unicode-ident-1.0.2//:unicode_ident",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.quote-1.0.20.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.quote-1.0.20.bazel
new file mode 100644
index 0000000..bcc7563
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.quote-1.0.20.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "quote",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.20",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__proc-macro2-1.0.40//:proc_macro2",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.regex-1.6.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.regex-1.6.0.bazel
new file mode 100644
index 0000000..47333eb
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.regex-1.6.0.bazel
@@ -0,0 +1,109 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "regex",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "aho-corasick",
+        "memchr",
+        "perf",
+        "perf-cache",
+        "perf-dfa",
+        "perf-inline",
+        "perf-literal",
+        "std",
+        "unicode",
+        "unicode-age",
+        "unicode-bool",
+        "unicode-case",
+        "unicode-gencat",
+        "unicode-perl",
+        "unicode-script",
+        "unicode-segment",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.6.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_bindgen__aho-corasick-0.7.18//:aho_corasick",
+            "@rules_rust_bindgen__memchr-2.5.0//:memchr",
+            "@rules_rust_bindgen__regex-syntax-0.6.27//:regex_syntax",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel
new file mode 100644
index 0000000..195baea
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel
@@ -0,0 +1,98 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "regex_syntax",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "unicode",
+        "unicode-age",
+        "unicode-bool",
+        "unicode-case",
+        "unicode-gencat",
+        "unicode-perl",
+        "unicode-script",
+        "unicode-segment",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.27",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.rustc-hash-1.1.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.rustc-hash-1.1.0.bazel
new file mode 100644
index 0000000..75de0b1
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.rustc-hash-1.1.0.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0/MIT
+# ])
+
+rust_library(
+    name = "rustc_hash",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.shlex-1.1.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.shlex-1.1.0.bazel
new file mode 100644
index 0000000..49b021f
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.shlex-1.1.0.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "shlex",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.strsim-0.10.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.strsim-0.10.0.bazel
new file mode 100644
index 0000000..8c741af
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.strsim-0.10.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "strsim",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.10.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.termcolor-1.1.3.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.termcolor-1.1.3.bazel
new file mode 100644
index 0000000..ae18d1f
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.termcolor-1.1.3.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense OR MIT
+# ])
+
+rust_library(
+    name = "termcolor",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.3",
+    deps = [
+    ] + select_with_or({
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_bindgen__winapi-util-0.1.5//:winapi_util",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.textwrap-0.15.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.textwrap-0.15.0.bazel
new file mode 100644
index 0000000..99bfc63
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.textwrap-0.15.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "textwrap",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.15.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.unicode-ident-1.0.2.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.unicode-ident-1.0.2.bazel
new file mode 100644
index 0000000..a403831
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.unicode-ident-1.0.2.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # (MIT OR Apache-2.0) AND Unicode-DFS-2016
+# ])
+
+rust_library(
+    name = "unicode_ident",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.which-4.2.5.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.which-4.2.5.bazel
new file mode 100644
index 0000000..acf903d
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.which-4.2.5.bazel
@@ -0,0 +1,104 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "which",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "4.2.5",
+    deps = [
+    ] + select_with_or({
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_bindgen__lazy_static-1.4.0//:lazy_static",
+
+            # Common Deps
+            "@rules_rust_bindgen__either-1.7.0//:either",
+            "@rules_rust_bindgen__libc-0.2.126//:libc",
+        ],
+        "//conditions:default": [
+            "@rules_rust_bindgen__either-1.7.0//:either",
+            "@rules_rust_bindgen__libc-0.2.126//:libc",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.winapi-0.3.9.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.winapi-0.3.9.bazel
new file mode 100644
index 0000000..8747875
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.winapi-0.3.9.bazel
@@ -0,0 +1,112 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "winapi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "consoleapi",
+        "errhandlingapi",
+        "fileapi",
+        "libloaderapi",
+        "minwinbase",
+        "minwindef",
+        "processenv",
+        "std",
+        "winbase",
+        "wincon",
+        "winerror",
+        "winnt",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.9",
+    deps = [
+    ] + select_with_or({
+        # i686-pc-windows-gnu
+        #
+        # No supported platform triples for cfg: 'i686-pc-windows-gnu'
+        # Skipped dependencies: [{"id":"winapi-i686-pc-windows-gnu 0.4.0","target":"winapi_i686_pc_windows_gnu"}]
+        #
+        # x86_64-pc-windows-gnu
+        #
+        # No supported platform triples for cfg: 'x86_64-pc-windows-gnu'
+        # Skipped dependencies: [{"id":"winapi-x86_64-pc-windows-gnu 0.4.0","target":"winapi_x86_64_pc_windows_gnu"}]
+        #
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
new file mode 100644
index 0000000..ab0818a
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "winapi_i686_pc_windows_gnu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel
new file mode 100644
index 0000000..5fde268
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "winapi_util",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.5",
+    deps = [
+    ] + select_with_or({
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_bindgen__winapi-0.3.9//:winapi",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
new file mode 100644
index 0000000..1aed2bb
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "winapi_x86_64_pc_windows_gnu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/crates.bzl b/third_party/rules_rust/bindgen/3rdparty/crates/crates.bzl
new file mode 100644
index 0000000..9ffa4ff
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/crates.bzl
@@ -0,0 +1,25 @@
+###############################################################################
+# @generated
+# This file is auto-generated by the cargo-bazel tool.
+#
+# DO NOT MODIFY: Local changes may be replaced in future executions.
+###############################################################################
+"""Rules for defining repositories for remote `crates_vendor` repositories"""
+
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//bindgen/3rdparty/crates:defs.bzl", _crate_repositories = "crate_repositories")
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:crates_vendor.bzl", "crates_vendor_remote_repository")
+
+def crate_repositories():
+    maybe(
+        crates_vendor_remote_repository,
+        name = "rules_rust_bindgen",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.bazel"),
+        defs_module = Label("@rules_rust//bindgen/3rdparty/crates:defs.bzl"),
+    )
+
+    _crate_repositories()
diff --git a/third_party/rules_rust/bindgen/3rdparty/crates/defs.bzl b/third_party/rules_rust/bindgen/3rdparty/crates/defs.bzl
new file mode 100644
index 0000000..a7ef859
--- /dev/null
+++ b/third_party/rules_rust/bindgen/3rdparty/crates/defs.bzl
@@ -0,0 +1,787 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //bindgen/3rdparty:crates_vendor
+###############################################################################
+"""
+# `crates_repository` API
+
+- [aliases](#aliases)
+- [crate_deps](#crate_deps)
+- [all_crate_deps](#all_crate_deps)
+- [crate_repositories](#crate_repositories)
+
+"""
+
+load("@bazel_skylib//lib:selects.bzl", "selects")
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+###############################################################################
+# MACROS API
+###############################################################################
+
+# An identifier that represent common dependencies (unconditional).
+_COMMON_CONDITION = ""
+
+def _flatten_dependency_maps(all_dependency_maps):
+    """Flatten a list of dependency maps into one dictionary.
+
+    Dependency maps have the following structure:
+
+    ```python
+    DEPENDENCIES_MAP = {
+        # The first key in the map is a Bazel package
+        # name of the workspace this file is defined in.
+        "workspace_member_package": {
+
+            # Not all dependnecies are supported for all platforms.
+            # the condition key is the condition required to be true
+            # on the host platform.
+            "condition": {
+
+                # An alias to a crate target.     # The label of the crate target the
+                # Aliases are only crate names.   # package name refers to.
+                "package_name":                   "@full//:label",
+            }
+        }
+    }
+    ```
+
+    Args:
+        all_dependency_maps (list): A list of dicts as described above
+
+    Returns:
+        dict: A dictionary as described above
+    """
+    dependencies = {}
+
+    for workspace_deps_map in all_dependency_maps:
+        for pkg_name, conditional_deps_map in workspace_deps_map.items():
+            if pkg_name not in dependencies:
+                non_frozen_map = dict()
+                for key, values in conditional_deps_map.items():
+                    non_frozen_map.update({key: dict(values.items())})
+                dependencies.setdefault(pkg_name, non_frozen_map)
+                continue
+
+            for condition, deps_map in conditional_deps_map.items():
+                # If the condition has not been recorded, do so and continue
+                if condition not in dependencies[pkg_name]:
+                    dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))
+                    continue
+
+                # Alert on any miss-matched dependencies
+                inconsistent_entries = []
+                for crate_name, crate_label in deps_map.items():
+                    existing = dependencies[pkg_name][condition].get(crate_name)
+                    if existing and existing != crate_label:
+                        inconsistent_entries.append((crate_name, existing, crate_label))
+                    dependencies[pkg_name][condition].update({crate_name: crate_label})
+
+    return dependencies
+
+def crate_deps(deps, package_name = None):
+    """Finds the fully qualified label of the requested crates for the package where this macro is called.
+
+    Args:
+        deps (list): The desired list of crate targets.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()`.
+
+    Returns:
+        list: A list of labels to generated rust targets (str)
+    """
+
+    if not deps:
+        return []
+
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Join both sets of dependencies
+    dependencies = _flatten_dependency_maps([
+        _NORMAL_DEPENDENCIES,
+        _NORMAL_DEV_DEPENDENCIES,
+        _PROC_MACRO_DEPENDENCIES,
+        _PROC_MACRO_DEV_DEPENDENCIES,
+        _BUILD_DEPENDENCIES,
+        _BUILD_PROC_MACRO_DEPENDENCIES,
+    ]).pop(package_name, {})
+
+    # Combine all conditional packages so we can easily index over a flat list
+    # TODO: Perhaps this should actually return select statements and maintain
+    # the conditionals of the dependencies
+    flat_deps = {}
+    for deps_set in dependencies.values():
+        for crate_name, crate_label in deps_set.items():
+            flat_deps.update({crate_name: crate_label})
+
+    missing_crates = []
+    crate_targets = []
+    for crate_target in deps:
+        if crate_target not in flat_deps:
+            missing_crates.append(crate_target)
+        else:
+            crate_targets.append(flat_deps[crate_target])
+
+    if missing_crates:
+        fail("Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`".format(
+            missing_crates,
+            package_name,
+            dependencies,
+        ))
+
+    return crate_targets
+
+def all_crate_deps(
+        normal = False,
+        normal_dev = False,
+        proc_macro = False,
+        proc_macro_dev = False,
+        build = False,
+        build_proc_macro = False,
+        package_name = None):
+    """Finds the fully qualified label of all requested direct crate dependencies \
+    for the package where this macro is called.
+
+    If no parameters are set, all normal dependencies are returned. Setting any one flag will
+    otherwise impact the contents of the returned list.
+
+    Args:
+        normal (bool, optional): If True, normal dependencies are included in the
+            output list.
+        normal_dev (bool, optional): If True, normla dev dependencies will be
+            included in the output list..
+        proc_macro (bool, optional): If True, proc_macro dependencies are included
+            in the output list.
+        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
+            included in the output list.
+        build (bool, optional): If True, build dependencies are included
+            in the output list.
+        build_proc_macro (bool, optional): If True, build proc_macro dependencies are
+            included in the output list.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()` when unset.
+
+    Returns:
+        list: A list of labels to generated rust targets (str)
+    """
+
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Determine the relevant maps to use
+    all_dependency_maps = []
+    if normal:
+        all_dependency_maps.append(_NORMAL_DEPENDENCIES)
+    if normal_dev:
+        all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)
+    if proc_macro:
+        all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)
+    if proc_macro_dev:
+        all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)
+    if build:
+        all_dependency_maps.append(_BUILD_DEPENDENCIES)
+    if build_proc_macro:
+        all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)
+
+    # Default to always using normal dependencies
+    if not all_dependency_maps:
+        all_dependency_maps.append(_NORMAL_DEPENDENCIES)
+
+    dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
+
+    if not dependencies:
+        if dependencies == None:
+            fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
+        else:
+            return []
+
+    crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
+    for condition, deps in dependencies.items():
+        crate_deps += selects.with_or({_CONDITIONS[condition]: deps.values()})
+
+    return crate_deps
+
+def aliases(
+        normal = False,
+        normal_dev = False,
+        proc_macro = False,
+        proc_macro_dev = False,
+        build = False,
+        build_proc_macro = False,
+        package_name = None):
+    """Produces a map of Crate alias names to their original label
+
+    If no dependency kinds are specified, `normal` and `proc_macro` are used by default.
+    Setting any one flag will otherwise determine the contents of the returned dict.
+
+    Args:
+        normal (bool, optional): If True, normal dependencies are included in the
+            output list.
+        normal_dev (bool, optional): If True, normla dev dependencies will be
+            included in the output list..
+        proc_macro (bool, optional): If True, proc_macro dependencies are included
+            in the output list.
+        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
+            included in the output list.
+        build (bool, optional): If True, build dependencies are included
+            in the output list.
+        build_proc_macro (bool, optional): If True, build proc_macro dependencies are
+            included in the output list.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()` when unset.
+
+    Returns:
+        dict: The aliases of all associated packages
+    """
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Determine the relevant maps to use
+    all_aliases_maps = []
+    if normal:
+        all_aliases_maps.append(_NORMAL_ALIASES)
+    if normal_dev:
+        all_aliases_maps.append(_NORMAL_DEV_ALIASES)
+    if proc_macro:
+        all_aliases_maps.append(_PROC_MACRO_ALIASES)
+    if proc_macro_dev:
+        all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)
+    if build:
+        all_aliases_maps.append(_BUILD_ALIASES)
+    if build_proc_macro:
+        all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)
+
+    # Default to always using normal aliases
+    if not all_aliases_maps:
+        all_aliases_maps.append(_NORMAL_ALIASES)
+        all_aliases_maps.append(_PROC_MACRO_ALIASES)
+
+    aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)
+
+    if not aliases:
+        return dict()
+
+    common_items = aliases.pop(_COMMON_CONDITION, {}).items()
+
+    # If there are only common items in the dictionary, immediately return them
+    if not len(aliases.keys()) == 1:
+        return dict(common_items)
+
+    # Build a single select statement where each conditional has accounted for the
+    # common set of aliases.
+    crate_aliases = {"//conditions:default": common_items}
+    for condition, deps in aliases.items():
+        condition_triples = _CONDITIONS[condition]
+        if condition_triples in crate_aliases:
+            crate_aliases[condition_triples].update(deps)
+        else:
+            crate_aliases.update({_CONDITIONS[condition]: dict(deps.items() + common_items)})
+
+    return selects.with_or(crate_aliases)
+
+###############################################################################
+# WORKSPACE MEMBER DEPS AND ALIASES
+###############################################################################
+
+_NORMAL_DEPENDENCIES = {
+    "": {
+        _COMMON_CONDITION: {
+            "bindgen": "@rules_rust_bindgen__bindgen-0.60.1//:bindgen",
+            "libloading": "@rules_rust_bindgen__libloading-0.7.3//:libloading",
+        },
+    },
+}
+
+_NORMAL_ALIASES = {
+    "": {
+        _COMMON_CONDITION: {
+        },
+    },
+}
+
+_NORMAL_DEV_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_NORMAL_DEV_ALIASES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_ALIASES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEV_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEV_ALIASES = {
+    "": {
+    },
+}
+
+_BUILD_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_BUILD_ALIASES = {
+    "": {
+    },
+}
+
+_BUILD_PROC_MACRO_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_BUILD_PROC_MACRO_ALIASES = {
+    "": {
+    },
+}
+
+_CONDITIONS = {
+    "cfg(target_os = \"hermit\")": [],
+    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(windows)": ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc"],
+    "i686-pc-windows-gnu": [],
+    "x86_64-pc-windows-gnu": [],
+}
+
+###############################################################################
+
+def crate_repositories():
+    """A macro for defining repositories for all generated crates"""
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__aho-corasick-0.7.18",
+        sha256 = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/aho-corasick/0.7.18/download"],
+        strip_prefix = "aho-corasick-0.7.18",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.aho-corasick-0.7.18.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__atty-0.2.14",
+        sha256 = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/atty/0.2.14/download"],
+        strip_prefix = "atty-0.2.14",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.atty-0.2.14.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__autocfg-1.1.0",
+        sha256 = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/autocfg/1.1.0/download"],
+        strip_prefix = "autocfg-1.1.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.autocfg-1.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__bindgen-0.60.1",
+        sha256 = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/bindgen/0.60.1/download"],
+        strip_prefix = "bindgen-0.60.1",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.bindgen-0.60.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__bitflags-1.3.2",
+        sha256 = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/bitflags/1.3.2/download"],
+        strip_prefix = "bitflags-1.3.2",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.bitflags-1.3.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__cexpr-0.6.0",
+        sha256 = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/cexpr/0.6.0/download"],
+        strip_prefix = "cexpr-0.6.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.cexpr-0.6.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__cfg-if-1.0.0",
+        sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/cfg-if/1.0.0/download"],
+        strip_prefix = "cfg-if-1.0.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.cfg-if-1.0.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__clang-sys-1.3.3",
+        sha256 = "5a050e2153c5be08febd6734e29298e844fdb0fa21aeddd63b4eb7baa106c69b",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/clang-sys/1.3.3/download"],
+        strip_prefix = "clang-sys-1.3.3",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.clang-sys-1.3.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__clap-3.2.12",
+        sha256 = "ab8b79fe3946ceb4a0b1c080b4018992b8d27e9ff363644c1c9b6387c854614d",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/clap/3.2.12/download"],
+        strip_prefix = "clap-3.2.12",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.clap-3.2.12.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__clap_lex-0.2.4",
+        sha256 = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/clap_lex/0.2.4/download"],
+        strip_prefix = "clap_lex-0.2.4",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.clap_lex-0.2.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__either-1.7.0",
+        sha256 = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/either/1.7.0/download"],
+        strip_prefix = "either-1.7.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.either-1.7.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__env_logger-0.9.0",
+        sha256 = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/env_logger/0.9.0/download"],
+        strip_prefix = "env_logger-0.9.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.env_logger-0.9.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__glob-0.3.0",
+        sha256 = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/glob/0.3.0/download"],
+        strip_prefix = "glob-0.3.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.glob-0.3.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__hashbrown-0.12.3",
+        sha256 = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/hashbrown/0.12.3/download"],
+        strip_prefix = "hashbrown-0.12.3",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.hashbrown-0.12.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__hermit-abi-0.1.19",
+        sha256 = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/hermit-abi/0.1.19/download"],
+        strip_prefix = "hermit-abi-0.1.19",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.hermit-abi-0.1.19.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__humantime-2.1.0",
+        sha256 = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/humantime/2.1.0/download"],
+        strip_prefix = "humantime-2.1.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.humantime-2.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__indexmap-1.9.1",
+        sha256 = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/indexmap/1.9.1/download"],
+        strip_prefix = "indexmap-1.9.1",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.indexmap-1.9.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__lazy_static-1.4.0",
+        sha256 = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/lazy_static/1.4.0/download"],
+        strip_prefix = "lazy_static-1.4.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.lazy_static-1.4.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__lazycell-1.3.0",
+        sha256 = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/lazycell/1.3.0/download"],
+        strip_prefix = "lazycell-1.3.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.lazycell-1.3.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__libc-0.2.126",
+        sha256 = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/libc/0.2.126/download"],
+        strip_prefix = "libc-0.2.126",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.libc-0.2.126.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__libloading-0.7.3",
+        sha256 = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/libloading/0.7.3/download"],
+        strip_prefix = "libloading-0.7.3",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.libloading-0.7.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__log-0.4.17",
+        sha256 = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/log/0.4.17/download"],
+        strip_prefix = "log-0.4.17",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.log-0.4.17.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__memchr-2.5.0",
+        sha256 = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/memchr/2.5.0/download"],
+        strip_prefix = "memchr-2.5.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.memchr-2.5.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__minimal-lexical-0.2.1",
+        sha256 = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/minimal-lexical/0.2.1/download"],
+        strip_prefix = "minimal-lexical-0.2.1",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.minimal-lexical-0.2.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__nom-7.1.1",
+        sha256 = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/nom/7.1.1/download"],
+        strip_prefix = "nom-7.1.1",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.nom-7.1.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__os_str_bytes-6.2.0",
+        sha256 = "648001efe5d5c0102d8cea768e348da85d90af8ba91f0bea908f157951493cd4",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/os_str_bytes/6.2.0/download"],
+        strip_prefix = "os_str_bytes-6.2.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.os_str_bytes-6.2.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__peeking_take_while-0.1.2",
+        sha256 = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/peeking_take_while/0.1.2/download"],
+        strip_prefix = "peeking_take_while-0.1.2",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.peeking_take_while-0.1.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__proc-macro2-1.0.40",
+        sha256 = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/proc-macro2/1.0.40/download"],
+        strip_prefix = "proc-macro2-1.0.40",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.proc-macro2-1.0.40.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__quote-1.0.20",
+        sha256 = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/quote/1.0.20/download"],
+        strip_prefix = "quote-1.0.20",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.quote-1.0.20.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__regex-1.6.0",
+        sha256 = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/regex/1.6.0/download"],
+        strip_prefix = "regex-1.6.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.regex-1.6.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__regex-syntax-0.6.27",
+        sha256 = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/regex-syntax/0.6.27/download"],
+        strip_prefix = "regex-syntax-0.6.27",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.regex-syntax-0.6.27.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__rustc-hash-1.1.0",
+        sha256 = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/rustc-hash/1.1.0/download"],
+        strip_prefix = "rustc-hash-1.1.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.rustc-hash-1.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__shlex-1.1.0",
+        sha256 = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/shlex/1.1.0/download"],
+        strip_prefix = "shlex-1.1.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.shlex-1.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__strsim-0.10.0",
+        sha256 = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/strsim/0.10.0/download"],
+        strip_prefix = "strsim-0.10.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.strsim-0.10.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__termcolor-1.1.3",
+        sha256 = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/termcolor/1.1.3/download"],
+        strip_prefix = "termcolor-1.1.3",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.termcolor-1.1.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__textwrap-0.15.0",
+        sha256 = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/textwrap/0.15.0/download"],
+        strip_prefix = "textwrap-0.15.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.textwrap-0.15.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__unicode-ident-1.0.2",
+        sha256 = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unicode-ident/1.0.2/download"],
+        strip_prefix = "unicode-ident-1.0.2",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.unicode-ident-1.0.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__which-4.2.5",
+        sha256 = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/which/4.2.5/download"],
+        strip_prefix = "which-4.2.5",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.which-4.2.5.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__winapi-0.3.9",
+        sha256 = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi/0.3.9/download"],
+        strip_prefix = "winapi-0.3.9",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.winapi-0.3.9.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__winapi-i686-pc-windows-gnu-0.4.0",
+        sha256 = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download"],
+        strip_prefix = "winapi-i686-pc-windows-gnu-0.4.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__winapi-util-0.1.5",
+        sha256 = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi-util/0.1.5/download"],
+        strip_prefix = "winapi-util-0.1.5",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.winapi-util-0.1.5.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_bindgen__winapi-x86_64-pc-windows-gnu-0.4.0",
+        sha256 = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download"],
+        strip_prefix = "winapi-x86_64-pc-windows-gnu-0.4.0",
+        build_file = Label("@rules_rust//bindgen/3rdparty/crates:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel"),
+    )
diff --git a/third_party/rules_rust/bindgen/BUILD.bazel b/third_party/rules_rust/bindgen/BUILD.bazel
index 8c5426b..bb93162 100644
--- a/third_party/rules_rust/bindgen/BUILD.bazel
+++ b/third_party/rules_rust/bindgen/BUILD.bazel
@@ -3,23 +3,29 @@
 
 package(default_visibility = ["//visibility:public"])
 
-toolchain_type(name = "bindgen_toolchain")
-
-bzl_library(
-    name = "bzl_lib",
-    srcs = glob(["**/*.bzl"]) + ["//bindgen/raze:crates.bzl"],
-    deps = ["//rust:bzl_lib"],
+toolchain_type(
+    name = "toolchain_type",
 )
 
 alias(
-    name = "rules",
-    actual = ":bzl_lib",
-    deprecation = "Please use the `@rules_rust//bindgen:bzl_lib` target instead",
+    name = "bindgen_toolchain",
+    actual = "toolchain_type",
+    deprecation = "instead use `@rules_rust//bindgen:toolchain_type`",
+    tags = ["manual"],
+)
+
+bzl_library(
+    name = "bzl_lib",
+    srcs = glob(["**/*.bzl"]),
+    deps = [
+        "//bindgen/3rdparty:bzl_lib",
+        "//rust:bzl_lib",
+    ],
 )
 
 rust_bindgen_toolchain(
     name = "default_bindgen_toolchain_impl",
-    bindgen = "//bindgen/raze:cargo_bin_bindgen",
+    bindgen = "//bindgen/3rdparty:bindgen",
     clang = select({
         "//rust/platform:osx": "@bindgen_clang_osx//:clang",
         "//conditions:default": "@bindgen_clang_linux//:clang",
@@ -37,5 +43,5 @@
 toolchain(
     name = "default_bindgen_toolchain",
     toolchain = "default_bindgen_toolchain_impl",
-    toolchain_type = "//bindgen:bindgen_toolchain",
+    toolchain_type = "//bindgen:toolchain_type",
 )
diff --git a/third_party/rules_rust/bindgen/README.md b/third_party/rules_rust/bindgen/README.md
index cc0fcd2..a56d141 100644
--- a/third_party/rules_rust/bindgen/README.md
+++ b/third_party/rules_rust/bindgen/README.md
@@ -1,82 +1,8 @@
 # Rust Bindgen Rules
 
-<div class="toc">
-  <h2>Rules</h2>
-  <ul>
-    <li><a href="docs/index.md#rust_bindgen_toolchain">rust_bindgen_toolchain</a></li>
-    <li>rust_bindgen</li>
-    <li>rust_bindgen_library</li>
-  </ul>
-</div>
-
-## Overview
-
 These rules are for using [Bindgen][bindgen] to generate [Rust][rust] bindings to C (and some C++) libraries.
 
+See the `rules_rust` documentation for more info: https://bazelbuild.github.io/rules_rust/rust_bindgen.html
+
 [rust]: http://www.rust-lang.org/
 [bindgen]: https://github.com/rust-lang/rust-bindgen
-
-See the [bindgen example](../examples/ffi/rust_calling_c/simple/BUILD.bazel#L9) for a more complete example of use.
-
-### Setup
-
-To use the Rust bindgen rules, add the following to your `WORKSPACE` file to add the
-external repositories for the Rust bindgen toolchain (in addition to the [rust rules setup](..)):
-
-```python
-load("@rules_rust//bindgen:repositories.bzl", "rust_bindgen_repositories")
-
-rust_bindgen_repositories()
-```
-This makes the default toolchain defined in [`@rules_rust`](./BUILD) available.
-
-[raze]: https://github.com/google/cargo-raze
-
-It will load crate dependencies of bindgen that are generated using
-[cargo raze][raze] inside the rules_rust
-repository. However, using those dependencies might conflict with other uses
-of [cargo raze][raze]. If you need to change
-those dependencies, please see the [dedicated section below](#custom-deps).
-
-For additional information, see the [Bazel toolchains documentation](https://docs.bazel.build/versions/master/toolchains.html).
-
-## <a name="custom-deps">Customizing dependencies
-
-These rules depends on the [`bindgen`](https://crates.io/crates/bindgen) binary crate, and it 
-in turn depends on both a clang binary and the clang library. To obtain these dependencies,
-`rust_bindgen_repositories` imports bindgen and its dependencies using BUILD files generated with
-[`cargo raze`][raze], along with a tarball of clang.
-
-If you want to change the bindgen used, or use [`cargo raze`][raze] in a more
-complex scenario (with more dependencies), you must redefine those
-dependencies.
-
-To do this, once you've imported the needed dependencies (see our
-[Cargo.toml](./raze/Cargo.toml) file to see the default dependencies), you
-need to create your own toolchain. To do so you can create a BUILD
-file with your [`rust_bindgen_toolchain`](../docs/index.md#rust_bindgen_toolchain) definition, for example:
-
-```python
-load("@rules_rust//bindgen:bindgen.bzl", "rust_bindgen_toolchain")
-
-rust_bindgen_toolchain(
-    name = "bindgen-toolchain-impl",
-    bindgen = "//my/raze:cargo_bin_bindgen",
-    clang = "//my/clang:clang",
-    libclang = "//my/clang:libclang.so",
-    libstdcxx = "//my/cpp:libstdc++",
-)
-
-toolchain(
-    name = "bindgen-toolchain",
-    toolchain = "bindgen-toolchain-impl",
-    toolchain_type = "@rules_rust//bindgen:bindgen_toolchain",
-)
-```
-
-Now that you have your own toolchain, you need to register it by
-inserting the following statement in your `WORKSPACE` file:
-
-```python
-register_toolchains("//my/toolchains:bindgen-toolchain")
-```
diff --git a/third_party/rules_rust/bindgen/bindgen.bzl b/third_party/rules_rust/bindgen/bindgen.bzl
index a0e93d5..58288d8 100644
--- a/third_party/rules_rust/bindgen/bindgen.bzl
+++ b/third_party/rules_rust/bindgen/bindgen.bzl
@@ -77,7 +77,7 @@
     rust_library(
         name = name,
         srcs = [name + "__bindgen.rs"],
-        tags = tags + ["__bindgen"],
+        tags = tags + ["__bindgen", "noclippy"],
         deps = deps + [cc_lib],
         **kwargs
     )
@@ -92,7 +92,7 @@
     if header not in cc_header_list:
         fail("Header {} is not in {}'s transitive headers.".format(ctx.attr.header, cc_lib), "header")
 
-    toolchain = ctx.toolchains[Label("//bindgen:bindgen_toolchain")]
+    toolchain = ctx.toolchains[Label("//bindgen:toolchain_type")]
     bindgen_bin = toolchain.bindgen
     rustfmt_bin = toolchain.rustfmt or rust_toolchain.rustfmt
     clang_bin = toolchain.clang
@@ -187,14 +187,14 @@
             doc = "Flags to pass directly to the bindgen executable. See https://rust-lang.github.io/rust-bindgen/ for details.",
         ),
         "cc_lib": attr.label(
-            doc = "The cc_library that contains the .h file. This is used to find the transitive includes.",
+            doc = "The cc_library that contains the `.h` file. This is used to find the transitive includes.",
             providers = [CcInfo],
         ),
         "clang_flags": attr.string_list(
             doc = "Flags to pass directly to the clang executable.",
         ),
         "header": attr.label(
-            doc = "The .h file to generate bindings for.",
+            doc = "The `.h` file to generate bindings for.",
             allow_single_file = True,
         ),
         "rustfmt": attr.bool(
@@ -214,8 +214,8 @@
     outputs = {"out": "%{name}.rs"},
     fragments = ["cpp"],
     toolchains = [
-        str(Label("//bindgen:bindgen_toolchain")),
-        str(Label("//rust:toolchain")),
+        str(Label("//bindgen:toolchain_type")),
+        str(Label("//rust:toolchain_type")),
         "@bazel_tools//tools/cpp:toolchain_type",
     ],
     incompatible_use_toolchain_transition = True,
@@ -232,7 +232,34 @@
 
 rust_bindgen_toolchain = rule(
     _rust_bindgen_toolchain_impl,
-    doc = "The tools required for the `rust_bindgen` rule.",
+    doc = """\
+The tools required for the `rust_bindgen` rule.
+
+This rule depends on the [`bindgen`](https://crates.io/crates/bindgen) binary crate, and it 
+in turn depends on both a clang binary and the clang library. To obtain these dependencies,
+`rust_bindgen_dependencies` imports bindgen and its dependencies.
+
+```python
+load("@rules_rust//bindgen:bindgen.bzl", "rust_bindgen_toolchain")
+
+rust_bindgen_toolchain(
+    name = "bindgen_toolchain_impl",
+    bindgen = "//my/rust:bindgen",
+    clang = "//my/clang:clang",
+    libclang = "//my/clang:libclang.so",
+    libstdcxx = "//my/cpp:libstdc++",
+)
+
+toolchain(
+    name = "bindgen_toolchain",
+    toolchain = "bindgen_toolchain_impl",
+    toolchain_type = "@rules_rust//bindgen:toolchain_type",
+)
+```
+
+This toolchain will then need to be registered in the current `WORKSPACE`.
+For additional information, see the [Bazel toolchains documentation](https://docs.bazel.build/versions/master/toolchains.html).
+""",
     attrs = {
         "bindgen": attr.label(
             doc = "The label of a `bindgen` executable.",
diff --git a/third_party/rules_rust/bindgen/raze/BUILD.bazel b/third_party/rules_rust/bindgen/raze/BUILD.bazel
deleted file mode 100644
index fd7e1e5..0000000
--- a/third_party/rules_rust/bindgen/raze/BUILD.bazel
+++ /dev/null
@@ -1,48 +0,0 @@
-"""
-@generated
-cargo-raze generated Bazel file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-package(default_visibility = ["//visibility:public"])
-
-licenses([
-    "notice",  # See individual crates for specific licenses
-])
-
-# Aliased targets
-alias(
-    name = "bindgen",
-    actual = "@rules_rust_bindgen__bindgen__0_58_1//:bindgen",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "cargo_bin_bindgen",
-    actual = "@rules_rust_bindgen__bindgen__0_58_1//:cargo_bin_bindgen",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "libloading",
-    actual = "@rules_rust_bindgen__libloading__0_6_3//:libloading",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-# Export file for Stardoc support
-exports_files(
-    [
-        "crates.bzl",
-    ],
-    visibility = ["//visibility:public"],
-)
diff --git a/third_party/rules_rust/bindgen/raze/Cargo.lock b/third_party/rules_rust/bindgen/raze/Cargo.lock
deleted file mode 100644
index 542cee0..0000000
--- a/third_party/rules_rust/bindgen/raze/Cargo.lock
+++ /dev/null
@@ -1,354 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-version = 3
-
-[[package]]
-name = "aho-corasick"
-version = "0.7.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "ansi_term"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
-dependencies = [
- "winapi",
-]
-
-[[package]]
-name = "atty"
-version = "0.2.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
-dependencies = [
- "hermit-abi",
- "libc",
- "winapi",
-]
-
-[[package]]
-name = "bindgen"
-version = "0.58.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f8523b410d7187a43085e7e064416ea32ded16bd0a4e6fc025e21616d01258f"
-dependencies = [
- "bitflags",
- "cexpr",
- "clang-sys",
- "clap",
- "env_logger",
- "lazy_static",
- "lazycell",
- "log",
- "peeking_take_while",
- "proc-macro2",
- "quote",
- "regex",
- "rustc-hash",
- "shlex",
- "which",
-]
-
-[[package]]
-name = "bitflags"
-version = "1.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
-
-[[package]]
-name = "cexpr"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27"
-dependencies = [
- "nom",
-]
-
-[[package]]
-name = "cfg-if"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
-
-[[package]]
-name = "cfg-if"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-
-[[package]]
-name = "clang-sys"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "853eda514c284c2287f4bf20ae614f8781f40a81d32ecda6e91449304dfe077c"
-dependencies = [
- "glob",
- "libc",
- "libloading 0.7.0",
-]
-
-[[package]]
-name = "clap"
-version = "2.33.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
-dependencies = [
- "ansi_term",
- "atty",
- "bitflags",
- "strsim",
- "textwrap",
- "unicode-width",
- "vec_map",
-]
-
-[[package]]
-name = "env_logger"
-version = "0.8.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17392a012ea30ef05a610aa97dfb49496e71c9f676b27879922ea5bdf60d9d3f"
-dependencies = [
- "atty",
- "humantime",
- "log",
- "regex",
- "termcolor",
-]
-
-[[package]]
-name = "fake_rules_rust_bindgen_lib"
-version = "0.0.1"
-dependencies = [
- "bindgen",
- "libloading 0.6.3",
-]
-
-[[package]]
-name = "glob"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
-
-[[package]]
-name = "hermit-abi"
-version = "0.1.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "humantime"
-version = "2.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
-
-[[package]]
-name = "lazy_static"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-
-[[package]]
-name = "lazycell"
-version = "1.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
-
-[[package]]
-name = "libc"
-version = "0.2.94"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18794a8ad5b29321f790b55d93dfba91e125cb1a9edbd4f8e3150acc771c1a5e"
-
-[[package]]
-name = "libloading"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2443d8f0478b16759158b2f66d525991a05491138bc05814ef52a250148ef4f9"
-dependencies = [
- "cfg-if 0.1.10",
- "winapi",
-]
-
-[[package]]
-name = "libloading"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a"
-dependencies = [
- "cfg-if 1.0.0",
- "winapi",
-]
-
-[[package]]
-name = "log"
-version = "0.4.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
-dependencies = [
- "cfg-if 1.0.0",
-]
-
-[[package]]
-name = "memchr"
-version = "2.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc"
-
-[[package]]
-name = "nom"
-version = "5.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af"
-dependencies = [
- "memchr",
- "version_check",
-]
-
-[[package]]
-name = "peeking_take_while"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.26"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec"
-dependencies = [
- "unicode-xid",
-]
-
-[[package]]
-name = "quote"
-version = "1.0.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "regex"
-version = "1.5.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-syntax"
-version = "0.6.25"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
-
-[[package]]
-name = "rustc-hash"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
-
-[[package]]
-name = "shlex"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42a568c8f2cd051a4d283bd6eb0343ac214c1b0f1ac19f93e1175b2dee38c73d"
-
-[[package]]
-name = "strsim"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
-
-[[package]]
-name = "termcolor"
-version = "1.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
-dependencies = [
- "winapi-util",
-]
-
-[[package]]
-name = "textwrap"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
-dependencies = [
- "unicode-width",
-]
-
-[[package]]
-name = "unicode-width"
-version = "0.1.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
-
-[[package]]
-name = "unicode-xid"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
-
-[[package]]
-name = "vec_map"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
-
-[[package]]
-name = "version_check"
-version = "0.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
-
-[[package]]
-name = "which"
-version = "3.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "winapi"
-version = "0.3.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-dependencies = [
- "winapi-i686-pc-windows-gnu",
- "winapi-x86_64-pc-windows-gnu",
-]
-
-[[package]]
-name = "winapi-i686-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-
-[[package]]
-name = "winapi-util"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
-dependencies = [
- "winapi",
-]
-
-[[package]]
-name = "winapi-x86_64-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/third_party/rules_rust/bindgen/raze/Cargo.toml b/third_party/rules_rust/bindgen/raze/Cargo.toml
deleted file mode 100644
index 2d9129c..0000000
--- a/third_party/rules_rust/bindgen/raze/Cargo.toml
+++ /dev/null
@@ -1,33 +0,0 @@
-[package]
-name = "fake_rules_rust_bindgen_lib"
-version = "0.0.1"
-
-[lib]
-path = "fake_rules_rust_bindgen_lib.rs"
-
-[dependencies]
-bindgen = "0.58.1"
-libloading = "=0.6.3"
-
-[package.metadata.raze]
-genmode = "Remote"
-workspace_path = "//bindgen/raze"
-gen_workspace_prefix = "rules_rust_bindgen"
-rust_rules_workspace_name = "rules_rust"
-package_aliases_dir = "."
-default_gen_buildrs = false
-
-[package.metadata.raze.crates.bindgen.'0.58.1']
-gen_buildrs = true
-extra_aliased_targets = ["cargo_bin_bindgen"]
-
-[package.metadata.raze.crates.clang-sys.'1.0.0']
-gen_buildrs = true
-
-[package.metadata.raze.crates.libloading.'0.6.3']
-gen_buildrs = true
-
-[package.metadata.raze.crates.log.'0.4.11']
-additional_flags = [
-    "--cfg=atomic_cas",
-]
diff --git a/third_party/rules_rust/bindgen/raze/crates.bzl b/third_party/rules_rust/bindgen/raze/crates.bzl
deleted file mode 100644
index 7cda777..0000000
--- a/third_party/rules_rust/bindgen/raze/crates.bzl
+++ /dev/null
@@ -1,422 +0,0 @@
-"""
-@generated
-cargo-raze generated Bazel file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-load("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository")  # buildifier: disable=load
-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")  # buildifier: disable=load
-load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")  # buildifier: disable=load
-
-def rules_rust_bindgen_fetch_remote_crates():
-    """This function defines a collection of repos and should be called in a WORKSPACE file"""
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__aho_corasick__0_7_18",
-        url = "https://crates.io/api/v1/crates/aho-corasick/0.7.18/download",
-        type = "tar.gz",
-        sha256 = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f",
-        strip_prefix = "aho-corasick-0.7.18",
-        build_file = Label("//bindgen/raze/remote:BUILD.aho-corasick-0.7.18.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__ansi_term__0_11_0",
-        url = "https://crates.io/api/v1/crates/ansi_term/0.11.0/download",
-        type = "tar.gz",
-        sha256 = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b",
-        strip_prefix = "ansi_term-0.11.0",
-        build_file = Label("//bindgen/raze/remote:BUILD.ansi_term-0.11.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__atty__0_2_14",
-        url = "https://crates.io/api/v1/crates/atty/0.2.14/download",
-        type = "tar.gz",
-        sha256 = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8",
-        strip_prefix = "atty-0.2.14",
-        build_file = Label("//bindgen/raze/remote:BUILD.atty-0.2.14.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__bindgen__0_58_1",
-        url = "https://crates.io/api/v1/crates/bindgen/0.58.1/download",
-        type = "tar.gz",
-        sha256 = "0f8523b410d7187a43085e7e064416ea32ded16bd0a4e6fc025e21616d01258f",
-        strip_prefix = "bindgen-0.58.1",
-        build_file = Label("//bindgen/raze/remote:BUILD.bindgen-0.58.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__bitflags__1_2_1",
-        url = "https://crates.io/api/v1/crates/bitflags/1.2.1/download",
-        type = "tar.gz",
-        sha256 = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693",
-        strip_prefix = "bitflags-1.2.1",
-        build_file = Label("//bindgen/raze/remote:BUILD.bitflags-1.2.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__cexpr__0_4_0",
-        url = "https://crates.io/api/v1/crates/cexpr/0.4.0/download",
-        type = "tar.gz",
-        sha256 = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27",
-        strip_prefix = "cexpr-0.4.0",
-        build_file = Label("//bindgen/raze/remote:BUILD.cexpr-0.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__cfg_if__0_1_10",
-        url = "https://crates.io/api/v1/crates/cfg-if/0.1.10/download",
-        type = "tar.gz",
-        sha256 = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822",
-        strip_prefix = "cfg-if-0.1.10",
-        build_file = Label("//bindgen/raze/remote:BUILD.cfg-if-0.1.10.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__cfg_if__1_0_0",
-        url = "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
-        type = "tar.gz",
-        sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd",
-        strip_prefix = "cfg-if-1.0.0",
-        build_file = Label("//bindgen/raze/remote:BUILD.cfg-if-1.0.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__clang_sys__1_2_0",
-        url = "https://crates.io/api/v1/crates/clang-sys/1.2.0/download",
-        type = "tar.gz",
-        sha256 = "853eda514c284c2287f4bf20ae614f8781f40a81d32ecda6e91449304dfe077c",
-        strip_prefix = "clang-sys-1.2.0",
-        build_file = Label("//bindgen/raze/remote:BUILD.clang-sys-1.2.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__clap__2_33_3",
-        url = "https://crates.io/api/v1/crates/clap/2.33.3/download",
-        type = "tar.gz",
-        sha256 = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002",
-        strip_prefix = "clap-2.33.3",
-        build_file = Label("//bindgen/raze/remote:BUILD.clap-2.33.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__env_logger__0_8_3",
-        url = "https://crates.io/api/v1/crates/env_logger/0.8.3/download",
-        type = "tar.gz",
-        sha256 = "17392a012ea30ef05a610aa97dfb49496e71c9f676b27879922ea5bdf60d9d3f",
-        strip_prefix = "env_logger-0.8.3",
-        build_file = Label("//bindgen/raze/remote:BUILD.env_logger-0.8.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__glob__0_3_0",
-        url = "https://crates.io/api/v1/crates/glob/0.3.0/download",
-        type = "tar.gz",
-        sha256 = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574",
-        strip_prefix = "glob-0.3.0",
-        build_file = Label("//bindgen/raze/remote:BUILD.glob-0.3.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__hermit_abi__0_1_18",
-        url = "https://crates.io/api/v1/crates/hermit-abi/0.1.18/download",
-        type = "tar.gz",
-        sha256 = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c",
-        strip_prefix = "hermit-abi-0.1.18",
-        build_file = Label("//bindgen/raze/remote:BUILD.hermit-abi-0.1.18.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__humantime__2_1_0",
-        url = "https://crates.io/api/v1/crates/humantime/2.1.0/download",
-        type = "tar.gz",
-        sha256 = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4",
-        strip_prefix = "humantime-2.1.0",
-        build_file = Label("//bindgen/raze/remote:BUILD.humantime-2.1.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__lazy_static__1_4_0",
-        url = "https://crates.io/api/v1/crates/lazy_static/1.4.0/download",
-        type = "tar.gz",
-        sha256 = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646",
-        strip_prefix = "lazy_static-1.4.0",
-        build_file = Label("//bindgen/raze/remote:BUILD.lazy_static-1.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__lazycell__1_3_0",
-        url = "https://crates.io/api/v1/crates/lazycell/1.3.0/download",
-        type = "tar.gz",
-        sha256 = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55",
-        strip_prefix = "lazycell-1.3.0",
-        build_file = Label("//bindgen/raze/remote:BUILD.lazycell-1.3.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__libc__0_2_94",
-        url = "https://crates.io/api/v1/crates/libc/0.2.94/download",
-        type = "tar.gz",
-        sha256 = "18794a8ad5b29321f790b55d93dfba91e125cb1a9edbd4f8e3150acc771c1a5e",
-        strip_prefix = "libc-0.2.94",
-        build_file = Label("//bindgen/raze/remote:BUILD.libc-0.2.94.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__libloading__0_6_3",
-        url = "https://crates.io/api/v1/crates/libloading/0.6.3/download",
-        type = "tar.gz",
-        sha256 = "2443d8f0478b16759158b2f66d525991a05491138bc05814ef52a250148ef4f9",
-        strip_prefix = "libloading-0.6.3",
-        build_file = Label("//bindgen/raze/remote:BUILD.libloading-0.6.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__libloading__0_7_0",
-        url = "https://crates.io/api/v1/crates/libloading/0.7.0/download",
-        type = "tar.gz",
-        sha256 = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a",
-        strip_prefix = "libloading-0.7.0",
-        build_file = Label("//bindgen/raze/remote:BUILD.libloading-0.7.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__log__0_4_14",
-        url = "https://crates.io/api/v1/crates/log/0.4.14/download",
-        type = "tar.gz",
-        sha256 = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710",
-        strip_prefix = "log-0.4.14",
-        build_file = Label("//bindgen/raze/remote:BUILD.log-0.4.14.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__memchr__2_4_0",
-        url = "https://crates.io/api/v1/crates/memchr/2.4.0/download",
-        type = "tar.gz",
-        sha256 = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc",
-        strip_prefix = "memchr-2.4.0",
-        build_file = Label("//bindgen/raze/remote:BUILD.memchr-2.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__nom__5_1_2",
-        url = "https://crates.io/api/v1/crates/nom/5.1.2/download",
-        type = "tar.gz",
-        sha256 = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af",
-        strip_prefix = "nom-5.1.2",
-        build_file = Label("//bindgen/raze/remote:BUILD.nom-5.1.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__peeking_take_while__0_1_2",
-        url = "https://crates.io/api/v1/crates/peeking_take_while/0.1.2/download",
-        type = "tar.gz",
-        sha256 = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099",
-        strip_prefix = "peeking_take_while-0.1.2",
-        build_file = Label("//bindgen/raze/remote:BUILD.peeking_take_while-0.1.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__proc_macro2__1_0_26",
-        url = "https://crates.io/api/v1/crates/proc-macro2/1.0.26/download",
-        type = "tar.gz",
-        sha256 = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec",
-        strip_prefix = "proc-macro2-1.0.26",
-        build_file = Label("//bindgen/raze/remote:BUILD.proc-macro2-1.0.26.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__quote__1_0_9",
-        url = "https://crates.io/api/v1/crates/quote/1.0.9/download",
-        type = "tar.gz",
-        sha256 = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7",
-        strip_prefix = "quote-1.0.9",
-        build_file = Label("//bindgen/raze/remote:BUILD.quote-1.0.9.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__regex__1_5_4",
-        url = "https://crates.io/api/v1/crates/regex/1.5.4/download",
-        type = "tar.gz",
-        sha256 = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461",
-        strip_prefix = "regex-1.5.4",
-        build_file = Label("//bindgen/raze/remote:BUILD.regex-1.5.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__regex_syntax__0_6_25",
-        url = "https://crates.io/api/v1/crates/regex-syntax/0.6.25/download",
-        type = "tar.gz",
-        sha256 = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b",
-        strip_prefix = "regex-syntax-0.6.25",
-        build_file = Label("//bindgen/raze/remote:BUILD.regex-syntax-0.6.25.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__rustc_hash__1_1_0",
-        url = "https://crates.io/api/v1/crates/rustc-hash/1.1.0/download",
-        type = "tar.gz",
-        sha256 = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2",
-        strip_prefix = "rustc-hash-1.1.0",
-        build_file = Label("//bindgen/raze/remote:BUILD.rustc-hash-1.1.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__shlex__1_0_0",
-        url = "https://crates.io/api/v1/crates/shlex/1.0.0/download",
-        type = "tar.gz",
-        sha256 = "42a568c8f2cd051a4d283bd6eb0343ac214c1b0f1ac19f93e1175b2dee38c73d",
-        strip_prefix = "shlex-1.0.0",
-        build_file = Label("//bindgen/raze/remote:BUILD.shlex-1.0.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__strsim__0_8_0",
-        url = "https://crates.io/api/v1/crates/strsim/0.8.0/download",
-        type = "tar.gz",
-        sha256 = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a",
-        strip_prefix = "strsim-0.8.0",
-        build_file = Label("//bindgen/raze/remote:BUILD.strsim-0.8.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__termcolor__1_1_2",
-        url = "https://crates.io/api/v1/crates/termcolor/1.1.2/download",
-        type = "tar.gz",
-        sha256 = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4",
-        strip_prefix = "termcolor-1.1.2",
-        build_file = Label("//bindgen/raze/remote:BUILD.termcolor-1.1.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__textwrap__0_11_0",
-        url = "https://crates.io/api/v1/crates/textwrap/0.11.0/download",
-        type = "tar.gz",
-        sha256 = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060",
-        strip_prefix = "textwrap-0.11.0",
-        build_file = Label("//bindgen/raze/remote:BUILD.textwrap-0.11.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__unicode_width__0_1_8",
-        url = "https://crates.io/api/v1/crates/unicode-width/0.1.8/download",
-        type = "tar.gz",
-        sha256 = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3",
-        strip_prefix = "unicode-width-0.1.8",
-        build_file = Label("//bindgen/raze/remote:BUILD.unicode-width-0.1.8.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__unicode_xid__0_2_2",
-        url = "https://crates.io/api/v1/crates/unicode-xid/0.2.2/download",
-        type = "tar.gz",
-        sha256 = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3",
-        strip_prefix = "unicode-xid-0.2.2",
-        build_file = Label("//bindgen/raze/remote:BUILD.unicode-xid-0.2.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__vec_map__0_8_2",
-        url = "https://crates.io/api/v1/crates/vec_map/0.8.2/download",
-        type = "tar.gz",
-        sha256 = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191",
-        strip_prefix = "vec_map-0.8.2",
-        build_file = Label("//bindgen/raze/remote:BUILD.vec_map-0.8.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__version_check__0_9_3",
-        url = "https://crates.io/api/v1/crates/version_check/0.9.3/download",
-        type = "tar.gz",
-        sha256 = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe",
-        strip_prefix = "version_check-0.9.3",
-        build_file = Label("//bindgen/raze/remote:BUILD.version_check-0.9.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__which__3_1_1",
-        url = "https://crates.io/api/v1/crates/which/3.1.1/download",
-        type = "tar.gz",
-        sha256 = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724",
-        strip_prefix = "which-3.1.1",
-        build_file = Label("//bindgen/raze/remote:BUILD.which-3.1.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__winapi__0_3_9",
-        url = "https://crates.io/api/v1/crates/winapi/0.3.9/download",
-        type = "tar.gz",
-        sha256 = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419",
-        strip_prefix = "winapi-0.3.9",
-        build_file = Label("//bindgen/raze/remote:BUILD.winapi-0.3.9.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__winapi_i686_pc_windows_gnu__0_4_0",
-        url = "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
-        type = "tar.gz",
-        sha256 = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6",
-        strip_prefix = "winapi-i686-pc-windows-gnu-0.4.0",
-        build_file = Label("//bindgen/raze/remote:BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__winapi_util__0_1_5",
-        url = "https://crates.io/api/v1/crates/winapi-util/0.1.5/download",
-        type = "tar.gz",
-        sha256 = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178",
-        strip_prefix = "winapi-util-0.1.5",
-        build_file = Label("//bindgen/raze/remote:BUILD.winapi-util-0.1.5.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_bindgen__winapi_x86_64_pc_windows_gnu__0_4_0",
-        url = "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
-        type = "tar.gz",
-        sha256 = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f",
-        strip_prefix = "winapi-x86_64-pc-windows-gnu-0.4.0",
-        build_file = Label("//bindgen/raze/remote:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel"),
-    )
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.aho-corasick-0.7.18.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.aho-corasick-0.7.18.bazel
deleted file mode 100644
index f1f73b7..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.aho-corasick-0.7.18.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "aho_corasick",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.7.18",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_bindgen__memchr__2_4_0//:memchr",
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.ansi_term-0.11.0.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.ansi_term-0.11.0.bazel
deleted file mode 100644
index 9a688a3..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.ansi_term-0.11.0.bazel
+++ /dev/null
@@ -1,66 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "colours" with type "example" omitted
-
-rust_library(
-    name = "ansi_term",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.11.0",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(target_os = "windows")
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_bindgen__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.atty-0.2.14.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.atty-0.2.14.bazel
deleted file mode 100644
index 6ccea85..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.atty-0.2.14.bazel
+++ /dev/null
@@ -1,89 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "atty" with type "example" omitted
-
-rust_library(
-    name = "atty",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.14",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_bindgen__libc__0_2_94//:libc",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_bindgen__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.bindgen-0.58.1.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.bindgen-0.58.1.bazel
deleted file mode 100644
index 38fc5b1..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.bindgen-0.58.1.bazel
+++ /dev/null
@@ -1,163 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # BSD-3-Clause from expression "BSD-3-Clause"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "bindgen_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "clap",
-        "default",
-        "env_logger",
-        "log",
-        "logging",
-        "runtime",
-        "which",
-        "which-rustfmt",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.58.1",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@rules_rust_bindgen__clang_sys__1_2_0//:clang_sys",
-    ],
-)
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_bindgen",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "clap",
-        "default",
-        "env_logger",
-        "log",
-        "logging",
-        "runtime",
-        "which",
-        "which-rustfmt",
-    ],
-    crate_root = "src/main.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.58.1",
-    # buildifier: leave-alone
-    deps = [
-        ":bindgen",
-        ":bindgen_build_script",
-        "@rules_rust_bindgen__bitflags__1_2_1//:bitflags",
-        "@rules_rust_bindgen__cexpr__0_4_0//:cexpr",
-        "@rules_rust_bindgen__clang_sys__1_2_0//:clang_sys",
-        "@rules_rust_bindgen__clap__2_33_3//:clap",
-        "@rules_rust_bindgen__env_logger__0_8_3//:env_logger",
-        "@rules_rust_bindgen__lazy_static__1_4_0//:lazy_static",
-        "@rules_rust_bindgen__lazycell__1_3_0//:lazycell",
-        "@rules_rust_bindgen__log__0_4_14//:log",
-        "@rules_rust_bindgen__peeking_take_while__0_1_2//:peeking_take_while",
-        "@rules_rust_bindgen__proc_macro2__1_0_26//:proc_macro2",
-        "@rules_rust_bindgen__quote__1_0_9//:quote",
-        "@rules_rust_bindgen__regex__1_5_4//:regex",
-        "@rules_rust_bindgen__rustc_hash__1_1_0//:rustc_hash",
-        "@rules_rust_bindgen__shlex__1_0_0//:shlex",
-        "@rules_rust_bindgen__which__3_1_1//:which",
-    ],
-)
-
-rust_library(
-    name = "bindgen",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "clap",
-        "default",
-        "env_logger",
-        "log",
-        "logging",
-        "runtime",
-        "which",
-        "which-rustfmt",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.58.1",
-    # buildifier: leave-alone
-    deps = [
-        ":bindgen_build_script",
-        "@rules_rust_bindgen__bitflags__1_2_1//:bitflags",
-        "@rules_rust_bindgen__cexpr__0_4_0//:cexpr",
-        "@rules_rust_bindgen__clang_sys__1_2_0//:clang_sys",
-        "@rules_rust_bindgen__clap__2_33_3//:clap",
-        "@rules_rust_bindgen__env_logger__0_8_3//:env_logger",
-        "@rules_rust_bindgen__lazy_static__1_4_0//:lazy_static",
-        "@rules_rust_bindgen__lazycell__1_3_0//:lazycell",
-        "@rules_rust_bindgen__log__0_4_14//:log",
-        "@rules_rust_bindgen__peeking_take_while__0_1_2//:peeking_take_while",
-        "@rules_rust_bindgen__proc_macro2__1_0_26//:proc_macro2",
-        "@rules_rust_bindgen__quote__1_0_9//:quote",
-        "@rules_rust_bindgen__regex__1_5_4//:regex",
-        "@rules_rust_bindgen__rustc_hash__1_1_0//:rustc_hash",
-        "@rules_rust_bindgen__shlex__1_0_0//:shlex",
-        "@rules_rust_bindgen__which__3_1_1//:which",
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.bitflags-1.2.1.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.bitflags-1.2.1.bazel
deleted file mode 100644
index ee5df63..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.bitflags-1.2.1.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "bitflags",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.2.1",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.cexpr-0.4.0.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.cexpr-0.4.0.bazel
deleted file mode 100644
index d2f0fb5..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.cexpr-0.4.0.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "cexpr",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_bindgen__nom__5_1_2//:nom",
-    ],
-)
-
-# Unsupported target "clang" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.cfg-if-0.1.10.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.cfg-if-0.1.10.bazel
deleted file mode 100644
index 0d5ec5b..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.cfg-if-0.1.10.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "cfg_if",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.10",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "xcrate" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.cfg-if-1.0.0.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.cfg-if-1.0.0.bazel
deleted file mode 100644
index 9f57c52..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.cfg-if-1.0.0.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "cfg_if",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "xcrate" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.clang-sys-1.2.0.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.clang-sys-1.2.0.bazel
deleted file mode 100644
index 2c29ee0..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.clang-sys-1.2.0.bazel
+++ /dev/null
@@ -1,110 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "clang_sys_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "clang_3_5",
-        "clang_3_6",
-        "clang_3_7",
-        "clang_3_8",
-        "clang_3_9",
-        "clang_4_0",
-        "clang_5_0",
-        "clang_6_0",
-        "libloading",
-        "runtime",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    links = "clang",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.2.0",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@rules_rust_bindgen__glob__0_3_0//:glob",
-    ],
-)
-
-rust_library(
-    name = "clang_sys",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "clang_3_5",
-        "clang_3_6",
-        "clang_3_7",
-        "clang_3_8",
-        "clang_3_9",
-        "clang_4_0",
-        "clang_5_0",
-        "clang_6_0",
-        "libloading",
-        "runtime",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.2.0",
-    # buildifier: leave-alone
-    deps = [
-        ":clang_sys_build_script",
-        "@rules_rust_bindgen__glob__0_3_0//:glob",
-        "@rules_rust_bindgen__libc__0_2_94//:libc",
-        "@rules_rust_bindgen__libloading__0_7_0//:libloading",
-    ],
-)
-
-# Unsupported target "lib" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.clap-2.33.3.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.clap-2.33.3.bazel
deleted file mode 100644
index 7a970d7..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.clap-2.33.3.bazel
+++ /dev/null
@@ -1,93 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "clap",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-        "ansi_term",
-        "atty",
-        "color",
-        "default",
-        "strsim",
-        "suggestions",
-        "vec_map",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.33.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_bindgen__atty__0_2_14//:atty",
-        "@rules_rust_bindgen__bitflags__1_2_1//:bitflags",
-        "@rules_rust_bindgen__strsim__0_8_0//:strsim",
-        "@rules_rust_bindgen__textwrap__0_11_0//:textwrap",
-        "@rules_rust_bindgen__unicode_width__0_1_8//:unicode_width",
-        "@rules_rust_bindgen__vec_map__0_8_2//:vec_map",
-    ] + selects.with_or({
-        # cfg(not(windows))
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:wasm32-unknown-unknown",
-            "@rules_rust//rust/platform:wasm32-wasi",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_bindgen__ansi_term__0_11_0//:ansi_term",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.env_logger-0.8.3.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.env_logger-0.8.3.bazel
deleted file mode 100644
index 6cdc461..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.env_logger-0.8.3.bazel
+++ /dev/null
@@ -1,71 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "env_logger",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "atty",
-        "default",
-        "humantime",
-        "regex",
-        "termcolor",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.8.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_bindgen__atty__0_2_14//:atty",
-        "@rules_rust_bindgen__humantime__2_1_0//:humantime",
-        "@rules_rust_bindgen__log__0_4_14//:log",
-        "@rules_rust_bindgen__regex__1_5_4//:regex",
-        "@rules_rust_bindgen__termcolor__1_1_2//:termcolor",
-    ],
-)
-
-# Unsupported target "init-twice-retains-filter" with type "test" omitted
-
-# Unsupported target "log-in-log" with type "test" omitted
-
-# Unsupported target "log_tls_dtors" with type "test" omitted
-
-# Unsupported target "regexp_filter" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.glob-0.3.0.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.glob-0.3.0.bazel
deleted file mode 100644
index 93a10df..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.glob-0.3.0.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "glob",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "glob-std" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.hermit-abi-0.1.18.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.hermit-abi-0.1.18.bazel
deleted file mode 100644
index 211d229..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.hermit-abi-0.1.18.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "hermit_abi",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.18",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_bindgen__libc__0_2_94//:libc",
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.humantime-2.1.0.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.humantime-2.1.0.bazel
deleted file mode 100644
index de730f2..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.humantime-2.1.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "datetime_format" with type "bench" omitted
-
-# Unsupported target "datetime_parse" with type "bench" omitted
-
-rust_library(
-    name = "humantime",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.1.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.lazy_static-1.4.0.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.lazy_static-1.4.0.bazel
deleted file mode 100644
index a90e095..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.lazy_static-1.4.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "lazy_static",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.4.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "no_std" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.lazycell-1.3.0.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.lazycell-1.3.0.bazel
deleted file mode 100644
index 5971cb4..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.lazycell-1.3.0.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "lazycell",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.3.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.libc-0.2.94.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.libc-0.2.94.bazel
deleted file mode 100644
index 2ca1b9e..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.libc-0.2.94.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "libc",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.94",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "const_fn" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.libloading-0.6.3.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.libloading-0.6.3.bazel
deleted file mode 100644
index 47b6906..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.libloading-0.6.3.bazel
+++ /dev/null
@@ -1,157 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # ISC from expression "ISC"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "libloading_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.3",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-rust_library(
-    name = "libloading",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.3",
-    # buildifier: leave-alone
-    deps = [
-        ":libloading_build_script",
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_bindgen__cfg_if__0_1_10//:cfg_if",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_bindgen__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-# Unsupported target "constants" with type "test" omitted
-
-# Unsupported target "functions" with type "test" omitted
-
-# Unsupported target "library_filename" with type "test" omitted
-
-# Unsupported target "markers" with type "test" omitted
-
-# Unsupported target "windows" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.libloading-0.7.0.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.libloading-0.7.0.bazel
deleted file mode 100644
index 5612156..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.libloading-0.7.0.bazel
+++ /dev/null
@@ -1,97 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # ISC from expression "ISC"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "libloading",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.7.0",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_bindgen__cfg_if__1_0_0//:cfg_if",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_bindgen__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-# Unsupported target "constants" with type "test" omitted
-
-# Unsupported target "functions" with type "test" omitted
-
-# Unsupported target "library_filename" with type "test" omitted
-
-# Unsupported target "markers" with type "test" omitted
-
-# Unsupported target "windows" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.log-0.4.14.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.log-0.4.14.bazel
deleted file mode 100644
index fc3a7e2..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.log-0.4.14.bazel
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "value" with type "bench" omitted
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "log",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-        "--cfg=atomic_cas",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.14",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_bindgen__cfg_if__1_0_0//:cfg_if",
-    ],
-)
-
-# Unsupported target "filters" with type "test" omitted
-
-# Unsupported target "macros" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.memchr-2.4.0.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.memchr-2.4.0.bazel
deleted file mode 100644
index bf5b58d..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.memchr-2.4.0.bazel
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "memchr",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-        "use_std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.4.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.nom-5.1.2.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.nom-5.1.2.bazel
deleted file mode 100644
index dbcdd50..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.nom-5.1.2.bazel
+++ /dev/null
@@ -1,112 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "arithmetic" with type "bench" omitted
-
-# Unsupported target "http" with type "bench" omitted
-
-# Unsupported target "ini" with type "bench" omitted
-
-# Unsupported target "ini_complete" with type "bench" omitted
-
-# Unsupported target "ini_str" with type "bench" omitted
-
-# Unsupported target "json" with type "bench" omitted
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-# Unsupported target "json" with type "example" omitted
-
-# Unsupported target "s_expression" with type "example" omitted
-
-# Unsupported target "string" with type "example" omitted
-
-rust_library(
-    name = "nom",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "alloc",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "5.1.2",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_bindgen__memchr__2_4_0//:memchr",
-    ],
-)
-
-# Unsupported target "arithmetic" with type "test" omitted
-
-# Unsupported target "arithmetic_ast" with type "test" omitted
-
-# Unsupported target "blockbuf-arithmetic" with type "test" omitted
-
-# Unsupported target "css" with type "test" omitted
-
-# Unsupported target "custom_errors" with type "test" omitted
-
-# Unsupported target "escaped" with type "test" omitted
-
-# Unsupported target "float" with type "test" omitted
-
-# Unsupported target "inference" with type "test" omitted
-
-# Unsupported target "ini" with type "test" omitted
-
-# Unsupported target "ini_str" with type "test" omitted
-
-# Unsupported target "issues" with type "test" omitted
-
-# Unsupported target "json" with type "test" omitted
-
-# Unsupported target "mp4" with type "test" omitted
-
-# Unsupported target "multiline" with type "test" omitted
-
-# Unsupported target "named_args" with type "test" omitted
-
-# Unsupported target "overflow" with type "test" omitted
-
-# Unsupported target "reborrow_fold" with type "test" omitted
-
-# Unsupported target "test1" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.peeking_take_while-0.1.2.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.peeking_take_while-0.1.2.bazel
deleted file mode 100644
index 78249fd..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.peeking_take_while-0.1.2.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "peeking_take_while",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.2",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.proc-macro2-1.0.26.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.proc-macro2-1.0.26.bazel
deleted file mode 100644
index d0858e0..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.proc-macro2-1.0.26.bazel
+++ /dev/null
@@ -1,66 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "proc_macro2",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.26",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_bindgen__unicode_xid__0_2_2//:unicode_xid",
-    ],
-)
-
-# Unsupported target "comments" with type "test" omitted
-
-# Unsupported target "features" with type "test" omitted
-
-# Unsupported target "marker" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
-
-# Unsupported target "test_fmt" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.quote-1.0.9.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.quote-1.0.9.bazel
deleted file mode 100644
index a1b8dc2..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.quote-1.0.9.bazel
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "quote",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.9",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_bindgen__proc_macro2__1_0_26//:proc_macro2",
-    ],
-)
-
-# Unsupported target "compiletest" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.regex-1.5.4.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.regex-1.5.4.bazel
deleted file mode 100644
index 4eddae8..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.regex-1.5.4.bazel
+++ /dev/null
@@ -1,102 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "shootout-regex-dna" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-bytes" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-cheat" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-replace" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-single" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-single-cheat" with type "example" omitted
-
-rust_library(
-    name = "regex",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "aho-corasick",
-        "memchr",
-        "perf",
-        "perf-cache",
-        "perf-dfa",
-        "perf-inline",
-        "perf-literal",
-        "std",
-        "unicode",
-        "unicode-age",
-        "unicode-bool",
-        "unicode-case",
-        "unicode-gencat",
-        "unicode-perl",
-        "unicode-script",
-        "unicode-segment",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.5.4",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_bindgen__aho_corasick__0_7_18//:aho_corasick",
-        "@rules_rust_bindgen__memchr__2_4_0//:memchr",
-        "@rules_rust_bindgen__regex_syntax__0_6_25//:regex_syntax",
-    ],
-)
-
-# Unsupported target "backtrack" with type "test" omitted
-
-# Unsupported target "backtrack-bytes" with type "test" omitted
-
-# Unsupported target "backtrack-utf8bytes" with type "test" omitted
-
-# Unsupported target "crates-regex" with type "test" omitted
-
-# Unsupported target "default" with type "test" omitted
-
-# Unsupported target "default-bytes" with type "test" omitted
-
-# Unsupported target "nfa" with type "test" omitted
-
-# Unsupported target "nfa-bytes" with type "test" omitted
-
-# Unsupported target "nfa-utf8bytes" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.regex-syntax-0.6.25.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.regex-syntax-0.6.25.bazel
deleted file mode 100644
index b185ef3..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.regex-syntax-0.6.25.bazel
+++ /dev/null
@@ -1,63 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "bench" with type "bench" omitted
-
-rust_library(
-    name = "regex_syntax",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "unicode",
-        "unicode-age",
-        "unicode-bool",
-        "unicode-case",
-        "unicode-gencat",
-        "unicode-perl",
-        "unicode-script",
-        "unicode-segment",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.25",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.rustc-hash-1.1.0.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.rustc-hash-1.1.0.bazel
deleted file mode 100644
index e751942..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.rustc-hash-1.1.0.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "rustc_hash",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.1.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.shlex-1.0.0.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.shlex-1.0.0.bazel
deleted file mode 100644
index 3b11348..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.shlex-1.0.0.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "shlex",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.strsim-0.8.0.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.strsim-0.8.0.bazel
deleted file mode 100644
index a1becf3..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.strsim-0.8.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "benches" with type "bench" omitted
-
-rust_library(
-    name = "strsim",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.8.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "lib" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.termcolor-1.1.2.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.termcolor-1.1.2.bazel
deleted file mode 100644
index ff23f3f..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.termcolor-1.1.2.bazel
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "termcolor",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.1.2",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_bindgen__winapi_util__0_1_5//:winapi_util",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.textwrap-0.11.0.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.textwrap-0.11.0.bazel
deleted file mode 100644
index 541cff5..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.textwrap-0.11.0.bazel
+++ /dev/null
@@ -1,62 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "linear" with type "bench" omitted
-
-# Unsupported target "layout" with type "example" omitted
-
-# Unsupported target "termwidth" with type "example" omitted
-
-rust_library(
-    name = "textwrap",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.11.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_bindgen__unicode_width__0_1_8//:unicode_width",
-    ],
-)
-
-# Unsupported target "version-numbers" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.unicode-width-0.1.8.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.unicode-width-0.1.8.bazel
deleted file mode 100644
index ee3ab94..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.unicode-width-0.1.8.bazel
+++ /dev/null
@@ -1,54 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "unicode_width",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.8",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.unicode-xid-0.2.2.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.unicode-xid-0.2.2.bazel
deleted file mode 100644
index bd9e2a7..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.unicode-xid-0.2.2.bazel
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "xid" with type "bench" omitted
-
-rust_library(
-    name = "unicode_xid",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.2",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "exhaustive_tests" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.vec_map-0.8.2.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.vec_map-0.8.2.bazel
deleted file mode 100644
index 031dc5e..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.vec_map-0.8.2.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "vec_map",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.8.2",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.version_check-0.9.3.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.version_check-0.9.3.bazel
deleted file mode 100644
index 74a457d..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.version_check-0.9.3.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "version_check",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.9.3",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.which-3.1.1.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.which-3.1.1.bazel
deleted file mode 100644
index 15a73c6..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.which-3.1.1.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "which",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "3.1.1",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_bindgen__libc__0_2_94//:libc",
-    ],
-)
-
-# Unsupported target "basic" with type "test" omitted
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.winapi-0.3.9.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.winapi-0.3.9.bazel
deleted file mode 100644
index 6fa8b8c..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.winapi-0.3.9.bazel
+++ /dev/null
@@ -1,67 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "winapi",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "consoleapi",
-        "errhandlingapi",
-        "fileapi",
-        "libloaderapi",
-        "minwinbase",
-        "minwindef",
-        "processenv",
-        "std",
-        "winbase",
-        "wincon",
-        "winerror",
-        "winnt",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.9",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
deleted file mode 100644
index 7de7c44..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "winapi_i686_pc_windows_gnu",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.winapi-util-0.1.5.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.winapi-util-0.1.5.bazel
deleted file mode 100644
index 00689f0..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.winapi-util-0.1.5.bazel
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "winapi_util",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.5",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_bindgen__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/bindgen/raze/remote/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
deleted file mode 100644
index 747aabe..0000000
--- a/third_party/rules_rust/bindgen/raze/remote/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "winapi_x86_64_pc_windows_gnu",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/bindgen/repositories.bzl b/third_party/rules_rust/bindgen/repositories.bzl
index f8614ba..3e09d3d 100644
--- a/third_party/rules_rust/bindgen/repositories.bzl
+++ b/third_party/rules_rust/bindgen/repositories.bzl
@@ -12,21 +12,39 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# buildifier: disable=module-docstring
+"""Dependencies for the Rust `bindgen` rules"""
+
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
-load("//bindgen/raze:crates.bzl", "rules_rust_bindgen_fetch_remote_crates")
+load("//bindgen/3rdparty/crates:defs.bzl", "crate_repositories")
 
 # buildifier: disable=unnamed-macro
-def rust_bindgen_repositories():
+def rust_bindgen_dependencies():
     """Declare dependencies needed for bindgen."""
 
     # nb. The bindgen rule itself should work on any platform.
     _bindgen_clang_repositories()
 
-    rules_rust_bindgen_fetch_remote_crates()
+    crate_repositories()
 
-    native.register_toolchains(str(Label("//bindgen:default_bindgen_toolchain")))
+# buildifier: disable=unnamed-macro
+def rust_bindgen_register_toolchains(register_toolchains = True):
+    """Registers the default toolchains for the `rules_rust` [bindgen][bg] rules.
+
+    [bg]: https://rust-lang.github.io/rust-bindgen/
+
+    Args:
+        register_toolchains (bool, optional): Whether or not to register toolchains.
+    """
+    if register_toolchains:
+        native.register_toolchains(str(Label("//bindgen:default_bindgen_toolchain")))
+
+# buildifier: disable=unnamed-macro
+def rust_bindgen_repositories():
+    """**Deprecated**: Instead use [rust_bindgen_dependencies](#rust_bindgen_dependencies) and [rust_bindgen_register_toolchains](#rust_bindgen_register_toolchains)"""
+
+    rust_bindgen_dependencies()
+    rust_bindgen_register_toolchains()
 
 _COMMON_WORKSPACE = """\
 workspace(name = "{}")
diff --git a/third_party/rules_rust/cargo/BUILD.bazel b/third_party/rules_rust/cargo/BUILD.bazel
index 8772c31..6c21ee1 100644
--- a/third_party/rules_rust/cargo/BUILD.bazel
+++ b/third_party/rules_rust/cargo/BUILD.bazel
@@ -7,9 +7,3 @@
     srcs = glob(["**/*.bzl"]),
     deps = ["//cargo/private:bzl_lib"],
 )
-
-alias(
-    name = "rules",
-    actual = ":bzl_lib",
-    deprecation = "Please use the `@rules_rust//cargo:bzl_lib` target instead",
-)
diff --git a/third_party/rules_rust/cargo/bootstrap/BUILD.bazel b/third_party/rules_rust/cargo/bootstrap/BUILD.bazel
index a607f60..4d804cc 100644
--- a/third_party/rules_rust/cargo/bootstrap/BUILD.bazel
+++ b/third_party/rules_rust/cargo/bootstrap/BUILD.bazel
@@ -14,6 +14,7 @@
     srcs = [
         "bootstrap_installer.rs",
     ],
+    edition = "2018",
     rustc_env = {
         "RULES_RUST_CARGO_BOOTSTRAP_BINARY": "$(rootpath bootstrap_installer.rs)",
     },
diff --git a/third_party/rules_rust/cargo/cargo_bootstrap.bzl b/third_party/rules_rust/cargo/cargo_bootstrap.bzl
index bbe35c0..509ea47 100644
--- a/third_party/rules_rust/cargo/cargo_bootstrap.bzl
+++ b/third_party/rules_rust/cargo/cargo_bootstrap.bzl
@@ -1,7 +1,8 @@
 """The `cargo_bootstrap` rule is used for bootstrapping cargo binaries in a repository rule."""
 
-load("//cargo/private:cargo_utils.bzl", "get_host_triple", "get_rust_tools")
+load("//cargo/private:cargo_utils.bzl", "get_rust_tools")
 load("//rust:defs.bzl", "rust_common")
+load("//rust/platform:triple.bzl", "get_host_triple")
 
 _CARGO_BUILD_MODES = [
     "release",
@@ -203,7 +204,7 @@
 
     # In addition to platform specific environment variables, a common set (indicated by `*`) will always
     # be gathered.
-    environment = dict(_collect_environ(repository_ctx, "*").items() + _collect_environ(repository_ctx, host_triple.triple).items())
+    environment = dict(_collect_environ(repository_ctx, "*").items() + _collect_environ(repository_ctx, host_triple.str).items())
 
     built_binary = cargo_bootstrap(
         repository_ctx = repository_ctx,
@@ -272,7 +273,7 @@
                 "`{triple}` (eg. 'x86_64-unknown-linux-gnu'), `{arch}` (eg. 'aarch64'), `{vendor}` (eg. 'unknown'), " +
                 "`{system}` (eg. 'darwin'), and `{tool}` (eg. 'rustc.exe') will be replaced in the string if present."
             ),
-            default = "@rust_{system}_{arch}//:bin/{tool}",
+            default = "@rust_{system}_{arch}__{triple}_tools//:bin/{tool}",
         ),
         "rust_toolchain_repository_template": attr.string(
             doc = "**Deprecated**: Please use `rust_toolchain_cargo_template` and `rust_toolchain_rustc_template`",
@@ -283,7 +284,7 @@
                 "`{triple}` (eg. 'x86_64-unknown-linux-gnu'), `{arch}` (eg. 'aarch64'), `{vendor}` (eg. 'unknown'), " +
                 "`{system}` (eg. 'darwin'), and `{tool}` (eg. 'rustc.exe') will be replaced in the string if present."
             ),
-            default = "@rust_{system}_{arch}//:bin/{tool}",
+            default = "@rust_{system}_{arch}__{triple}_tools//:bin/{tool}",
         ),
         "srcs": attr.label_list(
             doc = "Souce files of the crate to build. Passing source files here can be used to trigger rebuilds when changes are made",
diff --git a/third_party/rules_rust/cargo/cargo_build_script.bzl b/third_party/rules_rust/cargo/cargo_build_script.bzl
index 69450a2..87ee88e 100644
--- a/third_party/rules_rust/cargo/cargo_build_script.bzl
+++ b/third_party/rules_rust/cargo/cargo_build_script.bzl
@@ -1,15 +1,19 @@
 # buildifier: disable=module-docstring
-load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "C_COMPILE_ACTION_NAME")
+load("@bazel_skylib//lib:paths.bzl", "paths")
+load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "CPP_COMPILE_ACTION_NAME", "C_COMPILE_ACTION_NAME")
 load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain")
 load("//rust:defs.bzl", "rust_binary", "rust_common")
 
 # buildifier: disable=bzl-visibility
+load("//rust/private:providers.bzl", _DepInfo = "DepInfo")
+
+# buildifier: disable=bzl-visibility
 load("//rust/private:rustc.bzl", "BuildInfo", "get_compilation_mode_opts", "get_linker_and_args")
 
 # buildifier: disable=bzl-visibility
 load("//rust/private:utils.bzl", "dedent", "expand_dict_value_locations", "find_cc_toolchain", "find_toolchain", "name_to_crate_name")
 
-def get_cc_compile_env(cc_toolchain, feature_configuration):
+def get_cc_compile_args_and_env(cc_toolchain, feature_configuration):
     """Gather cc environment variables from the given `cc_toolchain`
 
     Args:
@@ -17,17 +21,49 @@
         feature_configuration (FeatureConfiguration): Class used to construct command lines from CROSSTOOL features.
 
     Returns:
-        dict: Returns environment variables to be set for given action.
+        tuple: A tuple of the following items:
+            - (sequence): A flattened C command line flags for given action.
+            - (sequence): A flattened CXX command line flags for given action.
+            - (dict): C environment variables to be set for given action.
     """
     compile_variables = cc_common.create_compile_variables(
         feature_configuration = feature_configuration,
         cc_toolchain = cc_toolchain,
     )
-    return cc_common.get_environment_variables(
+    cc_c_args = cc_common.get_memory_inefficient_command_line(
         feature_configuration = feature_configuration,
         action_name = C_COMPILE_ACTION_NAME,
         variables = compile_variables,
     )
+    cc_cxx_args = cc_common.get_memory_inefficient_command_line(
+        feature_configuration = feature_configuration,
+        action_name = CPP_COMPILE_ACTION_NAME,
+        variables = compile_variables,
+    )
+    cc_env = cc_common.get_environment_variables(
+        feature_configuration = feature_configuration,
+        action_name = C_COMPILE_ACTION_NAME,
+        variables = compile_variables,
+    )
+    return cc_c_args, cc_cxx_args, cc_env
+
+def _pwd_flags(args):
+    """Prefix execroot-relative paths of known arguments with ${pwd}.
+
+    Args:
+        args (list): List of tool arguments.
+
+    Returns:
+        list: The modified argument list.
+    """
+    res = []
+    for arg in args:
+        s, opt, path = arg.partition("--sysroot=")
+        if s == "" and not paths.is_absolute(path):
+            res.append("{}${{pwd}}/{}".format(opt, path))
+        else:
+            res.append(arg)
+    return res
 
 def _build_script_impl(ctx):
     """The implementation for the `_build_script_run` rule.
@@ -69,6 +105,7 @@
         "CARGO_MANIFEST_DIR": manifest_dir,
         "CARGO_PKG_NAME": pkg_name,
         "HOST": toolchain.exec_triple,
+        "NUM_JOBS": "1",
         "OPT_LEVEL": compilation_mode_opt_level,
         "RUSTC": toolchain.rustc.path,
         "TARGET": toolchain.target_flag_value,
@@ -96,10 +133,10 @@
     linker, link_args, linker_env = get_linker_and_args(ctx, ctx.attr, cc_toolchain, feature_configuration, None)
     env.update(**linker_env)
     env["LD"] = linker
-    env["LDFLAGS"] = " ".join(link_args)
+    env["LDFLAGS"] = " ".join(_pwd_flags(link_args))
 
     # MSVC requires INCLUDE to be set
-    cc_env = get_cc_compile_env(cc_toolchain, feature_configuration)
+    cc_c_args, cc_cxx_args, cc_env = get_cc_compile_args_and_env(cc_toolchain, feature_configuration)
     include = cc_env.get("INCLUDE")
     if include:
         env["INCLUDE"] = include
@@ -114,8 +151,12 @@
         ar_executable = cc_toolchain.ar_executable
         if ar_executable:
             env["AR"] = ar_executable
-        if cc_toolchain.sysroot:
-            env["SYSROOT"] = cc_toolchain.sysroot
+
+        # Populate CFLAGS and CXXFLAGS that cc-rs relies on when building from source, in particular
+        # to determine the deployment target when building for apple platforms (`macosx-version-min`
+        # for example, itself derived from the `macos_minimum_os` Bazel argument).
+        env["CFLAGS"] = " ".join(_pwd_flags(cc_c_args))
+        env["CXXFLAGS"] = " ".join(_pwd_flags(cc_cxx_args))
 
     # Inform build scripts of rustc flags
     # https://github.com/rust-lang/cargo/issues/9600
@@ -127,6 +168,9 @@
     for f in ctx.attr.crate_features:
         env["CARGO_FEATURE_" + f.upper().replace("-", "_")] = "1"
 
+    # Add environment variables from the Rust toolchain.
+    env.update(toolchain.env)
+
     env.update(expand_dict_value_locations(
         ctx,
         ctx.attr.build_script_env,
@@ -258,7 +302,7 @@
     },
     fragments = ["cpp"],
     toolchains = [
-        str(Label("//rust:toolchain")),
+        str(Label("//rust:toolchain_type")),
         "@bazel_tools//tools/cpp:toolchain_type",
     ],
     incompatible_use_toolchain_transition = True,
@@ -394,3 +438,61 @@
     if name.endswith("_build_script"):
         return name[:-len("_build_script")]
     return name
+
+def _cargo_dep_env_implementation(ctx):
+    empty_file = ctx.actions.declare_file(ctx.label.name + ".empty_file")
+    empty_dir = ctx.actions.declare_directory(ctx.label.name + ".empty_dir")
+    ctx.actions.write(
+        output = empty_file,
+        content = "",
+    )
+    ctx.actions.run(
+        outputs = [empty_dir],
+        executable = "true",
+    )
+    return [
+        DefaultInfo(files = depset(ctx.files.src)),
+        BuildInfo(
+            dep_env = empty_file,
+            flags = empty_file,
+            link_flags = empty_file,
+            link_search_paths = empty_file,
+            out_dir = empty_dir,
+            rustc_env = empty_file,
+        ),
+        _DepInfo(
+            dep_env = ctx.file.src,
+            direct_crates = depset(),
+            link_search_path_files = depset(),
+            transitive_build_infos = depset(),
+            transitive_crate_outputs = depset(),
+            transitive_crates = depset(),
+            transitive_noncrates = depset(),
+        ),
+    ]
+
+cargo_dep_env = rule(
+    implementation = _cargo_dep_env_implementation,
+    doc = (
+        "A rule for generating variables for dependent `cargo_build_script`s " +
+        "without a build script. This is useful for using Bazel rules instead " +
+        "of a build script, while also generating configuration information " +
+        "for build scripts which depend on this crate."
+    ),
+    attrs = {
+        "src": attr.label(
+            doc = dedent("""\
+                File containing additional environment variables to set for build scripts of direct dependencies.
+
+                This has the same effect as a `cargo_build_script` which prints
+                `cargo:VAR=VALUE` lines, but without requiring a build script.
+
+                This files should  contain a single variable per line, of format
+                `NAME=value`, and newlines may be included in a value by ending a
+                line with a trailing back-slash (`\\\\`).
+            """),
+            allow_single_file = True,
+            mandatory = True,
+        ),
+    },
+)
diff --git a/third_party/rules_rust/cargo/cargo_build_script_runner/BUILD.bazel b/third_party/rules_rust/cargo/cargo_build_script_runner/BUILD.bazel
index 11edd45..81e3256 100644
--- a/third_party/rules_rust/cargo/cargo_build_script_runner/BUILD.bazel
+++ b/third_party/rules_rust/cargo/cargo_build_script_runner/BUILD.bazel
@@ -3,16 +3,19 @@
 rust_library(
     name = "cargo_build_script_output_parser",
     srcs = ["lib.rs"],
+    edition = "2018",
 )
 
 rust_test(
     name = "test",
     crate = ":cargo_build_script_output_parser",
+    edition = "2018",
 )
 
 rust_binary(
     name = "cargo_build_script_runner",
     srcs = ["bin.rs"],
+    edition = "2018",
     visibility = ["//visibility:public"],
     deps = [":cargo_build_script_output_parser"],
 )
@@ -20,5 +23,6 @@
 rust_test(
     name = "bin_test",
     crate = ":cargo_build_script_runner",
+    edition = "2018",
     deps = [":cargo_build_script_runner"],
 )
diff --git a/third_party/rules_rust/cargo/cargo_build_script_runner/bin.rs b/third_party/rules_rust/cargo/cargo_build_script_runner/bin.rs
index 58f0363..9e40fef 100644
--- a/third_party/rules_rust/cargo/cargo_build_script_runner/bin.rs
+++ b/third_party/rules_rust/cargo/cargo_build_script_runner/bin.rs
@@ -72,9 +72,8 @@
                 if line.is_empty() {
                     continue;
                 }
-                let mut key_val = line.splitn(2, '=');
-                match (key_val.next(), key_val.next()) {
-                    (Some(key), Some(value)) => {
+                match line.split_once('=') {
+                    Some((key, value)) => {
                         command.env(key, value.replace("${pwd}", &exec_root.to_string_lossy()));
                     }
                     _ => {
@@ -89,14 +88,9 @@
         }
     }
 
-    for compiler_env_var in &["CC", "CXX"] {
-        if let Some(compiler_path) = env::var_os(compiler_env_var) {
-            let mut compiler_path = exec_root.join(compiler_path).into_os_string();
-            if let Some(sysroot_path) = env::var_os("SYSROOT") {
-                compiler_path.push(" --sysroot=");
-                compiler_path.push(&exec_root.join(sysroot_path));
-            }
-            command.env(compiler_env_var, compiler_path);
+    for tool_env_var in &["CC", "CXX", "LD"] {
+        if let Some(tool_path) = env::var_os(tool_env_var) {
+            command.env(tool_env_var, exec_root.join(tool_path));
         }
     }
 
@@ -111,10 +105,6 @@
         }
     }
 
-    if let Some(ld_path) = env::var_os("LD") {
-        command.env("LD", exec_root.join(ld_path));
-    }
-
     // replace env vars with a ${pwd} prefix with the exec_root
     for (key, value) in env::vars() {
         let exec_root_str = exec_root.to_str().expect("exec_root not in utf8");
@@ -264,10 +254,8 @@
 
     for line in stdout.lines() {
         if line.starts_with("target_") && line.contains('=') {
-            let mut parts = line.splitn(2, '=');
             // UNWRAP: Verified that line contains = and split into exactly 2 parts.
-            let key = parts.next().unwrap();
-            let value = parts.next().unwrap();
+            let (key, value) = line.split_once('=').unwrap();
             if value.starts_with('"') && value.ends_with('"') && value.len() >= 2 {
                 values
                     .entry(key)
diff --git a/third_party/rules_rust/cargo/private/cargo_utils.bzl b/third_party/rules_rust/cargo/private/cargo_utils.bzl
index d519576..ef8eb28 100644
--- a/third_party/rules_rust/cargo/private/cargo_utils.bzl
+++ b/third_party/rules_rust/cargo/private/cargo_utils.bzl
@@ -1,109 +1,7 @@
 """Utility functions for the cargo rules"""
 
-load("//rust/platform:triple.bzl", "triple")
 load("//rust/platform:triple_mappings.bzl", "system_to_binary_ext")
 
-_CPU_ARCH_ERROR_MSG = """\
-Command failed with exit code '{code}': {args}
-----------stdout:
-{stdout}
-----------stderr:
-{stderr}
-"""
-
-def _query_cpu_architecture(repository_ctx, expected_archs, is_windows = False):
-    """Detect the host CPU architecture
-
-    Args:
-        repository_ctx (repository_ctx): The repository rule's context object
-        expected_archs (list): A list of expected architecture strings
-        is_windows (bool, optional): If true, the cpu lookup will use the windows method (`wmic` vs `uname`)
-
-    Returns:
-        str: The host's CPU architecture
-    """
-    if is_windows:
-        arguments = ["wmic", "os", "get", "osarchitecture"]
-    else:
-        arguments = ["uname", "-m"]
-
-    result = repository_ctx.execute(arguments)
-
-    if result.return_code:
-        fail(_CPU_ARCH_ERROR_MSG.format(
-            code = result.return_code,
-            args = arguments,
-            stdout = result.stdout,
-            stderr = result.stderr,
-        ))
-
-    if is_windows:
-        # Example output:
-        # OSArchitecture
-        # 64-bit
-        lines = result.stdout.split("\n")
-        arch = lines[1].strip()
-
-        # Translate 64-bit to a compatible rust platform
-        # https://doc.rust-lang.org/nightly/rustc/platform-support.html
-        if arch == "64-bit":
-            arch = "x86_64"
-    else:
-        arch = result.stdout.strip("\n")
-
-        # Correct the arm architecture for macos
-        if "mac" in repository_ctx.os.name and arch == "arm64":
-            arch = "aarch64"
-
-    if not arch in expected_archs:
-        fail("{} is not a expected cpu architecture {}\n{}".format(
-            arch,
-            expected_archs,
-            result.stdout,
-        ))
-
-    return arch
-
-def get_host_triple(repository_ctx, abi = None):
-    """Query host information for the appropriate triples for the crate_universe resolver
-
-    Args:
-        repository_ctx (repository_ctx): The rule's repository_ctx
-        abi (str): Since there's no consistent way to check for ABI, this info
-            may be explicitly provided
-
-    Returns:
-        struct: A triple struct, see `@rules_rust//rust/platform:triple.bzl`
-    """
-
-    # Detect the host's cpu architecture
-
-    supported_architectures = {
-        "linux": ["aarch64", "x86_64"],
-        "macos": ["aarch64", "x86_64"],
-        "windows": ["x86_64"],
-    }
-
-    if "linux" in repository_ctx.os.name:
-        cpu = _query_cpu_architecture(repository_ctx, supported_architectures["linux"])
-        return triple("{}-unknown-linux-{}".format(
-            cpu,
-            abi or "gnu",
-        ))
-
-    if "mac" in repository_ctx.os.name:
-        cpu = _query_cpu_architecture(repository_ctx, supported_architectures["macos"])
-        return triple("{}-apple-darwin".format(cpu))
-
-    if "win" in repository_ctx.os.name:
-        cpu = _query_cpu_architecture(repository_ctx, supported_architectures["windows"], True)
-        return triple("{}-pc-windows-{}".format(
-            cpu,
-            abi or "msvc",
-        ))
-
-    fail("Unhandled host os: {}", repository_ctx.os.name)
-
 def _resolve_repository_template(
         template,
         abi = None,
@@ -168,7 +66,7 @@
     cargo_label = Label(_resolve_repository_template(
         template = cargo_template,
         version = version,
-        triple = host_triple.triple,
+        triple = host_triple.str,
         arch = host_triple.arch,
         vendor = host_triple.vendor,
         system = host_triple.system,
@@ -179,7 +77,7 @@
     rustc_label = Label(_resolve_repository_template(
         template = rustc_template,
         version = version,
-        triple = host_triple.triple,
+        triple = host_triple.str,
         arch = host_triple.arch,
         vendor = host_triple.vendor,
         system = host_triple.system,
diff --git a/third_party/rules_rust/crate_universe/.gitignore b/third_party/rules_rust/crate_universe/.gitignore
new file mode 100644
index 0000000..d192b14
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/.gitignore
@@ -0,0 +1 @@
+/private/bootstrap/
diff --git a/third_party/rules_rust/crate_universe/3rdparty/BUILD.bazel b/third_party/rules_rust/crate_universe/3rdparty/BUILD.bazel
index 1f0b8ee..bec71cd 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/BUILD.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/BUILD.bazel
@@ -1,20 +1,44 @@
-load("//crate_universe:crates.bzl", "crate_deps_target")
+load("//crate_universe/private:crate.bzl", "crate")
+load("//crate_universe/private:crates_vendor.bzl", "crates_vendor")
 
 package(default_visibility = ["//visibility:public"])
 
-crate_deps_target()
+exports_files([
+    "Cargo.Bazel.lock",
+    "cargo-bazel-lock.json",
+])
 
-filegroup(
-    name = "distro",
-    srcs = glob([
-        "*.bzl",
-        "*.bazel",
-    ]) + [
-        "//crate_universe/3rdparty/crates:srcs",
+crates_vendor(
+    name = "crates_vendor",
+    annotations = {
+        "libgit2-sys": [crate.annotation(
+            gen_build_script = False,
+            deps = ["@libgit2"],
+        )],
+        "libz-sys": [crate.annotation(
+            gen_build_script = False,
+            deps = ["@zlib"],
+        )],
+    },
+    cargo_lockfile = "@rules_rust//crate_universe/3rdparty:Cargo.Bazel.lock",
+    manifests = [
+        "@rules_rust//crate_universe:Cargo.toml",
+        "@rules_rust//crate_universe/tools/cross_installer:Cargo.toml",
+        "@rules_rust//crate_universe/tools/urls_generator:Cargo.toml",
     ],
+    mode = "remote",
+    # Short for 'crate universe index'. Keep this short to reduce the risk to
+    # bump into absolute path length issues on Windows. See:
+    # https://github.com/bazelbuild/rules_rust/issues/1120
+    repository_name = "cui",
+    tags = ["manual"],
+    vendor_path = "crates",
 )
 
 filegroup(
     name = "bzl_srcs",
-    srcs = glob(["*.bzl"]),
+    srcs = glob(["*.bzl"]) + [
+        "//crate_universe/3rdparty/crates:crates.bzl",
+        "//crate_universe/3rdparty/crates:defs.bzl",
+    ],
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/BUILD.libgit2.bazel b/third_party/rules_rust/crate_universe/3rdparty/BUILD.libgit2.bazel
index 031ee78..38124c5 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/BUILD.libgit2.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/BUILD.libgit2.bazel
@@ -179,18 +179,27 @@
 )
 
 cc_library(
+    name = "include",
+    hdrs = [":configure_features"] + glob(["include/**/*.h"]),
+    strip_include_prefix = "include",
+)
+
+cc_library(
     name = "git2",
-    srcs = glob(
+    srcs = [
+        "src/allocators/failalloc.c",
+        "src/allocators/stdalloc.c",
+        "src/allocators/win32_leakcheck.c",
+        # Use the CollisionDetection SHA1 implementation.
+        "src/hash/sha1/collisiondetect.c",
+        "src/hash/sha1/sha1dc/sha1.c",
+        "src/hash/sha1/sha1dc/ubc_check.c",
+    ] + glob(
         include = [
             "src/*.c",
-            "src/*.h",
-            "src/xdiff/*.h",
             "src/xdiff/*.c",
-            "src/transports/*.h",
             "src/transports/*.c",
-            "src/streams/*.h",
             "src/streams/*.c",
-            "src/hash/*.h",
             "src/hash/*.c",
         ],
         exclude = [
@@ -198,32 +207,33 @@
             "src/unix/**",
         ],
     ) + select({
-        "@platforms//os:windows": glob([
-            "src/win32/**/*.h",
-            "src/win32/**/*.c",
-        ]),
-        "//conditions:default": glob([
-            "src/unix/**/*.h",
-            "src/unix/**/*.c",
-        ]),
-    }) + [
-        "src/allocators/failalloc.c",
+        "@platforms//os:windows": glob(["src/win32/**/*.c"]),
+        "//conditions:default": glob(["src/unix/**/*.c"]),
+    }),
+    hdrs = [
         "src/allocators/failalloc.h",
-        "src/allocators/stdalloc.c",
         "src/allocators/stdalloc.h",
-        "src/allocators/win32_leakcheck.c",
         "src/allocators/win32_leakcheck.h",
         # Use the CollisionDetection SHA1 implementation.
         "src/hash/sha1/collisiondetect.h",
-        "src/hash/sha1/collisiondetect.c",
         "src/hash/sha1/sha1dc/sha1.h",
-        "src/hash/sha1/sha1dc/sha1.c",
         "src/hash/sha1/sha1dc/ubc_check.h",
-        "src/hash/sha1/sha1dc/ubc_check.c",
-    ],
-    hdrs = glob(["include/**/*.h"]) + [
-        ":configure_features",
-    ],
+    ] + glob(
+        include = [
+            "src/*.h",
+            "src/xdiff/*.h",
+            "src/transports/*.h",
+            "src/streams/*.h",
+            "src/hash/*.h",
+        ],
+        exclude = [
+            "src/win32/**",
+            "src/unix/**",
+        ],
+    ) + select({
+        "@platforms//os:windows": glob(["src/win32/**/*.h"]),
+        "//conditions:default": glob(["src/unix/**/*.h"]),
+    }),
     copts = select({
         "@platforms//os:linux": [
             "-fvisibility=hidden",
@@ -256,15 +266,12 @@
         ":windows": ["STRSAFE_NO_DEPRECATE"],
         "//conditions:default": [],
     }),
-    includes = [
-        "include",
-        "src",
-    ],
     linkstatic = True,
-    strip_include_prefix = "include",
+    strip_include_prefix = "src",
     visibility = ["//visibility:public"],
     deps = [
         ":http-parser",
+        ":include",
         ":pcre",
         "@zlib",
     ],
diff --git a/third_party/rules_rust/crate_universe/3rdparty/Cargo.Bazel.lock b/third_party/rules_rust/crate_universe/3rdparty/Cargo.Bazel.lock
new file mode 100644
index 0000000..c318546
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/Cargo.Bazel.lock
@@ -0,0 +1,1439 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block-buffer"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
+dependencies = [
+ "block-padding",
+ "byte-tools",
+ "byteorder",
+ "generic-array 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
+dependencies = [
+ "generic-array 0.14.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
+dependencies = [
+ "byte-tools",
+]
+
+[[package]]
+name = "bstr"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "byte-tools"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "camino"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "869119e97797867fd90f5e22af7d0bd274bd4635ebb9eb68c04f3f513ae6c412"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo-bazel"
+version = "0.4.0"
+dependencies = [
+ "anyhow",
+ "cargo-lock",
+ "cargo-platform",
+ "cargo_metadata",
+ "cargo_toml",
+ "cfg-expr",
+ "clap",
+ "crates-index",
+ "hex",
+ "maplit",
+ "normpath",
+ "pathdiff",
+ "regex",
+ "semver",
+ "serde",
+ "serde_json",
+ "sha2",
+ "spectral",
+ "tempfile",
+ "tera",
+ "textwrap",
+ "toml",
+]
+
+[[package]]
+name = "cargo-lock"
+version = "8.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c4c54d47a4532db3494ef7332c257ab57b02750daae3250d49e01ee55201ce8"
+dependencies = [
+ "semver",
+ "serde",
+ "toml",
+ "url",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "cargo_toml"
+version = "0.11.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5809dd3e6444651fd1cdd3dbec71eca438c439a0fcc8081674a14da0afe50185"
+dependencies = [
+ "serde",
+ "serde_derive",
+ "toml",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
+dependencies = [
+ "libc",
+ "num-integer",
+ "num-traits",
+ "winapi",
+]
+
+[[package]]
+name = "chrono-tz"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58549f1842da3080ce63002102d5bc954c7bc843d4f47818e642abdc36253552"
+dependencies = [
+ "chrono",
+ "chrono-tz-build",
+ "phf",
+]
+
+[[package]]
+name = "chrono-tz-build"
+version = "0.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db058d493fb2f65f41861bfed7e3fe6335264a9f0f92710cab5bdf01fef09069"
+dependencies = [
+ "parse-zoneinfo",
+ "phf",
+ "phf_codegen",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "190814073e85d238f31ff738fcb0bf6910cedeb73376c87cd69291028966fd83"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_derive",
+ "clap_lex",
+ "indexmap",
+ "once_cell",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crates-index"
+version = "0.18.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2519c91ad7a6e3250a64fb71162d2db1afe7bcf826a465f84d2052fd69639b7a"
+dependencies = [
+ "git2",
+ "hex",
+ "home",
+ "memchr",
+ "num_cpus",
+ "rustc-hash",
+ "semver",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "smartstring",
+]
+
+[[package]]
+name = "cross_installer"
+version = "0.1.0"
+dependencies = [
+ "clap",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5999502d32b9c48d492abe66392408144895020ec4709e549e840799f3bb74c0"
+dependencies = [
+ "generic-array 0.14.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "typenum",
+]
+
+[[package]]
+name = "deunicode"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690"
+
+[[package]]
+name = "digest"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
+dependencies = [
+ "generic-array 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
+dependencies = [
+ "block-buffer 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crypto-common",
+]
+
+[[package]]
+name = "fake-simd"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
+
+[[package]]
+name = "fastrand"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+dependencies = [
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "generic-array"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "git2"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0155506aab710a86160ddb504a480d2964d7ab5b9e62419be69e0032bc5931c"
+dependencies = [
+ "bitflags",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "url",
+]
+
+[[package]]
+name = "globset"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "fnv",
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "globwalk"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc"
+dependencies = [
+ "bitflags",
+ "ignore",
+ "walkdir",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
+
+[[package]]
+name = "heck"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "home"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "humansize"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02296996cb8796d7c6e3bc2d9211b7802812d36999a51bb754123ead7d37d026"
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d"
+dependencies = [
+ "crossbeam-utils",
+ "globset",
+ "lazy_static",
+ "log",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
+
+[[package]]
+name = "jobserver"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "libgit2-sys"
+version = "0.13.4+1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0fa6563431ede25f5cc7f6d803c6afbc1c5d3ad3d4925d12c882bf2b526f5d1"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "normpath"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04aaf5e9cb0fbf883cc0423159eacdf96a9878022084b35c462c428cab73bcaf"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "num"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e"
+dependencies = [
+ "num-bigint",
+ "num-complex",
+ "num-integer",
+ "num-iter",
+ "num-rational",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1"
+dependencies = [
+ "num-integer",
+ "num-traits",
+ "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656"
+dependencies = [
+ "num-traits",
+ "rustc-serialize",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e"
+dependencies = [
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+ "rustc-serialize",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
+
+[[package]]
+name = "opaque-debug"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
+
+[[package]]
+name = "os_str_bytes"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa"
+
+[[package]]
+name = "parse-zoneinfo"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "pest"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
+dependencies = [
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d"
+dependencies = [
+ "maplit",
+ "pest",
+ "sha-1",
+]
+
+[[package]]
+name = "phf"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+dependencies = [
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+dependencies = [
+ "phf_shared",
+ "rand 0.8.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+ "uncased",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+dependencies = [
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rdrand",
+ "winapi",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "regex"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc-serialize"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
+
+[[package]]
+name = "ryu"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.138"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.138"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
+dependencies = [
+ "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fake-simd",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slug"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373"
+dependencies = [
+ "deunicode",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
+
+[[package]]
+name = "smartstring"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29"
+dependencies = [
+ "autocfg",
+ "serde",
+ "static_assertions",
+ "version_check",
+]
+
+[[package]]
+name = "smawk"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
+
+[[package]]
+name = "spectral"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae3c15181f4b14e52eeaac3efaeec4d2764716ce9c86da0c934c3e318649c5ba"
+dependencies = [
+ "num",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.98"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "libc",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "tera"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c9783d6ff395ae80cf17ed9a25360e7ba37742a79fa8fddabb073c5c7c8856d"
+dependencies = [
+ "chrono",
+ "chrono-tz",
+ "globwalk",
+ "humansize",
+ "lazy_static",
+ "percent-encoding",
+ "pest",
+ "pest_derive",
+ "rand 0.8.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex",
+ "serde",
+ "serde_json",
+ "slug",
+ "unic-segment",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
+dependencies = [
+ "smawk",
+ "unicode-linebreak",
+ "unicode-width",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "toml"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "typenum"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89570599c4fe5585de2b388aab47e99f7fa4e9238a1399f707a02e356058141c"
+
+[[package]]
+name = "uncased"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09b01702b0fd0b3fadcf98e098780badda8742d4f4a7676615cad90e8ac73622"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unic-char-property"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
+dependencies = [
+ "unic-char-range",
+]
+
+[[package]]
+name = "unic-char-range"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
+
+[[package]]
+name = "unic-common"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
+
+[[package]]
+name = "unic-segment"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23"
+dependencies = [
+ "unic-ucd-segment",
+]
+
+[[package]]
+name = "unic-ucd-segment"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-version"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
+dependencies = [
+ "unic-common",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
+
+[[package]]
+name = "unicode-linebreak"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a52dcaab0c48d931f7cc8ef826fa51690a08e1ea55117ef26f89864f532383f"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
+
+[[package]]
+name = "url"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "urls_generator"
+version = "0.1.0"
+dependencies = [
+ "clap",
+ "hex",
+ "serde_json",
+ "sha2",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "walkdir"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+dependencies = [
+ "same-file",
+ "winapi",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.bazel b/third_party/rules_rust/crate_universe/3rdparty/cargo-bazel-lock.json
similarity index 100%
rename from third_party/rules_rust/bindgen/raze/remote/BUILD.bazel
rename to third_party/rules_rust/crate_universe/3rdparty/cargo-bazel-lock.json
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel
index 461d2ac..035b4cc 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -81,7 +87,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__memchr-2.4.1//:memchr",
+            "@cui__memchr-2.5.0//:memchr",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.anyhow-1.0.55.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.anyhow-1.0.55.bazel
deleted file mode 100644
index 862e2f4..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.anyhow-1.0.55.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "anyhow",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.55",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__anyhow-1.0.55//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "anyhow_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.55",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "anyhow_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.anyhow-1.0.58.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.anyhow-1.0.58.bazel
new file mode 100644
index 0000000..3642fb5
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.anyhow-1.0.58.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "anyhow",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.58",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__anyhow-1.0.58//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "anyhow_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.58",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "anyhow_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.atty-0.2.14.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.atty-0.2.14.bazel
index da6f0b6..9851947 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.atty-0.2.14.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.atty-0.2.14.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -87,9 +93,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -104,7 +112,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
 
             # Common Deps
         ],
@@ -114,7 +122,7 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-0.3.9//:winapi",
+            "@cui__winapi-0.3.9//:winapi",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.autocfg-1.1.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.autocfg-1.1.0.bazel
index bd2fcd9..5f651cb 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.autocfg-1.1.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.autocfg-1.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.bazel
index 4f6b676..b43f43c 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 package(default_visibility = ["//visibility:public"])
@@ -28,139 +29,157 @@
 # Workspace Member Dependencies
 alias(
     name = "anyhow",
-    actual = "@crate_index__anyhow-1.0.55//:anyhow",
+    actual = "@cui__anyhow-1.0.58//:anyhow",
     tags = ["manual"],
 )
 
 alias(
     name = "cargo-lock",
-    actual = "@crate_index__cargo-lock-7.0.1//:cargo_lock",
+    actual = "@cui__cargo-lock-8.0.2//:cargo_lock",
     tags = ["manual"],
 )
 
 alias(
     name = "cargo-platform",
-    actual = "@crate_index__cargo-platform-0.1.2//:cargo_platform",
+    actual = "@cui__cargo-platform-0.1.2//:cargo_platform",
     tags = ["manual"],
 )
 
 alias(
     name = "cargo_metadata",
-    actual = "@crate_index__cargo_metadata-0.14.2//:cargo_metadata",
+    actual = "@cui__cargo_metadata-0.14.2//:cargo_metadata",
     tags = ["manual"],
 )
 
 alias(
     name = "cargo_toml",
-    actual = "@crate_index__cargo_toml-0.11.4//:cargo_toml",
+    actual = "@cui__cargo_toml-0.11.5//:cargo_toml",
     tags = ["manual"],
 )
 
 alias(
     name = "cfg-expr",
-    actual = "@crate_index__cfg-expr-0.10.2//:cfg_expr",
+    actual = "@cui__cfg-expr-0.10.3//:cfg_expr",
     tags = ["manual"],
 )
 
 alias(
     name = "clap",
-    actual = "@crate_index__clap-3.1.5//:clap",
+    actual = "@cui__clap-3.2.8//:clap",
     tags = ["manual"],
 )
 
 alias(
     name = "crates-index",
-    actual = "@crate_index__crates-index-0.18.7//:crates_index",
+    actual = "@cui__crates-index-0.18.8//:crates_index",
     tags = ["manual"],
 )
 
 alias(
     name = "hex",
-    actual = "@crate_index__hex-0.4.3//:hex",
+    actual = "@cui__hex-0.4.3//:hex",
+    tags = ["manual"],
+)
+
+alias(
+    name = "maplit",
+    actual = "@cui__maplit-1.0.2//:maplit",
+    tags = ["manual"],
+)
+
+alias(
+    name = "normpath",
+    actual = "@cui__normpath-0.3.2//:normpath",
     tags = ["manual"],
 )
 
 alias(
     name = "pathdiff",
-    actual = "@crate_index__pathdiff-0.2.1//:pathdiff",
+    actual = "@cui__pathdiff-0.2.1//:pathdiff",
     tags = ["manual"],
 )
 
 alias(
     name = "regex",
-    actual = "@crate_index__regex-1.5.4//:regex",
+    actual = "@cui__regex-1.6.0//:regex",
     tags = ["manual"],
 )
 
 alias(
     name = "semver",
-    actual = "@crate_index__semver-1.0.6//:semver",
+    actual = "@cui__semver-1.0.12//:semver",
     tags = ["manual"],
 )
 
 alias(
     name = "serde",
-    actual = "@crate_index__serde-1.0.136//:serde",
+    actual = "@cui__serde-1.0.138//:serde",
     tags = ["manual"],
 )
 
 alias(
     name = "serde_json",
-    actual = "@crate_index__serde_json-1.0.79//:serde_json",
+    actual = "@cui__serde_json-1.0.82//:serde_json",
     tags = ["manual"],
 )
 
 alias(
     name = "sha2",
-    actual = "@crate_index__sha2-0.10.2//:sha2",
+    actual = "@cui__sha2-0.10.2//:sha2",
     tags = ["manual"],
 )
 
 alias(
     name = "spectral",
-    actual = "@crate_index__spectral-0.6.0//:spectral",
+    actual = "@cui__spectral-0.6.0//:spectral",
     tags = ["manual"],
 )
 
 alias(
     name = "tempfile",
-    actual = "@crate_index__tempfile-3.3.0//:tempfile",
+    actual = "@cui__tempfile-3.3.0//:tempfile",
     tags = ["manual"],
 )
 
 alias(
     name = "tera",
-    actual = "@crate_index__tera-1.15.0//:tera",
+    actual = "@cui__tera-1.16.0//:tera",
     tags = ["manual"],
 )
 
 alias(
     name = "textwrap",
-    actual = "@crate_index__textwrap-0.14.2//:textwrap",
+    actual = "@cui__textwrap-0.15.0//:textwrap",
     tags = ["manual"],
 )
 
 alias(
     name = "toml",
-    actual = "@crate_index__toml-0.5.8//:toml",
+    actual = "@cui__toml-0.5.9//:toml",
     tags = ["manual"],
 )
 
 # Binaries
 alias(
     name = "cargo-lock__cargo-lock",
-    actual = "@crate_index__cargo-lock-7.0.1//:cargo-lock__bin",
+    actual = "@cui__cargo-lock-8.0.2//:cargo-lock__bin",
     tags = ["manual"],
 )
 
 alias(
     name = "cc__gcc-shim",
-    actual = "@crate_index__cc-1.0.73//:gcc-shim__bin",
+    actual = "@cui__cc-1.0.73//:gcc-shim__bin",
+    tags = ["manual"],
+)
+
+alias(
+    name = "clap__stdio-fixture",
+    actual = "@cui__clap-3.2.8//:stdio-fixture__bin",
     tags = ["manual"],
 )
 
 alias(
     name = "phf_generator__gen_hash_test",
-    actual = "@crate_index__phf_generator-0.10.0//:gen_hash_test__bin",
+    actual = "@cui__phf_generator-0.10.0//:gen_hash_test__bin",
     tags = ["manual"],
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.bitflags-1.3.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.bitflags-1.3.2.bazel
index 6894746..030e572 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.bitflags-1.3.2.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.bitflags-1.3.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.block-buffer-0.10.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.block-buffer-0.10.2.bazel
index 5937127..e2b7c5c 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.block-buffer-0.10.2.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.block-buffer-0.10.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__generic-array-0.14.5//:generic_array",
+            "@cui__generic-array-0.14.5//:generic_array",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.block-buffer-0.7.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.block-buffer-0.7.3.bazel
index 1bb6977..8dbfce8 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.block-buffer-0.7.3.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.block-buffer-0.7.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,10 +85,10 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__block-padding-0.1.5//:block_padding",
-            "@crate_index__byte-tools-0.3.1//:byte_tools",
-            "@crate_index__byteorder-1.4.3//:byteorder",
-            "@crate_index__generic-array-0.12.4//:generic_array",
+            "@cui__block-padding-0.1.5//:block_padding",
+            "@cui__byte-tools-0.3.1//:byte_tools",
+            "@cui__byteorder-1.4.3//:byteorder",
+            "@cui__generic-array-0.12.4//:generic_array",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.block-padding-0.1.5.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.block-padding-0.1.5.bazel
index 57a82a0..4175a50 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.block-padding-0.1.5.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.block-padding-0.1.5.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__byte-tools-0.3.1//:byte_tools",
+            "@cui__byte-tools-0.3.1//:byte_tools",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.bstr-0.2.17.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.bstr-0.2.17.bazel
index 49bc9e9..44ac30a 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.bstr-0.2.17.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.bstr-0.2.17.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,7 +86,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__memchr-2.4.1//:memchr",
+            "@cui__memchr-2.5.0//:memchr",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.byte-tools-0.3.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.byte-tools-0.3.1.bazel
index c4f77ba..306f44e 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.byte-tools-0.3.1.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.byte-tools-0.3.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.byteorder-1.4.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.byteorder-1.4.3.bazel
index d08f7c4..1a6ec19 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.byteorder-1.4.3.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.byteorder-1.4.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.camino-1.0.7.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.camino-1.0.7.bazel
deleted file mode 100644
index 4a616b6..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.camino-1.0.7.bazel
+++ /dev/null
@@ -1,176 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "camino",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "serde",
-        "serde1",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.7",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__camino-1.0.7//:build_script_build",
-            "@crate_index__serde-1.0.136//:serde",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "camino_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "serde",
-        "serde1",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.7",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "camino_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.camino-1.0.9.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.camino-1.0.9.bazel
new file mode 100644
index 0000000..3548282
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.camino-1.0.9.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "camino",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "serde",
+        "serde1",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.9",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__camino-1.0.9//:build_script_build",
+            "@cui__serde-1.0.138//:serde",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "camino_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "serde",
+        "serde1",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.9",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "camino_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo-lock-7.0.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo-lock-7.0.1.bazel
deleted file mode 100644
index df635c5..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo-lock-7.0.1.bazel
+++ /dev/null
@@ -1,154 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0 OR MIT
-# ])
-
-rust_library(
-    name = "cargo_lock",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "7.0.1",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__semver-1.0.6//:semver",
-            "@crate_index__serde-1.0.136//:serde",
-            "@crate_index__toml-0.5.8//:toml",
-            "@crate_index__url-2.2.2//:url",
-        ],
-    }),
-)
-
-rust_binary(
-    name = "cargo-lock__bin",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/bin/cargo-lock/main.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "7.0.1",
-    deps = [
-        ":cargo_lock",
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__semver-1.0.6//:semver",
-            "@crate_index__serde-1.0.136//:serde",
-            "@crate_index__toml-0.5.8//:toml",
-            "@crate_index__url-2.2.2//:url",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo-lock-8.0.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo-lock-8.0.2.bazel
new file mode 100644
index 0000000..55735c5
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo-lock-8.0.2.bazel
@@ -0,0 +1,165 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "cargo_lock",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "8.0.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__semver-1.0.12//:semver",
+            "@cui__serde-1.0.138//:serde",
+            "@cui__toml-0.5.9//:toml",
+            "@cui__url-2.2.2//:url",
+        ],
+    }),
+)
+
+rust_binary(
+    name = "cargo-lock__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/bin/cargo-lock/main.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "8.0.2",
+    deps = [
+        ":cargo_lock",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__semver-1.0.12//:semver",
+            "@cui__serde-1.0.138//:serde",
+            "@cui__toml-0.5.9//:toml",
+            "@cui__url-2.2.2//:url",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo-platform-0.1.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo-platform-0.1.2.bazel
index 27eded2..d396d25 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo-platform-0.1.2.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo-platform-0.1.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__serde-1.0.136//:serde",
+            "@cui__serde-1.0.138//:serde",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo_metadata-0.14.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo_metadata-0.14.2.bazel
index 0255882..57b2668 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo_metadata-0.14.2.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo_metadata-0.14.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,11 +86,11 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__camino-1.0.7//:camino",
-            "@crate_index__cargo-platform-0.1.2//:cargo_platform",
-            "@crate_index__semver-1.0.6//:semver",
-            "@crate_index__serde-1.0.136//:serde",
-            "@crate_index__serde_json-1.0.79//:serde_json",
+            "@cui__camino-1.0.9//:camino",
+            "@cui__cargo-platform-0.1.2//:cargo_platform",
+            "@cui__semver-1.0.12//:semver",
+            "@cui__serde-1.0.138//:serde",
+            "@cui__serde_json-1.0.82//:serde_json",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo_toml-0.11.4.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo_toml-0.11.4.bazel
deleted file mode 100644
index 3a26aab..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo_toml-0.11.4.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0 OR MIT
-# ])
-
-rust_library(
-    name = "cargo_toml",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/cargo_toml.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__serde_derive-1.0.136//:serde_derive",
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.11.4",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__serde-1.0.136//:serde",
-            "@crate_index__toml-0.5.8//:toml",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo_toml-0.11.5.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo_toml-0.11.5.bazel
new file mode 100644
index 0000000..16dd657
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cargo_toml-0.11.5.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "cargo_toml",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/cargo_toml.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__serde_derive-1.0.138//:serde_derive",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.11.5",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__serde-1.0.138//:serde",
+            "@cui__toml-0.5.9//:toml",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cc-1.0.73.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cc-1.0.73.bazel
index 70e0555..53c9fd2 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cc-1.0.73.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cc-1.0.73.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -37,7 +38,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -68,10 +77,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -82,7 +88,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__jobserver-0.1.24//:jobserver",
+            "@cui__jobserver-0.1.24//:jobserver",
         ],
     }),
 )
@@ -100,7 +106,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -131,10 +145,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -146,7 +157,7 @@
         ":cc",
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__jobserver-0.1.24//:jobserver",
+            "@cui__jobserver-0.1.24//:jobserver",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cfg-expr-0.10.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cfg-expr-0.10.2.bazel
deleted file mode 100644
index 7f578b2..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cfg-expr-0.10.2.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "cfg_expr",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.10.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__smallvec-1.8.0//:smallvec",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cfg-expr-0.10.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cfg-expr-0.10.3.bazel
new file mode 100644
index 0000000..a727e47
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cfg-expr-0.10.3.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "cfg_expr",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.10.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__smallvec-1.9.0//:smallvec",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
index e4aab64..ef5b230 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.chrono-0.4.19.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.chrono-0.4.19.bazel
index a28b567..5fd0d78 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.chrono-0.4.19.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.chrono-0.4.19.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -88,17 +94,17 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-0.3.9//:winapi",
+            "@cui__winapi-0.3.9//:winapi",
 
             # Common Deps
-            "@crate_index__libc-0.2.119//:libc",
-            "@crate_index__num-integer-0.1.44//:num_integer",
-            "@crate_index__num-traits-0.2.14//:num_traits",
+            "@cui__libc-0.2.126//:libc",
+            "@cui__num-integer-0.1.45//:num_integer",
+            "@cui__num-traits-0.2.15//:num_traits",
         ],
         "//conditions:default": [
-            "@crate_index__libc-0.2.119//:libc",
-            "@crate_index__num-integer-0.1.44//:num_integer",
-            "@crate_index__num-traits-0.2.14//:num_traits",
+            "@cui__libc-0.2.126//:libc",
+            "@cui__num-integer-0.1.45//:num_integer",
+            "@cui__num-traits-0.2.15//:num_traits",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.chrono-tz-0.6.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.chrono-tz-0.6.1.bazel
index 9fe3d72..0dd3545 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.chrono-tz-0.6.1.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.chrono-tz-0.6.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -71,10 +80,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -85,9 +91,9 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__chrono-0.4.19//:chrono",
-            "@crate_index__chrono-tz-0.6.1//:build_script_build",
-            "@crate_index__phf-0.10.1//:phf",
+            "@cui__chrono-0.4.19//:chrono",
+            "@cui__chrono-tz-0.6.1//:build_script_build",
+            "@cui__phf-0.10.1//:phf",
         ],
     }),
 )
@@ -140,10 +146,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -159,7 +162,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__chrono-tz-build-0.0.2//:chrono_tz_build",
+            "@cui__chrono-tz-build-0.0.2//:chrono_tz_build",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.chrono-tz-build-0.0.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.chrono-tz-build-0.0.2.bazel
index ff11da9..e8bd1b3 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.chrono-tz-build-0.0.2.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.chrono-tz-build-0.0.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,9 +85,9 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__parse-zoneinfo-0.3.0//:parse_zoneinfo",
-            "@crate_index__phf-0.10.1//:phf",
-            "@crate_index__phf_codegen-0.10.0//:phf_codegen",
+            "@cui__parse-zoneinfo-0.3.0//:parse_zoneinfo",
+            "@cui__phf-0.10.1//:phf",
+            "@cui__phf_codegen-0.10.0//:phf_codegen",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.clap-3.1.5.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.clap-3.1.5.bazel
deleted file mode 100644
index 288246b..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.clap-3.1.5.bazel
+++ /dev/null
@@ -1,104 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "clap",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "atty",
-        "clap_derive",
-        "color",
-        "default",
-        "derive",
-        "env",
-        "lazy_static",
-        "std",
-        "strsim",
-        "suggestions",
-        "termcolor",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__clap_derive-3.1.4//:clap_derive",
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "3.1.5",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__atty-0.2.14//:atty",
-            "@crate_index__bitflags-1.3.2//:bitflags",
-            "@crate_index__indexmap-1.8.0//:indexmap",
-            "@crate_index__lazy_static-1.4.0//:lazy_static",
-            "@crate_index__os_str_bytes-6.0.0//:os_str_bytes",
-            "@crate_index__strsim-0.10.0//:strsim",
-            "@crate_index__termcolor-1.1.3//:termcolor",
-            "@crate_index__textwrap-0.15.0//:textwrap",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.clap-3.2.8.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.clap-3.2.8.bazel
new file mode 100644
index 0000000..fc08b1f
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.clap-3.2.8.bazel
@@ -0,0 +1,197 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "clap",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "atty",
+        "clap_derive",
+        "color",
+        "default",
+        "derive",
+        "env",
+        "once_cell",
+        "std",
+        "strsim",
+        "suggestions",
+        "termcolor",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__clap_derive-3.2.7//:clap_derive",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "3.2.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__atty-0.2.14//:atty",
+            "@cui__bitflags-1.3.2//:bitflags",
+            "@cui__clap_lex-0.2.4//:clap_lex",
+            "@cui__indexmap-1.9.1//:indexmap",
+            "@cui__once_cell-1.13.0//:once_cell",
+            "@cui__strsim-0.10.0//:strsim",
+            "@cui__termcolor-1.1.3//:termcolor",
+            "@cui__textwrap-0.15.0//:textwrap",
+        ],
+    }),
+)
+
+rust_binary(
+    name = "stdio-fixture__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "atty",
+        "clap_derive",
+        "color",
+        "default",
+        "derive",
+        "env",
+        "once_cell",
+        "std",
+        "strsim",
+        "suggestions",
+        "termcolor",
+    ],
+    crate_root = "src/bin/stdio-fixture.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__clap_derive-3.2.7//:clap_derive",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "3.2.8",
+    deps = [
+        ":clap",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__atty-0.2.14//:atty",
+            "@cui__bitflags-1.3.2//:bitflags",
+            "@cui__clap_lex-0.2.4//:clap_lex",
+            "@cui__indexmap-1.9.1//:indexmap",
+            "@cui__once_cell-1.13.0//:once_cell",
+            "@cui__strsim-0.10.0//:strsim",
+            "@cui__termcolor-1.1.3//:termcolor",
+            "@cui__textwrap-0.15.0//:textwrap",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.clap_derive-3.1.4.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.clap_derive-3.1.4.bazel
deleted file mode 100644
index be1c87c..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.clap_derive-3.1.4.bazel
+++ /dev/null
@@ -1,90 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_proc_macro",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_proc_macro(
-    name = "clap_derive",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "3.1.4",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__heck-0.4.0//:heck",
-            "@crate_index__proc-macro-error-1.0.4//:proc_macro_error",
-            "@crate_index__proc-macro2-1.0.36//:proc_macro2",
-            "@crate_index__quote-1.0.15//:quote",
-            "@crate_index__syn-1.0.86//:syn",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.clap_derive-3.2.7.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.clap_derive-3.2.7.bazel
new file mode 100644
index 0000000..6f36645
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.clap_derive-3.2.7.bazel
@@ -0,0 +1,96 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_proc_macro(
+    name = "clap_derive",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "3.2.7",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__heck-0.4.0//:heck",
+            "@cui__proc-macro-error-1.0.4//:proc_macro_error",
+            "@cui__proc-macro2-1.0.40//:proc_macro2",
+            "@cui__quote-1.0.20//:quote",
+            "@cui__syn-1.0.98//:syn",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.clap_lex-0.2.4.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.clap_lex-0.2.4.bazel
new file mode 100644
index 0000000..de4683d
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.clap_lex-0.2.4.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "clap_lex",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__os_str_bytes-6.1.0//:os_str_bytes",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cpufeatures-0.2.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cpufeatures-0.2.1.bazel
deleted file mode 100644
index c9f420c..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cpufeatures-0.2.1.bazel
+++ /dev/null
@@ -1,102 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "cpufeatures",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.1",
-    deps = [
-    ] + select_with_or({
-        # aarch64-apple-darwin
-        (
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-        ): [
-            # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
-
-            # Common Deps
-        ],
-        # cfg(all(target_arch = "aarch64", target_os = "linux"))
-        (
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-        ): [
-            # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
-
-            # Common Deps
-        ],
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cpufeatures-0.2.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cpufeatures-0.2.2.bazel
new file mode 100644
index 0000000..2696ab3
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.cpufeatures-0.2.2.bazel
@@ -0,0 +1,117 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "cpufeatures",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.2",
+    deps = [
+    ] + select_with_or({
+        # aarch64-apple-darwin
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+        ): [
+            # Target Deps
+            "@cui__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        # aarch64-linux-android
+        (
+            "@rules_rust//rust/platform:aarch64-linux-android",
+        ): [
+            # Target Deps
+            "@cui__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        # cfg(all(target_arch = "aarch64", target_os = "linux"))
+        (
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@cui__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crates-index-0.18.7.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crates-index-0.18.7.bazel
deleted file mode 100644
index 085bbd5..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crates-index-0.18.7.bazel
+++ /dev/null
@@ -1,95 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0
-# ])
-
-rust_library(
-    name = "crates_index",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__serde_derive-1.0.136//:serde_derive",
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.18.7",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__git2-0.14.1//:git2",
-            "@crate_index__hex-0.4.3//:hex",
-            "@crate_index__home-0.5.3//:home",
-            "@crate_index__memchr-2.4.1//:memchr",
-            "@crate_index__num_cpus-1.13.1//:num_cpus",
-            "@crate_index__rustc-hash-1.1.0//:rustc_hash",
-            "@crate_index__semver-1.0.6//:semver",
-            "@crate_index__serde-1.0.136//:serde",
-            "@crate_index__serde_json-1.0.79//:serde_json",
-            "@crate_index__smartstring-1.0.0//:smartstring",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crates-index-0.18.8.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crates-index-0.18.8.bazel
new file mode 100644
index 0000000..0b9ff0c
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crates-index-0.18.8.bazel
@@ -0,0 +1,101 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0
+# ])
+
+rust_library(
+    name = "crates_index",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__serde_derive-1.0.138//:serde_derive",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.18.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__git2-0.14.4//:git2",
+            "@cui__hex-0.4.3//:hex",
+            "@cui__home-0.5.3//:home",
+            "@cui__memchr-2.5.0//:memchr",
+            "@cui__num_cpus-1.13.1//:num_cpus",
+            "@cui__rustc-hash-1.1.0//:rustc_hash",
+            "@cui__semver-1.0.12//:semver",
+            "@cui__serde-1.0.138//:serde",
+            "@cui__serde_json-1.0.82//:serde_json",
+            "@cui__smartstring-1.0.1//:smartstring",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crossbeam-utils-0.8.10.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crossbeam-utils-0.8.10.bazel
new file mode 100644
index 0000000..e09993a
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crossbeam-utils-0.8.10.bazel
@@ -0,0 +1,182 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "crossbeam_utils",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "once_cell",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.8.10",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__cfg-if-1.0.0//:cfg_if",
+            "@cui__crossbeam-utils-0.8.10//:build_script_build",
+            "@cui__once_cell-1.13.0//:once_cell",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "crossbeam-utils_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "once_cell",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.8.10",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "crossbeam-utils_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crossbeam-utils-0.8.7.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crossbeam-utils-0.8.7.bazel
deleted file mode 100644
index 228b9ea..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crossbeam-utils-0.8.7.bazel
+++ /dev/null
@@ -1,179 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "crossbeam_utils",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "lazy_static",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.8.7",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-            "@crate_index__crossbeam-utils-0.8.7//:build_script_build",
-            "@crate_index__lazy_static-1.4.0//:lazy_static",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "crossbeam-utils_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "lazy_static",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.8.7",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "crossbeam-utils_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crypto-common-0.1.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crypto-common-0.1.3.bazel
deleted file mode 100644
index 269f2d8..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crypto-common-0.1.3.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "crypto_common",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.3",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__generic-array-0.14.5//:generic_array",
-            "@crate_index__typenum-1.15.0//:typenum",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crypto-common-0.1.4.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crypto-common-0.1.4.bazel
new file mode 100644
index 0000000..7456b4a
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.crypto-common-0.1.4.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "crypto_common",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__generic-array-0.14.5//:generic_array",
+            "@cui__typenum-1.15.0//:typenum",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.deunicode-0.4.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.deunicode-0.4.3.bazel
index dbea22a..8477726 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.deunicode-0.4.3.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.deunicode-0.4.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.digest-0.10.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.digest-0.10.3.bazel
index 0566635..1569254 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.digest-0.10.3.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.digest-0.10.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -70,10 +79,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,8 +90,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__block-buffer-0.10.2//:block_buffer",
-            "@crate_index__crypto-common-0.1.3//:crypto_common",
+            "@cui__block-buffer-0.10.2//:block_buffer",
+            "@cui__crypto-common-0.1.4//:crypto_common",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.digest-0.8.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.digest-0.8.1.bazel
index ffcb916..2556cd7 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.digest-0.8.1.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.digest-0.8.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__generic-array-0.12.4//:generic_array",
+            "@cui__generic-array-0.12.4//:generic_array",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.fake-simd-0.1.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.fake-simd-0.1.2.bazel
index b5f46a2..db2974f 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.fake-simd-0.1.2.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.fake-simd-0.1.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.fastrand-1.7.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.fastrand-1.7.0.bazel
index 4653164..5a262de 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.fastrand-1.7.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.fastrand-1.7.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,7 +90,7 @@
             "@rules_rust//rust/platform:wasm32-wasi",
         ): [
             # Target Deps
-            "@crate_index__instant-0.1.12//:instant",
+            "@cui__instant-0.1.12//:instant",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.fnv-1.0.7.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.fnv-1.0.7.bazel
index 9b3c6e3..2e0c82a 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.fnv-1.0.7.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.fnv-1.0.7.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.form_urlencoded-1.0.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.form_urlencoded-1.0.1.bazel
index 55ca7b5..d1dbe7c 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.form_urlencoded-1.0.1.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.form_urlencoded-1.0.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,8 +85,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__matches-0.1.9//:matches",
-            "@crate_index__percent-encoding-2.1.0//:percent_encoding",
+            "@cui__matches-0.1.9//:matches",
+            "@cui__percent-encoding-2.1.0//:percent_encoding",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.fuchsia-cprng-0.1.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.fuchsia-cprng-0.1.1.bazel
index 13c5d65..bd0e2d8 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.fuchsia-cprng-0.1.1.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.fuchsia-cprng-0.1.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.generic-array-0.12.4.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.generic-array-0.12.4.bazel
index 34536b7..cf8157a 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.generic-array-0.12.4.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.generic-array-0.12.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__typenum-1.15.0//:typenum",
+            "@cui__typenum-1.15.0//:typenum",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.generic-array-0.14.5.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.generic-array-0.14.5.bazel
index 9d7fc09..fad3420 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.generic-array-0.14.5.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.generic-array-0.14.5.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -70,10 +79,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,8 +90,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__generic-array-0.14.5//:build_script_build",
-            "@crate_index__typenum-1.15.0//:typenum",
+            "@cui__generic-array-0.14.5//:build_script_build",
+            "@cui__typenum-1.15.0//:typenum",
         ],
     }),
 )
@@ -137,10 +143,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -156,7 +159,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__version_check-0.9.4//:version_check",
+            "@cui__version_check-0.9.4//:version_check",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.getrandom-0.2.5.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.getrandom-0.2.5.bazel
deleted file mode 100644
index 0c73b2d..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.getrandom-0.2.5.bazel
+++ /dev/null
@@ -1,122 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "getrandom",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.5",
-    deps = [
-    ] + select_with_or({
-        # cfg(target_os = "wasi")
-        (
-            "@rules_rust//rust/platform:wasm32-wasi",
-        ): [
-            # Target Deps
-            "@crate_index__wasi-0.10.2-wasi-snapshot-preview1//:wasi",
-
-            # Common Deps
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-        ],
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-        ): [
-            # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
-
-            # Common Deps
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-        ],
-        "//conditions:default": [
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.getrandom-0.2.7.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.getrandom-0.2.7.bazel
new file mode 100644
index 0000000..18af579
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.getrandom-0.2.7.bazel
@@ -0,0 +1,130 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "getrandom",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.7",
+    deps = [
+    ] + select_with_or({
+        # cfg(target_os = "wasi")
+        (
+            "@rules_rust//rust/platform:wasm32-wasi",
+        ): [
+            # Target Deps
+            "@cui__wasi-0.11.0-wasi-snapshot-preview1//:wasi",
+
+            # Common Deps
+            "@cui__cfg-if-1.0.0//:cfg_if",
+        ],
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@cui__libc-0.2.126//:libc",
+
+            # Common Deps
+            "@cui__cfg-if-1.0.0//:cfg_if",
+        ],
+        "//conditions:default": [
+            "@cui__cfg-if-1.0.0//:cfg_if",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.git2-0.14.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.git2-0.14.1.bazel
deleted file mode 100644
index 1a3d468..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.git2-0.14.1.bazel
+++ /dev/null
@@ -1,89 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "git2",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.14.1",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__bitflags-1.3.2//:bitflags",
-            "@crate_index__libc-0.2.119//:libc",
-            "@crate_index__libgit2-sys-0.13.1-1.4.2//:libgit2_sys",
-            "@crate_index__log-0.4.14//:log",
-            "@crate_index__url-2.2.2//:url",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.git2-0.14.4.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.git2-0.14.4.bazel
new file mode 100644
index 0000000..785c303
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.git2-0.14.4.bazel
@@ -0,0 +1,95 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "git2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.14.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__bitflags-1.3.2//:bitflags",
+            "@cui__libc-0.2.126//:libc",
+            "@cui__libgit2-sys-0.13.4-1.4.2//:libgit2_sys",
+            "@cui__log-0.4.17//:log",
+            "@cui__url-2.2.2//:url",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.globset-0.4.8.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.globset-0.4.8.bazel
deleted file mode 100644
index e38b033..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.globset-0.4.8.bazel
+++ /dev/null
@@ -1,89 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Unlicense/MIT
-# ])
-
-rust_library(
-    name = "globset",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.8",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__aho-corasick-0.7.18//:aho_corasick",
-            "@crate_index__bstr-0.2.17//:bstr",
-            "@crate_index__fnv-1.0.7//:fnv",
-            "@crate_index__log-0.4.14//:log",
-            "@crate_index__regex-1.5.4//:regex",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.globset-0.4.9.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.globset-0.4.9.bazel
new file mode 100644
index 0000000..41b7dc8
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.globset-0.4.9.bazel
@@ -0,0 +1,97 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense OR MIT
+# ])
+
+rust_library(
+    name = "globset",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "log",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.9",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__aho-corasick-0.7.18//:aho_corasick",
+            "@cui__bstr-0.2.17//:bstr",
+            "@cui__fnv-1.0.7//:fnv",
+            "@cui__log-0.4.17//:log",
+            "@cui__regex-1.6.0//:regex",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.globwalk-0.8.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.globwalk-0.8.1.bazel
index f66d00a..b4ad397 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.globwalk-0.8.1.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.globwalk-0.8.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,9 +85,9 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__bitflags-1.3.2//:bitflags",
-            "@crate_index__ignore-0.4.18//:ignore",
-            "@crate_index__walkdir-2.3.2//:walkdir",
+            "@cui__bitflags-1.3.2//:bitflags",
+            "@cui__ignore-0.4.18//:ignore",
+            "@cui__walkdir-2.3.2//:walkdir",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.hashbrown-0.11.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.hashbrown-0.11.2.bazel
deleted file mode 100644
index 54a071b..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.hashbrown-0.11.2.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0/MIT
-# ])
-
-rust_library(
-    name = "hashbrown",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "raw",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.11.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.hashbrown-0.12.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.hashbrown-0.12.1.bazel
new file mode 100644
index 0000000..5aee01f
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.hashbrown-0.12.1.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "hashbrown",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "raw",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.12.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.heck-0.4.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.heck-0.4.0.bazel
index f8a2a8e..cf20c66 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.heck-0.4.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.heck-0.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel
index 87a0e63..3382110 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,7 +86,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.hex-0.4.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.hex-0.4.3.bazel
index 532d6eb..d9e08c2 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.hex-0.4.3.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.hex-0.4.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -83,7 +89,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__serde-1.0.136//:serde",
+            "@cui__serde-1.0.138//:serde",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.home-0.5.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.home-0.5.3.bazel
index d500a98..8d15a57 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.home-0.5.3.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.home-0.5.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,7 +90,7 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-0.3.9//:winapi",
+            "@cui__winapi-0.3.9//:winapi",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.humansize-1.1.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.humansize-1.1.1.bazel
index 48be3d7..060b964 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.humansize-1.1.1.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.humansize-1.1.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.idna-0.2.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.idna-0.2.3.bazel
index d414d18..6e1f2fd 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.idna-0.2.3.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.idna-0.2.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,9 +85,9 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__matches-0.1.9//:matches",
-            "@crate_index__unicode-bidi-0.3.7//:unicode_bidi",
-            "@crate_index__unicode-normalization-0.1.19//:unicode_normalization",
+            "@cui__matches-0.1.9//:matches",
+            "@cui__unicode-bidi-0.3.8//:unicode_bidi",
+            "@cui__unicode-normalization-0.1.21//:unicode_normalization",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ignore-0.4.18.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ignore-0.4.18.bazel
index 3d8cc4b..ddb28be 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ignore-0.4.18.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ignore-0.4.18.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,29 +90,29 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-util-0.1.5//:winapi_util",
+            "@cui__winapi-util-0.1.5//:winapi_util",
 
             # Common Deps
-            "@crate_index__crossbeam-utils-0.8.7//:crossbeam_utils",
-            "@crate_index__globset-0.4.8//:globset",
-            "@crate_index__lazy_static-1.4.0//:lazy_static",
-            "@crate_index__log-0.4.14//:log",
-            "@crate_index__memchr-2.4.1//:memchr",
-            "@crate_index__regex-1.5.4//:regex",
-            "@crate_index__same-file-1.0.6//:same_file",
-            "@crate_index__thread_local-1.1.4//:thread_local",
-            "@crate_index__walkdir-2.3.2//:walkdir",
+            "@cui__crossbeam-utils-0.8.10//:crossbeam_utils",
+            "@cui__globset-0.4.9//:globset",
+            "@cui__lazy_static-1.4.0//:lazy_static",
+            "@cui__log-0.4.17//:log",
+            "@cui__memchr-2.5.0//:memchr",
+            "@cui__regex-1.6.0//:regex",
+            "@cui__same-file-1.0.6//:same_file",
+            "@cui__thread_local-1.1.4//:thread_local",
+            "@cui__walkdir-2.3.2//:walkdir",
         ],
         "//conditions:default": [
-            "@crate_index__crossbeam-utils-0.8.7//:crossbeam_utils",
-            "@crate_index__globset-0.4.8//:globset",
-            "@crate_index__lazy_static-1.4.0//:lazy_static",
-            "@crate_index__log-0.4.14//:log",
-            "@crate_index__memchr-2.4.1//:memchr",
-            "@crate_index__regex-1.5.4//:regex",
-            "@crate_index__same-file-1.0.6//:same_file",
-            "@crate_index__thread_local-1.1.4//:thread_local",
-            "@crate_index__walkdir-2.3.2//:walkdir",
+            "@cui__crossbeam-utils-0.8.10//:crossbeam_utils",
+            "@cui__globset-0.4.9//:globset",
+            "@cui__lazy_static-1.4.0//:lazy_static",
+            "@cui__log-0.4.17//:log",
+            "@cui__memchr-2.5.0//:memchr",
+            "@cui__regex-1.6.0//:regex",
+            "@cui__same-file-1.0.6//:same_file",
+            "@cui__thread_local-1.1.4//:thread_local",
+            "@cui__walkdir-2.3.2//:walkdir",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.indexmap-1.8.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.indexmap-1.8.0.bazel
deleted file mode 100644
index 18e7ed7..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.indexmap-1.8.0.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0/MIT
-# ])
-
-rust_library(
-    name = "indexmap",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.8.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__hashbrown-0.11.2//:hashbrown",
-            "@crate_index__indexmap-1.8.0//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "indexmap_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.8.0",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__autocfg-1.1.0//:autocfg",
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "indexmap_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.indexmap-1.9.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.indexmap-1.9.1.bazel
new file mode 100644
index 0000000..90c74c1
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.indexmap-1.9.1.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "indexmap",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.9.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__hashbrown-0.12.1//:hashbrown",
+            "@cui__indexmap-1.9.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "indexmap_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.9.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "indexmap_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.instant-0.1.12.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.instant-0.1.12.bazel
index 97683a6..361368d 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.instant-0.1.12.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.instant-0.1.12.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
+            "@cui__cfg-if-1.0.0//:cfg_if",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.itoa-1.0.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.itoa-1.0.1.bazel
deleted file mode 100644
index 69bfcf9..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.itoa-1.0.1.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "itoa",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.1",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.itoa-1.0.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.itoa-1.0.2.bazel
new file mode 100644
index 0000000..db7dfe1
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.itoa-1.0.2.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "itoa",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.jobserver-0.1.24.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.jobserver-0.1.24.bazel
index 6e08f26..7944dc3 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.jobserver-0.1.24.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.jobserver-0.1.24.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -82,9 +88,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -99,7 +107,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel
index aabde66..1be9144 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libc-0.2.119.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libc-0.2.119.bazel
deleted file mode 100644
index 57c96d1..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libc-0.2.119.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "libc",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.119",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__libc-0.2.119//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "libc_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.2.119",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "libc_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libc-0.2.126.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libc-0.2.126.bazel
new file mode 100644
index 0000000..22b2593
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libc-0.2.126.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.126",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__libc-0.2.126//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "libc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.126",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "libc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libgit2-sys-0.13.1+1.4.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libgit2-sys-0.13.1+1.4.2.bazel
deleted file mode 100644
index 1f86220..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libgit2-sys-0.13.1+1.4.2.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "libgit2_sys",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.13.1+1.4.2",
-    deps = [
-        "@libgit2",
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__libc-0.2.119//:libc",
-            "@crate_index__libz-sys-1.1.3//:libz_sys",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libgit2-sys-0.13.4+1.4.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libgit2-sys-0.13.4+1.4.2.bazel
new file mode 100644
index 0000000..0d3e505
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libgit2-sys-0.13.4+1.4.2.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libgit2_sys",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.13.4+1.4.2",
+    deps = [
+        "@libgit2",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__libc-0.2.126//:libc",
+            "@cui__libz-sys-1.1.8//:libz_sys",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libz-sys-1.1.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libz-sys-1.1.3.bazel
deleted file mode 100644
index 725a428..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libz-sys-1.1.3.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "libz_sys",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "libc",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.1.3",
-    deps = [
-        "@zlib",
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__libc-0.2.119//:libc",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libz-sys-1.1.8.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libz-sys-1.1.8.bazel
new file mode 100644
index 0000000..57e84a7
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.libz-sys-1.1.8.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libz_sys",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "libc",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.8",
+    deps = [
+        "@zlib",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__libc-0.2.126//:libc",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.log-0.4.14.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.log-0.4.14.bazel
deleted file mode 100644
index 6471f8d..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.log-0.4.14.bazel
+++ /dev/null
@@ -1,172 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "log",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.14",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-            "@crate_index__log-0.4.14//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "log_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.4.14",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "log_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.log-0.4.17.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.log-0.4.17.bazel
new file mode 100644
index 0000000..94321d8
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.log-0.4.17.bazel
@@ -0,0 +1,175 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "log",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.17",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__cfg-if-1.0.0//:cfg_if",
+            "@cui__log-0.4.17//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "log_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.17",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "log_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.maplit-1.0.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.maplit-1.0.2.bazel
index c7e2e04..7ec2d3b 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.maplit-1.0.2.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.maplit-1.0.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.matches-0.1.9.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.matches-0.1.9.bazel
index b2ec92b..eb0371f 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.matches-0.1.9.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.matches-0.1.9.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.memchr-2.4.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.memchr-2.4.1.bazel
deleted file mode 100644
index ae3c518..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.memchr-2.4.1.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Unlicense/MIT
-# ])
-
-rust_library(
-    name = "memchr",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "2.4.1",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__memchr-2.4.1//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "memchr_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "2.4.1",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "memchr_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.memchr-2.5.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.memchr-2.5.0.bazel
new file mode 100644
index 0000000..1c9eed3
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.memchr-2.5.0.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "memchr",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.5.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__memchr-2.5.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "memchr_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "2.5.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "memchr_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.normpath-0.3.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.normpath-0.3.2.bazel
new file mode 100644
index 0000000..475620f
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.normpath-0.3.2.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "normpath",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.2",
+    deps = [
+    ] + select_with_or({
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@cui__winapi-0.3.9//:winapi",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-0.1.42.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-0.1.42.bazel
index e64c7e9..e020ca2 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-0.1.42.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-0.1.42.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -73,10 +82,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -87,12 +93,12 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__num-bigint-0.1.44//:num_bigint",
-            "@crate_index__num-complex-0.1.43//:num_complex",
-            "@crate_index__num-integer-0.1.44//:num_integer",
-            "@crate_index__num-iter-0.1.42//:num_iter",
-            "@crate_index__num-rational-0.1.42//:num_rational",
-            "@crate_index__num-traits-0.2.14//:num_traits",
+            "@cui__num-bigint-0.1.44//:num_bigint",
+            "@cui__num-complex-0.1.43//:num_complex",
+            "@cui__num-integer-0.1.45//:num_integer",
+            "@cui__num-iter-0.1.43//:num_iter",
+            "@cui__num-rational-0.1.42//:num_rational",
+            "@cui__num-traits-0.2.15//:num_traits",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-bigint-0.1.44.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-bigint-0.1.44.bazel
index 861ff69..9223b17 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-bigint-0.1.44.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-bigint-0.1.44.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -68,10 +77,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -82,10 +88,10 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__num-integer-0.1.44//:num_integer",
-            "@crate_index__num-traits-0.2.14//:num_traits",
-            "@crate_index__rand-0.4.6//:rand",
-            "@crate_index__rustc-serialize-0.3.24//:rustc_serialize",
+            "@cui__num-integer-0.1.45//:num_integer",
+            "@cui__num-traits-0.2.15//:num_traits",
+            "@cui__rand-0.4.6//:rand",
+            "@cui__rustc-serialize-0.3.24//:rustc_serialize",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-complex-0.1.43.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-complex-0.1.43.bazel
index 07ee208..b72b2c8 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-complex-0.1.43.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-complex-0.1.43.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -81,8 +87,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__num-traits-0.2.14//:num_traits",
-            "@crate_index__rustc-serialize-0.3.24//:rustc_serialize",
+            "@cui__num-traits-0.2.15//:num_traits",
+            "@cui__rustc-serialize-0.3.24//:rustc_serialize",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-integer-0.1.44.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-integer-0.1.44.bazel
deleted file mode 100644
index b8e125d..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-integer-0.1.44.bazel
+++ /dev/null
@@ -1,177 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "num_integer",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.44",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__num-integer-0.1.44//:build_script_build",
-            "@crate_index__num-traits-0.2.14//:num_traits",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "num-integer_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.1.44",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__autocfg-1.1.0//:autocfg",
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "num-integer_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-integer-0.1.45.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-integer-0.1.45.bazel
new file mode 100644
index 0000000..e53fb5c
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-integer-0.1.45.bazel
@@ -0,0 +1,180 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "num_integer",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.45",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__num-integer-0.1.45//:build_script_build",
+            "@cui__num-traits-0.2.15//:num_traits",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "num-integer_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.1.45",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "num-integer_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-iter-0.1.42.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-iter-0.1.42.bazel
deleted file mode 100644
index 926481a..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-iter-0.1.42.bazel
+++ /dev/null
@@ -1,178 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "num_iter",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.42",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__num-integer-0.1.44//:num_integer",
-            "@crate_index__num-iter-0.1.42//:build_script_build",
-            "@crate_index__num-traits-0.2.14//:num_traits",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "num-iter_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.1.42",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__autocfg-1.1.0//:autocfg",
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "num-iter_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-iter-0.1.43.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-iter-0.1.43.bazel
new file mode 100644
index 0000000..df4d761
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-iter-0.1.43.bazel
@@ -0,0 +1,181 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "num_iter",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.43",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__num-integer-0.1.45//:num_integer",
+            "@cui__num-iter-0.1.43//:build_script_build",
+            "@cui__num-traits-0.2.15//:num_traits",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "num-iter_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.1.43",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "num-iter_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-rational-0.1.42.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-rational-0.1.42.bazel
index 1b3ca21..bec1a87 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-rational-0.1.42.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-rational-0.1.42.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -83,10 +89,10 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__num-bigint-0.1.44//:num_bigint",
-            "@crate_index__num-integer-0.1.44//:num_integer",
-            "@crate_index__num-traits-0.2.14//:num_traits",
-            "@crate_index__rustc-serialize-0.3.24//:rustc_serialize",
+            "@cui__num-bigint-0.1.44//:num_bigint",
+            "@cui__num-integer-0.1.45//:num_integer",
+            "@cui__num-traits-0.2.15//:num_traits",
+            "@cui__rustc-serialize-0.3.24//:rustc_serialize",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-traits-0.2.14.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-traits-0.2.14.bazel
deleted file mode 100644
index 0b5ebe1..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-traits-0.2.14.bazel
+++ /dev/null
@@ -1,176 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "num_traits",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.14",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__num-traits-0.2.14//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "num-traits_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.2.14",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__autocfg-1.1.0//:autocfg",
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "num-traits_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-traits-0.2.15.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-traits-0.2.15.bazel
new file mode 100644
index 0000000..f961129
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num-traits-0.2.15.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "num_traits",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.15",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__num-traits-0.2.15//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "num-traits_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.15",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "num-traits_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num_cpus-1.13.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num_cpus-1.13.1.bazel
index 9cb3763..973e09d 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num_cpus-1.13.1.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.num_cpus-1.13.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -87,15 +93,18 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
             "@rules_rust//rust/platform:i686-unknown-freebsd",
             "@rules_rust//rust/platform:i686-unknown-linux-gnu",
             "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:riscv32imc-unknown-none-elf",
             "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
             "@rules_rust//rust/platform:wasm32-unknown-unknown",
             "@rules_rust//rust/platform:wasm32-wasi",
@@ -106,7 +115,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.once_cell-1.13.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.once_cell-1.13.0.bazel
new file mode 100644
index 0000000..ba25fcb
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.once_cell-1.13.0.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "once_cell",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "default",
+        "race",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.13.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel
deleted file mode 100644
index f2a936a..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.once_cell-1.9.0.bazel
+++ /dev/null
@@ -1,88 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "once_cell",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "alloc",
-        "default",
-        "race",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.9.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.opaque-debug-0.2.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.opaque-debug-0.2.3.bazel
index f327831..28f1882 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.opaque-debug-0.2.3.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.opaque-debug-0.2.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.os_str_bytes-6.0.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.os_str_bytes-6.0.0.bazel
deleted file mode 100644
index 10bd190..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.os_str_bytes-6.0.0.bazel
+++ /dev/null
@@ -1,88 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "os_str_bytes",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "memchr",
-        "raw_os_str",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "6.0.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__memchr-2.4.1//:memchr",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.os_str_bytes-6.1.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.os_str_bytes-6.1.0.bazel
new file mode 100644
index 0000000..30c2480
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.os_str_bytes-6.1.0.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "os_str_bytes",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "raw_os_str",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "6.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.parse-zoneinfo-0.3.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.parse-zoneinfo-0.3.0.bazel
index f825ee1..28d1a6d 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.parse-zoneinfo-0.3.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.parse-zoneinfo-0.3.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__regex-1.5.4//:regex",
+            "@cui__regex-1.6.0//:regex",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pathdiff-0.2.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pathdiff-0.2.1.bazel
index 4aade08..ea733a7 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pathdiff-0.2.1.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pathdiff-0.2.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.percent-encoding-2.1.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.percent-encoding-2.1.0.bazel
index 1ad467a..cf94bab 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.percent-encoding-2.1.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.percent-encoding-2.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pest-2.1.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pest-2.1.3.bazel
index 47afac4..e1e7bec 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pest-2.1.3.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pest-2.1.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__ucd-trie-0.1.3//:ucd_trie",
+            "@cui__ucd-trie-0.1.4//:ucd_trie",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pest_derive-2.1.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pest_derive-2.1.0.bazel
index 53c8c15..f74764b 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pest_derive-2.1.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pest_derive-2.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,8 +85,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__pest-2.1.3//:pest",
-            "@crate_index__pest_generator-2.1.3//:pest_generator",
+            "@cui__pest-2.1.3//:pest",
+            "@cui__pest_generator-2.1.3//:pest_generator",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pest_generator-2.1.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pest_generator-2.1.3.bazel
index 1370e95..cb11080 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pest_generator-2.1.3.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pest_generator-2.1.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,11 +85,11 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__pest-2.1.3//:pest",
-            "@crate_index__pest_meta-2.1.3//:pest_meta",
-            "@crate_index__proc-macro2-1.0.36//:proc_macro2",
-            "@crate_index__quote-1.0.15//:quote",
-            "@crate_index__syn-1.0.86//:syn",
+            "@cui__pest-2.1.3//:pest",
+            "@cui__pest_meta-2.1.3//:pest_meta",
+            "@cui__proc-macro2-1.0.40//:proc_macro2",
+            "@cui__quote-1.0.20//:quote",
+            "@cui__syn-1.0.98//:syn",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pest_meta-2.1.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pest_meta-2.1.3.bazel
index 81b94ca..7a901d5 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pest_meta-2.1.3.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pest_meta-2.1.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,8 +85,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__maplit-1.0.2//:maplit",
-            "@crate_index__pest-2.1.3//:pest",
+            "@cui__maplit-1.0.2//:maplit",
+            "@cui__pest-2.1.3//:pest",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.phf-0.10.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.phf-0.10.1.bazel
index 567ec45..0f14e41 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.phf-0.10.1.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.phf-0.10.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,7 +86,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__phf_shared-0.10.0//:phf_shared",
+            "@cui__phf_shared-0.10.0//:phf_shared",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.phf_codegen-0.10.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.phf_codegen-0.10.0.bazel
index 7d8a09f..e4136a6 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.phf_codegen-0.10.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.phf_codegen-0.10.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,8 +85,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__phf_generator-0.10.0//:phf_generator",
-            "@crate_index__phf_shared-0.10.0//:phf_shared",
+            "@cui__phf_generator-0.10.0//:phf_generator",
+            "@cui__phf_shared-0.10.0//:phf_shared",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.phf_generator-0.10.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.phf_generator-0.10.0.bazel
index 2399789..67a8069 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.phf_generator-0.10.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.phf_generator-0.10.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -37,7 +38,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,8 +86,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__phf_shared-0.10.0//:phf_shared",
-            "@crate_index__rand-0.8.5//:rand",
+            "@cui__phf_shared-0.10.0//:phf_shared",
+            "@cui__rand-0.8.5//:rand",
         ],
     }),
 )
@@ -99,7 +105,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -128,10 +142,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -143,8 +154,8 @@
         ":phf_generator",
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__phf_shared-0.10.0//:phf_shared",
-            "@crate_index__rand-0.8.5//:rand",
+            "@cui__phf_shared-0.10.0//:phf_shared",
+            "@cui__rand-0.8.5//:rand",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.phf_shared-0.10.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.phf_shared-0.10.0.bazel
index ff6ae0c..f96e406 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.phf_shared-0.10.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.phf_shared-0.10.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -68,10 +77,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -82,8 +88,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__siphasher-0.3.9//:siphasher",
-            "@crate_index__uncased-0.9.6//:uncased",
+            "@cui__siphasher-0.3.10//:siphasher",
+            "@cui__uncased-0.9.7//:uncased",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pkg-config-0.3.24.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pkg-config-0.3.24.bazel
deleted file mode 100644
index d0f2e51..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pkg-config-0.3.24.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "pkg_config",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.24",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pkg-config-0.3.25.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pkg-config-0.3.25.bazel
new file mode 100644
index 0000000..9c9a457
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.pkg-config-0.3.25.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "pkg_config",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.25",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ppv-lite86-0.2.16.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ppv-lite86-0.2.16.bazel
index f93bf68..45e384d 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ppv-lite86-0.2.16.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ppv-lite86-0.2.16.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.proc-macro-error-1.0.4.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.proc-macro-error-1.0.4.bazel
index 234edf1..fe71aad 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.proc-macro-error-1.0.4.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.proc-macro-error-1.0.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -58,7 +67,7 @@
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__proc-macro-error-attr-1.0.4//:proc_macro_error_attr",
+            "@cui__proc-macro-error-attr-1.0.4//:proc_macro_error_attr",
         ],
     }),
     rustc_env = {
@@ -73,10 +82,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -87,10 +93,10 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__proc-macro-error-1.0.4//:build_script_build",
-            "@crate_index__proc-macro2-1.0.36//:proc_macro2",
-            "@crate_index__quote-1.0.15//:quote",
-            "@crate_index__syn-1.0.86//:syn",
+            "@cui__proc-macro-error-1.0.4//:build_script_build",
+            "@cui__proc-macro2-1.0.40//:proc_macro2",
+            "@cui__quote-1.0.20//:quote",
+            "@cui__syn-1.0.98//:syn",
         ],
     }),
 )
@@ -144,10 +150,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -163,7 +166,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__version_check-0.9.4//:version_check",
+            "@cui__version_check-0.9.4//:version_check",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.proc-macro-error-attr-1.0.4.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.proc-macro-error-attr-1.0.4.bazel
index 5753e76..8b140f9 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.proc-macro-error-attr-1.0.4.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.proc-macro-error-attr-1.0.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -83,9 +89,9 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__proc-macro-error-attr-1.0.4//:build_script_build",
-            "@crate_index__proc-macro2-1.0.36//:proc_macro2",
-            "@crate_index__quote-1.0.15//:quote",
+            "@cui__proc-macro-error-attr-1.0.4//:build_script_build",
+            "@cui__proc-macro2-1.0.40//:proc_macro2",
+            "@cui__quote-1.0.20//:quote",
         ],
     }),
 )
@@ -136,10 +142,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -155,7 +158,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__version_check-0.9.4//:version_check",
+            "@cui__version_check-0.9.4//:version_check",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.proc-macro2-1.0.36.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.proc-macro2-1.0.36.bazel
deleted file mode 100644
index 7b9e4c2..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.proc-macro2-1.0.36.bazel
+++ /dev/null
@@ -1,176 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "proc_macro2",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.36",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__proc-macro2-1.0.36//:build_script_build",
-            "@crate_index__unicode-xid-0.2.2//:unicode_xid",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "proc-macro2_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.36",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "proc-macro2_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.proc-macro2-1.0.40.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.proc-macro2-1.0.40.bazel
new file mode 100644
index 0000000..8e580b9
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.proc-macro2-1.0.40.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "proc_macro2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.40",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__proc-macro2-1.0.40//:build_script_build",
+            "@cui__unicode-ident-1.0.1//:unicode_ident",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "proc-macro2_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.40",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "proc-macro2_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.quote-1.0.15.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.quote-1.0.15.bazel
deleted file mode 100644
index da83b59..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.quote-1.0.15.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "quote",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.15",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__proc-macro2-1.0.36//:proc_macro2",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.quote-1.0.20.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.quote-1.0.20.bazel
new file mode 100644
index 0000000..4321de1
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.quote-1.0.20.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "quote",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.20",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__proc-macro2-1.0.40//:proc_macro2",
+            "@cui__quote-1.0.20//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "quote_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.20",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "quote_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand-0.4.6.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand-0.4.6.bazel
index fd20593..3e26c81 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand-0.4.6.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand-0.4.6.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -68,10 +77,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -95,9 +101,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -112,7 +120,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
 
             # Common Deps
         ],
@@ -122,7 +130,7 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-0.3.9//:winapi",
+            "@cui__winapi-0.3.9//:winapi",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand-0.8.5.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand-0.8.5.bazel
index 33dfcf8..025a95e 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand-0.8.5.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand-0.8.5.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -73,10 +82,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -90,9 +96,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -107,15 +115,15 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
 
             # Common Deps
-            "@crate_index__rand_chacha-0.3.1//:rand_chacha",
-            "@crate_index__rand_core-0.6.3//:rand_core",
+            "@cui__rand_chacha-0.3.1//:rand_chacha",
+            "@cui__rand_core-0.6.3//:rand_core",
         ],
         "//conditions:default": [
-            "@crate_index__rand_chacha-0.3.1//:rand_chacha",
-            "@crate_index__rand_core-0.6.3//:rand_core",
+            "@cui__rand_chacha-0.3.1//:rand_chacha",
+            "@cui__rand_core-0.6.3//:rand_core",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand_chacha-0.3.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand_chacha-0.3.1.bazel
index b6eab72..a20eb88 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand_chacha-0.3.1.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand_chacha-0.3.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,8 +86,8 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__ppv-lite86-0.2.16//:ppv_lite86",
-            "@crate_index__rand_core-0.6.3//:rand_core",
+            "@cui__ppv-lite86-0.2.16//:ppv_lite86",
+            "@cui__rand_core-0.6.3//:rand_core",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand_core-0.3.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand_core-0.3.1.bazel
index 3be752f..106d275 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand_core-0.3.1.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand_core-0.3.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__rand_core-0.4.2//:rand_core",
+            "@cui__rand_core-0.4.2//:rand_core",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand_core-0.4.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand_core-0.4.2.bazel
index d835c72..c36b208 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand_core-0.4.2.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand_core-0.4.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand_core-0.6.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand_core-0.6.3.bazel
index ac7f43b..57e370a 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand_core-0.6.3.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rand_core-0.6.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -68,10 +77,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -82,7 +88,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__getrandom-0.2.5//:getrandom",
+            "@cui__getrandom-0.2.7//:getrandom",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rdrand-0.4.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rdrand-0.4.0.bazel
index 16c3ff5..d0d89b6 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rdrand-0.4.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rdrand-0.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -81,7 +87,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__rand_core-0.3.1//:rand_core",
+            "@cui__rand_core-0.3.1//:rand_core",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.redox_syscall-0.2.11.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.redox_syscall-0.2.11.bazel
deleted file mode 100644
index d06e9f0..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.redox_syscall-0.2.11.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "syscall",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.11",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__bitflags-1.3.2//:bitflags",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.redox_syscall-0.2.13.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.redox_syscall-0.2.13.bazel
new file mode 100644
index 0000000..72b1491
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.redox_syscall-0.2.13.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "syscall",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.13",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__bitflags-1.3.2//:bitflags",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.regex-1.5.4.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.regex-1.5.4.bazel
deleted file mode 100644
index da772c0..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.regex-1.5.4.bazel
+++ /dev/null
@@ -1,104 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "regex",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "aho-corasick",
-        "default",
-        "memchr",
-        "perf",
-        "perf-cache",
-        "perf-dfa",
-        "perf-inline",
-        "perf-literal",
-        "std",
-        "unicode",
-        "unicode-age",
-        "unicode-bool",
-        "unicode-case",
-        "unicode-gencat",
-        "unicode-perl",
-        "unicode-script",
-        "unicode-segment",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.5.4",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__aho-corasick-0.7.18//:aho_corasick",
-            "@crate_index__memchr-2.4.1//:memchr",
-            "@crate_index__regex-syntax-0.6.25//:regex_syntax",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.regex-1.6.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.regex-1.6.0.bazel
new file mode 100644
index 0000000..2a9f27b
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.regex-1.6.0.bazel
@@ -0,0 +1,110 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "regex",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "aho-corasick",
+        "default",
+        "memchr",
+        "perf",
+        "perf-cache",
+        "perf-dfa",
+        "perf-inline",
+        "perf-literal",
+        "std",
+        "unicode",
+        "unicode-age",
+        "unicode-bool",
+        "unicode-case",
+        "unicode-gencat",
+        "unicode-perl",
+        "unicode-script",
+        "unicode-segment",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.6.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__aho-corasick-0.7.18//:aho_corasick",
+            "@cui__memchr-2.5.0//:memchr",
+            "@cui__regex-syntax-0.6.27//:regex_syntax",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.regex-syntax-0.6.25.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.regex-syntax-0.6.25.bazel
deleted file mode 100644
index 8cd2b0b..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.regex-syntax-0.6.25.bazel
+++ /dev/null
@@ -1,93 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "regex_syntax",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "unicode",
-        "unicode-age",
-        "unicode-bool",
-        "unicode-case",
-        "unicode-gencat",
-        "unicode-perl",
-        "unicode-script",
-        "unicode-segment",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.6.25",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel
new file mode 100644
index 0000000..782b500
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel
@@ -0,0 +1,99 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "regex_syntax",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "unicode",
+        "unicode-age",
+        "unicode-bool",
+        "unicode-case",
+        "unicode-gencat",
+        "unicode-perl",
+        "unicode-script",
+        "unicode-segment",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.27",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.remove_dir_all-0.5.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.remove_dir_all-0.5.3.bazel
index 11007c8..b796c3a 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.remove_dir_all-0.5.3.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.remove_dir_all-0.5.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,7 +90,7 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-0.3.9//:winapi",
+            "@cui__winapi-0.3.9//:winapi",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rustc-hash-1.1.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rustc-hash-1.1.0.bazel
index def8f77..f62c6e7 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rustc-hash-1.1.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rustc-hash-1.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rustc-serialize-0.3.24.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rustc-serialize-0.3.24.bazel
index 1f90255..69f9e71 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rustc-serialize-0.3.24.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.rustc-serialize-0.3.24.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ryu-1.0.10.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ryu-1.0.10.bazel
new file mode 100644
index 0000000..36553ca
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ryu-1.0.10.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR BSL-1.0
+# ])
+
+rust_library(
+    name = "ryu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.10",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ryu-1.0.9.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ryu-1.0.9.bazel
deleted file mode 100644
index c2a9c81..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ryu-1.0.9.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0 OR BSL-1.0
-# ])
-
-rust_library(
-    name = "ryu",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.9",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.same-file-1.0.6.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.same-file-1.0.6.bazel
index 0b5a6fd..8fb94e6 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.same-file-1.0.6.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.same-file-1.0.6.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,7 +90,7 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-util-0.1.5//:winapi_util",
+            "@cui__winapi-util-0.1.5//:winapi_util",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.semver-1.0.12.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.semver-1.0.12.bazel
new file mode 100644
index 0000000..b2af89b
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.semver-1.0.12.bazel
@@ -0,0 +1,181 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "semver",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "serde",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.12",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__semver-1.0.12//:build_script_build",
+            "@cui__serde-1.0.138//:serde",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "semver_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "serde",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.12",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "semver_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.semver-1.0.6.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.semver-1.0.6.bazel
deleted file mode 100644
index eb424d7..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.semver-1.0.6.bazel
+++ /dev/null
@@ -1,178 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "semver",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "serde",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.6",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__semver-1.0.6//:build_script_build",
-            "@crate_index__serde-1.0.136//:serde",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "semver_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "serde",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.6",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "semver_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde-1.0.136.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde-1.0.136.bazel
deleted file mode 100644
index 9000cb6..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde-1.0.136.bazel
+++ /dev/null
@@ -1,182 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "serde",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "derive",
-        "rc",
-        "serde_derive",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__serde_derive-1.0.136//:serde_derive",
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.136",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__serde-1.0.136//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "serde_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "derive",
-        "rc",
-        "serde_derive",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.136",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "serde_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde-1.0.138.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde-1.0.138.bazel
new file mode 100644
index 0000000..c159d84
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde-1.0.138.bazel
@@ -0,0 +1,185 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "serde",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "derive",
+        "rc",
+        "serde_derive",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__serde_derive-1.0.138//:serde_derive",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.138",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__serde-1.0.138//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "serde_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "derive",
+        "rc",
+        "serde_derive",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.138",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "serde_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde_derive-1.0.136.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde_derive-1.0.136.bazel
deleted file mode 100644
index 86a3203..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde_derive-1.0.136.bazel
+++ /dev/null
@@ -1,176 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_proc_macro",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_proc_macro(
-    name = "serde_derive",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.136",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__proc-macro2-1.0.36//:proc_macro2",
-            "@crate_index__quote-1.0.15//:quote",
-            "@crate_index__serde_derive-1.0.136//:build_script_build",
-            "@crate_index__syn-1.0.86//:syn",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "serde_derive_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.136",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "serde_derive_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde_derive-1.0.138.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde_derive-1.0.138.bazel
new file mode 100644
index 0000000..7a3cd83
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde_derive-1.0.138.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_proc_macro(
+    name = "serde_derive",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.138",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__proc-macro2-1.0.40//:proc_macro2",
+            "@cui__quote-1.0.20//:quote",
+            "@cui__serde_derive-1.0.138//:build_script_build",
+            "@cui__syn-1.0.98//:syn",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "serde_derive_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.138",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "serde_derive_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde_json-1.0.79.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde_json-1.0.79.bazel
deleted file mode 100644
index 28b6043..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde_json-1.0.79.bazel
+++ /dev/null
@@ -1,180 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "serde_json",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-        "unbounded_depth",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.79",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__itoa-1.0.1//:itoa",
-            "@crate_index__ryu-1.0.9//:ryu",
-            "@crate_index__serde-1.0.136//:serde",
-            "@crate_index__serde_json-1.0.79//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "serde_json_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-        "unbounded_depth",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.79",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "serde_json_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde_json-1.0.82.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde_json-1.0.82.bazel
new file mode 100644
index 0000000..9c6f88c
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.serde_json-1.0.82.bazel
@@ -0,0 +1,183 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "serde_json",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+        "unbounded_depth",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.82",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__itoa-1.0.2//:itoa",
+            "@cui__ryu-1.0.10//:ryu",
+            "@cui__serde-1.0.138//:serde",
+            "@cui__serde_json-1.0.82//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "serde_json_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+        "unbounded_depth",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.82",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "serde_json_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.sha-1-0.8.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.sha-1-0.8.2.bazel
index 788e2f3..50293fa 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.sha-1-0.8.2.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.sha-1-0.8.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,10 +85,10 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__block-buffer-0.7.3//:block_buffer",
-            "@crate_index__digest-0.8.1//:digest",
-            "@crate_index__fake-simd-0.1.2//:fake_simd",
-            "@crate_index__opaque-debug-0.2.3//:opaque_debug",
+            "@cui__block-buffer-0.7.3//:block_buffer",
+            "@cui__digest-0.8.1//:digest",
+            "@cui__fake-simd-0.1.2//:fake_simd",
+            "@cui__opaque-debug-0.2.3//:opaque_debug",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.sha2-0.10.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.sha2-0.10.2.bazel
index 3d9fec2..9a2c054 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.sha2-0.10.2.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.sha2-0.10.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,6 +90,7 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:i686-apple-darwin",
@@ -99,15 +106,15 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crate_index__cpufeatures-0.2.1//:cpufeatures",
+            "@cui__cpufeatures-0.2.2//:cpufeatures",
 
             # Common Deps
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-            "@crate_index__digest-0.10.3//:digest",
+            "@cui__cfg-if-1.0.0//:cfg_if",
+            "@cui__digest-0.10.3//:digest",
         ],
         "//conditions:default": [
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-            "@crate_index__digest-0.10.3//:digest",
+            "@cui__cfg-if-1.0.0//:cfg_if",
+            "@cui__digest-0.10.3//:digest",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.siphasher-0.3.10.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.siphasher-0.3.10.bazel
new file mode 100644
index 0000000..a691647
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.siphasher-0.3.10.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "siphasher",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.10",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.siphasher-0.3.9.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.siphasher-0.3.9.bazel
deleted file mode 100644
index 01801aa..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.siphasher-0.3.9.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "siphasher",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.9",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.slug-0.1.4.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.slug-0.1.4.bazel
index 0348887..7f0a884 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.slug-0.1.4.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.slug-0.1.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__deunicode-0.4.3//:deunicode",
+            "@cui__deunicode-0.4.3//:deunicode",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.smallvec-1.8.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.smallvec-1.8.0.bazel
deleted file mode 100644
index a9ae389..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.smallvec-1.8.0.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "smallvec",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.8.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.smallvec-1.9.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.smallvec-1.9.0.bazel
new file mode 100644
index 0000000..3c1226e
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.smallvec-1.9.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "smallvec",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.9.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.smartstring-1.0.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.smartstring-1.0.0.bazel
deleted file mode 100644
index 4331be2..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.smartstring-1.0.0.bazel
+++ /dev/null
@@ -1,89 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MPL-2.0+
-# ])
-
-rust_library(
-    name = "smartstring",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "serde",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2021",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__serde-1.0.136//:serde",
-            "@crate_index__static_assertions-1.1.0//:static_assertions",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.smartstring-1.0.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.smartstring-1.0.1.bazel
new file mode 100644
index 0000000..16ee3a4
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.smartstring-1.0.1.bazel
@@ -0,0 +1,184 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MPL-2.0+
+# ])
+
+rust_library(
+    name = "smartstring",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "serde",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__serde-1.0.138//:serde",
+            "@cui__smartstring-1.0.1//:build_script_build",
+            "@cui__static_assertions-1.1.0//:static_assertions",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "smartstring_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "serde",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__autocfg-1.1.0//:autocfg",
+            "@cui__version_check-0.9.4//:version_check",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "smartstring_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.smawk-0.3.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.smawk-0.3.1.bazel
index ba4de44..63266d5 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.smawk-0.3.1.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.smawk-0.3.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.spectral-0.6.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.spectral-0.6.0.bazel
index 61ad65b..2757f65 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.spectral-0.6.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.spectral-0.6.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -81,7 +87,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__num-0.1.42//:num",
+            "@cui__num-0.1.42//:num",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.static_assertions-1.1.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.static_assertions-1.1.0.bazel
index 4e9f035..1eb631b 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.static_assertions-1.1.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.static_assertions-1.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.strsim-0.10.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.strsim-0.10.0.bazel
index d44fe18..7220e6e 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.strsim-0.10.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.strsim-0.10.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.syn-1.0.86.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.syn-1.0.86.bazel
deleted file mode 100644
index fba5009..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.syn-1.0.86.bazel
+++ /dev/null
@@ -1,190 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "syn",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "clone-impls",
-        "default",
-        "derive",
-        "full",
-        "parsing",
-        "printing",
-        "proc-macro",
-        "quote",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.86",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__proc-macro2-1.0.36//:proc_macro2",
-            "@crate_index__quote-1.0.15//:quote",
-            "@crate_index__syn-1.0.86//:build_script_build",
-            "@crate_index__unicode-xid-0.2.2//:unicode_xid",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "syn_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "clone-impls",
-        "default",
-        "derive",
-        "full",
-        "parsing",
-        "printing",
-        "proc-macro",
-        "quote",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.86",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "syn_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.syn-1.0.98.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.syn-1.0.98.bazel
new file mode 100644
index 0000000..d25adc2
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.syn-1.0.98.bazel
@@ -0,0 +1,193 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "syn",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "full",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.98",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__proc-macro2-1.0.40//:proc_macro2",
+            "@cui__quote-1.0.20//:quote",
+            "@cui__syn-1.0.98//:build_script_build",
+            "@cui__unicode-ident-1.0.1//:unicode_ident",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "syn_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "full",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.98",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "syn_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tempfile-3.3.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tempfile-3.3.0.bazel
index 67ea9ad..14b30c2 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tempfile-3.3.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tempfile-3.3.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -82,9 +88,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -100,17 +108,17 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crate_index__libc-0.2.119//:libc",
+            "@cui__libc-0.2.126//:libc",
 
             # Common Deps
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-            "@crate_index__fastrand-1.7.0//:fastrand",
-            "@crate_index__remove_dir_all-0.5.3//:remove_dir_all",
+            "@cui__cfg-if-1.0.0//:cfg_if",
+            "@cui__fastrand-1.7.0//:fastrand",
+            "@cui__remove_dir_all-0.5.3//:remove_dir_all",
         ],
         # cfg(target_os = "redox")
         #
         # No supported platform triples for cfg: 'cfg(target_os = "redox")'
-        # Skipped dependencies: [{"id":"redox_syscall 0.2.11","target":"syscall"}]
+        # Skipped dependencies: [{"id":"redox_syscall 0.2.13","target":"syscall"}]
         #
         # cfg(windows)
         (
@@ -118,17 +126,17 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-0.3.9//:winapi",
+            "@cui__winapi-0.3.9//:winapi",
 
             # Common Deps
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-            "@crate_index__fastrand-1.7.0//:fastrand",
-            "@crate_index__remove_dir_all-0.5.3//:remove_dir_all",
+            "@cui__cfg-if-1.0.0//:cfg_if",
+            "@cui__fastrand-1.7.0//:fastrand",
+            "@cui__remove_dir_all-0.5.3//:remove_dir_all",
         ],
         "//conditions:default": [
-            "@crate_index__cfg-if-1.0.0//:cfg_if",
-            "@crate_index__fastrand-1.7.0//:fastrand",
-            "@crate_index__remove_dir_all-0.5.3//:remove_dir_all",
+            "@cui__cfg-if-1.0.0//:cfg_if",
+            "@cui__fastrand-1.7.0//:fastrand",
+            "@cui__remove_dir_all-0.5.3//:remove_dir_all",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tera-1.15.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tera-1.15.0.bazel
deleted file mode 100644
index 644e4bd..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tera-1.15.0.bazel
+++ /dev/null
@@ -1,106 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tera",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "builtins",
-        "chrono",
-        "chrono-tz",
-        "default",
-        "humansize",
-        "percent-encoding",
-        "rand",
-        "slug",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__pest_derive-2.1.0//:pest_derive",
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.15.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__chrono-0.4.19//:chrono",
-            "@crate_index__chrono-tz-0.6.1//:chrono_tz",
-            "@crate_index__globwalk-0.8.1//:globwalk",
-            "@crate_index__humansize-1.1.1//:humansize",
-            "@crate_index__lazy_static-1.4.0//:lazy_static",
-            "@crate_index__percent-encoding-2.1.0//:percent_encoding",
-            "@crate_index__pest-2.1.3//:pest",
-            "@crate_index__rand-0.8.5//:rand",
-            "@crate_index__regex-1.5.4//:regex",
-            "@crate_index__serde-1.0.136//:serde",
-            "@crate_index__serde_json-1.0.79//:serde_json",
-            "@crate_index__slug-0.1.4//:slug",
-            "@crate_index__unic-segment-0.9.0//:unic_segment",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tera-1.16.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tera-1.16.0.bazel
new file mode 100644
index 0000000..0e70ef1
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tera-1.16.0.bazel
@@ -0,0 +1,113 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tera",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "builtins",
+        "chrono",
+        "chrono-tz",
+        "default",
+        "humansize",
+        "percent-encoding",
+        "rand",
+        "slug",
+        "urlencode",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__pest_derive-2.1.0//:pest_derive",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.16.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__chrono-0.4.19//:chrono",
+            "@cui__chrono-tz-0.6.1//:chrono_tz",
+            "@cui__globwalk-0.8.1//:globwalk",
+            "@cui__humansize-1.1.1//:humansize",
+            "@cui__lazy_static-1.4.0//:lazy_static",
+            "@cui__percent-encoding-2.1.0//:percent_encoding",
+            "@cui__pest-2.1.3//:pest",
+            "@cui__rand-0.8.5//:rand",
+            "@cui__regex-1.6.0//:regex",
+            "@cui__serde-1.0.138//:serde",
+            "@cui__serde_json-1.0.82//:serde_json",
+            "@cui__slug-0.1.4//:slug",
+            "@cui__unic-segment-0.9.0//:unic_segment",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.termcolor-1.1.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.termcolor-1.1.3.bazel
index 49d7bb0..a29482d 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.termcolor-1.1.3.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.termcolor-1.1.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,7 +90,7 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-util-0.1.5//:winapi_util",
+            "@cui__winapi-util-0.1.5//:winapi_util",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.textwrap-0.14.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.textwrap-0.14.2.bazel
deleted file mode 100644
index ec7ccef..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.textwrap-0.14.2.bazel
+++ /dev/null
@@ -1,91 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "textwrap",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "smawk",
-        "unicode-linebreak",
-        "unicode-width",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.14.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__smawk-0.3.1//:smawk",
-            "@crate_index__unicode-linebreak-0.1.2//:unicode_linebreak",
-            "@crate_index__unicode-width-0.1.9//:unicode_width",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.textwrap-0.15.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.textwrap-0.15.0.bazel
index 6636e2c..f42ad6c 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.textwrap-0.15.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.textwrap-0.15.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,11 +37,23 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
     crate_features = [
+        "default",
+        "smawk",
+        "unicode-linebreak",
+        "unicode-width",
     ],
     crate_root = "src/lib.rs",
     data = select_with_or({
@@ -65,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,6 +89,9 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
+            "@cui__smawk-0.3.1//:smawk",
+            "@cui__unicode-linebreak-0.1.2//:unicode_linebreak",
+            "@cui__unicode-width-0.1.9//:unicode_width",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.thread_local-1.1.4.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.thread_local-1.1.4.bazel
index ead5237..8204cff 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.thread_local-1.1.4.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.thread_local-1.1.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__once_cell-1.9.0//:once_cell",
+            "@cui__once_cell-1.13.0//:once_cell",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tinyvec-1.5.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tinyvec-1.5.1.bazel
deleted file mode 100644
index b366234..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tinyvec-1.5.1.bazel
+++ /dev/null
@@ -1,88 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Zlib OR Apache-2.0 OR MIT
-# ])
-
-rust_library(
-    name = "tinyvec",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "alloc",
-        "default",
-        "tinyvec_macros",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.5.1",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__tinyvec_macros-0.1.0//:tinyvec_macros",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tinyvec-1.6.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tinyvec-1.6.0.bazel
new file mode 100644
index 0000000..4d1d8f7
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tinyvec-1.6.0.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Zlib OR Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "tinyvec",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "default",
+        "tinyvec_macros",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.6.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__tinyvec_macros-0.1.0//:tinyvec_macros",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tinyvec_macros-0.1.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tinyvec_macros-0.1.0.bazel
index f29536b..f6c9ba5 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tinyvec_macros-0.1.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.tinyvec_macros-0.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.toml-0.5.8.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.toml-0.5.8.bazel
deleted file mode 100644
index 3aeedb8..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.toml-0.5.8.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "toml",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.5.8",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__serde-1.0.136//:serde",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.toml-0.5.9.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.toml-0.5.9.bazel
new file mode 100644
index 0000000..daa8ed0
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.toml-0.5.9.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "toml",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.5.9",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__serde-1.0.138//:serde",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.typenum-1.15.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.typenum-1.15.0.bazel
index bc9505b..8a13a13 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.typenum-1.15.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.typenum-1.15.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -83,7 +89,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__typenum-1.15.0//:build_script_main",
+            "@cui__typenum-1.15.0//:build_script_main",
         ],
     }),
 )
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ucd-trie-0.1.3.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ucd-trie-0.1.3.bazel
deleted file mode 100644
index 1fee76a..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ucd-trie-0.1.3.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "ucd_trie",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.3",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ucd-trie-0.1.4.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ucd-trie-0.1.4.bazel
new file mode 100644
index 0000000..4fd64ca
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.ucd-trie-0.1.4.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "ucd_trie",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.uncased-0.9.6.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.uncased-0.9.6.bazel
deleted file mode 100644
index 034645e..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.uncased-0.9.6.bazel
+++ /dev/null
@@ -1,172 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "uncased",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.9.6",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__uncased-0.9.6//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "uncased_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.9.6",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__version_check-0.9.4//:version_check",
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "uncased_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.uncased-0.9.7.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.uncased-0.9.7.bazel
new file mode 100644
index 0000000..9b7d74c
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.uncased-0.9.7.bazel
@@ -0,0 +1,175 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "uncased",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.9.7",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__uncased-0.9.7//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "uncased_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.9.7",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__version_check-0.9.4//:version_check",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "uncased_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-char-property-0.9.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-char-property-0.9.0.bazel
index 4a1ed99..c48c6ed 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-char-property-0.9.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-char-property-0.9.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__unic-char-range-0.9.0//:unic_char_range",
+            "@cui__unic-char-range-0.9.0//:unic_char_range",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-char-range-0.9.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-char-range-0.9.0.bazel
index 446a684..d1fb93f 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-char-range-0.9.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-char-range-0.9.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-common-0.9.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-common-0.9.0.bazel
index 4827fb0..fa2dcf8 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-common-0.9.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-common-0.9.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-segment-0.9.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-segment-0.9.0.bazel
index c57a794..aecb05d 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-segment-0.9.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-segment-0.9.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__unic-ucd-segment-0.9.0//:unic_ucd_segment",
+            "@cui__unic-ucd-segment-0.9.0//:unic_ucd_segment",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-ucd-segment-0.9.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-ucd-segment-0.9.0.bazel
index dbd70c5..11f8e84 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-ucd-segment-0.9.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-ucd-segment-0.9.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,9 +85,9 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__unic-char-property-0.9.0//:unic_char_property",
-            "@crate_index__unic-char-range-0.9.0//:unic_char_range",
-            "@crate_index__unic-ucd-version-0.9.0//:unic_ucd_version",
+            "@cui__unic-char-property-0.9.0//:unic_char_property",
+            "@cui__unic-char-range-0.9.0//:unic_char_range",
+            "@cui__unic-ucd-version-0.9.0//:unic_ucd_version",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-ucd-version-0.9.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-ucd-version-0.9.0.bazel
index 12233f8..b091f81 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-ucd-version-0.9.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unic-ucd-version-0.9.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__unic-common-0.9.0//:unic_common",
+            "@cui__unic-common-0.9.0//:unic_common",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-bidi-0.3.7.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-bidi-0.3.7.bazel
deleted file mode 100644
index b412f9a..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-bidi-0.3.7.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT / Apache-2.0
-# ])
-
-rust_library(
-    name = "unicode_bidi",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.7",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-bidi-0.3.8.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-bidi-0.3.8.bazel
new file mode 100644
index 0000000..51deaaf
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-bidi-0.3.8.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "unicode_bidi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "hardcoded-data",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-ident-1.0.1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-ident-1.0.1.bazel
new file mode 100644
index 0000000..c57d4b6
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-ident-1.0.1.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "unicode_ident",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-linebreak-0.1.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-linebreak-0.1.2.bazel
index fea1adb..1d99c14 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-linebreak-0.1.2.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-linebreak-0.1.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -83,7 +89,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__unicode-linebreak-0.1.2//:build_script_build",
+            "@cui__unicode-linebreak-0.1.2//:build_script_build",
         ],
     }),
 )
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -153,7 +156,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__regex-1.5.4//:regex",
+            "@cui__regex-1.6.0//:regex",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-normalization-0.1.19.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-normalization-0.1.19.bazel
deleted file mode 100644
index 805ffa9..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-normalization-0.1.19.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "unicode_normalization",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.19",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crate_index__tinyvec-1.5.1//:tinyvec",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-normalization-0.1.21.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-normalization-0.1.21.bazel
new file mode 100644
index 0000000..edcfbe9
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-normalization-0.1.21.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "unicode_normalization",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.21",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@cui__tinyvec-1.6.0//:tinyvec",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-width-0.1.9.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-width-0.1.9.bazel
index 6b610b7..78d38f3 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-width-0.1.9.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-width-0.1.9.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-xid-0.2.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-xid-0.2.2.bazel
deleted file mode 100644
index 30562c1..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.unicode-xid-0.2.2.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "unicode_xid",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.url-2.2.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.url-2.2.2.bazel
index e2b0903..48dc99e 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.url-2.2.2.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.url-2.2.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,10 +85,10 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__form_urlencoded-1.0.1//:form_urlencoded",
-            "@crate_index__idna-0.2.3//:idna",
-            "@crate_index__matches-0.1.9//:matches",
-            "@crate_index__percent-encoding-2.1.0//:percent_encoding",
+            "@cui__form_urlencoded-1.0.1//:form_urlencoded",
+            "@cui__idna-0.2.3//:idna",
+            "@cui__matches-0.1.9//:matches",
+            "@cui__percent-encoding-2.1.0//:percent_encoding",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.vcpkg-0.2.15.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.vcpkg-0.2.15.bazel
index 45dc115..82d489f 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.vcpkg-0.2.15.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.vcpkg-0.2.15.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.version_check-0.9.4.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.version_check-0.9.4.bazel
index 2c446b0..da5c3e4 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.version_check-0.9.4.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.version_check-0.9.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.walkdir-2.3.2.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.walkdir-2.3.2.bazel
index 323795e..6a7f23f 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.walkdir-2.3.2.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.walkdir-2.3.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,14 +90,14 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-0.3.9//:winapi",
-            "@crate_index__winapi-util-0.1.5//:winapi_util",
+            "@cui__winapi-0.3.9//:winapi",
+            "@cui__winapi-util-0.1.5//:winapi_util",
 
             # Common Deps
-            "@crate_index__same-file-1.0.6//:same_file",
+            "@cui__same-file-1.0.6//:same_file",
         ],
         "//conditions:default": [
-            "@crate_index__same-file-1.0.6//:same_file",
+            "@cui__same-file-1.0.6//:same_file",
         ],
     }),
 )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.wasi-0.10.2+wasi-snapshot-preview1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.wasi-0.10.2+wasi-snapshot-preview1.bazel
deleted file mode 100644
index aedee28..0000000
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.wasi-0.10.2+wasi-snapshot-preview1.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT
-# ])
-
-rust_library(
-    name = "wasi",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.10.2+wasi-snapshot-preview1",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel
new file mode 100644
index 0000000..4a1360c
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //crate_universe/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "wasi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.11.0+wasi-snapshot-preview1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.winapi-0.3.9.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.winapi-0.3.9.bazel
index 32b584b..8d88928 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.winapi-0.3.9.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.winapi-0.3.9.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -85,10 +94,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -109,7 +115,7 @@
         # Skipped dependencies: [{"id":"winapi-x86_64-pc-windows-gnu 0.4.0","target":"winapi_x86_64_pc_windows_gnu"}]
         #
         "//conditions:default": [
-            "@crate_index__winapi-0.3.9//:build_script_build",
+            "@cui__winapi-0.3.9//:build_script_build",
         ],
     }),
 )
@@ -176,10 +182,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
index 0935a2c..4815eb7 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -83,7 +89,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__winapi-i686-pc-windows-gnu-0.4.0//:build_script_build",
+            "@cui__winapi-i686-pc-windows-gnu-0.4.0//:build_script_build",
         ],
     }),
 )
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel
index 44dd9b5..5da2e4f 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -84,7 +90,7 @@
             "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
         ): [
             # Target Deps
-            "@crate_index__winapi-0.3.9//:winapi",
+            "@cui__winapi-0.3.9//:winapi",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
index 13b50ee..4cc26b9 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -83,7 +89,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crate_index__winapi-x86_64-pc-windows-gnu-0.4.0//:build_script_build",
+            "@cui__winapi-x86_64-pc-windows-gnu-0.4.0//:build_script_build",
         ],
     }),
 )
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/crates.bzl b/third_party/rules_rust/crate_universe/3rdparty/crates/crates.bzl
index d02aa63..9821456 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/crates.bzl
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/crates.bzl
@@ -17,7 +17,7 @@
 def crate_repositories():
     maybe(
         crates_vendor_remote_repository,
-        name = "crate_index",
+        name = "cui",
         build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.bazel"),
         defs_module = Label("@rules_rust//crate_universe/3rdparty/crates:defs.bzl"),
     )
diff --git a/third_party/rules_rust/crate_universe/3rdparty/crates/defs.bzl b/third_party/rules_rust/crate_universe/3rdparty/crates/defs.bzl
index 4026391..f2cc565 100644
--- a/third_party/rules_rust/crate_universe/3rdparty/crates/defs.bzl
+++ b/third_party/rules_rust/crate_universe/3rdparty/crates/defs.bzl
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //crate_universe/3rdparty:crates_vendor
 ###############################################################################
 """
 # `crates_repository` API
@@ -194,7 +195,10 @@
     dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
 
     if not dependencies:
-        return []
+        if dependencies == None:
+            fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
+        else:
+            return []
 
     crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
     for condition, deps in dependencies.items():
@@ -287,38 +291,39 @@
 _NORMAL_DEPENDENCIES = {
     "crate_universe": {
         _COMMON_CONDITION: {
-            "anyhow": "@crate_index__anyhow-1.0.55//:anyhow",
-            "cargo-lock": "@crate_index__cargo-lock-7.0.1//:cargo_lock",
-            "cargo-platform": "@crate_index__cargo-platform-0.1.2//:cargo_platform",
-            "cargo_metadata": "@crate_index__cargo_metadata-0.14.2//:cargo_metadata",
-            "cargo_toml": "@crate_index__cargo_toml-0.11.4//:cargo_toml",
-            "cfg-expr": "@crate_index__cfg-expr-0.10.2//:cfg_expr",
-            "clap": "@crate_index__clap-3.1.5//:clap",
-            "crates-index": "@crate_index__crates-index-0.18.7//:crates_index",
-            "hex": "@crate_index__hex-0.4.3//:hex",
-            "pathdiff": "@crate_index__pathdiff-0.2.1//:pathdiff",
-            "regex": "@crate_index__regex-1.5.4//:regex",
-            "semver": "@crate_index__semver-1.0.6//:semver",
-            "serde": "@crate_index__serde-1.0.136//:serde",
-            "serde_json": "@crate_index__serde_json-1.0.79//:serde_json",
-            "sha2": "@crate_index__sha2-0.10.2//:sha2",
-            "tempfile": "@crate_index__tempfile-3.3.0//:tempfile",
-            "tera": "@crate_index__tera-1.15.0//:tera",
-            "textwrap": "@crate_index__textwrap-0.14.2//:textwrap",
-            "toml": "@crate_index__toml-0.5.8//:toml",
+            "anyhow": "@cui__anyhow-1.0.58//:anyhow",
+            "cargo-lock": "@cui__cargo-lock-8.0.2//:cargo_lock",
+            "cargo-platform": "@cui__cargo-platform-0.1.2//:cargo_platform",
+            "cargo_metadata": "@cui__cargo_metadata-0.14.2//:cargo_metadata",
+            "cargo_toml": "@cui__cargo_toml-0.11.5//:cargo_toml",
+            "cfg-expr": "@cui__cfg-expr-0.10.3//:cfg_expr",
+            "clap": "@cui__clap-3.2.8//:clap",
+            "crates-index": "@cui__crates-index-0.18.8//:crates_index",
+            "hex": "@cui__hex-0.4.3//:hex",
+            "normpath": "@cui__normpath-0.3.2//:normpath",
+            "pathdiff": "@cui__pathdiff-0.2.1//:pathdiff",
+            "regex": "@cui__regex-1.6.0//:regex",
+            "semver": "@cui__semver-1.0.12//:semver",
+            "serde": "@cui__serde-1.0.138//:serde",
+            "serde_json": "@cui__serde_json-1.0.82//:serde_json",
+            "sha2": "@cui__sha2-0.10.2//:sha2",
+            "tempfile": "@cui__tempfile-3.3.0//:tempfile",
+            "tera": "@cui__tera-1.16.0//:tera",
+            "textwrap": "@cui__textwrap-0.15.0//:textwrap",
+            "toml": "@cui__toml-0.5.9//:toml",
         },
     },
     "crate_universe/tools/cross_installer": {
         _COMMON_CONDITION: {
-            "clap": "@crate_index__clap-3.1.5//:clap",
+            "clap": "@cui__clap-3.2.8//:clap",
         },
     },
     "crate_universe/tools/urls_generator": {
         _COMMON_CONDITION: {
-            "clap": "@crate_index__clap-3.1.5//:clap",
-            "hex": "@crate_index__hex-0.4.3//:hex",
-            "serde_json": "@crate_index__serde_json-1.0.79//:serde_json",
-            "sha2": "@crate_index__sha2-0.10.2//:sha2",
+            "clap": "@cui__clap-3.2.8//:clap",
+            "hex": "@cui__hex-0.4.3//:hex",
+            "serde_json": "@cui__serde_json-1.0.82//:serde_json",
+            "sha2": "@cui__sha2-0.10.2//:sha2",
         },
     },
 }
@@ -341,7 +346,8 @@
 _NORMAL_DEV_DEPENDENCIES = {
     "crate_universe": {
         _COMMON_CONDITION: {
-            "spectral": "@crate_index__spectral-0.6.0//:spectral",
+            "maplit": "@cui__maplit-1.0.2//:maplit",
+            "spectral": "@cui__spectral-0.6.0//:spectral",
         },
     },
     "crate_universe/tools/cross_installer": {
@@ -437,18 +443,19 @@
 
 _CONDITIONS = {
     "aarch64-apple-darwin": ["aarch64-apple-darwin"],
+    "aarch64-linux-android": ["aarch64-linux-android"],
     "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [],
     "cfg(all(target_arch = \"aarch64\", target_os = \"linux\"))": ["aarch64-unknown-linux-gnu"],
-    "cfg(any(target_arch = \"aarch64\", target_arch = \"x86_64\", target_arch = \"x86\"))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "i686-apple-darwin", "i686-linux-android", "i686-pc-windows-msvc", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
-    "cfg(any(unix, target_os = \"wasi\"))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
-    "cfg(not(windows))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(any(target_arch = \"aarch64\", target_arch = \"x86_64\", target_arch = \"x86\"))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "i686-apple-darwin", "i686-linux-android", "i686-pc-windows-msvc", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(any(unix, target_os = \"wasi\"))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(not(windows))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "riscv32imc-unknown-none-elf", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
     "cfg(target_arch = \"wasm32\")": ["wasm32-unknown-unknown", "wasm32-wasi"],
     "cfg(target_env = \"sgx\")": [],
     "cfg(target_os = \"fuchsia\")": [],
     "cfg(target_os = \"hermit\")": [],
     "cfg(target_os = \"redox\")": [],
     "cfg(target_os = \"wasi\")": ["wasm32-wasi"],
-    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
     "cfg(windows)": ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc"],
     "i686-pc-windows-gnu": [],
     "x86_64-pc-windows-gnu": [],
@@ -460,7 +467,7 @@
     """A macro for defining repositories for all generated crates"""
     maybe(
         http_archive,
-        name = "crate_index__aho-corasick-0.7.18",
+        name = "cui__aho-corasick-0.7.18",
         sha256 = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/aho-corasick/0.7.18/download"],
@@ -470,17 +477,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__anyhow-1.0.55",
-        sha256 = "159bb86af3a200e19a068f4224eae4c8bb2d0fa054c7e5d1cacd5cef95e684cd",
+        name = "cui__anyhow-1.0.58",
+        sha256 = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/anyhow/1.0.55/download"],
-        strip_prefix = "anyhow-1.0.55",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.anyhow-1.0.55.bazel"),
+        urls = ["https://crates.io/api/v1/crates/anyhow/1.0.58/download"],
+        strip_prefix = "anyhow-1.0.58",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.anyhow-1.0.58.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__atty-0.2.14",
+        name = "cui__atty-0.2.14",
         sha256 = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/atty/0.2.14/download"],
@@ -490,7 +497,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__autocfg-1.1.0",
+        name = "cui__autocfg-1.1.0",
         sha256 = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/autocfg/1.1.0/download"],
@@ -500,7 +507,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__bitflags-1.3.2",
+        name = "cui__bitflags-1.3.2",
         sha256 = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/bitflags/1.3.2/download"],
@@ -510,7 +517,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__block-buffer-0.10.2",
+        name = "cui__block-buffer-0.10.2",
         sha256 = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/block-buffer/0.10.2/download"],
@@ -520,7 +527,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__block-buffer-0.7.3",
+        name = "cui__block-buffer-0.7.3",
         sha256 = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/block-buffer/0.7.3/download"],
@@ -530,7 +537,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__block-padding-0.1.5",
+        name = "cui__block-padding-0.1.5",
         sha256 = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/block-padding/0.1.5/download"],
@@ -540,7 +547,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__bstr-0.2.17",
+        name = "cui__bstr-0.2.17",
         sha256 = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/bstr/0.2.17/download"],
@@ -550,7 +557,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__byte-tools-0.3.1",
+        name = "cui__byte-tools-0.3.1",
         sha256 = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/byte-tools/0.3.1/download"],
@@ -560,7 +567,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__byteorder-1.4.3",
+        name = "cui__byteorder-1.4.3",
         sha256 = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/byteorder/1.4.3/download"],
@@ -570,27 +577,27 @@
 
     maybe(
         http_archive,
-        name = "crate_index__camino-1.0.7",
-        sha256 = "6f3132262930b0522068049f5870a856ab8affc80c70d08b6ecb785771a6fc23",
+        name = "cui__camino-1.0.9",
+        sha256 = "869119e97797867fd90f5e22af7d0bd274bd4635ebb9eb68c04f3f513ae6c412",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/camino/1.0.7/download"],
-        strip_prefix = "camino-1.0.7",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.camino-1.0.7.bazel"),
+        urls = ["https://crates.io/api/v1/crates/camino/1.0.9/download"],
+        strip_prefix = "camino-1.0.9",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.camino-1.0.9.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__cargo-lock-7.0.1",
-        sha256 = "7fb04b88bd5b2036e30704f95c6ee16f3b5ca3b4ca307da2889d9006648e5c88",
+        name = "cui__cargo-lock-8.0.2",
+        sha256 = "3c4c54d47a4532db3494ef7332c257ab57b02750daae3250d49e01ee55201ce8",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/cargo-lock/7.0.1/download"],
-        strip_prefix = "cargo-lock-7.0.1",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.cargo-lock-7.0.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/cargo-lock/8.0.2/download"],
+        strip_prefix = "cargo-lock-8.0.2",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.cargo-lock-8.0.2.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__cargo-platform-0.1.2",
+        name = "cui__cargo-platform-0.1.2",
         sha256 = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/cargo-platform/0.1.2/download"],
@@ -600,7 +607,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__cargo_metadata-0.14.2",
+        name = "cui__cargo_metadata-0.14.2",
         sha256 = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/cargo_metadata/0.14.2/download"],
@@ -610,17 +617,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__cargo_toml-0.11.4",
-        sha256 = "4e270ef0cd868745878982f7ce470aa898d0d4bb248af67f0cf66f54617913ef",
+        name = "cui__cargo_toml-0.11.5",
+        sha256 = "5809dd3e6444651fd1cdd3dbec71eca438c439a0fcc8081674a14da0afe50185",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/cargo_toml/0.11.4/download"],
-        strip_prefix = "cargo_toml-0.11.4",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.cargo_toml-0.11.4.bazel"),
+        urls = ["https://crates.io/api/v1/crates/cargo_toml/0.11.5/download"],
+        strip_prefix = "cargo_toml-0.11.5",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.cargo_toml-0.11.5.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__cc-1.0.73",
+        name = "cui__cc-1.0.73",
         sha256 = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/cc/1.0.73/download"],
@@ -630,17 +637,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__cfg-expr-0.10.2",
-        sha256 = "5e068cb2806bbc15b439846dc16c5f89f8599f2c3e4d73d4449d38f9b2f0b6c5",
+        name = "cui__cfg-expr-0.10.3",
+        sha256 = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/cfg-expr/0.10.2/download"],
-        strip_prefix = "cfg-expr-0.10.2",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.cfg-expr-0.10.2.bazel"),
+        urls = ["https://crates.io/api/v1/crates/cfg-expr/0.10.3/download"],
+        strip_prefix = "cfg-expr-0.10.3",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.cfg-expr-0.10.3.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__cfg-if-1.0.0",
+        name = "cui__cfg-if-1.0.0",
         sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/cfg-if/1.0.0/download"],
@@ -650,7 +657,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__chrono-0.4.19",
+        name = "cui__chrono-0.4.19",
         sha256 = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/chrono/0.4.19/download"],
@@ -660,7 +667,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__chrono-tz-0.6.1",
+        name = "cui__chrono-tz-0.6.1",
         sha256 = "58549f1842da3080ce63002102d5bc954c7bc843d4f47818e642abdc36253552",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/chrono-tz/0.6.1/download"],
@@ -670,7 +677,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__chrono-tz-build-0.0.2",
+        name = "cui__chrono-tz-build-0.0.2",
         sha256 = "db058d493fb2f65f41861bfed7e3fe6335264a9f0f92710cab5bdf01fef09069",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/chrono-tz-build/0.0.2/download"],
@@ -680,67 +687,77 @@
 
     maybe(
         http_archive,
-        name = "crate_index__clap-3.1.5",
-        sha256 = "ced1892c55c910c1219e98d6fc8d71f6bddba7905866ce740066d8bfea859312",
+        name = "cui__clap-3.2.8",
+        sha256 = "190814073e85d238f31ff738fcb0bf6910cedeb73376c87cd69291028966fd83",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/clap/3.1.5/download"],
-        strip_prefix = "clap-3.1.5",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.clap-3.1.5.bazel"),
+        urls = ["https://crates.io/api/v1/crates/clap/3.2.8/download"],
+        strip_prefix = "clap-3.2.8",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.clap-3.2.8.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__clap_derive-3.1.4",
-        sha256 = "da95d038ede1a964ce99f49cbe27a7fb538d1da595e4b4f70b8c8f338d17bf16",
+        name = "cui__clap_derive-3.2.7",
+        sha256 = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/clap_derive/3.1.4/download"],
-        strip_prefix = "clap_derive-3.1.4",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.clap_derive-3.1.4.bazel"),
+        urls = ["https://crates.io/api/v1/crates/clap_derive/3.2.7/download"],
+        strip_prefix = "clap_derive-3.2.7",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.clap_derive-3.2.7.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__cpufeatures-0.2.1",
-        sha256 = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469",
+        name = "cui__clap_lex-0.2.4",
+        sha256 = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/cpufeatures/0.2.1/download"],
-        strip_prefix = "cpufeatures-0.2.1",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.cpufeatures-0.2.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/clap_lex/0.2.4/download"],
+        strip_prefix = "clap_lex-0.2.4",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.clap_lex-0.2.4.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__crates-index-0.18.7",
-        sha256 = "0044896374c388ccbf1497dad6384bf6111dbcad9d7069506df7450ce9b62ea3",
+        name = "cui__cpufeatures-0.2.2",
+        sha256 = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/crates-index/0.18.7/download"],
-        strip_prefix = "crates-index-0.18.7",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.crates-index-0.18.7.bazel"),
+        urls = ["https://crates.io/api/v1/crates/cpufeatures/0.2.2/download"],
+        strip_prefix = "cpufeatures-0.2.2",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.cpufeatures-0.2.2.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__crossbeam-utils-0.8.7",
-        sha256 = "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6",
+        name = "cui__crates-index-0.18.8",
+        sha256 = "2519c91ad7a6e3250a64fb71162d2db1afe7bcf826a465f84d2052fd69639b7a",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/crossbeam-utils/0.8.7/download"],
-        strip_prefix = "crossbeam-utils-0.8.7",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.crossbeam-utils-0.8.7.bazel"),
+        urls = ["https://crates.io/api/v1/crates/crates-index/0.18.8/download"],
+        strip_prefix = "crates-index-0.18.8",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.crates-index-0.18.8.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__crypto-common-0.1.3",
-        sha256 = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8",
+        name = "cui__crossbeam-utils-0.8.10",
+        sha256 = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/crypto-common/0.1.3/download"],
-        strip_prefix = "crypto-common-0.1.3",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.crypto-common-0.1.3.bazel"),
+        urls = ["https://crates.io/api/v1/crates/crossbeam-utils/0.8.10/download"],
+        strip_prefix = "crossbeam-utils-0.8.10",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.crossbeam-utils-0.8.10.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__deunicode-0.4.3",
+        name = "cui__crypto-common-0.1.4",
+        sha256 = "5999502d32b9c48d492abe66392408144895020ec4709e549e840799f3bb74c0",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/crypto-common/0.1.4/download"],
+        strip_prefix = "crypto-common-0.1.4",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.crypto-common-0.1.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "cui__deunicode-0.4.3",
         sha256 = "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/deunicode/0.4.3/download"],
@@ -750,7 +767,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__digest-0.10.3",
+        name = "cui__digest-0.10.3",
         sha256 = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/digest/0.10.3/download"],
@@ -760,7 +777,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__digest-0.8.1",
+        name = "cui__digest-0.8.1",
         sha256 = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/digest/0.8.1/download"],
@@ -770,7 +787,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__fake-simd-0.1.2",
+        name = "cui__fake-simd-0.1.2",
         sha256 = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/fake-simd/0.1.2/download"],
@@ -780,7 +797,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__fastrand-1.7.0",
+        name = "cui__fastrand-1.7.0",
         sha256 = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/fastrand/1.7.0/download"],
@@ -790,7 +807,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__fnv-1.0.7",
+        name = "cui__fnv-1.0.7",
         sha256 = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/fnv/1.0.7/download"],
@@ -800,7 +817,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__form_urlencoded-1.0.1",
+        name = "cui__form_urlencoded-1.0.1",
         sha256 = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/form_urlencoded/1.0.1/download"],
@@ -810,7 +827,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__fuchsia-cprng-0.1.1",
+        name = "cui__fuchsia-cprng-0.1.1",
         sha256 = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/fuchsia-cprng/0.1.1/download"],
@@ -820,7 +837,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__generic-array-0.12.4",
+        name = "cui__generic-array-0.12.4",
         sha256 = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/generic-array/0.12.4/download"],
@@ -830,7 +847,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__generic-array-0.14.5",
+        name = "cui__generic-array-0.14.5",
         sha256 = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/generic-array/0.14.5/download"],
@@ -840,37 +857,37 @@
 
     maybe(
         http_archive,
-        name = "crate_index__getrandom-0.2.5",
-        sha256 = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77",
+        name = "cui__getrandom-0.2.7",
+        sha256 = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/getrandom/0.2.5/download"],
-        strip_prefix = "getrandom-0.2.5",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.getrandom-0.2.5.bazel"),
+        urls = ["https://crates.io/api/v1/crates/getrandom/0.2.7/download"],
+        strip_prefix = "getrandom-0.2.7",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.getrandom-0.2.7.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__git2-0.14.1",
-        sha256 = "6e7d3b96ec1fcaa8431cf04a4f1ef5caafe58d5cf7bcc31f09c1626adddb0ffe",
+        name = "cui__git2-0.14.4",
+        sha256 = "d0155506aab710a86160ddb504a480d2964d7ab5b9e62419be69e0032bc5931c",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/git2/0.14.1/download"],
-        strip_prefix = "git2-0.14.1",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.git2-0.14.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/git2/0.14.4/download"],
+        strip_prefix = "git2-0.14.4",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.git2-0.14.4.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__globset-0.4.8",
-        sha256 = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd",
+        name = "cui__globset-0.4.9",
+        sha256 = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/globset/0.4.8/download"],
-        strip_prefix = "globset-0.4.8",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.globset-0.4.8.bazel"),
+        urls = ["https://crates.io/api/v1/crates/globset/0.4.9/download"],
+        strip_prefix = "globset-0.4.9",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.globset-0.4.9.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__globwalk-0.8.1",
+        name = "cui__globwalk-0.8.1",
         sha256 = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/globwalk/0.8.1/download"],
@@ -880,17 +897,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__hashbrown-0.11.2",
-        sha256 = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e",
+        name = "cui__hashbrown-0.12.1",
+        sha256 = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/hashbrown/0.11.2/download"],
-        strip_prefix = "hashbrown-0.11.2",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.hashbrown-0.11.2.bazel"),
+        urls = ["https://crates.io/api/v1/crates/hashbrown/0.12.1/download"],
+        strip_prefix = "hashbrown-0.12.1",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.hashbrown-0.12.1.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__heck-0.4.0",
+        name = "cui__heck-0.4.0",
         sha256 = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/heck/0.4.0/download"],
@@ -900,7 +917,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__hermit-abi-0.1.19",
+        name = "cui__hermit-abi-0.1.19",
         sha256 = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/hermit-abi/0.1.19/download"],
@@ -910,7 +927,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__hex-0.4.3",
+        name = "cui__hex-0.4.3",
         sha256 = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/hex/0.4.3/download"],
@@ -920,7 +937,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__home-0.5.3",
+        name = "cui__home-0.5.3",
         sha256 = "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/home/0.5.3/download"],
@@ -930,7 +947,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__humansize-1.1.1",
+        name = "cui__humansize-1.1.1",
         sha256 = "02296996cb8796d7c6e3bc2d9211b7802812d36999a51bb754123ead7d37d026",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/humansize/1.1.1/download"],
@@ -940,7 +957,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__idna-0.2.3",
+        name = "cui__idna-0.2.3",
         sha256 = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/idna/0.2.3/download"],
@@ -950,7 +967,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__ignore-0.4.18",
+        name = "cui__ignore-0.4.18",
         sha256 = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/ignore/0.4.18/download"],
@@ -960,17 +977,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__indexmap-1.8.0",
-        sha256 = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223",
+        name = "cui__indexmap-1.9.1",
+        sha256 = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/indexmap/1.8.0/download"],
-        strip_prefix = "indexmap-1.8.0",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.indexmap-1.8.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/indexmap/1.9.1/download"],
+        strip_prefix = "indexmap-1.9.1",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.indexmap-1.9.1.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__instant-0.1.12",
+        name = "cui__instant-0.1.12",
         sha256 = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/instant/0.1.12/download"],
@@ -980,17 +997,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__itoa-1.0.1",
-        sha256 = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35",
+        name = "cui__itoa-1.0.2",
+        sha256 = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/itoa/1.0.1/download"],
-        strip_prefix = "itoa-1.0.1",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.itoa-1.0.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/itoa/1.0.2/download"],
+        strip_prefix = "itoa-1.0.2",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.itoa-1.0.2.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__jobserver-0.1.24",
+        name = "cui__jobserver-0.1.24",
         sha256 = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/jobserver/0.1.24/download"],
@@ -1000,7 +1017,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__lazy_static-1.4.0",
+        name = "cui__lazy_static-1.4.0",
         sha256 = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/lazy_static/1.4.0/download"],
@@ -1010,47 +1027,47 @@
 
     maybe(
         http_archive,
-        name = "crate_index__libc-0.2.119",
-        sha256 = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4",
+        name = "cui__libc-0.2.126",
+        sha256 = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/libc/0.2.119/download"],
-        strip_prefix = "libc-0.2.119",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.libc-0.2.119.bazel"),
+        urls = ["https://crates.io/api/v1/crates/libc/0.2.126/download"],
+        strip_prefix = "libc-0.2.126",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.libc-0.2.126.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__libgit2-sys-0.13.1-1.4.2",
-        sha256 = "43e598aa7a4faedf1ea1b4608f582b06f0f40211eec551b7ef36019ae3f62def",
+        name = "cui__libgit2-sys-0.13.4-1.4.2",
+        sha256 = "d0fa6563431ede25f5cc7f6d803c6afbc1c5d3ad3d4925d12c882bf2b526f5d1",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/libgit2-sys/0.13.1+1.4.2/download"],
-        strip_prefix = "libgit2-sys-0.13.1+1.4.2",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.libgit2-sys-0.13.1+1.4.2.bazel"),
+        urls = ["https://crates.io/api/v1/crates/libgit2-sys/0.13.4+1.4.2/download"],
+        strip_prefix = "libgit2-sys-0.13.4+1.4.2",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.libgit2-sys-0.13.4+1.4.2.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__libz-sys-1.1.3",
-        sha256 = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66",
+        name = "cui__libz-sys-1.1.8",
+        sha256 = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/libz-sys/1.1.3/download"],
-        strip_prefix = "libz-sys-1.1.3",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.libz-sys-1.1.3.bazel"),
+        urls = ["https://crates.io/api/v1/crates/libz-sys/1.1.8/download"],
+        strip_prefix = "libz-sys-1.1.8",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.libz-sys-1.1.8.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__log-0.4.14",
-        sha256 = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710",
+        name = "cui__log-0.4.17",
+        sha256 = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/log/0.4.14/download"],
-        strip_prefix = "log-0.4.14",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.log-0.4.14.bazel"),
+        urls = ["https://crates.io/api/v1/crates/log/0.4.17/download"],
+        strip_prefix = "log-0.4.17",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.log-0.4.17.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__maplit-1.0.2",
+        name = "cui__maplit-1.0.2",
         sha256 = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/maplit/1.0.2/download"],
@@ -1060,7 +1077,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__matches-0.1.9",
+        name = "cui__matches-0.1.9",
         sha256 = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/matches/0.1.9/download"],
@@ -1070,17 +1087,27 @@
 
     maybe(
         http_archive,
-        name = "crate_index__memchr-2.4.1",
-        sha256 = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a",
+        name = "cui__memchr-2.5.0",
+        sha256 = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/memchr/2.4.1/download"],
-        strip_prefix = "memchr-2.4.1",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.memchr-2.4.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/memchr/2.5.0/download"],
+        strip_prefix = "memchr-2.5.0",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.memchr-2.5.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__num-0.1.42",
+        name = "cui__normpath-0.3.2",
+        sha256 = "04aaf5e9cb0fbf883cc0423159eacdf96a9878022084b35c462c428cab73bcaf",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/normpath/0.3.2/download"],
+        strip_prefix = "normpath-0.3.2",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.normpath-0.3.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "cui__num-0.1.42",
         sha256 = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/num/0.1.42/download"],
@@ -1090,7 +1117,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__num-bigint-0.1.44",
+        name = "cui__num-bigint-0.1.44",
         sha256 = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/num-bigint/0.1.44/download"],
@@ -1100,7 +1127,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__num-complex-0.1.43",
+        name = "cui__num-complex-0.1.43",
         sha256 = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/num-complex/0.1.43/download"],
@@ -1110,27 +1137,27 @@
 
     maybe(
         http_archive,
-        name = "crate_index__num-integer-0.1.44",
-        sha256 = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db",
+        name = "cui__num-integer-0.1.45",
+        sha256 = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/num-integer/0.1.44/download"],
-        strip_prefix = "num-integer-0.1.44",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.num-integer-0.1.44.bazel"),
+        urls = ["https://crates.io/api/v1/crates/num-integer/0.1.45/download"],
+        strip_prefix = "num-integer-0.1.45",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.num-integer-0.1.45.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__num-iter-0.1.42",
-        sha256 = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59",
+        name = "cui__num-iter-0.1.43",
+        sha256 = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/num-iter/0.1.42/download"],
-        strip_prefix = "num-iter-0.1.42",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.num-iter-0.1.42.bazel"),
+        urls = ["https://crates.io/api/v1/crates/num-iter/0.1.43/download"],
+        strip_prefix = "num-iter-0.1.43",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.num-iter-0.1.43.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__num-rational-0.1.42",
+        name = "cui__num-rational-0.1.42",
         sha256 = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/num-rational/0.1.42/download"],
@@ -1140,17 +1167,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__num-traits-0.2.14",
-        sha256 = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290",
+        name = "cui__num-traits-0.2.15",
+        sha256 = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/num-traits/0.2.14/download"],
-        strip_prefix = "num-traits-0.2.14",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.num-traits-0.2.14.bazel"),
+        urls = ["https://crates.io/api/v1/crates/num-traits/0.2.15/download"],
+        strip_prefix = "num-traits-0.2.15",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.num-traits-0.2.15.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__num_cpus-1.13.1",
+        name = "cui__num_cpus-1.13.1",
         sha256 = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/num_cpus/1.13.1/download"],
@@ -1160,17 +1187,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__once_cell-1.9.0",
-        sha256 = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5",
+        name = "cui__once_cell-1.13.0",
+        sha256 = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/once_cell/1.9.0/download"],
-        strip_prefix = "once_cell-1.9.0",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.once_cell-1.9.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/once_cell/1.13.0/download"],
+        strip_prefix = "once_cell-1.13.0",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.once_cell-1.13.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__opaque-debug-0.2.3",
+        name = "cui__opaque-debug-0.2.3",
         sha256 = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/opaque-debug/0.2.3/download"],
@@ -1180,17 +1207,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__os_str_bytes-6.0.0",
-        sha256 = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64",
+        name = "cui__os_str_bytes-6.1.0",
+        sha256 = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/os_str_bytes/6.0.0/download"],
-        strip_prefix = "os_str_bytes-6.0.0",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.os_str_bytes-6.0.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/os_str_bytes/6.1.0/download"],
+        strip_prefix = "os_str_bytes-6.1.0",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.os_str_bytes-6.1.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__parse-zoneinfo-0.3.0",
+        name = "cui__parse-zoneinfo-0.3.0",
         sha256 = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/parse-zoneinfo/0.3.0/download"],
@@ -1200,7 +1227,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__pathdiff-0.2.1",
+        name = "cui__pathdiff-0.2.1",
         sha256 = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/pathdiff/0.2.1/download"],
@@ -1210,7 +1237,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__percent-encoding-2.1.0",
+        name = "cui__percent-encoding-2.1.0",
         sha256 = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/percent-encoding/2.1.0/download"],
@@ -1220,7 +1247,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__pest-2.1.3",
+        name = "cui__pest-2.1.3",
         sha256 = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/pest/2.1.3/download"],
@@ -1230,7 +1257,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__pest_derive-2.1.0",
+        name = "cui__pest_derive-2.1.0",
         sha256 = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/pest_derive/2.1.0/download"],
@@ -1240,7 +1267,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__pest_generator-2.1.3",
+        name = "cui__pest_generator-2.1.3",
         sha256 = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/pest_generator/2.1.3/download"],
@@ -1250,7 +1277,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__pest_meta-2.1.3",
+        name = "cui__pest_meta-2.1.3",
         sha256 = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/pest_meta/2.1.3/download"],
@@ -1260,7 +1287,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__phf-0.10.1",
+        name = "cui__phf-0.10.1",
         sha256 = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/phf/0.10.1/download"],
@@ -1270,7 +1297,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__phf_codegen-0.10.0",
+        name = "cui__phf_codegen-0.10.0",
         sha256 = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/phf_codegen/0.10.0/download"],
@@ -1280,7 +1307,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__phf_generator-0.10.0",
+        name = "cui__phf_generator-0.10.0",
         sha256 = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/phf_generator/0.10.0/download"],
@@ -1290,7 +1317,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__phf_shared-0.10.0",
+        name = "cui__phf_shared-0.10.0",
         sha256 = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/phf_shared/0.10.0/download"],
@@ -1300,17 +1327,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__pkg-config-0.3.24",
-        sha256 = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe",
+        name = "cui__pkg-config-0.3.25",
+        sha256 = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/pkg-config/0.3.24/download"],
-        strip_prefix = "pkg-config-0.3.24",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.pkg-config-0.3.24.bazel"),
+        urls = ["https://crates.io/api/v1/crates/pkg-config/0.3.25/download"],
+        strip_prefix = "pkg-config-0.3.25",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.pkg-config-0.3.25.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__ppv-lite86-0.2.16",
+        name = "cui__ppv-lite86-0.2.16",
         sha256 = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/ppv-lite86/0.2.16/download"],
@@ -1320,7 +1347,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__proc-macro-error-1.0.4",
+        name = "cui__proc-macro-error-1.0.4",
         sha256 = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/proc-macro-error/1.0.4/download"],
@@ -1330,7 +1357,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__proc-macro-error-attr-1.0.4",
+        name = "cui__proc-macro-error-attr-1.0.4",
         sha256 = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/proc-macro-error-attr/1.0.4/download"],
@@ -1340,27 +1367,27 @@
 
     maybe(
         http_archive,
-        name = "crate_index__proc-macro2-1.0.36",
-        sha256 = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029",
+        name = "cui__proc-macro2-1.0.40",
+        sha256 = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/proc-macro2/1.0.36/download"],
-        strip_prefix = "proc-macro2-1.0.36",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.proc-macro2-1.0.36.bazel"),
+        urls = ["https://crates.io/api/v1/crates/proc-macro2/1.0.40/download"],
+        strip_prefix = "proc-macro2-1.0.40",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.proc-macro2-1.0.40.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__quote-1.0.15",
-        sha256 = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145",
+        name = "cui__quote-1.0.20",
+        sha256 = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/quote/1.0.15/download"],
-        strip_prefix = "quote-1.0.15",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.quote-1.0.15.bazel"),
+        urls = ["https://crates.io/api/v1/crates/quote/1.0.20/download"],
+        strip_prefix = "quote-1.0.20",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.quote-1.0.20.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__rand-0.4.6",
+        name = "cui__rand-0.4.6",
         sha256 = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rand/0.4.6/download"],
@@ -1370,7 +1397,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__rand-0.8.5",
+        name = "cui__rand-0.8.5",
         sha256 = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rand/0.8.5/download"],
@@ -1380,7 +1407,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__rand_chacha-0.3.1",
+        name = "cui__rand_chacha-0.3.1",
         sha256 = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rand_chacha/0.3.1/download"],
@@ -1390,7 +1417,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__rand_core-0.3.1",
+        name = "cui__rand_core-0.3.1",
         sha256 = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rand_core/0.3.1/download"],
@@ -1400,7 +1427,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__rand_core-0.4.2",
+        name = "cui__rand_core-0.4.2",
         sha256 = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rand_core/0.4.2/download"],
@@ -1410,7 +1437,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__rand_core-0.6.3",
+        name = "cui__rand_core-0.6.3",
         sha256 = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rand_core/0.6.3/download"],
@@ -1420,7 +1447,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__rdrand-0.4.0",
+        name = "cui__rdrand-0.4.0",
         sha256 = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rdrand/0.4.0/download"],
@@ -1430,37 +1457,37 @@
 
     maybe(
         http_archive,
-        name = "crate_index__redox_syscall-0.2.11",
-        sha256 = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c",
+        name = "cui__redox_syscall-0.2.13",
+        sha256 = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/redox_syscall/0.2.11/download"],
-        strip_prefix = "redox_syscall-0.2.11",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.redox_syscall-0.2.11.bazel"),
+        urls = ["https://crates.io/api/v1/crates/redox_syscall/0.2.13/download"],
+        strip_prefix = "redox_syscall-0.2.13",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.redox_syscall-0.2.13.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__regex-1.5.4",
-        sha256 = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461",
+        name = "cui__regex-1.6.0",
+        sha256 = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/regex/1.5.4/download"],
-        strip_prefix = "regex-1.5.4",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.regex-1.5.4.bazel"),
+        urls = ["https://crates.io/api/v1/crates/regex/1.6.0/download"],
+        strip_prefix = "regex-1.6.0",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.regex-1.6.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__regex-syntax-0.6.25",
-        sha256 = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b",
+        name = "cui__regex-syntax-0.6.27",
+        sha256 = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/regex-syntax/0.6.25/download"],
-        strip_prefix = "regex-syntax-0.6.25",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.regex-syntax-0.6.25.bazel"),
+        urls = ["https://crates.io/api/v1/crates/regex-syntax/0.6.27/download"],
+        strip_prefix = "regex-syntax-0.6.27",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.regex-syntax-0.6.27.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__remove_dir_all-0.5.3",
+        name = "cui__remove_dir_all-0.5.3",
         sha256 = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/remove_dir_all/0.5.3/download"],
@@ -1470,7 +1497,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__rustc-hash-1.1.0",
+        name = "cui__rustc-hash-1.1.0",
         sha256 = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rustc-hash/1.1.0/download"],
@@ -1480,7 +1507,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__rustc-serialize-0.3.24",
+        name = "cui__rustc-serialize-0.3.24",
         sha256 = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/rustc-serialize/0.3.24/download"],
@@ -1490,17 +1517,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__ryu-1.0.9",
-        sha256 = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f",
+        name = "cui__ryu-1.0.10",
+        sha256 = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/ryu/1.0.9/download"],
-        strip_prefix = "ryu-1.0.9",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.ryu-1.0.9.bazel"),
+        urls = ["https://crates.io/api/v1/crates/ryu/1.0.10/download"],
+        strip_prefix = "ryu-1.0.10",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.ryu-1.0.10.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__same-file-1.0.6",
+        name = "cui__same-file-1.0.6",
         sha256 = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/same-file/1.0.6/download"],
@@ -1510,47 +1537,47 @@
 
     maybe(
         http_archive,
-        name = "crate_index__semver-1.0.6",
-        sha256 = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d",
+        name = "cui__semver-1.0.12",
+        sha256 = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/semver/1.0.6/download"],
-        strip_prefix = "semver-1.0.6",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.semver-1.0.6.bazel"),
+        urls = ["https://crates.io/api/v1/crates/semver/1.0.12/download"],
+        strip_prefix = "semver-1.0.12",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.semver-1.0.12.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__serde-1.0.136",
-        sha256 = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789",
+        name = "cui__serde-1.0.138",
+        sha256 = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/serde/1.0.136/download"],
-        strip_prefix = "serde-1.0.136",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.serde-1.0.136.bazel"),
+        urls = ["https://crates.io/api/v1/crates/serde/1.0.138/download"],
+        strip_prefix = "serde-1.0.138",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.serde-1.0.138.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__serde_derive-1.0.136",
-        sha256 = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9",
+        name = "cui__serde_derive-1.0.138",
+        sha256 = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/serde_derive/1.0.136/download"],
-        strip_prefix = "serde_derive-1.0.136",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.serde_derive-1.0.136.bazel"),
+        urls = ["https://crates.io/api/v1/crates/serde_derive/1.0.138/download"],
+        strip_prefix = "serde_derive-1.0.138",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.serde_derive-1.0.138.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__serde_json-1.0.79",
-        sha256 = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95",
+        name = "cui__serde_json-1.0.82",
+        sha256 = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/serde_json/1.0.79/download"],
-        strip_prefix = "serde_json-1.0.79",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.serde_json-1.0.79.bazel"),
+        urls = ["https://crates.io/api/v1/crates/serde_json/1.0.82/download"],
+        strip_prefix = "serde_json-1.0.82",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.serde_json-1.0.82.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__sha-1-0.8.2",
+        name = "cui__sha-1-0.8.2",
         sha256 = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/sha-1/0.8.2/download"],
@@ -1560,7 +1587,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__sha2-0.10.2",
+        name = "cui__sha2-0.10.2",
         sha256 = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/sha2/0.10.2/download"],
@@ -1570,17 +1597,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__siphasher-0.3.9",
-        sha256 = "a86232ab60fa71287d7f2ddae4a7073f6b7aac33631c3015abb556f08c6d0a3e",
+        name = "cui__siphasher-0.3.10",
+        sha256 = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/siphasher/0.3.9/download"],
-        strip_prefix = "siphasher-0.3.9",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.siphasher-0.3.9.bazel"),
+        urls = ["https://crates.io/api/v1/crates/siphasher/0.3.10/download"],
+        strip_prefix = "siphasher-0.3.10",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.siphasher-0.3.10.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__slug-0.1.4",
+        name = "cui__slug-0.1.4",
         sha256 = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/slug/0.1.4/download"],
@@ -1590,27 +1617,27 @@
 
     maybe(
         http_archive,
-        name = "crate_index__smallvec-1.8.0",
-        sha256 = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83",
+        name = "cui__smallvec-1.9.0",
+        sha256 = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/smallvec/1.8.0/download"],
-        strip_prefix = "smallvec-1.8.0",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.smallvec-1.8.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/smallvec/1.9.0/download"],
+        strip_prefix = "smallvec-1.9.0",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.smallvec-1.9.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__smartstring-1.0.0",
-        sha256 = "ea958ad90cacc8ece7f238fde3671e1b350ee1741964edf2a22fd16f60224163",
+        name = "cui__smartstring-1.0.1",
+        sha256 = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/smartstring/1.0.0/download"],
-        strip_prefix = "smartstring-1.0.0",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.smartstring-1.0.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/smartstring/1.0.1/download"],
+        strip_prefix = "smartstring-1.0.1",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.smartstring-1.0.1.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__smawk-0.3.1",
+        name = "cui__smawk-0.3.1",
         sha256 = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/smawk/0.3.1/download"],
@@ -1620,7 +1647,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__spectral-0.6.0",
+        name = "cui__spectral-0.6.0",
         sha256 = "ae3c15181f4b14e52eeaac3efaeec4d2764716ce9c86da0c934c3e318649c5ba",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/spectral/0.6.0/download"],
@@ -1630,7 +1657,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__static_assertions-1.1.0",
+        name = "cui__static_assertions-1.1.0",
         sha256 = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/static_assertions/1.1.0/download"],
@@ -1640,7 +1667,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__strsim-0.10.0",
+        name = "cui__strsim-0.10.0",
         sha256 = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/strsim/0.10.0/download"],
@@ -1650,17 +1677,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__syn-1.0.86",
-        sha256 = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b",
+        name = "cui__syn-1.0.98",
+        sha256 = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/syn/1.0.86/download"],
-        strip_prefix = "syn-1.0.86",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.syn-1.0.86.bazel"),
+        urls = ["https://crates.io/api/v1/crates/syn/1.0.98/download"],
+        strip_prefix = "syn-1.0.98",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.syn-1.0.98.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__tempfile-3.3.0",
+        name = "cui__tempfile-3.3.0",
         sha256 = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/tempfile/3.3.0/download"],
@@ -1670,17 +1697,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__tera-1.15.0",
-        sha256 = "d3cac831b615c25bcef632d1cabf864fa05813baad3d526829db18eb70e8b58d",
+        name = "cui__tera-1.16.0",
+        sha256 = "7c9783d6ff395ae80cf17ed9a25360e7ba37742a79fa8fddabb073c5c7c8856d",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tera/1.15.0/download"],
-        strip_prefix = "tera-1.15.0",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.tera-1.15.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tera/1.16.0/download"],
+        strip_prefix = "tera-1.16.0",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.tera-1.16.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__termcolor-1.1.3",
+        name = "cui__termcolor-1.1.3",
         sha256 = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/termcolor/1.1.3/download"],
@@ -1690,17 +1717,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__textwrap-0.14.2",
-        sha256 = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80",
-        type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/textwrap/0.14.2/download"],
-        strip_prefix = "textwrap-0.14.2",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.textwrap-0.14.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "crate_index__textwrap-0.15.0",
+        name = "cui__textwrap-0.15.0",
         sha256 = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/textwrap/0.15.0/download"],
@@ -1710,7 +1727,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__thread_local-1.1.4",
+        name = "cui__thread_local-1.1.4",
         sha256 = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/thread_local/1.1.4/download"],
@@ -1720,17 +1737,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__tinyvec-1.5.1",
-        sha256 = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2",
+        name = "cui__tinyvec-1.6.0",
+        sha256 = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tinyvec/1.5.1/download"],
-        strip_prefix = "tinyvec-1.5.1",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.tinyvec-1.5.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tinyvec/1.6.0/download"],
+        strip_prefix = "tinyvec-1.6.0",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.tinyvec-1.6.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__tinyvec_macros-0.1.0",
+        name = "cui__tinyvec_macros-0.1.0",
         sha256 = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/tinyvec_macros/0.1.0/download"],
@@ -1740,17 +1757,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__toml-0.5.8",
-        sha256 = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa",
+        name = "cui__toml-0.5.9",
+        sha256 = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/toml/0.5.8/download"],
-        strip_prefix = "toml-0.5.8",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.toml-0.5.8.bazel"),
+        urls = ["https://crates.io/api/v1/crates/toml/0.5.9/download"],
+        strip_prefix = "toml-0.5.9",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.toml-0.5.9.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__typenum-1.15.0",
+        name = "cui__typenum-1.15.0",
         sha256 = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/typenum/1.15.0/download"],
@@ -1760,27 +1777,27 @@
 
     maybe(
         http_archive,
-        name = "crate_index__ucd-trie-0.1.3",
-        sha256 = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c",
+        name = "cui__ucd-trie-0.1.4",
+        sha256 = "89570599c4fe5585de2b388aab47e99f7fa4e9238a1399f707a02e356058141c",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/ucd-trie/0.1.3/download"],
-        strip_prefix = "ucd-trie-0.1.3",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.ucd-trie-0.1.3.bazel"),
+        urls = ["https://crates.io/api/v1/crates/ucd-trie/0.1.4/download"],
+        strip_prefix = "ucd-trie-0.1.4",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.ucd-trie-0.1.4.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__uncased-0.9.6",
-        sha256 = "5baeed7327e25054889b9bd4f975f32e5f4c5d434042d59ab6cd4142c0a76ed0",
+        name = "cui__uncased-0.9.7",
+        sha256 = "09b01702b0fd0b3fadcf98e098780badda8742d4f4a7676615cad90e8ac73622",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/uncased/0.9.6/download"],
-        strip_prefix = "uncased-0.9.6",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.uncased-0.9.6.bazel"),
+        urls = ["https://crates.io/api/v1/crates/uncased/0.9.7/download"],
+        strip_prefix = "uncased-0.9.7",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.uncased-0.9.7.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__unic-char-property-0.9.0",
+        name = "cui__unic-char-property-0.9.0",
         sha256 = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/unic-char-property/0.9.0/download"],
@@ -1790,7 +1807,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__unic-char-range-0.9.0",
+        name = "cui__unic-char-range-0.9.0",
         sha256 = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/unic-char-range/0.9.0/download"],
@@ -1800,7 +1817,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__unic-common-0.9.0",
+        name = "cui__unic-common-0.9.0",
         sha256 = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/unic-common/0.9.0/download"],
@@ -1810,7 +1827,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__unic-segment-0.9.0",
+        name = "cui__unic-segment-0.9.0",
         sha256 = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/unic-segment/0.9.0/download"],
@@ -1820,7 +1837,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__unic-ucd-segment-0.9.0",
+        name = "cui__unic-ucd-segment-0.9.0",
         sha256 = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/unic-ucd-segment/0.9.0/download"],
@@ -1830,7 +1847,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__unic-ucd-version-0.9.0",
+        name = "cui__unic-ucd-version-0.9.0",
         sha256 = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/unic-ucd-version/0.9.0/download"],
@@ -1840,17 +1857,27 @@
 
     maybe(
         http_archive,
-        name = "crate_index__unicode-bidi-0.3.7",
-        sha256 = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f",
+        name = "cui__unicode-bidi-0.3.8",
+        sha256 = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/unicode-bidi/0.3.7/download"],
-        strip_prefix = "unicode-bidi-0.3.7",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.unicode-bidi-0.3.7.bazel"),
+        urls = ["https://crates.io/api/v1/crates/unicode-bidi/0.3.8/download"],
+        strip_prefix = "unicode-bidi-0.3.8",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.unicode-bidi-0.3.8.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__unicode-linebreak-0.1.2",
+        name = "cui__unicode-ident-1.0.1",
+        sha256 = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unicode-ident/1.0.1/download"],
+        strip_prefix = "unicode-ident-1.0.1",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.unicode-ident-1.0.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "cui__unicode-linebreak-0.1.2",
         sha256 = "3a52dcaab0c48d931f7cc8ef826fa51690a08e1ea55117ef26f89864f532383f",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/unicode-linebreak/0.1.2/download"],
@@ -1860,17 +1887,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__unicode-normalization-0.1.19",
-        sha256 = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9",
+        name = "cui__unicode-normalization-0.1.21",
+        sha256 = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/unicode-normalization/0.1.19/download"],
-        strip_prefix = "unicode-normalization-0.1.19",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.unicode-normalization-0.1.19.bazel"),
+        urls = ["https://crates.io/api/v1/crates/unicode-normalization/0.1.21/download"],
+        strip_prefix = "unicode-normalization-0.1.21",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.unicode-normalization-0.1.21.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__unicode-width-0.1.9",
+        name = "cui__unicode-width-0.1.9",
         sha256 = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/unicode-width/0.1.9/download"],
@@ -1880,17 +1907,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__unicode-xid-0.2.2",
-        sha256 = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3",
-        type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/unicode-xid/0.2.2/download"],
-        strip_prefix = "unicode-xid-0.2.2",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.unicode-xid-0.2.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "crate_index__url-2.2.2",
+        name = "cui__url-2.2.2",
         sha256 = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/url/2.2.2/download"],
@@ -1900,7 +1917,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__vcpkg-0.2.15",
+        name = "cui__vcpkg-0.2.15",
         sha256 = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/vcpkg/0.2.15/download"],
@@ -1910,7 +1927,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__version_check-0.9.4",
+        name = "cui__version_check-0.9.4",
         sha256 = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/version_check/0.9.4/download"],
@@ -1920,7 +1937,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__walkdir-2.3.2",
+        name = "cui__walkdir-2.3.2",
         sha256 = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/walkdir/2.3.2/download"],
@@ -1930,17 +1947,17 @@
 
     maybe(
         http_archive,
-        name = "crate_index__wasi-0.10.2-wasi-snapshot-preview1",
-        sha256 = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6",
+        name = "cui__wasi-0.11.0-wasi-snapshot-preview1",
+        sha256 = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/wasi/0.10.2+wasi-snapshot-preview1/download"],
-        strip_prefix = "wasi-0.10.2+wasi-snapshot-preview1",
-        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.wasi-0.10.2+wasi-snapshot-preview1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/wasi/0.11.0+wasi-snapshot-preview1/download"],
+        strip_prefix = "wasi-0.11.0+wasi-snapshot-preview1",
+        build_file = Label("@rules_rust//crate_universe/3rdparty/crates:BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crate_index__winapi-0.3.9",
+        name = "cui__winapi-0.3.9",
         sha256 = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/winapi/0.3.9/download"],
@@ -1950,7 +1967,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__winapi-i686-pc-windows-gnu-0.4.0",
+        name = "cui__winapi-i686-pc-windows-gnu-0.4.0",
         sha256 = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download"],
@@ -1960,7 +1977,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__winapi-util-0.1.5",
+        name = "cui__winapi-util-0.1.5",
         sha256 = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/winapi-util/0.1.5/download"],
@@ -1970,7 +1987,7 @@
 
     maybe(
         http_archive,
-        name = "crate_index__winapi-x86_64-pc-windows-gnu-0.4.0",
+        name = "cui__winapi-x86_64-pc-windows-gnu-0.4.0",
         sha256 = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f",
         type = "tar.gz",
         urls = ["https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download"],
diff --git a/third_party/rules_rust/crate_universe/BUILD.bazel b/third_party/rules_rust/crate_universe/BUILD.bazel
index 6ef161c..a99a90c 100644
--- a/third_party/rules_rust/crate_universe/BUILD.bazel
+++ b/third_party/rules_rust/crate_universe/BUILD.bazel
@@ -1,39 +1,24 @@
 load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
-load("@crate_index//:defs.bzl", "aliases", "all_crate_deps")
-load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_doc", "rust_library", "rust_test")
+load("@cui//:defs.bzl", "aliases", "all_crate_deps")
+load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_doc", "rust_doc_test", "rust_library", "rust_test")
 load("//crate_universe:version.bzl", "VERSION")
 
 exports_files(
     glob(["src/**"]) + [
         "Cargo.toml",
         "Cargo.lock",
-        "Cargo.Bazel.lock",
         "defs.bzl",
+        "docs.bzl",
     ],
     visibility = ["//visibility:public"],
 )
 
 filegroup(
-    name = "distro",
-    srcs = glob(["*.bzl"]) + [
-        ":rust_srcs",
-        "//crate_universe/3rdparty:distro",
-        "//crate_universe/private:distro",
-        "//crate_universe/tools:distro",
-        "BUILD.bazel",
-        "Cargo.Bazel.lock",
-        "Cargo.lock",
-        "Cargo.toml",
-        "README.md",
-    ],
-    visibility = ["//:__subpackages__"],
-)
-
-filegroup(
     name = "bzl_srcs",
     srcs = glob(["*.bzl"]) + [
         "//crate_universe/3rdparty:bzl_srcs",
         "//crate_universe/private:bzl_srcs",
+        "//crate_universe/tools:bzl_srcs",
     ],
     visibility = ["//visibility:public"],
 )
@@ -54,11 +39,6 @@
     visibility = ["//:__subpackages__"],
 )
 
-TAGS = [
-    # https://github.com/rust-lang/rust-clippy/issues/8470
-    "noclippy",
-]
-
 rust_library(
     name = "cargo_bazel",
     srcs = glob(
@@ -70,8 +50,13 @@
         include = ["src/**"],
         exclude = ["src/**/*.rs"],
     ),
+    edition = "2018",
     proc_macro_deps = all_crate_deps(proc_macro = True),
-    tags = TAGS,
+    # This target embeds additional, stamping related information (see
+    # https://docs.bazel.build/versions/main/user-manual.html#workspace_status
+    # for more information). Set stamp = -1 to indicate that it should respect
+    # the value of the --stamp comandline flag.
+    stamp = -1,
     version = VERSION,
     visibility = ["//visibility:public"],
     deps = all_crate_deps(normal = True),
@@ -80,7 +65,7 @@
 rust_binary(
     name = "cargo_bazel_bin",
     srcs = ["src/main.rs"],
-    tags = TAGS,
+    edition = "2018",
     version = VERSION,
     visibility = ["//visibility:public"],
     deps = [":cargo_bazel"],
@@ -97,17 +82,17 @@
     aliases = aliases(),
     crate = ":cargo_bazel",
     data = glob(["test_data/**"]) + [
-        "@rules_rust//rust/toolchain:current_exec_cargo_files",
-        "@rules_rust//rust/toolchain:current_exec_rustc_files",
+        "@rules_rust//rust/toolchain:current_cargo_files",
+        "@rules_rust//rust/toolchain:current_rustc_files",
+        "//crate_universe/test_data/serialized_configs",
     ],
     proc_macro_deps = all_crate_deps(
         proc_macro_dev = True,
     ),
     rustc_env = {
-        "CARGO": "$(rootpath @rules_rust//rust/toolchain:current_exec_cargo_files)",
-        "RUSTC": "$(rootpath @rules_rust//rust/toolchain:current_exec_rustc_files)",
+        "CARGO": "$(rootpath @rules_rust//rust/toolchain:current_cargo_files)",
+        "RUSTC": "$(rootpath @rules_rust//rust/toolchain:current_rustc_files)",
     },
-    tags = TAGS,
     deps = [
         "@rules_rust//tools/runfiles",
     ] + all_crate_deps(
@@ -121,10 +106,7 @@
     visibility = ["//visibility:public"],
 )
 
-# `rust_doc_test` does not currently work. See:
-# https://github.com/bazelbuild/rules_rust/issues/980
-#
-# rust_doc_test(
-#     name = "rustdoc_test",
-#     crate = ":cargo_bazel",
-# )
+rust_doc_test(
+    name = "rustdoc_test",
+    crate = ":cargo_bazel",
+)
diff --git a/third_party/rules_rust/crate_universe/Cargo.Bazel.lock b/third_party/rules_rust/crate_universe/Cargo.Bazel.lock
deleted file mode 100644
index 2e894c1..0000000
--- a/third_party/rules_rust/crate_universe/Cargo.Bazel.lock
+++ /dev/null
@@ -1,8022 +0,0 @@
-{
-  "checksum": "f8ab2b6622cba7bb41ac5eb5642bdfcb0bf5c1bd74c34e0245943b445b5c058c",
-  "crates": {
-    "aho-corasick 0.7.18": {
-      "name": "aho-corasick",
-      "version": "0.7.18",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/aho-corasick/0.7.18/download",
-          "sha256": "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "aho_corasick",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "aho_corasick",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.7.18"
-      },
-      "license": "Unlicense/MIT"
-    },
-    "anyhow 1.0.55": {
-      "name": "anyhow",
-      "version": "1.0.55",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/anyhow/1.0.55/download",
-          "sha256": "159bb86af3a200e19a068f4224eae4c8bb2d0fa054c7e5d1cacd5cef95e684cd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "anyhow",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "anyhow",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "anyhow 1.0.55",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.55"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "atty 0.2.14": {
-      "name": "atty",
-      "version": "0.2.14",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/atty/0.2.14/download",
-          "sha256": "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "atty",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "atty",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(target_os = \"hermit\")": [
-              {
-                "id": "hermit-abi 0.1.19",
-                "target": "hermit_abi"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.2.14"
-      },
-      "license": "MIT"
-    },
-    "autocfg 1.1.0": {
-      "name": "autocfg",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/autocfg/1.1.0/download",
-          "sha256": "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "autocfg",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "autocfg",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.1.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "bitflags 1.3.2": {
-      "name": "bitflags",
-      "version": "1.3.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download",
-          "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "bitflags",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "bitflags",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2018",
-        "version": "1.3.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "block-buffer 0.10.2": {
-      "name": "block-buffer",
-      "version": "0.10.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/block-buffer/0.10.2/download",
-          "sha256": "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "block_buffer",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "block_buffer",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "generic-array 0.14.5",
-              "target": "generic_array"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "block-buffer 0.7.3": {
-      "name": "block-buffer",
-      "version": "0.7.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/block-buffer/0.7.3/download",
-          "sha256": "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "block_buffer",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "block_buffer",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "block-padding 0.1.5",
-              "target": "block_padding"
-            },
-            {
-              "id": "byte-tools 0.3.1",
-              "target": "byte_tools"
-            },
-            {
-              "id": "byteorder 1.4.3",
-              "target": "byteorder"
-            },
-            {
-              "id": "generic-array 0.12.4",
-              "target": "generic_array"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.7.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "block-padding 0.1.5": {
-      "name": "block-padding",
-      "version": "0.1.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/block-padding/0.1.5/download",
-          "sha256": "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "block_padding",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "block_padding",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "byte-tools 0.3.1",
-              "target": "byte_tools"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.5"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "bstr 0.2.17": {
-      "name": "bstr",
-      "version": "0.2.17",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/bstr/0.2.17/download",
-          "sha256": "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "bstr",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "bstr",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.17"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "byte-tools 0.3.1": {
-      "name": "byte-tools",
-      "version": "0.3.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/byte-tools/0.3.1/download",
-          "sha256": "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "byte_tools",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "byte_tools",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.3.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "byteorder 1.4.3": {
-      "name": "byteorder",
-      "version": "1.4.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/byteorder/1.4.3/download",
-          "sha256": "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "byteorder",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "byteorder",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.4.3"
-      },
-      "license": "Unlicense OR MIT"
-    },
-    "camino 1.0.7": {
-      "name": "camino",
-      "version": "1.0.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/camino/1.0.7/download",
-          "sha256": "6f3132262930b0522068049f5870a856ab8affc80c70d08b6ecb785771a6fc23"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "camino",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "camino",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "serde",
-          "serde1"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "camino 1.0.7",
-              "target": "build_script_build"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.7"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "cargo-bazel 0.0.28": {
-      "name": "cargo-bazel",
-      "version": "0.0.28",
-      "repository": null,
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cargo_bazel",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "Binary": {
-            "crate_name": "cargo-bazel",
-            "crate_root": "src/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cargo_bazel",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "cargo",
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "anyhow 1.0.55",
-              "target": "anyhow"
-            },
-            {
-              "id": "cargo-lock 7.0.1",
-              "target": "cargo_lock"
-            },
-            {
-              "id": "cargo-platform 0.1.2",
-              "target": "cargo_platform"
-            },
-            {
-              "id": "cargo_metadata 0.14.2",
-              "target": "cargo_metadata"
-            },
-            {
-              "id": "cargo_toml 0.11.4",
-              "target": "cargo_toml"
-            },
-            {
-              "id": "cfg-expr 0.10.2",
-              "target": "cfg_expr"
-            },
-            {
-              "id": "clap 3.1.5",
-              "target": "clap"
-            },
-            {
-              "id": "crates-index 0.18.7",
-              "target": "crates_index"
-            },
-            {
-              "id": "hex 0.4.3",
-              "target": "hex"
-            },
-            {
-              "id": "pathdiff 0.2.1",
-              "target": "pathdiff"
-            },
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            },
-            {
-              "id": "semver 1.0.6",
-              "target": "semver"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "serde_json"
-            },
-            {
-              "id": "sha2 0.10.2",
-              "target": "sha2"
-            },
-            {
-              "id": "tempfile 3.3.0",
-              "target": "tempfile"
-            },
-            {
-              "id": "tera 1.15.0",
-              "target": "tera"
-            },
-            {
-              "id": "textwrap 0.14.2",
-              "target": "textwrap"
-            },
-            {
-              "id": "toml 0.5.8",
-              "target": "toml"
-            }
-          ],
-          "selects": {}
-        },
-        "deps_dev": {
-          "common": [
-            {
-              "id": "spectral 0.6.0",
-              "target": "spectral"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.0.28"
-      },
-      "license": null
-    },
-    "cargo-lock 7.0.1": {
-      "name": "cargo-lock",
-      "version": "7.0.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cargo-lock/7.0.1/download",
-          "sha256": "7fb04b88bd5b2036e30704f95c6ee16f3b5ca3b4ca307da2889d9006648e5c88"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cargo_lock",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "Binary": {
-            "crate_name": "cargo-lock",
-            "crate_root": "src/bin/cargo-lock/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cargo_lock",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "semver 1.0.6",
-              "target": "semver"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "toml 0.5.8",
-              "target": "toml"
-            },
-            {
-              "id": "url 2.2.2",
-              "target": "url"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "7.0.1"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "cargo-platform 0.1.2": {
-      "name": "cargo-platform",
-      "version": "0.1.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cargo-platform/0.1.2/download",
-          "sha256": "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cargo_platform",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cargo_platform",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "cargo_metadata 0.14.2": {
-      "name": "cargo_metadata",
-      "version": "0.14.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cargo_metadata/0.14.2/download",
-          "sha256": "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cargo_metadata",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cargo_metadata",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "camino 1.0.7",
-              "target": "camino"
-            },
-            {
-              "id": "cargo-platform 0.1.2",
-              "target": "cargo_platform"
-            },
-            {
-              "id": "semver 1.0.6",
-              "target": "semver"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "serde_json"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.14.2"
-      },
-      "license": "MIT"
-    },
-    "cargo_toml 0.11.4": {
-      "name": "cargo_toml",
-      "version": "0.11.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cargo_toml/0.11.4/download",
-          "sha256": "4e270ef0cd868745878982f7ce470aa898d0d4bb248af67f0cf66f54617913ef"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cargo_toml",
-            "crate_root": "src/cargo_toml.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cargo_toml",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "toml 0.5.8",
-              "target": "toml"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "serde_derive 1.0.136",
-              "target": "serde_derive"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "0.11.4"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "cc 1.0.73": {
-      "name": "cc",
-      "version": "1.0.73",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cc/1.0.73/download",
-          "sha256": "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cc",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "Binary": {
-            "crate_name": "gcc-shim",
-            "crate_root": "src/bin/gcc-shim.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cc",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "jobserver",
-          "parallel"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "jobserver 0.1.24",
-              "target": "jobserver"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.73"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "cfg-expr 0.10.2": {
-      "name": "cfg-expr",
-      "version": "0.10.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cfg-expr/0.10.2/download",
-          "sha256": "5e068cb2806bbc15b439846dc16c5f89f8599f2c3e4d73d4449d38f9b2f0b6c5"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cfg_expr",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cfg_expr",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "smallvec 1.8.0",
-              "target": "smallvec"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "cfg-if 1.0.0": {
-      "name": "cfg-if",
-      "version": "1.0.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
-          "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cfg_if",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cfg_if",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "chrono 0.4.19": {
-      "name": "chrono",
-      "version": "0.4.19",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/chrono/0.4.19/download",
-          "sha256": "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "chrono",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "chrono",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "clock",
-          "libc",
-          "std",
-          "winapi"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            },
-            {
-              "id": "num-integer 0.1.44",
-              "target": "num_integer"
-            },
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            }
-          ],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.4.19"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "chrono-tz 0.6.1": {
-      "name": "chrono-tz",
-      "version": "0.6.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/chrono-tz/0.6.1/download",
-          "sha256": "58549f1842da3080ce63002102d5bc954c7bc843d4f47818e642abdc36253552"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "chrono_tz",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "chrono_tz",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "chrono 0.4.19",
-              "target": "chrono"
-            },
-            {
-              "id": "chrono-tz 0.6.1",
-              "target": "build_script_build"
-            },
-            {
-              "id": "phf 0.10.1",
-              "target": "phf"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.6.1"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "chrono-tz-build 0.0.2",
-              "target": "chrono_tz_build"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "chrono-tz-build 0.0.2": {
-      "name": "chrono-tz-build",
-      "version": "0.0.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/chrono-tz-build/0.0.2/download",
-          "sha256": "db058d493fb2f65f41861bfed7e3fe6335264a9f0f92710cab5bdf01fef09069"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "chrono_tz_build",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "chrono_tz_build",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "parse-zoneinfo 0.3.0",
-              "target": "parse_zoneinfo"
-            },
-            {
-              "id": "phf 0.10.1",
-              "target": "phf"
-            },
-            {
-              "id": "phf_codegen 0.10.0",
-              "target": "phf_codegen"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.0.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "clap 3.1.5": {
-      "name": "clap",
-      "version": "3.1.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/clap/3.1.5/download",
-          "sha256": "ced1892c55c910c1219e98d6fc8d71f6bddba7905866ce740066d8bfea859312"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "clap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "clap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "atty",
-          "clap_derive",
-          "color",
-          "default",
-          "derive",
-          "env",
-          "lazy_static",
-          "std",
-          "strsim",
-          "suggestions",
-          "termcolor"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "atty 0.2.14",
-              "target": "atty"
-            },
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            },
-            {
-              "id": "indexmap 1.8.0",
-              "target": "indexmap"
-            },
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            },
-            {
-              "id": "os_str_bytes 6.0.0",
-              "target": "os_str_bytes"
-            },
-            {
-              "id": "strsim 0.10.0",
-              "target": "strsim"
-            },
-            {
-              "id": "termcolor 1.1.3",
-              "target": "termcolor"
-            },
-            {
-              "id": "textwrap 0.15.0",
-              "target": "textwrap"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "clap_derive 3.1.4",
-              "target": "clap_derive"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "3.1.5"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "clap_derive 3.1.4": {
-      "name": "clap_derive",
-      "version": "3.1.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/clap_derive/3.1.4/download",
-          "sha256": "da95d038ede1a964ce99f49cbe27a7fb538d1da595e4b4f70b8c8f338d17bf16"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "clap_derive",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "clap_derive",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "heck 0.4.0",
-              "target": "heck"
-            },
-            {
-              "id": "proc-macro-error 1.0.4",
-              "target": "proc_macro_error"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "3.1.4"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "cpufeatures 0.2.1": {
-      "name": "cpufeatures",
-      "version": "0.2.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cpufeatures/0.2.1/download",
-          "sha256": "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cpufeatures",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cpufeatures",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "aarch64-apple-darwin": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(all(target_arch = \"aarch64\", target_os = \"linux\"))": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.2.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "crates-index 0.18.7": {
-      "name": "crates-index",
-      "version": "0.18.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/crates-index/0.18.7/download",
-          "sha256": "0044896374c388ccbf1497dad6384bf6111dbcad9d7069506df7450ce9b62ea3"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "crates_index",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "crates_index",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "git2 0.14.1",
-              "target": "git2"
-            },
-            {
-              "id": "hex 0.4.3",
-              "target": "hex"
-            },
-            {
-              "id": "home 0.5.3",
-              "target": "home"
-            },
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            },
-            {
-              "id": "num_cpus 1.13.1",
-              "target": "num_cpus"
-            },
-            {
-              "id": "rustc-hash 1.1.0",
-              "target": "rustc_hash"
-            },
-            {
-              "id": "semver 1.0.6",
-              "target": "semver"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "serde_json"
-            },
-            {
-              "id": "smartstring 1.0.0",
-              "target": "smartstring"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "serde_derive 1.0.136",
-              "target": "serde_derive"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "0.18.7"
-      },
-      "license": "Apache-2.0"
-    },
-    "cross_installer 0.1.0": {
-      "name": "cross_installer",
-      "version": "0.1.0",
-      "repository": null,
-      "targets": [
-        {
-          "Binary": {
-            "crate_name": "cross_installer",
-            "crate_root": "src/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": null,
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "clap 3.1.5",
-              "target": "clap"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.0"
-      },
-      "license": null
-    },
-    "crossbeam-utils 0.8.7": {
-      "name": "crossbeam-utils",
-      "version": "0.8.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/crossbeam-utils/0.8.7/download",
-          "sha256": "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "crossbeam_utils",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "crossbeam_utils",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "lazy_static",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "crossbeam-utils 0.8.7",
-              "target": "build_script_build"
-            },
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.8.7"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "crypto-common 0.1.3": {
-      "name": "crypto-common",
-      "version": "0.1.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/crypto-common/0.1.3/download",
-          "sha256": "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "crypto_common",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "crypto_common",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "generic-array 0.14.5",
-              "target": "generic_array"
-            },
-            {
-              "id": "typenum 1.15.0",
-              "target": "typenum"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "deunicode 0.4.3": {
-      "name": "deunicode",
-      "version": "0.4.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/deunicode/0.4.3/download",
-          "sha256": "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "deunicode",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "deunicode",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.4.3"
-      },
-      "license": "BSD-3-Clause"
-    },
-    "digest 0.10.3": {
-      "name": "digest",
-      "version": "0.10.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/digest/0.10.3/download",
-          "sha256": "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "digest",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "digest",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "block-buffer",
-          "core-api",
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "block-buffer 0.10.2",
-              "target": "block_buffer"
-            },
-            {
-              "id": "crypto-common 0.1.3",
-              "target": "crypto_common"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "digest 0.8.1": {
-      "name": "digest",
-      "version": "0.8.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/digest/0.8.1/download",
-          "sha256": "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "digest",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "digest",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "generic-array 0.12.4",
-              "target": "generic_array"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.8.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "fake-simd 0.1.2": {
-      "name": "fake-simd",
-      "version": "0.1.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/fake-simd/0.1.2/download",
-          "sha256": "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "fake_simd",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "fake_simd",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.1.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "fastrand 1.7.0": {
-      "name": "fastrand",
-      "version": "1.7.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/fastrand/1.7.0/download",
-          "sha256": "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "fastrand",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "fastrand",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(target_arch = \"wasm32\")": [
-              {
-                "id": "instant 0.1.12",
-                "target": "instant"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "1.7.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "fnv 1.0.7": {
-      "name": "fnv",
-      "version": "1.0.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/fnv/1.0.7/download",
-          "sha256": "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "fnv",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "fnv",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2015",
-        "version": "1.0.7"
-      },
-      "license": "Apache-2.0 / MIT"
-    },
-    "form_urlencoded 1.0.1": {
-      "name": "form_urlencoded",
-      "version": "1.0.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/form_urlencoded/1.0.1/download",
-          "sha256": "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "form_urlencoded",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "form_urlencoded",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "matches 0.1.9",
-              "target": "matches"
-            },
-            {
-              "id": "percent-encoding 2.1.0",
-              "target": "percent_encoding"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "fuchsia-cprng 0.1.1": {
-      "name": "fuchsia-cprng",
-      "version": "0.1.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/fuchsia-cprng/0.1.1/download",
-          "sha256": "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "fuchsia_cprng",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "fuchsia_cprng",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.1.1"
-      },
-      "license": null
-    },
-    "generic-array 0.12.4": {
-      "name": "generic-array",
-      "version": "0.12.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/generic-array/0.12.4/download",
-          "sha256": "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "generic_array",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "generic_array",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "typenum 1.15.0",
-              "target": "typenum"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.12.4"
-      },
-      "license": "MIT"
-    },
-    "generic-array 0.14.5": {
-      "name": "generic-array",
-      "version": "0.14.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/generic-array/0.14.5/download",
-          "sha256": "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "generic_array",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "generic_array",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "more_lengths"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "generic-array 0.14.5",
-              "target": "build_script_build"
-            },
-            {
-              "id": "typenum 1.15.0",
-              "target": "typenum"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.14.5"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "version_check 0.9.4",
-              "target": "version_check"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT"
-    },
-    "getrandom 0.2.5": {
-      "name": "getrandom",
-      "version": "0.2.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/getrandom/0.2.5/download",
-          "sha256": "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "getrandom",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "getrandom",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            }
-          ],
-          "selects": {
-            "cfg(target_os = \"wasi\")": [
-              {
-                "id": "wasi 0.10.2+wasi-snapshot-preview1",
-                "target": "wasi"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.2.5"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "git2 0.14.1": {
-      "name": "git2",
-      "version": "0.14.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/git2/0.14.1/download",
-          "sha256": "6e7d3b96ec1fcaa8431cf04a4f1ef5caafe58d5cf7bcc31f09c1626adddb0ffe"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "git2",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "git2",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            },
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            },
-            {
-              "id": "libgit2-sys 0.13.1+1.4.2",
-              "target": "libgit2_sys"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "url 2.2.2",
-              "target": "url"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.14.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "globset 0.4.8": {
-      "name": "globset",
-      "version": "0.4.8",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/globset/0.4.8/download",
-          "sha256": "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "globset",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "globset",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "aho-corasick 0.7.18",
-              "target": "aho_corasick"
-            },
-            {
-              "id": "bstr 0.2.17",
-              "target": "bstr"
-            },
-            {
-              "id": "fnv 1.0.7",
-              "target": "fnv"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.4.8"
-      },
-      "license": "Unlicense/MIT"
-    },
-    "globwalk 0.8.1": {
-      "name": "globwalk",
-      "version": "0.8.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/globwalk/0.8.1/download",
-          "sha256": "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "globwalk",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "globwalk",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            },
-            {
-              "id": "ignore 0.4.18",
-              "target": "ignore"
-            },
-            {
-              "id": "walkdir 2.3.2",
-              "target": "walkdir"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.8.1"
-      },
-      "license": "MIT"
-    },
-    "hashbrown 0.11.2": {
-      "name": "hashbrown",
-      "version": "0.11.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hashbrown/0.11.2/download",
-          "sha256": "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hashbrown",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hashbrown",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "raw"
-        ],
-        "edition": "2018",
-        "version": "0.11.2"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "heck 0.4.0": {
-      "name": "heck",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/heck/0.4.0/download",
-          "sha256": "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "heck",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "heck",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2018",
-        "version": "0.4.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "hermit-abi 0.1.19": {
-      "name": "hermit-abi",
-      "version": "0.1.19",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download",
-          "sha256": "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hermit_abi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hermit_abi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.19"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "hex 0.4.3": {
-      "name": "hex",
-      "version": "0.4.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hex/0.4.3/download",
-          "sha256": "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hex",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hex",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "serde",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.4.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "home 0.5.3": {
-      "name": "home",
-      "version": "0.5.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/home/0.5.3/download",
-          "sha256": "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "home",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "home",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.5.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "humansize 1.1.1": {
-      "name": "humansize",
-      "version": "1.1.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/humansize/1.1.1/download",
-          "sha256": "02296996cb8796d7c6e3bc2d9211b7802812d36999a51bb754123ead7d37d026"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "humansize",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "humansize",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.1.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "idna 0.2.3": {
-      "name": "idna",
-      "version": "0.2.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/idna/0.2.3/download",
-          "sha256": "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "idna",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "idna",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "matches 0.1.9",
-              "target": "matches"
-            },
-            {
-              "id": "unicode-bidi 0.3.7",
-              "target": "unicode_bidi"
-            },
-            {
-              "id": "unicode-normalization 0.1.19",
-              "target": "unicode_normalization"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "ignore 0.4.18": {
-      "name": "ignore",
-      "version": "0.4.18",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ignore/0.4.18/download",
-          "sha256": "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ignore",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ignore",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "crossbeam-utils 0.8.7",
-              "target": "crossbeam_utils"
-            },
-            {
-              "id": "globset 0.4.8",
-              "target": "globset"
-            },
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            },
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            },
-            {
-              "id": "same-file 1.0.6",
-              "target": "same_file"
-            },
-            {
-              "id": "thread_local 1.1.4",
-              "target": "thread_local"
-            },
-            {
-              "id": "walkdir 2.3.2",
-              "target": "walkdir"
-            }
-          ],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi-util 0.1.5",
-                "target": "winapi_util"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.4.18"
-      },
-      "license": "Unlicense/MIT"
-    },
-    "indexmap 1.8.0": {
-      "name": "indexmap",
-      "version": "1.8.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/indexmap/1.8.0/download",
-          "sha256": "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "indexmap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "indexmap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "hashbrown 0.11.2",
-              "target": "hashbrown"
-            },
-            {
-              "id": "indexmap 1.8.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.8.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "autocfg 1.1.0",
-              "target": "autocfg"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "instant 0.1.12": {
-      "name": "instant",
-      "version": "0.1.12",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/instant/0.1.12/download",
-          "sha256": "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "instant",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "instant",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.12"
-      },
-      "license": "BSD-3-Clause"
-    },
-    "itoa 1.0.1": {
-      "name": "itoa",
-      "version": "1.0.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/itoa/1.0.1/download",
-          "sha256": "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "itoa",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "itoa",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "jobserver 0.1.24": {
-      "name": "jobserver",
-      "version": "0.1.24",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/jobserver/0.1.24/download",
-          "sha256": "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "jobserver",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "jobserver",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.1.24"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "lazy_static 1.4.0": {
-      "name": "lazy_static",
-      "version": "1.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/lazy_static/1.4.0/download",
-          "sha256": "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "lazy_static",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "lazy_static",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.4.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "libc 0.2.119": {
-      "name": "libc",
-      "version": "0.2.119",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/libc/0.2.119/download",
-          "sha256": "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "libc",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "libc",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.2.119"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "libgit2-sys 0.13.1+1.4.2": {
-      "name": "libgit2-sys",
-      "version": "0.13.1+1.4.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/libgit2-sys/0.13.1+1.4.2/download",
-          "sha256": "43e598aa7a4faedf1ea1b4608f582b06f0f40211eec551b7ef36019ae3f62def"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "libgit2_sys",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "libgit2_sys",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            },
-            {
-              "id": "libz-sys 1.1.3",
-              "target": "libz_sys"
-            }
-          ],
-          "selects": {}
-        },
-        "extra_deps": [
-          "@libgit2"
-        ],
-        "edition": "2018",
-        "version": "0.13.1+1.4.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "libz-sys 1.1.3": {
-      "name": "libz-sys",
-      "version": "1.1.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/libz-sys/1.1.3/download",
-          "sha256": "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "libz_sys",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "libz_sys",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "libc"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            }
-          ],
-          "selects": {}
-        },
-        "extra_deps": [
-          "@zlib"
-        ],
-        "edition": "2015",
-        "version": "1.1.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "log 0.4.14": {
-      "name": "log",
-      "version": "0.4.14",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/log/0.4.14/download",
-          "sha256": "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "log",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "log",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.14"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "maplit 1.0.2": {
-      "name": "maplit",
-      "version": "1.0.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/maplit/1.0.2/download",
-          "sha256": "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "maplit",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "maplit",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.0.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "matches 0.1.9": {
-      "name": "matches",
-      "version": "0.1.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/matches/0.1.9/download",
-          "sha256": "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "matches",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "matches",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.1.9"
-      },
-      "license": "MIT"
-    },
-    "memchr 2.4.1": {
-      "name": "memchr",
-      "version": "2.4.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/memchr/2.4.1/download",
-          "sha256": "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "memchr",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "memchr",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "memchr 2.4.1",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "2.4.1"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "Unlicense/MIT"
-    },
-    "num 0.1.42": {
-      "name": "num",
-      "version": "0.1.42",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num/0.1.42/download",
-          "sha256": "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "bigint",
-          "complex",
-          "default",
-          "num-bigint",
-          "num-complex",
-          "num-rational",
-          "rational",
-          "rustc-serialize"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-bigint 0.1.44",
-              "target": "num_bigint"
-            },
-            {
-              "id": "num-complex 0.1.43",
-              "target": "num_complex"
-            },
-            {
-              "id": "num-integer 0.1.44",
-              "target": "num_integer"
-            },
-            {
-              "id": "num-iter 0.1.42",
-              "target": "num_iter"
-            },
-            {
-              "id": "num-rational 0.1.42",
-              "target": "num_rational"
-            },
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.42"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "num-bigint 0.1.44": {
-      "name": "num-bigint",
-      "version": "0.1.44",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num-bigint/0.1.44/download",
-          "sha256": "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_bigint",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_bigint",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "rand",
-          "rustc-serialize"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-integer 0.1.44",
-              "target": "num_integer"
-            },
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            },
-            {
-              "id": "rand 0.4.6",
-              "target": "rand"
-            },
-            {
-              "id": "rustc-serialize 0.3.24",
-              "target": "rustc_serialize"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.44"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "num-complex 0.1.43": {
-      "name": "num-complex",
-      "version": "0.1.43",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num-complex/0.1.43/download",
-          "sha256": "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_complex",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_complex",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "rustc-serialize"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            },
-            {
-              "id": "rustc-serialize 0.3.24",
-              "target": "rustc_serialize"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.43"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "num-integer 0.1.44": {
-      "name": "num-integer",
-      "version": "0.1.44",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num-integer/0.1.44/download",
-          "sha256": "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_integer",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_integer",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-integer 0.1.44",
-              "target": "build_script_build"
-            },
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.44"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "autocfg 1.1.0",
-              "target": "autocfg"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "num-iter 0.1.42": {
-      "name": "num-iter",
-      "version": "0.1.42",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num-iter/0.1.42/download",
-          "sha256": "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_iter",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_iter",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-integer 0.1.44",
-              "target": "num_integer"
-            },
-            {
-              "id": "num-iter 0.1.42",
-              "target": "build_script_build"
-            },
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.42"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "autocfg 1.1.0",
-              "target": "autocfg"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "num-rational 0.1.42": {
-      "name": "num-rational",
-      "version": "0.1.42",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num-rational/0.1.42/download",
-          "sha256": "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_rational",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_rational",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "bigint",
-          "default",
-          "num-bigint",
-          "rustc-serialize"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-bigint 0.1.44",
-              "target": "num_bigint"
-            },
-            {
-              "id": "num-integer 0.1.44",
-              "target": "num_integer"
-            },
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            },
-            {
-              "id": "rustc-serialize 0.3.24",
-              "target": "rustc_serialize"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.42"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "num-traits 0.2.14": {
-      "name": "num-traits",
-      "version": "0.2.14",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num-traits/0.2.14/download",
-          "sha256": "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_traits",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_traits",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-traits 0.2.14",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.2.14"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "autocfg 1.1.0",
-              "target": "autocfg"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "num_cpus 1.13.1": {
-      "name": "num_cpus",
-      "version": "1.13.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num_cpus/1.13.1/download",
-          "sha256": "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_cpus",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_cpus",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [
-              {
-                "id": "hermit-abi 0.1.19",
-                "target": "hermit_abi"
-              }
-            ],
-            "cfg(not(windows))": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "1.13.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "once_cell 1.9.0": {
-      "name": "once_cell",
-      "version": "1.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/once_cell/1.9.0/download",
-          "sha256": "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "once_cell",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "once_cell",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "race",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "1.9.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "opaque-debug 0.2.3": {
-      "name": "opaque-debug",
-      "version": "0.2.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/opaque-debug/0.2.3/download",
-          "sha256": "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "opaque_debug",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "opaque_debug",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.2.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "os_str_bytes 6.0.0": {
-      "name": "os_str_bytes",
-      "version": "6.0.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/os_str_bytes/6.0.0/download",
-          "sha256": "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "os_str_bytes",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "os_str_bytes",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "memchr",
-          "raw_os_str"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "6.0.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "parse-zoneinfo 0.3.0": {
-      "name": "parse-zoneinfo",
-      "version": "0.3.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/parse-zoneinfo/0.3.0/download",
-          "sha256": "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "parse_zoneinfo",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "parse_zoneinfo",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.3.0"
-      },
-      "license": "MIT"
-    },
-    "pathdiff 0.2.1": {
-      "name": "pathdiff",
-      "version": "0.2.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pathdiff/0.2.1/download",
-          "sha256": "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pathdiff",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pathdiff",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.2.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "percent-encoding 2.1.0": {
-      "name": "percent-encoding",
-      "version": "2.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/percent-encoding/2.1.0/download",
-          "sha256": "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "percent_encoding",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "percent_encoding",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "2.1.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "pest 2.1.3": {
-      "name": "pest",
-      "version": "2.1.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pest/2.1.3/download",
-          "sha256": "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pest",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pest",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "ucd-trie 0.1.3",
-              "target": "ucd_trie"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "2.1.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "pest_derive 2.1.0": {
-      "name": "pest_derive",
-      "version": "2.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pest_derive/2.1.0/download",
-          "sha256": "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "pest_derive",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pest_derive",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "pest 2.1.3",
-              "target": "pest"
-            },
-            {
-              "id": "pest_generator 2.1.3",
-              "target": "pest_generator"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "2.1.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "pest_generator 2.1.3": {
-      "name": "pest_generator",
-      "version": "2.1.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pest_generator/2.1.3/download",
-          "sha256": "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pest_generator",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pest_generator",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "pest 2.1.3",
-              "target": "pest"
-            },
-            {
-              "id": "pest_meta 2.1.3",
-              "target": "pest_meta"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "2.1.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "pest_meta 2.1.3": {
-      "name": "pest_meta",
-      "version": "2.1.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pest_meta/2.1.3/download",
-          "sha256": "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pest_meta",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pest_meta",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "maplit 1.0.2",
-              "target": "maplit"
-            },
-            {
-              "id": "pest 2.1.3",
-              "target": "pest"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "2.1.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "phf 0.10.1": {
-      "name": "phf",
-      "version": "0.10.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/phf/0.10.1/download",
-          "sha256": "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "phf",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "phf",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "uncased"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "phf_shared 0.10.0",
-              "target": "phf_shared"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.1"
-      },
-      "license": "MIT"
-    },
-    "phf_codegen 0.10.0": {
-      "name": "phf_codegen",
-      "version": "0.10.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/phf_codegen/0.10.0/download",
-          "sha256": "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "phf_codegen",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "phf_codegen",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "phf_generator 0.10.0",
-              "target": "phf_generator"
-            },
-            {
-              "id": "phf_shared 0.10.0",
-              "target": "phf_shared"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.0"
-      },
-      "license": "MIT"
-    },
-    "phf_generator 0.10.0": {
-      "name": "phf_generator",
-      "version": "0.10.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/phf_generator/0.10.0/download",
-          "sha256": "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "phf_generator",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "Binary": {
-            "crate_name": "gen_hash_test",
-            "crate_root": "src/bin/gen_hash_test.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "phf_generator",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "phf_shared 0.10.0",
-              "target": "phf_shared"
-            },
-            {
-              "id": "rand 0.8.5",
-              "target": "rand"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.0"
-      },
-      "license": "MIT"
-    },
-    "phf_shared 0.10.0": {
-      "name": "phf_shared",
-      "version": "0.10.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/phf_shared/0.10.0/download",
-          "sha256": "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "phf_shared",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "phf_shared",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std",
-          "uncased"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "siphasher 0.3.9",
-              "target": "siphasher"
-            },
-            {
-              "id": "uncased 0.9.6",
-              "target": "uncased"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.0"
-      },
-      "license": "MIT"
-    },
-    "pkg-config 0.3.24": {
-      "name": "pkg-config",
-      "version": "0.3.24",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pkg-config/0.3.24/download",
-          "sha256": "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pkg_config",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pkg_config",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.3.24"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "ppv-lite86 0.2.16": {
-      "name": "ppv-lite86",
-      "version": "0.2.16",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ppv-lite86/0.2.16/download",
-          "sha256": "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ppv_lite86",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ppv_lite86",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "simd",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.2.16"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "proc-macro-error 1.0.4": {
-      "name": "proc-macro-error",
-      "version": "1.0.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/proc-macro-error/1.0.4/download",
-          "sha256": "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "proc_macro_error",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "proc_macro_error",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "syn",
-          "syn-error"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro-error 1.0.4",
-              "target": "build_script_build"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "proc-macro-error-attr 1.0.4",
-              "target": "proc_macro_error_attr"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "1.0.4"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "version_check 0.9.4",
-              "target": "version_check"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "proc-macro-error-attr 1.0.4": {
-      "name": "proc-macro-error-attr",
-      "version": "1.0.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/proc-macro-error-attr/1.0.4/download",
-          "sha256": "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "proc_macro_error_attr",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "proc_macro_error_attr",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro-error-attr 1.0.4",
-              "target": "build_script_build"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.4"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "version_check 0.9.4",
-              "target": "version_check"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "proc-macro2 1.0.36": {
-      "name": "proc-macro2",
-      "version": "1.0.36",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/proc-macro2/1.0.36/download",
-          "sha256": "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "proc_macro2",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "proc_macro2",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "proc-macro"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "build_script_build"
-            },
-            {
-              "id": "unicode-xid 0.2.2",
-              "target": "unicode_xid"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.36"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "quote 1.0.15": {
-      "name": "quote",
-      "version": "1.0.15",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/quote/1.0.15/download",
-          "sha256": "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "quote",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "quote",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "proc-macro"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.15"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rand 0.4.6": {
-      "name": "rand",
-      "version": "0.4.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand/0.4.6/download",
-          "sha256": "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "libc",
-          "std"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(target_env = \"sgx\")": [
-              {
-                "id": "rand_core 0.3.1",
-                "target": "rand_core"
-              },
-              {
-                "id": "rdrand 0.4.0",
-                "target": "rdrand"
-              }
-            ],
-            "cfg(target_os = \"fuchsia\")": [
-              {
-                "id": "fuchsia-cprng 0.1.1",
-                "target": "fuchsia_cprng"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.4.6"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "rand 0.8.5": {
-      "name": "rand",
-      "version": "0.8.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand/0.8.5/download",
-          "sha256": "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "getrandom",
-          "libc",
-          "rand_chacha",
-          "small_rng",
-          "std",
-          "std_rng"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "rand_chacha 0.3.1",
-              "target": "rand_chacha"
-            },
-            {
-              "id": "rand_core 0.6.3",
-              "target": "rand_core"
-            }
-          ],
-          "selects": {
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.8.5"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rand_chacha 0.3.1": {
-      "name": "rand_chacha",
-      "version": "0.3.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand_chacha/0.3.1/download",
-          "sha256": "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand_chacha",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand_chacha",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "ppv-lite86 0.2.16",
-              "target": "ppv_lite86"
-            },
-            {
-              "id": "rand_core 0.6.3",
-              "target": "rand_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rand_core 0.3.1": {
-      "name": "rand_core",
-      "version": "0.3.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand_core/0.3.1/download",
-          "sha256": "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand_core",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand_core",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "rand_core 0.4.2",
-              "target": "rand_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.3.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "rand_core 0.4.2": {
-      "name": "rand_core",
-      "version": "0.4.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand_core/0.4.2/download",
-          "sha256": "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand_core",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand_core",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.4.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "rand_core 0.6.3": {
-      "name": "rand_core",
-      "version": "0.6.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand_core/0.6.3/download",
-          "sha256": "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand_core",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand_core",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "getrandom",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "getrandom 0.2.5",
-              "target": "getrandom"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.6.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rdrand 0.4.0": {
-      "name": "rdrand",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rdrand/0.4.0/download",
-          "sha256": "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rdrand",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rdrand",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "rand_core 0.3.1",
-              "target": "rand_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.0"
-      },
-      "license": "ISC"
-    },
-    "redox_syscall 0.2.11": {
-      "name": "redox_syscall",
-      "version": "0.2.11",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/redox_syscall/0.2.11/download",
-          "sha256": "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "syscall",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "syscall",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.11"
-      },
-      "license": "MIT"
-    },
-    "regex 1.5.4": {
-      "name": "regex",
-      "version": "1.5.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/regex/1.5.4/download",
-          "sha256": "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "regex",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "regex",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "aho-corasick",
-          "default",
-          "memchr",
-          "perf",
-          "perf-cache",
-          "perf-dfa",
-          "perf-inline",
-          "perf-literal",
-          "std",
-          "unicode",
-          "unicode-age",
-          "unicode-bool",
-          "unicode-case",
-          "unicode-gencat",
-          "unicode-perl",
-          "unicode-script",
-          "unicode-segment"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "aho-corasick 0.7.18",
-              "target": "aho_corasick"
-            },
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            },
-            {
-              "id": "regex-syntax 0.6.25",
-              "target": "regex_syntax"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.5.4"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "regex-syntax 0.6.25": {
-      "name": "regex-syntax",
-      "version": "0.6.25",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/regex-syntax/0.6.25/download",
-          "sha256": "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "regex_syntax",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "regex_syntax",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "unicode",
-          "unicode-age",
-          "unicode-bool",
-          "unicode-case",
-          "unicode-gencat",
-          "unicode-perl",
-          "unicode-script",
-          "unicode-segment"
-        ],
-        "edition": "2018",
-        "version": "0.6.25"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "remove_dir_all 0.5.3": {
-      "name": "remove_dir_all",
-      "version": "0.5.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/remove_dir_all/0.5.3/download",
-          "sha256": "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "remove_dir_all",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "remove_dir_all",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.5.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "rustc-hash 1.1.0": {
-      "name": "rustc-hash",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rustc-hash/1.1.0/download",
-          "sha256": "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rustc_hash",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rustc_hash",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2015",
-        "version": "1.1.0"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "rustc-serialize 0.3.24": {
-      "name": "rustc-serialize",
-      "version": "0.3.24",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rustc-serialize/0.3.24/download",
-          "sha256": "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rustc_serialize",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rustc_serialize",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.3.24"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "ryu 1.0.9": {
-      "name": "ryu",
-      "version": "1.0.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ryu/1.0.9/download",
-          "sha256": "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ryu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ryu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.9"
-      },
-      "license": "Apache-2.0 OR BSL-1.0"
-    },
-    "same-file 1.0.6": {
-      "name": "same-file",
-      "version": "1.0.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/same-file/1.0.6/download",
-          "sha256": "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "same_file",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "same_file",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi-util 0.1.5",
-                "target": "winapi_util"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "1.0.6"
-      },
-      "license": "Unlicense/MIT"
-    },
-    "semver 1.0.6": {
-      "name": "semver",
-      "version": "1.0.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/semver/1.0.6/download",
-          "sha256": "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "semver",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "semver",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "serde",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "semver 1.0.6",
-              "target": "build_script_build"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.6"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "serde 1.0.136": {
-      "name": "serde",
-      "version": "1.0.136",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/serde/1.0.136/download",
-          "sha256": "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "serde",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "serde",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "derive",
-          "rc",
-          "serde_derive",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "serde 1.0.136",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "serde_derive 1.0.136",
-              "target": "serde_derive"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "1.0.136"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "serde_derive 1.0.136": {
-      "name": "serde_derive",
-      "version": "1.0.136",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/serde_derive/1.0.136/download",
-          "sha256": "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "serde_derive",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "serde_derive",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "serde_derive 1.0.136",
-              "target": "build_script_build"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "1.0.136"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "serde_json 1.0.79": {
-      "name": "serde_json",
-      "version": "1.0.79",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/serde_json/1.0.79/download",
-          "sha256": "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "serde_json",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "serde_json",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std",
-          "unbounded_depth"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "itoa 1.0.1",
-              "target": "itoa"
-            },
-            {
-              "id": "ryu 1.0.9",
-              "target": "ryu"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.79"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "sha-1 0.8.2": {
-      "name": "sha-1",
-      "version": "0.8.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/sha-1/0.8.2/download",
-          "sha256": "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "sha1",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "sha1",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "block-buffer 0.7.3",
-              "target": "block_buffer"
-            },
-            {
-              "id": "digest 0.8.1",
-              "target": "digest"
-            },
-            {
-              "id": "fake-simd 0.1.2",
-              "target": "fake_simd"
-            },
-            {
-              "id": "opaque-debug 0.2.3",
-              "target": "opaque_debug"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.8.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "sha2 0.10.2": {
-      "name": "sha2",
-      "version": "0.10.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/sha2/0.10.2/download",
-          "sha256": "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "sha2",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "sha2",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "digest 0.10.3",
-              "target": "digest"
-            }
-          ],
-          "selects": {
-            "cfg(any(target_arch = \"aarch64\", target_arch = \"x86_64\", target_arch = \"x86\"))": [
-              {
-                "id": "cpufeatures 0.2.1",
-                "target": "cpufeatures"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.10.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "siphasher 0.3.9": {
-      "name": "siphasher",
-      "version": "0.3.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/siphasher/0.3.9/download",
-          "sha256": "a86232ab60fa71287d7f2ddae4a7073f6b7aac33631c3015abb556f08c6d0a3e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "siphasher",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "siphasher",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.3.9"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "slug 0.1.4": {
-      "name": "slug",
-      "version": "0.1.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/slug/0.1.4/download",
-          "sha256": "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "slug",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "slug",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "deunicode 0.4.3",
-              "target": "deunicode"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.4"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "smallvec 1.8.0": {
-      "name": "smallvec",
-      "version": "1.8.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/smallvec/1.8.0/download",
-          "sha256": "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "smallvec",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "smallvec",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.8.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "smartstring 1.0.0": {
-      "name": "smartstring",
-      "version": "1.0.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/smartstring/1.0.0/download",
-          "sha256": "ea958ad90cacc8ece7f238fde3671e1b350ee1741964edf2a22fd16f60224163"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "smartstring",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "smartstring",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "serde",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "static_assertions 1.1.0",
-              "target": "static_assertions"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2021",
-        "version": "1.0.0"
-      },
-      "license": "MPL-2.0+"
-    },
-    "smawk 0.3.1": {
-      "name": "smawk",
-      "version": "0.3.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/smawk/0.3.1/download",
-          "sha256": "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "smawk",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "smawk",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.3.1"
-      },
-      "license": "MIT"
-    },
-    "spectral 0.6.0": {
-      "name": "spectral",
-      "version": "0.6.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/spectral/0.6.0/download",
-          "sha256": "ae3c15181f4b14e52eeaac3efaeec4d2764716ce9c86da0c934c3e318649c5ba"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "spectral",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "spectral",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "num"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num 0.1.42",
-              "target": "num"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.6.0"
-      },
-      "license": "Apache-2.0"
-    },
-    "static_assertions 1.1.0": {
-      "name": "static_assertions",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/static_assertions/1.1.0/download",
-          "sha256": "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "static_assertions",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "static_assertions",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.1.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "strsim 0.10.0": {
-      "name": "strsim",
-      "version": "0.10.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/strsim/0.10.0/download",
-          "sha256": "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "strsim",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "strsim",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.10.0"
-      },
-      "license": "MIT"
-    },
-    "syn 1.0.86": {
-      "name": "syn",
-      "version": "1.0.86",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/syn/1.0.86/download",
-          "sha256": "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "syn",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "syn",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "clone-impls",
-          "default",
-          "derive",
-          "full",
-          "parsing",
-          "printing",
-          "proc-macro",
-          "quote"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "build_script_build"
-            },
-            {
-              "id": "unicode-xid 0.2.2",
-              "target": "unicode_xid"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.86"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "tempfile 3.3.0": {
-      "name": "tempfile",
-      "version": "3.3.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tempfile/3.3.0/download",
-          "sha256": "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tempfile",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tempfile",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "fastrand 1.7.0",
-              "target": "fastrand"
-            },
-            {
-              "id": "remove_dir_all 0.5.3",
-              "target": "remove_dir_all"
-            }
-          ],
-          "selects": {
-            "cfg(any(unix, target_os = \"wasi\"))": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(target_os = \"redox\")": [
-              {
-                "id": "redox_syscall 0.2.11",
-                "target": "syscall"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "3.3.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "tera 1.15.0": {
-      "name": "tera",
-      "version": "1.15.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tera/1.15.0/download",
-          "sha256": "d3cac831b615c25bcef632d1cabf864fa05813baad3d526829db18eb70e8b58d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tera",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tera",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "builtins",
-          "chrono",
-          "chrono-tz",
-          "default",
-          "humansize",
-          "percent-encoding",
-          "rand",
-          "slug"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "chrono 0.4.19",
-              "target": "chrono"
-            },
-            {
-              "id": "chrono-tz 0.6.1",
-              "target": "chrono_tz"
-            },
-            {
-              "id": "globwalk 0.8.1",
-              "target": "globwalk"
-            },
-            {
-              "id": "humansize 1.1.1",
-              "target": "humansize"
-            },
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            },
-            {
-              "id": "percent-encoding 2.1.0",
-              "target": "percent_encoding"
-            },
-            {
-              "id": "pest 2.1.3",
-              "target": "pest"
-            },
-            {
-              "id": "rand 0.8.5",
-              "target": "rand"
-            },
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "serde_json"
-            },
-            {
-              "id": "slug 0.1.4",
-              "target": "slug"
-            },
-            {
-              "id": "unic-segment 0.9.0",
-              "target": "unic_segment"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "pest_derive 2.1.0",
-              "target": "pest_derive"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "1.15.0"
-      },
-      "license": "MIT"
-    },
-    "termcolor 1.1.3": {
-      "name": "termcolor",
-      "version": "1.1.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/termcolor/1.1.3/download",
-          "sha256": "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "termcolor",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "termcolor",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi-util 0.1.5",
-                "target": "winapi_util"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "1.1.3"
-      },
-      "license": "Unlicense OR MIT"
-    },
-    "textwrap 0.14.2": {
-      "name": "textwrap",
-      "version": "0.14.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/textwrap/0.14.2/download",
-          "sha256": "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "textwrap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "textwrap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "smawk",
-          "unicode-linebreak",
-          "unicode-width"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "smawk 0.3.1",
-              "target": "smawk"
-            },
-            {
-              "id": "unicode-linebreak 0.1.2",
-              "target": "unicode_linebreak"
-            },
-            {
-              "id": "unicode-width 0.1.9",
-              "target": "unicode_width"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.14.2"
-      },
-      "license": "MIT"
-    },
-    "textwrap 0.15.0": {
-      "name": "textwrap",
-      "version": "0.15.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/textwrap/0.15.0/download",
-          "sha256": "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "textwrap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "textwrap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.15.0"
-      },
-      "license": "MIT"
-    },
-    "thread_local 1.1.4": {
-      "name": "thread_local",
-      "version": "1.1.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/thread_local/1.1.4/download",
-          "sha256": "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "thread_local",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "thread_local",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "once_cell 1.9.0",
-              "target": "once_cell"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.1.4"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "tinyvec 1.5.1": {
-      "name": "tinyvec",
-      "version": "1.5.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tinyvec/1.5.1/download",
-          "sha256": "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tinyvec",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tinyvec",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "tinyvec_macros"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "tinyvec_macros 0.1.0",
-              "target": "tinyvec_macros"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.5.1"
-      },
-      "license": "Zlib OR Apache-2.0 OR MIT"
-    },
-    "tinyvec_macros 0.1.0": {
-      "name": "tinyvec_macros",
-      "version": "0.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tinyvec_macros/0.1.0/download",
-          "sha256": "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tinyvec_macros",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tinyvec_macros",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.1.0"
-      },
-      "license": "MIT OR Apache-2.0 OR Zlib"
-    },
-    "toml 0.5.8": {
-      "name": "toml",
-      "version": "0.5.8",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/toml/0.5.8/download",
-          "sha256": "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "toml",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "toml",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.5.8"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "typenum 1.15.0": {
-      "name": "typenum",
-      "version": "1.15.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/typenum/1.15.0/download",
-          "sha256": "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "typenum",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_main",
-            "crate_root": "build/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "typenum",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "typenum 1.15.0",
-              "target": "build_script_main"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.15.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "ucd-trie 0.1.3": {
-      "name": "ucd-trie",
-      "version": "0.1.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ucd-trie/0.1.3/download",
-          "sha256": "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ucd_trie",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ucd_trie",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.1.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "uncased 0.9.6": {
-      "name": "uncased",
-      "version": "0.9.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/uncased/0.9.6/download",
-          "sha256": "5baeed7327e25054889b9bd4f975f32e5f4c5d434042d59ab6cd4142c0a76ed0"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "uncased",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "uncased",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "uncased 0.9.6",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.9.6"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "version_check 0.9.4",
-              "target": "version_check"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "unic-char-property 0.9.0": {
-      "name": "unic-char-property",
-      "version": "0.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unic-char-property/0.9.0/download",
-          "sha256": "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unic_char_property",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unic_char_property",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "unic-char-range 0.9.0",
-              "target": "unic_char_range"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.9.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unic-char-range 0.9.0": {
-      "name": "unic-char-range",
-      "version": "0.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unic-char-range/0.9.0/download",
-          "sha256": "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unic_char_range",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unic_char_range",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2018",
-        "version": "0.9.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unic-common 0.9.0": {
-      "name": "unic-common",
-      "version": "0.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unic-common/0.9.0/download",
-          "sha256": "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unic_common",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unic_common",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2018",
-        "version": "0.9.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unic-segment 0.9.0": {
-      "name": "unic-segment",
-      "version": "0.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unic-segment/0.9.0/download",
-          "sha256": "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unic_segment",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unic_segment",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "unic-ucd-segment 0.9.0",
-              "target": "unic_ucd_segment"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.9.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unic-ucd-segment 0.9.0": {
-      "name": "unic-ucd-segment",
-      "version": "0.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unic-ucd-segment/0.9.0/download",
-          "sha256": "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unic_ucd_segment",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unic_ucd_segment",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "unic-char-property 0.9.0",
-              "target": "unic_char_property"
-            },
-            {
-              "id": "unic-char-range 0.9.0",
-              "target": "unic_char_range"
-            },
-            {
-              "id": "unic-ucd-version 0.9.0",
-              "target": "unic_ucd_version"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.9.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unic-ucd-version 0.9.0": {
-      "name": "unic-ucd-version",
-      "version": "0.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unic-ucd-version/0.9.0/download",
-          "sha256": "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unic_ucd_version",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unic_ucd_version",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "unic-common 0.9.0",
-              "target": "unic_common"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.9.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unicode-bidi 0.3.7": {
-      "name": "unicode-bidi",
-      "version": "0.3.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-bidi/0.3.7/download",
-          "sha256": "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_bidi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_bidi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.3.7"
-      },
-      "license": "MIT / Apache-2.0"
-    },
-    "unicode-linebreak 0.1.2": {
-      "name": "unicode-linebreak",
-      "version": "0.1.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-linebreak/0.1.2/download",
-          "sha256": "3a52dcaab0c48d931f7cc8ef826fa51690a08e1ea55117ef26f89864f532383f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_linebreak",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_linebreak",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "unicode-linebreak 0.1.2",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.2"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "Apache-2.0"
-    },
-    "unicode-normalization 0.1.19": {
-      "name": "unicode-normalization",
-      "version": "0.1.19",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-normalization/0.1.19/download",
-          "sha256": "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_normalization",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_normalization",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "tinyvec 1.5.1",
-              "target": "tinyvec"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.19"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unicode-width 0.1.9": {
-      "name": "unicode-width",
-      "version": "0.1.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-width/0.1.9/download",
-          "sha256": "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_width",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_width",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2015",
-        "version": "0.1.9"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unicode-xid 0.2.2": {
-      "name": "unicode-xid",
-      "version": "0.2.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-xid/0.2.2/download",
-          "sha256": "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_xid",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_xid",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2015",
-        "version": "0.2.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "url 2.2.2": {
-      "name": "url",
-      "version": "2.2.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/url/2.2.2/download",
-          "sha256": "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "url",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "url",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "form_urlencoded 1.0.1",
-              "target": "form_urlencoded"
-            },
-            {
-              "id": "idna 0.2.3",
-              "target": "idna"
-            },
-            {
-              "id": "matches 0.1.9",
-              "target": "matches"
-            },
-            {
-              "id": "percent-encoding 2.1.0",
-              "target": "percent_encoding"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "2.2.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "urls_generator 0.1.0": {
-      "name": "urls_generator",
-      "version": "0.1.0",
-      "repository": null,
-      "targets": [
-        {
-          "Binary": {
-            "crate_name": "urls_generator",
-            "crate_root": "src/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": null,
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "clap 3.1.5",
-              "target": "clap"
-            },
-            {
-              "id": "hex 0.4.3",
-              "target": "hex"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "serde_json"
-            },
-            {
-              "id": "sha2 0.10.2",
-              "target": "sha2"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.0"
-      },
-      "license": null
-    },
-    "vcpkg 0.2.15": {
-      "name": "vcpkg",
-      "version": "0.2.15",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/vcpkg/0.2.15/download",
-          "sha256": "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "vcpkg",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "vcpkg",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.2.15"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "version_check 0.9.4": {
-      "name": "version_check",
-      "version": "0.9.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/version_check/0.9.4/download",
-          "sha256": "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "version_check",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "version_check",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.9.4"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "walkdir 2.3.2": {
-      "name": "walkdir",
-      "version": "2.3.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/walkdir/2.3.2/download",
-          "sha256": "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "walkdir",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "walkdir",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "same-file 1.0.6",
-              "target": "same_file"
-            }
-          ],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              },
-              {
-                "id": "winapi-util 0.1.5",
-                "target": "winapi_util"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "2.3.2"
-      },
-      "license": "Unlicense/MIT"
-    },
-    "wasi 0.10.2+wasi-snapshot-preview1": {
-      "name": "wasi",
-      "version": "0.10.2+wasi-snapshot-preview1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/wasi/0.10.2+wasi-snapshot-preview1/download",
-          "sha256": "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "wasi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "wasi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.10.2+wasi-snapshot-preview1"
-      },
-      "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT"
-    },
-    "winapi 0.3.9": {
-      "name": "winapi",
-      "version": "0.3.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download",
-          "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "consoleapi",
-          "errhandlingapi",
-          "fileapi",
-          "handleapi",
-          "minwinbase",
-          "minwindef",
-          "ntsecapi",
-          "processenv",
-          "profileapi",
-          "shlobj",
-          "std",
-          "timezoneapi",
-          "winbase",
-          "wincon",
-          "winerror",
-          "winnt"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi 0.3.9",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {
-            "i686-pc-windows-gnu": [
-              {
-                "id": "winapi-i686-pc-windows-gnu 0.4.0",
-                "target": "winapi_i686_pc_windows_gnu"
-              }
-            ],
-            "x86_64-pc-windows-gnu": [
-              {
-                "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
-                "target": "winapi_x86_64_pc_windows_gnu"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.3.9"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "winapi-i686-pc-windows-gnu 0.4.0": {
-      "name": "winapi-i686-pc-windows-gnu",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
-          "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_i686_pc_windows_gnu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_i686_pc_windows_gnu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi-i686-pc-windows-gnu 0.4.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "winapi-util 0.1.5": {
-      "name": "winapi-util",
-      "version": "0.1.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-util/0.1.5/download",
-          "sha256": "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_util",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_util",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.1.5"
-      },
-      "license": "Unlicense/MIT"
-    },
-    "winapi-x86_64-pc-windows-gnu 0.4.0": {
-      "name": "winapi-x86_64-pc-windows-gnu",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
-          "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_x86_64_pc_windows_gnu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_x86_64_pc_windows_gnu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    }
-  },
-  "binary_crates": [
-    "cargo-lock 7.0.1",
-    "cc 1.0.73",
-    "phf_generator 0.10.0"
-  ],
-  "workspace_members": {
-    "cargo-bazel 0.0.28": "crate_universe",
-    "cross_installer 0.1.0": "crate_universe/tools/cross_installer",
-    "urls_generator 0.1.0": "crate_universe/tools/urls_generator"
-  },
-  "conditions": {
-    "aarch64-apple-darwin": [
-      "aarch64-apple-darwin"
-    ],
-    "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [],
-    "cfg(all(target_arch = \"aarch64\", target_os = \"linux\"))": [
-      "aarch64-unknown-linux-gnu"
-    ],
-    "cfg(any(target_arch = \"aarch64\", target_arch = \"x86_64\", target_arch = \"x86\"))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-pc-windows-msvc",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-pc-windows-msvc",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(any(unix, target_os = \"wasi\"))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "wasm32-wasi",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(not(windows))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "wasm32-unknown-unknown",
-      "wasm32-wasi",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(target_arch = \"wasm32\")": [
-      "wasm32-unknown-unknown",
-      "wasm32-wasi"
-    ],
-    "cfg(target_env = \"sgx\")": [],
-    "cfg(target_os = \"fuchsia\")": [],
-    "cfg(target_os = \"hermit\")": [],
-    "cfg(target_os = \"redox\")": [],
-    "cfg(target_os = \"wasi\")": [
-      "wasm32-wasi"
-    ],
-    "cfg(unix)": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(windows)": [
-      "i686-pc-windows-msvc",
-      "x86_64-pc-windows-msvc"
-    ],
-    "i686-pc-windows-gnu": [],
-    "x86_64-pc-windows-gnu": []
-  }
-}
diff --git a/third_party/rules_rust/crate_universe/Cargo.lock b/third_party/rules_rust/crate_universe/Cargo.lock
index a8ec086..7866132 100644
--- a/third_party/rules_rust/crate_universe/Cargo.lock
+++ b/third_party/rules_rust/crate_universe/Cargo.lock
@@ -13,9 +13,9 @@
 
 [[package]]
 name = "anyhow"
-version = "1.0.55"
+version = "1.0.58"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "159bb86af3a200e19a068f4224eae4c8bb2d0fa054c7e5d1cacd5cef95e684cd"
+checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704"
 
 [[package]]
 name = "atty"
@@ -93,16 +93,16 @@
 
 [[package]]
 name = "camino"
-version = "1.0.7"
+version = "1.0.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f3132262930b0522068049f5870a856ab8affc80c70d08b6ecb785771a6fc23"
+checksum = "869119e97797867fd90f5e22af7d0bd274bd4635ebb9eb68c04f3f513ae6c412"
 dependencies = [
  "serde",
 ]
 
 [[package]]
 name = "cargo-bazel"
-version = "0.0.28"
+version = "0.4.0"
 dependencies = [
  "anyhow",
  "cargo-lock",
@@ -113,6 +113,8 @@
  "clap",
  "crates-index",
  "hex",
+ "maplit",
+ "normpath",
  "pathdiff",
  "regex",
  "semver",
@@ -122,15 +124,15 @@
  "spectral",
  "tempfile",
  "tera",
- "textwrap 0.14.2",
+ "textwrap",
  "toml",
 ]
 
 [[package]]
 name = "cargo-lock"
-version = "7.0.1"
+version = "8.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fb04b88bd5b2036e30704f95c6ee16f3b5ca3b4ca307da2889d9006648e5c88"
+checksum = "3c4c54d47a4532db3494ef7332c257ab57b02750daae3250d49e01ee55201ce8"
 dependencies = [
  "semver",
  "serde",
@@ -162,9 +164,9 @@
 
 [[package]]
 name = "cargo_toml"
-version = "0.11.4"
+version = "0.11.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e270ef0cd868745878982f7ce470aa898d0d4bb248af67f0cf66f54617913ef"
+checksum = "5809dd3e6444651fd1cdd3dbec71eca438c439a0fcc8081674a14da0afe50185"
 dependencies = [
  "serde",
  "serde_derive",
@@ -182,9 +184,9 @@
 
 [[package]]
 name = "cfg-expr"
-version = "0.10.2"
+version = "0.10.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e068cb2806bbc15b439846dc16c5f89f8599f2c3e4d73d4449d38f9b2f0b6c5"
+checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db"
 dependencies = [
  "smallvec",
 ]
@@ -231,26 +233,26 @@
 
 [[package]]
 name = "clap"
-version = "3.1.5"
+version = "3.2.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ced1892c55c910c1219e98d6fc8d71f6bddba7905866ce740066d8bfea859312"
+checksum = "190814073e85d238f31ff738fcb0bf6910cedeb73376c87cd69291028966fd83"
 dependencies = [
  "atty",
  "bitflags",
  "clap_derive",
+ "clap_lex",
  "indexmap",
- "lazy_static",
- "os_str_bytes",
+ "once_cell",
  "strsim",
  "termcolor",
- "textwrap 0.15.0",
+ "textwrap",
 ]
 
 [[package]]
 name = "clap_derive"
-version = "3.1.4"
+version = "3.2.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da95d038ede1a964ce99f49cbe27a7fb538d1da595e4b4f70b8c8f338d17bf16"
+checksum = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902"
 dependencies = [
  "heck",
  "proc-macro-error",
@@ -260,19 +262,28 @@
 ]
 
 [[package]]
-name = "cpufeatures"
-version = "0.2.1"
+name = "clap_lex"
+version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b"
 dependencies = [
  "libc",
 ]
 
 [[package]]
 name = "crates-index"
-version = "0.18.7"
+version = "0.18.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0044896374c388ccbf1497dad6384bf6111dbcad9d7069506df7450ce9b62ea3"
+checksum = "2519c91ad7a6e3250a64fb71162d2db1afe7bcf826a465f84d2052fd69639b7a"
 dependencies = [
  "git2",
  "hex",
@@ -296,19 +307,19 @@
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.7"
+version = "0.8.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6"
+checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83"
 dependencies = [
  "cfg-if",
- "lazy_static",
+ "once_cell",
 ]
 
 [[package]]
 name = "crypto-common"
-version = "0.1.3"
+version = "0.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8"
+checksum = "5999502d32b9c48d492abe66392408144895020ec4709e549e840799f3bb74c0"
 dependencies = [
  "generic-array 0.14.5",
  "typenum",
@@ -397,9 +408,9 @@
 
 [[package]]
 name = "getrandom"
-version = "0.2.5"
+version = "0.2.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77"
+checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
 dependencies = [
  "cfg-if",
  "libc",
@@ -408,9 +419,9 @@
 
 [[package]]
 name = "git2"
-version = "0.14.1"
+version = "0.14.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e7d3b96ec1fcaa8431cf04a4f1ef5caafe58d5cf7bcc31f09c1626adddb0ffe"
+checksum = "d0155506aab710a86160ddb504a480d2964d7ab5b9e62419be69e0032bc5931c"
 dependencies = [
  "bitflags",
  "libc",
@@ -421,9 +432,9 @@
 
 [[package]]
 name = "globset"
-version = "0.4.8"
+version = "0.4.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd"
+checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a"
 dependencies = [
  "aho-corasick",
  "bstr",
@@ -445,9 +456,9 @@
 
 [[package]]
 name = "hashbrown"
-version = "0.11.2"
+version = "0.12.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
 
 [[package]]
 name = "heck"
@@ -519,9 +530,9 @@
 
 [[package]]
 name = "indexmap"
-version = "1.8.0"
+version = "1.9.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
 dependencies = [
  "autocfg",
  "hashbrown",
@@ -538,9 +549,9 @@
 
 [[package]]
 name = "itoa"
-version = "1.0.1"
+version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
+checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
 
 [[package]]
 name = "jobserver"
@@ -559,15 +570,15 @@
 
 [[package]]
 name = "libc"
-version = "0.2.119"
+version = "0.2.126"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
 
 [[package]]
 name = "libgit2-sys"
-version = "0.13.1+1.4.2"
+version = "0.13.4+1.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43e598aa7a4faedf1ea1b4608f582b06f0f40211eec551b7ef36019ae3f62def"
+checksum = "d0fa6563431ede25f5cc7f6d803c6afbc1c5d3ad3d4925d12c882bf2b526f5d1"
 dependencies = [
  "cc",
  "libc",
@@ -577,9 +588,9 @@
 
 [[package]]
 name = "libz-sys"
-version = "1.1.3"
+version = "1.1.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66"
+checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
 dependencies = [
  "cc",
  "libc",
@@ -589,9 +600,9 @@
 
 [[package]]
 name = "log"
-version = "0.4.14"
+version = "0.4.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
 dependencies = [
  "cfg-if",
 ]
@@ -610,9 +621,18 @@
 
 [[package]]
 name = "memchr"
-version = "2.4.1"
+version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "normpath"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04aaf5e9cb0fbf883cc0423159eacdf96a9878022084b35c462c428cab73bcaf"
+dependencies = [
+ "winapi",
+]
 
 [[package]]
 name = "num"
@@ -652,9 +672,9 @@
 
 [[package]]
 name = "num-integer"
-version = "0.1.44"
+version = "0.1.45"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
 dependencies = [
  "autocfg",
  "num-traits",
@@ -662,9 +682,9 @@
 
 [[package]]
 name = "num-iter"
-version = "0.1.42"
+version = "0.1.43"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
 dependencies = [
  "autocfg",
  "num-integer",
@@ -685,9 +705,9 @@
 
 [[package]]
 name = "num-traits"
-version = "0.2.14"
+version = "0.2.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
 dependencies = [
  "autocfg",
 ]
@@ -704,9 +724,9 @@
 
 [[package]]
 name = "once_cell"
-version = "1.9.0"
+version = "1.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
+checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
 
 [[package]]
 name = "opaque-debug"
@@ -716,12 +736,9 @@
 
 [[package]]
 name = "os_str_bytes"
-version = "6.0.0"
+version = "6.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64"
-dependencies = [
- "memchr",
-]
+checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa"
 
 [[package]]
 name = "parse-zoneinfo"
@@ -828,9 +845,9 @@
 
 [[package]]
 name = "pkg-config"
-version = "0.3.24"
+version = "0.3.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe"
+checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
 
 [[package]]
 name = "ppv-lite86"
@@ -864,18 +881,18 @@
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.36"
+version = "1.0.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
+checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
 dependencies = [
- "unicode-xid",
+ "unicode-ident",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.15"
+version = "1.0.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
+checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
 dependencies = [
  "proc-macro2",
 ]
@@ -949,18 +966,18 @@
 
 [[package]]
 name = "redox_syscall"
-version = "0.2.11"
+version = "0.2.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c"
+checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
 dependencies = [
  "bitflags",
 ]
 
 [[package]]
 name = "regex"
-version = "1.5.4"
+version = "1.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -969,9 +986,9 @@
 
 [[package]]
 name = "regex-syntax"
-version = "0.6.25"
+version = "0.6.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
 
 [[package]]
 name = "remove_dir_all"
@@ -996,9 +1013,9 @@
 
 [[package]]
 name = "ryu"
-version = "1.0.9"
+version = "1.0.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
+checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
 
 [[package]]
 name = "same-file"
@@ -1011,27 +1028,27 @@
 
 [[package]]
 name = "semver"
-version = "1.0.6"
+version = "1.0.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d"
+checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1"
 dependencies = [
  "serde",
 ]
 
 [[package]]
 name = "serde"
-version = "1.0.136"
+version = "1.0.138"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
+checksum = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.136"
+version = "1.0.138"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
+checksum = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1040,9 +1057,9 @@
 
 [[package]]
 name = "serde_json"
-version = "1.0.79"
+version = "1.0.82"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95"
+checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7"
 dependencies = [
  "itoa",
  "ryu",
@@ -1074,9 +1091,9 @@
 
 [[package]]
 name = "siphasher"
-version = "0.3.9"
+version = "0.3.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a86232ab60fa71287d7f2ddae4a7073f6b7aac33631c3015abb556f08c6d0a3e"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
 
 [[package]]
 name = "slug"
@@ -1089,18 +1106,20 @@
 
 [[package]]
 name = "smallvec"
-version = "1.8.0"
+version = "1.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
+checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
 
 [[package]]
 name = "smartstring"
-version = "1.0.0"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea958ad90cacc8ece7f238fde3671e1b350ee1741964edf2a22fd16f60224163"
+checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29"
 dependencies = [
+ "autocfg",
  "serde",
  "static_assertions",
+ "version_check",
 ]
 
 [[package]]
@@ -1132,13 +1151,13 @@
 
 [[package]]
 name = "syn"
-version = "1.0.86"
+version = "1.0.98"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
+checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
 dependencies = [
  "proc-macro2",
  "quote",
- "unicode-xid",
+ "unicode-ident",
 ]
 
 [[package]]
@@ -1157,9 +1176,9 @@
 
 [[package]]
 name = "tera"
-version = "1.15.0"
+version = "1.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3cac831b615c25bcef632d1cabf864fa05813baad3d526829db18eb70e8b58d"
+checksum = "7c9783d6ff395ae80cf17ed9a25360e7ba37742a79fa8fddabb073c5c7c8856d"
 dependencies = [
  "chrono",
  "chrono-tz",
@@ -1188,9 +1207,9 @@
 
 [[package]]
 name = "textwrap"
-version = "0.14.2"
+version = "0.15.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80"
+checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
 dependencies = [
  "smawk",
  "unicode-linebreak",
@@ -1198,12 +1217,6 @@
 ]
 
 [[package]]
-name = "textwrap"
-version = "0.15.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
-
-[[package]]
 name = "thread_local"
 version = "1.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1214,9 +1227,9 @@
 
 [[package]]
 name = "tinyvec"
-version = "1.5.1"
+version = "1.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
 dependencies = [
  "tinyvec_macros",
 ]
@@ -1229,9 +1242,9 @@
 
 [[package]]
 name = "toml"
-version = "0.5.8"
+version = "0.5.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
+checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
 dependencies = [
  "serde",
 ]
@@ -1244,15 +1257,15 @@
 
 [[package]]
 name = "ucd-trie"
-version = "0.1.3"
+version = "0.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
+checksum = "89570599c4fe5585de2b388aab47e99f7fa4e9238a1399f707a02e356058141c"
 
 [[package]]
 name = "uncased"
-version = "0.9.6"
+version = "0.9.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5baeed7327e25054889b9bd4f975f32e5f4c5d434042d59ab6cd4142c0a76ed0"
+checksum = "09b01702b0fd0b3fadcf98e098780badda8742d4f4a7676615cad90e8ac73622"
 dependencies = [
  "version_check",
 ]
@@ -1309,9 +1322,15 @@
 
 [[package]]
 name = "unicode-bidi"
-version = "0.3.7"
+version = "0.3.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
 
 [[package]]
 name = "unicode-linebreak"
@@ -1324,9 +1343,9 @@
 
 [[package]]
 name = "unicode-normalization"
-version = "0.1.19"
+version = "0.1.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
+checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6"
 dependencies = [
  "tinyvec",
 ]
@@ -1338,12 +1357,6 @@
 checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
 
 [[package]]
-name = "unicode-xid"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
-
-[[package]]
 name = "url"
 version = "2.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1390,9 +1403,9 @@
 
 [[package]]
 name = "wasi"
-version = "0.10.2+wasi-snapshot-preview1"
+version = "0.11.0+wasi-snapshot-preview1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
 
 [[package]]
 name = "winapi"
diff --git a/third_party/rules_rust/crate_universe/Cargo.toml b/third_party/rules_rust/crate_universe/Cargo.toml
index 1fe8d83..dd4103e 100644
--- a/third_party/rules_rust/crate_universe/Cargo.toml
+++ b/third_party/rules_rust/crate_universe/Cargo.toml
@@ -6,7 +6,7 @@
 
 [package]
 name = "cargo-bazel"
-version = "0.0.28"
+version = "0.4.0"
 authors = [
     "Andre Brisco - andre.brisco@protonmail.com",
 ]
@@ -19,25 +19,27 @@
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
-anyhow = "1.0.51"
-cargo_metadata = "0.14.1"
-cargo_toml = "0.11.4"
-cargo-lock = "7.0.1"
+anyhow = "1.0.57"
+cargo_metadata = "0.14.2"
+cargo_toml = "0.11.5"
+cargo-lock = "8.0.2"
 cargo-platform = "0.1.2"
-cfg-expr = "0.10.1"
-clap = { version = "3.0.14", features = ["derive", "env"] }
-crates-index = { version = "0.18.5", default-features = false }
+cfg-expr = "0.10.3"
+clap = { version = "3.1.18", features = ["derive", "env"] }
+crates-index = { version = "0.18.8", default-features = false }
 hex = "0.4.3"
+normpath = "0.3"
 pathdiff = "0.2.1"
-regex = "1.5.4"
-semver = "1.0.5"
-serde = "1.0.136"
-serde_json = "1.0.79"
-sha2 = "0.10.1"
-tempfile = "3.2.0"
-tera = "1.15.0"
-textwrap = "0.14.2"
-toml = "0.5.8"
+regex = "1.5.6"
+semver = "1.0.10"
+serde = "1.0.137"
+serde_json = "1.0.81"
+sha2 = "0.10.2"
+tempfile = "3.3.0"
+tera = "1.16.0"
+textwrap = "0.15.0"
+toml = "0.5.9"
 
 [dev-dependencies]
+maplit = "1"
 spectral = "0.6.0"
diff --git a/third_party/rules_rust/crate_universe/DEVELOPMENT.md b/third_party/rules_rust/crate_universe/DEVELOPMENT.md
new file mode 100644
index 0000000..7109112
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/DEVELOPMENT.md
@@ -0,0 +1,33 @@
+# Developing crate_universe
+
+## Bootstrapping
+
+Crate Universe repository rules are backed by a binary called `cargo-bazel`.
+This can be built using cargo by simply changing directories to
+`@rules_rust//crate_universe` and running the following:
+
+```shell
+cargo build --bin=cargo-bazel
+```
+
+It's then recommended to export the `CARGO_BAZEL_GENERATOR_URL` environment
+variable to be a `file://` url to the built binary on disk.
+
+```shell
+export CARGO_BAZEL_GENERATOR_URL=$(pwd)/target/debug/cargo-bazel
+```
+
+From here on, the repository rule can be run
+
+## Using non-release rules_rust
+
+If a project does not get `rules_rust` from a release artifact from the Github
+releases page (e.g. using an archive from a commit or branch) then `cargo-bazel`
+binaries will have to manually be specified for repository rules that consume it.
+It's highly recommended to build `cargo-bazel` binaries yourself and host them
+somewhere the project can safely access them. Without this, repository rules will
+attempt to build the binary using [cargo_bootstrap_repository][cbr] as a fallback.
+This is very time consuming and in no way the recommended workflow for anything
+other than developing `rules_rust` directly.
+
+[cbr]: https://bazelbuild.github.io/rules_rust/cargo.html#cargo_bootstrap_repository
diff --git a/third_party/rules_rust/crate_universe/README.md b/third_party/rules_rust/crate_universe/README.md
index 2654173..300ff4b 100644
--- a/third_party/rules_rust/crate_universe/README.md
+++ b/third_party/rules_rust/crate_universe/README.md
@@ -1,6 +1,6 @@
-# Cargo->Bazel
+# Crate Universe
 
-`cargo->bazel` is a tool used which uses [Cargo][cargo] to generate build targets for [Bazel][bazel].
+`crate_universe` is a collection of tools which use [Cargo][cargo] to generate build targets for [Bazel][bazel].
 
 ## [Documentation][docs]
 
diff --git a/third_party/rules_rust/crate_universe/crates.bzl b/third_party/rules_rust/crate_universe/crates.bzl
deleted file mode 100644
index 40dc413..0000000
--- a/third_party/rules_rust/crate_universe/crates.bzl
+++ /dev/null
@@ -1,68 +0,0 @@
-"""A module defining dependencies of the `cargo-bazel` Rust target"""
-
-load("@rules_rust//rust:defs.bzl", "rust_common")
-load("//crate_universe:defs.bzl", "crate", "crates_repository", "crates_vendor")
-load("//crate_universe:deps_bootstrap.bzl", "cargo_bazel_bootstrap")
-load("//crate_universe/3rdparty:third_party_deps.bzl", "third_party_deps")
-load("//crate_universe/3rdparty/crates:crates.bzl", _vendor_crate_repositories = "crate_repositories")
-load("//crate_universe/private:vendor_utils.bzl", "crates_vendor_deps")
-load("//crate_universe/tools/cross_installer:cross_installer_deps.bzl", "cross_installer_deps")
-
-USE_CRATES_REPOSITORY = False
-
-_REPOSITORY_NAME = "crate_index"
-
-_ANNOTATIONS = {
-    "libgit2-sys": [crate.annotation(
-        gen_build_script = False,
-        deps = ["@libgit2"],
-    )],
-    "libz-sys": [crate.annotation(
-        gen_build_script = False,
-        deps = ["@zlib"],
-    )],
-}
-
-_MANIFESTS = [
-    "@rules_rust//crate_universe:Cargo.toml",
-    "@rules_rust//crate_universe/tools/cross_installer:Cargo.toml",
-    "@rules_rust//crate_universe/tools/urls_generator:Cargo.toml",
-]
-
-def crate_deps_repository(rust_version = rust_common.default_version, bootstrap = False):
-    """Define dependencies of the `cargo-bazel` Rust target
-
-    Args:
-        rust_version (str, optional): The version of rust to use when generating dependencies.
-        bootstrap (bool, optional): If true, a `cargo_bootstrap_repository` target will be generated.
-    """
-    third_party_deps()
-
-    cargo_bazel_bootstrap(rust_version = rust_version)
-
-    if USE_CRATES_REPOSITORY:
-        crates_repository(
-            name = _REPOSITORY_NAME,
-            annotations = _ANNOTATIONS,
-            generator = "@cargo_bazel_bootstrap//:cargo-bazel" if bootstrap else None,
-            lockfile = "@rules_rust//crate_universe:Cargo.Bazel.lock",
-            manifests = _MANIFESTS,
-            rust_version = rust_version,
-        )
-
-    else:
-        _vendor_crate_repositories()
-
-    crates_vendor_deps()
-    cross_installer_deps()
-
-def crate_deps_target(name = "crates_vendor", vendor_path = "crates"):
-    crates_vendor(
-        name = name,
-        repository_name = _REPOSITORY_NAME,
-        annotations = _ANNOTATIONS,
-        manifests = _MANIFESTS,
-        vendor_path = vendor_path,
-        mode = "remote",
-        tags = ["manual"],
-    )
diff --git a/third_party/rules_rust/crate_universe/crates_deps.bzl b/third_party/rules_rust/crate_universe/crates_deps.bzl
deleted file mode 100644
index 5883d50..0000000
--- a/third_party/rules_rust/crate_universe/crates_deps.bzl
+++ /dev/null
@@ -1,8 +0,0 @@
-"""Transitive dependencies of the `cargo-bazel` Rust target"""
-
-load("@crate_index//:defs.bzl", _repository_crate_repositories = "crate_repositories")
-load("//crate_universe:crates.bzl", "USE_CRATES_REPOSITORY")
-
-def crate_repositories():
-    if USE_CRATES_REPOSITORY:
-        _repository_crate_repositories()
diff --git a/third_party/rules_rust/crate_universe/defs.bzl b/third_party/rules_rust/crate_universe/defs.bzl
index 13060e8..095e264 100644
--- a/third_party/rules_rust/crate_universe/defs.bzl
+++ b/third_party/rules_rust/crate_universe/defs.bzl
@@ -1,148 +1,4 @@
-"""# Crate Universe
-
-Crate Universe is a set of Bazel rule for generating Rust targets using Cargo.
-
-## Experimental
-
-`crate_universe` is experimental, and may have breaking API changes at any time. These instructions may also change without notice.
-
-## Rules
-
-- [crates_repository](#crates_repository)
-- [crates_vendor](#crates_vendor)
-- [crate.spec](#cratespec)
-- [crate.workspace_member](#crateworkspace_member)
-- [crate.annotation](#crateannotation)
-- [render_config](#render_config)
-- [splicing_config](#splicing_config)
-
-## `crates_repository` Workflows
-
-The [`crates_repository`](#crates_repository) rule (the primary repository rule of `cargo-bazel`) supports a number of different ways users
-can express and organize their dependencies. The most common are listed below though there are more to be found in
-the [./examples/crate_universe](https://github.com/bazelbuild/rules_rust/tree/main/examples/crate_universe) directory.
-
-### Cargo Workspaces
-
-One of the simpler ways to wire up dependencies would be to first structure your project into a [Cargo workspace][cw].
-The `crates_repository` rule can ingest a the root `Cargo.toml` file and generate dependencies from there.
-
-```python
-load("@rules_rust//crate_universe:defs.bzl", "crate", "crates_repository")
-
-crates_repository(
-    name = "crate_index",
-    lockfile = "//:Cargo.Bazel.lock",
-    manifests = ["//:Cargo.toml"],
-)
-
-load("@crate_index//:defs.bzl", "crate_repositories")
-
-crate_repositories()
-```
-
-The generated `crates_repository` contains helper macros which make collecting dependencies for Bazel targets simpler.
-Notably, the `all_crate_deps` and `aliases` macros commonly allow the `Cargo.toml` files to be the single source of
-truth for dependencies. Since these macros come from the generated repository, the dependencies and alias definitions
-they return will automatically update BUILD targets.
-
-```python
-load("@crate_index//:defs.bzl", "aliases", "all_crate_deps")
-load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test")
-
-rust_library(
-    name = "lib",
-    aliases = aliases(),
-    deps = all_crate_deps(
-        normal = True,
-    ),
-    proc_macro_deps = all_crate_deps(
-        proc_macro = True,
-    ),
-)
-
-rust_test(
-    name = "unit_test",
-    crate = ":lib",
-    aliases = aliases(
-        normal_dev = True,
-        proc_macro_dev = True,
-    ),
-    deps = all_crate_deps(
-        normal_dev = True,
-    ),
-    proc_macro_deps = all_crate_deps(
-        proc_macro_dev = True,
-    ),
-)
-```
-
-### Direct Packages
-
-In cases where Rust targets have heavy interractions with other Bazel targests ([Cc][cc], [Proto][proto], etc.),
-maintaining `Cargo.toml` files may have deminishing returns as things like [rust-analyzer][ra] begin to be confused
-about missing targets or environment variables defined only in Bazel. In workspaces like this, it may be desirable
-to have a "Cargo free" setup. `crates_repository` supports this through the `packages` attribute.
-
-```python
-load("@cargo_bazel//:defs.bzl", "crate", "crates_repository", "render_config")
-
-crates_repository(
-    name = "crate_index",
-    lockfile = "//:Cargo.Bazel.lock",
-    packages = {
-        "async-trait": crate.spec(
-            version = "0.1.51",
-        ),
-        "mockall": crate.spec(
-            version = "0.10.2",
-        ),
-        "tokio": crate.spec(
-            version = "1.12.0",
-        ),
-    },
-    # Setting the default package name to `""` forces the use of the macros defined in this repository
-    # to always use the root package when looking for dependencies or aliases. This should be considered
-    # optional as the repository also exposes alises for easy access to all dependencies.
-    render_config = render_config(
-        default_package_name = ""
-    ),
-)
-
-load("@crate_index//:defs.bzl", "crate_repositories")
-
-crate_repositories()
-```
-
-Consuming dependencies may be more ergonomic in this case through the aliases defined in the new repository.
-
-```python
-load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test")
-
-rust_library(
-    name = "lib",
-    deps = [
-        "@crate_index//:tokio",
-    ],
-    proc_macro_deps = [
-        "@crate_index//:async-trait",
-    ],
-)
-
-rust_test(
-    name = "unit_test",
-    crate = ":lib",
-    deps = [
-        "@crate_index//:mockall",
-    ],
-)
-```
-
-[cw]: https://doc.rust-lang.org/book/ch14-03-cargo-workspaces.html
-[cc]: https://docs.bazel.build/versions/main/be/c-cpp.html
-[proto]: https://rules-proto-grpc.com/en/latest/lang/rust.html
-[ra]: https://rust-analyzer.github.io/
-"""
+"""Crate Universe rules"""
 
 load(
     "//crate_universe/private:crate.bzl",
@@ -165,8 +21,11 @@
     _splicing_config = "splicing_config",
 )
 
-crate = _crate
+# Rules
 crates_repository = _crates_repository
 crates_vendor = _crates_vendor
+
+# Utility Macros
+crate = _crate
 render_config = _render_config
 splicing_config = _splicing_config
diff --git a/third_party/rules_rust/crate_universe/docs.bzl b/third_party/rules_rust/crate_universe/docs.bzl
new file mode 100644
index 0000000..fe5ef83
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/docs.bzl
@@ -0,0 +1,209 @@
+"""# Crate Universe
+
+Crate Universe is a set of Bazel rule for generating Rust targets using Cargo.
+
+## Setup
+
+After loading `rules_rust` in your workspace, set the following to begin using `crate_universe`:
+
+```python
+load("@rules_rust//crate_universe:repositories.bzl", "crate_universe_dependencies")
+
+crate_universe_dependencies()
+```
+
+Note that if the current version of `rules_rust` is not a release artifact, you may need to set additional
+flags such as [`bootstrap = True`](#crate_universe_dependencies-bootstrap) on the `crate_universe_dependencies`
+call above or [crates_repository::generator_urls](#crates_repository-generator_urls) in uses of `crates_repository`.
+
+## Rules
+
+- [crates_repository](#crates_repository)
+- [crates_vendor](#crates_vendor)
+
+## Utility Macros
+
+- [crate_universe_dependencies](#crate_universe_dependencies)
+- [crate.annotation](#crateannotation)
+- [crate.spec](#cratespec)
+- [crate.workspace_member](#crateworkspace_member)
+- [render_config](#render_config)
+- [splicing_config](#splicing_config)
+
+## Workflows
+
+The [`crates_repository`](#crates_repository) rule (the primary repository rule of `rules_rust`'s cargo support) supports a number of different
+ways users can express and organize their dependencies. The most common are listed below though there are more to be found in
+the [./examples/crate_universe](https://github.com/bazelbuild/rules_rust/tree/main/examples/crate_universe) directory.
+
+### Cargo Workspaces
+
+One of the simpler ways to wire up dependencies would be to first structure your project into a [Cargo workspace][cw].
+The `crates_repository` rule can ingest a root `Cargo.toml` file and generate dependencies from there.
+
+```python
+load("@rules_rust//crate_universe:defs.bzl", "crates_repository")
+
+crates_repository(
+    name = "crate_index",
+    lockfile = "//:Cargo.Bazel.lock",
+    manifests = ["//:Cargo.toml"],
+)
+
+load("@crate_index//:defs.bzl", "crate_repositories")
+
+crate_repositories()
+```
+
+The generated `crates_repository` contains helper macros which make collecting dependencies for Bazel targets simpler.
+Notably, the `all_crate_deps` and `aliases` macros (see [Dependencies API](#dependencies-api)) commonly allow the
+`Cargo.toml` files to be the single source of truth for dependencies. Since these macros come from the generated
+repository, the dependencies and alias definitions they return will automatically update BUILD targets.
+
+```python
+load("@crate_index//:defs.bzl", "aliases", "all_crate_deps")
+load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test")
+
+rust_library(
+    name = "lib",
+    aliases = aliases(),
+    deps = all_crate_deps(
+        normal = True,
+    ),
+    proc_macro_deps = all_crate_deps(
+        proc_macro = True,
+    ),
+)
+
+rust_test(
+    name = "unit_test",
+    crate = ":lib",
+    aliases = aliases(
+        normal_dev = True,
+        proc_macro_dev = True,
+    ),
+    deps = all_crate_deps(
+        normal_dev = True,
+    ),
+    proc_macro_deps = all_crate_deps(
+        proc_macro_dev = True,
+    ),
+)
+```
+
+### Direct Packages
+
+In cases where Rust targets have heavy interractions with other Bazel targests ([Cc][cc], [Proto][proto], etc.),
+maintaining `Cargo.toml` files may have deminishing returns as things like [rust-analyzer][ra] begin to be confused
+about missing targets or environment variables defined only in Bazel. In workspaces like this, it may be desirable
+to have a "Cargo free" setup. `crates_repository` supports this through the `packages` attribute.
+
+```python
+load("@cargo_bazel//:defs.bzl", "crate", "crates_repository", "render_config")
+
+crates_repository(
+    name = "crate_index",
+    lockfile = "//:Cargo.Bazel.lock",
+    packages = {
+        "async-trait": crate.spec(
+            version = "0.1.51",
+        ),
+        "mockall": crate.spec(
+            version = "0.10.2",
+        ),
+        "tokio": crate.spec(
+            version = "1.12.0",
+        ),
+    },
+    # Setting the default package name to `""` forces the use of the macros defined in this repository
+    # to always use the root package when looking for dependencies or aliases. This should be considered
+    # optional as the repository also exposes alises for easy access to all dependencies.
+    render_config = render_config(
+        default_package_name = ""
+    ),
+)
+
+load("@crate_index//:defs.bzl", "crate_repositories")
+
+crate_repositories()
+```
+
+Consuming dependencies may be more ergonomic in this case through the aliases defined in the new repository.
+
+```python
+load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test")
+
+rust_library(
+    name = "lib",
+    deps = [
+        "@crate_index//:tokio",
+    ],
+    proc_macro_deps = [
+        "@crate_index//:async-trait",
+    ],
+)
+
+rust_test(
+    name = "unit_test",
+    crate = ":lib",
+    deps = [
+        "@crate_index//:mockall",
+    ],
+)
+```
+
+## Dependencies API
+
+After rendering dependencies, convenience macros may also be generated to provide
+convenient accessors to larger sections of the dependency graph.
+
+- [aliases](#aliases)
+- [crate_deps](#crate_deps)
+- [all_crate_deps](#all_crate_deps)
+- [crate_repositories](#crate_repositories)
+
+---
+
+---
+
+[cw]: https://doc.rust-lang.org/book/ch14-03-cargo-workspaces.html
+[cc]: https://docs.bazel.build/versions/main/be/c-cpp.html
+[proto]: https://rules-proto-grpc.com/en/latest/lang/rust.html
+[ra]: https://rust-analyzer.github.io/
+"""
+
+load(
+    "//crate_universe:defs.bzl",
+    _crate = "crate",
+    _crates_repository = "crates_repository",
+    _crates_vendor = "crates_vendor",
+    _render_config = "render_config",
+    _splicing_config = "splicing_config",
+)
+load(
+    "//crate_universe:repositories.bzl",
+    _crate_universe_dependencies = "crate_universe_dependencies",
+)
+load(
+    "//crate_universe/3rdparty/crates:defs.bzl",
+    _aliases = "aliases",
+    _all_crate_deps = "all_crate_deps",
+    _crate_deps = "crate_deps",
+    _crate_repositories = "crate_repositories",
+)
+
+# Rules
+crates_repository = _crates_repository
+crates_vendor = _crates_vendor
+
+# Utility Macros
+crate_universe_dependencies = _crate_universe_dependencies
+crate = _crate
+render_config = _render_config
+splicing_config = _splicing_config
+
+# Dependencies API
+aliases = _aliases
+all_crate_deps = _all_crate_deps
+crate_deps = _crate_deps
+crate_repositories = _crate_repositories
diff --git a/third_party/rules_rust/crate_universe/private/BUILD.bazel b/third_party/rules_rust/crate_universe/private/BUILD.bazel
index 39f0969..0b41b53 100644
--- a/third_party/rules_rust/crate_universe/private/BUILD.bazel
+++ b/third_party/rules_rust/crate_universe/private/BUILD.bazel
@@ -14,11 +14,3 @@
     name = "bzl_srcs",
     srcs = glob(["*.bzl"]),
 )
-
-filegroup(
-    name = "distro",
-    srcs = glob(["*.bzl"]) + [
-        "BUILD.bazel",
-        "//crate_universe/private/vendor:distro",
-    ],
-)
diff --git a/third_party/rules_rust/crate_universe/private/common_utils.bzl b/third_party/rules_rust/crate_universe/private/common_utils.bzl
index ae65b63..8faa7e7 100644
--- a/third_party/rules_rust/crate_universe/private/common_utils.bzl
+++ b/third_party/rules_rust/crate_universe/private/common_utils.bzl
@@ -1,15 +1,19 @@
 """Common utilities useful for unifying the behavior of different parts of `cargo-bazel`."""
 
 # buildifier: disable=bzl-visibility
-load(
-    "//cargo/private:cargo_utils.bzl",
-    _get_host_triple = "get_host_triple",
-    _rust_get_rust_tools = "get_rust_tools",
-)
+load("//cargo/private:cargo_utils.bzl", _rust_get_rust_tools = "get_rust_tools")
+load("//rust/platform:triple.bzl", _get_host_triple = "get_host_triple")
 
 get_host_triple = _get_host_triple
 
 CARGO_BAZEL_ISOLATED = "CARGO_BAZEL_ISOLATED"
+CARGO_BAZEL_REPIN = "CARGO_BAZEL_REPIN"
+REPIN = "REPIN"
+
+REPIN_ENV_VARS = [
+    CARGO_BAZEL_REPIN,
+    REPIN,
+]
 
 _EXECUTE_ERROR_MESSAGE = """\
 Command {args} failed with exit code {exit_code}.
diff --git a/third_party/rules_rust/crate_universe/private/crate.bzl b/third_party/rules_rust/crate_universe/private/crate.bzl
index 611bf62..caa9091 100644
--- a/third_party/rules_rust/crate_universe/private/crate.bzl
+++ b/third_party/rules_rust/crate_universe/private/crate.bzl
@@ -65,11 +65,13 @@
         additive_build_file = None,
         additive_build_file_content = None,
         build_script_data = None,
+        build_script_tools = None,
         build_script_data_glob = None,
         build_script_deps = None,
         build_script_env = None,
         build_script_proc_macro_deps = None,
         build_script_rustc_env = None,
+        build_script_toolchains = None,
         compile_data = None,
         compile_data_glob = None,
         crate_features = None,
@@ -93,6 +95,7 @@
         additive_build_file (str, optional): A file containing extra contents to write to the bottom of
             generated BUILD files.
         build_script_data (list, optional): A list of labels to add to a crate's `cargo_build_script::data` attribute.
+        build_script_tools (list, optional): A list of labels to add to a crate's `cargo_build_script::tools` attribute.
         build_script_data_glob (list, optional): A list of glob patterns to add to a crate's `cargo_build_script::data`
             attribute.
         build_script_deps (list, optional): A list of labels to add to a crate's `cargo_build_script::deps` attribute.
@@ -102,6 +105,7 @@
             `cargo_build_script::proc_macro_deps` attribute.
         build_script_rustc_env (dict, optional): Additional environment variables to set on a crate's
             `cargo_build_script::env` attribute.
+        build_script_toolchains (list, optional): A list of labels to set on a crates's `cargo_build_script::toolchains` attribute.
         compile_data (list, optional): A list of labels to add to a crate's `rust_library::compile_data` attribute.
         compile_data_glob (list, optional): A list of glob patterns to add to a crate's `rust_library::compile_data`
             attribute.
@@ -142,11 +146,13 @@
             additive_build_file = additive_build_file,
             additive_build_file_content = additive_build_file_content,
             build_script_data = build_script_data,
+            build_script_tools = build_script_tools,
             build_script_data_glob = build_script_data_glob,
             build_script_deps = build_script_deps,
             build_script_env = build_script_env,
             build_script_proc_macro_deps = build_script_proc_macro_deps,
             build_script_rustc_env = build_script_rustc_env,
+            build_script_toolchains = build_script_toolchains,
             compile_data = compile_data,
             compile_data_glob = compile_data_glob,
             crate_features = crate_features,
diff --git a/third_party/rules_rust/crate_universe/private/crates_repository.bzl b/third_party/rules_rust/crate_universe/private/crates_repository.bzl
index 92def09..f429108 100644
--- a/third_party/rules_rust/crate_universe/private/crates_repository.bzl
+++ b/third_party/rules_rust/crate_universe/private/crates_repository.bzl
@@ -1,6 +1,6 @@
 """`crates_repository` rule implementation"""
 
-load("//crate_universe/private:common_utils.bzl", "get_host_triple", "get_rust_tools")
+load("//crate_universe/private:common_utils.bzl", "get_rust_tools")
 load(
     "//crate_universe/private:generate_utils.bzl",
     "CRATES_REPOSITORY_ENVIRON",
@@ -8,7 +8,7 @@
     "execute_generator",
     "generate_config",
     "get_generator",
-    "get_lockfile",
+    "get_lockfiles",
 )
 load(
     "//crate_universe/private:splicing_utils.bzl",
@@ -17,6 +17,7 @@
 )
 load("//crate_universe/private:urls.bzl", "CARGO_BAZEL_SHA256S", "CARGO_BAZEL_URLS")
 load("//rust:defs.bzl", "rust_common")
+load("//rust/platform:triple.bzl", "get_host_triple")
 load("//rust/platform:triple_mappings.bzl", "SUPPORTED_PLATFORM_TRIPLES")
 
 def _crates_repository_impl(repository_ctx):
@@ -24,13 +25,13 @@
     host_triple = get_host_triple(repository_ctx)
 
     # Locate the generator to use
-    generator, generator_sha256 = get_generator(repository_ctx, host_triple.triple)
+    generator, generator_sha256 = get_generator(repository_ctx, host_triple.str)
 
     # Generate a config file for all settings
-    config = generate_config(repository_ctx)
+    config_path = generate_config(repository_ctx)
 
-    # Locate the lockfile
-    lockfile = get_lockfile(repository_ctx)
+    # Locate the lockfiles
+    lockfiles = get_lockfiles(repository_ctx)
 
     # Locate Rust tools (cargo, rustc)
     tools = get_rust_tools(repository_ctx, host_triple)
@@ -44,9 +45,8 @@
     repin = determine_repin(
         repository_ctx = repository_ctx,
         generator = generator,
-        lockfile_path = lockfile.path,
-        lockfile_kind = lockfile.kind,
-        config = config.path,
+        lockfile_path = lockfiles.bazel,
+        config = config_path,
         splicing_manifest = splicing_manifest,
         cargo = cargo_path,
         rustc = rustc_path,
@@ -54,12 +54,12 @@
 
     # If re-pinning is enabled, gather additional inputs for the generator
     kwargs = dict()
-    if repin or lockfile.kind == "cargo":
+    if repin:
         # Generate a top level Cargo workspace and manifest for use in generation
         metadata_path = splice_workspace_manifest(
             repository_ctx = repository_ctx,
             generator = generator,
-            lockfile = lockfile,
+            cargo_lockfile = lockfiles.cargo,
             splicing_manifest = splicing_manifest,
             cargo = cargo_path,
             rustc = rustc_path,
@@ -67,17 +67,16 @@
 
         kwargs.update({
             "metadata": metadata_path,
-            "repin": True,
         })
 
     # Run the generator
     execute_generator(
         repository_ctx = repository_ctx,
         generator = generator,
-        config = config.path,
+        config = config_path,
         splicing_manifest = splicing_manifest,
-        lockfile_path = lockfile.path,
-        lockfile_kind = lockfile.kind,
+        lockfile_path = lockfiles.bazel,
+        cargo_lockfile_path = lockfiles.cargo,
         repository_dir = repository_ctx.path("."),
         cargo = cargo_path,
         rustc = rustc_path,
@@ -97,11 +96,17 @@
     if generator_sha256:
         attrs.update({"generator_sha256s": generator_sha256})
 
+    # Inform users that the repository rule can be made deterministic if they
+    # add a label to a lockfile path specifically for Bazel.
+    if not lockfiles.bazel:
+        attrs.update({"lockfile": repository_ctx.attr.cargo_lockfile.relative("cargo-bazel-lock.json")})
+
     return attrs
 
 crates_repository = repository_rule(
     doc = """\
-A rule for defining and downloading Rust dependencies (crates).
+A rule for defining and downloading Rust dependencies (crates). This rule
+handles all the same [workflows](#workflows) `crate_universe` rules do.
 
 Environment Variables:
 
@@ -110,28 +115,94 @@
 | `CARGO_BAZEL_GENERATOR_SHA256` | The sha256 checksum of the file located at `CARGO_BAZEL_GENERATOR_URL` |
 | `CARGO_BAZEL_GENERATOR_URL` | The URL of a cargo-bazel binary. This variable takes precedence over attributes and can use `file://` for local paths |
 | `CARGO_BAZEL_ISOLATED` | An authorative flag as to whether or not the `CARGO_HOME` environment variable should be isolated from the host configuration |
-| `CARGO_BAZEL_REPIN` | An indicator that the dependencies represented by the rule should be regenerated. `REPIN` may also be used. |
+| `CARGO_BAZEL_REPIN` | An indicator that the dependencies represented by the rule should be regenerated. `REPIN` may also be used. See [Repinning / Updating Dependencies](#crates_repository_repinning_updating_dependencies) for more details. |
+
+Example:
+
+Given the following workspace structure:
+
+```text
+[workspace]/
+    WORKSPACE
+    BUILD
+    Cargo.toml
+    Cargo.Bazel.lock
+    src/
+        main.rs
+```
+
+The following is something that'd be found in the `WORKSPACE` file:
+
+```python
+load("@rules_rust//crate_universe:defs.bzl", "crates_repository", "crate")
+
+crates_repository(
+    name = "crate_index",
+    annotations = annotations = {
+        "rand": [crate.annotation(
+            default_features = False,
+            features = ["small_rng"],
+        )],
+    },
+    cargo_lockfile = "//:Cargo.Bazel.lock",
+    lockfile = "//:cargo-bazel-lock.json",
+    manifests = ["//:Cargo.toml"],
+    # Should match the version represented by the currently registered `rust_toolchain`.
+    rust_version = "1.60.0",
+)
+```
+
+The above will create an external repository which contains aliases and macros for accessing
+Rust targets found in the dependency graph defined by the given manifests.
+
+**NOTE**: The `lockfile` must be manually created. The rule unfortunately does not yet create
+it on its own. When initially setting up this rule, an empty file should be created and then
+populated by repinning dependencies.
+
+<a id="#crates_repository_repinning_updating_dependencies"></a>
+
+### Repinning / Updating Dependencies
+
+Dependency syncing and updating is done in the repository rule which means it's done during the
+analysis phase of builds. As mentioned in the environments variable table above, the `CARGO_BAZEL_REPIN`
+(or `REPIN`) environment variables can be used to force the rule to update dependencies and potentially
+render a new lockfile. Given an instance of this repository rule named `crate_index`, the easiest way to
+repin dependencies is to run:
+
+```shell
+CARGO_BAZEL_REPIN=1 bazel sync --only=crate_index
+```
+
+This will result in all dependencies being updated for a project. The `CARGO_BAZEL_REPIN` environment variable
+can also be used to customize how dependencies are updated. The following table shows translations from environment
+variable values to the equivilant [cargo update](https://doc.rust-lang.org/cargo/commands/cargo-update.html) command
+that is called behind the scenes to update dependencies.
+
+| Value | Cargo command |
+| --- | --- |
+| Any of [`true`, `1`, `yes`, `on`] | `cargo update` |
+| `workspace` | `cargo update --workspace` |
+| `package_name` | `cargo upgrade --package package_name` |
+| `package_name@1.2.3` | `cargo upgrade --package package_name --precise 1.2.3` |
 
 """,
     implementation = _crates_repository_impl,
     attrs = {
         "annotations": attr.string_list_dict(
-            doc = "Extra settings to apply to crates. See [crate.annotations](#crateannotations).",
+            doc = "Extra settings to apply to crates. See [crate.annotation](#crateannotation).",
         ),
         "cargo_config": attr.label(
             doc = "A [Cargo configuration](https://doc.rust-lang.org/cargo/reference/config.html) file",
         ),
-        "extra_workspace_member_url_template": attr.string(
-            doc = "The registry url to use when fetching extra workspace members",
-            default = "https://crates.io/api/v1/crates/{name}/{version}/download",
-        ),
-        "extra_workspace_members": attr.string_dict(
+        "cargo_lockfile": attr.label(
             doc = (
-                "Additional crates to download and include as a workspace member. This is unfortunately required in " +
-                "order to add information about \"binary-only\" crates so that a `rust_binary` may be generated for " +
-                "it. [rust-lang/cargo#9096](https://github.com/rust-lang/cargo/issues/9096) tracks an RFC which may " +
-                "solve for this."
+                "The path used to store the `crates_repository` specific " +
+                "[Cargo.lock](https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html) file. " +
+                "In the case that your `crates_repository` corresponds directly with an existing " +
+                "`Cargo.toml` file which has a paired `Cargo.lock` file, that `Cargo.lock` file " +
+                "should be used here, which will keep the versions used by cargo and bazel in sync."
             ),
+            mandatory = True,
         ),
         "generate_build_scripts": attr.bool(
             doc = (
@@ -169,27 +240,9 @@
         ),
         "lockfile": attr.label(
             doc = (
-                "The path to a file to use for reproducible renderings. Two kinds of lock files are supported, " +
-                "Cargo (`Cargo.lock` files) and Bazel (custom files generated by this rule, naming is irrelevant). " +
-                "Bazel lockfiles should be the prefered kind as they're desigend with Bazel's notions of " +
-                "reporducibility in mind. Cargo lockfiles can be used in cases where it's intended to be the " +
-                "source of truth, but more work will need to be done to generate BUILD files which are not " +
-                "guaranteed to be determinsitic."
+                "The path to a file to use for reproducible renderings. " +
+                "If set, this file must exist within the workspace (but can be empty) before this rule will work."
             ),
-            mandatory = True,
-        ),
-        "lockfile_kind": attr.string(
-            doc = (
-                "Two different kinds of lockfiles are supported, the custom \"Bazel\" lockfile, which is generated " +
-                "by this rule, and Cargo lockfiles (`Cargo.lock`). This attribute allows for explicitly defining " +
-                "the type in cases where it may not be auto-detectable."
-            ),
-            values = [
-                "auto",
-                "bazel",
-                "cargo",
-            ],
-            default = "auto",
         ),
         "manifests": attr.label_list(
             doc = "A list of Cargo manifests (`Cargo.toml` files).",
@@ -214,7 +267,7 @@
                 "`{system}` (eg. 'darwin'), `{cfg}` (eg. 'exec'), and `{tool}` (eg. 'rustc.exe') will be replaced in " +
                 "the string if present."
             ),
-            default = "@rust_{system}_{arch}//:bin/{tool}",
+            default = "@rust_{system}_{arch}__{triple}_tools//:bin/{tool}",
         ),
         "rust_toolchain_rustc_template": attr.string(
             doc = (
@@ -223,7 +276,7 @@
                 "`{system}` (eg. 'darwin'), `{cfg}` (eg. 'exec'), and `{tool}` (eg. 'cargo.exe') will be replaced in " +
                 "the string if present."
             ),
-            default = "@rust_{system}_{arch}//:bin/{tool}",
+            default = "@rust_{system}_{arch}__{triple}_tools//:bin/{tool}",
         ),
         "rust_version": attr.string(
             doc = "The version of Rust the currently registered toolchain is using. Eg. `1.56.0`, or `nightly-2021-09-08`",
diff --git a/third_party/rules_rust/crate_universe/private/crates_vendor.bzl b/third_party/rules_rust/crate_universe/private/crates_vendor.bzl
index 11cfaa1..021ffc3 100644
--- a/third_party/rules_rust/crate_universe/private/crates_vendor.bzl
+++ b/third_party/rules_rust/crate_universe/private/crates_vendor.bzl
@@ -1,6 +1,6 @@
 """Rules for vendoring Bazel targets into existing workspaces"""
 
-load("//crate_universe/private:generate_utils.bzl", "collect_crate_annotations", "render_config")
+load("//crate_universe/private:generate_utils.bzl", "compile_config", "render_config")
 load("//crate_universe/private:splicing_utils.bzl", "kebab_case_keys", "splicing_config")
 load("//crate_universe/private:urls.bzl", "CARGO_BAZEL_LABEL")
 load("//rust/platform:triple_mappings.bzl", "SUPPORTED_PLATFORM_TRIPLES")
@@ -9,7 +9,10 @@
 #!/usr/bin/env bash
 set -euo pipefail
 export RUNTIME_PWD="$(pwd)"
-eval exec env - BUILD_WORKSPACE_DIRECTORY="${{BUILD_WORKSPACE_DIRECTORY}}" {env} \\
+if [[ -z "${{BAZEL_REAL:-}}" ]]; then
+    BAZEL_REAL="$(which bazel || echo 'bazel')"
+fi
+eval exec env - BAZEL_REAL="${{BAZEL_REAL}}" BUILD_WORKSPACE_DIRECTORY="${{BUILD_WORKSPACE_DIRECTORY}}" {env} \\
 "{bin}" {args} "$@"
 """
 
@@ -33,7 +36,7 @@
     return "{}/{}".format(runtime_pwd_var, path)
 
 def _is_windows(ctx):
-    toolchain = ctx.toolchains[Label("@rules_rust//rust:toolchain")]
+    toolchain = ctx.toolchains[Label("@rules_rust//rust:toolchain_type")]
     return "windows" in toolchain.target_triple
 
 def _get_output_package(ctx):
@@ -55,6 +58,35 @@
     )
     return file
 
+def _prepare_manifest_path(target):
+    """Generate manifest paths that are resolvable by `cargo_bazel::SplicingManifest::resolve`
+
+    Args:
+        target (Target): A `crate_vendor.manifest` target
+
+    Returns:
+        str: A string representing the path to a manifest.
+    """
+    files = target[DefaultInfo].files.to_list()
+    if len(files) != 1:
+        fail("The manifest {} hand an unexpected number of files: {}".format(
+            target.label,
+            files,
+        ))
+
+    manifest = files[0]
+
+    if target.label.workspace_root.startswith("external"):
+        # The short path of an external file is expected to start with `../`
+        if not manifest.short_path.startswith("../"):
+            fail("Unexpected shortpath for {}: {}".format(
+                manifest,
+                manifest.short_path,
+            ))
+        return manifest.short_path.replace("../", "${output_base}/external/", 1)
+
+    return "${build_workspace_directory}/" + manifest.short_path
+
 def _write_splicing_manifest(ctx):
     # Deserialize information about direct packges
     direct_packages_info = {
@@ -64,12 +96,11 @@
     }
 
     # Manifests are required to be single files
-    manifests = {m[DefaultInfo].files.to_list()[0].short_path: str(m.label) for m in ctx.attr.manifests}
+    manifests = {_prepare_manifest_path(m): str(m.label) for m in ctx.attr.manifests}
 
     config = json.decode(ctx.attr.splicing_config or splicing_config())
     splicing_manifest_content = {
-        # TODO: How do cargo config files get factored into vendored builds
-        "cargo_config": None,
+        "cargo_config": _prepare_manifest_path(ctx.attr.cargo_config) if ctx.attr.cargo_config else None,
         "direct_packages": direct_packages_info,
         "manifests": manifests,
     }
@@ -86,33 +117,15 @@
     is_windows = _is_windows(ctx)
 
     args = ["--splicing-manifest", _runfiles_path(manifest.short_path, is_windows)]
-    runfiles = [manifest]
-    return args, runfiles
-
-def _write_extra_manifests_manifest(ctx):
-    manifest = _write_data_file(
-        ctx = ctx,
-        name = "cargo-bazel-extra-manifests-manifest.json",
-        data = json.encode(struct(
-            # TODO: This is for extra workspace members
-            manifests = [],
-        )),
-    )
-    is_windows = _is_windows(ctx)
-    args = ["--extra-manifests-manifest", _runfiles_path(manifest.short_path, is_windows)]
-    runfiles = [manifest]
+    runfiles = [manifest] + ctx.files.manifests + ([ctx.file.cargo_config] if ctx.attr.cargo_config else [])
     return args, runfiles
 
 def _write_config_file(ctx):
-    annotations = collect_crate_annotations(ctx.attr.annotations, str(ctx.label))
-    unexpected = []
-    for id, annotation in annotations.items():
-        if annotation.get("additive_build_file", None):
-            unexpected.append(id)
-    if unexpected:
-        fail("The following annotations use `additive_build_file` which is not supported for `crates_vendor`: {}".format(unexpected))
-
-    rendering_config = dict(json.decode(render_config()))
+    rendering_config = dict(json.decode(render_config(
+        regen_command = "bazel run {}".format(
+            ctx.label,
+        ),
+    )))
 
     output_pkg = _get_output_package(ctx)
 
@@ -135,16 +148,16 @@
             ctx.workspace_name,
             output_pkg,
         ),
-        "repository_name": ctx.attr.repository_name or ctx.label.name,
         "vendor_mode": ctx.attr.mode,
     })
 
-    config_data = struct(
-        annotations = annotations,
-        rendering = rendering_config,
+    config_data = compile_config(
+        crate_annotations = ctx.attr.annotations,
         generate_build_scripts = ctx.attr.generate_build_scripts,
         cargo_config = None,
+        render_config = rendering_config,
         supported_platform_triples = ctx.attr.supported_platform_triples,
+        repository_name = ctx.attr.repository_name or ctx.label.name,
     )
 
     config = _write_data_file(
@@ -162,7 +175,7 @@
     return args, runfiles
 
 def _crates_vendor_impl(ctx):
-    toolchain = ctx.toolchains[Label("@rules_rust//rust:toolchain")]
+    toolchain = ctx.toolchains[Label("@rules_rust//rust:toolchain_type")]
     is_windows = _is_windows(ctx)
 
     environ = {
@@ -196,10 +209,13 @@
     args.extend(splicing_manifest_args)
     cargo_bazel_runfiles.extend(splicing_manifest_runfiles)
 
-    # Generate extra-manifests manifest
-    extra_manifests_manifest_args, extra_manifests_manifest_runfiles = _write_extra_manifests_manifest(ctx)
-    args.extend(extra_manifests_manifest_args)
-    cargo_bazel_runfiles.extend(extra_manifests_manifest_runfiles)
+    # Add an optional `Cargo.lock` file.
+    if ctx.attr.cargo_lockfile:
+        args.extend([
+            "--cargo-lockfile",
+            _runfiles_path(ctx.file.cargo_lockfile.short_path, is_windows),
+        ])
+        cargo_bazel_runfiles.extend([ctx.file.cargo_lockfile])
 
     # Optionally include buildifier
     if ctx.attr.buildifier:
@@ -239,10 +255,81 @@
 
 crates_vendor = rule(
     implementation = _crates_vendor_impl,
-    doc = "A rule for defining Rust dependencies (crates) and writing targets for them to the current workspace",
+    doc = """\
+A rule for defining Rust dependencies (crates) and writing targets for them to the current workspace.
+This rule is useful for users whose workspaces are expected to be consumed in other workspaces as the
+rendered `BUILD` files reduce the number of workspace dependencies, allowing for easier loads. This rule
+handles all the same [workflows](#workflows) `crate_universe` rules do.
+
+Example: 
+
+Given the following workspace structure:
+
+```text
+[workspace]/
+    WORKSPACE
+    BUILD
+    Cargo.toml
+    3rdparty/
+        BUILD
+    src/
+        main.rs
+```
+
+The following is something that'd be found in `3rdparty/BUILD`:
+
+```python
+load("@rules_rust//crate_universe:defs.bzl", "crates_vendor", "crate")
+
+crates_vendor(
+    name = "crates_vendor",
+    annotations = {
+        "rand": [crate.annotation(
+            default_features = False,
+            features = ["small_rng"],
+        )],
+    },
+    cargo_lockfile = "//:Cargo.Bazel.lock",
+    manifests = ["//:Cargo.toml"],
+    mode = "remote",
+    vendor_path = "crates",
+    tags = ["manual"],
+)
+```
+
+The above creates a target that can be run to write `BUILD` files into the `3rdparty`
+directory next to where the target is defined. To run it, simply call:
+
+```shell
+bazel run //3rdparty:crates_vendor
+```
+
+<a id="#crates_vendor_repinning_updating_dependencies"></a>
+
+### Repinning / Updating Dependencies
+
+Repinning dependencies is controlled by both the `CARGO_BAZEL_REPIN` environment variable or the `--repin`
+flag to the `crates_vendor` binary. To update dependencies, simply add the flag ro your `bazel run` invocation.
+
+```shell
+bazel run //3rdparty:crates_vendor -- --repin
+```
+
+Under the hood, `--repin` will trigger a [cargo update](https://doc.rust-lang.org/cargo/commands/cargo-update.html)
+call against the generated workspace. The following table describes how to controll particular values passed to the
+`cargo update` command.
+
+| Value | Cargo command |
+| --- | --- |
+| Any of [`true`, `1`, `yes`, `on`] | `cargo update` |
+| `workspace` | `cargo update --workspace` |
+| `package_name` | `cargo upgrade --package package_name` |
+| `package_name@1.2.3` | `cargo upgrade --package package_name --precise 1.2.3` |
+
+""",
     attrs = {
         "annotations": attr.string_list_dict(
-            doc = "Extra settings to apply to crates. See [crate.annotations](#crateannotations).",
+            doc = "Extra settings to apply to crates. See [crate.annotation](#crateannotation).",
         ),
         "buildifier": attr.label(
             doc = "The path to a [buildifier](https://github.com/bazelbuild/buildtools/blob/5.0.1/buildifier/README.md) binary used to format generated BUILD files.",
@@ -260,6 +347,14 @@
             allow_files = True,
             default = CARGO_BAZEL_LABEL,
         ),
+        "cargo_config": attr.label(
+            doc = "A [Cargo configuration](https://doc.rust-lang.org/cargo/reference/config.html) file.",
+            allow_single_file = True,
+        ),
+        "cargo_lockfile": attr.label(
+            doc = "The path to an existing `Cargo.lock` file",
+            allow_single_file = True,
+        ),
         "generate_build_scripts": attr.bool(
             doc = (
                 "Whether or not to generate " +
@@ -305,7 +400,7 @@
         ),
     },
     executable = True,
-    toolchains = ["@rules_rust//rust:toolchain"],
+    toolchains = ["@rules_rust//rust:toolchain_type"],
 )
 
 def _crates_vendor_remote_repository_impl(repository_ctx):
diff --git a/third_party/rules_rust/crate_universe/private/generate_utils.bzl b/third_party/rules_rust/crate_universe/private/generate_utils.bzl
index 91e8c6e..469cb22 100644
--- a/third_party/rules_rust/crate_universe/private/generate_utils.bzl
+++ b/third_party/rules_rust/crate_universe/private/generate_utils.bzl
@@ -1,22 +1,15 @@
 """Utilities directly related to the `generate` step of `cargo-bazel`."""
 
-load(":common_utils.bzl", "CARGO_BAZEL_ISOLATED", "cargo_environ", "execute")
+load(":common_utils.bzl", "CARGO_BAZEL_ISOLATED", "REPIN_ENV_VARS", "cargo_environ", "execute")
 
 CARGO_BAZEL_GENERATOR_SHA256 = "CARGO_BAZEL_GENERATOR_SHA256"
 CARGO_BAZEL_GENERATOR_URL = "CARGO_BAZEL_GENERATOR_URL"
-CARGO_BAZEL_REPIN = "CARGO_BAZEL_REPIN"
-REPIN = "REPIN"
 
 GENERATOR_ENV_VARS = [
     CARGO_BAZEL_GENERATOR_URL,
     CARGO_BAZEL_GENERATOR_SHA256,
 ]
 
-REPIN_ENV_VARS = [
-    REPIN,
-    CARGO_BAZEL_REPIN,
-]
-
 CRATES_REPOSITORY_ENVIRON = GENERATOR_ENV_VARS + REPIN_ENV_VARS + [
     CARGO_BAZEL_ISOLATED,
 ]
@@ -92,6 +85,7 @@
         crates_module_template = "//:{file}",
         default_package_name = None,
         platforms_template = "@rules_rust//rust/platform:{triple}",
+        regen_command = None,
         vendor_mode = None):
     """Various settings used to configure rendered outputs
 
@@ -116,11 +110,12 @@
             available format keys are [`{repository}`, `{name}`, `{version}`].
         crates_module_template (str, optional): The pattern to use for the `defs.bzl` and `BUILD.bazel`
             file names used for the crates module. The available format keys are [`{file}`].
-        default_package_name (str, optional): The default package name to in the rendered macros. This affects the
+        default_package_name (str, optional): The default package name to use in the rendered macros. This affects the
             auto package detection of things like `all_crate_deps`.
         platforms_template (str, optional): The base template to use for platform names.
             See [platforms documentation](https://docs.bazel.build/versions/main/platforms.html). The available format
             keys are [`{triple}`].
+        regen_command (str, optional): An optional command to demonstrate how generated files should be regenerated.
         vendor_mode (str, optional): An optional configuration for rendirng content to be rendered into repositories.
 
     Returns:
@@ -133,6 +128,7 @@
         crates_module_template = crates_module_template,
         default_package_name = default_package_name,
         platforms_template = platforms_template,
+        regen_command = regen_command,
         vendor_mode = vendor_mode,
     ))
 
@@ -182,16 +178,85 @@
         return repository_ctx.read(config)
     return None
 
+def _update_render_config(config, repository_name):
+    """Add the repository name to the render config
+
+    Args:
+        config (dict): A `render_config` struct
+        repository_name (str): The name of the repository that owns the config
+
+    Returns:
+        struct: An updated `render_config`.
+    """
+
+    # Add the repository name as it's very relevant to rendering.
+    config.update({"repository_name": repository_name})
+
+    return struct(**config)
+
 def _get_render_config(repository_ctx):
     if repository_ctx.attr.render_config:
         config = dict(json.decode(repository_ctx.attr.render_config))
     else:
         config = dict(json.decode(render_config()))
 
-    # Add the repository name as it's very relevant to rendering.
-    config.update({"repository_name": repository_ctx.name})
+    if not config.get("regen_command"):
+        config["regen_command"] = "bazel sync --only={}".format(
+            repository_ctx.name,
+        )
 
-    return struct(**config)
+    return config
+
+def compile_config(crate_annotations, generate_build_scripts, cargo_config, render_config, supported_platform_triples, repository_name, repository_ctx = None):
+    """Create a config file for generating crate targets
+
+    [cargo_config]: https://doc.rust-lang.org/cargo/reference/config.html
+
+    Args:
+        crate_annotations (dict): Extra settings to apply to crates. See
+            `crates_repository.annotations` or `crates_vendor.annotations`.
+        generate_build_scripts (bool): Whether or not to globally disable build scripts.
+        cargo_config (str): The optional contents of a [Cargo config][cargo_config].
+        render_config (dict): The deserialized dict of the `render_config` function.
+        supported_platform_triples (list): A list of platform triples
+        repository_name (str): The name of the repository being generated
+        repository_ctx (repository_ctx, optional): A repository context object used for enabling
+            certain functionality.
+
+    Returns:
+        struct: A struct matching a `cargo_bazel::config::Config`.
+    """
+    annotations = collect_crate_annotations(crate_annotations, repository_name)
+
+    # Load additive build files if any have been provided.
+    unexpected = []
+    for name, data in annotations.items():
+        f = data.pop("additive_build_file", None)
+        if f and not repository_ctx:
+            unexpected.append(name)
+            f = None
+        content = [x for x in [
+            data.pop("additive_build_file_content", None),
+            repository_ctx.read(Label(f)) if f else None,
+        ] if x]
+        if content:
+            data.update({"additive_build_file_content": "\n".join(content)})
+
+    if unexpected:
+        fail("The following annotations use `additive_build_file` which is not supported for {}: {}".format(repository_name, unexpected))
+
+    config = struct(
+        generate_build_scripts = generate_build_scripts,
+        annotations = annotations,
+        cargo_config = cargo_config,
+        rendering = _update_render_config(
+            config = render_config,
+            repository_name = repository_name,
+        ),
+        supported_platform_triples = supported_platform_triples,
+    )
+
+    return config
 
 def generate_config(repository_ctx):
     """Generate a config file from various attributes passed to the rule.
@@ -202,26 +267,15 @@
     Returns:
         struct: A struct containing the path to a config and it's contents
     """
-    annotations = collect_crate_annotations(repository_ctx.attr.annotations, repository_ctx.name)
 
-    # Load additive build files if any have been provided.
-    content = list()
-    for data in annotations.values():
-        additive_build_file_content = data.pop("additive_build_file_content", None)
-        if additive_build_file_content:
-            content.append(additive_build_file_content)
-        additive_build_file = data.pop("additive_build_file", None)
-        if additive_build_file:
-            file_path = repository_ctx.path(Label(additive_build_file))
-            content.append(repository_ctx.read(file_path))
-        data.update({"additive_build_file_content": "\n".join(content) if content else None})
-
-    config = struct(
+    config = compile_config(
+        crate_annotations = repository_ctx.attr.annotations,
         generate_build_scripts = repository_ctx.attr.generate_build_scripts,
-        annotations = annotations,
         cargo_config = _read_cargo_config(repository_ctx),
-        rendering = _get_render_config(repository_ctx),
+        render_config = _get_render_config(repository_ctx),
         supported_platform_triples = repository_ctx.attr.supported_platform_triples,
+        repository_name = repository_ctx.name,
+        repository_ctx = repository_ctx,
     )
 
     config_path = repository_ctx.path("cargo-bazel.json")
@@ -230,37 +284,23 @@
         json.encode_indent(config, indent = " " * 4),
     )
 
-    # This was originally written to return a struct and not just the config path
-    # so splicing can have access to some rendering information embedded in the config
-    # If splicing should no longer need that info, it'd be simpler to just return a `path`.
-    return struct(
-        path = config_path,
-        info = config,
-    )
+    return config_path
 
-def get_lockfile(repository_ctx):
-    """Locate the lockfile and identify the it's type (Cargo or Bazel).
+def get_lockfiles(repository_ctx):
+    """_summary_
 
     Args:
         repository_ctx (repository_ctx): The rule's context object.
 
     Returns:
-        struct: The path to the lockfile as well as it's type
+        struct: _description_
     """
-    if repository_ctx.attr.lockfile_kind == "auto":
-        if str(repository_ctx.attr.lockfile).endswith("Cargo.lock"):
-            kind = "cargo"
-        else:
-            kind = "bazel"
-    else:
-        kind = repository_ctx.attr.lockfile_kind
-
     return struct(
-        path = repository_ctx.path(repository_ctx.attr.lockfile),
-        kind = kind,
+        cargo = repository_ctx.path(repository_ctx.attr.cargo_lockfile),
+        bazel = repository_ctx.path(repository_ctx.attr.lockfile) if repository_ctx.attr.lockfile else None,
     )
 
-def determine_repin(repository_ctx, generator, lockfile_path, lockfile_kind, config, splicing_manifest, cargo, rustc):
+def determine_repin(repository_ctx, generator, lockfile_path, config, splicing_manifest, cargo, rustc):
     """Use the `cargo-bazel` binary to determine whether or not dpeendencies need to be re-pinned
 
     Args:
@@ -269,7 +309,6 @@
         config (path): The path to a `cargo-bazel` config file. See `generate_config`.
         splicing_manifest (path): The path to a `cargo-bazel` splicing manifest. See `create_splicing_manifest`
         lockfile_path (path): The path to a "lock" file for reproducible outputs.
-        lockfile_kind (str): The type of lock file represented by `lockfile_path`
         cargo (path): The path to a Cargo binary.
         rustc (path): The path to a Rustc binary.
 
@@ -279,11 +318,11 @@
 
     # If a repin environment variable is set, always repin
     for var in REPIN_ENV_VARS:
-        if repository_ctx.os.environ.get(var, "").lower() in ["true", "yes", "1", "on"]:
+        if var in repository_ctx.os.environ and repository_ctx.os.environ[var].lower() not in ["false", "no", "0", "off"]:
             return True
 
-    # Cargo lockfiles should always be repinned.
-    if lockfile_kind == "cargo":
+    # If a deterministic lockfile was not added then always repin
+    if not lockfile_path:
         return True
 
     # Run the binary to check if a repin is needed
@@ -334,29 +373,29 @@
 def execute_generator(
         repository_ctx,
         lockfile_path,
-        lockfile_kind,
+        cargo_lockfile_path,
         generator,
         config,
         splicing_manifest,
         repository_dir,
         cargo,
         rustc,
-        repin = False,
         metadata = None):
     """Execute the `cargo-bazel` binary to produce `BUILD` and `.bzl` files.
 
     Args:
         repository_ctx (repository_ctx): The rule's context object.
         lockfile_path (path): The path to a "lock" file (file used for reproducible renderings).
-        lockfile_kind (str): The type of lockfile given (Cargo or Bazel).
+        cargo_lockfile_path (path): The path to a "Cargo.lock" file within the root workspace.
         generator (path): The path to a `cargo-bazel` binary.
         config (path): The path to a `cargo-bazel` config file.
         splicing_manifest (path): The path to a `cargo-bazel` splicing manifest. See `create_splicing_manifest`
         repository_dir (path): The output path for the Bazel module and BUILD files.
         cargo (path): The path of a Cargo binary.
         rustc (path): The path of a Rustc binary.
-        repin (bool, optional): Whether or not to repin dependencies
-        metadata (path, optional): The path to a Cargo metadata json file.
+        metadata (path, optional): The path to a Cargo metadata json file. If this is set, it indicates to
+            the generator that repinning is required. This file must be adjacent to a `Cargo.toml` and
+            `Cargo.lock` file.
 
     Returns:
         struct: The results of `repository_ctx.execute`.
@@ -366,10 +405,8 @@
     args = [
         generator,
         "generate",
-        "--lockfile",
-        lockfile_path,
-        "--lockfile-kind",
-        lockfile_kind,
+        "--cargo-lockfile",
+        cargo_lockfile_path,
         "--config",
         config,
         "--splicing-manifest",
@@ -382,12 +419,18 @@
         rustc,
     ]
 
+    if lockfile_path:
+        args.extend([
+            "--lockfile",
+            lockfile_path,
+        ])
+
     env = {
         "RUST_BACKTRACE": "full",
     }
 
     # Some components are not required unless re-pinning is enabled
-    if repin:
+    if metadata:
         args.extend([
             "--repin",
             "--metadata",
diff --git a/third_party/rules_rust/crate_universe/private/splicing_utils.bzl b/third_party/rules_rust/crate_universe/private/splicing_utils.bzl
index a419c75..f574466 100644
--- a/third_party/rules_rust/crate_universe/private/splicing_utils.bzl
+++ b/third_party/rules_rust/crate_universe/private/splicing_utils.bzl
@@ -1,9 +1,11 @@
 """Utilities directly related to the `splicing` step of `cargo-bazel`."""
 
-load(":common_utils.bzl", "cargo_environ", "execute")
+load(":common_utils.bzl", "CARGO_BAZEL_REPIN", "REPIN", "cargo_environ", "execute")
+
+CARGO_BAZEL_DEBUG = "CARGO_BAZEL_DEBUG"
 
 def splicing_config(resolver_version = "1"):
-    """arious settings used to configure Cargo manifest splicing behavior.
+    """Various settings used to configure Cargo manifest splicing behavior.
 
     [rv]: https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions
 
@@ -19,63 +21,6 @@
         resolver_version = resolver_version,
     ))
 
-def download_extra_workspace_members(repository_ctx, cache_dir, render_template_registry_url):
-    """Download additional workspace members for use in splicing.
-
-    Args:
-        repository_ctx (repository_ctx): The rule's context object.
-        cache_dir (path): A directory in which to download and extract extra workspace members
-        render_template_registry_url (str): The base template to use for determining the crate's registry URL.
-
-    Returns:
-        list: A list of information related to the downloaded crates
-            - manifest: The path of the manifest.
-            - url: The url the manifest came from.
-            - sha256: The sha256 checksum of the new manifest.
-    """
-    manifests = []
-    extra_workspace_members = repository_ctx.attr.extra_workspace_members
-    if extra_workspace_members:
-        repository_ctx.report_progress("Downloading extra workspace members.")
-
-    for name, spec in repository_ctx.attr.extra_workspace_members.items():
-        spec = struct(**json.decode(spec))
-
-        url = render_template_registry_url
-        url = url.replace("{name}", name)
-        url = url.replace("{version}", spec.version)
-
-        if spec.sha256:
-            result = repository_ctx.download_and_extract(
-                output = cache_dir,
-                url = url,
-                sha256 = spec.sha256,
-                type = "tar.gz",
-            )
-        else:
-            result = repository_ctx.download_and_extract(
-                output = cache_dir,
-                url = url,
-                type = "tar.gz",
-            )
-
-        manifest = repository_ctx.path("{}/{}-{}/Cargo.toml".format(
-            cache_dir,
-            name,
-            spec.version,
-        ))
-
-        if not manifest.exists:
-            fail("Extra workspace member '{}' has no root Cargo.toml file".format(name))
-
-        manifests.append(struct(
-            manifest = str(manifest),
-            url = url,
-            sha256 = result.sha256,
-        ))
-
-    return manifests
-
 def kebab_case_keys(data):
     """Ensure the key value of the data given are kebab-case
 
@@ -90,6 +35,38 @@
         for (key, val) in data.items()
     }
 
+def compile_splicing_manifest(splicing_config, manifests, cargo_config_path, packages):
+    """Produce a manifest containing required components for splciing a new Cargo workspace
+
+    [cargo_config]: https://doc.rust-lang.org/cargo/reference/config.html
+    [cargo_toml]: https://doc.rust-lang.org/cargo/reference/manifest.html
+
+    Args:
+        splicing_config (dict): A deserialized `splicing_config`
+        manifests (dict): A mapping of paths to Bazel labels which represent [Cargo manifests][cargo_toml].
+        cargo_config_path (str): The absolute path to a [Cargo config][cargo_config].
+        packages (dict): A set of crates (packages) specifications to depend on
+
+    Returns:
+        dict: A dictionary representation of a `cargo_bazel::splicing::SplicingManifest`
+    """
+
+    # Deserialize information about direct packges
+    direct_packages_info = {
+        # Ensure the data is using kebab-case as that's what `cargo_toml::DependencyDetail` expects.
+        pkg: kebab_case_keys(dict(json.decode(data)))
+        for (pkg, data) in packages.items()
+    }
+
+    # Auto-generated splicier manifest values
+    splicing_manifest_content = {
+        "cargo_config": cargo_config_path,
+        "direct_packages": direct_packages_info,
+        "manifests": manifests,
+    }
+
+    return dict(splicing_config.items() + splicing_manifest_content.items())
+
 def create_splicing_manifest(repository_ctx):
     """Produce a manifest containing required components for splciing a new Cargo workspace
 
@@ -99,14 +76,6 @@
     Returns:
         path: The path to a json encoded manifest
     """
-    repo_dir = repository_ctx.path(".")
-
-    # Deserialize information about direct packges
-    direct_packages_info = {
-        # Ensure the data is using kebab-case as that's what `cargo_toml::DependencyDetail` expects.
-        pkg: kebab_case_keys(dict(json.decode(data)))
-        for (pkg, data) in repository_ctx.attr.packages.items()
-    }
 
     manifests = {str(repository_ctx.path(m)): str(m) for m in repository_ctx.attr.manifests}
 
@@ -118,32 +87,35 @@
     # Load user configurable splicing settings
     config = json.decode(repository_ctx.attr.splicing_config or splicing_config())
 
-    # Auto-generated splicier manifest values
-    splicing_manifest_content = {
-        "cargo_config": cargo_config,
-        "direct_packages": direct_packages_info,
-        "manifests": manifests,
-    }
+    repo_dir = repository_ctx.path(".")
+
+    splicing_manifest = repository_ctx.path("{}/splicing_manifest.json".format(repo_dir))
+
+    data = compile_splicing_manifest(
+        splicing_config = config,
+        manifests = manifests,
+        cargo_config_path = cargo_config,
+        packages = repository_ctx.attr.packages,
+    )
 
     # Serialize information required for splicing
-    splicing_manifest = repository_ctx.path("{}/splicing_manifest.json".format(repo_dir))
     repository_ctx.file(
         splicing_manifest,
         json.encode_indent(
-            dict(dict(config).items() + splicing_manifest_content.items()),
+            data,
             indent = " " * 4,
         ),
     )
 
     return splicing_manifest
 
-def splice_workspace_manifest(repository_ctx, generator, lockfile, splicing_manifest, cargo, rustc):
+def splice_workspace_manifest(repository_ctx, generator, cargo_lockfile, splicing_manifest, cargo, rustc):
     """Splice together a Cargo workspace from various other manifests and package definitions
 
     Args:
         repository_ctx (repository_ctx): The rule's context object.
         generator (path): The `cargo-bazel` binary.
-        lockfile (path): The path to a "lock" file for reproducible `cargo-bazel` renderings.
+        cargo_lockfile (path): The path to a "Cargo.lock" file.
         splicing_manifest (path): The path to a splicing manifest.
         cargo (path): The path to a Cargo binary.
         rustc (path): The Path to a Rustc binary.
@@ -154,46 +126,30 @@
     repository_ctx.report_progress("Splicing Cargo workspace.")
     repo_dir = repository_ctx.path(".")
 
-    # Download extra workspace members
-    crates_cache_dir = repository_ctx.path("{}/.crates_cache".format(repo_dir))
-    extra_manifest_info = download_extra_workspace_members(
-        repository_ctx = repository_ctx,
-        cache_dir = crates_cache_dir,
-        render_template_registry_url = repository_ctx.attr.extra_workspace_member_url_template,
-    )
-
-    extra_manifests_manifest = repository_ctx.path("{}/extra_manifests_manifest.json".format(repo_dir))
-    repository_ctx.file(
-        extra_manifests_manifest,
-        json.encode_indent(struct(
-            manifests = extra_manifest_info,
-        ), indent = " " * 4),
-    )
-
-    cargo_workspace = repository_ctx.path("{}/cargo-bazel-splicing".format(repo_dir))
+    splicing_output_dir = repository_ctx.path("splicing-output")
 
     # Generate a workspace root which contains all workspace members
     arguments = [
         generator,
         "splice",
-        "--workspace-dir",
-        cargo_workspace,
+        "--output-dir",
+        splicing_output_dir,
         "--splicing-manifest",
         splicing_manifest,
-        "--extra-manifests-manifest",
-        extra_manifests_manifest,
         "--cargo",
         cargo,
         "--rustc",
         rustc,
+        "--cargo-lockfile",
+        cargo_lockfile,
     ]
 
-    # Splicing accepts a Cargo.lock file in some scenarios. Ensure it's passed
-    # if the lockfile is a actually a Cargo lockfile.
-    if lockfile.kind == "cargo":
+    # Optionally set the splicing workspace directory to somewhere within the repository directory
+    # to improve the debugging experience.
+    if CARGO_BAZEL_DEBUG in repository_ctx.os.environ:
         arguments.extend([
-            "--cargo-lockfile",
-            lockfile.path,
+            "--workspace-dir",
+            repository_ctx.path("{}/splicing-workspace".format(repo_dir)),
         ])
 
     env = {
@@ -202,6 +158,10 @@
         "RUST_BACKTRACE": "full",
     }
 
+    # Ensure the short hand repin variable is set to the full name.
+    if REPIN in repository_ctx.os.environ and CARGO_BAZEL_REPIN not in repository_ctx.os.environ:
+        env.update({CARGO_BAZEL_REPIN: repository_ctx.os.environ[REPIN]})
+
     # Add any Cargo environment variables to the `cargo-bazel` execution
     env.update(cargo_environ(repository_ctx))
 
@@ -211,13 +171,12 @@
         env = env,
     )
 
-    root_manifest = repository_ctx.path("{}/Cargo.toml".format(cargo_workspace))
-    if not root_manifest.exists:
-        fail("Root manifest does not exist: {}".format(root_manifest))
+    # This file must have been produced by the execution above.
+    spliced_lockfile = repository_ctx.path("{}/Cargo.lock".format(splicing_output_dir))
+    if not spliced_lockfile.exists:
+        fail("Lockfile file does not exist: {}".format(spliced_lockfile))
+    spliced_metadata = repository_ctx.path("{}/metadata.json".format(splicing_output_dir))
+    if not spliced_metadata.exists:
+        fail("Metadata file does not exist: {}".format(spliced_metadata))
 
-    # This file must match the one generated in splicing
-    metadata_path = repository_ctx.path("{}/cargo-bazel-spliced-metadata.json".format(cargo_workspace))
-    if not metadata_path.exists:
-        fail("Root metadata file does not exist: {}".format(metadata_path))
-
-    return metadata_path
+    return spliced_metadata
diff --git a/third_party/rules_rust/crate_universe/private/vendor/BUILD.bazel b/third_party/rules_rust/crate_universe/private/vendor/BUILD.bazel
index 3c02387..04726cd 100644
--- a/third_party/rules_rust/crate_universe/private/vendor/BUILD.bazel
+++ b/third_party/rules_rust/crate_universe/private/vendor/BUILD.bazel
@@ -1,11 +1,3 @@
 load("//crate_universe/private:vendor_utils.bzl", "crates_vendor_deps_targets")
 
 crates_vendor_deps_targets()
-
-filegroup(
-    name = "distro",
-    srcs = glob(["*.bzl"]) + [
-        "BUILD.bazel",
-    ],
-    visibility = ["//crate_universe/private:__subpackages__"],
-)
diff --git a/third_party/rules_rust/crate_universe/repositories.bzl b/third_party/rules_rust/crate_universe/repositories.bzl
new file mode 100644
index 0000000..c06e06d
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/repositories.bzl
@@ -0,0 +1,25 @@
+"""A module defining dependencies of the `cargo-bazel` Rust target"""
+
+load("@rules_rust//rust:defs.bzl", "rust_common")
+load("//crate_universe:deps_bootstrap.bzl", "cargo_bazel_bootstrap")
+load("//crate_universe/3rdparty:third_party_deps.bzl", "third_party_deps")
+load("//crate_universe/3rdparty/crates:crates.bzl", _vendor_crate_repositories = "crate_repositories")
+load("//crate_universe/private:vendor_utils.bzl", "crates_vendor_deps")
+load("//crate_universe/tools/cross_installer:cross_installer_deps.bzl", "cross_installer_deps")
+
+def crate_universe_dependencies(rust_version = rust_common.default_version, bootstrap = False):
+    """Define dependencies of the `cargo-bazel` Rust target
+
+    Args:
+        rust_version (str, optional): The version of rust to use when generating dependencies.
+        bootstrap (bool, optional): If true, a `cargo_bootstrap_repository` target will be generated.
+    """
+    third_party_deps()
+
+    if bootstrap:
+        cargo_bazel_bootstrap(rust_version = rust_version)
+
+    _vendor_crate_repositories()
+
+    crates_vendor_deps()
+    cross_installer_deps()
diff --git a/third_party/rules_rust/crate_universe/src/cli.rs b/third_party/rules_rust/crate_universe/src/cli.rs
index 2ed27ac..fdff844 100644
--- a/third_party/rules_rust/crate_universe/src/cli.rs
+++ b/third_party/rules_rust/crate_universe/src/cli.rs
@@ -19,7 +19,11 @@
 pub use vendor::vendor;
 
 #[derive(Parser, Debug)]
-#[clap(name = "cargo-bazel", about, version)]
+#[clap(
+    name = "cargo-bazel",
+    about = "crate_universe` is a collection of tools which use Cargo to generate build targets for Bazel.",
+    version
+)]
 pub enum Options {
     /// Generate Bazel Build files from a Cargo manifest.
     Generate(GenerateOptions),
diff --git a/third_party/rules_rust/crate_universe/src/cli/generate.rs b/third_party/rules_rust/crate_universe/src/cli/generate.rs
index 67ae868..3fdc97e 100644
--- a/third_party/rules_rust/crate_universe/src/cli/generate.rs
+++ b/third_party/rules_rust/crate_universe/src/cli/generate.rs
@@ -1,13 +1,14 @@
 //! The cli entrypoint for the `generate` subcommand
 
+use std::fs;
 use std::path::PathBuf;
 
-use anyhow::{bail, Result};
+use anyhow::{bail, Context as AnyhowContext, Result};
 use clap::Parser;
 
 use crate::config::Config;
 use crate::context::Context;
-use crate::lockfile::{is_cargo_lockfile, lock_context, write_lockfile, LockfileKind};
+use crate::lockfile::{lock_context, write_lockfile};
 use crate::metadata::load_metadata;
 use crate::metadata::Annotations;
 use crate::rendering::{write_outputs, Renderer};
@@ -15,7 +16,7 @@
 
 /// Command line options for the `generate` subcommand
 #[derive(Parser, Debug)]
-#[clap(about, version)]
+#[clap(about = "Command line options for the `generate` subcommand", version)]
 pub struct GenerateOptions {
     /// The path to a Cargo binary to use for gathering metadata
     #[clap(long, env = "CARGO")]
@@ -35,11 +36,11 @@
 
     /// The path to either a Cargo or Bazel lockfile
     #[clap(long)]
-    pub lockfile: PathBuf,
+    pub lockfile: Option<PathBuf>,
 
-    /// The type of lockfile
+    /// The path to a [Cargo.lock](https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html) file.
     #[clap(long)]
-    pub lockfile_kind: LockfileKind,
+    pub cargo_lockfile: PathBuf,
 
     /// The directory of the current repository rule
     #[clap(long)]
@@ -54,7 +55,7 @@
     #[clap(long)]
     pub repin: bool,
 
-    /// The path to a Cargo metadata `json` file.
+    /// The path to a Cargo metadata `json` file. This file must be next to a `Cargo.toml` and `Cargo.lock` file.
     #[clap(long)]
     pub metadata: Option<PathBuf>,
 
@@ -67,25 +68,19 @@
     // Load the config
     let config = Config::try_from_path(&opt.config)?;
 
-    // Determine if the dependencies need to be repinned.
-    let mut should_repin = opt.repin;
-
-    // Cargo lockfiles must always be repinned.
-    if is_cargo_lockfile(&opt.lockfile, &opt.lockfile_kind) {
-        should_repin = true;
-    }
-
     // Go straight to rendering if there is no need to repin
-    if !should_repin {
-        let context = Context::try_from_path(opt.lockfile)?;
+    if !opt.repin {
+        if let Some(lockfile) = &opt.lockfile {
+            let context = Context::try_from_path(lockfile)?;
 
-        // Render build files
-        let outputs = Renderer::new(config.rendering).render(&context)?;
+            // Render build files
+            let outputs = Renderer::new(config.rendering).render(&context)?;
 
-        // Write the outputs to disk
-        write_outputs(outputs, &opt.repository_dir, opt.dry_run)?;
+            // Write the outputs to disk
+            write_outputs(outputs, &opt.repository_dir, opt.dry_run)?;
 
-        return Ok(());
+            return Ok(());
+        }
     }
 
     // Ensure Cargo and Rustc are available for use during generation.
@@ -105,20 +100,13 @@
     };
 
     // Load Metadata and Lockfile
-    let (cargo_metadata, cargo_lockfile) = load_metadata(
-        metadata_path,
-        if is_cargo_lockfile(&opt.lockfile, &opt.lockfile_kind) {
-            Some(&opt.lockfile)
-        } else {
-            None
-        },
-    )?;
+    let (cargo_metadata, cargo_lockfile) = load_metadata(metadata_path)?;
 
     // Copy the rendering config for later use
     let render_config = config.rendering.clone();
 
     // Annotate metadata
-    let annotations = Annotations::new(cargo_metadata, cargo_lockfile, config.clone())?;
+    let annotations = Annotations::new(cargo_metadata, cargo_lockfile.clone(), config.clone())?;
 
     // Generate renderable contexts for earch package
     let context = Context::new(annotations)?;
@@ -130,13 +118,18 @@
     write_outputs(outputs, &opt.repository_dir, opt.dry_run)?;
 
     // Ensure Bazel lockfiles are written to disk so future generations can be short-circuted.
-    if matches!(opt.lockfile_kind, LockfileKind::Bazel) {
+    if let Some(lockfile) = opt.lockfile {
         let splicing_manifest = SplicingManifest::try_from_path(&opt.splicing_manifest)?;
 
-        let lockfile = lock_context(context, &config, &splicing_manifest, cargo_bin, rustc_bin)?;
+        let lock_content =
+            lock_context(context, &config, &splicing_manifest, cargo_bin, rustc_bin)?;
 
-        write_lockfile(lockfile, &opt.lockfile, opt.dry_run)?;
+        write_lockfile(lock_content, &lockfile, opt.dry_run)?;
     }
 
+    // Write the updated Cargo.lock file
+    fs::write(&opt.cargo_lockfile, cargo_lockfile.to_string())
+        .context("Failed to write Cargo.lock file back to the workspace.")?;
+
     Ok(())
 }
diff --git a/third_party/rules_rust/crate_universe/src/cli/query.rs b/third_party/rules_rust/crate_universe/src/cli/query.rs
index 668f64f..19087ab 100644
--- a/third_party/rules_rust/crate_universe/src/cli/query.rs
+++ b/third_party/rules_rust/crate_universe/src/cli/query.rs
@@ -13,7 +13,7 @@
 
 /// Command line options for the `query` subcommand
 #[derive(Parser, Debug)]
-#[clap(about, version)]
+#[clap(about = "Command line options for the `query` subcommand", version)]
 pub struct QueryOptions {
     /// The lockfile path for reproducible Cargo->Bazel renderings
     #[clap(long)]
diff --git a/third_party/rules_rust/crate_universe/src/cli/splice.rs b/third_party/rules_rust/crate_universe/src/cli/splice.rs
index cb8ba20..213ee34 100644
--- a/third_party/rules_rust/crate_universe/src/cli/splice.rs
+++ b/third_party/rules_rust/crate_universe/src/cli/splice.rs
@@ -2,34 +2,37 @@
 
 use std::path::PathBuf;
 
+use anyhow::Context;
 use clap::Parser;
 
 use crate::cli::Result;
-use crate::metadata::{write_metadata, Generator, MetadataGenerator};
-use crate::splicing::{
-    generate_lockfile, ExtraManifestsManifest, Splicer, SplicingManifest, WorkspaceMetadata,
-};
+use crate::metadata::{write_metadata, CargoUpdateRequest, Generator, MetadataGenerator};
+use crate::splicing::{generate_lockfile, Splicer, SplicingManifest, WorkspaceMetadata};
 
 /// Command line options for the `splice` subcommand
 #[derive(Parser, Debug)]
-#[clap(about, version)]
+#[clap(about = "Command line options for the `splice` subcommand", version)]
 pub struct SpliceOptions {
     /// A generated manifest of splicing inputs
     #[clap(long)]
     pub splicing_manifest: PathBuf,
 
-    /// A generated manifest of "extra workspace members"
-    #[clap(long)]
-    pub extra_manifests_manifest: PathBuf,
-
-    /// A Cargo lockfile (Cargo.lock).
+    /// The path to a [Cargo.lock](https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html) file.
     #[clap(long)]
     pub cargo_lockfile: Option<PathBuf>,
 
-    /// The directory in which to build the workspace. A `Cargo.toml` file
-    /// should always be produced within this directory.
+    /// The desired update/repin behavior
+    #[clap(long, env = "CARGO_BAZEL_REPIN", default_missing_value = "true")]
+    pub repin: Option<CargoUpdateRequest>,
+
+    /// The directory in which to build the workspace. If this argument is not
+    /// passed, a temporary directory will be generated.
     #[clap(long)]
-    pub workspace_dir: PathBuf,
+    pub workspace_dir: Option<PathBuf>,
+
+    /// The location where the results of splicing are written.
+    #[clap(long)]
+    pub output_dir: PathBuf,
 
     /// If true, outputs will be printed instead of written to disk.
     #[clap(long)]
@@ -52,39 +55,62 @@
 pub fn splice(opt: SpliceOptions) -> Result<()> {
     // Load the all config files required for splicing a workspace
     let splicing_manifest = SplicingManifest::try_from_path(&opt.splicing_manifest)?;
-    let extra_manifests_manifest =
-        ExtraManifestsManifest::try_from_path(opt.extra_manifests_manifest)?;
+
+    // Determine the splicing workspace
+    let temp_dir;
+    let splicing_dir = match &opt.workspace_dir {
+        Some(dir) => dir.clone(),
+        None => {
+            temp_dir = tempfile::tempdir().context("Failed to generate temporary directory")?;
+            temp_dir.as_ref().to_path_buf()
+        }
+    };
 
     // Generate a splicer for creating a Cargo workspace manifest
-    let splicer = Splicer::new(
-        opt.workspace_dir,
-        splicing_manifest,
-        extra_manifests_manifest,
-    )?;
+    let splicer = Splicer::new(splicing_dir, splicing_manifest)?;
 
     // Splice together the manifest
-    let manifest_path = splicer.splice_workspace()?;
+    let manifest_path = splicer.splice_workspace(&opt.cargo)?;
 
     // Generate a lockfile
-    let cargo_lockfile =
-        generate_lockfile(&manifest_path, &opt.cargo_lockfile, &opt.cargo, &opt.rustc)?;
+    let cargo_lockfile = generate_lockfile(
+        &manifest_path,
+        &opt.cargo_lockfile,
+        &opt.cargo,
+        &opt.rustc,
+        &opt.repin,
+    )?;
 
     // Write the registry url info to the manifest now that a lockfile has been generated
     WorkspaceMetadata::write_registry_urls(&cargo_lockfile, &manifest_path)?;
 
+    let output_dir = opt.output_dir.clone();
+
     // Write metadata to the workspace for future reuse
     let (cargo_metadata, _) = Generator::new()
         .with_cargo(opt.cargo)
         .with_rustc(opt.rustc)
         .generate(&manifest_path.as_path_buf())?;
 
-    // Write metadata next to the manifest
-    let metadata_path = manifest_path
+    let cargo_lockfile_path = manifest_path
         .as_path_buf()
         .parent()
-        .expect("Newly spliced cargo manifest has no parent directory")
-        .join("cargo-bazel-spliced-metadata.json");
-    write_metadata(&metadata_path, &cargo_metadata)?;
+        .with_context(|| {
+            format!(
+                "The path {} is expected to have a parent directory",
+                manifest_path.as_path_buf().display()
+            )
+        })?
+        .join("Cargo.lock");
+
+    // Generate the consumable outputs of the splicing process
+    std::fs::create_dir_all(&output_dir)
+        .with_context(|| format!("Failed to create directories for {}", &output_dir.display()))?;
+
+    write_metadata(&opt.output_dir.join("metadata.json"), &cargo_metadata)?;
+
+    std::fs::copy(cargo_lockfile_path, output_dir.join("Cargo.lock"))
+        .context("Failed to copy lockfile")?;
 
     Ok(())
 }
diff --git a/third_party/rules_rust/crate_universe/src/cli/vendor.rs b/third_party/rules_rust/crate_universe/src/cli/vendor.rs
index 68e107f..0b90541 100644
--- a/third_party/rules_rust/crate_universe/src/cli/vendor.rs
+++ b/third_party/rules_rust/crate_universe/src/cli/vendor.rs
@@ -1,6 +1,7 @@
 //! The cli entrypoint for the `vendor` subcommand
 
 use std::collections::BTreeSet;
+use std::env;
 use std::fs;
 use std::path::{Path, PathBuf};
 use std::process::{self, ExitStatus};
@@ -10,16 +11,15 @@
 
 use crate::config::{Config, VendorMode};
 use crate::context::Context;
+use crate::metadata::CargoUpdateRequest;
 use crate::metadata::{Annotations, VendorGenerator};
 use crate::metadata::{Generator, MetadataGenerator};
 use crate::rendering::{render_module_label, write_outputs, Renderer};
-use crate::splicing::{
-    generate_lockfile, ExtraManifestsManifest, Splicer, SplicingManifest, WorkspaceMetadata,
-};
+use crate::splicing::{generate_lockfile, Splicer, SplicingManifest, WorkspaceMetadata};
 
 /// Command line options for the `vendor` subcommand
 #[derive(Parser, Debug)]
-#[clap(about, version)]
+#[clap(about = "Command line options for the `vendor` subcommand", version)]
 pub struct VendorOptions {
     /// The path to a Cargo binary to use for gathering metadata
     #[clap(long, env = "CARGO")]
@@ -41,7 +41,7 @@
     #[clap(long)]
     pub splicing_manifest: PathBuf,
 
-    /// The path to a Cargo lockfile
+    /// The path to a [Cargo.lock](https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html) file.
     #[clap(long)]
     pub cargo_lockfile: Option<PathBuf>,
 
@@ -50,13 +50,19 @@
     #[clap(long)]
     pub cargo_config: Option<PathBuf>,
 
+    /// The desired update/repin behavior. The arguments passed here are forward to
+    /// [cargo update](https://doc.rust-lang.org/cargo/commands/cargo-update.html). See
+    /// [metadata::CargoUpdateRequest] for details on the values to pass here.
+    #[clap(long, env = "CARGO_BAZEL_REPIN", default_missing_value = "true")]
+    pub repin: Option<CargoUpdateRequest>,
+
     /// The path to a Cargo metadata `json` file.
     #[clap(long)]
     pub metadata: Option<PathBuf>,
 
-    /// A generated manifest of "extra workspace members"
-    #[clap(long)]
-    pub extra_manifests_manifest: PathBuf,
+    /// The path to a bazel binary
+    #[clap(long, env = "BAZEL_REAL", default_value = "bazel")]
+    pub bazel: PathBuf,
 
     /// The directory in which to build the workspace. A `Cargo.toml` file
     /// should always be produced within this directory.
@@ -83,31 +89,55 @@
     Ok(status)
 }
 
+/// Query the Bazel output_base to determine the location of external repositories.
+fn locate_bazel_output_base(bazel: &Path, workspace_dir: &Path) -> Result<PathBuf> {
+    // Allow a predefined environment variable to take precedent. This
+    // solves for the specific needs of Bazel CI on Github.
+    if let Ok(output_base) = env::var("OUTPUT_BASE") {
+        return Ok(PathBuf::from(output_base));
+    }
+
+    let output = process::Command::new(bazel)
+        .current_dir(workspace_dir)
+        .args(["info", "output_base"])
+        .output()
+        .context("Failed to query the Bazel workspace's `output_base`")?;
+
+    if !output.status.success() {
+        bail!(output.status)
+    }
+
+    Ok(PathBuf::from(
+        String::from_utf8_lossy(&output.stdout).trim(),
+    ))
+}
+
 pub fn vendor(opt: VendorOptions) -> Result<()> {
+    let output_base = locate_bazel_output_base(&opt.bazel, &opt.workspace_dir)?;
+
     // Load the all config files required for splicing a workspace
-    let splicing_manifest =
-        SplicingManifest::try_from_path(&opt.splicing_manifest)?.absoulutize(&opt.workspace_dir);
-    let extra_manifests_manifest =
-        ExtraManifestsManifest::try_from_path(opt.extra_manifests_manifest)?.absoulutize();
+    let splicing_manifest = SplicingManifest::try_from_path(&opt.splicing_manifest)?
+        .resolve(&opt.workspace_dir, &output_base);
 
     let temp_dir = tempfile::tempdir().context("Failed to create temporary directory")?;
 
     // Generate a splicer for creating a Cargo workspace manifest
-    let splicer = Splicer::new(
-        PathBuf::from(temp_dir.as_ref()),
-        splicing_manifest,
-        extra_manifests_manifest,
-    )
-    .context("Failed to crate splicer")?;
+    let splicer = Splicer::new(PathBuf::from(temp_dir.as_ref()), splicing_manifest)
+        .context("Failed to create splicer")?;
 
     // Splice together the manifest
     let manifest_path = splicer
-        .splice_workspace()
+        .splice_workspace(&opt.cargo)
         .context("Failed to splice workspace")?;
 
-    // Generate a lockfile
-    let cargo_lockfile =
-        generate_lockfile(&manifest_path, &opt.cargo_lockfile, &opt.cargo, &opt.rustc)?;
+    // Gather a cargo lockfile
+    let cargo_lockfile = generate_lockfile(
+        &manifest_path,
+        &opt.cargo_lockfile,
+        &opt.cargo,
+        &opt.rustc,
+        &opt.repin,
+    )?;
 
     // Write the registry url info to the manifest now that a lockfile has been generated
     WorkspaceMetadata::write_registry_urls(&cargo_lockfile, &manifest_path)?;
@@ -122,7 +152,7 @@
     let config = Config::try_from_path(&opt.config)?;
 
     // Annotate metadata
-    let annotations = Annotations::new(cargo_metadata, cargo_lockfile, config.clone())?;
+    let annotations = Annotations::new(cargo_metadata, cargo_lockfile.clone(), config.clone())?;
 
     // Generate renderable contexts for earch package
     let context = Context::new(annotations)?;
@@ -143,6 +173,12 @@
             .with_context(|| format!("Failed to delete {}", vendor_dir.display()))?;
     }
 
+    // Store the updated Cargo.lock
+    if let Some(path) = &opt.cargo_lockfile {
+        fs::write(path, cargo_lockfile.to_string())
+            .context("Failed to write Cargo.lock file back to the workspace.")?;
+    }
+
     // Vendor the crates from the spliced workspace
     if matches!(config.rendering.vendor_mode, Some(VendorMode::Local)) {
         VendorGenerator::new(opt.cargo.clone(), opt.rustc.clone())
diff --git a/third_party/rules_rust/crate_universe/src/config.rs b/third_party/rules_rust/crate_universe/src/config.rs
index 66e3a7e..0560829 100644
--- a/third_party/rules_rust/crate_universe/src/config.rs
+++ b/third_party/rules_rust/crate_universe/src/config.rs
@@ -8,7 +8,7 @@
 use std::{fmt, fs};
 
 use anyhow::Result;
-use cargo_lock::package::source::GitReference;
+use cargo_lock::package::GitReference;
 use cargo_metadata::Package;
 use semver::VersionReq;
 use serde::de::Visitor;
@@ -73,6 +73,9 @@
     #[serde(default = "default_platforms_template")]
     pub platforms_template: String,
 
+    /// The command to use for regenerating generated files.
+    pub regen_command: String,
+
     /// An optional configuration for rendirng content to be rendered into repositories.
     pub vendor_mode: Option<VendorMode>,
 }
@@ -211,6 +214,10 @@
     /// [rustc_env](https://bazelbuild.github.io/rules_rust/cargo.html#cargo_build_script-rustc_env) attribute.
     pub build_script_rustc_env: Option<BTreeMap<String, String>>,
 
+    /// Additional labels to pass to a build script's
+    /// [toolchains](https://bazel.build/reference/be/common-definitions#common-attributes) attribute.
+    pub build_script_toolchains: Option<BTreeSet<String>>,
+
     /// A scratch pad used to write arbitrary text to target BUILD files.
     pub additive_build_file_content: Option<String>,
 
@@ -302,6 +309,7 @@
             build_script_data_glob: joined_extra_member!(self.build_script_data_glob, rhs.build_script_data_glob, BTreeSet::new, BTreeSet::extend),
             build_script_env: joined_extra_member!(self.build_script_env, rhs.build_script_env, BTreeMap::new, BTreeMap::extend),
             build_script_rustc_env: joined_extra_member!(self.build_script_rustc_env, rhs.build_script_rustc_env, BTreeMap::new, BTreeMap::extend),
+            build_script_toolchains: joined_extra_member!(self.build_script_toolchains, rhs.build_script_toolchains, BTreeSet::new, BTreeSet::extend),
             additive_build_file_content: joined_extra_member!(self.additive_build_file_content, rhs.additive_build_file_content, String::new, concat_string),
             shallow_since,
             patch_args: joined_extra_member!(self.patch_args, rhs.patch_args, Vec::new, Vec::extend),
@@ -492,4 +500,35 @@
         id.version = "<1".to_owned();
         assert!(!id.matches(&package));
     }
+
+    #[test]
+    fn deserialize_config() {
+        let runfiles = runfiles::Runfiles::create().unwrap();
+        let path = runfiles
+            .rlocation("rules_rust/crate_universe/test_data/serialized_configs/config.json");
+
+        let content = std::fs::read_to_string(path).unwrap();
+
+        let config: Config = serde_json::from_str(&content).unwrap();
+
+        // Annotations
+        let annotation = config
+            .annotations
+            .get(&CrateId::new("rand".to_owned(), "0.8.5".to_owned()))
+            .unwrap();
+        assert_eq!(
+            annotation.crate_features,
+            Some(BTreeSet::from(["small_rng".to_owned()]))
+        );
+
+        // Global settings
+        assert!(config.cargo_config.is_none());
+        assert!(!config.generate_build_scripts);
+
+        // Render Config
+        assert_eq!(
+            config.rendering.platforms_template,
+            "//custom/platform:{triple}"
+        );
+    }
 }
diff --git a/third_party/rules_rust/crate_universe/src/context/crate_context.rs b/third_party/rules_rust/crate_universe/src/context/crate_context.rs
index 0278ebe..923fa1e 100644
--- a/third_party/rules_rust/crate_universe/src/context/crate_context.rs
+++ b/third_party/rules_rust/crate_universe/src/context/crate_context.rs
@@ -101,8 +101,8 @@
     #[serde(skip_serializing_if = "SelectStringList::should_skip_serializing")]
     pub rustc_env_files: SelectStringList,
 
-    #[serde(skip_serializing_if = "SelectStringList::should_skip_serializing")]
-    pub rustc_flags: SelectStringList,
+    #[serde(skip_serializing_if = "Vec::is_empty")]
+    pub rustc_flags: Vec<String>,
 
     pub version: String,
 
@@ -179,6 +179,9 @@
 
     #[serde(skip_serializing_if = "Option::is_none")]
     pub links: Option<String>,
+
+    #[serde(skip_serializing_if = "BTreeSet::is_empty")]
+    pub toolchains: BTreeSet<String>,
 }
 
 impl Default for BuildScriptAttributes {
@@ -198,6 +201,7 @@
             rustc_env_files: Default::default(),
             tools: Default::default(),
             links: Default::default(),
+            toolchains: Default::default(),
         }
     }
 }
@@ -417,12 +421,8 @@
             }
 
             // Rustc flags
-            // TODO: SelectList is currently backed by `BTreeSet` which is generally incorrect
-            // for rustc flags. Should SelectList be refactored?
             if let Some(extra) = &crate_extra.rustc_flags {
-                for data in extra.iter() {
-                    self.common_attrs.rustc_flags.insert(data.clone(), None);
-                }
+                self.common_attrs.rustc_flags.append(&mut extra.clone());
             }
 
             // Rustc env
@@ -456,6 +456,20 @@
                     }
                 }
 
+                // Tools
+                if let Some(extra) = &crate_extra.build_script_tools {
+                    for data in extra {
+                        attrs.tools.insert(data.clone(), None);
+                    }
+                }
+
+                // Toolchains
+                if let Some(extra) = &crate_extra.build_script_toolchains {
+                    for data in extra {
+                        attrs.toolchains.insert(data.clone());
+                    }
+                }
+
                 // Data glob
                 if let Some(extra) = &crate_extra.build_script_data_glob {
                     attrs.data_glob.extend(extra.clone());
@@ -563,11 +577,10 @@
                         let crate_name = sanitize_module_name(&target.name);
 
                         // Locate the crate's root source file relative to the package root normalized for unix
-                        let crate_root =
-                            pathdiff::diff_paths(target.src_path.to_string(), package_root).map(
-                                // Normalize the path so that it always renders the same regardless of platform
-                                |root| root.to_string_lossy().replace("\\", "/"),
-                            );
+                        let crate_root = pathdiff::diff_paths(&target.src_path, package_root).map(
+                            // Normalize the path so that it always renders the same regardless of platform
+                            |root| root.to_string_lossy().replace('\\', "/"),
+                        );
 
                         // Conditionally check to see if the dependencies is a build-script target
                         if include_build_scripts && kind == "custom-build" {
diff --git a/third_party/rules_rust/crate_universe/src/lockfile.rs b/third_party/rules_rust/crate_universe/src/lockfile.rs
index 91f4832..65738a6 100644
--- a/third_party/rules_rust/crate_universe/src/lockfile.rs
+++ b/third_party/rules_rust/crate_universe/src/lockfile.rs
@@ -1,11 +1,11 @@
 //! Utility module for interracting with different kinds of lock files
 
+use std::collections::HashMap;
 use std::convert::TryFrom;
 use std::ffi::OsStr;
 use std::fs;
 use std::path::Path;
 use std::process::Command;
-use std::str::FromStr;
 
 use anyhow::{bail, Context as AnyhowContext, Result};
 use hex::ToHex;
@@ -16,61 +16,6 @@
 use crate::context::Context;
 use crate::splicing::{SplicingManifest, SplicingMetadata};
 
-#[derive(Debug)]
-pub enum LockfileKind {
-    Auto,
-    Bazel,
-    Cargo,
-}
-
-impl LockfileKind {
-    pub fn detect(path: &Path) -> Result<Self> {
-        let content = fs::read_to_string(path)?;
-
-        if serde_json::from_str::<Context>(&content).is_ok() {
-            return Ok(Self::Bazel);
-        }
-
-        if cargo_lock::Lockfile::from_str(&content).is_ok() {
-            return Ok(Self::Cargo);
-        }
-
-        bail!("Unknown Lockfile kind for {}", path.display())
-    }
-}
-
-impl FromStr for LockfileKind {
-    type Err = anyhow::Error;
-
-    fn from_str(s: &str) -> Result<Self, Self::Err> {
-        let lower = s.to_lowercase();
-        if lower == "auto" {
-            return Ok(Self::Auto);
-        }
-
-        if lower == "bazel" {
-            return Ok(Self::Bazel);
-        }
-
-        if lower == "cargo" {
-            return Ok(Self::Cargo);
-        }
-
-        bail!("Unknown LockfileKind: '{}'", s)
-    }
-}
-
-pub fn is_cargo_lockfile(path: &Path, kind: &LockfileKind) -> bool {
-    match kind {
-        LockfileKind::Auto => match LockfileKind::detect(path) {
-            Ok(kind) => matches!(kind, LockfileKind::Cargo),
-            Err(_) => false,
-        },
-        LockfileKind::Bazel => false,
-        LockfileKind::Cargo => true,
-    }
-}
-
 pub fn lock_context(
     mut context: Context,
     config: &Config,
@@ -198,8 +143,31 @@
             bail!("Failed to query cargo version")
         }
 
-        let version = String::from_utf8(output.stdout)?;
-        Ok(version)
+        let version = String::from_utf8(output.stdout)?.trim().to_owned();
+
+        // TODO: There is a bug in the linux binary for Cargo 1.60.0 where
+        // the commit hash reported by the version is shorter than what's
+        // reported on other platforms. This conditional here is a hack to
+        // correct for this difference and ensure lockfile hashes can be
+        // computed consistently. If a new binary is released then this
+        // condition should be removed
+        // https://github.com/rust-lang/cargo/issues/10547
+        let corrections = HashMap::from([
+            (
+                "cargo 1.60.0 (d1fd9fe 2022-03-01)",
+                "cargo 1.60.0 (d1fd9fe2c 2022-03-01)",
+            ),
+            (
+                "cargo 1.61.0 (a028ae4 2022-04-29)",
+                "cargo 1.61.0 (a028ae42f 2022-04-29)",
+            ),
+        ]);
+
+        if corrections.contains_key(version.as_str()) {
+            Ok(corrections[version.as_str()].to_string())
+        } else {
+            Ok(version)
+        }
     }
 }
 
@@ -223,7 +191,6 @@
     use super::*;
 
     use std::collections::{BTreeMap, BTreeSet};
-    use std::fs;
 
     #[test]
     fn simple_digest() {
@@ -242,7 +209,7 @@
 
         assert_eq!(
             digest,
-            Digest("4c8bc5de2d6d7acc7997ae9870e52bc0f0fcbc2b94076e61162078be6a69cc3b".to_owned())
+            Digest("9711073103bd532b7d9c2e32e805280d29fc8591c3e76f9fe489fc372e2866db".to_owned())
         );
     }
 
@@ -285,7 +252,7 @@
 
         assert_eq!(
             digest,
-            Digest("7a0d2f5fce05c4d433826b5c4748bec7b125b79182de598dc700e893e09077e9".to_owned())
+            Digest("756a613410573552bb8a85d6fcafd24a9df3000b8d943bf74c38bda9c306ef0e".to_owned())
         );
     }
 
@@ -316,7 +283,7 @@
 
         assert_eq!(
             digest,
-            Digest("fb5d7854dae366d4a9ff135208c28f08c14c2608dd6c5aa1b35b6e677dd53c06".to_owned())
+            Digest("851b789765d8ee248fd3d55840ffd702ba2f8b0ca6aed2faa45ea63d1b011a99".to_owned())
         );
     }
 
@@ -365,59 +332,7 @@
 
         assert_eq!(
             digest,
-            Digest("2b32833e4265bce03df70dbb9c2b32a78879cc02fbe88a481e3fe4a17812aca9".to_owned())
+            Digest("a9f7ea66f1b04331f8e09c64cd0b972e4c2a136907d7ef90e81ae2654e3c002c".to_owned())
         );
     }
-
-    #[test]
-    fn detect_bazel_lockfile() {
-        let temp_dir = tempfile::tempdir().unwrap();
-        let lockfile = temp_dir.as_ref().join("lockfile");
-        fs::write(
-            &lockfile,
-            serde_json::to_string(&crate::context::Context::default()).unwrap(),
-        )
-        .unwrap();
-
-        let kind = LockfileKind::detect(&lockfile).unwrap();
-        assert!(matches!(kind, LockfileKind::Bazel));
-    }
-
-    #[test]
-    fn detect_cargo_lockfile() {
-        let temp_dir = tempfile::tempdir().unwrap();
-        let lockfile = temp_dir.as_ref().join("lockfile");
-        fs::write(
-            &lockfile,
-            textwrap::dedent(
-                r#"
-                version = 3
-
-                [[package]]
-                name = "detect"
-                version = "0.1.0"
-                "#,
-            ),
-        )
-        .unwrap();
-
-        let kind = LockfileKind::detect(&lockfile).unwrap();
-        assert!(matches!(kind, LockfileKind::Cargo));
-    }
-
-    #[test]
-    fn detect_invalid_lockfile() {
-        let temp_dir = tempfile::tempdir().unwrap();
-        let lockfile = temp_dir.as_ref().join("lockfile");
-        fs::write(&lockfile, "]} invalid {[").unwrap();
-
-        assert!(LockfileKind::detect(&lockfile).is_err());
-    }
-
-    #[test]
-    fn detect_missing_lockfile() {
-        let temp_dir = tempfile::tempdir().unwrap();
-        let lockfile = temp_dir.as_ref().join("lockfile");
-        assert!(LockfileKind::detect(&lockfile).is_err());
-    }
 }
diff --git a/third_party/rules_rust/crate_universe/src/metadata.rs b/third_party/rules_rust/crate_universe/src/metadata.rs
index 0e48676..57d90e7 100644
--- a/third_party/rules_rust/crate_universe/src/metadata.rs
+++ b/third_party/rules_rust/crate_universe/src/metadata.rs
@@ -7,6 +7,7 @@
 use std::fs;
 use std::path::{Path, PathBuf};
 use std::process::Command;
+use std::str::FromStr;
 
 use anyhow::{bail, Context, Result};
 use cargo_lock::Lockfile as CargoLockfile;
@@ -74,6 +75,99 @@
     }
 }
 
+/// A configuration desrcibing how to invoke [cargo update](https://doc.rust-lang.org/cargo/commands/cargo-update.html).
+#[derive(Debug, PartialEq)]
+pub enum CargoUpdateRequest {
+    /// Translates to an unrestricted `cargo update` command
+    Eager,
+
+    /// Translates to `cargo update --workspace`
+    Workspace,
+
+    /// Translates to `cargo update --package foo` with an optional `--precise` argument.
+    Package {
+        /// The name of the crate used with `--package`.
+        name: String,
+
+        /// If set, the `--precise` value that pairs with `--package`.
+        version: Option<String>,
+    },
+}
+
+impl FromStr for CargoUpdateRequest {
+    type Err = anyhow::Error;
+
+    fn from_str(s: &str) -> Result<Self, Self::Err> {
+        let lower = s.to_lowercase();
+
+        if ["1", "yes", "true", "on"].contains(&lower.as_str()) {
+            return Ok(Self::Eager);
+        }
+
+        if ["workspace", "minimal"].contains(&lower.as_str()) {
+            return Ok(Self::Workspace);
+        }
+
+        let mut split = s.splitn(2, '@');
+        Ok(Self::Package {
+            name: split.next().map(|s| s.to_owned()).unwrap(),
+            version: split.next().map(|s| s.to_owned()),
+        })
+    }
+}
+
+impl CargoUpdateRequest {
+    /// Determine what arguments to pass to the `cargo update` command.
+    fn get_update_args(&self) -> Vec<String> {
+        match self {
+            CargoUpdateRequest::Eager => Vec::new(),
+            CargoUpdateRequest::Workspace => vec!["--workspace".to_owned()],
+            CargoUpdateRequest::Package { name, version } => {
+                let mut update_args = vec!["--package".to_owned(), name.clone()];
+
+                if let Some(version) = version {
+                    update_args.push("--precise".to_owned());
+                    update_args.push(version.clone());
+                }
+
+                update_args
+            }
+        }
+    }
+
+    /// Calls `cargo update` with arguments specific to the state of the current variant.
+    pub fn update(&self, manifest: &Path, cargo_bin: &Path, rustc_bin: &Path) -> Result<()> {
+        let manifest_dir = manifest.parent().unwrap();
+
+        // Simply invoke `cargo update`
+        let output = Command::new(cargo_bin)
+            // Cargo detects config files based on `pwd` when running so
+            // to ensure user provided Cargo config files are used, it's
+            // critical to set the working directory to the manifest dir.
+            .current_dir(manifest_dir)
+            .arg("update")
+            .arg("--manifest-path")
+            .arg(manifest)
+            .args(self.get_update_args())
+            .env("RUSTC", &rustc_bin)
+            .output()
+            .with_context(|| {
+                format!(
+                    "Error running cargo to update packages for manifest '{}'",
+                    manifest.display()
+                )
+            })?;
+
+        if !output.status.success() {
+            eprintln!("{}", String::from_utf8_lossy(&output.stdout));
+            eprintln!("{}", String::from_utf8_lossy(&output.stderr));
+            bail!(format!("Failed to update lockfile: {}", output.status))
+        }
+
+        Ok(())
+    }
+}
+
 pub struct LockGenerator {
     /// The path to a `cargo` binary
     cargo_bin: PathBuf,
@@ -94,11 +188,12 @@
         &self,
         manifest_path: &Path,
         existing_lock: &Option<PathBuf>,
+        update_request: &Option<CargoUpdateRequest>,
     ) -> Result<cargo_lock::Lockfile> {
         let manifest_dir = manifest_path.parent().unwrap();
         let generated_lockfile_path = manifest_dir.join("Cargo.lock");
 
-        let output = if let Some(lock) = existing_lock {
+        if let Some(lock) = existing_lock {
             if !lock.exists() {
                 bail!(
                     "An existing lockfile path was provided but a file at '{}' does not exist",
@@ -112,9 +207,13 @@
             }
             fs::copy(&lock, &generated_lockfile_path)?;
 
+            if let Some(request) = update_request {
+                request.update(manifest_path, &self.cargo_bin, &self.rustc_bin)?;
+            }
+
             // Ensure the Cargo cache is up to date to simulate the behavior
             // of having just generated a new one
-            Command::new(&self.cargo_bin)
+            let output = Command::new(&self.cargo_bin)
                 // Cargo detects config files based on `pwd` when running so
                 // to ensure user provided Cargo config files are used, it's
                 // critical to set the working directory to the manifest dir.
@@ -128,10 +227,19 @@
                 .context(format!(
                     "Error running cargo to fetch crates '{}'",
                     manifest_path.display()
-                ))?
+                ))?;
+
+            if !output.status.success() {
+                eprintln!("{}", String::from_utf8_lossy(&output.stdout));
+                eprintln!("{}", String::from_utf8_lossy(&output.stderr));
+                bail!(format!(
+                    "Failed to fetch crates for lockfile: {}",
+                    output.status
+                ))
+            }
         } else {
             // Simply invoke `cargo generate-lockfile`
-            Command::new(&self.cargo_bin)
+            let output = Command::new(&self.cargo_bin)
                 // Cargo detects config files based on `pwd` when running so
                 // to ensure user provided Cargo config files are used, it's
                 // critical to set the working directory to the manifest dir.
@@ -144,13 +252,13 @@
                 .context(format!(
                     "Error running cargo to generate lockfile '{}'",
                     manifest_path.display()
-                ))?
-        };
+                ))?;
 
-        if !output.status.success() {
-            eprintln!("{}", String::from_utf8_lossy(&output.stdout));
-            eprintln!("{}", String::from_utf8_lossy(&output.stderr));
-            bail!(format!("Failed to generate lockfile: {}", output.status))
+            if !output.status.success() {
+                eprintln!("{}", String::from_utf8_lossy(&output.stdout));
+                eprintln!("{}", String::from_utf8_lossy(&output.stderr));
+                bail!(format!("Failed to generate lockfile: {}", output.status))
+            }
         }
 
         cargo_lock::Lockfile::load(&generated_lockfile_path).context(format!(
@@ -222,20 +330,76 @@
 /// A helper function for deserializing Cargo metadata and lockfiles
 pub fn load_metadata(
     metadata_path: &Path,
-    lockfile_path: Option<&Path>,
 ) -> Result<(cargo_metadata::Metadata, cargo_lock::Lockfile)> {
+    // Locate the Cargo.lock file related to the metadata file.
+    let lockfile_path = metadata_path
+        .parent()
+        .expect("metadata files should always have parents")
+        .join("Cargo.lock");
+    if !lockfile_path.exists() {
+        bail!(
+            "The metadata file at {} is not next to a `Cargo.lock` file.",
+            metadata_path.display()
+        )
+    }
+
     let content = fs::read_to_string(metadata_path)
         .with_context(|| format!("Failed to load Cargo Metadata: {}", metadata_path.display()))?;
 
     let metadata =
         serde_json::from_str(&content).context("Unable to deserialize Cargo metadata")?;
 
-    let lockfile_path = lockfile_path
-        .map(PathBuf::from)
-        .unwrap_or_else(|| metadata_path.parent().unwrap().join("Cargo.lock"));
-
     let lockfile = cargo_lock::Lockfile::load(&lockfile_path)
         .with_context(|| format!("Failed to load lockfile: {}", lockfile_path.display()))?;
 
     Ok((metadata, lockfile))
 }
+
+#[cfg(test)]
+mod test {
+    use super::*;
+
+    #[test]
+    fn deserialize_cargo_update_request_for_eager() {
+        for value in ["1", "yes", "true", "on"] {
+            let request = CargoUpdateRequest::from_str(value).unwrap();
+
+            assert_eq!(request, CargoUpdateRequest::Eager);
+        }
+    }
+
+    #[test]
+    fn deserialize_cargo_update_request_for_workspace() {
+        for value in ["workspace", "minimal"] {
+            let request = CargoUpdateRequest::from_str(value).unwrap();
+
+            assert_eq!(request, CargoUpdateRequest::Workspace);
+        }
+    }
+
+    #[test]
+    fn deserialize_cargo_update_request_for_package() {
+        let request = CargoUpdateRequest::from_str("cargo-bazel").unwrap();
+
+        assert_eq!(
+            request,
+            CargoUpdateRequest::Package {
+                name: "cargo-bazel".to_owned(),
+                version: None
+            }
+        );
+    }
+
+    #[test]
+    fn deserialize_cargo_update_request_for_precise() {
+        let request = CargoUpdateRequest::from_str("cargo-bazel@1.2.3").unwrap();
+
+        assert_eq!(
+            request,
+            CargoUpdateRequest::Package {
+                name: "cargo-bazel".to_owned(),
+                version: Some("1.2.3".to_owned())
+            }
+        );
+    }
+}
diff --git a/third_party/rules_rust/crate_universe/src/metadata/dependency.rs b/third_party/rules_rust/crate_universe/src/metadata/dependency.rs
index 105e4fe..7a98ae2 100644
--- a/third_party/rules_rust/crate_universe/src/metadata/dependency.rs
+++ b/third_party/rules_rust/crate_universe/src/metadata/dependency.rs
@@ -1,4 +1,5 @@
 ///! Gathering dependencies is the largest part of annotating.
+use anyhow::{bail, Result};
 use cargo_metadata::{Metadata as CargoMetadata, Node, NodeDep, Package, PackageId};
 use serde::{Deserialize, Serialize};
 
@@ -120,7 +121,8 @@
 
     for dep in deps.into_iter() {
         let dep_pkg = &metadata[&dep.pkg];
-        let target_name = get_library_target_name(dep_pkg, &dep.name);
+        let target_name = get_library_target_name(dep_pkg, &dep.name)
+            .expect("Nodes Dependencies are expected to exclusively be library-like targets");
         let alias = get_target_alias(&dep.name, dep_pkg);
 
         for kind_info in &dep.dep_kinds {
@@ -190,25 +192,35 @@
         .any(|id| id == &node_dep.pkg)
 }
 
-fn get_library_target_name(package: &Package, potential_name: &str) -> String {
+fn get_library_target_name(package: &Package, potential_name: &str) -> Result<String> {
     // If the potential name is not an alias in a dependent's package, a target's name
     // should match which means we already know what the target library name is.
     if package.targets.iter().any(|t| t.name == potential_name) {
-        return potential_name.to_string();
+        return Ok(potential_name.to_string());
     }
 
     // Locate any library type targets
     let lib_targets: Vec<&cargo_metadata::Target> = package
         .targets
         .iter()
-        .filter(|t| t.kind.iter().any(|k| k == "lib" || k == "proc-macro"))
+        .filter(|t| {
+            t.kind
+                .iter()
+                .any(|k| k == "lib" || k == "rlib" || k == "proc-macro")
+        })
         .collect();
 
     // Only one target should be found
-    assert_eq!(lib_targets.len(), 1);
+    if lib_targets.len() != 1 {
+        bail!(
+            "Unexpected number of 'library-like' targets found for {}: {:?}",
+            package.name,
+            package.targets
+        )
+    }
 
     let target = lib_targets.into_iter().last().unwrap();
-    target.name.clone()
+    Ok(target.name.clone())
 }
 
 /// The resolve graph (resolve.nodes[#].deps[#].name) of Cargo metadata uses module names
@@ -235,6 +247,124 @@
 
     use crate::test::*;
 
+    #[test]
+    fn get_expected_lib_target_name() {
+        let mut package = mock_cargo_metadata_package();
+        package
+            .targets
+            .extend(vec![serde_json::from_value(serde_json::json!({
+                "name": "potential",
+                "kind": ["lib"],
+                "crate_types": [],
+                "required_features": [],
+                "src_path": "/tmp/mock.rs",
+                "edition": "2021",
+                "doctest": false,
+                "test": false,
+                "doc": false,
+            }))
+            .unwrap()]);
+
+        assert_eq!(
+            get_library_target_name(&package, "potential").unwrap(),
+            "potential"
+        );
+    }
+
+    #[test]
+    fn get_lib_target_name() {
+        let mut package = mock_cargo_metadata_package();
+        package
+            .targets
+            .extend(vec![serde_json::from_value(serde_json::json!({
+                "name": "lib_target",
+                "kind": ["lib"],
+                "crate_types": [],
+                "required_features": [],
+                "src_path": "/tmp/mock.rs",
+                "edition": "2021",
+                "doctest": false,
+                "test": false,
+                "doc": false,
+            }))
+            .unwrap()]);
+
+        assert_eq!(
+            get_library_target_name(&package, "mock-pkg").unwrap(),
+            "lib_target"
+        );
+    }
+
+    #[test]
+    fn get_rlib_target_name() {
+        let mut package = mock_cargo_metadata_package();
+        package
+            .targets
+            .extend(vec![serde_json::from_value(serde_json::json!({
+                "name": "rlib_target",
+                "kind": ["rlib"],
+                "crate_types": [],
+                "required_features": [],
+                "src_path": "/tmp/mock.rs",
+                "edition": "2021",
+                "doctest": false,
+                "test": false,
+                "doc": false,
+            }))
+            .unwrap()]);
+
+        assert_eq!(
+            get_library_target_name(&package, "mock-pkg").unwrap(),
+            "rlib_target"
+        );
+    }
+
+    #[test]
+    fn get_proc_macro_target_name() {
+        let mut package = mock_cargo_metadata_package();
+        package
+            .targets
+            .extend(vec![serde_json::from_value(serde_json::json!({
+                "name": "proc_macro_target",
+                "kind": ["proc-macro"],
+                "crate_types": [],
+                "required_features": [],
+                "src_path": "/tmp/mock.rs",
+                "edition": "2021",
+                "doctest": false,
+                "test": false,
+                "doc": false,
+            }))
+            .unwrap()]);
+
+        assert_eq!(
+            get_library_target_name(&package, "mock-pkg").unwrap(),
+            "proc_macro_target"
+        );
+    }
+
+    #[test]
+    fn get_bin_target_name() {
+        let mut package = mock_cargo_metadata_package();
+        package
+            .targets
+            .extend(vec![serde_json::from_value(serde_json::json!({
+                "name": "bin_target",
+                "kind": ["bin"],
+                "crate_types": [],
+                "required_features": [],
+                "src_path": "/tmp/mock.rs",
+                "edition": "2021",
+                "doctest": false,
+                "test": false,
+                "doc": false,
+            }))
+            .unwrap()]);
+
+        // It's an error for no library target to be found.
+        assert!(get_library_target_name(&package, "mock-pkg").is_err());
+    }
+
     /// Locate the [cargo_metadata::Node] for the crate matching the given name
     fn find_metadata_node<'a>(
         name: &str,
diff --git a/third_party/rules_rust/crate_universe/src/metadata/metadata_annotation.rs b/third_party/rules_rust/crate_universe/src/metadata/metadata_annotation.rs
index be4cb7f..c045519 100644
--- a/third_party/rules_rust/crate_universe/src/metadata/metadata_annotation.rs
+++ b/third_party/rules_rust/crate_universe/src/metadata/metadata_annotation.rs
@@ -156,10 +156,11 @@
     },
 }
 
-/// TODO
+/// Additional information related to [Cargo.lock](https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html)
+/// data used for improved determinism.
 #[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Deserialize, Serialize)]
 pub struct LockfileAnnotation {
-    /// TODO
+    /// A mapping of crates/packages to additional source (network location) information.
     pub crates: BTreeMap<PackageId, SourceAnnotation>,
 }
 
diff --git a/third_party/rules_rust/crate_universe/src/rendering.rs b/third_party/rules_rust/crate_universe/src/rendering.rs
index a0570ba..c4cc249 100644
--- a/third_party/rules_rust/crate_universe/src/rendering.rs
+++ b/third_party/rules_rust/crate_universe/src/rendering.rs
@@ -211,13 +211,14 @@
 
     use crate::config::{Config, CrateId, VendorMode};
     use crate::context::crate_context::{CrateContext, Rule};
-    use crate::context::{BuildScriptAttributes, Context, TargetAttributes};
+    use crate::context::{BuildScriptAttributes, CommonAttributes, Context, TargetAttributes};
     use crate::metadata::Annotations;
     use crate::test;
 
     fn mock_render_config() -> RenderConfig {
         serde_json::from_value(serde_json::json!({
-            "repository_name": "test_rendering"
+            "repository_name": "test_rendering",
+            "regen_command": "cargo_bazel_regen_command",
         }))
         .unwrap()
     }
@@ -467,4 +468,54 @@
         // Local vendoring does not produce a `crates.bzl` file.
         assert!(output.get(&PathBuf::from("crates.bzl")).is_none());
     }
+
+    #[test]
+    fn duplicate_rustc_flags() {
+        let mut context = Context::default();
+        let crate_id = CrateId::new("mock_crate".to_owned(), "0.1.0".to_owned());
+
+        let rustc_flags = vec![
+            "-l".to_owned(),
+            "dylib=ssl".to_owned(),
+            "-l".to_owned(),
+            "dylib=crypto".to_owned(),
+        ];
+
+        context.crates.insert(
+            crate_id.clone(),
+            CrateContext {
+                name: crate_id.name,
+                version: crate_id.version,
+                targets: vec![Rule::Library(mock_target_attributes())],
+                common_attrs: CommonAttributes {
+                    rustc_flags: rustc_flags.clone(),
+                    ..CommonAttributes::default()
+                },
+                ..CrateContext::default()
+            },
+        );
+
+        // Enable local vendor mode
+        let config = RenderConfig {
+            vendor_mode: Some(VendorMode::Local),
+            ..mock_render_config()
+        };
+
+        let renderer = Renderer::new(config);
+        let output = renderer.render(&context).unwrap();
+
+        let build_file_content = output
+            .get(&PathBuf::from("BUILD.mock_crate-0.1.0.bazel"))
+            .unwrap();
+
+        // Strip all spaces from the generated BUILD file and ensure it has the flags
+        // represented by `rustc_flags` in the same order.
+        assert!(build_file_content.replace(' ', "").contains(
+            &rustc_flags
+                .iter()
+                .map(|s| format!("\"{}\",", s))
+                .collect::<Vec<String>>()
+                .join("\n")
+        ));
+    }
 }
diff --git a/third_party/rules_rust/crate_universe/src/rendering/template_engine.rs b/third_party/rules_rust/crate_universe/src/rendering/template_engine.rs
index 792802f..3785b34 100644
--- a/third_party/rules_rust/crate_universe/src/rendering/template_engine.rs
+++ b/third_party/rules_rust/crate_universe/src/rendering/template_engine.rs
@@ -194,6 +194,7 @@
         context.insert("default_select_dict", &SelectStringDict::default());
         context.insert("repository_name", &render_config.repository_name);
         context.insert("vendor_mode", &render_config.vendor_mode);
+        context.insert("regen_command", &render_config.regen_command);
         context.insert("Null", &tera::Value::Null);
         context.insert(
             "default_package_name",
diff --git a/third_party/rules_rust/crate_universe/src/rendering/templates/module_bzl.j2 b/third_party/rules_rust/crate_universe/src/rendering/templates/module_bzl.j2
index 4ea1624..c3a1e6d 100644
--- a/third_party/rules_rust/crate_universe/src/rendering/templates/module_bzl.j2
+++ b/third_party/rules_rust/crate_universe/src/rendering/templates/module_bzl.j2
@@ -195,7 +195,10 @@
     dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
 
     if not dependencies:
-        return []
+        if dependencies == None:
+            fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
+        else:
+            return []
 
     crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
     for condition, deps in dependencies.items():
diff --git a/third_party/rules_rust/crate_universe/src/rendering/templates/partials/crate/build_script.j2 b/third_party/rules_rust/crate_universe/src/rendering/templates/partials/crate/build_script.j2
index 45b97f7..9b1ff45 100644
--- a/third_party/rules_rust/crate_universe/src/rendering/templates/partials/crate/build_script.j2
+++ b/third_party/rules_rust/crate_universe/src/rendering/templates/partials/crate/build_script.j2
@@ -39,7 +39,14 @@
         # warnings. For more details see: 
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + {% set selectable = crate.build_script_attrs | get(key="rustc_flags", default=Null) %}{% include "partials/starlark/selectable_list.j2" %},
+        {%- if crate.common_attrs | get(key="rustc_flags", default=Null) %}
+
+        # User provided rustc_flags
+        {%- for rustc_flag in crate.common_attrs.rustc_flags %}
+        "{{ rustc_flag }}",
+        {%- endfor %}
+        {%- endif %}
+    ],
     srcs = {% set glob = target.srcs %}{% include "partials/starlark/glob.j2" -%},
     tools = {% set selectable = crate.build_script_attrs | get(key="tools", default=Null) %}{% include "partials/starlark/selectable_list.j2" %},
     version = "{{ crate.common_attrs.version }}",
@@ -54,6 +61,13 @@
         "noclippy",
         "norustfmt",
     ],
+    {%- if crate.build_script_attrs | get(key="toolchains", default=Null) %}
+    toolchains = [
+        {%- for toolchain in crate.build_script_attrs.toolchains %}
+        "{{ toolchain }}",
+        {%- endfor %}
+    ],
+    {%- endif %}
     visibility = ["//visibility:private"],
 )
 alias(
diff --git a/third_party/rules_rust/crate_universe/src/rendering/templates/partials/crate/common_attrs.j2 b/third_party/rules_rust/crate_universe/src/rendering/templates/partials/crate/common_attrs.j2
index a381f44..c1cccbb 100644
--- a/third_party/rules_rust/crate_universe/src/rendering/templates/partials/crate/common_attrs.j2
+++ b/third_party/rules_rust/crate_universe/src/rendering/templates/partials/crate/common_attrs.j2
@@ -1,11 +1,11 @@
-    compile_data = {% if crate.common_attrs | get(key="compile_data_glob") %}glob({{ crate.common_attrs.compile_data_glob | json_encode | safe }}) + {% endif %}{% set selectable = crate.common_attrs | get(key="compile_data", default=default_select_list) %}{% include "partials/starlark/selectable_list.j2" -%},
+    compile_data = {% if crate.common_attrs | get(key="compile_data_glob") %}glob(include = {{ crate.common_attrs.compile_data_glob | json_encode | safe }}, exclude = ["BUILD", "BUILD.bazel", "WORKSPACE", "WORKSPACE.bazel"]) + {% endif %}{% set selectable = crate.common_attrs | get(key="compile_data", default=default_select_list) %}{% include "partials/starlark/selectable_list.j2" -%},
     crate_root = "{{ target.crate_root }}",
     crate_features = [
         {%- for feature in crate.common_attrs | get(key="crate_features", default=[]) %}
         "{{ feature }}",
         {%- endfor %}
     ],
-    data = {% if crate.common_attrs | get(key="data_glob") %}glob({{ crate.common_attrs.data_glob | json_encode | safe }}) + {% endif %}{% set selectable = crate.common_attrs | get(key="data", default=default_select_list) %}{% include "partials/starlark/selectable_list.j2" -%},
+    data = {% if crate.common_attrs | get(key="data_glob") %}glob(include = {{ crate.common_attrs.data_glob | json_encode | safe }}, exclude = ["BUILD", "BUILD.bazel", "WORKSPACE", "WORKSPACE.bazel"]) + {% endif %}{% set selectable = crate.common_attrs | get(key="data", default=default_select_list) %}{% include "partials/starlark/selectable_list.j2" -%},
     edition = "{{ crate.common_attrs.edition }}",
     {%- if crate.common_attrs | get(key="linker_script", default=Null) %}
     linker_script = "{{ crate.common_attrs.linker_script }}",
@@ -18,7 +18,14 @@
         # warnings. For more details see: 
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + {% set selectable = crate.common_attrs | get(key="rustc_flags", default=Null) %}{% include "partials/starlark/selectable_list.j2" -%},
+        {%- if crate.common_attrs | get(key="rustc_flags", default=Null) %}
+
+        # User provided rustc_flags
+        {%- for rustc_flag in crate.common_attrs.rustc_flags %}
+        "{{ rustc_flag }}",
+        {%- endfor %}
+        {%- endif %}
+    ],
     srcs = {% set glob = target.srcs %}{% include "partials/starlark/glob.j2" -%},
     version = "{{ crate.common_attrs.version }}",
     tags = [
diff --git a/third_party/rules_rust/crate_universe/src/rendering/templates/partials/header.j2 b/third_party/rules_rust/crate_universe/src/rendering/templates/partials/header.j2
index 6f88e85..8e68e49 100644
--- a/third_party/rules_rust/crate_universe/src/rendering/templates/partials/header.j2
+++ b/third_party/rules_rust/crate_universe/src/rendering/templates/partials/header.j2
@@ -1,6 +1,7 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To 
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     {{regen_command}}
 ###############################################################################
\ No newline at end of file
diff --git a/third_party/rules_rust/crate_universe/src/splicing.rs b/third_party/rules_rust/crate_universe/src/splicing.rs
index 0de1daa..8d42e1e 100644
--- a/third_party/rules_rust/crate_universe/src/splicing.rs
+++ b/third_party/rules_rust/crate_universe/src/splicing.rs
@@ -15,26 +15,15 @@
 use serde::{Deserialize, Serialize};
 
 use crate::config::CrateId;
-use crate::metadata::LockGenerator;
+use crate::metadata::{CargoUpdateRequest, LockGenerator};
 use crate::utils::starlark::Label;
 
 use self::cargo_config::CargoConfig;
 pub use self::splicer::*;
 
-#[derive(Debug, Default, Serialize, Deserialize)]
-pub struct ExtraManifestInfo {
-    // The path to a Cargo Manifest
-    pub manifest: PathBuf,
-
-    // The URL where the manifest's package can be downloaded
-    pub url: String,
-
-    // The Sha256 checksum of the downloaded package located at `url`.
-    pub sha256: String,
-}
-
 type DirectPackageManifest = BTreeMap<String, cargo_toml::DependencyDetail>;
 
+/// A collection of information used for splicing together a new Cargo manifest.
 #[derive(Debug, Default, Serialize, Deserialize, Clone)]
 #[serde(deny_unknown_fields)]
 pub struct SplicingManifest {
@@ -65,33 +54,35 @@
         Self::from_str(&content).context("Failed to load SplicingManifest")
     }
 
-    pub fn absoulutize(self, relative_to: &Path) -> Self {
+    pub fn resolve(self, workspace_dir: &Path, output_base: &Path) -> Self {
         let Self {
             manifests,
             cargo_config,
             ..
         } = self;
 
+        let workspace_dir_str = workspace_dir.to_string_lossy();
+        let output_base_str = output_base.to_string_lossy();
+
         // Ensure manifests all have absolute paths
         let manifests = manifests
             .into_iter()
             .map(|(path, label)| {
-                if !path.is_absolute() {
-                    let path = relative_to.join(path);
-                    (path, label)
-                } else {
-                    (path, label)
-                }
+                let resolved_path = path
+                    .to_string_lossy()
+                    .replace("${build_workspace_directory}", &workspace_dir_str)
+                    .replace("${output_base}", &output_base_str);
+                (PathBuf::from(resolved_path), label)
             })
             .collect();
 
         // Ensure the cargo config is located at an absolute path
         let cargo_config = cargo_config.map(|path| {
-            if !path.is_absolute() {
-                relative_to.join(path)
-            } else {
-                path
-            }
+            let resolved_path = path
+                .to_string_lossy()
+                .replace("${build_workspace_directory}", &workspace_dir_str)
+                .replace("${output_base}", &output_base_str);
+            PathBuf::from(resolved_path)
         });
 
         Self {
@@ -102,6 +93,7 @@
     }
 }
 
+/// The result of fully resolving a [SplicingManifest] in preparation for splicing.
 #[derive(Debug, Serialize, Default)]
 pub struct SplicingMetadata {
     /// A set of all packages directly written to the rule
@@ -147,32 +139,6 @@
     }
 }
 
-/// A collection of information required for reproducible "extra worksspace members".
-#[derive(Debug, Default, Serialize, Deserialize)]
-#[serde(deny_unknown_fields)]
-pub struct ExtraManifestsManifest {
-    pub manifests: Vec<ExtraManifestInfo>,
-}
-
-impl FromStr for ExtraManifestsManifest {
-    type Err = serde_json::Error;
-
-    fn from_str(s: &str) -> Result<Self, Self::Err> {
-        serde_json::from_str(s)
-    }
-}
-
-impl ExtraManifestsManifest {
-    pub fn try_from_path<T: AsRef<Path>>(path: T) -> Result<Self> {
-        let content = fs::read_to_string(path.as_ref())?;
-        Self::from_str(&content).context("Failed to load ExtraManifestsManifest")
-    }
-
-    pub fn absoulutize(self) -> Self {
-        self
-    }
-}
-
 #[derive(Debug, Default, Serialize, Deserialize, Clone)]
 pub struct SourceInfo {
     /// A url where to a `.crate` file.
@@ -227,30 +193,9 @@
 impl WorkspaceMetadata {
     fn new(
         splicing_manifest: &SplicingManifest,
-        extra_manifests_manifest: &ExtraManifestsManifest,
-        injected_manifests: HashMap<&PathBuf, String>,
+        member_manifests: HashMap<&PathBuf, String>,
     ) -> Result<Self> {
-        let mut sources = BTreeMap::new();
-
-        for config in extra_manifests_manifest.manifests.iter() {
-            let package = match read_manifest(&config.manifest) {
-                Ok(manifest) => match manifest.package {
-                    Some(pkg) => pkg,
-                    None => continue,
-                },
-                Err(e) => return Err(e),
-            };
-
-            let id = CrateId::new(package.name, package.version);
-            let info = SourceInfo {
-                url: config.url.clone(),
-                sha256: config.sha256.clone(),
-            };
-
-            sources.insert(id, info);
-        }
-
-        let mut package_prefixes: BTreeMap<String, String> = injected_manifests
+        let mut package_prefixes: BTreeMap<String, String> = member_manifests
             .iter()
             .filter_map(|(original_manifest, cargo_pkg_name)| {
                 let label = match splicing_manifest.manifests.get(*original_manifest) {
@@ -285,7 +230,7 @@
             .collect();
 
         Ok(Self {
-            sources,
+            sources: BTreeMap::new(),
             workspace_prefix,
             package_prefixes,
         })
@@ -469,6 +414,7 @@
     existing_lock: &Option<PathBuf>,
     cargo_bin: &Path,
     rustc_bin: &Path,
+    update_request: &Option<CargoUpdateRequest>,
 ) -> Result<cargo_lock::Lockfile> {
     let manifest_dir = manifest_path
         .as_path_buf()
@@ -484,7 +430,7 @@
 
     // Generate the new lockfile
     let lockfile = LockGenerator::new(PathBuf::from(cargo_bin), PathBuf::from(rustc_bin))
-        .generate(manifest_path.as_path_buf(), existing_lock)?;
+        .generate(manifest_path.as_path_buf(), existing_lock, update_request)?;
 
     // Write the lockfile to disk
     if !root_lockfile_path.exists() {
@@ -493,3 +439,107 @@
 
     Ok(lockfile)
 }
+
+#[cfg(test)]
+mod test {
+    use super::*;
+
+    use std::path::PathBuf;
+
+    #[test]
+    fn deserialize_splicing_manifest() {
+        let runfiles = runfiles::Runfiles::create().unwrap();
+        let path = runfiles.rlocation(
+            "rules_rust/crate_universe/test_data/serialized_configs/splicing_manifest.json",
+        );
+
+        let content = std::fs::read_to_string(path).unwrap();
+
+        let manifest: SplicingManifest = serde_json::from_str(&content).unwrap();
+
+        // Check manifests
+        assert_eq!(
+            manifest.manifests,
+            BTreeMap::from([
+                (
+                    PathBuf::from("${build_workspace_directory}/submod/Cargo.toml"),
+                    Label::from_str("//submod:Cargo.toml").unwrap()
+                ),
+                (
+                    PathBuf::from("${output_base}/external_crate/Cargo.toml"),
+                    Label::from_str("@external_crate//:Cargo.toml").unwrap()
+                ),
+                (
+                    PathBuf::from("/tmp/abs/path/workspace/Cargo.toml"),
+                    Label::from_str("//:Cargo.toml").unwrap()
+                ),
+            ])
+        );
+
+        // Check splicing configs
+        assert_eq!(manifest.resolver_version, cargo_toml::Resolver::V2);
+
+        // Check packages
+        assert_eq!(manifest.direct_packages.len(), 1);
+        let package = manifest.direct_packages.get("rand").unwrap();
+        assert_eq!(
+            package,
+            &cargo_toml::DependencyDetail {
+                default_features: Some(false),
+                features: vec!["small_rng".to_owned()],
+                version: Some("0.8.5".to_owned()),
+                ..Default::default()
+            }
+        );
+
+        // Check cargo config
+        assert_eq!(
+            manifest.cargo_config,
+            Some(PathBuf::from("/tmp/abs/path/workspace/.cargo/config.toml"))
+        );
+    }
+
+    #[test]
+    fn splicing_manifest_resolve() {
+        let runfiles = runfiles::Runfiles::create().unwrap();
+        let path = runfiles.rlocation(
+            "rules_rust/crate_universe/test_data/serialized_configs/splicing_manifest.json",
+        );
+
+        let content = std::fs::read_to_string(path).unwrap();
+
+        let mut manifest: SplicingManifest = serde_json::from_str(&content).unwrap();
+        manifest.cargo_config = Some(PathBuf::from(
+            "${build_workspace_directory}/.cargo/config.toml",
+        ));
+        manifest = manifest.resolve(
+            &PathBuf::from("/tmp/abs/path/workspace"),
+            &PathBuf::from("/tmp/output_base"),
+        );
+
+        // Check manifests
+        assert_eq!(
+            manifest.manifests,
+            BTreeMap::from([
+                (
+                    PathBuf::from("/tmp/abs/path/workspace/submod/Cargo.toml"),
+                    Label::from_str("//submod:Cargo.toml").unwrap()
+                ),
+                (
+                    PathBuf::from("/tmp/output_base/external_crate/Cargo.toml"),
+                    Label::from_str("@external_crate//:Cargo.toml").unwrap()
+                ),
+                (
+                    PathBuf::from("/tmp/abs/path/workspace/Cargo.toml"),
+                    Label::from_str("//:Cargo.toml").unwrap()
+                ),
+            ])
+        );
+
+        // Check cargo config
+        assert_eq!(
+            manifest.cargo_config.unwrap(),
+            PathBuf::from("/tmp/abs/path/workspace/.cargo/config.toml"),
+        )
+    }
+}
diff --git a/third_party/rules_rust/crate_universe/src/splicing/splicer.rs b/third_party/rules_rust/crate_universe/src/splicing/splicer.rs
index 5e3ef27..8374df4 100644
--- a/third_party/rules_rust/crate_universe/src/splicing/splicer.rs
+++ b/third_party/rules_rust/crate_universe/src/splicing/splicer.rs
@@ -5,16 +5,15 @@
 use std::path::{Path, PathBuf};
 
 use anyhow::{bail, Context, Result};
+use cargo_metadata::MetadataCommand;
 use cargo_toml::{Dependency, Manifest};
+use normpath::PathExt;
 
 use crate::config::CrateId;
 use crate::splicing::{SplicedManifest, SplicingManifest};
 use crate::utils::starlark::Label;
 
-use super::{
-    read_manifest, DirectPackageManifest, ExtraManifestInfo, ExtraManifestsManifest,
-    WorkspaceMetadata,
-};
+use super::{read_manifest, DirectPackageManifest, WorkspaceMetadata};
 
 /// The core splicer implementation. Each style of Bazel workspace should be represented
 /// here and a splicing implementation defined.
@@ -24,7 +23,6 @@
         path: &'a PathBuf,
         manifest: &'a Manifest,
         splicing_manifest: &'a SplicingManifest,
-        extra_manifests_manifest: &'a ExtraManifestsManifest,
     },
     /// Splice a manifest for a single package. This includes cases where
     /// were defined directly in Bazel.
@@ -32,13 +30,11 @@
         path: &'a PathBuf,
         manifest: &'a Manifest,
         splicing_manifest: &'a SplicingManifest,
-        extra_manifests_manifest: &'a ExtraManifestsManifest,
     },
     /// Splice a manifest from multiple disjoint Cargo manifests.
     MultiPackage {
         manifests: &'a HashMap<PathBuf, Manifest>,
         splicing_manifest: &'a SplicingManifest,
-        extra_manifests_manifest: &'a ExtraManifestsManifest,
     },
 }
 
@@ -49,7 +45,7 @@
     pub fn new(
         manifests: &'a HashMap<PathBuf, Manifest>,
         splicing_manifest: &'a SplicingManifest,
-        extra_manifests_manifest: &'a ExtraManifestsManifest,
+        cargo: &Path,
     ) -> Result<Self> {
         // First check for any workspaces in the provided manifests
         let workspace_owned: HashMap<&PathBuf, &Manifest> = manifests
@@ -73,7 +69,33 @@
                 bail!("When splicing manifests, there can only be 1 root workspace manifest");
             }
 
+            // This is an error case - we've detected some manifests are in a workspace, but can't
+            // find it.
+            // This block is just for trying to give as useful an error message as possible in this
+            // case.
+            if workspace_roots.is_empty() {
+                let sorted_manifests: BTreeSet<_> = manifests.keys().collect();
+                for manifest_path in sorted_manifests {
+                    let metadata_result = MetadataCommand::new()
+                        .cargo_path(cargo)
+                        .current_dir(manifest_path.parent().unwrap())
+                        .manifest_path(manifest_path)
+                        .no_deps()
+                        .exec();
+                    if let Ok(metadata) = metadata_result {
+                        let label = Label::from_absolute_path(
+                            metadata.workspace_root.join("Cargo.toml").as_std_path(),
+                        );
+                        if let Ok(label) = label {
+                            bail!("Missing root workspace manifest. Please add the following label to the `manifests` key: \"{}\"", label);
+                        }
+                    }
+                }
+                bail!("Missing root workspace manifest. Please add the label of the workspace root to the `manifests` key");
+            }
+
             // Ensure all workspace owned manifests are members of the one workspace root
+            // UNWRAP: Safe because we've checked workspace_roots isn't empty.
             let (root_manifest_path, root_manifest) = workspace_roots.drain().last().unwrap();
             let external_workspace_members: BTreeSet<String> = workspace_packages
                 .into_iter()
@@ -87,38 +109,22 @@
                 bail!("A package was provided that appears to be a part of another workspace.\nworkspace root: '{}'\nexternal packages: {:#?}", root_manifest_path.display(), external_workspace_members)
             }
 
-            // Ensure all workspace members are present for the given workspace
-            let workspace_members = root_manifest.workspace.as_ref().unwrap().members.clone();
-            let missing_manifests: BTreeSet<String> = workspace_members
-                .into_iter()
-                .filter(|member| {
-                    // Check for any members that are missing from the list of manifests
-                    !manifests.keys().any(|path| {
-                        let path_str = path.to_string_lossy().to_string();
-                        // Account for windows paths.
-                        let path_str = path_str.replace("\\", "/");
-                        // Workspace members are represented as directories.
-                        path_str.trim_end_matches("/Cargo.toml").ends_with(member)
+            // UNWRAP: Safe because a Cargo.toml file must have a parent directory.
+            let root_manifest_dir = root_manifest_path.parent().unwrap();
+            let missing_manifests = Self::find_missing_manifests(
+                root_manifest,
+                root_manifest_dir,
+                &manifests
+                    .keys()
+                    .map(|p| {
+                        p.normalize()
+                            .with_context(|| format!("Failed to normalize path {:?}", p))
                     })
-                })
-                .filter_map(|path_str| {
-                    // UNWRAP: Safe because a Cargo.toml file must have a parent directory.
-                    let cargo_manifest_dir = root_manifest_path.parent().unwrap();
-                    let label = Label::from_absolute_path(
-                        &cargo_manifest_dir.join(path_str).join("Cargo.toml"),
-                    );
-                    match label {
-                        Ok(label) => Some(label.to_string()),
-                        Err(err) => {
-                            eprintln!("Failed to identify label for missing manifest: {}", err);
-                            None
-                        }
-                    }
-                })
-                .collect();
-
+                    .collect::<Result<_, _>>()?,
+            )
+            .context("Identifying missing manifests")?;
             if !missing_manifests.is_empty() {
-                bail!("Some manifests are not being tracked. Please add the following labels to the `manifests` key: {:#?}", missing_manifests)
+                bail!("Some manifests are not being tracked. Please add the following labels to the `manifests` key: {:#?}", missing_manifests);
             }
 
             root_workspace_pair = Some((root_manifest_path, root_manifest));
@@ -129,7 +135,6 @@
                 path,
                 manifest,
                 splicing_manifest,
-                extra_manifests_manifest,
             })
         } else if manifests.len() == 1 {
             let (path, manifest) = manifests.iter().last().unwrap();
@@ -137,17 +142,52 @@
                 path,
                 manifest,
                 splicing_manifest,
-                extra_manifests_manifest,
             })
         } else {
             Ok(Self::MultiPackage {
                 manifests,
                 splicing_manifest,
-                extra_manifests_manifest,
             })
         }
     }
 
+    fn find_missing_manifests(
+        root_manifest: &Manifest,
+        root_manifest_dir: &Path,
+        known_manifest_paths: &BTreeSet<normpath::BasePathBuf>,
+    ) -> Result<BTreeSet<String>> {
+        let workspace_manifest_paths = root_manifest
+            .workspace
+            .as_ref()
+            .unwrap()
+            .members
+            .iter()
+            .map(|member| {
+                let path = root_manifest_dir.join(member).join("Cargo.toml");
+                path.normalize()
+                    .with_context(|| format!("Failed to normalize path {:?}", path))
+            })
+            .collect::<Result<BTreeSet<normpath::BasePathBuf>, _>>()?;
+
+        // Ensure all workspace members are present for the given workspace
+        workspace_manifest_paths
+            .into_iter()
+            .filter(|workspace_manifest_path| {
+                !known_manifest_paths.contains(workspace_manifest_path)
+            })
+            .map(|workspace_manifest_path| {
+                let label = Label::from_absolute_path(workspace_manifest_path.as_path())
+                    .with_context(|| {
+                        format!(
+                            "Failed to identify label for path {:?}",
+                            workspace_manifest_path
+                        )
+                    })?;
+                Ok(label.to_string())
+            })
+            .collect()
+    }
+
     /// Performs splicing based on the current variant.
     pub fn splice(&self, workspace_dir: &Path) -> Result<SplicedManifest> {
         match self {
@@ -155,76 +195,45 @@
                 path,
                 manifest,
                 splicing_manifest,
-                extra_manifests_manifest,
-            } => Self::splice_workspace(
-                workspace_dir,
-                path,
-                manifest,
-                splicing_manifest,
-                extra_manifests_manifest,
-            ),
+            } => Self::splice_workspace(workspace_dir, path, manifest, splicing_manifest),
             SplicerKind::Package {
                 path,
                 manifest,
                 splicing_manifest,
-                extra_manifests_manifest,
-            } => Self::splice_package(
-                workspace_dir,
-                path,
-                manifest,
-                splicing_manifest,
-                extra_manifests_manifest,
-            ),
+            } => Self::splice_package(workspace_dir, path, manifest, splicing_manifest),
             SplicerKind::MultiPackage {
                 manifests,
                 splicing_manifest,
-                extra_manifests_manifest,
-            } => Self::splice_multi_package(
-                workspace_dir,
-                manifests,
-                splicing_manifest,
-                extra_manifests_manifest,
-            ),
+            } => Self::splice_multi_package(workspace_dir, manifests, splicing_manifest),
         }
     }
 
+    /// Implementation for splicing Cargo workspaces
     fn splice_workspace(
         workspace_dir: &Path,
         path: &&PathBuf,
         manifest: &&Manifest,
         splicing_manifest: &&SplicingManifest,
-        extra_manifests_manifest: &&ExtraManifestsManifest,
     ) -> Result<SplicedManifest> {
         let mut manifest = (*manifest).clone();
         let manifest_dir = path
             .parent()
             .expect("Every manifest should havee a parent directory");
 
-        let extra_workspace_manifests =
-            Self::get_extra_workspace_manifests(&extra_manifests_manifest.manifests)?;
-
         // Link the sources of the root manifest into the new workspace
         symlink_roots(manifest_dir, workspace_dir, Some(IGNORE_LIST))?;
 
         // Optionally install the cargo config after contents have been symlinked
         Self::setup_cargo_config(&splicing_manifest.cargo_config, workspace_dir)?;
 
-        // Add additional workspace members to the new manifest
-        let mut installations = Self::inject_workspace_members(
-            &mut manifest,
-            &extra_workspace_manifests,
-            workspace_dir,
-        )?;
-
         // Add any additional depeendencies to the root package
         Self::inject_direct_packages(&mut manifest, &splicing_manifest.direct_packages)?;
 
         let root_manifest_path = workspace_dir.join("Cargo.toml");
-        installations.insert(path, String::new());
+        let member_manifests = HashMap::from([(*path, String::new())]);
 
         // Write the generated metadata to the manifest
-        let workspace_metadata =
-            WorkspaceMetadata::new(splicing_manifest, extra_manifests_manifest, installations)?;
+        let workspace_metadata = WorkspaceMetadata::new(splicing_manifest, member_manifests)?;
         workspace_metadata.inject_into(&mut manifest)?;
 
         // Write the root manifest
@@ -233,20 +242,17 @@
         Ok(SplicedManifest::Workspace(root_manifest_path))
     }
 
+    /// Implementation for splicing individual Cargo packages
     fn splice_package(
         workspace_dir: &Path,
         path: &&PathBuf,
         manifest: &&Manifest,
         splicing_manifest: &&SplicingManifest,
-        extra_manifests_manifest: &&ExtraManifestsManifest,
     ) -> Result<SplicedManifest> {
         let manifest_dir = path
             .parent()
             .expect("Every manifest should havee a parent directory");
 
-        let extra_workspace_manifests =
-            Self::get_extra_workspace_manifests(&extra_manifests_manifest.manifests)?;
-
         // Link the sources of the root manifest into the new workspace
         symlink_roots(manifest_dir, workspace_dir, Some(IGNORE_LIST))?;
 
@@ -260,22 +266,14 @@
                 default_cargo_workspace_manifest(&splicing_manifest.resolver_version).workspace
         }
 
-        // Add additional workspace members to the new manifest
-        let mut installations = Self::inject_workspace_members(
-            &mut manifest,
-            &extra_workspace_manifests,
-            workspace_dir,
-        )?;
-
         // Add any additional depeendencies to the root package
         Self::inject_direct_packages(&mut manifest, &splicing_manifest.direct_packages)?;
 
         let root_manifest_path = workspace_dir.join("Cargo.toml");
-        installations.insert(path, String::new());
+        let member_manifests = HashMap::from([(*path, String::new())]);
 
         // Write the generated metadata to the manifest
-        let workspace_metadata =
-            WorkspaceMetadata::new(splicing_manifest, extra_manifests_manifest, installations)?;
+        let workspace_metadata = WorkspaceMetadata::new(splicing_manifest, member_manifests)?;
         workspace_metadata.inject_into(&mut manifest)?;
 
         // Write the root manifest
@@ -284,37 +282,22 @@
         Ok(SplicedManifest::Package(root_manifest_path))
     }
 
+    /// Implementation for splicing together multiple Cargo packages/workspaces
     fn splice_multi_package(
         workspace_dir: &Path,
         manifests: &&HashMap<PathBuf, Manifest>,
         splicing_manifest: &&SplicingManifest,
-        extra_manifests_manifest: &&ExtraManifestsManifest,
     ) -> Result<SplicedManifest> {
         let mut manifest = default_cargo_workspace_manifest(&splicing_manifest.resolver_version);
 
         // Optionally install a cargo config file into the workspace root.
         Self::setup_cargo_config(&splicing_manifest.cargo_config, workspace_dir)?;
 
-        let extra_workspace_manifests =
-            Self::get_extra_workspace_manifests(&extra_manifests_manifest.manifests)?;
-
-        let manifests: HashMap<PathBuf, Manifest> = manifests
-            .iter()
-            .map(|(p, m)| (p.to_owned(), m.to_owned()))
-            .collect();
-
-        let all_manifests = manifests
-            .iter()
-            .chain(extra_workspace_manifests.iter())
-            .map(|(k, v)| (k.clone(), v.clone()))
-            .collect();
-
         let installations =
-            Self::inject_workspace_members(&mut manifest, &all_manifests, workspace_dir)?;
+            Self::inject_workspace_members(&mut manifest, manifests, workspace_dir)?;
 
         // Write the generated metadata to the manifest
-        let workspace_metadata =
-            WorkspaceMetadata::new(splicing_manifest, extra_manifests_manifest, installations)?;
+        let workspace_metadata = WorkspaceMetadata::new(splicing_manifest, installations)?;
         workspace_metadata.inject_into(&mut manifest)?;
 
         // Add any additional depeendencies to the root package
@@ -327,38 +310,9 @@
         Ok(SplicedManifest::MultiPackage(root_manifest_path))
     }
 
-    /// Extract the set of extra workspace member manifests such that it matches
-    /// how other manifests are passed when creating a new [SplicerKind].
-    fn get_extra_workspace_manifests(
-        extra_manifests: &[ExtraManifestInfo],
-    ) -> Result<HashMap<PathBuf, Manifest>> {
-        extra_manifests
-            .iter()
-            .map(|config| match read_manifest(&config.manifest) {
-                Ok(manifest) => Ok((config.manifest.clone(), manifest)),
-                Err(err) => Err(err),
-            })
-            .collect()
-    }
-
     /// A helper for installing Cargo config files into the spliced workspace while also
     /// ensuring no other linked config file is available
     fn setup_cargo_config(cargo_config_path: &Option<PathBuf>, workspace_dir: &Path) -> Result<()> {
-        // Make sure no other config files exist
-        for config in vec![
-            workspace_dir.join("config"),
-            workspace_dir.join("config.toml"),
-        ] {
-            if config.exists() {
-                fs::remove_file(&config).with_context(|| {
-                    format!(
-                        "Failed to delete existing cargo config: {}",
-                        config.display()
-                    )
-                })?;
-            }
-        }
-
         // If the `.cargo` dir is a symlink, we'll need to relink it and ensure
         // a Cargo config file is omitted
         let dot_cargo_dir = workspace_dir.join(".cargo");
@@ -383,12 +337,53 @@
                     dot_cargo_dir.join("config.toml"),
                 ] {
                     if config.exists() {
-                        fs::remove_file(&config)?;
+                        remove_symlink(&config).with_context(|| {
+                            format!(
+                                "Failed to delete existing cargo config: {}",
+                                config.display()
+                            )
+                        })?;
                     }
                 }
             }
         }
 
+        // Make sure no other config files exist
+        for config in vec![
+            workspace_dir.join("config"),
+            workspace_dir.join("config.toml"),
+            dot_cargo_dir.join("config"),
+            dot_cargo_dir.join("config.toml"),
+        ] {
+            if config.exists() {
+                remove_symlink(&config).with_context(|| {
+                    format!(
+                        "Failed to delete existing cargo config: {}",
+                        config.display()
+                    )
+                })?;
+            }
+        }
+
+        // Ensure no parent directory also has a cargo config
+        let mut current_parent = workspace_dir.parent();
+        while let Some(parent) = current_parent {
+            let dot_cargo_dir = parent.join(".cargo");
+            for config in vec![
+                dot_cargo_dir.join("config.toml"),
+                dot_cargo_dir.join("config"),
+            ] {
+                if config.exists() {
+                    bail!(
+                        "A Cargo config file was found in a parent directory to the current workspace. This is not allowed because these settings will leak into your Bazel build but will not be reproducible on other machines.\nWorkspace = {}\nCargo config = {}",
+                        workspace_dir.display(),
+                        config.display(),
+                    )
+                }
+            }
+            current_parent = parent.parent()
+        }
+
         // Install the new config file after having removed all others
         if let Some(cargo_config_path) = cargo_config_path {
             if !dot_cargo_dir.exists() {
@@ -480,15 +475,10 @@
     workspace_dir: PathBuf,
     manifests: HashMap<PathBuf, Manifest>,
     splicing_manifest: SplicingManifest,
-    extra_manifests_manifest: ExtraManifestsManifest,
 }
 
 impl Splicer {
-    pub fn new(
-        workspace_dir: PathBuf,
-        splicing_manifest: SplicingManifest,
-        extra_manifests_manifest: ExtraManifestsManifest,
-    ) -> Result<Self> {
+    pub fn new(workspace_dir: PathBuf, splicing_manifest: SplicingManifest) -> Result<Self> {
         // Load all manifests
         let manifests = splicing_manifest
             .manifests
@@ -504,18 +494,13 @@
             workspace_dir,
             manifests,
             splicing_manifest,
-            extra_manifests_manifest,
         })
     }
 
     /// Build a new workspace root
-    pub fn splice_workspace(&self) -> Result<SplicedManifest> {
-        SplicerKind::new(
-            &self.manifests,
-            &self.splicing_manifest,
-            &self.extra_manifests_manifest,
-        )?
-        .splice(&self.workspace_dir)
+    pub fn splice_workspace(&self, cargo: &Path) -> Result<SplicedManifest> {
+        SplicerKind::new(&self.manifests, &self.splicing_manifest, cargo)?
+            .splice(&self.workspace_dir)
     }
 }
 
@@ -719,8 +704,8 @@
     use std::str::FromStr;
 
     use cargo_metadata::{MetadataCommand, PackageId};
+    use maplit::btreeset;
 
-    use crate::splicing::ExtraManifestInfo;
     use crate::utils::starlark::Label;
 
     /// Clone and compare two items after calling `.sort()` on them.
@@ -750,6 +735,10 @@
         (PathBuf::from("cargo"), PathBuf::from("rustc"))
     }
 
+    fn cargo() -> PathBuf {
+        get_cargo_and_rustc_paths().0
+    }
+
     fn generate_metadata(manifest_path: &Path) -> cargo_metadata::Metadata {
         let manifest_dir = manifest_path.parent().unwrap_or_else(|| {
             panic!(
@@ -790,16 +779,28 @@
     }
 
     fn mock_cargo_toml(path: &Path, name: &str) -> cargo_toml::Manifest {
+        mock_cargo_toml_with_dependencies(path, name, &[])
+    }
+
+    fn mock_cargo_toml_with_dependencies(
+        path: &Path,
+        name: &str,
+        deps: &[&str],
+    ) -> cargo_toml::Manifest {
         let manifest = cargo_toml::Manifest::from_str(&textwrap::dedent(&format!(
             r#"
             [package]
-            name = "{}"
+            name = "{name}"
             version = "0.0.1"
 
             [lib]
             path = "lib.rs"
+
+            [dependencies]
+            {dependencies}
             "#,
-            name
+            name = name,
+            dependencies = deps.join("\n")
         )))
         .unwrap();
 
@@ -809,23 +810,6 @@
         manifest
     }
 
-    fn mock_extra_manifest_digest(cache_dir: &Path) -> ExtraManifestsManifest {
-        ExtraManifestsManifest {
-            manifests: vec![{
-                let manifest_path = cache_dir.join("extra_pkg").join("Cargo.toml");
-                mock_cargo_toml(&manifest_path, "extra_pkg");
-
-                ExtraManifestInfo {
-                    manifest: manifest_path,
-                    url: "https://crates.io/".to_owned(),
-                    sha256: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
-                        .to_owned(),
-                }
-            }],
-        }
-    }
-
-    /// This json object is tightly coupled to [mock_extra_manifest_digest]
     fn mock_workspace_metadata(
         include_extra_member: bool,
         workspace_prefix: Option<&str>,
@@ -870,7 +854,12 @@
                 .join("root_pkg")
                 .join(pkg)
                 .join("Cargo.toml");
-            mock_cargo_toml(&manifest_path, pkg);
+            let deps = if pkg == &"sub_pkg_b" {
+                vec![r#"sub_pkg_a = { path = "../sub_pkg_a" }"#]
+            } else {
+                vec![]
+            };
+            mock_cargo_toml_with_dependencies(&manifest_path, pkg, &deps);
 
             splicing_manifest.manifests.insert(
                 manifest_path,
@@ -903,6 +892,9 @@
         let manifest_path = root_pkg.join("Cargo.toml");
         fs::create_dir_all(&manifest_path.parent().unwrap()).unwrap();
         fs::write(&manifest_path, toml::to_string(&manifest).unwrap()).unwrap();
+        {
+            File::create(root_pkg.join("BUILD.bazel")).unwrap();
+        }
 
         let sub_pkg_a = root_pkg.join("sub_pkg_a");
         let sub_pkg_b = root_pkg.join("sub_pkg_b");
@@ -916,7 +908,7 @@
 
         splicing_manifest.manifests.insert(
             manifest_path,
-            Label::from_str("//pkg_root:Cargo.toml").unwrap(),
+            Label::from_str("//root_pkg:Cargo.toml").unwrap(),
         );
 
         (splicing_manifest, cache_dir)
@@ -1015,7 +1007,7 @@
         // On windows, make sure we normalize the path to match what Cargo would
         // otherwise use to populate metadata.
         if cfg!(target_os = "windows") {
-            workspace_root = format!("/{}", workspace_root.replace("\\", "/"))
+            workspace_root = format!("/{}", workspace_root.replace('\\', "/"))
         };
 
         if is_root {
@@ -1035,14 +1027,11 @@
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            ExtraManifestsManifest::default(),
-        )
-        .unwrap()
-        .splice_workspace()
-        .unwrap();
+        let workspace_manifest =
+            Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+                .unwrap()
+                .splice_workspace(&cargo())
+                .unwrap();
 
         // Ensure metadata is valid
         let metadata = generate_metadata(workspace_manifest.as_path_buf());
@@ -1071,14 +1060,11 @@
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            ExtraManifestsManifest::default(),
-        )
-        .unwrap()
-        .splice_workspace()
-        .unwrap();
+        let workspace_manifest =
+            Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+                .unwrap()
+                .splice_workspace(&cargo())
+                .unwrap();
 
         // Ensure metadata is valid
         let metadata = generate_metadata(workspace_manifest.as_path_buf());
@@ -1108,18 +1094,15 @@
         // Remove everything but the root manifest
         splicing_manifest
             .manifests
-            .retain(|_, label| *label == Label::from_str("//pkg_root:Cargo.toml").unwrap());
+            .retain(|_, label| *label == Label::from_str("//root_pkg:Cargo.toml").unwrap());
         assert_eq!(splicing_manifest.manifests.len(), 1);
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            ExtraManifestsManifest::default(),
-        )
-        .unwrap()
-        .splice_workspace();
+        let workspace_manifest =
+            Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+                .unwrap()
+                .splice_workspace(&cargo());
 
         assert!(workspace_manifest.is_err());
 
@@ -1133,6 +1116,33 @@
     }
 
     #[test]
+    fn splice_workspace_report_missing_root() {
+        let (mut splicing_manifest, _cache_dir) = mock_splicing_manifest_with_workspace();
+
+        // Remove everything but the root manifest
+        splicing_manifest
+            .manifests
+            .retain(|_, label| *label != Label::from_str("//root_pkg:Cargo.toml").unwrap());
+        assert_eq!(splicing_manifest.manifests.len(), 2);
+
+        // Splice the workspace
+        let workspace_root = tempfile::tempdir().unwrap();
+        let workspace_manifest =
+            Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+                .unwrap()
+                .splice_workspace(&cargo());
+
+        assert!(workspace_manifest.is_err());
+
+        // Ensure both the missing manifests are mentioned in the error string
+        let err_str = format!("{:?}", &workspace_manifest);
+        assert!(
+            err_str.contains("Missing root workspace manifest")
+                && err_str.contains("//root_pkg:Cargo.toml")
+        );
+    }
+
+    #[test]
     fn splice_workspace_report_external_workspace_members() {
         let (mut splicing_manifest, _cache_dir) = mock_splicing_manifest_with_workspace();
 
@@ -1168,13 +1178,10 @@
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            ExtraManifestsManifest::default(),
-        )
-        .unwrap()
-        .splice_workspace();
+        let workspace_manifest =
+            Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+                .unwrap()
+                .splice_workspace(&cargo());
 
         assert!(workspace_manifest.is_err());
 
@@ -1194,14 +1201,11 @@
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            ExtraManifestsManifest::default(),
-        )
-        .unwrap()
-        .splice_workspace()
-        .unwrap();
+        let workspace_manifest =
+            Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+                .unwrap()
+                .splice_workspace(&cargo())
+                .unwrap();
 
         // Ensure metadata is valid
         let metadata = generate_metadata(workspace_manifest.as_path_buf());
@@ -1226,14 +1230,11 @@
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            ExtraManifestsManifest::default(),
-        )
-        .unwrap()
-        .splice_workspace()
-        .unwrap();
+        let workspace_manifest =
+            Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+                .unwrap()
+                .splice_workspace(&cargo())
+                .unwrap();
 
         // Check the default resolver version
         let cargo_manifest = cargo_toml::Manifest::from_str(
@@ -1278,14 +1279,11 @@
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            ExtraManifestsManifest::default(),
-        )
-        .unwrap()
-        .splice_workspace()
-        .unwrap();
+        let workspace_manifest =
+            Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+                .unwrap()
+                .splice_workspace(&cargo())
+                .unwrap();
 
         // Check the specified resolver version
         let cargo_manifest = cargo_toml::Manifest::from_str(
@@ -1322,122 +1320,292 @@
     }
 
     #[test]
-    fn extra_workspace_member_with_package() {
-        let (splicing_manifest, cache_dir) = mock_splicing_manifest_with_package();
+    fn cargo_config_setup() {
+        let (mut splicing_manifest, _cache_dir) = mock_splicing_manifest_with_workspace_in_root();
 
-        // Add the extra workspace member
-        let extra_manifests_manifest = mock_extra_manifest_digest(cache_dir.as_ref());
+        // Write a cargo config
+        let temp_dir = tempfile::tempdir().unwrap();
+        let external_config = temp_dir.as_ref().join("config.toml");
+        fs::write(&external_config, "# Cargo configuration file").unwrap();
+        splicing_manifest.cargo_config = Some(external_config);
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            extra_manifests_manifest,
-        )
-        .unwrap()
-        .splice_workspace()
-        .unwrap();
+        Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+            .unwrap()
+            .splice_workspace(&cargo())
+            .unwrap();
 
-        // Ensure metadata is valid
-        let metadata = generate_metadata(workspace_manifest.as_path_buf());
-        assert_sort_eq!(
-            metadata.workspace_members,
-            vec![
-                new_package_id("extra_pkg", workspace_root.as_ref(), false),
-                new_package_id("root_pkg", workspace_root.as_ref(), true),
-            ]
-        );
-
-        // Ensure the workspace metadata annotations are populated
+        let cargo_config = workspace_root.as_ref().join(".cargo").join("config.toml");
+        assert!(cargo_config.exists());
         assert_eq!(
-            metadata.workspace_metadata,
-            mock_workspace_metadata(true, None)
+            fs::read_to_string(cargo_config).unwrap().trim(),
+            "# Cargo configuration file"
         );
-
-        // Ensure lockfile was successfully spliced
-        cargo_lock::Lockfile::load(workspace_root.as_ref().join("Cargo.lock")).unwrap();
     }
 
     #[test]
-    fn extra_workspace_member_with_workspace() {
-        let (splicing_manifest, cache_dir) = mock_splicing_manifest_with_workspace();
+    fn unregistered_cargo_config_replaced() {
+        let (mut splicing_manifest, cache_dir) = mock_splicing_manifest_with_workspace_in_root();
 
-        // Add the extra workspace member
-        let extra_manifests_manifest = mock_extra_manifest_digest(cache_dir.as_ref());
+        // Generate a cargo config that is not tracked by the splicing manifest
+        fs::create_dir_all(cache_dir.as_ref().join(".cargo")).unwrap();
+        fs::write(
+            cache_dir.as_ref().join(".cargo").join("config.toml"),
+            "# Untracked Cargo configuration file",
+        )
+        .unwrap();
+
+        // Write a cargo config
+        let temp_dir = tempfile::tempdir().unwrap();
+        let external_config = temp_dir.as_ref().join("config.toml");
+        fs::write(&external_config, "# Cargo configuration file").unwrap();
+        splicing_manifest.cargo_config = Some(external_config);
 
         // Splice the workspace
         let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            extra_manifests_manifest,
-        )
-        .unwrap()
-        .splice_workspace()
-        .unwrap();
+        Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+            .unwrap()
+            .splice_workspace(&cargo())
+            .unwrap();
 
-        // Ensure metadata is valid
-        let metadata = generate_metadata(workspace_manifest.as_path_buf());
-        assert_sort_eq!(
-            metadata.workspace_members,
-            vec![
-                new_package_id("sub_pkg_a", workspace_root.as_ref(), false),
-                new_package_id("sub_pkg_b", workspace_root.as_ref(), false),
-                new_package_id("extra_pkg", workspace_root.as_ref(), false),
-                new_package_id("root_pkg", workspace_root.as_ref(), true),
-            ]
-        );
-
-        // Ensure the workspace metadata annotations are populated
+        let cargo_config = workspace_root.as_ref().join(".cargo").join("config.toml");
+        assert!(cargo_config.exists());
         assert_eq!(
-            metadata.workspace_metadata,
-            mock_workspace_metadata(true, Some("pkg_root"))
+            fs::read_to_string(cargo_config).unwrap().trim(),
+            "# Cargo configuration file"
         );
-
-        // Ensure lockfile was successfully spliced
-        cargo_lock::Lockfile::load(workspace_root.as_ref().join("Cargo.lock")).unwrap();
     }
 
     #[test]
-    fn extra_workspace_member_with_multi_package() {
-        let (splicing_manifest, cache_dir) = mock_splicing_manifest_with_multi_package();
+    fn error_on_cargo_config_in_parent() {
+        let (mut splicing_manifest, _cache_dir) = mock_splicing_manifest_with_workspace_in_root();
 
-        // Add the extra workspace member
-        let extra_manifests_manifest = mock_extra_manifest_digest(cache_dir.as_ref());
+        // Write a cargo config
+        let temp_dir = tempfile::tempdir().unwrap();
+        let dot_cargo_dir = temp_dir.as_ref().join(".cargo");
+        fs::create_dir_all(&dot_cargo_dir).unwrap();
+        let external_config = dot_cargo_dir.join("config.toml");
+        fs::write(&external_config, "# Cargo configuration file").unwrap();
+        splicing_manifest.cargo_config = Some(external_config.clone());
 
         // Splice the workspace
-        let workspace_root = tempfile::tempdir().unwrap();
-        let workspace_manifest = Splicer::new(
-            workspace_root.as_ref().to_path_buf(),
-            splicing_manifest,
-            extra_manifests_manifest,
-        )
-        .unwrap()
-        .splice_workspace()
-        .unwrap();
+        let workspace_root = temp_dir.as_ref().join("workspace_root");
+        let splicing_result = Splicer::new(workspace_root.clone(), splicing_manifest)
+            .unwrap()
+            .splice_workspace(&cargo());
 
-        // Ensure metadata is valid
-        let metadata = generate_metadata(workspace_manifest.as_path_buf());
-        assert_sort_eq!(
-            metadata.workspace_members,
-            vec![
-                new_package_id("pkg_a", workspace_root.as_ref(), false),
-                new_package_id("pkg_b", workspace_root.as_ref(), false),
-                new_package_id("pkg_c", workspace_root.as_ref(), false),
-                new_package_id("extra_pkg", workspace_root.as_ref(), false),
-                // Multi package renderings always add a root package
-                new_package_id("direct-cargo-bazel-deps", workspace_root.as_ref(), true),
+        // Ensure cargo config files in parent directories lead to errors
+        assert!(splicing_result.is_err());
+        let err_str = splicing_result.err().unwrap().to_string();
+        assert!(err_str.starts_with("A Cargo config file was found in a parent directory"));
+        assert!(err_str.contains(&format!("Workspace = {}", workspace_root.display())));
+        assert!(err_str.contains(&format!("Cargo config = {}", external_config.display())));
+    }
+
+    #[test]
+    fn find_missing_manifests_correct_without_root() {
+        let temp_dir = tempfile::tempdir().unwrap();
+        let root_manifest_dir = temp_dir.path();
+        touch(&root_manifest_dir.join("WORKSPACE.bazel"));
+        touch(&root_manifest_dir.join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("Cargo.toml"));
+        touch(&root_manifest_dir.join("foo").join("Cargo.toml"));
+        touch(&root_manifest_dir.join("bar").join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("bar").join("Cargo.toml"));
+
+        let known_manifest_paths = btreeset![
+            root_manifest_dir
+                .join("foo")
+                .join("Cargo.toml")
+                .normalize()
+                .unwrap(),
+            root_manifest_dir
+                .join("bar")
+                .join("Cargo.toml")
+                .normalize()
+                .unwrap(),
+        ];
+
+        let root_manifest: cargo_toml::Manifest = toml::toml! {
+            [workspace]
+            members = [
+                "foo",
+                "bar",
             ]
-        );
+            [package]
+            name = "root_pkg"
+            version = "0.0.1"
 
-        // Ensure the workspace metadata annotations are populated
+            [lib]
+            path = "lib.rs"
+        }
+        .try_into()
+        .unwrap();
+        let missing_manifests = SplicerKind::find_missing_manifests(
+            &root_manifest,
+            root_manifest_dir,
+            &known_manifest_paths,
+        )
+        .unwrap();
+        assert_eq!(missing_manifests, btreeset![]);
+    }
+
+    #[test]
+    fn find_missing_manifests_correct_with_root() {
+        let temp_dir = tempfile::tempdir().unwrap();
+        let root_manifest_dir = temp_dir.path();
+        touch(&root_manifest_dir.join("WORKSPACE.bazel"));
+        touch(&root_manifest_dir.join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("Cargo.toml"));
+        touch(&root_manifest_dir.join("foo").join("Cargo.toml"));
+        touch(&root_manifest_dir.join("bar").join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("bar").join("Cargo.toml"));
+
+        let known_manifest_paths = btreeset![
+            root_manifest_dir.join("Cargo.toml").normalize().unwrap(),
+            root_manifest_dir
+                .join("foo")
+                .join("Cargo.toml")
+                .normalize()
+                .unwrap(),
+            root_manifest_dir
+                .join("bar")
+                .join("Cargo.toml")
+                .normalize()
+                .unwrap(),
+        ];
+
+        let root_manifest: cargo_toml::Manifest = toml::toml! {
+            [workspace]
+            members = [
+                ".",
+                "foo",
+                "bar",
+            ]
+            [package]
+            name = "root_pkg"
+            version = "0.0.1"
+
+            [lib]
+            path = "lib.rs"
+        }
+        .try_into()
+        .unwrap();
+        let missing_manifests = SplicerKind::find_missing_manifests(
+            &root_manifest,
+            root_manifest_dir,
+            &known_manifest_paths,
+        )
+        .unwrap();
+        assert_eq!(missing_manifests, btreeset![]);
+    }
+
+    #[test]
+    fn find_missing_manifests_missing_root() {
+        let temp_dir = tempfile::tempdir().unwrap();
+        let root_manifest_dir = temp_dir.path();
+        touch(&root_manifest_dir.join("WORKSPACE.bazel"));
+        touch(&root_manifest_dir.join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("Cargo.toml"));
+        touch(&root_manifest_dir.join("foo").join("Cargo.toml"));
+        touch(&root_manifest_dir.join("bar").join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("bar").join("Cargo.toml"));
+
+        let known_manifest_paths = btreeset![
+            root_manifest_dir
+                .join("foo")
+                .join("Cargo.toml")
+                .normalize()
+                .unwrap(),
+            root_manifest_dir
+                .join("bar")
+                .join("Cargo.toml")
+                .normalize()
+                .unwrap(),
+        ];
+
+        let root_manifest: cargo_toml::Manifest = toml::toml! {
+            [workspace]
+            members = [
+                ".",
+                "foo",
+                "bar",
+            ]
+            [package]
+            name = "root_pkg"
+            version = "0.0.1"
+
+            [lib]
+            path = "lib.rs"
+        }
+        .try_into()
+        .unwrap();
+        let missing_manifests = SplicerKind::find_missing_manifests(
+            &root_manifest,
+            root_manifest_dir,
+            &known_manifest_paths,
+        )
+        .unwrap();
+        assert_eq!(missing_manifests, btreeset![String::from("//:Cargo.toml")]);
+    }
+
+    #[test]
+    fn find_missing_manifests_missing_nonroot() {
+        let temp_dir = tempfile::tempdir().unwrap();
+        let root_manifest_dir = temp_dir.path();
+        touch(&root_manifest_dir.join("WORKSPACE.bazel"));
+        touch(&root_manifest_dir.join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("Cargo.toml"));
+        touch(&root_manifest_dir.join("foo").join("Cargo.toml"));
+        touch(&root_manifest_dir.join("bar").join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("bar").join("Cargo.toml"));
+        touch(&root_manifest_dir.join("baz").join("BUILD.bazel"));
+        touch(&root_manifest_dir.join("baz").join("Cargo.toml"));
+
+        let known_manifest_paths = btreeset![
+            root_manifest_dir
+                .join("foo")
+                .join("Cargo.toml")
+                .normalize()
+                .unwrap(),
+            root_manifest_dir
+                .join("bar")
+                .join("Cargo.toml")
+                .normalize()
+                .unwrap(),
+        ];
+
+        let root_manifest: cargo_toml::Manifest = toml::toml! {
+            [workspace]
+            members = [
+                "foo",
+                "bar",
+                "baz",
+            ]
+            [package]
+            name = "root_pkg"
+            version = "0.0.1"
+
+            [lib]
+            path = "lib.rs"
+        }
+        .try_into()
+        .unwrap();
+        let missing_manifests = SplicerKind::find_missing_manifests(
+            &root_manifest,
+            root_manifest_dir,
+            &known_manifest_paths,
+        )
+        .unwrap();
         assert_eq!(
-            metadata.workspace_metadata,
-            mock_workspace_metadata(true, None)
+            missing_manifests,
+            btreeset![String::from("//baz:Cargo.toml")]
         );
+    }
 
-        // Ensure lockfile was successfully spliced
-        cargo_lock::Lockfile::load(workspace_root.as_ref().join("Cargo.lock")).unwrap();
+    fn touch(path: &Path) {
+        std::fs::create_dir_all(path.parent().unwrap()).unwrap();
+        std::fs::write(path, &[]).unwrap();
     }
 }
diff --git a/third_party/rules_rust/crate_universe/src/utils/starlark/label.rs b/third_party/rules_rust/crate_universe/src/utils/starlark/label.rs
index 1716944..a21c81e 100644
--- a/third_party/rules_rust/crate_universe/src/utils/starlark/label.rs
+++ b/third_party/rules_rust/crate_universe/src/utils/starlark/label.rs
@@ -7,6 +7,8 @@
 use serde::de::Visitor;
 use serde::{Deserialize, Serialize, Serializer};
 
+// Note that this type assumes there's no such thing as a relative label;
+// `:foo` is assumed to be relative to the repo root, and parses out to equivalent to `//:foo`.
 #[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Clone)]
 pub struct Label {
     pub repository: Option<String>,
@@ -52,19 +54,21 @@
 
 impl Display for Label {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        let mut label = String::new();
-
         // Add the repository
         if let Some(repo) = &self.repository {
-            label = format!("@{}", repo);
+            write!(f, "@{}", repo)?;
         }
 
+        write!(f, "//")?;
+
         // Add the package
         if let Some(pkg) = &self.package {
-            label = format!("{}//{}", label, pkg);
+            write!(f, "{}", pkg)?;
         }
 
-        write!(f, "{}:{}", &label, &self.target,)
+        write!(f, ":{}", self.target)?;
+
+        Ok(())
     }
 }
 
@@ -190,6 +194,7 @@
     #[test]
     fn full_label() {
         let label = Label::from_str("@repo//package/sub_package:target").unwrap();
+        assert_eq!(label.to_string(), "@repo//package/sub_package:target");
         assert_eq!(label.repository.unwrap(), "repo");
         assert_eq!(label.package.unwrap(), "package/sub_package");
         assert_eq!(label.target, "target");
@@ -198,6 +203,7 @@
     #[test]
     fn no_repository() {
         let label = Label::from_str("//package:target").unwrap();
+        assert_eq!(label.to_string(), "//package:target");
         assert_eq!(label.repository, None);
         assert_eq!(label.package.unwrap(), "package");
         assert_eq!(label.target, "target");
@@ -206,6 +212,7 @@
     #[test]
     fn no_slashes() {
         let label = Label::from_str("package:target").unwrap();
+        assert_eq!(label.to_string(), "//package:target");
         assert_eq!(label.repository, None);
         assert_eq!(label.package.unwrap(), "package");
         assert_eq!(label.target, "target");
@@ -214,6 +221,7 @@
     #[test]
     fn root_label() {
         let label = Label::from_str("@repo//:target").unwrap();
+        assert_eq!(label.to_string(), "@repo//:target");
         assert_eq!(label.repository.unwrap(), "repo");
         assert_eq!(label.package, None);
         assert_eq!(label.target, "target");
@@ -222,6 +230,7 @@
     #[test]
     fn root_label_no_repository() {
         let label = Label::from_str("//:target").unwrap();
+        assert_eq!(label.to_string(), "//:target");
         assert_eq!(label.repository, None);
         assert_eq!(label.package, None);
         assert_eq!(label.target, "target");
@@ -230,6 +239,7 @@
     #[test]
     fn root_label_no_slashes() {
         let label = Label::from_str(":target").unwrap();
+        assert_eq!(label.to_string(), "//:target");
         assert_eq!(label.repository, None);
         assert_eq!(label.package, None);
         assert_eq!(label.target, "target");
@@ -238,6 +248,10 @@
     #[test]
     fn full_label_with_slash_after_colon() {
         let label = Label::from_str("@repo//package/sub_package:subdir/target").unwrap();
+        assert_eq!(
+            label.to_string(),
+            "@repo//package/sub_package:subdir/target"
+        );
         assert_eq!(label.repository.unwrap(), "repo");
         assert_eq!(label.package.unwrap(), "package/sub_package");
         assert_eq!(label.target, "subdir/target");
diff --git a/third_party/rules_rust/crate_universe/test_data/private/BUILD.bazel b/third_party/rules_rust/crate_universe/test_data/private/BUILD.bazel
index e0a9bbe..8e0993f 100644
--- a/third_party/rules_rust/crate_universe/test_data/private/BUILD.bazel
+++ b/third_party/rules_rust/crate_universe/test_data/private/BUILD.bazel
@@ -4,11 +4,11 @@
     name = "metadata_generator",
     srcs = ["metadata_generator.py"],
     data = [
-        "@rules_rust//rust/toolchain:current_exec_cargo_files",
-        "@rules_rust//rust/toolchain:current_exec_rustc_files",
+        "@rules_rust//rust/toolchain:current_cargo_files",
+        "@rules_rust//rust/toolchain:current_rustc_files",
     ],
     env = {
-        "CARGO": "$(rootpath @rules_rust//rust/toolchain:current_exec_cargo_files)",
-        "RUSTC": "$(rootpath @rules_rust//rust/toolchain:current_exec_rustc_files)",
+        "CARGO": "$(rootpath @rules_rust//rust/toolchain:current_cargo_files)",
+        "RUSTC": "$(rootpath @rules_rust//rust/toolchain:current_rustc_files)",
     },
 )
diff --git a/third_party/rules_rust/crate_universe/test_data/serialized_configs/BUILD.bazel b/third_party/rules_rust/crate_universe/test_data/serialized_configs/BUILD.bazel
new file mode 100644
index 0000000..33241df
--- /dev/null
+++ b/third_party/rules_rust/crate_universe/test_data/serialized_configs/BUILD.bazel
@@ -0,0 +1,69 @@
+load("@bazel_skylib//rules:write_file.bzl", "write_file")
+load("//crate_universe:defs.bzl", "crate", "render_config", "splicing_config")
+
+# buildifier: disable=bzl-visibility
+load("//crate_universe/private:generate_utils.bzl", "compile_config")
+
+# buildifier: disable=bzl-visibility
+load("//crate_universe/private:splicing_utils.bzl", "compile_splicing_manifest")
+
+write_file(
+    name = "config",
+    out = "config.json",
+    content = [json.encode(
+        compile_config(
+            cargo_config = None,
+            crate_annotations = {
+                "rand": [crate.annotation(
+                    crate_features = ["small_rng"],
+                    version = "0.8.5",
+                )],
+            },
+            generate_build_scripts = False,
+            render_config = json.decode(render_config(
+                platforms_template = "//custom/platform:{triple}",
+                regen_command = "cargo_bazel_regen_command",
+            )),
+            repository_name = "mock_config",
+            supported_platform_triples = [
+                "x86_64-unknown-linux-gnu",
+                "x86_64-pc-windows-msvc",
+                "x86_64-apple-darwin",
+            ],
+        ),
+    ).strip()],
+    newline = "unix",
+)
+
+write_file(
+    name = "splicing_manifest",
+    out = "splicing_manifest.json",
+    content = [json.encode(compile_splicing_manifest(
+        cargo_config_path = "/tmp/abs/path/workspace/.cargo/config.toml",
+        manifests = {
+            "${build_workspace_directory}/submod/Cargo.toml": "//submod:Cargo.toml",
+            "${output_base}/external_crate/Cargo.toml": "@external_crate//:Cargo.toml",
+            "/tmp/abs/path/workspace/Cargo.toml": "//:Cargo.toml",
+        },
+        packages = {
+            "rand": crate.spec(
+                default_features = False,
+                features = ["small_rng"],
+                version = "0.8.5",
+            ),
+        },
+        splicing_config = dict(json.decode(splicing_config(
+            resolver_version = "2",
+        ))),
+    )).strip()],
+    newline = "unix",
+)
+
+filegroup(
+    name = "serialized_configs",
+    srcs = [
+        "config.json",
+        "splicing_manifest.json",
+    ],
+    visibility = ["//crate_universe:__pkg__"],
+)
diff --git a/third_party/rules_rust/crate_universe/tools/BUILD.bazel b/third_party/rules_rust/crate_universe/tools/BUILD.bazel
index d465c4d..1677d9e 100644
--- a/third_party/rules_rust/crate_universe/tools/BUILD.bazel
+++ b/third_party/rules_rust/crate_universe/tools/BUILD.bazel
@@ -1,8 +1,7 @@
 filegroup(
-    name = "distro",
+    name = "bzl_srcs",
     srcs = [
-        "//crate_universe/tools/cross_installer:distro",
-        "//crate_universe/tools/urls_generator:distro",
+        "//crate_universe/tools/cross_installer:bzl_srcs",
     ],
     visibility = ["//crate_universe:__subpackages__"],
 )
diff --git a/third_party/rules_rust/crate_universe/tools/cross_installer/BUILD.bazel b/third_party/rules_rust/crate_universe/tools/cross_installer/BUILD.bazel
index 46aa087..d436f8a 100644
--- a/third_party/rules_rust/crate_universe/tools/cross_installer/BUILD.bazel
+++ b/third_party/rules_rust/crate_universe/tools/cross_installer/BUILD.bazel
@@ -1,4 +1,4 @@
-load("@crate_index//:defs.bzl", "aliases", "all_crate_deps")
+load("@cui//:defs.bzl", "aliases", "all_crate_deps")
 load("@rules_rust//rust:defs.bzl", "rust_binary")
 load(":cross_installer_deps.bzl", "cross_binary")
 
@@ -14,11 +14,12 @@
     data = [
         "Cross.toml",
         ":cross",
-        "@rules_rust//rust/toolchain:current_exec_cargo_files",
+        "@rules_rust//rust/toolchain:current_cargo_files",
     ],
+    edition = "2018",
     proc_macro_deps = all_crate_deps(proc_macro = True),
     rustc_env = {
-        "CARGO": "$(rootpath @rules_rust//rust/toolchain:current_exec_cargo_files)",
+        "CARGO": "$(rootpath @rules_rust//rust/toolchain:current_cargo_files)",
         "CROSS_BIN": "$(rootpath :cross)",
         "CROSS_CONFIG": "$(rootpath :Cross.toml)",
     },
@@ -28,10 +29,7 @@
 cross_binary(name = "cross")
 
 filegroup(
-    name = "distro",
-    srcs = [
-        "BUILD.bazel",
-        "Cargo.toml",
-    ],
+    name = "bzl_srcs",
+    srcs = glob(["**/*.bzl"]),
     visibility = ["//crate_universe/tools:__pkg__"],
 )
diff --git a/third_party/rules_rust/crate_universe/tools/cross_installer/src/main.rs b/third_party/rules_rust/crate_universe/tools/cross_installer/src/main.rs
index 552ea0b..23d0b17 100644
--- a/third_party/rules_rust/crate_universe/tools/cross_installer/src/main.rs
+++ b/third_party/rules_rust/crate_universe/tools/cross_installer/src/main.rs
@@ -86,7 +86,8 @@
     let workspace_root = PathBuf::from(
         env::var("BUILD_WORKSPACE_DIRECTORY")
             .expect("cross_installer is designed to run under Bazel"),
-    );
+    )
+    .join("crate_universe");
 
     // Do some setup
     prepare_workspace(&workspace_root);
diff --git a/third_party/rules_rust/crate_universe/tools/urls_generator/BUILD.bazel b/third_party/rules_rust/crate_universe/tools/urls_generator/BUILD.bazel
index a461e9b..2d536d9 100644
--- a/third_party/rules_rust/crate_universe/tools/urls_generator/BUILD.bazel
+++ b/third_party/rules_rust/crate_universe/tools/urls_generator/BUILD.bazel
@@ -1,4 +1,4 @@
-load("@crate_index//:defs.bzl", "aliases", "all_crate_deps")
+load("@cui//:defs.bzl", "aliases", "all_crate_deps")
 load("@rules_rust//rust:defs.bzl", "rust_binary")
 
 exports_files(
@@ -6,15 +6,6 @@
     visibility = ["//visibility:public"],
 )
 
-filegroup(
-    name = "distro",
-    srcs = [
-        "BUILD.bazel",
-        "Cargo.toml",
-    ],
-    visibility = ["//crate_universe/tools:__pkg__"],
-)
-
 rust_binary(
     name = "urls_generator",
     srcs = glob(["src/**/*.rs"]),
@@ -22,6 +13,7 @@
     compile_data = [
         "//crate_universe/private:urls.bzl",
     ],
+    edition = "2018",
     proc_macro_deps = all_crate_deps(proc_macro = True),
     rustc_env = {
         "MODULE_ROOT_PATH": "$(rootpath //crate_universe/private:urls.bzl)",
diff --git a/third_party/rules_rust/crate_universe/tools/urls_generator/src/main.rs b/third_party/rules_rust/crate_universe/tools/urls_generator/src/main.rs
index c595745..e06671a 100644
--- a/third_party/rules_rust/crate_universe/tools/urls_generator/src/main.rs
+++ b/third_party/rules_rust/crate_universe/tools/urls_generator/src/main.rs
@@ -73,8 +73,12 @@
                 .map(|f_entry| {
                     let f_path = f_entry.path();
                     let stem = f_path.file_stem().unwrap().to_string_lossy();
+                    let extension = f_path
+                        .extension()
+                        .map(|ext| format!(".{}", ext.to_string_lossy()))
+                        .unwrap_or_default();
                     Artifact {
-                        url: format!("{}/{}-{}", url_prefix, stem, triple),
+                        url: format!("{}/{}-{}{}", url_prefix, stem, triple, extension),
                         triple: triple.to_string(),
                         sha256: calculate_sha256(&f_entry.path()),
                     }
diff --git a/third_party/rules_rust/crate_universe/version.bzl b/third_party/rules_rust/crate_universe/version.bzl
index 3b46e3a..471a662 100644
--- a/third_party/rules_rust/crate_universe/version.bzl
+++ b/third_party/rules_rust/crate_universe/version.bzl
@@ -1,3 +1,3 @@
 """ Version info for the `cargo-bazel` repository """
 
-VERSION = "0.0.28"
+VERSION = "0.4.0"
diff --git a/third_party/rules_rust/docs/BUILD.bazel b/third_party/rules_rust/docs/BUILD.bazel
index 6c7e39c..ebca2dc 100644
--- a/third_party/rules_rust/docs/BUILD.bazel
+++ b/third_party/rules_rust/docs/BUILD.bazel
@@ -8,11 +8,12 @@
     name = "docs_deps",
     srcs = [
         "@bazel_tools//tools:bzl_srcs",
-        "@build_bazel_rules_nodejs//:bzl",
         "@com_google_protobuf//:bzl_srcs",
+        "@rules_nodejs//nodejs:bzl",
     ],
     deps = [
         "@bazel_skylib//lib:paths",
+        "@bazel_skylib//lib:selects",
         "@bazel_skylib//rules:common_settings",
         "@rules_proto//proto:defs",
         "@rules_proto//proto:repositories",
@@ -53,6 +54,7 @@
             "rust_test",
             "rust_test_suite",
             "error_format",
+            "extra_rustc_flag",
             "extra_rustc_flags",
             "capture_clippy_output",
         ],
@@ -69,15 +71,17 @@
         name = "rust_analyzer",
         header_template = ":rust_analyzer.vm",
         symbols = [
-            "rust_analyzer",
             "rust_analyzer_aspect",
+            "rust_analyzer_toolchain",
         ],
     ),
     page(
         name = "rust_bindgen",
+        header_template = ":rust_bindgen.vm",
         symbols = [
             "rust_bindgen_library",
-            "rust_bindgen_repositories",
+            "rust_bindgen_dependencies",
+            "rust_bindgen_register_toolchains",
             "rust_bindgen_toolchain",
             "rust_bindgen",
         ],
@@ -126,6 +130,7 @@
             "rust_stdlib_filegroup",
             "rust_toolchain_repository_proxy",
             "rust_toolchain_repository",
+            "rust_toolchain_tools_repository",
             "rust_toolchain",
         ],
     ),
@@ -133,7 +138,8 @@
         name = "rust_wasm_bindgen",
         header_template = ":rust_wasm_bindgen.vm",
         symbols = [
-            "rust_wasm_bindgen_repositories",
+            "rust_wasm_bindgen_dependencies",
+            "rust_wasm_bindgen_register_toolchains",
             "rust_wasm_bindgen_toolchain",
             "rust_wasm_bindgen",
         ],
@@ -183,7 +189,7 @@
 stardoc(
     name = "crate_universe",
     out = "crate_universe.md",
-    input = "@rules_rust//crate_universe:defs.bzl",
+    input = "@rules_rust//crate_universe:docs.bzl",
     deps = [":all_docs"],
 )
 
diff --git a/third_party/rules_rust/docs/WORKSPACE.bazel b/third_party/rules_rust/docs/WORKSPACE.bazel
index 1c5a736..8d6181b 100644
--- a/third_party/rules_rust/docs/WORKSPACE.bazel
+++ b/third_party/rules_rust/docs/WORKSPACE.bazel
@@ -11,9 +11,9 @@
 
 rust_register_toolchains(include_rustc_srcs = True)
 
-load("@rules_rust//crate_universe:crates.bzl", "crate_deps_repository")
+load("@rules_rust//crate_universe:repositories.bzl", "crate_universe_dependencies")
 
-crate_deps_repository()
+crate_universe_dependencies()
 
 load("@rules_rust//proto:repositories.bzl", "rust_proto_repositories")
 
@@ -23,22 +23,24 @@
 
 rust_proto_transitive_repositories()
 
-load("@rules_rust//wasm_bindgen:repositories.bzl", "rust_wasm_bindgen_repositories")
+load(
+    "@rules_rust//wasm_bindgen:repositories.bzl",
+    "rust_wasm_bindgen_dependencies",
+    "rust_wasm_bindgen_register_toolchains",
+)
 
-rust_wasm_bindgen_repositories()
+rust_wasm_bindgen_dependencies()
 
-load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories")
-
-node_repositories()
+rust_wasm_bindgen_register_toolchains()
 
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 
 http_archive(
     name = "io_bazel_stardoc",
-    sha256 = "c9794dcc8026a30ff67cf7cf91ebe245ca294b20b071845d12c192afe243ad72",
+    sha256 = "aa814dae0ac400bbab2e8881f9915c6f47c49664bf087c409a15f90438d2c23e",
     urls = [
-        "https://mirror.bazel.build/github.com/bazelbuild/stardoc/releases/download/0.5.0/stardoc-0.5.0.tar.gz",
-        "https://github.com/bazelbuild/stardoc/releases/download/0.5.0/stardoc-0.5.0.tar.gz",
+        "https://mirror.bazel.build/github.com/bazelbuild/stardoc/releases/download/0.5.1/stardoc-0.5.1.tar.gz",
+        "https://github.com/bazelbuild/stardoc/releases/download/0.5.1/stardoc-0.5.1.tar.gz",
     ],
 )
 
diff --git a/third_party/rules_rust/docs/cargo.md b/third_party/rules_rust/docs/cargo.md
index 146e9e1..21aad2a 100644
--- a/third_party/rules_rust/docs/cargo.md
+++ b/third_party/rules_rust/docs/cargo.md
@@ -5,7 +5,7 @@
 * [cargo_build_script](#cargo_build_script)
 * [cargo_env](#cargo_env)
 
-<a id="#cargo_bootstrap_repository"></a>
+<a id="cargo_bootstrap_repository"></a>
 
 ## cargo_bootstrap_repository
 
@@ -32,15 +32,15 @@
 | <a id="cargo_bootstrap_repository-env_label"></a>env_label |  A mapping of platform triple to a set of environment variables. This attribute differs from <code>env</code> in that all variables passed here must be fully qualified labels of files. See [cargo_env](#cargo_env) for usage details. Additionally, the platform triple <code>*</code> applies to all platforms.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
 | <a id="cargo_bootstrap_repository-iso_date"></a>iso_date |  The iso_date of cargo binary the resolver should use. Note: This can only be set if <code>version</code> is <code>beta</code> or <code>nightly</code>   | String | optional | "" |
 | <a id="cargo_bootstrap_repository-repo_mapping"></a>repo_mapping |  A dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.&lt;p&gt;For example, an entry <code>"@foo": "@bar"</code> declares that, for any time this repository depends on <code>@foo</code> (such as a dependency on <code>@foo//some:target</code>, it should actually resolve that dependency within globally-declared <code>@bar</code> (<code>@bar//some:target</code>).   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | required |  |
-| <a id="cargo_bootstrap_repository-rust_toolchain_cargo_template"></a>rust_toolchain_cargo_template |  The template to use for finding the host <code>cargo</code> binary. <code>{version}</code> (eg. '1.53.0'), <code>{triple}</code> (eg. 'x86_64-unknown-linux-gnu'), <code>{arch}</code> (eg. 'aarch64'), <code>{vendor}</code> (eg. 'unknown'), <code>{system}</code> (eg. 'darwin'), and <code>{tool}</code> (eg. 'rustc.exe') will be replaced in the string if present.   | String | optional | "@rust_{system}_{arch}//:bin/{tool}" |
+| <a id="cargo_bootstrap_repository-rust_toolchain_cargo_template"></a>rust_toolchain_cargo_template |  The template to use for finding the host <code>cargo</code> binary. <code>{version}</code> (eg. '1.53.0'), <code>{triple}</code> (eg. 'x86_64-unknown-linux-gnu'), <code>{arch}</code> (eg. 'aarch64'), <code>{vendor}</code> (eg. 'unknown'), <code>{system}</code> (eg. 'darwin'), and <code>{tool}</code> (eg. 'rustc.exe') will be replaced in the string if present.   | String | optional | "@rust_{system}_{arch}__{triple}_tools//:bin/{tool}" |
 | <a id="cargo_bootstrap_repository-rust_toolchain_repository_template"></a>rust_toolchain_repository_template |  **Deprecated**: Please use <code>rust_toolchain_cargo_template</code> and <code>rust_toolchain_rustc_template</code>   | String | optional | "" |
-| <a id="cargo_bootstrap_repository-rust_toolchain_rustc_template"></a>rust_toolchain_rustc_template |  The template to use for finding the host <code>rustc</code> binary. <code>{version}</code> (eg. '1.53.0'), <code>{triple}</code> (eg. 'x86_64-unknown-linux-gnu'), <code>{arch}</code> (eg. 'aarch64'), <code>{vendor}</code> (eg. 'unknown'), <code>{system}</code> (eg. 'darwin'), and <code>{tool}</code> (eg. 'rustc.exe') will be replaced in the string if present.   | String | optional | "@rust_{system}_{arch}//:bin/{tool}" |
+| <a id="cargo_bootstrap_repository-rust_toolchain_rustc_template"></a>rust_toolchain_rustc_template |  The template to use for finding the host <code>rustc</code> binary. <code>{version}</code> (eg. '1.53.0'), <code>{triple}</code> (eg. 'x86_64-unknown-linux-gnu'), <code>{arch}</code> (eg. 'aarch64'), <code>{vendor}</code> (eg. 'unknown'), <code>{system}</code> (eg. 'darwin'), and <code>{tool}</code> (eg. 'rustc.exe') will be replaced in the string if present.   | String | optional | "@rust_{system}_{arch}__{triple}_tools//:bin/{tool}" |
 | <a id="cargo_bootstrap_repository-srcs"></a>srcs |  Souce files of the crate to build. Passing source files here can be used to trigger rebuilds when changes are made   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="cargo_bootstrap_repository-timeout"></a>timeout |  Maximum duration of the Cargo build command in seconds   | Integer | optional | 600 |
-| <a id="cargo_bootstrap_repository-version"></a>version |  The version of cargo the resolver should use   | String | optional | "1.59.0" |
+| <a id="cargo_bootstrap_repository-version"></a>version |  The version of cargo the resolver should use   | String | optional | "1.62.1" |
 
 
-<a id="#cargo_build_script"></a>
+<a id="cargo_build_script"></a>
 
 ## cargo_build_script
 
@@ -127,7 +127,7 @@
 | <a id="cargo_build_script-kwargs"></a>kwargs |  Forwards to the underlying <code>rust_binary</code> rule.   |  none |
 
 
-<a id="#cargo_env"></a>
+<a id="cargo_env"></a>
 
 ## cargo_env
 
diff --git a/third_party/rules_rust/docs/crate_universe.md b/third_party/rules_rust/docs/crate_universe.md
index 4dfcd5d..3964457 100644
--- a/third_party/rules_rust/docs/crate_universe.md
+++ b/third_party/rules_rust/docs/crate_universe.md
@@ -4,33 +4,47 @@
 
 Crate Universe is a set of Bazel rule for generating Rust targets using Cargo.
 
-## Experimental
+## Setup
 
-`crate_universe` is experimental, and may have breaking API changes at any time. These instructions may also change without notice.
+After loading `rules_rust` in your workspace, set the following to begin using `crate_universe`:
+
+```python
+load("@rules_rust//crate_universe:repositories.bzl", "crate_universe_dependencies")
+
+crate_universe_dependencies()
+```
+
+Note that if the current version of `rules_rust` is not a release artifact, you may need to set additional
+flags such as [`bootstrap = True`](#crate_universe_dependencies-bootstrap) on the `crate_universe_dependencies`
+call above or [crates_repository::generator_urls](#crates_repository-generator_urls) in uses of `crates_repository`.
 
 ## Rules
 
 - [crates_repository](#crates_repository)
 - [crates_vendor](#crates_vendor)
+
+## Utility Macros
+
+- [crate_universe_dependencies](#crate_universe_dependencies)
+- [crate.annotation](#crateannotation)
 - [crate.spec](#cratespec)
 - [crate.workspace_member](#crateworkspace_member)
-- [crate.annotation](#crateannotation)
 - [render_config](#render_config)
 - [splicing_config](#splicing_config)
 
-## `crates_repository` Workflows
+## Workflows
 
-The [`crates_repository`](#crates_repository) rule (the primary repository rule of `cargo-bazel`) supports a number of different ways users
-can express and organize their dependencies. The most common are listed below though there are more to be found in
+The [`crates_repository`](#crates_repository) rule (the primary repository rule of `rules_rust`'s cargo support) supports a number of different
+ways users can express and organize their dependencies. The most common are listed below though there are more to be found in
 the [./examples/crate_universe](https://github.com/bazelbuild/rules_rust/tree/main/examples/crate_universe) directory.
 
 ### Cargo Workspaces
 
 One of the simpler ways to wire up dependencies would be to first structure your project into a [Cargo workspace][cw].
-The `crates_repository` rule can ingest a the root `Cargo.toml` file and generate dependencies from there.
+The `crates_repository` rule can ingest a root `Cargo.toml` file and generate dependencies from there.
 
 ```python
-load("@rules_rust//crate_universe:defs.bzl", "crate", "crates_repository")
+load("@rules_rust//crate_universe:defs.bzl", "crates_repository")
 
 crates_repository(
     name = "crate_index",
@@ -44,9 +58,9 @@
 ```
 
 The generated `crates_repository` contains helper macros which make collecting dependencies for Bazel targets simpler.
-Notably, the `all_crate_deps` and `aliases` macros commonly allow the `Cargo.toml` files to be the single source of
-truth for dependencies. Since these macros come from the generated repository, the dependencies and alias definitions
-they return will automatically update BUILD targets.
+Notably, the `all_crate_deps` and `aliases` macros (see [Dependencies API](#dependencies-api)) commonly allow the
+`Cargo.toml` files to be the single source of truth for dependencies. Since these macros come from the generated
+repository, the dependencies and alias definitions they return will automatically update BUILD targets.
 
 ```python
 load("@crate_index//:defs.bzl", "aliases", "all_crate_deps")
@@ -140,26 +154,40 @@
 )
 ```
 
+## Dependencies API
+
+After rendering dependencies, convenience macros may also be generated to provide
+convenient accessors to larger sections of the dependency graph.
+
+- [aliases](#aliases)
+- [crate_deps](#crate_deps)
+- [all_crate_deps](#all_crate_deps)
+- [crate_repositories](#crate_repositories)
+
+---
+
+---
+
 [cw]: https://doc.rust-lang.org/book/ch14-03-cargo-workspaces.html
 [cc]: https://docs.bazel.build/versions/main/be/c-cpp.html
 [proto]: https://rules-proto-grpc.com/en/latest/lang/rust.html
 [ra]: https://rust-analyzer.github.io/
 
 
-<a id="#crates_repository"></a>
+<a id="crates_repository"></a>
 
 ## crates_repository
 
 <pre>
-crates_repository(<a href="#crates_repository-name">name</a>, <a href="#crates_repository-annotations">annotations</a>, <a href="#crates_repository-cargo_config">cargo_config</a>, <a href="#crates_repository-extra_workspace_member_url_template">extra_workspace_member_url_template</a>,
-                  <a href="#crates_repository-extra_workspace_members">extra_workspace_members</a>, <a href="#crates_repository-generate_build_scripts">generate_build_scripts</a>, <a href="#crates_repository-generator">generator</a>, <a href="#crates_repository-generator_sha256s">generator_sha256s</a>,
-                  <a href="#crates_repository-generator_urls">generator_urls</a>, <a href="#crates_repository-isolated">isolated</a>, <a href="#crates_repository-lockfile">lockfile</a>, <a href="#crates_repository-lockfile_kind">lockfile_kind</a>, <a href="#crates_repository-manifests">manifests</a>, <a href="#crates_repository-packages">packages</a>, <a href="#crates_repository-quiet">quiet</a>,
-                  <a href="#crates_repository-render_config">render_config</a>, <a href="#crates_repository-repo_mapping">repo_mapping</a>, <a href="#crates_repository-rust_toolchain_cargo_template">rust_toolchain_cargo_template</a>,
+crates_repository(<a href="#crates_repository-name">name</a>, <a href="#crates_repository-annotations">annotations</a>, <a href="#crates_repository-cargo_config">cargo_config</a>, <a href="#crates_repository-cargo_lockfile">cargo_lockfile</a>, <a href="#crates_repository-generate_build_scripts">generate_build_scripts</a>,
+                  <a href="#crates_repository-generator">generator</a>, <a href="#crates_repository-generator_sha256s">generator_sha256s</a>, <a href="#crates_repository-generator_urls">generator_urls</a>, <a href="#crates_repository-isolated">isolated</a>, <a href="#crates_repository-lockfile">lockfile</a>, <a href="#crates_repository-manifests">manifests</a>,
+                  <a href="#crates_repository-packages">packages</a>, <a href="#crates_repository-quiet">quiet</a>, <a href="#crates_repository-render_config">render_config</a>, <a href="#crates_repository-repo_mapping">repo_mapping</a>, <a href="#crates_repository-rust_toolchain_cargo_template">rust_toolchain_cargo_template</a>,
                   <a href="#crates_repository-rust_toolchain_rustc_template">rust_toolchain_rustc_template</a>, <a href="#crates_repository-rust_version">rust_version</a>, <a href="#crates_repository-splicing_config">splicing_config</a>,
                   <a href="#crates_repository-supported_platform_triples">supported_platform_triples</a>)
 </pre>
 
-A rule for defining and downloading Rust dependencies (crates).
+A rule for defining and downloading Rust dependencies (crates). This rule
+handles all the same [workflows](#workflows) `crate_universe` rules do.
 
 Environment Variables:
 
@@ -168,7 +196,75 @@
 | `CARGO_BAZEL_GENERATOR_SHA256` | The sha256 checksum of the file located at `CARGO_BAZEL_GENERATOR_URL` |
 | `CARGO_BAZEL_GENERATOR_URL` | The URL of a cargo-bazel binary. This variable takes precedence over attributes and can use `file://` for local paths |
 | `CARGO_BAZEL_ISOLATED` | An authorative flag as to whether or not the `CARGO_HOME` environment variable should be isolated from the host configuration |
-| `CARGO_BAZEL_REPIN` | An indicator that the dependencies represented by the rule should be regenerated. `REPIN` may also be used. |
+| `CARGO_BAZEL_REPIN` | An indicator that the dependencies represented by the rule should be regenerated. `REPIN` may also be used. See [Repinning / Updating Dependencies](#crates_repository_repinning_updating_dependencies) for more details. |
+
+Example:
+
+Given the following workspace structure:
+
+```text
+[workspace]/
+    WORKSPACE
+    BUILD
+    Cargo.toml
+    Cargo.Bazel.lock
+    src/
+        main.rs
+```
+
+The following is something that'd be found in the `WORKSPACE` file:
+
+```python
+load("@rules_rust//crate_universe:defs.bzl", "crates_repository", "crate")
+
+crates_repository(
+    name = "crate_index",
+    annotations = annotations = {
+        "rand": [crate.annotation(
+            default_features = False,
+            features = ["small_rng"],
+        )],
+    },
+    cargo_lockfile = "//:Cargo.Bazel.lock",
+    lockfile = "//:cargo-bazel-lock.json",
+    manifests = ["//:Cargo.toml"],
+    # Should match the version represented by the currently registered `rust_toolchain`.
+    rust_version = "1.60.0",
+)
+```
+
+The above will create an external repository which contains aliases and macros for accessing
+Rust targets found in the dependency graph defined by the given manifests.
+
+**NOTE**: The `lockfile` must be manually created. The rule unfortunately does not yet create
+it on its own. When initially setting up this rule, an empty file should be created and then
+populated by repinning dependencies.
+
+<a id="#crates_repository_repinning_updating_dependencies"></a>
+
+### Repinning / Updating Dependencies
+
+Dependency syncing and updating is done in the repository rule which means it's done during the
+analysis phase of builds. As mentioned in the environments variable table above, the `CARGO_BAZEL_REPIN`
+(or `REPIN`) environment variables can be used to force the rule to update dependencies and potentially
+render a new lockfile. Given an instance of this repository rule named `crate_index`, the easiest way to
+repin dependencies is to run:
+
+```shell
+CARGO_BAZEL_REPIN=1 bazel sync --only=crate_index
+```
+
+This will result in all dependencies being updated for a project. The `CARGO_BAZEL_REPIN` environment variable
+can also be used to customize how dependencies are updated. The following table shows translations from environment
+variable values to the equivilant [cargo update](https://doc.rust-lang.org/cargo/commands/cargo-update.html) command
+that is called behind the scenes to update dependencies.
+
+| Value | Cargo command |
+| --- | --- |
+| Any of [`true`, `1`, `yes`, `on`] | `cargo update` |
+| `workspace` | `cargo update --workspace` |
+| `package_name` | `cargo upgrade --package package_name` |
+| `package_name@1.2.3` | `cargo upgrade --package package_name --precise 1.2.3` |
 
 
 
@@ -178,39 +274,108 @@
 | Name  | Description | Type | Mandatory | Default |
 | :------------- | :------------- | :------------- | :------------- | :------------- |
 | <a id="crates_repository-name"></a>name |  A unique name for this repository.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
-| <a id="crates_repository-annotations"></a>annotations |  Extra settings to apply to crates. See [crate.annotations](#crateannotations).   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> List of strings</a> | optional | {} |
+| <a id="crates_repository-annotations"></a>annotations |  Extra settings to apply to crates. See [crate.annotation](#crateannotation).   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> List of strings</a> | optional | {} |
 | <a id="crates_repository-cargo_config"></a>cargo_config |  A [Cargo configuration](https://doc.rust-lang.org/cargo/reference/config.html) file   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
-| <a id="crates_repository-extra_workspace_member_url_template"></a>extra_workspace_member_url_template |  The registry url to use when fetching extra workspace members   | String | optional | "https://crates.io/api/v1/crates/{name}/{version}/download" |
-| <a id="crates_repository-extra_workspace_members"></a>extra_workspace_members |  Additional crates to download and include as a workspace member. This is unfortunately required in order to add information about "binary-only" crates so that a <code>rust_binary</code> may be generated for it. [rust-lang/cargo#9096](https://github.com/rust-lang/cargo/issues/9096) tracks an RFC which may solve for this.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
+| <a id="crates_repository-cargo_lockfile"></a>cargo_lockfile |  The path used to store the <code>crates_repository</code> specific [Cargo.lock](https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html) file. In the case that your <code>crates_repository</code> corresponds directly with an existing <code>Cargo.toml</code> file which has a paired <code>Cargo.lock</code> file, that <code>Cargo.lock</code> file should be used here, which will keep the versions used by cargo and bazel in sync.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | required |  |
 | <a id="crates_repository-generate_build_scripts"></a>generate_build_scripts |  Whether or not to generate [cargo build scripts](https://doc.rust-lang.org/cargo/reference/build-scripts.html) by default.   | Boolean | optional | True |
 | <a id="crates_repository-generator"></a>generator |  The absolute label of a generator. Eg. <code>@cargo_bazel_bootstrap//:cargo-bazel</code>. This is typically used when bootstrapping   | String | optional | "" |
 | <a id="crates_repository-generator_sha256s"></a>generator_sha256s |  Dictionary of <code>host_triple</code> -&gt; <code>sha256</code> for a <code>cargo-bazel</code> binary.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
 | <a id="crates_repository-generator_urls"></a>generator_urls |  URL template from which to download the <code>cargo-bazel</code> binary. <code>{host_triple}</code> and will be filled in according to the host platform.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
 | <a id="crates_repository-isolated"></a>isolated |  If true, <code>CARGO_HOME</code> will be overwritten to a directory within the generated repository in order to prevent other uses of Cargo from impacting having any effect on the generated targets produced by this rule. For users who either have multiple <code>crate_repository</code> definitions in a WORKSPACE or rapidly re-pin dependencies, setting this to false may improve build times. This variable is also controled by <code>CARGO_BAZEL_ISOLATED</code> environment variable.   | Boolean | optional | True |
-| <a id="crates_repository-lockfile"></a>lockfile |  The path to a file to use for reproducible renderings. Two kinds of lock files are supported, Cargo (<code>Cargo.lock</code> files) and Bazel (custom files generated by this rule, naming is irrelevant). Bazel lockfiles should be the prefered kind as they're desigend with Bazel's notions of reporducibility in mind. Cargo lockfiles can be used in cases where it's intended to be the source of truth, but more work will need to be done to generate BUILD files which are not guaranteed to be determinsitic.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | required |  |
-| <a id="crates_repository-lockfile_kind"></a>lockfile_kind |  Two different kinds of lockfiles are supported, the custom "Bazel" lockfile, which is generated by this rule, and Cargo lockfiles (<code>Cargo.lock</code>). This attribute allows for explicitly defining the type in cases where it may not be auto-detectable.   | String | optional | "auto" |
+| <a id="crates_repository-lockfile"></a>lockfile |  The path to a file to use for reproducible renderings. If set, this file must exist within the workspace (but can be empty) before this rule will work.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="crates_repository-manifests"></a>manifests |  A list of Cargo manifests (<code>Cargo.toml</code> files).   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="crates_repository-packages"></a>packages |  A set of crates (packages) specifications to depend on. See [crate.spec](#crate.spec).   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
 | <a id="crates_repository-quiet"></a>quiet |  If stdout and stderr should not be printed to the terminal.   | Boolean | optional | True |
 | <a id="crates_repository-render_config"></a>render_config |  The configuration flags to use for rendering. Use <code>//crate_universe:defs.bzl\%render_config</code> to generate the value for this field. If unset, the defaults defined there will be used.   | String | optional | "" |
 | <a id="crates_repository-repo_mapping"></a>repo_mapping |  A dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.&lt;p&gt;For example, an entry <code>"@foo": "@bar"</code> declares that, for any time this repository depends on <code>@foo</code> (such as a dependency on <code>@foo//some:target</code>, it should actually resolve that dependency within globally-declared <code>@bar</code> (<code>@bar//some:target</code>).   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | required |  |
-| <a id="crates_repository-rust_toolchain_cargo_template"></a>rust_toolchain_cargo_template |  The template to use for finding the host <code>cargo</code> binary. <code>{version}</code> (eg. '1.53.0'), <code>{triple}</code> (eg. 'x86_64-unknown-linux-gnu'), <code>{arch}</code> (eg. 'aarch64'), <code>{vendor}</code> (eg. 'unknown'), <code>{system}</code> (eg. 'darwin'), <code>{cfg}</code> (eg. 'exec'), and <code>{tool}</code> (eg. 'rustc.exe') will be replaced in the string if present.   | String | optional | "@rust_{system}_{arch}//:bin/{tool}" |
-| <a id="crates_repository-rust_toolchain_rustc_template"></a>rust_toolchain_rustc_template |  The template to use for finding the host <code>rustc</code> binary. <code>{version}</code> (eg. '1.53.0'), <code>{triple}</code> (eg. 'x86_64-unknown-linux-gnu'), <code>{arch}</code> (eg. 'aarch64'), <code>{vendor}</code> (eg. 'unknown'), <code>{system}</code> (eg. 'darwin'), <code>{cfg}</code> (eg. 'exec'), and <code>{tool}</code> (eg. 'cargo.exe') will be replaced in the string if present.   | String | optional | "@rust_{system}_{arch}//:bin/{tool}" |
-| <a id="crates_repository-rust_version"></a>rust_version |  The version of Rust the currently registered toolchain is using. Eg. <code>1.56.0</code>, or <code>nightly-2021-09-08</code>   | String | optional | "1.59.0" |
+| <a id="crates_repository-rust_toolchain_cargo_template"></a>rust_toolchain_cargo_template |  The template to use for finding the host <code>cargo</code> binary. <code>{version}</code> (eg. '1.53.0'), <code>{triple}</code> (eg. 'x86_64-unknown-linux-gnu'), <code>{arch}</code> (eg. 'aarch64'), <code>{vendor}</code> (eg. 'unknown'), <code>{system}</code> (eg. 'darwin'), <code>{cfg}</code> (eg. 'exec'), and <code>{tool}</code> (eg. 'rustc.exe') will be replaced in the string if present.   | String | optional | "@rust_{system}_{arch}__{triple}_tools//:bin/{tool}" |
+| <a id="crates_repository-rust_toolchain_rustc_template"></a>rust_toolchain_rustc_template |  The template to use for finding the host <code>rustc</code> binary. <code>{version}</code> (eg. '1.53.0'), <code>{triple}</code> (eg. 'x86_64-unknown-linux-gnu'), <code>{arch}</code> (eg. 'aarch64'), <code>{vendor}</code> (eg. 'unknown'), <code>{system}</code> (eg. 'darwin'), <code>{cfg}</code> (eg. 'exec'), and <code>{tool}</code> (eg. 'cargo.exe') will be replaced in the string if present.   | String | optional | "@rust_{system}_{arch}__{triple}_tools//:bin/{tool}" |
+| <a id="crates_repository-rust_version"></a>rust_version |  The version of Rust the currently registered toolchain is using. Eg. <code>1.56.0</code>, or <code>nightly-2021-09-08</code>   | String | optional | "1.62.1" |
 | <a id="crates_repository-splicing_config"></a>splicing_config |  The configuration flags to use for splicing Cargo maniests. Use <code>//crate_universe:defs.bzl\%rsplicing_config</code> to generate the value for this field. If unset, the defaults defined there will be used.   | String | optional | "" |
-| <a id="crates_repository-supported_platform_triples"></a>supported_platform_triples |  A set of all platform triples to consider when generating dependencies.   | List of strings | optional | ["i686-apple-darwin", "i686-pc-windows-msvc", "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-pc-windows-msvc", "x86_64-unknown-linux-gnu", "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-linux-android", "i686-unknown-freebsd", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd"] |
+| <a id="crates_repository-supported_platform_triples"></a>supported_platform_triples |  A set of all platform triples to consider when generating dependencies.   | List of strings | optional | ["i686-apple-darwin", "i686-pc-windows-msvc", "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-pc-windows-msvc", "x86_64-unknown-linux-gnu", "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "armv7-linux-androideabi", "i686-linux-android", "i686-unknown-freebsd", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "riscv32imc-unknown-none-elf"] |
 
 
-<a id="#crates_vendor"></a>
+<a id="crates_vendor"></a>
 
 ## crates_vendor
 
 <pre>
-crates_vendor(<a href="#crates_vendor-name">name</a>, <a href="#crates_vendor-annotations">annotations</a>, <a href="#crates_vendor-buildifier">buildifier</a>, <a href="#crates_vendor-cargo_bazel">cargo_bazel</a>, <a href="#crates_vendor-generate_build_scripts">generate_build_scripts</a>, <a href="#crates_vendor-manifests">manifests</a>, <a href="#crates_vendor-mode">mode</a>,
-              <a href="#crates_vendor-packages">packages</a>, <a href="#crates_vendor-repository_name">repository_name</a>, <a href="#crates_vendor-splicing_config">splicing_config</a>, <a href="#crates_vendor-supported_platform_triples">supported_platform_triples</a>, <a href="#crates_vendor-vendor_path">vendor_path</a>)
+crates_vendor(<a href="#crates_vendor-name">name</a>, <a href="#crates_vendor-annotations">annotations</a>, <a href="#crates_vendor-buildifier">buildifier</a>, <a href="#crates_vendor-cargo_bazel">cargo_bazel</a>, <a href="#crates_vendor-cargo_config">cargo_config</a>, <a href="#crates_vendor-cargo_lockfile">cargo_lockfile</a>,
+              <a href="#crates_vendor-generate_build_scripts">generate_build_scripts</a>, <a href="#crates_vendor-manifests">manifests</a>, <a href="#crates_vendor-mode">mode</a>, <a href="#crates_vendor-packages">packages</a>, <a href="#crates_vendor-repository_name">repository_name</a>, <a href="#crates_vendor-splicing_config">splicing_config</a>,
+              <a href="#crates_vendor-supported_platform_triples">supported_platform_triples</a>, <a href="#crates_vendor-vendor_path">vendor_path</a>)
 </pre>
 
-A rule for defining Rust dependencies (crates) and writing targets for them to the current workspace
+A rule for defining Rust dependencies (crates) and writing targets for them to the current workspace.
+This rule is useful for users whose workspaces are expected to be consumed in other workspaces as the
+rendered `BUILD` files reduce the number of workspace dependencies, allowing for easier loads. This rule
+handles all the same [workflows](#workflows) `crate_universe` rules do.
+
+Example: 
+
+Given the following workspace structure:
+
+```text
+[workspace]/
+    WORKSPACE
+    BUILD
+    Cargo.toml
+    3rdparty/
+        BUILD
+    src/
+        main.rs
+```
+
+The following is something that'd be found in `3rdparty/BUILD`:
+
+```python
+load("@rules_rust//crate_universe:defs.bzl", "crates_vendor", "crate")
+
+crates_vendor(
+    name = "crates_vendor",
+    annotations = {
+        "rand": [crate.annotation(
+            default_features = False,
+            features = ["small_rng"],
+        )],
+    },
+    cargo_lockfile = "//:Cargo.Bazel.lock",
+    manifests = ["//:Cargo.toml"],
+    mode = "remote",
+    vendor_path = "crates",
+    tags = ["manual"],
+)
+```
+
+The above creates a target that can be run to write `BUILD` files into the `3rdparty`
+directory next to where the target is defined. To run it, simply call:
+
+```shell
+bazel run //3rdparty:crates_vendor
+```
+
+<a id="#crates_vendor_repinning_updating_dependencies"></a>
+
+### Repinning / Updating Dependencies
+
+Repinning dependencies is controlled by both the `CARGO_BAZEL_REPIN` environment variable or the `--repin`
+flag to the `crates_vendor` binary. To update dependencies, simply add the flag ro your `bazel run` invocation.
+
+```shell
+bazel run //3rdparty:crates_vendor -- --repin
+```
+
+Under the hood, `--repin` will trigger a [cargo update](https://doc.rust-lang.org/cargo/commands/cargo-update.html)
+call against the generated workspace. The following table describes how to controll particular values passed to the
+`cargo update` command.
+
+| Value | Cargo command |
+| --- | --- |
+| Any of [`true`, `1`, `yes`, `on`] | `cargo update` |
+| `workspace` | `cargo update --workspace` |
+| `package_name` | `cargo upgrade --package package_name` |
+| `package_name@1.2.3` | `cargo upgrade --package package_name --precise 1.2.3` |
+
+
 
 **ATTRIBUTES**
 
@@ -218,20 +383,87 @@
 | Name  | Description | Type | Mandatory | Default |
 | :------------- | :------------- | :------------- | :------------- | :------------- |
 | <a id="crates_vendor-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
-| <a id="crates_vendor-annotations"></a>annotations |  Extra settings to apply to crates. See [crate.annotations](#crateannotations).   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> List of strings</a> | optional | {} |
+| <a id="crates_vendor-annotations"></a>annotations |  Extra settings to apply to crates. See [crate.annotation](#crateannotation).   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> List of strings</a> | optional | {} |
 | <a id="crates_vendor-buildifier"></a>buildifier |  The path to a [buildifier](https://github.com/bazelbuild/buildtools/blob/5.0.1/buildifier/README.md) binary used to format generated BUILD files.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | //crate_universe/private/vendor:buildifier |
 | <a id="crates_vendor-cargo_bazel"></a>cargo_bazel |  The cargo-bazel binary to use for vendoring. If this attribute is not set, then a <code>CARGO_BAZEL_GENERATOR_PATH</code> action env will be used.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | @cargo_bazel_bootstrap//:binary |
+| <a id="crates_vendor-cargo_config"></a>cargo_config |  A [Cargo configuration](https://doc.rust-lang.org/cargo/reference/config.html) file.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
+| <a id="crates_vendor-cargo_lockfile"></a>cargo_lockfile |  The path to an existing <code>Cargo.lock</code> file   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="crates_vendor-generate_build_scripts"></a>generate_build_scripts |  Whether or not to generate [cargo build scripts](https://doc.rust-lang.org/cargo/reference/build-scripts.html) by default.   | Boolean | optional | True |
 | <a id="crates_vendor-manifests"></a>manifests |  A list of Cargo manifests (<code>Cargo.toml</code> files).   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="crates_vendor-mode"></a>mode |  Flags determining how crates should be vendored. <code>local</code> is where crate source and BUILD files are written to the repository. <code>remote</code> is where only BUILD files are written and repository rules used to fetch source code.   | String | optional | "remote" |
 | <a id="crates_vendor-packages"></a>packages |  A set of crates (packages) specifications to depend on. See [crate.spec](#crate.spec).   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
 | <a id="crates_vendor-repository_name"></a>repository_name |  The name of the repository to generate for <code>remote</code> vendor modes. If unset, the label name will be used   | String | optional | "" |
 | <a id="crates_vendor-splicing_config"></a>splicing_config |  The configuration flags to use for splicing Cargo maniests. Use <code>//crate_universe:defs.bzl\%rsplicing_config</code> to generate the value for this field. If unset, the defaults defined there will be used.   | String | optional | "" |
-| <a id="crates_vendor-supported_platform_triples"></a>supported_platform_triples |  A set of all platform triples to consider when generating dependencies.   | List of strings | optional | ["i686-apple-darwin", "i686-pc-windows-msvc", "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-pc-windows-msvc", "x86_64-unknown-linux-gnu", "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-linux-android", "i686-unknown-freebsd", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd"] |
+| <a id="crates_vendor-supported_platform_triples"></a>supported_platform_triples |  A set of all platform triples to consider when generating dependencies.   | List of strings | optional | ["i686-apple-darwin", "i686-pc-windows-msvc", "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-pc-windows-msvc", "x86_64-unknown-linux-gnu", "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "armv7-linux-androideabi", "i686-linux-android", "i686-unknown-freebsd", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "riscv32imc-unknown-none-elf"] |
 | <a id="crates_vendor-vendor_path"></a>vendor_path |  The path to a directory to write files into. Absolute paths will be treated as relative to the workspace root   | String | optional | "crates" |
 
 
-<a id="#crate.spec"></a>
+<a id="aliases"></a>
+
+## aliases
+
+<pre>
+aliases(<a href="#aliases-normal">normal</a>, <a href="#aliases-normal_dev">normal_dev</a>, <a href="#aliases-proc_macro">proc_macro</a>, <a href="#aliases-proc_macro_dev">proc_macro_dev</a>, <a href="#aliases-build">build</a>, <a href="#aliases-build_proc_macro">build_proc_macro</a>, <a href="#aliases-package_name">package_name</a>)
+</pre>
+
+Produces a map of Crate alias names to their original label
+
+If no dependency kinds are specified, `normal` and `proc_macro` are used by default.
+Setting any one flag will otherwise determine the contents of the returned dict.
+
+
+**PARAMETERS**
+
+
+| Name  | Description | Default Value |
+| :------------- | :------------- | :------------- |
+| <a id="aliases-normal"></a>normal |  If True, normal dependencies are included in the output list.   |  <code>False</code> |
+| <a id="aliases-normal_dev"></a>normal_dev |  If True, normla dev dependencies will be included in the output list..   |  <code>False</code> |
+| <a id="aliases-proc_macro"></a>proc_macro |  If True, proc_macro dependencies are included in the output list.   |  <code>False</code> |
+| <a id="aliases-proc_macro_dev"></a>proc_macro_dev |  If True, dev proc_macro dependencies are included in the output list.   |  <code>False</code> |
+| <a id="aliases-build"></a>build |  If True, build dependencies are included in the output list.   |  <code>False</code> |
+| <a id="aliases-build_proc_macro"></a>build_proc_macro |  If True, build proc_macro dependencies are included in the output list.   |  <code>False</code> |
+| <a id="aliases-package_name"></a>package_name |  The package name of the set of dependencies to look up. Defaults to <code>native.package_name()</code> when unset.   |  <code>None</code> |
+
+**RETURNS**
+
+dict: The aliases of all associated packages
+
+
+<a id="all_crate_deps"></a>
+
+## all_crate_deps
+
+<pre>
+all_crate_deps(<a href="#all_crate_deps-normal">normal</a>, <a href="#all_crate_deps-normal_dev">normal_dev</a>, <a href="#all_crate_deps-proc_macro">proc_macro</a>, <a href="#all_crate_deps-proc_macro_dev">proc_macro_dev</a>, <a href="#all_crate_deps-build">build</a>, <a href="#all_crate_deps-build_proc_macro">build_proc_macro</a>,
+               <a href="#all_crate_deps-package_name">package_name</a>)
+</pre>
+
+Finds the fully qualified label of all requested direct crate dependencies     for the package where this macro is called.
+
+If no parameters are set, all normal dependencies are returned. Setting any one flag will
+otherwise impact the contents of the returned list.
+
+
+**PARAMETERS**
+
+
+| Name  | Description | Default Value |
+| :------------- | :------------- | :------------- |
+| <a id="all_crate_deps-normal"></a>normal |  If True, normal dependencies are included in the output list.   |  <code>False</code> |
+| <a id="all_crate_deps-normal_dev"></a>normal_dev |  If True, normla dev dependencies will be included in the output list..   |  <code>False</code> |
+| <a id="all_crate_deps-proc_macro"></a>proc_macro |  If True, proc_macro dependencies are included in the output list.   |  <code>False</code> |
+| <a id="all_crate_deps-proc_macro_dev"></a>proc_macro_dev |  If True, dev proc_macro dependencies are included in the output list.   |  <code>False</code> |
+| <a id="all_crate_deps-build"></a>build |  If True, build dependencies are included in the output list.   |  <code>False</code> |
+| <a id="all_crate_deps-build_proc_macro"></a>build_proc_macro |  If True, build proc_macro dependencies are included in the output list.   |  <code>False</code> |
+| <a id="all_crate_deps-package_name"></a>package_name |  The package name of the set of dependencies to look up. Defaults to <code>native.package_name()</code> when unset.   |  <code>None</code> |
+
+**RETURNS**
+
+list: A list of labels to generated rust targets (str)
+
+
+<a id="crate.spec"></a>
 
 ## crate.spec
 
@@ -263,17 +495,17 @@
 string: A json encoded string of all inputs
 
 
-<a id="#crate.annotation"></a>
+<a id="crate.annotation"></a>
 
 ## crate.annotation
 
 <pre>
 crate.annotation(<a href="#crate.annotation-version">version</a>, <a href="#crate.annotation-additive_build_file">additive_build_file</a>, <a href="#crate.annotation-additive_build_file_content">additive_build_file_content</a>, <a href="#crate.annotation-build_script_data">build_script_data</a>,
-                 <a href="#crate.annotation-build_script_data_glob">build_script_data_glob</a>, <a href="#crate.annotation-build_script_deps">build_script_deps</a>, <a href="#crate.annotation-build_script_env">build_script_env</a>,
-                 <a href="#crate.annotation-build_script_proc_macro_deps">build_script_proc_macro_deps</a>, <a href="#crate.annotation-build_script_rustc_env">build_script_rustc_env</a>, <a href="#crate.annotation-compile_data">compile_data</a>,
-                 <a href="#crate.annotation-compile_data_glob">compile_data_glob</a>, <a href="#crate.annotation-crate_features">crate_features</a>, <a href="#crate.annotation-data">data</a>, <a href="#crate.annotation-data_glob">data_glob</a>, <a href="#crate.annotation-deps">deps</a>, <a href="#crate.annotation-gen_build_script">gen_build_script</a>,
-                 <a href="#crate.annotation-patch_args">patch_args</a>, <a href="#crate.annotation-patch_tool">patch_tool</a>, <a href="#crate.annotation-patches">patches</a>, <a href="#crate.annotation-proc_macro_deps">proc_macro_deps</a>, <a href="#crate.annotation-rustc_env">rustc_env</a>, <a href="#crate.annotation-rustc_env_files">rustc_env_files</a>,
-                 <a href="#crate.annotation-rustc_flags">rustc_flags</a>, <a href="#crate.annotation-shallow_since">shallow_since</a>)
+                 <a href="#crate.annotation-build_script_tools">build_script_tools</a>, <a href="#crate.annotation-build_script_data_glob">build_script_data_glob</a>, <a href="#crate.annotation-build_script_deps">build_script_deps</a>, <a href="#crate.annotation-build_script_env">build_script_env</a>,
+                 <a href="#crate.annotation-build_script_proc_macro_deps">build_script_proc_macro_deps</a>, <a href="#crate.annotation-build_script_rustc_env">build_script_rustc_env</a>, <a href="#crate.annotation-build_script_toolchains">build_script_toolchains</a>,
+                 <a href="#crate.annotation-compile_data">compile_data</a>, <a href="#crate.annotation-compile_data_glob">compile_data_glob</a>, <a href="#crate.annotation-crate_features">crate_features</a>, <a href="#crate.annotation-data">data</a>, <a href="#crate.annotation-data_glob">data_glob</a>, <a href="#crate.annotation-deps">deps</a>,
+                 <a href="#crate.annotation-gen_build_script">gen_build_script</a>, <a href="#crate.annotation-patch_args">patch_args</a>, <a href="#crate.annotation-patch_tool">patch_tool</a>, <a href="#crate.annotation-patches">patches</a>, <a href="#crate.annotation-proc_macro_deps">proc_macro_deps</a>, <a href="#crate.annotation-rustc_env">rustc_env</a>,
+                 <a href="#crate.annotation-rustc_env_files">rustc_env_files</a>, <a href="#crate.annotation-rustc_flags">rustc_flags</a>, <a href="#crate.annotation-shallow_since">shallow_since</a>)
 </pre>
 
 A collection of extra attributes and settings for a particular crate
@@ -287,11 +519,13 @@
 | <a id="crate.annotation-additive_build_file"></a>additive_build_file |  A file containing extra contents to write to the bottom of generated BUILD files.   |  <code>None</code> |
 | <a id="crate.annotation-additive_build_file_content"></a>additive_build_file_content |  Extra contents to write to the bottom of generated BUILD files.   |  <code>None</code> |
 | <a id="crate.annotation-build_script_data"></a>build_script_data |  A list of labels to add to a crate's <code>cargo_build_script::data</code> attribute.   |  <code>None</code> |
+| <a id="crate.annotation-build_script_tools"></a>build_script_tools |  A list of labels to add to a crate's <code>cargo_build_script::tools</code> attribute.   |  <code>None</code> |
 | <a id="crate.annotation-build_script_data_glob"></a>build_script_data_glob |  A list of glob patterns to add to a crate's <code>cargo_build_script::data</code> attribute.   |  <code>None</code> |
 | <a id="crate.annotation-build_script_deps"></a>build_script_deps |  A list of labels to add to a crate's <code>cargo_build_script::deps</code> attribute.   |  <code>None</code> |
 | <a id="crate.annotation-build_script_env"></a>build_script_env |  Additional environment variables to set on a crate's <code>cargo_build_script::env</code> attribute.   |  <code>None</code> |
 | <a id="crate.annotation-build_script_proc_macro_deps"></a>build_script_proc_macro_deps |  A list of labels to add to a crate's <code>cargo_build_script::proc_macro_deps</code> attribute.   |  <code>None</code> |
 | <a id="crate.annotation-build_script_rustc_env"></a>build_script_rustc_env |  Additional environment variables to set on a crate's <code>cargo_build_script::env</code> attribute.   |  <code>None</code> |
+| <a id="crate.annotation-build_script_toolchains"></a>build_script_toolchains |  A list of labels to set on a crates's <code>cargo_build_script::toolchains</code> attribute.   |  <code>None</code> |
 | <a id="crate.annotation-compile_data"></a>compile_data |  A list of labels to add to a crate's <code>rust_library::compile_data</code> attribute.   |  <code>None</code> |
 | <a id="crate.annotation-compile_data_glob"></a>compile_data_glob |  A list of glob patterns to add to a crate's <code>rust_library::compile_data</code> attribute.   |  <code>None</code> |
 | <a id="crate.annotation-crate_features"></a>crate_features |  A list of strings to add to a crate's <code>rust_library::crate_features</code> attribute.   |  <code>None</code> |
@@ -313,7 +547,7 @@
 string: A json encoded string containing the specified version and separately all other inputs.
 
 
-<a id="#crate.workspace_member"></a>
+<a id="crate.workspace_member"></a>
 
 ## crate.workspace_member
 
@@ -336,13 +570,68 @@
 string: A json encoded string of all inputs
 
 
-<a id="#render_config"></a>
+<a id="crate_deps"></a>
+
+## crate_deps
+
+<pre>
+crate_deps(<a href="#crate_deps-deps">deps</a>, <a href="#crate_deps-package_name">package_name</a>)
+</pre>
+
+Finds the fully qualified label of the requested crates for the package where this macro is called.
+
+**PARAMETERS**
+
+
+| Name  | Description | Default Value |
+| :------------- | :------------- | :------------- |
+| <a id="crate_deps-deps"></a>deps |  The desired list of crate targets.   |  none |
+| <a id="crate_deps-package_name"></a>package_name |  The package name of the set of dependencies to look up. Defaults to <code>native.package_name()</code>.   |  <code>None</code> |
+
+**RETURNS**
+
+list: A list of labels to generated rust targets (str)
+
+
+<a id="crate_repositories"></a>
+
+## crate_repositories
+
+<pre>
+crate_repositories()
+</pre>
+
+A macro for defining repositories for all generated crates
+
+
+
+<a id="crate_universe_dependencies"></a>
+
+## crate_universe_dependencies
+
+<pre>
+crate_universe_dependencies(<a href="#crate_universe_dependencies-rust_version">rust_version</a>, <a href="#crate_universe_dependencies-bootstrap">bootstrap</a>)
+</pre>
+
+Define dependencies of the `cargo-bazel` Rust target
+
+**PARAMETERS**
+
+
+| Name  | Description | Default Value |
+| :------------- | :------------- | :------------- |
+| <a id="crate_universe_dependencies-rust_version"></a>rust_version |  The version of rust to use when generating dependencies.   |  <code>"1.62.1"</code> |
+| <a id="crate_universe_dependencies-bootstrap"></a>bootstrap |  If true, a <code>cargo_bootstrap_repository</code> target will be generated.   |  <code>False</code> |
+
+
+<a id="render_config"></a>
 
 ## render_config
 
 <pre>
 render_config(<a href="#render_config-build_file_template">build_file_template</a>, <a href="#render_config-crate_label_template">crate_label_template</a>, <a href="#render_config-crate_repository_template">crate_repository_template</a>,
-              <a href="#render_config-crates_module_template">crates_module_template</a>, <a href="#render_config-default_package_name">default_package_name</a>, <a href="#render_config-platforms_template">platforms_template</a>, <a href="#render_config-vendor_mode">vendor_mode</a>)
+              <a href="#render_config-crates_module_template">crates_module_template</a>, <a href="#render_config-default_package_name">default_package_name</a>, <a href="#render_config-platforms_template">platforms_template</a>, <a href="#render_config-regen_command">regen_command</a>,
+              <a href="#render_config-vendor_mode">vendor_mode</a>)
 </pre>
 
 Various settings used to configure rendered outputs
@@ -369,8 +658,9 @@
 | <a id="render_config-crate_label_template"></a>crate_label_template |  The base template to use for crate labels. The available format keys are [<code>{repository}</code>, <code>{name}</code>, <code>{version}</code>, <code>{target}</code>].   |  <code>"@{repository}__{name}-{version}//:{target}"</code> |
 | <a id="render_config-crate_repository_template"></a>crate_repository_template |  The base template to use for Crate label repository names. The available format keys are [<code>{repository}</code>, <code>{name}</code>, <code>{version}</code>].   |  <code>"{repository}__{name}-{version}"</code> |
 | <a id="render_config-crates_module_template"></a>crates_module_template |  The pattern to use for the <code>defs.bzl</code> and <code>BUILD.bazel</code> file names used for the crates module. The available format keys are [<code>{file}</code>].   |  <code>"//:{file}"</code> |
-| <a id="render_config-default_package_name"></a>default_package_name |  The default package name to in the rendered macros. This affects the auto package detection of things like <code>all_crate_deps</code>.   |  <code>None</code> |
+| <a id="render_config-default_package_name"></a>default_package_name |  The default package name to use in the rendered macros. This affects the auto package detection of things like <code>all_crate_deps</code>.   |  <code>None</code> |
 | <a id="render_config-platforms_template"></a>platforms_template |  The base template to use for platform names. See [platforms documentation](https://docs.bazel.build/versions/main/platforms.html). The available format keys are [<code>{triple}</code>].   |  <code>"@rules_rust//rust/platform:{triple}"</code> |
+| <a id="render_config-regen_command"></a>regen_command |  An optional command to demonstrate how generated files should be regenerated.   |  <code>None</code> |
 | <a id="render_config-vendor_mode"></a>vendor_mode |  An optional configuration for rendirng content to be rendered into repositories.   |  <code>None</code> |
 
 **RETURNS**
@@ -378,7 +668,7 @@
 string: A json encoded struct to match the Rust `config::RenderConfig` struct
 
 
-<a id="#splicing_config"></a>
+<a id="splicing_config"></a>
 
 ## splicing_config
 
@@ -386,7 +676,7 @@
 splicing_config(<a href="#splicing_config-resolver_version">resolver_version</a>)
 </pre>
 
-arious settings used to configure Cargo manifest splicing behavior.
+Various settings used to configure Cargo manifest splicing behavior.
 
 [rv]: https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions
 
diff --git a/third_party/rules_rust/docs/defs.md b/third_party/rules_rust/docs/defs.md
index 6d56201..577c7f6 100644
--- a/third_party/rules_rust/docs/defs.md
+++ b/third_party/rules_rust/docs/defs.md
@@ -9,10 +9,11 @@
 * [rust_test](#rust_test)
 * [rust_test_suite](#rust_test_suite)
 * [error_format](#error_format)
+* [extra_rustc_flag](#extra_rustc_flag)
 * [extra_rustc_flags](#extra_rustc_flags)
 * [capture_clippy_output](#capture_clippy_output)
 
-<a id="#capture_clippy_output"></a>
+<a id="capture_clippy_output"></a>
 
 ## capture_clippy_output
 
@@ -30,7 +31,7 @@
 | <a id="capture_clippy_output-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
 
 
-<a id="#error_format"></a>
+<a id="error_format"></a>
 
 ## error_format
 
@@ -48,7 +49,25 @@
 | <a id="error_format-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
 
 
-<a id="#extra_rustc_flags"></a>
+<a id="extra_rustc_flag"></a>
+
+## extra_rustc_flag
+
+<pre>
+extra_rustc_flag(<a href="#extra_rustc_flag-name">name</a>)
+</pre>
+
+Add additional rustc_flag from the command line with `--@rules_rust//:extra_rustc_flag`. Multiple uses are accumulated and appended after the extra_rustc_flags.
+
+**ATTRIBUTES**
+
+
+| Name  | Description | Type | Mandatory | Default |
+| :------------- | :------------- | :------------- | :------------- | :------------- |
+| <a id="extra_rustc_flag-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
+
+
+<a id="extra_rustc_flags"></a>
 
 ## extra_rustc_flags
 
@@ -66,14 +85,14 @@
 | <a id="extra_rustc_flags-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
 
 
-<a id="#rust_binary"></a>
+<a id="rust_binary"></a>
 
 ## rust_binary
 
 <pre>
 rust_binary(<a href="#rust_binary-name">name</a>, <a href="#rust_binary-aliases">aliases</a>, <a href="#rust_binary-compile_data">compile_data</a>, <a href="#rust_binary-crate_features">crate_features</a>, <a href="#rust_binary-crate_name">crate_name</a>, <a href="#rust_binary-crate_root">crate_root</a>, <a href="#rust_binary-crate_type">crate_type</a>, <a href="#rust_binary-data">data</a>,
-            <a href="#rust_binary-deps">deps</a>, <a href="#rust_binary-edition">edition</a>, <a href="#rust_binary-linker_script">linker_script</a>, <a href="#rust_binary-out_binary">out_binary</a>, <a href="#rust_binary-proc_macro_deps">proc_macro_deps</a>, <a href="#rust_binary-rustc_env">rustc_env</a>, <a href="#rust_binary-rustc_env_files">rustc_env_files</a>,
-            <a href="#rust_binary-rustc_flags">rustc_flags</a>, <a href="#rust_binary-srcs">srcs</a>, <a href="#rust_binary-stamp">stamp</a>, <a href="#rust_binary-version">version</a>)
+            <a href="#rust_binary-deps">deps</a>, <a href="#rust_binary-edition">edition</a>, <a href="#rust_binary-experimental_use_cc_common_link">experimental_use_cc_common_link</a>, <a href="#rust_binary-linker_script">linker_script</a>, <a href="#rust_binary-out_binary">out_binary</a>,
+            <a href="#rust_binary-proc_macro_deps">proc_macro_deps</a>, <a href="#rust_binary-rustc_env">rustc_env</a>, <a href="#rust_binary-rustc_env_files">rustc_env_files</a>, <a href="#rust_binary-rustc_flags">rustc_flags</a>, <a href="#rust_binary-srcs">srcs</a>, <a href="#rust_binary-stamp">stamp</a>, <a href="#rust_binary-version">version</a>)
 </pre>
 
 Builds a Rust binary crate.
@@ -178,6 +197,7 @@
 | <a id="rust_binary-data"></a>data |  List of files used by this rule at compile time and runtime.<br><br>If including data at compile time with include_str!() and similar, prefer <code>compile_data</code> over <code>data</code>, to prevent the data also being included in the runfiles.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_binary-deps"></a>deps |  List of other libraries to be linked to this library target.<br><br>These can be either other <code>rust_library</code> targets or <code>cc_library</code> targets if linking a native library.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_binary-edition"></a>edition |  The rust edition to use for this crate. Defaults to the edition specified in the rust_toolchain.   | String | optional | "" |
+| <a id="rust_binary-experimental_use_cc_common_link"></a>experimental_use_cc_common_link |  Whether to use cc_common.link to link rust binaries. Possible values: [-1, 0, 1]. -1 means use the value of the toolchain.experimental_use_cc_common_link boolean build setting to determine. 0 means do not use cc_common.link (use rustc instead). 1 means use cc_common.link.   | Integer | optional | -1 |
 | <a id="rust_binary-linker_script"></a>linker_script |  Link script to forward into linker via rustc options.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_binary-out_binary"></a>out_binary |  Force a target, regardless of it's <code>crate_type</code>, to always mark the file as executable. This attribute is only used to support wasm targets but is expected to be removed following a resolution to https://github.com/bazelbuild/rules_rust/issues/771.   | Boolean | optional | False |
 | <a id="rust_binary-proc_macro_deps"></a>proc_macro_deps |  List of <code>rust_library</code> targets with kind <code>proc-macro</code> used to help build this library target.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
@@ -189,13 +209,14 @@
 | <a id="rust_binary-version"></a>version |  A version to inject in the cargo environment variable.   | String | optional | "0.0.0" |
 
 
-<a id="#rust_library"></a>
+<a id="rust_library"></a>
 
 ## rust_library
 
 <pre>
 rust_library(<a href="#rust_library-name">name</a>, <a href="#rust_library-aliases">aliases</a>, <a href="#rust_library-compile_data">compile_data</a>, <a href="#rust_library-crate_features">crate_features</a>, <a href="#rust_library-crate_name">crate_name</a>, <a href="#rust_library-crate_root">crate_root</a>, <a href="#rust_library-data">data</a>, <a href="#rust_library-deps">deps</a>,
-             <a href="#rust_library-edition">edition</a>, <a href="#rust_library-proc_macro_deps">proc_macro_deps</a>, <a href="#rust_library-rustc_env">rustc_env</a>, <a href="#rust_library-rustc_env_files">rustc_env_files</a>, <a href="#rust_library-rustc_flags">rustc_flags</a>, <a href="#rust_library-srcs">srcs</a>, <a href="#rust_library-stamp">stamp</a>, <a href="#rust_library-version">version</a>)
+             <a href="#rust_library-disable_pipelining">disable_pipelining</a>, <a href="#rust_library-edition">edition</a>, <a href="#rust_library-proc_macro_deps">proc_macro_deps</a>, <a href="#rust_library-rustc_env">rustc_env</a>, <a href="#rust_library-rustc_env_files">rustc_env_files</a>, <a href="#rust_library-rustc_flags">rustc_flags</a>,
+             <a href="#rust_library-srcs">srcs</a>, <a href="#rust_library-stamp">stamp</a>, <a href="#rust_library-version">version</a>)
 </pre>
 
 Builds a Rust library crate.
@@ -275,17 +296,18 @@
 | <a id="rust_library-crate_root"></a>crate_root |  The file that will be passed to <code>rustc</code> to be used for building this crate.<br><br>If <code>crate_root</code> is not set, then this rule will look for a <code>lib.rs</code> file (or <code>main.rs</code> for rust_binary) or the single file in <code>srcs</code> if <code>srcs</code> contains only one file.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_library-data"></a>data |  List of files used by this rule at compile time and runtime.<br><br>If including data at compile time with include_str!() and similar, prefer <code>compile_data</code> over <code>data</code>, to prevent the data also being included in the runfiles.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_library-deps"></a>deps |  List of other libraries to be linked to this library target.<br><br>These can be either other <code>rust_library</code> targets or <code>cc_library</code> targets if linking a native library.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
+| <a id="rust_library-disable_pipelining"></a>disable_pipelining |  Disables pipelining for this rule if it is globally enabled. This will cause this rule to not produce a <code>.rmeta</code> file and all the dependent crates will instead use the <code>.rlib</code> file.   | Boolean | optional | False |
 | <a id="rust_library-edition"></a>edition |  The rust edition to use for this crate. Defaults to the edition specified in the rust_toolchain.   | String | optional | "" |
 | <a id="rust_library-proc_macro_deps"></a>proc_macro_deps |  List of <code>rust_library</code> targets with kind <code>proc-macro</code> used to help build this library target.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_library-rustc_env"></a>rustc_env |  Dictionary of additional <code>"key": "value"</code> environment variables to set for rustc.<br><br>rust_test()/rust_binary() rules can use $(rootpath //package:target) to pass in the location of a generated file or external tool. Cargo build scripts that wish to expand locations should use cargo_build_script()'s build_script_env argument instead, as build scripts are run in a different environment - see cargo_build_script()'s documentation for more.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
 | <a id="rust_library-rustc_env_files"></a>rustc_env_files |  Files containing additional environment variables to set for rustc.<br><br>These files should  contain a single variable per line, of format <code>NAME=value</code>, and newlines may be included in a value by ending a line with a trailing back-slash (<code>\\</code>).<br><br>The order that these files will be processed is unspecified, so multiple definitions of a particular variable are discouraged.<br><br>Note that the variables here are subject to [workspace status](https://docs.bazel.build/versions/main/user-manual.html#workspace_status) stamping should the <code>stamp</code> attribute be enabled. Stamp variables should be wrapped in brackets in order to be resolved. E.g. <code>NAME={WORKSPACE_STATUS_VARIABLE}</code>.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_library-rustc_flags"></a>rustc_flags |  List of compiler flags passed to <code>rustc</code>.<br><br>These strings are subject to Make variable expansion for predefined source/output path variables like <code>$location</code>, <code>$execpath</code>, and <code>$rootpath</code>. This expansion is useful if you wish to pass a generated file of arguments to rustc: <code>@$(location //package:target)</code>.   | List of strings | optional | [] |
 | <a id="rust_library-srcs"></a>srcs |  List of Rust <code>.rs</code> source files used to build the library.<br><br>If <code>srcs</code> contains more than one file, then there must be a file either named <code>lib.rs</code>. Otherwise, <code>crate_root</code> must be set to the source file that is the root of the crate to be passed to rustc to build this crate.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
-| <a id="rust_library-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | -1 |
+| <a id="rust_library-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | 0 |
 | <a id="rust_library-version"></a>version |  A version to inject in the cargo environment variable.   | String | optional | "0.0.0" |
 
 
-<a id="#rust_proc_macro"></a>
+<a id="rust_proc_macro"></a>
 
 ## rust_proc_macro
 
@@ -317,11 +339,11 @@
 | <a id="rust_proc_macro-rustc_env_files"></a>rustc_env_files |  Files containing additional environment variables to set for rustc.<br><br>These files should  contain a single variable per line, of format <code>NAME=value</code>, and newlines may be included in a value by ending a line with a trailing back-slash (<code>\\</code>).<br><br>The order that these files will be processed is unspecified, so multiple definitions of a particular variable are discouraged.<br><br>Note that the variables here are subject to [workspace status](https://docs.bazel.build/versions/main/user-manual.html#workspace_status) stamping should the <code>stamp</code> attribute be enabled. Stamp variables should be wrapped in brackets in order to be resolved. E.g. <code>NAME={WORKSPACE_STATUS_VARIABLE}</code>.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_proc_macro-rustc_flags"></a>rustc_flags |  List of compiler flags passed to <code>rustc</code>.<br><br>These strings are subject to Make variable expansion for predefined source/output path variables like <code>$location</code>, <code>$execpath</code>, and <code>$rootpath</code>. This expansion is useful if you wish to pass a generated file of arguments to rustc: <code>@$(location //package:target)</code>.   | List of strings | optional | [] |
 | <a id="rust_proc_macro-srcs"></a>srcs |  List of Rust <code>.rs</code> source files used to build the library.<br><br>If <code>srcs</code> contains more than one file, then there must be a file either named <code>lib.rs</code>. Otherwise, <code>crate_root</code> must be set to the source file that is the root of the crate to be passed to rustc to build this crate.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
-| <a id="rust_proc_macro-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | -1 |
+| <a id="rust_proc_macro-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | 0 |
 | <a id="rust_proc_macro-version"></a>version |  A version to inject in the cargo environment variable.   | String | optional | "0.0.0" |
 
 
-<a id="#rust_shared_library"></a>
+<a id="rust_shared_library"></a>
 
 ## rust_shared_library
 
@@ -361,11 +383,11 @@
 | <a id="rust_shared_library-rustc_env_files"></a>rustc_env_files |  Files containing additional environment variables to set for rustc.<br><br>These files should  contain a single variable per line, of format <code>NAME=value</code>, and newlines may be included in a value by ending a line with a trailing back-slash (<code>\\</code>).<br><br>The order that these files will be processed is unspecified, so multiple definitions of a particular variable are discouraged.<br><br>Note that the variables here are subject to [workspace status](https://docs.bazel.build/versions/main/user-manual.html#workspace_status) stamping should the <code>stamp</code> attribute be enabled. Stamp variables should be wrapped in brackets in order to be resolved. E.g. <code>NAME={WORKSPACE_STATUS_VARIABLE}</code>.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_shared_library-rustc_flags"></a>rustc_flags |  List of compiler flags passed to <code>rustc</code>.<br><br>These strings are subject to Make variable expansion for predefined source/output path variables like <code>$location</code>, <code>$execpath</code>, and <code>$rootpath</code>. This expansion is useful if you wish to pass a generated file of arguments to rustc: <code>@$(location //package:target)</code>.   | List of strings | optional | [] |
 | <a id="rust_shared_library-srcs"></a>srcs |  List of Rust <code>.rs</code> source files used to build the library.<br><br>If <code>srcs</code> contains more than one file, then there must be a file either named <code>lib.rs</code>. Otherwise, <code>crate_root</code> must be set to the source file that is the root of the crate to be passed to rustc to build this crate.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
-| <a id="rust_shared_library-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | -1 |
+| <a id="rust_shared_library-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | 0 |
 | <a id="rust_shared_library-version"></a>version |  A version to inject in the cargo environment variable.   | String | optional | "0.0.0" |
 
 
-<a id="#rust_static_library"></a>
+<a id="rust_static_library"></a>
 
 ## rust_static_library
 
@@ -405,18 +427,18 @@
 | <a id="rust_static_library-rustc_env_files"></a>rustc_env_files |  Files containing additional environment variables to set for rustc.<br><br>These files should  contain a single variable per line, of format <code>NAME=value</code>, and newlines may be included in a value by ending a line with a trailing back-slash (<code>\\</code>).<br><br>The order that these files will be processed is unspecified, so multiple definitions of a particular variable are discouraged.<br><br>Note that the variables here are subject to [workspace status](https://docs.bazel.build/versions/main/user-manual.html#workspace_status) stamping should the <code>stamp</code> attribute be enabled. Stamp variables should be wrapped in brackets in order to be resolved. E.g. <code>NAME={WORKSPACE_STATUS_VARIABLE}</code>.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_static_library-rustc_flags"></a>rustc_flags |  List of compiler flags passed to <code>rustc</code>.<br><br>These strings are subject to Make variable expansion for predefined source/output path variables like <code>$location</code>, <code>$execpath</code>, and <code>$rootpath</code>. This expansion is useful if you wish to pass a generated file of arguments to rustc: <code>@$(location //package:target)</code>.   | List of strings | optional | [] |
 | <a id="rust_static_library-srcs"></a>srcs |  List of Rust <code>.rs</code> source files used to build the library.<br><br>If <code>srcs</code> contains more than one file, then there must be a file either named <code>lib.rs</code>. Otherwise, <code>crate_root</code> must be set to the source file that is the root of the crate to be passed to rustc to build this crate.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
-| <a id="rust_static_library-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | -1 |
+| <a id="rust_static_library-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | 0 |
 | <a id="rust_static_library-version"></a>version |  A version to inject in the cargo environment variable.   | String | optional | "0.0.0" |
 
 
-<a id="#rust_test"></a>
+<a id="rust_test"></a>
 
 ## rust_test
 
 <pre>
 rust_test(<a href="#rust_test-name">name</a>, <a href="#rust_test-aliases">aliases</a>, <a href="#rust_test-compile_data">compile_data</a>, <a href="#rust_test-crate">crate</a>, <a href="#rust_test-crate_features">crate_features</a>, <a href="#rust_test-crate_name">crate_name</a>, <a href="#rust_test-crate_root">crate_root</a>, <a href="#rust_test-data">data</a>, <a href="#rust_test-deps">deps</a>,
-          <a href="#rust_test-edition">edition</a>, <a href="#rust_test-env">env</a>, <a href="#rust_test-proc_macro_deps">proc_macro_deps</a>, <a href="#rust_test-rustc_env">rustc_env</a>, <a href="#rust_test-rustc_env_files">rustc_env_files</a>, <a href="#rust_test-rustc_flags">rustc_flags</a>, <a href="#rust_test-srcs">srcs</a>, <a href="#rust_test-stamp">stamp</a>,
-          <a href="#rust_test-use_libtest_harness">use_libtest_harness</a>, <a href="#rust_test-version">version</a>)
+          <a href="#rust_test-edition">edition</a>, <a href="#rust_test-env">env</a>, <a href="#rust_test-experimental_use_cc_common_link">experimental_use_cc_common_link</a>, <a href="#rust_test-proc_macro_deps">proc_macro_deps</a>, <a href="#rust_test-rustc_env">rustc_env</a>, <a href="#rust_test-rustc_env_files">rustc_env_files</a>,
+          <a href="#rust_test-rustc_flags">rustc_flags</a>, <a href="#rust_test-srcs">srcs</a>, <a href="#rust_test-stamp">stamp</a>, <a href="#rust_test-use_libtest_harness">use_libtest_harness</a>, <a href="#rust_test-version">version</a>)
 </pre>
 
 Builds a Rust test crate.
@@ -462,7 +484,9 @@
 }
 ```
 
-To build and run the tests, simply add a `rust_test` rule with no `srcs` and         only depends on the `hello_lib` `rust_library` target:
+To build and run the tests, simply add a `rust_test` rule with no `srcs`
+and only depends on the `hello_lib` `rust_library` target via the
+`crate` attribute:
 
 `hello_lib/BUILD`:
 ```python
@@ -475,23 +499,15 @@
 
 rust_test(
     name = "hello_lib_test",
-    deps = [":hello_lib"],
-)
-```
-
-Run the test with `bazel build //hello_lib:hello_lib_test`.
-
-To run a crate or lib with the `#[cfg(test)]` configuration, handling inline         tests, you should specify the crate directly like so.
-
-```python
-rust_test(
-    name = "hello_lib_test",
     crate = ":hello_lib",
     # You may add other deps that are specific to the test configuration
     deps = ["//some/dev/dep"],
-)
 ```
 
+Run the test with `bazel test //hello_lib:hello_lib_test`. The crate
+will be built using the same crate name as the underlying ":hello_lib"
+crate.
+
 ### Example: `test` directory
 
 Integration tests that live in the [`tests` directory][int-tests], they are         essentially built as separate crates. Suppose you have the following directory         structure where `greeting.rs` is an integration test for the `hello_lib`         library crate:
@@ -541,7 +557,7 @@
 )
 ```
 
-Run the test with `bazel build //hello_lib:hello_lib_test`.
+Run the test with `bazel test //hello_lib:greeting_test`.
 
 **ATTRIBUTES**
 
@@ -559,17 +575,18 @@
 | <a id="rust_test-deps"></a>deps |  List of other libraries to be linked to this library target.<br><br>These can be either other <code>rust_library</code> targets or <code>cc_library</code> targets if linking a native library.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_test-edition"></a>edition |  The rust edition to use for this crate. Defaults to the edition specified in the rust_toolchain.   | String | optional | "" |
 | <a id="rust_test-env"></a>env |  Specifies additional environment variables to set when the test is executed by bazel test. Values are subject to <code>$(rootpath)</code>, <code>$(execpath)</code>, location, and ["Make variable"](https://docs.bazel.build/versions/master/be/make-variables.html) substitution.<br><br>Execpath returns absolute path, and in order to be able to construct the absolute path we need to wrap the test binary in a launcher. Using a launcher comes with complications, such as more complicated debugger attachment.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
+| <a id="rust_test-experimental_use_cc_common_link"></a>experimental_use_cc_common_link |  Whether to use cc_common.link to link rust binaries. Possible values: [-1, 0, 1]. -1 means use the value of the toolchain.experimental_use_cc_common_link boolean build setting to determine. 0 means do not use cc_common.link (use rustc instead). 1 means use cc_common.link.   | Integer | optional | -1 |
 | <a id="rust_test-proc_macro_deps"></a>proc_macro_deps |  List of <code>rust_library</code> targets with kind <code>proc-macro</code> used to help build this library target.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_test-rustc_env"></a>rustc_env |  Dictionary of additional <code>"key": "value"</code> environment variables to set for rustc.<br><br>rust_test()/rust_binary() rules can use $(rootpath //package:target) to pass in the location of a generated file or external tool. Cargo build scripts that wish to expand locations should use cargo_build_script()'s build_script_env argument instead, as build scripts are run in a different environment - see cargo_build_script()'s documentation for more.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
 | <a id="rust_test-rustc_env_files"></a>rustc_env_files |  Files containing additional environment variables to set for rustc.<br><br>These files should  contain a single variable per line, of format <code>NAME=value</code>, and newlines may be included in a value by ending a line with a trailing back-slash (<code>\\</code>).<br><br>The order that these files will be processed is unspecified, so multiple definitions of a particular variable are discouraged.<br><br>Note that the variables here are subject to [workspace status](https://docs.bazel.build/versions/main/user-manual.html#workspace_status) stamping should the <code>stamp</code> attribute be enabled. Stamp variables should be wrapped in brackets in order to be resolved. E.g. <code>NAME={WORKSPACE_STATUS_VARIABLE}</code>.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_test-rustc_flags"></a>rustc_flags |  List of compiler flags passed to <code>rustc</code>.<br><br>These strings are subject to Make variable expansion for predefined source/output path variables like <code>$location</code>, <code>$execpath</code>, and <code>$rootpath</code>. This expansion is useful if you wish to pass a generated file of arguments to rustc: <code>@$(location //package:target)</code>.   | List of strings | optional | [] |
 | <a id="rust_test-srcs"></a>srcs |  List of Rust <code>.rs</code> source files used to build the library.<br><br>If <code>srcs</code> contains more than one file, then there must be a file either named <code>lib.rs</code>. Otherwise, <code>crate_root</code> must be set to the source file that is the root of the crate to be passed to rustc to build this crate.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
-| <a id="rust_test-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | -1 |
+| <a id="rust_test-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | 0 |
 | <a id="rust_test-use_libtest_harness"></a>use_libtest_harness |  Whether to use <code>libtest</code>. For targets using this flag, individual tests can be run by using the [--test_arg](https://docs.bazel.build/versions/4.0.0/command-line-reference.html#flag--test_arg) flag. E.g. <code>bazel test //src:rust_test --test_arg=foo::test::test_fn</code>.   | Boolean | optional | True |
 | <a id="rust_test-version"></a>version |  A version to inject in the cargo environment variable.   | String | optional | "0.0.0" |
 
 
-<a id="#rust_test_suite"></a>
+<a id="rust_test_suite"></a>
 
 ## rust_test_suite
 
diff --git a/third_party/rules_rust/docs/flatten.md b/third_party/rules_rust/docs/flatten.md
index 18fee16..1646c21 100644
--- a/third_party/rules_rust/docs/flatten.md
+++ b/third_party/rules_rust/docs/flatten.md
@@ -8,16 +8,18 @@
 * [cargo_build_script](#cargo_build_script)
 * [cargo_env](#cargo_env)
 * [error_format](#error_format)
+* [extra_rustc_flag](#extra_rustc_flag)
 * [extra_rustc_flags](#extra_rustc_flags)
 * [fail_when_enabled](#fail_when_enabled)
 * [incompatible_flag](#incompatible_flag)
 * [rules_rust_dependencies](#rules_rust_dependencies)
-* [rust_analyzer](#rust_analyzer)
 * [rust_analyzer_aspect](#rust_analyzer_aspect)
+* [rust_analyzer_toolchain](#rust_analyzer_toolchain)
 * [rust_binary](#rust_binary)
 * [rust_bindgen](#rust_bindgen)
+* [rust_bindgen_dependencies](#rust_bindgen_dependencies)
 * [rust_bindgen_library](#rust_bindgen_library)
-* [rust_bindgen_repositories](#rust_bindgen_repositories)
+* [rust_bindgen_register_toolchains](#rust_bindgen_register_toolchains)
 * [rust_bindgen_toolchain](#rust_bindgen_toolchain)
 * [rust_clippy](#rust_clippy)
 * [rust_clippy_aspect](#rust_clippy_aspect)
@@ -41,14 +43,16 @@
 * [rust_toolchain](#rust_toolchain)
 * [rust_toolchain_repository](#rust_toolchain_repository)
 * [rust_toolchain_repository_proxy](#rust_toolchain_repository_proxy)
+* [rust_toolchain_tools_repository](#rust_toolchain_tools_repository)
 * [rust_wasm_bindgen](#rust_wasm_bindgen)
-* [rust_wasm_bindgen_repositories](#rust_wasm_bindgen_repositories)
+* [rust_wasm_bindgen_dependencies](#rust_wasm_bindgen_dependencies)
+* [rust_wasm_bindgen_register_toolchains](#rust_wasm_bindgen_register_toolchains)
 * [rust_wasm_bindgen_toolchain](#rust_wasm_bindgen_toolchain)
 * [rustfmt_aspect](#rustfmt_aspect)
 * [rustfmt_test](#rustfmt_test)
 
 
-<a id="#capture_clippy_output"></a>
+<a id="capture_clippy_output"></a>
 
 ## capture_clippy_output
 
@@ -66,7 +70,7 @@
 | <a id="capture_clippy_output-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
 
 
-<a id="#cargo_bootstrap_repository"></a>
+<a id="cargo_bootstrap_repository"></a>
 
 ## cargo_bootstrap_repository
 
@@ -93,15 +97,15 @@
 | <a id="cargo_bootstrap_repository-env_label"></a>env_label |  A mapping of platform triple to a set of environment variables. This attribute differs from <code>env</code> in that all variables passed here must be fully qualified labels of files. See [cargo_env](#cargo_env) for usage details. Additionally, the platform triple <code>*</code> applies to all platforms.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
 | <a id="cargo_bootstrap_repository-iso_date"></a>iso_date |  The iso_date of cargo binary the resolver should use. Note: This can only be set if <code>version</code> is <code>beta</code> or <code>nightly</code>   | String | optional | "" |
 | <a id="cargo_bootstrap_repository-repo_mapping"></a>repo_mapping |  A dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.&lt;p&gt;For example, an entry <code>"@foo": "@bar"</code> declares that, for any time this repository depends on <code>@foo</code> (such as a dependency on <code>@foo//some:target</code>, it should actually resolve that dependency within globally-declared <code>@bar</code> (<code>@bar//some:target</code>).   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | required |  |
-| <a id="cargo_bootstrap_repository-rust_toolchain_cargo_template"></a>rust_toolchain_cargo_template |  The template to use for finding the host <code>cargo</code> binary. <code>{version}</code> (eg. '1.53.0'), <code>{triple}</code> (eg. 'x86_64-unknown-linux-gnu'), <code>{arch}</code> (eg. 'aarch64'), <code>{vendor}</code> (eg. 'unknown'), <code>{system}</code> (eg. 'darwin'), and <code>{tool}</code> (eg. 'rustc.exe') will be replaced in the string if present.   | String | optional | "@rust_{system}_{arch}//:bin/{tool}" |
+| <a id="cargo_bootstrap_repository-rust_toolchain_cargo_template"></a>rust_toolchain_cargo_template |  The template to use for finding the host <code>cargo</code> binary. <code>{version}</code> (eg. '1.53.0'), <code>{triple}</code> (eg. 'x86_64-unknown-linux-gnu'), <code>{arch}</code> (eg. 'aarch64'), <code>{vendor}</code> (eg. 'unknown'), <code>{system}</code> (eg. 'darwin'), and <code>{tool}</code> (eg. 'rustc.exe') will be replaced in the string if present.   | String | optional | "@rust_{system}_{arch}__{triple}_tools//:bin/{tool}" |
 | <a id="cargo_bootstrap_repository-rust_toolchain_repository_template"></a>rust_toolchain_repository_template |  **Deprecated**: Please use <code>rust_toolchain_cargo_template</code> and <code>rust_toolchain_rustc_template</code>   | String | optional | "" |
-| <a id="cargo_bootstrap_repository-rust_toolchain_rustc_template"></a>rust_toolchain_rustc_template |  The template to use for finding the host <code>rustc</code> binary. <code>{version}</code> (eg. '1.53.0'), <code>{triple}</code> (eg. 'x86_64-unknown-linux-gnu'), <code>{arch}</code> (eg. 'aarch64'), <code>{vendor}</code> (eg. 'unknown'), <code>{system}</code> (eg. 'darwin'), and <code>{tool}</code> (eg. 'rustc.exe') will be replaced in the string if present.   | String | optional | "@rust_{system}_{arch}//:bin/{tool}" |
+| <a id="cargo_bootstrap_repository-rust_toolchain_rustc_template"></a>rust_toolchain_rustc_template |  The template to use for finding the host <code>rustc</code> binary. <code>{version}</code> (eg. '1.53.0'), <code>{triple}</code> (eg. 'x86_64-unknown-linux-gnu'), <code>{arch}</code> (eg. 'aarch64'), <code>{vendor}</code> (eg. 'unknown'), <code>{system}</code> (eg. 'darwin'), and <code>{tool}</code> (eg. 'rustc.exe') will be replaced in the string if present.   | String | optional | "@rust_{system}_{arch}__{triple}_tools//:bin/{tool}" |
 | <a id="cargo_bootstrap_repository-srcs"></a>srcs |  Souce files of the crate to build. Passing source files here can be used to trigger rebuilds when changes are made   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="cargo_bootstrap_repository-timeout"></a>timeout |  Maximum duration of the Cargo build command in seconds   | Integer | optional | 600 |
-| <a id="cargo_bootstrap_repository-version"></a>version |  The version of cargo the resolver should use   | String | optional | "1.59.0" |
+| <a id="cargo_bootstrap_repository-version"></a>version |  The version of cargo the resolver should use   | String | optional | "1.62.1" |
 
 
-<a id="#error_format"></a>
+<a id="error_format"></a>
 
 ## error_format
 
@@ -119,7 +123,25 @@
 | <a id="error_format-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
 
 
-<a id="#extra_rustc_flags"></a>
+<a id="extra_rustc_flag"></a>
+
+## extra_rustc_flag
+
+<pre>
+extra_rustc_flag(<a href="#extra_rustc_flag-name">name</a>)
+</pre>
+
+Add additional rustc_flag from the command line with `--@rules_rust//:extra_rustc_flag`. Multiple uses are accumulated and appended after the extra_rustc_flags.
+
+**ATTRIBUTES**
+
+
+| Name  | Description | Type | Mandatory | Default |
+| :------------- | :------------- | :------------- | :------------- | :------------- |
+| <a id="extra_rustc_flag-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
+
+
+<a id="extra_rustc_flags"></a>
 
 ## extra_rustc_flags
 
@@ -137,7 +159,7 @@
 | <a id="extra_rustc_flags-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
 
 
-<a id="#incompatible_flag"></a>
+<a id="incompatible_flag"></a>
 
 ## incompatible_flag
 
@@ -156,34 +178,33 @@
 | <a id="incompatible_flag-issue"></a>issue |  The link to the github issue associated with this flag   | String | required |  |
 
 
-<a id="#rust_analyzer"></a>
+<a id="rust_analyzer_toolchain"></a>
 
-## rust_analyzer
+## rust_analyzer_toolchain
 
 <pre>
-rust_analyzer(<a href="#rust_analyzer-name">name</a>, <a href="#rust_analyzer-targets">targets</a>)
+rust_analyzer_toolchain(<a href="#rust_analyzer_toolchain-name">name</a>, <a href="#rust_analyzer_toolchain-rustc_srcs">rustc_srcs</a>)
 </pre>
 
-Deprecated: gen_rust_project can now create a rust-project.json without a rust_analyzer rule.
-
+A toolchain for [rust-analyzer](https://rust-analyzer.github.io/).
 
 **ATTRIBUTES**
 
 
 | Name  | Description | Type | Mandatory | Default |
 | :------------- | :------------- | :------------- | :------------- | :------------- |
-| <a id="rust_analyzer-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
-| <a id="rust_analyzer-targets"></a>targets |  List of all targets to be included in the index   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
+| <a id="rust_analyzer_toolchain-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
+| <a id="rust_analyzer_toolchain-rustc_srcs"></a>rustc_srcs |  The source code of rustc.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | required |  |
 
 
-<a id="#rust_binary"></a>
+<a id="rust_binary"></a>
 
 ## rust_binary
 
 <pre>
 rust_binary(<a href="#rust_binary-name">name</a>, <a href="#rust_binary-aliases">aliases</a>, <a href="#rust_binary-compile_data">compile_data</a>, <a href="#rust_binary-crate_features">crate_features</a>, <a href="#rust_binary-crate_name">crate_name</a>, <a href="#rust_binary-crate_root">crate_root</a>, <a href="#rust_binary-crate_type">crate_type</a>, <a href="#rust_binary-data">data</a>,
-            <a href="#rust_binary-deps">deps</a>, <a href="#rust_binary-edition">edition</a>, <a href="#rust_binary-linker_script">linker_script</a>, <a href="#rust_binary-out_binary">out_binary</a>, <a href="#rust_binary-proc_macro_deps">proc_macro_deps</a>, <a href="#rust_binary-rustc_env">rustc_env</a>, <a href="#rust_binary-rustc_env_files">rustc_env_files</a>,
-            <a href="#rust_binary-rustc_flags">rustc_flags</a>, <a href="#rust_binary-srcs">srcs</a>, <a href="#rust_binary-stamp">stamp</a>, <a href="#rust_binary-version">version</a>)
+            <a href="#rust_binary-deps">deps</a>, <a href="#rust_binary-edition">edition</a>, <a href="#rust_binary-experimental_use_cc_common_link">experimental_use_cc_common_link</a>, <a href="#rust_binary-linker_script">linker_script</a>, <a href="#rust_binary-out_binary">out_binary</a>,
+            <a href="#rust_binary-proc_macro_deps">proc_macro_deps</a>, <a href="#rust_binary-rustc_env">rustc_env</a>, <a href="#rust_binary-rustc_env_files">rustc_env_files</a>, <a href="#rust_binary-rustc_flags">rustc_flags</a>, <a href="#rust_binary-srcs">srcs</a>, <a href="#rust_binary-stamp">stamp</a>, <a href="#rust_binary-version">version</a>)
 </pre>
 
 Builds a Rust binary crate.
@@ -288,6 +309,7 @@
 | <a id="rust_binary-data"></a>data |  List of files used by this rule at compile time and runtime.<br><br>If including data at compile time with include_str!() and similar, prefer <code>compile_data</code> over <code>data</code>, to prevent the data also being included in the runfiles.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_binary-deps"></a>deps |  List of other libraries to be linked to this library target.<br><br>These can be either other <code>rust_library</code> targets or <code>cc_library</code> targets if linking a native library.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_binary-edition"></a>edition |  The rust edition to use for this crate. Defaults to the edition specified in the rust_toolchain.   | String | optional | "" |
+| <a id="rust_binary-experimental_use_cc_common_link"></a>experimental_use_cc_common_link |  Whether to use cc_common.link to link rust binaries. Possible values: [-1, 0, 1]. -1 means use the value of the toolchain.experimental_use_cc_common_link boolean build setting to determine. 0 means do not use cc_common.link (use rustc instead). 1 means use cc_common.link.   | Integer | optional | -1 |
 | <a id="rust_binary-linker_script"></a>linker_script |  Link script to forward into linker via rustc options.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_binary-out_binary"></a>out_binary |  Force a target, regardless of it's <code>crate_type</code>, to always mark the file as executable. This attribute is only used to support wasm targets but is expected to be removed following a resolution to https://github.com/bazelbuild/rules_rust/issues/771.   | Boolean | optional | False |
 | <a id="rust_binary-proc_macro_deps"></a>proc_macro_deps |  List of <code>rust_library</code> targets with kind <code>proc-macro</code> used to help build this library target.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
@@ -299,7 +321,7 @@
 | <a id="rust_binary-version"></a>version |  A version to inject in the cargo environment variable.   | String | optional | "0.0.0" |
 
 
-<a id="#rust_bindgen"></a>
+<a id="rust_bindgen"></a>
 
 ## rust_bindgen
 
@@ -316,13 +338,13 @@
 | :------------- | :------------- | :------------- | :------------- | :------------- |
 | <a id="rust_bindgen-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
 | <a id="rust_bindgen-bindgen_flags"></a>bindgen_flags |  Flags to pass directly to the bindgen executable. See https://rust-lang.github.io/rust-bindgen/ for details.   | List of strings | optional | [] |
-| <a id="rust_bindgen-cc_lib"></a>cc_lib |  The cc_library that contains the .h file. This is used to find the transitive includes.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
+| <a id="rust_bindgen-cc_lib"></a>cc_lib |  The cc_library that contains the <code>.h</code> file. This is used to find the transitive includes.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_bindgen-clang_flags"></a>clang_flags |  Flags to pass directly to the clang executable.   | List of strings | optional | [] |
-| <a id="rust_bindgen-header"></a>header |  The .h file to generate bindings for.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
+| <a id="rust_bindgen-header"></a>header |  The <code>.h</code> file to generate bindings for.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_bindgen-rustfmt"></a>rustfmt |  Enable or disable running rustfmt on the generated file.   | Boolean | optional | True |
 
 
-<a id="#rust_bindgen_toolchain"></a>
+<a id="rust_bindgen_toolchain"></a>
 
 ## rust_bindgen_toolchain
 
@@ -332,6 +354,32 @@
 
 The tools required for the `rust_bindgen` rule.
 
+This rule depends on the [`bindgen`](https://crates.io/crates/bindgen) binary crate, and it 
+in turn depends on both a clang binary and the clang library. To obtain these dependencies,
+`rust_bindgen_dependencies` imports bindgen and its dependencies.
+
+```python
+load("@rules_rust//bindgen:bindgen.bzl", "rust_bindgen_toolchain")
+
+rust_bindgen_toolchain(
+    name = "bindgen_toolchain_impl",
+    bindgen = "//my/rust:bindgen",
+    clang = "//my/clang:clang",
+    libclang = "//my/clang:libclang.so",
+    libstdcxx = "//my/cpp:libstdc++",
+)
+
+toolchain(
+    name = "bindgen_toolchain",
+    toolchain = "bindgen_toolchain_impl",
+    toolchain_type = "@rules_rust//bindgen:toolchain_type",
+)
+```
+
+This toolchain will then need to be registered in the current `WORKSPACE`.
+For additional information, see the [Bazel toolchains documentation](https://docs.bazel.build/versions/master/toolchains.html).
+
+
 **ATTRIBUTES**
 
 
@@ -345,7 +393,7 @@
 | <a id="rust_bindgen_toolchain-rustfmt"></a>rustfmt |  The label of a <code>rustfmt</code> executable. If this is not provided, falls back to the rust_toolchain rustfmt.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 
 
-<a id="#rust_clippy"></a>
+<a id="rust_clippy"></a>
 
 ## rust_clippy
 
@@ -399,12 +447,13 @@
 | <a id="rust_clippy-deps"></a>deps |  Rust targets to run clippy on.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 
 
-<a id="#rust_doc"></a>
+<a id="rust_doc"></a>
 
 ## rust_doc
 
 <pre>
-rust_doc(<a href="#rust_doc-name">name</a>, <a href="#rust_doc-crate">crate</a>, <a href="#rust_doc-html_after_content">html_after_content</a>, <a href="#rust_doc-html_before_content">html_before_content</a>, <a href="#rust_doc-html_in_header">html_in_header</a>, <a href="#rust_doc-markdown_css">markdown_css</a>)
+rust_doc(<a href="#rust_doc-name">name</a>, <a href="#rust_doc-crate">crate</a>, <a href="#rust_doc-html_after_content">html_after_content</a>, <a href="#rust_doc-html_before_content">html_before_content</a>, <a href="#rust_doc-html_in_header">html_in_header</a>, <a href="#rust_doc-markdown_css">markdown_css</a>,
+         <a href="#rust_doc-rustc_flags">rustc_flags</a>)
 </pre>
 
 Generates code documentation.
@@ -455,14 +504,15 @@
 | <a id="rust_doc-html_before_content"></a>html_before_content |  File to add in <code>&lt;body&gt;</code>, before content.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_doc-html_in_header"></a>html_in_header |  File to add to <code>&lt;head&gt;</code>.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_doc-markdown_css"></a>markdown_css |  CSS files to include via <code>&lt;link&gt;</code> in a rendered Markdown file.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
+| <a id="rust_doc-rustc_flags"></a>rustc_flags |  List of compiler flags passed to <code>rustc</code>.<br><br>These strings are subject to Make variable expansion for predefined source/output path variables like <code>$location</code>, <code>$execpath</code>, and <code>$rootpath</code>. This expansion is useful if you wish to pass a generated file of arguments to rustc: <code>@$(location //package:target)</code>.   | List of strings | optional | [] |
 
 
-<a id="#rust_doc_test"></a>
+<a id="rust_doc_test"></a>
 
 ## rust_doc_test
 
 <pre>
-rust_doc_test(<a href="#rust_doc_test-name">name</a>, <a href="#rust_doc_test-crate">crate</a>)
+rust_doc_test(<a href="#rust_doc_test-name">name</a>, <a href="#rust_doc_test-crate">crate</a>, <a href="#rust_doc_test-deps">deps</a>)
 </pre>
 
 Runs Rust documentation tests.
@@ -510,9 +560,10 @@
 | :------------- | :------------- | :------------- | :------------- | :------------- |
 | <a id="rust_doc_test-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
 | <a id="rust_doc_test-crate"></a>crate |  The label of the target to generate code documentation for. <code>rust_doc_test</code> can generate HTML code documentation for the source files of <code>rust_library</code> or <code>rust_binary</code> targets.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | required |  |
+| <a id="rust_doc_test-deps"></a>deps |  List of other libraries to be linked to this library target.<br><br>These can be either other <code>rust_library</code> targets or <code>cc_library</code> targets if linking a native library.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 
 
-<a id="#rust_grpc_library"></a>
+<a id="rust_grpc_library"></a>
 
 ## rust_grpc_library
 
@@ -555,13 +606,14 @@
 | <a id="rust_grpc_library-rust_deps"></a>rust_deps |  The crates the generated library depends on.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 
 
-<a id="#rust_library"></a>
+<a id="rust_library"></a>
 
 ## rust_library
 
 <pre>
 rust_library(<a href="#rust_library-name">name</a>, <a href="#rust_library-aliases">aliases</a>, <a href="#rust_library-compile_data">compile_data</a>, <a href="#rust_library-crate_features">crate_features</a>, <a href="#rust_library-crate_name">crate_name</a>, <a href="#rust_library-crate_root">crate_root</a>, <a href="#rust_library-data">data</a>, <a href="#rust_library-deps">deps</a>,
-             <a href="#rust_library-edition">edition</a>, <a href="#rust_library-proc_macro_deps">proc_macro_deps</a>, <a href="#rust_library-rustc_env">rustc_env</a>, <a href="#rust_library-rustc_env_files">rustc_env_files</a>, <a href="#rust_library-rustc_flags">rustc_flags</a>, <a href="#rust_library-srcs">srcs</a>, <a href="#rust_library-stamp">stamp</a>, <a href="#rust_library-version">version</a>)
+             <a href="#rust_library-disable_pipelining">disable_pipelining</a>, <a href="#rust_library-edition">edition</a>, <a href="#rust_library-proc_macro_deps">proc_macro_deps</a>, <a href="#rust_library-rustc_env">rustc_env</a>, <a href="#rust_library-rustc_env_files">rustc_env_files</a>, <a href="#rust_library-rustc_flags">rustc_flags</a>,
+             <a href="#rust_library-srcs">srcs</a>, <a href="#rust_library-stamp">stamp</a>, <a href="#rust_library-version">version</a>)
 </pre>
 
 Builds a Rust library crate.
@@ -641,17 +693,18 @@
 | <a id="rust_library-crate_root"></a>crate_root |  The file that will be passed to <code>rustc</code> to be used for building this crate.<br><br>If <code>crate_root</code> is not set, then this rule will look for a <code>lib.rs</code> file (or <code>main.rs</code> for rust_binary) or the single file in <code>srcs</code> if <code>srcs</code> contains only one file.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_library-data"></a>data |  List of files used by this rule at compile time and runtime.<br><br>If including data at compile time with include_str!() and similar, prefer <code>compile_data</code> over <code>data</code>, to prevent the data also being included in the runfiles.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_library-deps"></a>deps |  List of other libraries to be linked to this library target.<br><br>These can be either other <code>rust_library</code> targets or <code>cc_library</code> targets if linking a native library.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
+| <a id="rust_library-disable_pipelining"></a>disable_pipelining |  Disables pipelining for this rule if it is globally enabled. This will cause this rule to not produce a <code>.rmeta</code> file and all the dependent crates will instead use the <code>.rlib</code> file.   | Boolean | optional | False |
 | <a id="rust_library-edition"></a>edition |  The rust edition to use for this crate. Defaults to the edition specified in the rust_toolchain.   | String | optional | "" |
 | <a id="rust_library-proc_macro_deps"></a>proc_macro_deps |  List of <code>rust_library</code> targets with kind <code>proc-macro</code> used to help build this library target.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_library-rustc_env"></a>rustc_env |  Dictionary of additional <code>"key": "value"</code> environment variables to set for rustc.<br><br>rust_test()/rust_binary() rules can use $(rootpath //package:target) to pass in the location of a generated file or external tool. Cargo build scripts that wish to expand locations should use cargo_build_script()'s build_script_env argument instead, as build scripts are run in a different environment - see cargo_build_script()'s documentation for more.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
 | <a id="rust_library-rustc_env_files"></a>rustc_env_files |  Files containing additional environment variables to set for rustc.<br><br>These files should  contain a single variable per line, of format <code>NAME=value</code>, and newlines may be included in a value by ending a line with a trailing back-slash (<code>\\</code>).<br><br>The order that these files will be processed is unspecified, so multiple definitions of a particular variable are discouraged.<br><br>Note that the variables here are subject to [workspace status](https://docs.bazel.build/versions/main/user-manual.html#workspace_status) stamping should the <code>stamp</code> attribute be enabled. Stamp variables should be wrapped in brackets in order to be resolved. E.g. <code>NAME={WORKSPACE_STATUS_VARIABLE}</code>.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_library-rustc_flags"></a>rustc_flags |  List of compiler flags passed to <code>rustc</code>.<br><br>These strings are subject to Make variable expansion for predefined source/output path variables like <code>$location</code>, <code>$execpath</code>, and <code>$rootpath</code>. This expansion is useful if you wish to pass a generated file of arguments to rustc: <code>@$(location //package:target)</code>.   | List of strings | optional | [] |
 | <a id="rust_library-srcs"></a>srcs |  List of Rust <code>.rs</code> source files used to build the library.<br><br>If <code>srcs</code> contains more than one file, then there must be a file either named <code>lib.rs</code>. Otherwise, <code>crate_root</code> must be set to the source file that is the root of the crate to be passed to rustc to build this crate.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
-| <a id="rust_library-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | -1 |
+| <a id="rust_library-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | 0 |
 | <a id="rust_library-version"></a>version |  A version to inject in the cargo environment variable.   | String | optional | "0.0.0" |
 
 
-<a id="#rust_proc_macro"></a>
+<a id="rust_proc_macro"></a>
 
 ## rust_proc_macro
 
@@ -683,11 +736,11 @@
 | <a id="rust_proc_macro-rustc_env_files"></a>rustc_env_files |  Files containing additional environment variables to set for rustc.<br><br>These files should  contain a single variable per line, of format <code>NAME=value</code>, and newlines may be included in a value by ending a line with a trailing back-slash (<code>\\</code>).<br><br>The order that these files will be processed is unspecified, so multiple definitions of a particular variable are discouraged.<br><br>Note that the variables here are subject to [workspace status](https://docs.bazel.build/versions/main/user-manual.html#workspace_status) stamping should the <code>stamp</code> attribute be enabled. Stamp variables should be wrapped in brackets in order to be resolved. E.g. <code>NAME={WORKSPACE_STATUS_VARIABLE}</code>.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_proc_macro-rustc_flags"></a>rustc_flags |  List of compiler flags passed to <code>rustc</code>.<br><br>These strings are subject to Make variable expansion for predefined source/output path variables like <code>$location</code>, <code>$execpath</code>, and <code>$rootpath</code>. This expansion is useful if you wish to pass a generated file of arguments to rustc: <code>@$(location //package:target)</code>.   | List of strings | optional | [] |
 | <a id="rust_proc_macro-srcs"></a>srcs |  List of Rust <code>.rs</code> source files used to build the library.<br><br>If <code>srcs</code> contains more than one file, then there must be a file either named <code>lib.rs</code>. Otherwise, <code>crate_root</code> must be set to the source file that is the root of the crate to be passed to rustc to build this crate.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
-| <a id="rust_proc_macro-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | -1 |
+| <a id="rust_proc_macro-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | 0 |
 | <a id="rust_proc_macro-version"></a>version |  A version to inject in the cargo environment variable.   | String | optional | "0.0.0" |
 
 
-<a id="#rust_proto_library"></a>
+<a id="rust_proto_library"></a>
 
 ## rust_proto_library
 
@@ -730,7 +783,7 @@
 | <a id="rust_proto_library-rust_deps"></a>rust_deps |  The crates the generated library depends on.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 
 
-<a id="#rust_proto_toolchain"></a>
+<a id="rust_proto_toolchain"></a>
 
 ## rust_proto_toolchain
 
@@ -779,15 +832,15 @@
 | Name  | Description | Type | Mandatory | Default |
 | :------------- | :------------- | :------------- | :------------- | :------------- |
 | <a id="rust_proto_toolchain-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
-| <a id="rust_proto_toolchain-edition"></a>edition |  The edition used by the generated rust source.   | String | optional | "2018" |
-| <a id="rust_proto_toolchain-grpc_compile_deps"></a>grpc_compile_deps |  The crates the generated grpc libraries depends on.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [Label("//proto/raze:protobuf"), Label("//proto/raze:grpc"), Label("//proto/raze:tls_api"), Label("//proto/raze:tls_api_stub")] |
+| <a id="rust_proto_toolchain-edition"></a>edition |  The edition used by the generated rust source.   | String | optional | "" |
+| <a id="rust_proto_toolchain-grpc_compile_deps"></a>grpc_compile_deps |  The crates the generated grpc libraries depends on.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [Label("//proto/3rdparty/crates:protobuf"), Label("//proto/3rdparty/crates:grpc"), Label("//proto/3rdparty/crates:tls-api"), Label("//proto/3rdparty/crates:tls-api-stub")] |
 | <a id="rust_proto_toolchain-grpc_plugin"></a>grpc_plugin |  The location of the Rust protobuf compiler plugin to generate rust gRPC stubs.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | //proto:protoc_gen_rust_grpc |
-| <a id="rust_proto_toolchain-proto_compile_deps"></a>proto_compile_deps |  The crates the generated protobuf libraries depends on.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [Label("//proto/raze:protobuf")] |
+| <a id="rust_proto_toolchain-proto_compile_deps"></a>proto_compile_deps |  The crates the generated protobuf libraries depends on.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [Label("//proto/3rdparty/crates:protobuf")] |
 | <a id="rust_proto_toolchain-proto_plugin"></a>proto_plugin |  The location of the Rust protobuf compiler plugin used to generate rust sources.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | //proto:protoc_gen_rust |
 | <a id="rust_proto_toolchain-protoc"></a>protoc |  The location of the <code>protoc</code> binary. It should be an executable target.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | @com_google_protobuf//:protoc |
 
 
-<a id="#rust_shared_library"></a>
+<a id="rust_shared_library"></a>
 
 ## rust_shared_library
 
@@ -827,11 +880,11 @@
 | <a id="rust_shared_library-rustc_env_files"></a>rustc_env_files |  Files containing additional environment variables to set for rustc.<br><br>These files should  contain a single variable per line, of format <code>NAME=value</code>, and newlines may be included in a value by ending a line with a trailing back-slash (<code>\\</code>).<br><br>The order that these files will be processed is unspecified, so multiple definitions of a particular variable are discouraged.<br><br>Note that the variables here are subject to [workspace status](https://docs.bazel.build/versions/main/user-manual.html#workspace_status) stamping should the <code>stamp</code> attribute be enabled. Stamp variables should be wrapped in brackets in order to be resolved. E.g. <code>NAME={WORKSPACE_STATUS_VARIABLE}</code>.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_shared_library-rustc_flags"></a>rustc_flags |  List of compiler flags passed to <code>rustc</code>.<br><br>These strings are subject to Make variable expansion for predefined source/output path variables like <code>$location</code>, <code>$execpath</code>, and <code>$rootpath</code>. This expansion is useful if you wish to pass a generated file of arguments to rustc: <code>@$(location //package:target)</code>.   | List of strings | optional | [] |
 | <a id="rust_shared_library-srcs"></a>srcs |  List of Rust <code>.rs</code> source files used to build the library.<br><br>If <code>srcs</code> contains more than one file, then there must be a file either named <code>lib.rs</code>. Otherwise, <code>crate_root</code> must be set to the source file that is the root of the crate to be passed to rustc to build this crate.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
-| <a id="rust_shared_library-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | -1 |
+| <a id="rust_shared_library-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | 0 |
 | <a id="rust_shared_library-version"></a>version |  A version to inject in the cargo environment variable.   | String | optional | "0.0.0" |
 
 
-<a id="#rust_static_library"></a>
+<a id="rust_static_library"></a>
 
 ## rust_static_library
 
@@ -871,11 +924,11 @@
 | <a id="rust_static_library-rustc_env_files"></a>rustc_env_files |  Files containing additional environment variables to set for rustc.<br><br>These files should  contain a single variable per line, of format <code>NAME=value</code>, and newlines may be included in a value by ending a line with a trailing back-slash (<code>\\</code>).<br><br>The order that these files will be processed is unspecified, so multiple definitions of a particular variable are discouraged.<br><br>Note that the variables here are subject to [workspace status](https://docs.bazel.build/versions/main/user-manual.html#workspace_status) stamping should the <code>stamp</code> attribute be enabled. Stamp variables should be wrapped in brackets in order to be resolved. E.g. <code>NAME={WORKSPACE_STATUS_VARIABLE}</code>.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_static_library-rustc_flags"></a>rustc_flags |  List of compiler flags passed to <code>rustc</code>.<br><br>These strings are subject to Make variable expansion for predefined source/output path variables like <code>$location</code>, <code>$execpath</code>, and <code>$rootpath</code>. This expansion is useful if you wish to pass a generated file of arguments to rustc: <code>@$(location //package:target)</code>.   | List of strings | optional | [] |
 | <a id="rust_static_library-srcs"></a>srcs |  List of Rust <code>.rs</code> source files used to build the library.<br><br>If <code>srcs</code> contains more than one file, then there must be a file either named <code>lib.rs</code>. Otherwise, <code>crate_root</code> must be set to the source file that is the root of the crate to be passed to rustc to build this crate.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
-| <a id="rust_static_library-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | -1 |
+| <a id="rust_static_library-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | 0 |
 | <a id="rust_static_library-version"></a>version |  A version to inject in the cargo environment variable.   | String | optional | "0.0.0" |
 
 
-<a id="#rust_stdlib_filegroup"></a>
+<a id="rust_stdlib_filegroup"></a>
 
 ## rust_stdlib_filegroup
 
@@ -894,14 +947,14 @@
 | <a id="rust_stdlib_filegroup-srcs"></a>srcs |  The list of targets/files that are components of the rust-stdlib file group   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | required |  |
 
 
-<a id="#rust_test"></a>
+<a id="rust_test"></a>
 
 ## rust_test
 
 <pre>
 rust_test(<a href="#rust_test-name">name</a>, <a href="#rust_test-aliases">aliases</a>, <a href="#rust_test-compile_data">compile_data</a>, <a href="#rust_test-crate">crate</a>, <a href="#rust_test-crate_features">crate_features</a>, <a href="#rust_test-crate_name">crate_name</a>, <a href="#rust_test-crate_root">crate_root</a>, <a href="#rust_test-data">data</a>, <a href="#rust_test-deps">deps</a>,
-          <a href="#rust_test-edition">edition</a>, <a href="#rust_test-env">env</a>, <a href="#rust_test-proc_macro_deps">proc_macro_deps</a>, <a href="#rust_test-rustc_env">rustc_env</a>, <a href="#rust_test-rustc_env_files">rustc_env_files</a>, <a href="#rust_test-rustc_flags">rustc_flags</a>, <a href="#rust_test-srcs">srcs</a>, <a href="#rust_test-stamp">stamp</a>,
-          <a href="#rust_test-use_libtest_harness">use_libtest_harness</a>, <a href="#rust_test-version">version</a>)
+          <a href="#rust_test-edition">edition</a>, <a href="#rust_test-env">env</a>, <a href="#rust_test-experimental_use_cc_common_link">experimental_use_cc_common_link</a>, <a href="#rust_test-proc_macro_deps">proc_macro_deps</a>, <a href="#rust_test-rustc_env">rustc_env</a>, <a href="#rust_test-rustc_env_files">rustc_env_files</a>,
+          <a href="#rust_test-rustc_flags">rustc_flags</a>, <a href="#rust_test-srcs">srcs</a>, <a href="#rust_test-stamp">stamp</a>, <a href="#rust_test-use_libtest_harness">use_libtest_harness</a>, <a href="#rust_test-version">version</a>)
 </pre>
 
 Builds a Rust test crate.
@@ -947,7 +1000,9 @@
 }
 ```
 
-To build and run the tests, simply add a `rust_test` rule with no `srcs` and         only depends on the `hello_lib` `rust_library` target:
+To build and run the tests, simply add a `rust_test` rule with no `srcs`
+and only depends on the `hello_lib` `rust_library` target via the
+`crate` attribute:
 
 `hello_lib/BUILD`:
 ```python
@@ -960,23 +1015,15 @@
 
 rust_test(
     name = "hello_lib_test",
-    deps = [":hello_lib"],
-)
-```
-
-Run the test with `bazel build //hello_lib:hello_lib_test`.
-
-To run a crate or lib with the `#[cfg(test)]` configuration, handling inline         tests, you should specify the crate directly like so.
-
-```python
-rust_test(
-    name = "hello_lib_test",
     crate = ":hello_lib",
     # You may add other deps that are specific to the test configuration
     deps = ["//some/dev/dep"],
-)
 ```
 
+Run the test with `bazel test //hello_lib:hello_lib_test`. The crate
+will be built using the same crate name as the underlying ":hello_lib"
+crate.
+
 ### Example: `test` directory
 
 Integration tests that live in the [`tests` directory][int-tests], they are         essentially built as separate crates. Suppose you have the following directory         structure where `greeting.rs` is an integration test for the `hello_lib`         library crate:
@@ -1026,7 +1073,7 @@
 )
 ```
 
-Run the test with `bazel build //hello_lib:hello_lib_test`.
+Run the test with `bazel test //hello_lib:greeting_test`.
 
 **ATTRIBUTES**
 
@@ -1044,25 +1091,27 @@
 | <a id="rust_test-deps"></a>deps |  List of other libraries to be linked to this library target.<br><br>These can be either other <code>rust_library</code> targets or <code>cc_library</code> targets if linking a native library.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_test-edition"></a>edition |  The rust edition to use for this crate. Defaults to the edition specified in the rust_toolchain.   | String | optional | "" |
 | <a id="rust_test-env"></a>env |  Specifies additional environment variables to set when the test is executed by bazel test. Values are subject to <code>$(rootpath)</code>, <code>$(execpath)</code>, location, and ["Make variable"](https://docs.bazel.build/versions/master/be/make-variables.html) substitution.<br><br>Execpath returns absolute path, and in order to be able to construct the absolute path we need to wrap the test binary in a launcher. Using a launcher comes with complications, such as more complicated debugger attachment.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
+| <a id="rust_test-experimental_use_cc_common_link"></a>experimental_use_cc_common_link |  Whether to use cc_common.link to link rust binaries. Possible values: [-1, 0, 1]. -1 means use the value of the toolchain.experimental_use_cc_common_link boolean build setting to determine. 0 means do not use cc_common.link (use rustc instead). 1 means use cc_common.link.   | Integer | optional | -1 |
 | <a id="rust_test-proc_macro_deps"></a>proc_macro_deps |  List of <code>rust_library</code> targets with kind <code>proc-macro</code> used to help build this library target.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_test-rustc_env"></a>rustc_env |  Dictionary of additional <code>"key": "value"</code> environment variables to set for rustc.<br><br>rust_test()/rust_binary() rules can use $(rootpath //package:target) to pass in the location of a generated file or external tool. Cargo build scripts that wish to expand locations should use cargo_build_script()'s build_script_env argument instead, as build scripts are run in a different environment - see cargo_build_script()'s documentation for more.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
 | <a id="rust_test-rustc_env_files"></a>rustc_env_files |  Files containing additional environment variables to set for rustc.<br><br>These files should  contain a single variable per line, of format <code>NAME=value</code>, and newlines may be included in a value by ending a line with a trailing back-slash (<code>\\</code>).<br><br>The order that these files will be processed is unspecified, so multiple definitions of a particular variable are discouraged.<br><br>Note that the variables here are subject to [workspace status](https://docs.bazel.build/versions/main/user-manual.html#workspace_status) stamping should the <code>stamp</code> attribute be enabled. Stamp variables should be wrapped in brackets in order to be resolved. E.g. <code>NAME={WORKSPACE_STATUS_VARIABLE}</code>.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 | <a id="rust_test-rustc_flags"></a>rustc_flags |  List of compiler flags passed to <code>rustc</code>.<br><br>These strings are subject to Make variable expansion for predefined source/output path variables like <code>$location</code>, <code>$execpath</code>, and <code>$rootpath</code>. This expansion is useful if you wish to pass a generated file of arguments to rustc: <code>@$(location //package:target)</code>.   | List of strings | optional | [] |
 | <a id="rust_test-srcs"></a>srcs |  List of Rust <code>.rs</code> source files used to build the library.<br><br>If <code>srcs</code> contains more than one file, then there must be a file either named <code>lib.rs</code>. Otherwise, <code>crate_root</code> must be set to the source file that is the root of the crate to be passed to rustc to build this crate.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
-| <a id="rust_test-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | -1 |
+| <a id="rust_test-stamp"></a>stamp |  Whether to encode build information into the <code>Rustc</code> action. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the <code>Rustc</code> action, even in             [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds.             This setting should be avoided, since it potentially kills remote caching for the target and             any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the             [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change.<br><br>For example if a <code>rust_library</code> is stamped, and a <code>rust_binary</code> depends on that library, the stamped library won't be rebuilt when we change sources of the <code>rust_binary</code>. This is different from how [<code>cc_library.linkstamps</code>](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp) behaves.   | Integer | optional | 0 |
 | <a id="rust_test-use_libtest_harness"></a>use_libtest_harness |  Whether to use <code>libtest</code>. For targets using this flag, individual tests can be run by using the [--test_arg](https://docs.bazel.build/versions/4.0.0/command-line-reference.html#flag--test_arg) flag. E.g. <code>bazel test //src:rust_test --test_arg=foo::test::test_fn</code>.   | Boolean | optional | True |
 | <a id="rust_test-version"></a>version |  A version to inject in the cargo environment variable.   | String | optional | "0.0.0" |
 
 
-<a id="#rust_toolchain"></a>
+<a id="rust_toolchain"></a>
 
 ## rust_toolchain
 
 <pre>
 rust_toolchain(<a href="#rust_toolchain-name">name</a>, <a href="#rust_toolchain-allocator_library">allocator_library</a>, <a href="#rust_toolchain-binary_ext">binary_ext</a>, <a href="#rust_toolchain-cargo">cargo</a>, <a href="#rust_toolchain-clippy_driver">clippy_driver</a>, <a href="#rust_toolchain-debug_info">debug_info</a>,
-               <a href="#rust_toolchain-default_edition">default_edition</a>, <a href="#rust_toolchain-dylib_ext">dylib_ext</a>, <a href="#rust_toolchain-exec_triple">exec_triple</a>, <a href="#rust_toolchain-llvm_tools">llvm_tools</a>, <a href="#rust_toolchain-opt_level">opt_level</a>, <a href="#rust_toolchain-os">os</a>, <a href="#rust_toolchain-rust_doc">rust_doc</a>, <a href="#rust_toolchain-rust_lib">rust_lib</a>,
-               <a href="#rust_toolchain-rust_std">rust_std</a>, <a href="#rust_toolchain-rustc">rustc</a>, <a href="#rust_toolchain-rustc_lib">rustc_lib</a>, <a href="#rust_toolchain-rustc_srcs">rustc_srcs</a>, <a href="#rust_toolchain-rustfmt">rustfmt</a>, <a href="#rust_toolchain-staticlib_ext">staticlib_ext</a>, <a href="#rust_toolchain-stdlib_linkflags">stdlib_linkflags</a>,
-               <a href="#rust_toolchain-target_json">target_json</a>, <a href="#rust_toolchain-target_triple">target_triple</a>)
+               <a href="#rust_toolchain-default_edition">default_edition</a>, <a href="#rust_toolchain-dylib_ext">dylib_ext</a>, <a href="#rust_toolchain-env">env</a>, <a href="#rust_toolchain-exec_triple">exec_triple</a>, <a href="#rust_toolchain-experimental_use_cc_common_link">experimental_use_cc_common_link</a>,
+               <a href="#rust_toolchain-llvm_cov">llvm_cov</a>, <a href="#rust_toolchain-llvm_profdata">llvm_profdata</a>, <a href="#rust_toolchain-llvm_tools">llvm_tools</a>, <a href="#rust_toolchain-opt_level">opt_level</a>, <a href="#rust_toolchain-os">os</a>, <a href="#rust_toolchain-rust_doc">rust_doc</a>, <a href="#rust_toolchain-rust_lib">rust_lib</a>, <a href="#rust_toolchain-rust_std">rust_std</a>,
+               <a href="#rust_toolchain-rustc">rustc</a>, <a href="#rust_toolchain-rustc_lib">rustc_lib</a>, <a href="#rust_toolchain-rustc_srcs">rustc_srcs</a>, <a href="#rust_toolchain-rustfmt">rustfmt</a>, <a href="#rust_toolchain-staticlib_ext">staticlib_ext</a>, <a href="#rust_toolchain-stdlib_linkflags">stdlib_linkflags</a>, <a href="#rust_toolchain-target_json">target_json</a>,
+               <a href="#rust_toolchain-target_triple">target_triple</a>)
 </pre>
 
 Declares a Rust toolchain for use.
@@ -1117,9 +1166,13 @@
 | <a id="rust_toolchain-cargo"></a>cargo |  The location of the <code>cargo</code> binary. Can be a direct source or a filegroup containing one item.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_toolchain-clippy_driver"></a>clippy_driver |  The location of the <code>clippy-driver</code> binary. Can be a direct source or a filegroup containing one item.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_toolchain-debug_info"></a>debug_info |  Rustc debug info levels per opt level   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {"dbg": "2", "fastbuild": "0", "opt": "0"} |
-| <a id="rust_toolchain-default_edition"></a>default_edition |  The edition to use for rust_* rules that don't specify an edition.   | String | optional | "2018" |
+| <a id="rust_toolchain-default_edition"></a>default_edition |  The edition to use for rust_* rules that don't specify an edition. If absent, every rule is required to specify its <code>edition</code> attribute.   | String | optional | "" |
 | <a id="rust_toolchain-dylib_ext"></a>dylib_ext |  The extension for dynamic libraries created from rustc.   | String | required |  |
+| <a id="rust_toolchain-env"></a>env |  Environment variables to set in actions.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
 | <a id="rust_toolchain-exec_triple"></a>exec_triple |  The platform triple for the toolchains execution environment. For more details see: https://docs.bazel.build/versions/master/skylark/rules.html#configurations   | String | required |  |
+| <a id="rust_toolchain-experimental_use_cc_common_link"></a>experimental_use_cc_common_link |  Label to a boolean build setting that controls whether cc_common.link is used to link rust binaries.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | //rust/settings:experimental_use_cc_common_link |
+| <a id="rust_toolchain-llvm_cov"></a>llvm_cov |  The location of the <code>llvm-cov</code> binary. Can be a direct source or a filegroup containing one item. If None, rust code is not instrumented for coverage.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
+| <a id="rust_toolchain-llvm_profdata"></a>llvm_profdata |  The location of the <code>llvm-profdata</code> binary. Can be a direct source or a filegroup containing one item. If <code>llvm_cov</code> is None, this can be None as well and rust code is not instrumented for coverage.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_toolchain-llvm_tools"></a>llvm_tools |  LLVM tools that are shipped with the Rust toolchain.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_toolchain-opt_level"></a>opt_level |  Rustc optimization levels.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {"dbg": "0", "fastbuild": "0", "opt": "3"} |
 | <a id="rust_toolchain-os"></a>os |  The operating system for the current toolchain   | String | required |  |
@@ -1136,49 +1189,13 @@
 | <a id="rust_toolchain-target_triple"></a>target_triple |  The platform triple for the toolchains target environment. For more details see: https://docs.bazel.build/versions/master/skylark/rules.html#configurations   | String | optional | "" |
 
 
-<a id="#rust_toolchain_repository"></a>
-
-## rust_toolchain_repository
-
-<pre>
-rust_toolchain_repository(<a href="#rust_toolchain_repository-name">name</a>, <a href="#rust_toolchain_repository-allocator_library">allocator_library</a>, <a href="#rust_toolchain_repository-auth">auth</a>, <a href="#rust_toolchain_repository-dev_components">dev_components</a>, <a href="#rust_toolchain_repository-edition">edition</a>, <a href="#rust_toolchain_repository-exec_triple">exec_triple</a>,
-                          <a href="#rust_toolchain_repository-extra_target_triples">extra_target_triples</a>, <a href="#rust_toolchain_repository-include_rustc_srcs">include_rustc_srcs</a>, <a href="#rust_toolchain_repository-iso_date">iso_date</a>, <a href="#rust_toolchain_repository-repo_mapping">repo_mapping</a>,
-                          <a href="#rust_toolchain_repository-rustfmt_version">rustfmt_version</a>, <a href="#rust_toolchain_repository-sha256s">sha256s</a>, <a href="#rust_toolchain_repository-toolchain_name_prefix">toolchain_name_prefix</a>, <a href="#rust_toolchain_repository-urls">urls</a>, <a href="#rust_toolchain_repository-version">version</a>)
-</pre>
-
-Composes a single workspace containing the toolchain components for compiling on a given platform to a series of target platforms.
-
-A given instance of this rule should be accompanied by a rust_toolchain_repository_proxy invocation to declare its toolchains to Bazel; the indirection allows separating toolchain selection from toolchain fetching.
-
-**ATTRIBUTES**
-
-
-| Name  | Description | Type | Mandatory | Default |
-| :------------- | :------------- | :------------- | :------------- | :------------- |
-| <a id="rust_toolchain_repository-name"></a>name |  A unique name for this repository.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
-| <a id="rust_toolchain_repository-allocator_library"></a>allocator_library |  Target that provides allocator functions when rust_library targets are embedded in a cc_binary.   | String | optional | "" |
-| <a id="rust_toolchain_repository-auth"></a>auth |  Auth object compatible with repository_ctx.download to use when downloading files. See [repository_ctx.download](https://docs.bazel.build/versions/main/skylark/lib/repository_ctx.html#download) for more details.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
-| <a id="rust_toolchain_repository-dev_components"></a>dev_components |  Whether to download the rustc-dev components (defaults to False). Requires version to be "nightly".   | Boolean | optional | False |
-| <a id="rust_toolchain_repository-edition"></a>edition |  The rust edition to be used by default.   | String | optional | "2018" |
-| <a id="rust_toolchain_repository-exec_triple"></a>exec_triple |  The Rust-style target that this compiler runs on   | String | required |  |
-| <a id="rust_toolchain_repository-extra_target_triples"></a>extra_target_triples |  Additional rust-style targets that this set of toolchains should support.   | List of strings | optional | [] |
-| <a id="rust_toolchain_repository-include_rustc_srcs"></a>include_rustc_srcs |  Whether to download and unpack the rustc source files. These are very large, and slow to unpack, but are required to support rust analyzer. An environment variable <code>RULES_RUST_TOOLCHAIN_INCLUDE_RUSTC_SRCS</code> can also be used to control this attribute. This variable will take precedence over the hard coded attribute. Setting it to <code>true</code> to activates this attribute where all other values deactivate it.   | Boolean | optional | False |
-| <a id="rust_toolchain_repository-iso_date"></a>iso_date |  The date of the tool (or None, if the version is a specific version).   | String | optional | "" |
-| <a id="rust_toolchain_repository-repo_mapping"></a>repo_mapping |  A dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.&lt;p&gt;For example, an entry <code>"@foo": "@bar"</code> declares that, for any time this repository depends on <code>@foo</code> (such as a dependency on <code>@foo//some:target</code>, it should actually resolve that dependency within globally-declared <code>@bar</code> (<code>@bar//some:target</code>).   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | required |  |
-| <a id="rust_toolchain_repository-rustfmt_version"></a>rustfmt_version |  The version of the tool among "nightly", "beta", or an exact version.   | String | optional | "" |
-| <a id="rust_toolchain_repository-sha256s"></a>sha256s |  A dict associating tool subdirectories to sha256 hashes. See [rust_repositories](#rust_repositories) for more details.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
-| <a id="rust_toolchain_repository-toolchain_name_prefix"></a>toolchain_name_prefix |  The per-target prefix expected for the rust_toolchain declarations in the parent workspace.   | String | optional | "" |
-| <a id="rust_toolchain_repository-urls"></a>urls |  A list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format).   | List of strings | optional | ["https://static.rust-lang.org/dist/{}.tar.gz"] |
-| <a id="rust_toolchain_repository-version"></a>version |  The version of the tool among "nightly", "beta", or an exact version.   | String | required |  |
-
-
-<a id="#rust_toolchain_repository_proxy"></a>
+<a id="rust_toolchain_repository_proxy"></a>
 
 ## rust_toolchain_repository_proxy
 
 <pre>
-rust_toolchain_repository_proxy(<a href="#rust_toolchain_repository_proxy-name">name</a>, <a href="#rust_toolchain_repository_proxy-exec_triple">exec_triple</a>, <a href="#rust_toolchain_repository_proxy-extra_target_triples">extra_target_triples</a>, <a href="#rust_toolchain_repository_proxy-parent_workspace_name">parent_workspace_name</a>,
-                                <a href="#rust_toolchain_repository_proxy-repo_mapping">repo_mapping</a>, <a href="#rust_toolchain_repository_proxy-toolchain_name_prefix">toolchain_name_prefix</a>)
+rust_toolchain_repository_proxy(<a href="#rust_toolchain_repository_proxy-name">name</a>, <a href="#rust_toolchain_repository_proxy-exec_compatible_with">exec_compatible_with</a>, <a href="#rust_toolchain_repository_proxy-repo_mapping">repo_mapping</a>, <a href="#rust_toolchain_repository_proxy-target_compatible_with">target_compatible_with</a>,
+                                <a href="#rust_toolchain_repository_proxy-toolchain">toolchain</a>, <a href="#rust_toolchain_repository_proxy-toolchain_type">toolchain_type</a>)
 </pre>
 
 Generates a toolchain-bearing repository that declares the toolchains from some other rust_toolchain_repository.
@@ -1189,14 +1206,49 @@
 | Name  | Description | Type | Mandatory | Default |
 | :------------- | :------------- | :------------- | :------------- | :------------- |
 | <a id="rust_toolchain_repository_proxy-name"></a>name |  A unique name for this repository.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
-| <a id="rust_toolchain_repository_proxy-exec_triple"></a>exec_triple |  The Rust-style target triple for the compilation platform   | String | required |  |
-| <a id="rust_toolchain_repository_proxy-extra_target_triples"></a>extra_target_triples |  The Rust-style triples for extra compilation targets   | List of strings | optional | [] |
-| <a id="rust_toolchain_repository_proxy-parent_workspace_name"></a>parent_workspace_name |  The name of the other rust_toolchain_repository   | String | required |  |
+| <a id="rust_toolchain_repository_proxy-exec_compatible_with"></a>exec_compatible_with |  A list of constraints for the execution platform for this toolchain.   | List of strings | optional | [] |
 | <a id="rust_toolchain_repository_proxy-repo_mapping"></a>repo_mapping |  A dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.&lt;p&gt;For example, an entry <code>"@foo": "@bar"</code> declares that, for any time this repository depends on <code>@foo</code> (such as a dependency on <code>@foo//some:target</code>, it should actually resolve that dependency within globally-declared <code>@bar</code> (<code>@bar//some:target</code>).   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | required |  |
-| <a id="rust_toolchain_repository_proxy-toolchain_name_prefix"></a>toolchain_name_prefix |  The per-target prefix expected for the rust_toolchain declarations in the parent workspace.   | String | optional | "" |
+| <a id="rust_toolchain_repository_proxy-target_compatible_with"></a>target_compatible_with |  A list of constraints for the target platform for this toolchain.   | List of strings | optional | [] |
+| <a id="rust_toolchain_repository_proxy-toolchain"></a>toolchain |  The name of the toolchain implementation target.   | String | required |  |
+| <a id="rust_toolchain_repository_proxy-toolchain_type"></a>toolchain_type |  The toolchain type of the toolchain to declare   | String | required |  |
 
 
-<a id="#rust_wasm_bindgen"></a>
+<a id="rust_toolchain_tools_repository"></a>
+
+## rust_toolchain_tools_repository
+
+<pre>
+rust_toolchain_tools_repository(<a href="#rust_toolchain_tools_repository-name">name</a>, <a href="#rust_toolchain_tools_repository-allocator_library">allocator_library</a>, <a href="#rust_toolchain_tools_repository-auth">auth</a>, <a href="#rust_toolchain_tools_repository-dev_components">dev_components</a>, <a href="#rust_toolchain_tools_repository-edition">edition</a>, <a href="#rust_toolchain_tools_repository-exec_triple">exec_triple</a>,
+                                <a href="#rust_toolchain_tools_repository-include_rustc_srcs">include_rustc_srcs</a>, <a href="#rust_toolchain_tools_repository-iso_date">iso_date</a>, <a href="#rust_toolchain_tools_repository-repo_mapping">repo_mapping</a>, <a href="#rust_toolchain_tools_repository-rustfmt_version">rustfmt_version</a>, <a href="#rust_toolchain_tools_repository-sha256s">sha256s</a>,
+                                <a href="#rust_toolchain_tools_repository-target_triple">target_triple</a>, <a href="#rust_toolchain_tools_repository-urls">urls</a>, <a href="#rust_toolchain_tools_repository-version">version</a>)
+</pre>
+
+Composes a single workspace containing the toolchain components for compiling on a given platform to a series of target platforms.
+
+A given instance of this rule should be accompanied by a toolchain_repository_proxy invocation to declare its toolchains to Bazel; the indirection allows separating toolchain selection from toolchain fetching.
+
+**ATTRIBUTES**
+
+
+| Name  | Description | Type | Mandatory | Default |
+| :------------- | :------------- | :------------- | :------------- | :------------- |
+| <a id="rust_toolchain_tools_repository-name"></a>name |  A unique name for this repository.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
+| <a id="rust_toolchain_tools_repository-allocator_library"></a>allocator_library |  Target that provides allocator functions when rust_library targets are embedded in a cc_binary.   | String | optional | "" |
+| <a id="rust_toolchain_tools_repository-auth"></a>auth |  Auth object compatible with repository_ctx.download to use when downloading files. See [repository_ctx.download](https://docs.bazel.build/versions/main/skylark/lib/repository_ctx.html#download) for more details.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
+| <a id="rust_toolchain_tools_repository-dev_components"></a>dev_components |  Whether to download the rustc-dev components (defaults to False). Requires version to be "nightly".   | Boolean | optional | False |
+| <a id="rust_toolchain_tools_repository-edition"></a>edition |  The rust edition to be used by default (2015, 2018, or 2021). If absent, every rule is required to specify its <code>edition</code> attribute.   | String | optional | "" |
+| <a id="rust_toolchain_tools_repository-exec_triple"></a>exec_triple |  The Rust-style target that this compiler runs on   | String | required |  |
+| <a id="rust_toolchain_tools_repository-include_rustc_srcs"></a>include_rustc_srcs |  Whether to download and unpack the rustc source files. These are very large, and slow to unpack, but are required to support rust analyzer. An environment variable <code>RULES_RUST_TOOLCHAIN_INCLUDE_RUSTC_SRCS</code> can also be used to control this attribute. This variable will take precedence over the hard coded attribute. Setting it to <code>true</code> to activates this attribute where all other values deactivate it.   | Boolean | optional | False |
+| <a id="rust_toolchain_tools_repository-iso_date"></a>iso_date |  The date of the tool (or None, if the version is a specific version).   | String | optional | "" |
+| <a id="rust_toolchain_tools_repository-repo_mapping"></a>repo_mapping |  A dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.&lt;p&gt;For example, an entry <code>"@foo": "@bar"</code> declares that, for any time this repository depends on <code>@foo</code> (such as a dependency on <code>@foo//some:target</code>, it should actually resolve that dependency within globally-declared <code>@bar</code> (<code>@bar//some:target</code>).   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | required |  |
+| <a id="rust_toolchain_tools_repository-rustfmt_version"></a>rustfmt_version |  The version of the tool among "nightly", "beta", or an exact version.   | String | optional | "" |
+| <a id="rust_toolchain_tools_repository-sha256s"></a>sha256s |  A dict associating tool subdirectories to sha256 hashes. See [rust_repositories](#rust_repositories) for more details.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
+| <a id="rust_toolchain_tools_repository-target_triple"></a>target_triple |  The Rust-style target that this compiler builds for   | String | required |  |
+| <a id="rust_toolchain_tools_repository-urls"></a>urls |  A list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format).   | List of strings | optional | ["https://static.rust-lang.org/dist/{}.tar.gz"] |
+| <a id="rust_toolchain_tools_repository-version"></a>version |  The version of the tool among "nightly", "beta", or an exact version.   | String | required |  |
+
+
+<a id="rust_wasm_bindgen"></a>
 
 ## rust_wasm_bindgen
 
@@ -1233,7 +1285,7 @@
 | <a id="rust_wasm_bindgen-wasm_file"></a>wasm_file |  The <code>.wasm</code> file or crate to generate bindings for.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | required |  |
 
 
-<a id="#rust_wasm_bindgen_toolchain"></a>
+<a id="rust_wasm_bindgen_toolchain"></a>
 
 ## rust_wasm_bindgen_toolchain
 
@@ -1256,7 +1308,7 @@
 toolchain(
     name = "wasm_bindgen_toolchain",
     toolchain = "wasm_bindgen_toolchain_impl",
-    toolchain_type = "@rules_rust//wasm_bindgen:wasm_bindgen_toolchain",
+    toolchain_type = "@rules_rust//wasm_bindgen:toolchain_type",
 )
 ```
 
@@ -1281,7 +1333,7 @@
 | <a id="rust_wasm_bindgen_toolchain-bindgen"></a>bindgen |  The label of a <code>wasm-bindgen-cli</code> executable.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 
 
-<a id="#rustfmt_test"></a>
+<a id="rustfmt_test"></a>
 
 ## rustfmt_test
 
@@ -1300,13 +1352,13 @@
 | <a id="rustfmt_test-targets"></a>targets |  Rust targets to run <code>rustfmt --check</code> on.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 
 
-<a id="#CrateInfo"></a>
+<a id="CrateInfo"></a>
 
 ## CrateInfo
 
 <pre>
-CrateInfo(<a href="#CrateInfo-aliases">aliases</a>, <a href="#CrateInfo-compile_data">compile_data</a>, <a href="#CrateInfo-deps">deps</a>, <a href="#CrateInfo-edition">edition</a>, <a href="#CrateInfo-is_test">is_test</a>, <a href="#CrateInfo-name">name</a>, <a href="#CrateInfo-output">output</a>, <a href="#CrateInfo-owner">owner</a>, <a href="#CrateInfo-proc_macro_deps">proc_macro_deps</a>, <a href="#CrateInfo-root">root</a>,
-          <a href="#CrateInfo-rustc_env">rustc_env</a>, <a href="#CrateInfo-rustc_env_files">rustc_env_files</a>, <a href="#CrateInfo-srcs">srcs</a>, <a href="#CrateInfo-type">type</a>, <a href="#CrateInfo-wrapped_crate_type">wrapped_crate_type</a>)
+CrateInfo(<a href="#CrateInfo-aliases">aliases</a>, <a href="#CrateInfo-compile_data">compile_data</a>, <a href="#CrateInfo-deps">deps</a>, <a href="#CrateInfo-edition">edition</a>, <a href="#CrateInfo-is_test">is_test</a>, <a href="#CrateInfo-metadata">metadata</a>, <a href="#CrateInfo-name">name</a>, <a href="#CrateInfo-output">output</a>, <a href="#CrateInfo-owner">owner</a>,
+          <a href="#CrateInfo-proc_macro_deps">proc_macro_deps</a>, <a href="#CrateInfo-root">root</a>, <a href="#CrateInfo-rustc_env">rustc_env</a>, <a href="#CrateInfo-rustc_env_files">rustc_env_files</a>, <a href="#CrateInfo-srcs">srcs</a>, <a href="#CrateInfo-type">type</a>, <a href="#CrateInfo-wrapped_crate_type">wrapped_crate_type</a>)
 </pre>
 
 A provider containing general Crate information.
@@ -1321,6 +1373,7 @@
 | <a id="CrateInfo-deps"></a>deps |  depset[DepVariantInfo]: This crate's (rust or cc) dependencies' providers.    |
 | <a id="CrateInfo-edition"></a>edition |  str: The edition of this crate.    |
 | <a id="CrateInfo-is_test"></a>is_test |  bool: If the crate is being compiled in a test context    |
+| <a id="CrateInfo-metadata"></a>metadata |  File: The rmeta file produced for this crate. It is optional.    |
 | <a id="CrateInfo-name"></a>name |  str: The name of this crate.    |
 | <a id="CrateInfo-output"></a>output |  File: The output File that will be produced, depends on crate type.    |
 | <a id="CrateInfo-owner"></a>owner |  Label: The label of the target that produced this CrateInfo    |
@@ -1333,13 +1386,14 @@
 | <a id="CrateInfo-wrapped_crate_type"></a>wrapped_crate_type |  str, optional: The original crate type for targets generated using a previously defined crate (typically tests using the <code>rust_test::crate</code> attribute)    |
 
 
-<a id="#DepInfo"></a>
+<a id="DepInfo"></a>
 
 ## DepInfo
 
 <pre>
 DepInfo(<a href="#DepInfo-dep_env">dep_env</a>, <a href="#DepInfo-direct_crates">direct_crates</a>, <a href="#DepInfo-link_search_path_files">link_search_path_files</a>, <a href="#DepInfo-transitive_build_infos">transitive_build_infos</a>,
-        <a href="#DepInfo-transitive_crate_outputs">transitive_crate_outputs</a>, <a href="#DepInfo-transitive_crates">transitive_crates</a>, <a href="#DepInfo-transitive_noncrates">transitive_noncrates</a>)
+        <a href="#DepInfo-transitive_crate_outputs">transitive_crate_outputs</a>, <a href="#DepInfo-transitive_crates">transitive_crates</a>, <a href="#DepInfo-transitive_metadata_outputs">transitive_metadata_outputs</a>,
+        <a href="#DepInfo-transitive_noncrates">transitive_noncrates</a>)
 </pre>
 
 A provider containing information about a Crate's dependencies.
@@ -1355,16 +1409,17 @@
 | <a id="DepInfo-transitive_build_infos"></a>transitive_build_infos |  depset[BuildInfo]    |
 | <a id="DepInfo-transitive_crate_outputs"></a>transitive_crate_outputs |  depset[File]: All transitive crate outputs.    |
 | <a id="DepInfo-transitive_crates"></a>transitive_crates |  depset[CrateInfo]    |
+| <a id="DepInfo-transitive_metadata_outputs"></a>transitive_metadata_outputs |  depset[File]: All transitive metadata dependencies (.rmeta, for crates that provide them) and all transitive object dependencies (.rlib) for crates that don't provide metadata.    |
 | <a id="DepInfo-transitive_noncrates"></a>transitive_noncrates |  depset[LinkerInput]: All transitive dependencies that aren't crates.    |
 
 
-<a id="#StdLibInfo"></a>
+<a id="StdLibInfo"></a>
 
 ## StdLibInfo
 
 <pre>
 StdLibInfo(<a href="#StdLibInfo-alloc_files">alloc_files</a>, <a href="#StdLibInfo-between_alloc_and_core_files">between_alloc_and_core_files</a>, <a href="#StdLibInfo-between_core_and_std_files">between_core_and_std_files</a>, <a href="#StdLibInfo-core_files">core_files</a>,
-           <a href="#StdLibInfo-dot_a_files">dot_a_files</a>, <a href="#StdLibInfo-memchr_files">memchr_files</a>, <a href="#StdLibInfo-self_contained_files">self_contained_files</a>, <a href="#StdLibInfo-srcs">srcs</a>, <a href="#StdLibInfo-std_files">std_files</a>, <a href="#StdLibInfo-std_rlibs">std_rlibs</a>)
+           <a href="#StdLibInfo-dot_a_files">dot_a_files</a>, <a href="#StdLibInfo-memchr_files">memchr_files</a>, <a href="#StdLibInfo-self_contained_files">self_contained_files</a>, <a href="#StdLibInfo-srcs">srcs</a>, <a href="#StdLibInfo-std_files">std_files</a>, <a href="#StdLibInfo-std_rlibs">std_rlibs</a>, <a href="#StdLibInfo-test_files">test_files</a>)
 </pre>
 
 A collection of files either found within the `rust-stdlib` artifact or generated based on existing files.
@@ -1384,9 +1439,10 @@
 | <a id="StdLibInfo-srcs"></a>srcs |  List[Target]: All targets from the original <code>srcs</code> attribute.    |
 | <a id="StdLibInfo-std_files"></a>std_files |  Depset[File]: <code>.a</code> files associated with the <code>std</code> module.    |
 | <a id="StdLibInfo-std_rlibs"></a>std_rlibs |  List[File]: All <code>.rlib</code> files    |
+| <a id="StdLibInfo-test_files"></a>test_files |  Depset[File]: <code>.a</code> files associated with the <code>test</code> module.    |
 
 
-<a id="#cargo_build_script"></a>
+<a id="cargo_build_script"></a>
 
 ## cargo_build_script
 
@@ -1473,7 +1529,7 @@
 | <a id="cargo_build_script-kwargs"></a>kwargs |  Forwards to the underlying <code>rust_binary</code> rule.   |  none |
 
 
-<a id="#cargo_env"></a>
+<a id="cargo_env"></a>
 
 ## cargo_env
 
@@ -1520,7 +1576,31 @@
 str: A json encoded string of the environment variables
 
 
-<a id="#rust_bindgen_library"></a>
+<a id="rules_rust_dependencies"></a>
+
+## rules_rust_dependencies
+
+<pre>
+rules_rust_dependencies()
+</pre>
+
+Dependencies used in the implementation of `rules_rust`.
+
+
+
+<a id="rust_bindgen_dependencies"></a>
+
+## rust_bindgen_dependencies
+
+<pre>
+rust_bindgen_dependencies()
+</pre>
+
+Declare dependencies needed for bindgen.
+
+
+
+<a id="rust_bindgen_library"></a>
 
 ## rust_bindgen_library
 
@@ -1547,19 +1627,28 @@
 | <a id="rust_bindgen_library-kwargs"></a>kwargs |  Arguments to forward to the underlying <code>rust_library</code> rule.   |  none |
 
 
-<a id="#rust_bindgen_repositories"></a>
+<a id="rust_bindgen_register_toolchains"></a>
 
-## rust_bindgen_repositories
+## rust_bindgen_register_toolchains
 
 <pre>
-rust_bindgen_repositories()
+rust_bindgen_register_toolchains(<a href="#rust_bindgen_register_toolchains-register_toolchains">register_toolchains</a>)
 </pre>
 
-Declare dependencies needed for bindgen.
+Registers the default toolchains for the `rules_rust` [bindgen][bg] rules.
+
+[bg]: https://rust-lang.github.io/rust-bindgen/
 
 
+**PARAMETERS**
 
-<a id="#rust_proto_repositories"></a>
+
+| Name  | Description | Default Value |
+| :------------- | :------------- | :------------- |
+| <a id="rust_bindgen_register_toolchains-register_toolchains"></a>register_toolchains |  Whether or not to register toolchains.   |  <code>True</code> |
+
+
+<a id="rust_proto_repositories"></a>
 
 ## rust_proto_repositories
 
@@ -1577,7 +1666,7 @@
 | <a id="rust_proto_repositories-register_default_toolchain"></a>register_default_toolchain |  If True, the default [rust_proto_toolchain](#rust_proto_toolchain) (<code>@rules_rust//proto:default-proto-toolchain</code>) is registered. This toolchain requires a set of dependencies that were generated using [cargo raze](https://github.com/google/cargo-raze). These will also be loaded.   |  <code>True</code> |
 
 
-<a id="#rust_proto_transitive_repositories"></a>
+<a id="rust_proto_transitive_repositories"></a>
 
 ## rust_proto_transitive_repositories
 
@@ -1591,7 +1680,52 @@
 
 
 
-<a id="#rust_repositories"></a>
+<a id="rust_register_toolchains"></a>
+
+## rust_register_toolchains
+
+<pre>
+rust_register_toolchains(<a href="#rust_register_toolchains-dev_components">dev_components</a>, <a href="#rust_register_toolchains-edition">edition</a>, <a href="#rust_register_toolchains-include_rustc_srcs">include_rustc_srcs</a>, <a href="#rust_register_toolchains-allocator_library">allocator_library</a>, <a href="#rust_register_toolchains-iso_date">iso_date</a>,
+                         <a href="#rust_register_toolchains-register_toolchains">register_toolchains</a>, <a href="#rust_register_toolchains-rustfmt_version">rustfmt_version</a>, <a href="#rust_register_toolchains-sha256s">sha256s</a>, <a href="#rust_register_toolchains-extra_target_triples">extra_target_triples</a>, <a href="#rust_register_toolchains-urls">urls</a>,
+                         <a href="#rust_register_toolchains-version">version</a>)
+</pre>
+
+Emits a default set of toolchains for Linux, MacOS, and Freebsd
+
+Skip this macro and call the `rust_repository_set` macros directly if you need a compiler for     other hosts or for additional target triples.
+
+The `sha256` attribute represents a dict associating tool subdirectories to sha256 hashes. As an example:
+```python
+{
+    "rust-1.46.0-x86_64-unknown-linux-gnu": "e3b98bc3440fe92817881933f9564389eccb396f5f431f33d48b979fa2fbdcf5",
+    "rustfmt-1.4.12-x86_64-unknown-linux-gnu": "1894e76913303d66bf40885a601462844eec15fca9e76a6d13c390d7000d64b0",
+    "rust-std-1.46.0-x86_64-unknown-linux-gnu": "ac04aef80423f612c0079829b504902de27a6997214eb58ab0765d02f7ec1dbc",
+}
+```
+This would match for `exec_triple = "x86_64-unknown-linux-gnu"`.  If not specified, rules_rust pulls from a non-exhaustive     list of known checksums..
+
+See `load_arbitrary_tool` in `@rules_rust//rust:repositories.bzl` for more details.
+
+
+**PARAMETERS**
+
+
+| Name  | Description | Default Value |
+| :------------- | :------------- | :------------- |
+| <a id="rust_register_toolchains-dev_components"></a>dev_components |  Whether to download the rustc-dev components (defaults to False). Requires version to be "nightly".   |  <code>False</code> |
+| <a id="rust_register_toolchains-edition"></a>edition |  The rust edition to be used by default (2015, 2018, or 2021). If absent, every target is required to specify its <code>edition</code> attribute.   |  <code>None</code> |
+| <a id="rust_register_toolchains-include_rustc_srcs"></a>include_rustc_srcs |  Whether to download rustc's src code. This is required in order to use rust-analyzer support. See [rust_toolchain_repository.include_rustc_srcs](#rust_toolchain_repository-include_rustc_srcs). for more details   |  <code>False</code> |
+| <a id="rust_register_toolchains-allocator_library"></a>allocator_library |  Target that provides allocator functions when rust_library targets are embedded in a cc_binary.   |  <code>None</code> |
+| <a id="rust_register_toolchains-iso_date"></a>iso_date |  The date of the nightly or beta release (ignored if the version is a specific version).   |  <code>None</code> |
+| <a id="rust_register_toolchains-register_toolchains"></a>register_toolchains |  If true, repositories will be generated to produce and register <code>rust_toolchain</code> targets.   |  <code>True</code> |
+| <a id="rust_register_toolchains-rustfmt_version"></a>rustfmt_version |  The version of rustfmt. Either "nightly", "beta", or an exact version. Defaults to <code>version</code> if not specified.   |  <code>None</code> |
+| <a id="rust_register_toolchains-sha256s"></a>sha256s |  A dict associating tool subdirectories to sha256 hashes.   |  <code>None</code> |
+| <a id="rust_register_toolchains-extra_target_triples"></a>extra_target_triples |  Additional rust-style targets that rust toolchains should support.   |  <code>["wasm32-unknown-unknown", "wasm32-wasi"]</code> |
+| <a id="rust_register_toolchains-urls"></a>urls |  A list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format).   |  <code>["https://static.rust-lang.org/dist/{}.tar.gz"]</code> |
+| <a id="rust_register_toolchains-version"></a>version |  The version of Rust. Either "nightly", "beta", or an exact version. Defaults to a modern version.   |  <code>"1.62.1"</code> |
+
+
+<a id="rust_repositories"></a>
 
 ## rust_repositories
 
@@ -1609,7 +1743,7 @@
 | <a id="rust_repositories-kwargs"></a>kwargs |  Keyword arguments for the <code>rust_register_toolchains</code> macro.   |  none |
 
 
-<a id="#rust_repository_set"></a>
+<a id="rust_repository_set"></a>
 
 ## rust_repository_set
 
@@ -1637,7 +1771,7 @@
 | <a id="rust_repository_set-extra_target_triples"></a>extra_target_triples |  Additional rust-style targets that this set of toolchains should support. Defaults to [].   |  <code>[]</code> |
 | <a id="rust_repository_set-iso_date"></a>iso_date |  The date of the tool. Defaults to None.   |  <code>None</code> |
 | <a id="rust_repository_set-rustfmt_version"></a>rustfmt_version |  The version of rustfmt to be associated with the toolchain. Defaults to None.   |  <code>None</code> |
-| <a id="rust_repository_set-edition"></a>edition |  The rust edition to be used by default (2015, 2018 (if None), or 2021).   |  <code>None</code> |
+| <a id="rust_repository_set-edition"></a>edition |  The rust edition to be used by default (2015, 2018, or 2021). If absent, every rule is required to specify its <code>edition</code> attribute.   |  <code>None</code> |
 | <a id="rust_repository_set-dev_components"></a>dev_components |  Whether to download the rustc-dev components. Requires version to be "nightly". Defaults to False.   |  <code>False</code> |
 | <a id="rust_repository_set-sha256s"></a>sha256s |  A dict associating tool subdirectories to sha256 hashes. See [rust_repositories](#rust_repositories) for more details.   |  <code>None</code> |
 | <a id="rust_repository_set-urls"></a>urls |  A list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format). Defaults to ['https://static.rust-lang.org/dist/{}.tar.gz']   |  <code>["https://static.rust-lang.org/dist/{}.tar.gz"]</code> |
@@ -1645,7 +1779,7 @@
 | <a id="rust_repository_set-register_toolchain"></a>register_toolchain |  If True, the generated <code>rust_toolchain</code> target will become a registered toolchain.   |  <code>True</code> |
 
 
-<a id="#rust_test_suite"></a>
+<a id="rust_test_suite"></a>
 
 ## rust_test_suite
 
@@ -1709,25 +1843,83 @@
 | <a id="rust_test_suite-kwargs"></a>kwargs |  Additional keyword arguments for the underyling [rust_test](#rust_test) targets. The <code>tags</code> argument is also passed to the generated <code>test_suite</code> target.   |  none |
 
 
-<a id="#rust_wasm_bindgen_repositories"></a>
+<a id="rust_toolchain_repository"></a>
 
-## rust_wasm_bindgen_repositories
+## rust_toolchain_repository
 
 <pre>
-rust_wasm_bindgen_repositories(<a href="#rust_wasm_bindgen_repositories-register_default_toolchain">register_default_toolchain</a>)
+rust_toolchain_repository(<a href="#rust_toolchain_repository-name">name</a>, <a href="#rust_toolchain_repository-version">version</a>, <a href="#rust_toolchain_repository-exec_triple">exec_triple</a>, <a href="#rust_toolchain_repository-target_triple">target_triple</a>, <a href="#rust_toolchain_repository-exec_compatible_with">exec_compatible_with</a>,
+                          <a href="#rust_toolchain_repository-target_compatible_with">target_compatible_with</a>, <a href="#rust_toolchain_repository-include_rustc_srcs">include_rustc_srcs</a>, <a href="#rust_toolchain_repository-allocator_library">allocator_library</a>, <a href="#rust_toolchain_repository-iso_date">iso_date</a>,
+                          <a href="#rust_toolchain_repository-rustfmt_version">rustfmt_version</a>, <a href="#rust_toolchain_repository-edition">edition</a>, <a href="#rust_toolchain_repository-dev_components">dev_components</a>, <a href="#rust_toolchain_repository-sha256s">sha256s</a>, <a href="#rust_toolchain_repository-urls">urls</a>, <a href="#rust_toolchain_repository-auth">auth</a>)
 </pre>
 
-Declare dependencies needed for [rust_wasm_bindgen](#rust_wasm_bindgen).
+Assembles a remote repository for the given toolchain params, produces a proxy repository     to contain the toolchain declaration, and registers the toolchains.
+
+N.B. A "proxy repository" is needed to allow for registering the toolchain (with constraints)     without actually downloading the toolchain.
+
 
 **PARAMETERS**
 
 
 | Name  | Description | Default Value |
 | :------------- | :------------- | :------------- |
-| <a id="rust_wasm_bindgen_repositories-register_default_toolchain"></a>register_default_toolchain |  If True, the default [rust_wasm_bindgen_toolchain](#rust_wasm_bindgen_toolchain) (<code>@rules_rust//wasm_bindgen:default_wasm_bindgen_toolchain</code>) is registered. This toolchain requires a set of dependencies that were generated using [cargo raze](https://github.com/google/cargo-raze). These will also be loaded.   |  <code>True</code> |
+| <a id="rust_toolchain_repository-name"></a>name |  The name of the generated repository   |  none |
+| <a id="rust_toolchain_repository-version"></a>version |  The version of the tool among "nightly", "beta', or an exact version.   |  none |
+| <a id="rust_toolchain_repository-exec_triple"></a>exec_triple |  The Rust-style target that this compiler runs on.   |  none |
+| <a id="rust_toolchain_repository-target_triple"></a>target_triple |  The Rust-style target to build for.   |  none |
+| <a id="rust_toolchain_repository-exec_compatible_with"></a>exec_compatible_with |  A list of constraints for the execution platform for this toolchain.   |  <code>None</code> |
+| <a id="rust_toolchain_repository-target_compatible_with"></a>target_compatible_with |  A list of constraints for the target platform for this toolchain.   |  <code>None</code> |
+| <a id="rust_toolchain_repository-include_rustc_srcs"></a>include_rustc_srcs |  Whether to download rustc's src code. This is required in order to use rust-analyzer support.   |  <code>False</code> |
+| <a id="rust_toolchain_repository-allocator_library"></a>allocator_library |  Target that provides allocator functions when rust_library targets are embedded in a cc_binary.   |  <code>None</code> |
+| <a id="rust_toolchain_repository-iso_date"></a>iso_date |  The date of the tool.   |  <code>None</code> |
+| <a id="rust_toolchain_repository-rustfmt_version"></a>rustfmt_version |  The version of rustfmt to be associated with the toolchain.   |  <code>None</code> |
+| <a id="rust_toolchain_repository-edition"></a>edition |  The rust edition to be used by default (2015, 2018, or 2021). If absent, every rule is required to specify its <code>edition</code> attribute.   |  <code>None</code> |
+| <a id="rust_toolchain_repository-dev_components"></a>dev_components |  Whether to download the rustc-dev components. Requires version to be "nightly". Defaults to False.   |  <code>False</code> |
+| <a id="rust_toolchain_repository-sha256s"></a>sha256s |  A dict associating tool subdirectories to sha256 hashes. See [rust_repositories](#rust_repositories) for more details.   |  <code>None</code> |
+| <a id="rust_toolchain_repository-urls"></a>urls |  A list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format). Defaults to ['https://static.rust-lang.org/dist/{}.tar.gz']   |  <code>["https://static.rust-lang.org/dist/{}.tar.gz"]</code> |
+| <a id="rust_toolchain_repository-auth"></a>auth |  Auth object compatible with repository_ctx.download to use when downloading files. See [repository_ctx.download](https://docs.bazel.build/versions/main/skylark/lib/repository_ctx.html#download) for more details.   |  <code>None</code> |
+
+**RETURNS**
+
+str: The name of the registerable toolchain created by this rule.
 
 
-<a id="#rust_analyzer_aspect"></a>
+<a id="rust_wasm_bindgen_dependencies"></a>
+
+## rust_wasm_bindgen_dependencies
+
+<pre>
+rust_wasm_bindgen_dependencies()
+</pre>
+
+Declare dependencies needed for the `rules_rust` [wasm-bindgen][wb] rules.
+
+[wb]: https://github.com/rustwasm/wasm-bindgen
+
+
+
+<a id="rust_wasm_bindgen_register_toolchains"></a>
+
+## rust_wasm_bindgen_register_toolchains
+
+<pre>
+rust_wasm_bindgen_register_toolchains(<a href="#rust_wasm_bindgen_register_toolchains-register_toolchains">register_toolchains</a>)
+</pre>
+
+Registers the default toolchains for the `rules_rust` [wasm-bindgen][wb] rules.
+
+[wb]: https://github.com/rustwasm/wasm-bindgen
+
+
+**PARAMETERS**
+
+
+| Name  | Description | Default Value |
+| :------------- | :------------- | :------------- |
+| <a id="rust_wasm_bindgen_register_toolchains-register_toolchains"></a>register_toolchains |  Whether or not to register toolchains.   |  <code>True</code> |
+
+
+<a id="rust_analyzer_aspect"></a>
 
 ## rust_analyzer_aspect
 
@@ -1745,6 +1937,7 @@
 | deps| String |
 | proc_macro_deps| String |
 | crate| String |
+| actual| String |
 
 
 **ATTRIBUTES**
@@ -1755,7 +1948,7 @@
 | <a id="rust_analyzer_aspect-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |   |
 
 
-<a id="#rust_clippy_aspect"></a>
+<a id="rust_clippy_aspect"></a>
 
 ## rust_clippy_aspect
 
@@ -1803,7 +1996,7 @@
 | <a id="rust_clippy_aspect-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |   |
 
 
-<a id="#rustfmt_aspect"></a>
+<a id="rustfmt_aspect"></a>
 
 ## rustfmt_aspect
 
@@ -1824,8 +2017,8 @@
 [cs]: https://rust-lang.github.io/rustfmt/
 
 This aspect is executed on any target which provides the `CrateInfo` provider. However
-users may tag a target with `norustfmt` to have it skipped. Additionally, generated
-source files are also ignored by this aspect.
+users may tag a target with `no-rustfmt` or `no-format` to have it skipped. Additionally,
+generated source files are also ignored by this aspect.
 
 
 **ASPECT ATTRIBUTES**
diff --git a/third_party/rules_rust/docs/index.md b/third_party/rules_rust/docs/index.md
index 022d88c..6bce30e 100644
--- a/third_party/rules_rust/docs/index.md
+++ b/third_party/rules_rust/docs/index.md
@@ -18,13 +18,14 @@
 ```python
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 
+# To find additional information on this release or newer ones visit:
+# https://github.com/bazelbuild/rules_rust/releases
 http_archive(
     name = "rules_rust",
-    sha256 = "531bdd470728b61ce41cf7604dc4f9a115983e455d46ac1d0c1632f613ab9fc3",
-    strip_prefix = "rules_rust-d8238877c0e552639d3e057aadd6bfcf37592408",
+    sha256 = "6bfe75125e74155955d8a9854a8811365e6c0f3d33ed700bc17f39e32522c822",
     urls = [
-        # `main` branch as of 2021-08-23
-        "https://github.com/bazelbuild/rules_rust/archive/d8238877c0e552639d3e057aadd6bfcf37592408.tar.gz",
+        "https://mirror.bazel.build/github.com/bazelbuild/rules_rust/releases/download/0.9.0/rules_rust-v0.9.0.tar.gz",
+        "https://github.com/bazelbuild/rules_rust/releases/download/0.9.0/rules_rust-v0.9.0.tar.gz",
     ],
 )
 
@@ -36,7 +37,7 @@
 ```
 
 The rules are under active development, as such the lastest commit on the
-`main` branch should be used. `main` is only tested against `4.0.0` as the
+`main` branch should be used. `main` is only tested against `5.0.0` as the
 minimum supported version of Bazel. Though previous versions may still be
 functional in certain environments.
 
@@ -46,40 +47,38 @@
 - [rust_doc](rust_doc.md): rules for generating and testing rust documentation.
 - [rust_clippy](rust_clippy.md): rules for running [clippy](https://github.com/rust-lang/rust-clippy#readme).
 - [rust_fmt](rust_fmt.md): rules for running [rustfmt](https://github.com/rust-lang/rustfmt#readme).
-- [rust_proto](rust_proto.md): rules for generating [protobuf](https://developers.google.com/protocol-buffers).
-  and [gRPC](https://grpc.io) stubs.
+- [rust_proto](rust_proto.md): rules for generating [protobuf](https://developers.google.com/protocol-buffers) and [gRPC](https://grpc.io) stubs.
 - [rust_bindgen](rust_bindgen.md): rules for generating C++ bindings.
 - [rust_wasm_bindgen](rust_wasm_bindgen.md): rules for generating [WebAssembly](https://www.rust-lang.org/what/wasm) bindings.
 - [cargo](cargo.md): Rules dedicated to Cargo compatibility. ie: [`build.rs` scripts](https://doc.rust-lang.org/cargo/reference/build-scripts.html).
+- [crate_universe](crate_universe.md): Rules for generating Bazel targets for external crate depednencies.
 
 You can also browse the [full API in one page](flatten.md).
 
 ### Experimental rules
 
-- [crate_universe](crate_universe.md): A repository rule for fetching dependencies from a crate registry.
 - [rust_analyzer](rust_analyzer.md): rules for generating `rust-project.json` files for [rust-analyzer](https://rust-analyzer.github.io/)
 
 ## Specifying Rust version
 
-To build with a particular version of the Rust compiler, pass that version to [`rust_repositories`](flatten.md#rust_repositories):
+To build with a particular version of the Rust compiler, pass that version to [`rust_register_toolchains`](flatten.md#rust_register_toolchains):
 
 ```python
-rust_repositories(version = "1.53.0", edition="2018")
+rust_register_toolchains(version = "1.62.1", edition="2018")
 ```
 
 As well as an exact version, `version` can be set to `"nightly"` or `"beta"`. If set to these values, `iso_date` must also be set:
 
 ```python
-rust_repositories(version = "nightly", iso_date = "2021-06-16", edition="2018")
+rust_register_toolchains(version = "nightly", iso_date = "2022-07-18", edition="2018")
 ```
 
 Similarly, `rustfmt_version` may also be configured:
 
 ```python
-rust_repositories(rustfmt_version = "1.53.0")
+rust_register_toolchains(rustfmt_version = "1.62.1")
 ```
 
 ## External Dependencies
 
-Currently, the most common approach to managing external dependencies is using
-[cargo-raze](https://github.com/google/cargo-raze) to generate `BUILD` files for Cargo crates.
+[crate_universe](crate_universe.md) is a tool built into `rules_rust` that can be used to fetch dependencies. Additionally, [cargo-raze](https://github.com/google/cargo-raze) is an older third-party which can also fetch dependencies.
diff --git a/third_party/rules_rust/docs/providers.md b/third_party/rules_rust/docs/providers.md
index 713d618..11f77b7 100644
--- a/third_party/rules_rust/docs/providers.md
+++ b/third_party/rules_rust/docs/providers.md
@@ -5,13 +5,13 @@
 * [DepInfo](#DepInfo)
 * [StdLibInfo](#StdLibInfo)
 
-<a id="#CrateInfo"></a>
+<a id="CrateInfo"></a>
 
 ## CrateInfo
 
 <pre>
-CrateInfo(<a href="#CrateInfo-aliases">aliases</a>, <a href="#CrateInfo-compile_data">compile_data</a>, <a href="#CrateInfo-deps">deps</a>, <a href="#CrateInfo-edition">edition</a>, <a href="#CrateInfo-is_test">is_test</a>, <a href="#CrateInfo-name">name</a>, <a href="#CrateInfo-output">output</a>, <a href="#CrateInfo-owner">owner</a>, <a href="#CrateInfo-proc_macro_deps">proc_macro_deps</a>, <a href="#CrateInfo-root">root</a>,
-          <a href="#CrateInfo-rustc_env">rustc_env</a>, <a href="#CrateInfo-rustc_env_files">rustc_env_files</a>, <a href="#CrateInfo-srcs">srcs</a>, <a href="#CrateInfo-type">type</a>, <a href="#CrateInfo-wrapped_crate_type">wrapped_crate_type</a>)
+CrateInfo(<a href="#CrateInfo-aliases">aliases</a>, <a href="#CrateInfo-compile_data">compile_data</a>, <a href="#CrateInfo-deps">deps</a>, <a href="#CrateInfo-edition">edition</a>, <a href="#CrateInfo-is_test">is_test</a>, <a href="#CrateInfo-metadata">metadata</a>, <a href="#CrateInfo-name">name</a>, <a href="#CrateInfo-output">output</a>, <a href="#CrateInfo-owner">owner</a>,
+          <a href="#CrateInfo-proc_macro_deps">proc_macro_deps</a>, <a href="#CrateInfo-root">root</a>, <a href="#CrateInfo-rustc_env">rustc_env</a>, <a href="#CrateInfo-rustc_env_files">rustc_env_files</a>, <a href="#CrateInfo-srcs">srcs</a>, <a href="#CrateInfo-type">type</a>, <a href="#CrateInfo-wrapped_crate_type">wrapped_crate_type</a>)
 </pre>
 
 A provider containing general Crate information.
@@ -26,6 +26,7 @@
 | <a id="CrateInfo-deps"></a>deps |  depset[DepVariantInfo]: This crate's (rust or cc) dependencies' providers.    |
 | <a id="CrateInfo-edition"></a>edition |  str: The edition of this crate.    |
 | <a id="CrateInfo-is_test"></a>is_test |  bool: If the crate is being compiled in a test context    |
+| <a id="CrateInfo-metadata"></a>metadata |  File: The rmeta file produced for this crate. It is optional.    |
 | <a id="CrateInfo-name"></a>name |  str: The name of this crate.    |
 | <a id="CrateInfo-output"></a>output |  File: The output File that will be produced, depends on crate type.    |
 | <a id="CrateInfo-owner"></a>owner |  Label: The label of the target that produced this CrateInfo    |
@@ -38,13 +39,14 @@
 | <a id="CrateInfo-wrapped_crate_type"></a>wrapped_crate_type |  str, optional: The original crate type for targets generated using a previously defined crate (typically tests using the <code>rust_test::crate</code> attribute)    |
 
 
-<a id="#DepInfo"></a>
+<a id="DepInfo"></a>
 
 ## DepInfo
 
 <pre>
 DepInfo(<a href="#DepInfo-dep_env">dep_env</a>, <a href="#DepInfo-direct_crates">direct_crates</a>, <a href="#DepInfo-link_search_path_files">link_search_path_files</a>, <a href="#DepInfo-transitive_build_infos">transitive_build_infos</a>,
-        <a href="#DepInfo-transitive_crate_outputs">transitive_crate_outputs</a>, <a href="#DepInfo-transitive_crates">transitive_crates</a>, <a href="#DepInfo-transitive_noncrates">transitive_noncrates</a>)
+        <a href="#DepInfo-transitive_crate_outputs">transitive_crate_outputs</a>, <a href="#DepInfo-transitive_crates">transitive_crates</a>, <a href="#DepInfo-transitive_metadata_outputs">transitive_metadata_outputs</a>,
+        <a href="#DepInfo-transitive_noncrates">transitive_noncrates</a>)
 </pre>
 
 A provider containing information about a Crate's dependencies.
@@ -60,16 +62,17 @@
 | <a id="DepInfo-transitive_build_infos"></a>transitive_build_infos |  depset[BuildInfo]    |
 | <a id="DepInfo-transitive_crate_outputs"></a>transitive_crate_outputs |  depset[File]: All transitive crate outputs.    |
 | <a id="DepInfo-transitive_crates"></a>transitive_crates |  depset[CrateInfo]    |
+| <a id="DepInfo-transitive_metadata_outputs"></a>transitive_metadata_outputs |  depset[File]: All transitive metadata dependencies (.rmeta, for crates that provide them) and all transitive object dependencies (.rlib) for crates that don't provide metadata.    |
 | <a id="DepInfo-transitive_noncrates"></a>transitive_noncrates |  depset[LinkerInput]: All transitive dependencies that aren't crates.    |
 
 
-<a id="#StdLibInfo"></a>
+<a id="StdLibInfo"></a>
 
 ## StdLibInfo
 
 <pre>
 StdLibInfo(<a href="#StdLibInfo-alloc_files">alloc_files</a>, <a href="#StdLibInfo-between_alloc_and_core_files">between_alloc_and_core_files</a>, <a href="#StdLibInfo-between_core_and_std_files">between_core_and_std_files</a>, <a href="#StdLibInfo-core_files">core_files</a>,
-           <a href="#StdLibInfo-dot_a_files">dot_a_files</a>, <a href="#StdLibInfo-memchr_files">memchr_files</a>, <a href="#StdLibInfo-self_contained_files">self_contained_files</a>, <a href="#StdLibInfo-srcs">srcs</a>, <a href="#StdLibInfo-std_files">std_files</a>, <a href="#StdLibInfo-std_rlibs">std_rlibs</a>)
+           <a href="#StdLibInfo-dot_a_files">dot_a_files</a>, <a href="#StdLibInfo-memchr_files">memchr_files</a>, <a href="#StdLibInfo-self_contained_files">self_contained_files</a>, <a href="#StdLibInfo-srcs">srcs</a>, <a href="#StdLibInfo-std_files">std_files</a>, <a href="#StdLibInfo-std_rlibs">std_rlibs</a>, <a href="#StdLibInfo-test_files">test_files</a>)
 </pre>
 
 A collection of files either found within the `rust-stdlib` artifact or generated based on existing files.
@@ -89,5 +92,6 @@
 | <a id="StdLibInfo-srcs"></a>srcs |  List[Target]: All targets from the original <code>srcs</code> attribute.    |
 | <a id="StdLibInfo-std_files"></a>std_files |  Depset[File]: <code>.a</code> files associated with the <code>std</code> module.    |
 | <a id="StdLibInfo-std_rlibs"></a>std_rlibs |  List[File]: All <code>.rlib</code> files    |
+| <a id="StdLibInfo-test_files"></a>test_files |  Depset[File]: <code>.a</code> files associated with the <code>test</code> module.    |
 
 
diff --git a/third_party/rules_rust/docs/rust_analyzer.md b/third_party/rules_rust/docs/rust_analyzer.md
index 5a3c884..ec10392 100644
--- a/third_party/rules_rust/docs/rust_analyzer.md
+++ b/third_party/rules_rust/docs/rust_analyzer.md
@@ -1,8 +1,8 @@
 <!-- Generated with Stardoc: http://skydoc.bazel.build -->
 # Rust Analyzer
 
-* [rust_analyzer](#rust_analyzer)
 * [rust_analyzer_aspect](#rust_analyzer_aspect)
+* [rust_analyzer_toolchain](#rust_analyzer_toolchain)
 
 
 ## Overview
@@ -14,30 +14,38 @@
 
 ### Setup
 
-First, add the following to the `WORKSPACE` file:
+First, ensure `rules_rust` is setup in your workspace. By default, `rust_register_toolchains` will
+ensure a [rust_analyzer_toolchain](#rust_analyzer_toolchain) is registered within the WORKSPACE.
+
+Next, load the dependencies for the `rust-project.json` generator tool:
 
 ```python
-load("@rules_rust//tools/rust_analyzer:deps.bzl", "rust_analyzer_deps")
+load("@rules_rust//tools/rust_analyzer:deps.bzl", "rust_analyzer_dependencies")
 
-rust_analyzer_deps()
+rust_analyzer_dependencies()
 ```
 
-Next, add the following lines to the `.bazelrc` file of your workspace:
-```
-build --repo_env=RULES_RUST_TOOLCHAIN_INCLUDE_RUSTC_SRCS=true
-```
-
-This will ensure rust source code is available to `rust-analyzer`. Users
-can also set `include_rustc_srcs = True` on any `rust_repository` or
-`rust_repositories` calls in the workspace but the environment variable
-has higher priority and can override the attribute.
-
 Finally, run `bazel run @rules_rust//tools/rust_analyzer:gen_rust_project`
 whenever dependencies change to regenerate the `rust-project.json` file. It
 should be added to `.gitignore` because it is effectively a build artifact.
 Once the `rust-project.json` has been generated in the project root,
 rust-analyzer can pick it up upon restart.
 
+For users who do not use `rust_register_toolchains` to register toolchains, the following can be added
+to their WORKSPACE to register a `rust_analyzer_toolchain`. Please make sure the Rust version used in
+this toolchain matches the version used by the currently registered toolchain or the sources/documentation
+# will not match what's being compiled with and can lead to confusing results.
+
+```python
+load("@rules_rust//rust:repositories.bzl", "rust_analyzer_toolchain_repository")
+
+register_toolchains(rust_analyzer_toolchain_repository(
+    name = "rust_analyzer_toolchain",
+    # This should match the currently registered toolchain.
+    version = "1.62.0",
+))
+```
+
 #### VSCode
 
 To set this up using [VSCode](https://code.visualstudio.com/), users should first install the
@@ -71,27 +79,26 @@
 ```
 
 
-<a id="#rust_analyzer"></a>
+<a id="rust_analyzer_toolchain"></a>
 
-## rust_analyzer
+## rust_analyzer_toolchain
 
 <pre>
-rust_analyzer(<a href="#rust_analyzer-name">name</a>, <a href="#rust_analyzer-targets">targets</a>)
+rust_analyzer_toolchain(<a href="#rust_analyzer_toolchain-name">name</a>, <a href="#rust_analyzer_toolchain-rustc_srcs">rustc_srcs</a>)
 </pre>
 
-Deprecated: gen_rust_project can now create a rust-project.json without a rust_analyzer rule.
-
+A toolchain for [rust-analyzer](https://rust-analyzer.github.io/).
 
 **ATTRIBUTES**
 
 
 | Name  | Description | Type | Mandatory | Default |
 | :------------- | :------------- | :------------- | :------------- | :------------- |
-| <a id="rust_analyzer-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
-| <a id="rust_analyzer-targets"></a>targets |  List of all targets to be included in the index   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
+| <a id="rust_analyzer_toolchain-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
+| <a id="rust_analyzer_toolchain-rustc_srcs"></a>rustc_srcs |  The source code of rustc.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | required |  |
 
 
-<a id="#rust_analyzer_aspect"></a>
+<a id="rust_analyzer_aspect"></a>
 
 ## rust_analyzer_aspect
 
@@ -109,6 +116,7 @@
 | deps| String |
 | proc_macro_deps| String |
 | crate| String |
+| actual| String |
 
 
 **ATTRIBUTES**
diff --git a/third_party/rules_rust/docs/rust_analyzer.vm b/third_party/rules_rust/docs/rust_analyzer.vm
index e366960..863995a 100644
--- a/third_party/rules_rust/docs/rust_analyzer.vm
+++ b/third_party/rules_rust/docs/rust_analyzer.vm
@@ -8,30 +8,38 @@
 
 ### Setup
 
-First, add the following to the `WORKSPACE` file:
+First, ensure `rules_rust` is setup in your workspace. By default, `rust_register_toolchains` will
+ensure a [rust_analyzer_toolchain](#rust_analyzer_toolchain) is registered within the WORKSPACE.
+
+Next, load the dependencies for the `rust-project.json` generator tool:
 
 ```python
-load("@rules_rust//tools/rust_analyzer:deps.bzl", "rust_analyzer_deps")
+load("@rules_rust//tools/rust_analyzer:deps.bzl", "rust_analyzer_dependencies")
 
-rust_analyzer_deps()
+rust_analyzer_dependencies()
 ```
 
-Next, add the following lines to the `.bazelrc` file of your workspace:
-```
-build --repo_env=RULES_RUST_TOOLCHAIN_INCLUDE_RUSTC_SRCS=true
-```
-
-This will ensure rust source code is available to `rust-analyzer`. Users
-can also set `include_rustc_srcs = True` on any `rust_repository` or
-`rust_repositories` calls in the workspace but the environment variable
-has higher priority and can override the attribute.
-
 Finally, run `bazel run @rules_rust//tools/rust_analyzer:gen_rust_project`
 whenever dependencies change to regenerate the `rust-project.json` file. It
 should be added to `.gitignore` because it is effectively a build artifact.
 Once the `rust-project.json` has been generated in the project root,
 rust-analyzer can pick it up upon restart.
 
+For users who do not use `rust_register_toolchains` to register toolchains, the following can be added
+to their WORKSPACE to register a `rust_analyzer_toolchain`. Please make sure the Rust version used in
+this toolchain matches the version used by the currently registered toolchain or the sources/documentation
+# will not match what's being compiled with and can lead to confusing results.
+
+```python
+load("@rules_rust//rust:repositories.bzl", "rust_analyzer_toolchain_repository")
+
+register_toolchains(rust_analyzer_toolchain_repository(
+    name = "rust_analyzer_toolchain",
+    # This should match the currently registered toolchain.
+    version = "1.62.0",
+))
+```
+
 #### VSCode
 
 To set this up using [VSCode](https://code.visualstudio.com/), users should first install the
diff --git a/third_party/rules_rust/docs/rust_bindgen.md b/third_party/rules_rust/docs/rust_bindgen.md
index 6127ede..3e28248 100644
--- a/third_party/rules_rust/docs/rust_bindgen.md
+++ b/third_party/rules_rust/docs/rust_bindgen.md
@@ -2,11 +2,41 @@
 # Rust Bindgen
 
 * [rust_bindgen_library](#rust_bindgen_library)
-* [rust_bindgen_repositories](#rust_bindgen_repositories)
+* [rust_bindgen_dependencies](#rust_bindgen_dependencies)
+* [rust_bindgen_register_toolchains](#rust_bindgen_register_toolchains)
 * [rust_bindgen_toolchain](#rust_bindgen_toolchain)
 * [rust_bindgen](#rust_bindgen)
 
-<a id="#rust_bindgen"></a>
+
+## Overview
+
+These rules are for using [Bindgen][bindgen] to generate [Rust][rust] bindings to C (and some C++) libraries.
+
+[rust]: http://www.rust-lang.org/
+[bindgen]: https://github.com/rust-lang/rust-bindgen
+
+See the [bindgen example](https://github.com/bazelbuild/rules_rust/tree/main/examples/ffi/rust_calling_c/simple/BUILD.bazel#L9) for a more complete example of use.
+
+### Setup
+
+To use the Rust bindgen rules, add the following to your `WORKSPACE` file to add the
+external repositories for the Rust bindgen toolchain (in addition to the [rust rules setup](https://bazelbuild.github.io/rules_rust/#setup)):
+
+```python
+load("@rules_rust//bindgen:repositories.bzl", "rust_bindgen_dependencies", "rust_bindgen_register_toolchains")
+
+rust_bindgen_dependencies()
+
+rust_bindgen_register_toolchains()
+```
+
+---
+
+---
+
+
+
+<a id="rust_bindgen"></a>
 
 ## rust_bindgen
 
@@ -23,13 +53,13 @@
 | :------------- | :------------- | :------------- | :------------- | :------------- |
 | <a id="rust_bindgen-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
 | <a id="rust_bindgen-bindgen_flags"></a>bindgen_flags |  Flags to pass directly to the bindgen executable. See https://rust-lang.github.io/rust-bindgen/ for details.   | List of strings | optional | [] |
-| <a id="rust_bindgen-cc_lib"></a>cc_lib |  The cc_library that contains the .h file. This is used to find the transitive includes.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
+| <a id="rust_bindgen-cc_lib"></a>cc_lib |  The cc_library that contains the <code>.h</code> file. This is used to find the transitive includes.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_bindgen-clang_flags"></a>clang_flags |  Flags to pass directly to the clang executable.   | List of strings | optional | [] |
-| <a id="rust_bindgen-header"></a>header |  The .h file to generate bindings for.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
+| <a id="rust_bindgen-header"></a>header |  The <code>.h</code> file to generate bindings for.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_bindgen-rustfmt"></a>rustfmt |  Enable or disable running rustfmt on the generated file.   | Boolean | optional | True |
 
 
-<a id="#rust_bindgen_toolchain"></a>
+<a id="rust_bindgen_toolchain"></a>
 
 ## rust_bindgen_toolchain
 
@@ -39,6 +69,32 @@
 
 The tools required for the `rust_bindgen` rule.
 
+This rule depends on the [`bindgen`](https://crates.io/crates/bindgen) binary crate, and it 
+in turn depends on both a clang binary and the clang library. To obtain these dependencies,
+`rust_bindgen_dependencies` imports bindgen and its dependencies.
+
+```python
+load("@rules_rust//bindgen:bindgen.bzl", "rust_bindgen_toolchain")
+
+rust_bindgen_toolchain(
+    name = "bindgen_toolchain_impl",
+    bindgen = "//my/rust:bindgen",
+    clang = "//my/clang:clang",
+    libclang = "//my/clang:libclang.so",
+    libstdcxx = "//my/cpp:libstdc++",
+)
+
+toolchain(
+    name = "bindgen_toolchain",
+    toolchain = "bindgen_toolchain_impl",
+    toolchain_type = "@rules_rust//bindgen:toolchain_type",
+)
+```
+
+This toolchain will then need to be registered in the current `WORKSPACE`.
+For additional information, see the [Bazel toolchains documentation](https://docs.bazel.build/versions/master/toolchains.html).
+
+
 **ATTRIBUTES**
 
 
@@ -52,7 +108,19 @@
 | <a id="rust_bindgen_toolchain-rustfmt"></a>rustfmt |  The label of a <code>rustfmt</code> executable. If this is not provided, falls back to the rust_toolchain rustfmt.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 
 
-<a id="#rust_bindgen_library"></a>
+<a id="rust_bindgen_dependencies"></a>
+
+## rust_bindgen_dependencies
+
+<pre>
+rust_bindgen_dependencies()
+</pre>
+
+Declare dependencies needed for bindgen.
+
+
+
+<a id="rust_bindgen_library"></a>
 
 ## rust_bindgen_library
 
@@ -79,15 +147,24 @@
 | <a id="rust_bindgen_library-kwargs"></a>kwargs |  Arguments to forward to the underlying <code>rust_library</code> rule.   |  none |
 
 
-<a id="#rust_bindgen_repositories"></a>
+<a id="rust_bindgen_register_toolchains"></a>
 
-## rust_bindgen_repositories
+## rust_bindgen_register_toolchains
 
 <pre>
-rust_bindgen_repositories()
+rust_bindgen_register_toolchains(<a href="#rust_bindgen_register_toolchains-register_toolchains">register_toolchains</a>)
 </pre>
 
-Declare dependencies needed for bindgen.
+Registers the default toolchains for the `rules_rust` [bindgen][bg] rules.
 
+[bg]: https://rust-lang.github.io/rust-bindgen/
+
+
+**PARAMETERS**
+
+
+| Name  | Description | Default Value |
+| :------------- | :------------- | :------------- |
+| <a id="rust_bindgen_register_toolchains-register_toolchains"></a>register_toolchains |  Whether or not to register toolchains.   |  <code>True</code> |
 
 
diff --git a/third_party/rules_rust/docs/rust_bindgen.vm b/third_party/rules_rust/docs/rust_bindgen.vm
new file mode 100644
index 0000000..faffca3
--- /dev/null
+++ b/third_party/rules_rust/docs/rust_bindgen.vm
@@ -0,0 +1,28 @@
+#[[
+## Overview
+
+These rules are for using [Bindgen][bindgen] to generate [Rust][rust] bindings to C (and some C++) libraries.
+
+[rust]: http://www.rust-lang.org/
+[bindgen]: https://github.com/rust-lang/rust-bindgen
+
+See the [bindgen example](https://github.com/bazelbuild/rules_rust/tree/main/examples/ffi/rust_calling_c/simple/BUILD.bazel#L9) for a more complete example of use.
+
+### Setup
+
+To use the Rust bindgen rules, add the following to your `WORKSPACE` file to add the
+external repositories for the Rust bindgen toolchain (in addition to the [rust rules setup](https://bazelbuild.github.io/rules_rust/#setup)):
+
+```python
+load("@rules_rust//bindgen:repositories.bzl", "rust_bindgen_dependencies", "rust_bindgen_register_toolchains")
+
+rust_bindgen_dependencies()
+
+rust_bindgen_register_toolchains()
+```
+
+---
+
+---
+
+]]#
diff --git a/third_party/rules_rust/docs/rust_clippy.md b/third_party/rules_rust/docs/rust_clippy.md
index 834b23b..3e426f9 100644
--- a/third_party/rules_rust/docs/rust_clippy.md
+++ b/third_party/rules_rust/docs/rust_clippy.md
@@ -27,7 +27,7 @@
 
 This will enable clippy on all [Rust targets](./defs.md).
 
-Note that targets tagged with `noclippy` will not perform clippy checks
+Note that targets tagged with `no-clippy` will not perform clippy checks
 
 To use a local clippy.toml, add the following flag to your `.bazelrc`. Note that due to
 the upstream implementation of clippy, this file must be named either `.clippy.toml` or
@@ -37,7 +37,7 @@
 build --@rules_rust//:clippy.toml=//:clippy.toml
 ```
 
-<a id="#rust_clippy"></a>
+<a id="rust_clippy"></a>
 
 ## rust_clippy
 
@@ -91,7 +91,7 @@
 | <a id="rust_clippy-deps"></a>deps |  Rust targets to run clippy on.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 
 
-<a id="#rust_clippy_aspect"></a>
+<a id="rust_clippy_aspect"></a>
 
 ## rust_clippy_aspect
 
diff --git a/third_party/rules_rust/docs/rust_clippy.vm b/third_party/rules_rust/docs/rust_clippy.vm
index abfc478..245f0ee 100644
--- a/third_party/rules_rust/docs/rust_clippy.vm
+++ b/third_party/rules_rust/docs/rust_clippy.vm
@@ -21,7 +21,7 @@
 
 This will enable clippy on all [Rust targets](./defs.md).
 
-Note that targets tagged with `noclippy` will not perform clippy checks
+Note that targets tagged with `no-clippy` will not perform clippy checks
 
 To use a local clippy.toml, add the following flag to your `.bazelrc`. Note that due to
 the upstream implementation of clippy, this file must be named either `.clippy.toml` or
diff --git a/third_party/rules_rust/docs/rust_doc.md b/third_party/rules_rust/docs/rust_doc.md
index cf5bf01..009172f 100644
--- a/third_party/rules_rust/docs/rust_doc.md
+++ b/third_party/rules_rust/docs/rust_doc.md
@@ -4,12 +4,13 @@
 * [rust_doc](#rust_doc)
 * [rust_doc_test](#rust_doc_test)
 
-<a id="#rust_doc"></a>
+<a id="rust_doc"></a>
 
 ## rust_doc
 
 <pre>
-rust_doc(<a href="#rust_doc-name">name</a>, <a href="#rust_doc-crate">crate</a>, <a href="#rust_doc-html_after_content">html_after_content</a>, <a href="#rust_doc-html_before_content">html_before_content</a>, <a href="#rust_doc-html_in_header">html_in_header</a>, <a href="#rust_doc-markdown_css">markdown_css</a>)
+rust_doc(<a href="#rust_doc-name">name</a>, <a href="#rust_doc-crate">crate</a>, <a href="#rust_doc-html_after_content">html_after_content</a>, <a href="#rust_doc-html_before_content">html_before_content</a>, <a href="#rust_doc-html_in_header">html_in_header</a>, <a href="#rust_doc-markdown_css">markdown_css</a>,
+         <a href="#rust_doc-rustc_flags">rustc_flags</a>)
 </pre>
 
 Generates code documentation.
@@ -60,14 +61,15 @@
 | <a id="rust_doc-html_before_content"></a>html_before_content |  File to add in <code>&lt;body&gt;</code>, before content.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_doc-html_in_header"></a>html_in_header |  File to add to <code>&lt;head&gt;</code>.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_doc-markdown_css"></a>markdown_css |  CSS files to include via <code>&lt;link&gt;</code> in a rendered Markdown file.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
+| <a id="rust_doc-rustc_flags"></a>rustc_flags |  List of compiler flags passed to <code>rustc</code>.<br><br>These strings are subject to Make variable expansion for predefined source/output path variables like <code>$location</code>, <code>$execpath</code>, and <code>$rootpath</code>. This expansion is useful if you wish to pass a generated file of arguments to rustc: <code>@$(location //package:target)</code>.   | List of strings | optional | [] |
 
 
-<a id="#rust_doc_test"></a>
+<a id="rust_doc_test"></a>
 
 ## rust_doc_test
 
 <pre>
-rust_doc_test(<a href="#rust_doc_test-name">name</a>, <a href="#rust_doc_test-crate">crate</a>)
+rust_doc_test(<a href="#rust_doc_test-name">name</a>, <a href="#rust_doc_test-crate">crate</a>, <a href="#rust_doc_test-deps">deps</a>)
 </pre>
 
 Runs Rust documentation tests.
@@ -115,5 +117,6 @@
 | :------------- | :------------- | :------------- | :------------- | :------------- |
 | <a id="rust_doc_test-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
 | <a id="rust_doc_test-crate"></a>crate |  The label of the target to generate code documentation for. <code>rust_doc_test</code> can generate HTML code documentation for the source files of <code>rust_library</code> or <code>rust_binary</code> targets.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | required |  |
+| <a id="rust_doc_test-deps"></a>deps |  List of other libraries to be linked to this library target.<br><br>These can be either other <code>rust_library</code> targets or <code>cc_library</code> targets if linking a native library.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 
 
diff --git a/third_party/rules_rust/docs/rust_fmt.md b/third_party/rules_rust/docs/rust_fmt.md
index e97c821..e05f19d 100644
--- a/third_party/rules_rust/docs/rust_fmt.md
+++ b/third_party/rules_rust/docs/rust_fmt.md
@@ -46,7 +46,7 @@
 [rfcp]: https://github.com/rust-lang-nursery/fmt-rfcs
 [rgp]: https://rust-lang.github.io/rustfmt/
 
-<a id="#rustfmt_test"></a>
+<a id="rustfmt_test"></a>
 
 ## rustfmt_test
 
@@ -65,7 +65,7 @@
 | <a id="rustfmt_test-targets"></a>targets |  Rust targets to run <code>rustfmt --check</code> on.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 
 
-<a id="#rustfmt_aspect"></a>
+<a id="rustfmt_aspect"></a>
 
 ## rustfmt_aspect
 
@@ -86,8 +86,8 @@
 [cs]: https://rust-lang.github.io/rustfmt/
 
 This aspect is executed on any target which provides the `CrateInfo` provider. However
-users may tag a target with `norustfmt` to have it skipped. Additionally, generated
-source files are also ignored by this aspect.
+users may tag a target with `no-rustfmt` or `no-format` to have it skipped. Additionally,
+generated source files are also ignored by this aspect.
 
 
 **ASPECT ATTRIBUTES**
diff --git a/third_party/rules_rust/docs/rust_proto.md b/third_party/rules_rust/docs/rust_proto.md
index dfba0b2..479cdb5 100644
--- a/third_party/rules_rust/docs/rust_proto.md
+++ b/third_party/rules_rust/docs/rust_proto.md
@@ -77,7 +77,7 @@
 toolchain(
     name = "proto-toolchain",
     toolchain = ":proto-toolchain-impl",
-    toolchain_type = "@rules_rust//proto:toolchain",
+    toolchain_type = "@rules_rust//proto:toolchain_type",
 )
 ```
 
@@ -117,7 +117,7 @@
 configuration.
 
 
-<a id="#rust_grpc_library"></a>
+<a id="rust_grpc_library"></a>
 
 ## rust_grpc_library
 
@@ -160,7 +160,7 @@
 | <a id="rust_grpc_library-rust_deps"></a>rust_deps |  The crates the generated library depends on.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 
 
-<a id="#rust_proto_library"></a>
+<a id="rust_proto_library"></a>
 
 ## rust_proto_library
 
@@ -203,7 +203,7 @@
 | <a id="rust_proto_library-rust_deps"></a>rust_deps |  The crates the generated library depends on.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [] |
 
 
-<a id="#rust_proto_toolchain"></a>
+<a id="rust_proto_toolchain"></a>
 
 ## rust_proto_toolchain
 
@@ -252,15 +252,15 @@
 | Name  | Description | Type | Mandatory | Default |
 | :------------- | :------------- | :------------- | :------------- | :------------- |
 | <a id="rust_proto_toolchain-name"></a>name |  A unique name for this target.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
-| <a id="rust_proto_toolchain-edition"></a>edition |  The edition used by the generated rust source.   | String | optional | "2018" |
-| <a id="rust_proto_toolchain-grpc_compile_deps"></a>grpc_compile_deps |  The crates the generated grpc libraries depends on.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [Label("//proto/raze:protobuf"), Label("//proto/raze:grpc"), Label("//proto/raze:tls_api"), Label("//proto/raze:tls_api_stub")] |
+| <a id="rust_proto_toolchain-edition"></a>edition |  The edition used by the generated rust source.   | String | optional | "" |
+| <a id="rust_proto_toolchain-grpc_compile_deps"></a>grpc_compile_deps |  The crates the generated grpc libraries depends on.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [Label("//proto/3rdparty/crates:protobuf"), Label("//proto/3rdparty/crates:grpc"), Label("//proto/3rdparty/crates:tls-api"), Label("//proto/3rdparty/crates:tls-api-stub")] |
 | <a id="rust_proto_toolchain-grpc_plugin"></a>grpc_plugin |  The location of the Rust protobuf compiler plugin to generate rust gRPC stubs.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | //proto:protoc_gen_rust_grpc |
-| <a id="rust_proto_toolchain-proto_compile_deps"></a>proto_compile_deps |  The crates the generated protobuf libraries depends on.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [Label("//proto/raze:protobuf")] |
+| <a id="rust_proto_toolchain-proto_compile_deps"></a>proto_compile_deps |  The crates the generated protobuf libraries depends on.   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | optional | [Label("//proto/3rdparty/crates:protobuf")] |
 | <a id="rust_proto_toolchain-proto_plugin"></a>proto_plugin |  The location of the Rust protobuf compiler plugin used to generate rust sources.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | //proto:protoc_gen_rust |
 | <a id="rust_proto_toolchain-protoc"></a>protoc |  The location of the <code>protoc</code> binary. It should be an executable target.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | @com_google_protobuf//:protoc |
 
 
-<a id="#rust_proto_repositories"></a>
+<a id="rust_proto_repositories"></a>
 
 ## rust_proto_repositories
 
@@ -278,7 +278,7 @@
 | <a id="rust_proto_repositories-register_default_toolchain"></a>register_default_toolchain |  If True, the default [rust_proto_toolchain](#rust_proto_toolchain) (<code>@rules_rust//proto:default-proto-toolchain</code>) is registered. This toolchain requires a set of dependencies that were generated using [cargo raze](https://github.com/google/cargo-raze). These will also be loaded.   |  <code>True</code> |
 
 
-<a id="#rust_proto_transitive_repositories"></a>
+<a id="rust_proto_transitive_repositories"></a>
 
 ## rust_proto_transitive_repositories
 
diff --git a/third_party/rules_rust/docs/rust_proto.vm b/third_party/rules_rust/docs/rust_proto.vm
index 9067510..b7f08f4 100644
--- a/third_party/rules_rust/docs/rust_proto.vm
+++ b/third_party/rules_rust/docs/rust_proto.vm
@@ -68,7 +68,7 @@
 toolchain(
     name = "proto-toolchain",
     toolchain = ":proto-toolchain-impl",
-    toolchain_type = "@rules_rust//proto:toolchain",
+    toolchain_type = "@rules_rust//proto:toolchain_type",
 )
 ```
 
diff --git a/third_party/rules_rust/docs/rust_repositories.md b/third_party/rules_rust/docs/rust_repositories.md
index 27a6354..0eed309 100644
--- a/third_party/rules_rust/docs/rust_repositories.md
+++ b/third_party/rules_rust/docs/rust_repositories.md
@@ -8,9 +8,10 @@
 * [rust_stdlib_filegroup](#rust_stdlib_filegroup)
 * [rust_toolchain_repository_proxy](#rust_toolchain_repository_proxy)
 * [rust_toolchain_repository](#rust_toolchain_repository)
+* [rust_toolchain_tools_repository](#rust_toolchain_tools_repository)
 * [rust_toolchain](#rust_toolchain)
 
-<a id="#rust_stdlib_filegroup"></a>
+<a id="rust_stdlib_filegroup"></a>
 
 ## rust_stdlib_filegroup
 
@@ -29,15 +30,16 @@
 | <a id="rust_stdlib_filegroup-srcs"></a>srcs |  The list of targets/files that are components of the rust-stdlib file group   | <a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a> | required |  |
 
 
-<a id="#rust_toolchain"></a>
+<a id="rust_toolchain"></a>
 
 ## rust_toolchain
 
 <pre>
 rust_toolchain(<a href="#rust_toolchain-name">name</a>, <a href="#rust_toolchain-allocator_library">allocator_library</a>, <a href="#rust_toolchain-binary_ext">binary_ext</a>, <a href="#rust_toolchain-cargo">cargo</a>, <a href="#rust_toolchain-clippy_driver">clippy_driver</a>, <a href="#rust_toolchain-debug_info">debug_info</a>,
-               <a href="#rust_toolchain-default_edition">default_edition</a>, <a href="#rust_toolchain-dylib_ext">dylib_ext</a>, <a href="#rust_toolchain-exec_triple">exec_triple</a>, <a href="#rust_toolchain-llvm_tools">llvm_tools</a>, <a href="#rust_toolchain-opt_level">opt_level</a>, <a href="#rust_toolchain-os">os</a>, <a href="#rust_toolchain-rust_doc">rust_doc</a>, <a href="#rust_toolchain-rust_lib">rust_lib</a>,
-               <a href="#rust_toolchain-rust_std">rust_std</a>, <a href="#rust_toolchain-rustc">rustc</a>, <a href="#rust_toolchain-rustc_lib">rustc_lib</a>, <a href="#rust_toolchain-rustc_srcs">rustc_srcs</a>, <a href="#rust_toolchain-rustfmt">rustfmt</a>, <a href="#rust_toolchain-staticlib_ext">staticlib_ext</a>, <a href="#rust_toolchain-stdlib_linkflags">stdlib_linkflags</a>,
-               <a href="#rust_toolchain-target_json">target_json</a>, <a href="#rust_toolchain-target_triple">target_triple</a>)
+               <a href="#rust_toolchain-default_edition">default_edition</a>, <a href="#rust_toolchain-dylib_ext">dylib_ext</a>, <a href="#rust_toolchain-env">env</a>, <a href="#rust_toolchain-exec_triple">exec_triple</a>, <a href="#rust_toolchain-experimental_use_cc_common_link">experimental_use_cc_common_link</a>,
+               <a href="#rust_toolchain-llvm_cov">llvm_cov</a>, <a href="#rust_toolchain-llvm_profdata">llvm_profdata</a>, <a href="#rust_toolchain-llvm_tools">llvm_tools</a>, <a href="#rust_toolchain-opt_level">opt_level</a>, <a href="#rust_toolchain-os">os</a>, <a href="#rust_toolchain-rust_doc">rust_doc</a>, <a href="#rust_toolchain-rust_lib">rust_lib</a>, <a href="#rust_toolchain-rust_std">rust_std</a>,
+               <a href="#rust_toolchain-rustc">rustc</a>, <a href="#rust_toolchain-rustc_lib">rustc_lib</a>, <a href="#rust_toolchain-rustc_srcs">rustc_srcs</a>, <a href="#rust_toolchain-rustfmt">rustfmt</a>, <a href="#rust_toolchain-staticlib_ext">staticlib_ext</a>, <a href="#rust_toolchain-stdlib_linkflags">stdlib_linkflags</a>, <a href="#rust_toolchain-target_json">target_json</a>,
+               <a href="#rust_toolchain-target_triple">target_triple</a>)
 </pre>
 
 Declares a Rust toolchain for use.
@@ -92,9 +94,13 @@
 | <a id="rust_toolchain-cargo"></a>cargo |  The location of the <code>cargo</code> binary. Can be a direct source or a filegroup containing one item.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_toolchain-clippy_driver"></a>clippy_driver |  The location of the <code>clippy-driver</code> binary. Can be a direct source or a filegroup containing one item.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_toolchain-debug_info"></a>debug_info |  Rustc debug info levels per opt level   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {"dbg": "2", "fastbuild": "0", "opt": "0"} |
-| <a id="rust_toolchain-default_edition"></a>default_edition |  The edition to use for rust_* rules that don't specify an edition.   | String | optional | "2018" |
+| <a id="rust_toolchain-default_edition"></a>default_edition |  The edition to use for rust_* rules that don't specify an edition. If absent, every rule is required to specify its <code>edition</code> attribute.   | String | optional | "" |
 | <a id="rust_toolchain-dylib_ext"></a>dylib_ext |  The extension for dynamic libraries created from rustc.   | String | required |  |
+| <a id="rust_toolchain-env"></a>env |  Environment variables to set in actions.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
 | <a id="rust_toolchain-exec_triple"></a>exec_triple |  The platform triple for the toolchains execution environment. For more details see: https://docs.bazel.build/versions/master/skylark/rules.html#configurations   | String | required |  |
+| <a id="rust_toolchain-experimental_use_cc_common_link"></a>experimental_use_cc_common_link |  Label to a boolean build setting that controls whether cc_common.link is used to link rust binaries.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | //rust/settings:experimental_use_cc_common_link |
+| <a id="rust_toolchain-llvm_cov"></a>llvm_cov |  The location of the <code>llvm-cov</code> binary. Can be a direct source or a filegroup containing one item. If None, rust code is not instrumented for coverage.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
+| <a id="rust_toolchain-llvm_profdata"></a>llvm_profdata |  The location of the <code>llvm-profdata</code> binary. Can be a direct source or a filegroup containing one item. If <code>llvm_cov</code> is None, this can be None as well and rust code is not instrumented for coverage.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_toolchain-llvm_tools"></a>llvm_tools |  LLVM tools that are shipped with the Rust toolchain.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 | <a id="rust_toolchain-opt_level"></a>opt_level |  Rustc optimization levels.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {"dbg": "0", "fastbuild": "0", "opt": "3"} |
 | <a id="rust_toolchain-os"></a>os |  The operating system for the current toolchain   | String | required |  |
@@ -111,49 +117,13 @@
 | <a id="rust_toolchain-target_triple"></a>target_triple |  The platform triple for the toolchains target environment. For more details see: https://docs.bazel.build/versions/master/skylark/rules.html#configurations   | String | optional | "" |
 
 
-<a id="#rust_toolchain_repository"></a>
-
-## rust_toolchain_repository
-
-<pre>
-rust_toolchain_repository(<a href="#rust_toolchain_repository-name">name</a>, <a href="#rust_toolchain_repository-allocator_library">allocator_library</a>, <a href="#rust_toolchain_repository-auth">auth</a>, <a href="#rust_toolchain_repository-dev_components">dev_components</a>, <a href="#rust_toolchain_repository-edition">edition</a>, <a href="#rust_toolchain_repository-exec_triple">exec_triple</a>,
-                          <a href="#rust_toolchain_repository-extra_target_triples">extra_target_triples</a>, <a href="#rust_toolchain_repository-include_rustc_srcs">include_rustc_srcs</a>, <a href="#rust_toolchain_repository-iso_date">iso_date</a>, <a href="#rust_toolchain_repository-repo_mapping">repo_mapping</a>,
-                          <a href="#rust_toolchain_repository-rustfmt_version">rustfmt_version</a>, <a href="#rust_toolchain_repository-sha256s">sha256s</a>, <a href="#rust_toolchain_repository-toolchain_name_prefix">toolchain_name_prefix</a>, <a href="#rust_toolchain_repository-urls">urls</a>, <a href="#rust_toolchain_repository-version">version</a>)
-</pre>
-
-Composes a single workspace containing the toolchain components for compiling on a given platform to a series of target platforms.
-
-A given instance of this rule should be accompanied by a rust_toolchain_repository_proxy invocation to declare its toolchains to Bazel; the indirection allows separating toolchain selection from toolchain fetching.
-
-**ATTRIBUTES**
-
-
-| Name  | Description | Type | Mandatory | Default |
-| :------------- | :------------- | :------------- | :------------- | :------------- |
-| <a id="rust_toolchain_repository-name"></a>name |  A unique name for this repository.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
-| <a id="rust_toolchain_repository-allocator_library"></a>allocator_library |  Target that provides allocator functions when rust_library targets are embedded in a cc_binary.   | String | optional | "" |
-| <a id="rust_toolchain_repository-auth"></a>auth |  Auth object compatible with repository_ctx.download to use when downloading files. See [repository_ctx.download](https://docs.bazel.build/versions/main/skylark/lib/repository_ctx.html#download) for more details.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
-| <a id="rust_toolchain_repository-dev_components"></a>dev_components |  Whether to download the rustc-dev components (defaults to False). Requires version to be "nightly".   | Boolean | optional | False |
-| <a id="rust_toolchain_repository-edition"></a>edition |  The rust edition to be used by default.   | String | optional | "2018" |
-| <a id="rust_toolchain_repository-exec_triple"></a>exec_triple |  The Rust-style target that this compiler runs on   | String | required |  |
-| <a id="rust_toolchain_repository-extra_target_triples"></a>extra_target_triples |  Additional rust-style targets that this set of toolchains should support.   | List of strings | optional | [] |
-| <a id="rust_toolchain_repository-include_rustc_srcs"></a>include_rustc_srcs |  Whether to download and unpack the rustc source files. These are very large, and slow to unpack, but are required to support rust analyzer. An environment variable <code>RULES_RUST_TOOLCHAIN_INCLUDE_RUSTC_SRCS</code> can also be used to control this attribute. This variable will take precedence over the hard coded attribute. Setting it to <code>true</code> to activates this attribute where all other values deactivate it.   | Boolean | optional | False |
-| <a id="rust_toolchain_repository-iso_date"></a>iso_date |  The date of the tool (or None, if the version is a specific version).   | String | optional | "" |
-| <a id="rust_toolchain_repository-repo_mapping"></a>repo_mapping |  A dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.&lt;p&gt;For example, an entry <code>"@foo": "@bar"</code> declares that, for any time this repository depends on <code>@foo</code> (such as a dependency on <code>@foo//some:target</code>, it should actually resolve that dependency within globally-declared <code>@bar</code> (<code>@bar//some:target</code>).   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | required |  |
-| <a id="rust_toolchain_repository-rustfmt_version"></a>rustfmt_version |  The version of the tool among "nightly", "beta", or an exact version.   | String | optional | "" |
-| <a id="rust_toolchain_repository-sha256s"></a>sha256s |  A dict associating tool subdirectories to sha256 hashes. See [rust_repositories](#rust_repositories) for more details.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
-| <a id="rust_toolchain_repository-toolchain_name_prefix"></a>toolchain_name_prefix |  The per-target prefix expected for the rust_toolchain declarations in the parent workspace.   | String | optional | "" |
-| <a id="rust_toolchain_repository-urls"></a>urls |  A list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format).   | List of strings | optional | ["https://static.rust-lang.org/dist/{}.tar.gz"] |
-| <a id="rust_toolchain_repository-version"></a>version |  The version of the tool among "nightly", "beta", or an exact version.   | String | required |  |
-
-
-<a id="#rust_toolchain_repository_proxy"></a>
+<a id="rust_toolchain_repository_proxy"></a>
 
 ## rust_toolchain_repository_proxy
 
 <pre>
-rust_toolchain_repository_proxy(<a href="#rust_toolchain_repository_proxy-name">name</a>, <a href="#rust_toolchain_repository_proxy-exec_triple">exec_triple</a>, <a href="#rust_toolchain_repository_proxy-extra_target_triples">extra_target_triples</a>, <a href="#rust_toolchain_repository_proxy-parent_workspace_name">parent_workspace_name</a>,
-                                <a href="#rust_toolchain_repository_proxy-repo_mapping">repo_mapping</a>, <a href="#rust_toolchain_repository_proxy-toolchain_name_prefix">toolchain_name_prefix</a>)
+rust_toolchain_repository_proxy(<a href="#rust_toolchain_repository_proxy-name">name</a>, <a href="#rust_toolchain_repository_proxy-exec_compatible_with">exec_compatible_with</a>, <a href="#rust_toolchain_repository_proxy-repo_mapping">repo_mapping</a>, <a href="#rust_toolchain_repository_proxy-target_compatible_with">target_compatible_with</a>,
+                                <a href="#rust_toolchain_repository_proxy-toolchain">toolchain</a>, <a href="#rust_toolchain_repository_proxy-toolchain_type">toolchain_type</a>)
 </pre>
 
 Generates a toolchain-bearing repository that declares the toolchains from some other rust_toolchain_repository.
@@ -164,14 +134,106 @@
 | Name  | Description | Type | Mandatory | Default |
 | :------------- | :------------- | :------------- | :------------- | :------------- |
 | <a id="rust_toolchain_repository_proxy-name"></a>name |  A unique name for this repository.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
-| <a id="rust_toolchain_repository_proxy-exec_triple"></a>exec_triple |  The Rust-style target triple for the compilation platform   | String | required |  |
-| <a id="rust_toolchain_repository_proxy-extra_target_triples"></a>extra_target_triples |  The Rust-style triples for extra compilation targets   | List of strings | optional | [] |
-| <a id="rust_toolchain_repository_proxy-parent_workspace_name"></a>parent_workspace_name |  The name of the other rust_toolchain_repository   | String | required |  |
+| <a id="rust_toolchain_repository_proxy-exec_compatible_with"></a>exec_compatible_with |  A list of constraints for the execution platform for this toolchain.   | List of strings | optional | [] |
 | <a id="rust_toolchain_repository_proxy-repo_mapping"></a>repo_mapping |  A dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.&lt;p&gt;For example, an entry <code>"@foo": "@bar"</code> declares that, for any time this repository depends on <code>@foo</code> (such as a dependency on <code>@foo//some:target</code>, it should actually resolve that dependency within globally-declared <code>@bar</code> (<code>@bar//some:target</code>).   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | required |  |
-| <a id="rust_toolchain_repository_proxy-toolchain_name_prefix"></a>toolchain_name_prefix |  The per-target prefix expected for the rust_toolchain declarations in the parent workspace.   | String | optional | "" |
+| <a id="rust_toolchain_repository_proxy-target_compatible_with"></a>target_compatible_with |  A list of constraints for the target platform for this toolchain.   | List of strings | optional | [] |
+| <a id="rust_toolchain_repository_proxy-toolchain"></a>toolchain |  The name of the toolchain implementation target.   | String | required |  |
+| <a id="rust_toolchain_repository_proxy-toolchain_type"></a>toolchain_type |  The toolchain type of the toolchain to declare   | String | required |  |
 
 
-<a id="#rust_repositories"></a>
+<a id="rust_toolchain_tools_repository"></a>
+
+## rust_toolchain_tools_repository
+
+<pre>
+rust_toolchain_tools_repository(<a href="#rust_toolchain_tools_repository-name">name</a>, <a href="#rust_toolchain_tools_repository-allocator_library">allocator_library</a>, <a href="#rust_toolchain_tools_repository-auth">auth</a>, <a href="#rust_toolchain_tools_repository-dev_components">dev_components</a>, <a href="#rust_toolchain_tools_repository-edition">edition</a>, <a href="#rust_toolchain_tools_repository-exec_triple">exec_triple</a>,
+                                <a href="#rust_toolchain_tools_repository-include_rustc_srcs">include_rustc_srcs</a>, <a href="#rust_toolchain_tools_repository-iso_date">iso_date</a>, <a href="#rust_toolchain_tools_repository-repo_mapping">repo_mapping</a>, <a href="#rust_toolchain_tools_repository-rustfmt_version">rustfmt_version</a>, <a href="#rust_toolchain_tools_repository-sha256s">sha256s</a>,
+                                <a href="#rust_toolchain_tools_repository-target_triple">target_triple</a>, <a href="#rust_toolchain_tools_repository-urls">urls</a>, <a href="#rust_toolchain_tools_repository-version">version</a>)
+</pre>
+
+Composes a single workspace containing the toolchain components for compiling on a given platform to a series of target platforms.
+
+A given instance of this rule should be accompanied by a toolchain_repository_proxy invocation to declare its toolchains to Bazel; the indirection allows separating toolchain selection from toolchain fetching.
+
+**ATTRIBUTES**
+
+
+| Name  | Description | Type | Mandatory | Default |
+| :------------- | :------------- | :------------- | :------------- | :------------- |
+| <a id="rust_toolchain_tools_repository-name"></a>name |  A unique name for this repository.   | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required |  |
+| <a id="rust_toolchain_tools_repository-allocator_library"></a>allocator_library |  Target that provides allocator functions when rust_library targets are embedded in a cc_binary.   | String | optional | "" |
+| <a id="rust_toolchain_tools_repository-auth"></a>auth |  Auth object compatible with repository_ctx.download to use when downloading files. See [repository_ctx.download](https://docs.bazel.build/versions/main/skylark/lib/repository_ctx.html#download) for more details.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
+| <a id="rust_toolchain_tools_repository-dev_components"></a>dev_components |  Whether to download the rustc-dev components (defaults to False). Requires version to be "nightly".   | Boolean | optional | False |
+| <a id="rust_toolchain_tools_repository-edition"></a>edition |  The rust edition to be used by default (2015, 2018, or 2021). If absent, every rule is required to specify its <code>edition</code> attribute.   | String | optional | "" |
+| <a id="rust_toolchain_tools_repository-exec_triple"></a>exec_triple |  The Rust-style target that this compiler runs on   | String | required |  |
+| <a id="rust_toolchain_tools_repository-include_rustc_srcs"></a>include_rustc_srcs |  Whether to download and unpack the rustc source files. These are very large, and slow to unpack, but are required to support rust analyzer. An environment variable <code>RULES_RUST_TOOLCHAIN_INCLUDE_RUSTC_SRCS</code> can also be used to control this attribute. This variable will take precedence over the hard coded attribute. Setting it to <code>true</code> to activates this attribute where all other values deactivate it.   | Boolean | optional | False |
+| <a id="rust_toolchain_tools_repository-iso_date"></a>iso_date |  The date of the tool (or None, if the version is a specific version).   | String | optional | "" |
+| <a id="rust_toolchain_tools_repository-repo_mapping"></a>repo_mapping |  A dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.&lt;p&gt;For example, an entry <code>"@foo": "@bar"</code> declares that, for any time this repository depends on <code>@foo</code> (such as a dependency on <code>@foo//some:target</code>, it should actually resolve that dependency within globally-declared <code>@bar</code> (<code>@bar//some:target</code>).   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | required |  |
+| <a id="rust_toolchain_tools_repository-rustfmt_version"></a>rustfmt_version |  The version of the tool among "nightly", "beta", or an exact version.   | String | optional | "" |
+| <a id="rust_toolchain_tools_repository-sha256s"></a>sha256s |  A dict associating tool subdirectories to sha256 hashes. See [rust_repositories](#rust_repositories) for more details.   | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
+| <a id="rust_toolchain_tools_repository-target_triple"></a>target_triple |  The Rust-style target that this compiler builds for   | String | required |  |
+| <a id="rust_toolchain_tools_repository-urls"></a>urls |  A list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format).   | List of strings | optional | ["https://static.rust-lang.org/dist/{}.tar.gz"] |
+| <a id="rust_toolchain_tools_repository-version"></a>version |  The version of the tool among "nightly", "beta", or an exact version.   | String | required |  |
+
+
+<a id="rules_rust_dependencies"></a>
+
+## rules_rust_dependencies
+
+<pre>
+rules_rust_dependencies()
+</pre>
+
+Dependencies used in the implementation of `rules_rust`.
+
+
+
+<a id="rust_register_toolchains"></a>
+
+## rust_register_toolchains
+
+<pre>
+rust_register_toolchains(<a href="#rust_register_toolchains-dev_components">dev_components</a>, <a href="#rust_register_toolchains-edition">edition</a>, <a href="#rust_register_toolchains-include_rustc_srcs">include_rustc_srcs</a>, <a href="#rust_register_toolchains-allocator_library">allocator_library</a>, <a href="#rust_register_toolchains-iso_date">iso_date</a>,
+                         <a href="#rust_register_toolchains-register_toolchains">register_toolchains</a>, <a href="#rust_register_toolchains-rustfmt_version">rustfmt_version</a>, <a href="#rust_register_toolchains-sha256s">sha256s</a>, <a href="#rust_register_toolchains-extra_target_triples">extra_target_triples</a>, <a href="#rust_register_toolchains-urls">urls</a>,
+                         <a href="#rust_register_toolchains-version">version</a>)
+</pre>
+
+Emits a default set of toolchains for Linux, MacOS, and Freebsd
+
+Skip this macro and call the `rust_repository_set` macros directly if you need a compiler for     other hosts or for additional target triples.
+
+The `sha256` attribute represents a dict associating tool subdirectories to sha256 hashes. As an example:
+```python
+{
+    "rust-1.46.0-x86_64-unknown-linux-gnu": "e3b98bc3440fe92817881933f9564389eccb396f5f431f33d48b979fa2fbdcf5",
+    "rustfmt-1.4.12-x86_64-unknown-linux-gnu": "1894e76913303d66bf40885a601462844eec15fca9e76a6d13c390d7000d64b0",
+    "rust-std-1.46.0-x86_64-unknown-linux-gnu": "ac04aef80423f612c0079829b504902de27a6997214eb58ab0765d02f7ec1dbc",
+}
+```
+This would match for `exec_triple = "x86_64-unknown-linux-gnu"`.  If not specified, rules_rust pulls from a non-exhaustive     list of known checksums..
+
+See `load_arbitrary_tool` in `@rules_rust//rust:repositories.bzl` for more details.
+
+
+**PARAMETERS**
+
+
+| Name  | Description | Default Value |
+| :------------- | :------------- | :------------- |
+| <a id="rust_register_toolchains-dev_components"></a>dev_components |  Whether to download the rustc-dev components (defaults to False). Requires version to be "nightly".   |  <code>False</code> |
+| <a id="rust_register_toolchains-edition"></a>edition |  The rust edition to be used by default (2015, 2018, or 2021). If absent, every target is required to specify its <code>edition</code> attribute.   |  <code>None</code> |
+| <a id="rust_register_toolchains-include_rustc_srcs"></a>include_rustc_srcs |  Whether to download rustc's src code. This is required in order to use rust-analyzer support. See [rust_toolchain_repository.include_rustc_srcs](#rust_toolchain_repository-include_rustc_srcs). for more details   |  <code>False</code> |
+| <a id="rust_register_toolchains-allocator_library"></a>allocator_library |  Target that provides allocator functions when rust_library targets are embedded in a cc_binary.   |  <code>None</code> |
+| <a id="rust_register_toolchains-iso_date"></a>iso_date |  The date of the nightly or beta release (ignored if the version is a specific version).   |  <code>None</code> |
+| <a id="rust_register_toolchains-register_toolchains"></a>register_toolchains |  If true, repositories will be generated to produce and register <code>rust_toolchain</code> targets.   |  <code>True</code> |
+| <a id="rust_register_toolchains-rustfmt_version"></a>rustfmt_version |  The version of rustfmt. Either "nightly", "beta", or an exact version. Defaults to <code>version</code> if not specified.   |  <code>None</code> |
+| <a id="rust_register_toolchains-sha256s"></a>sha256s |  A dict associating tool subdirectories to sha256 hashes.   |  <code>None</code> |
+| <a id="rust_register_toolchains-extra_target_triples"></a>extra_target_triples |  Additional rust-style targets that rust toolchains should support.   |  <code>["wasm32-unknown-unknown", "wasm32-wasi"]</code> |
+| <a id="rust_register_toolchains-urls"></a>urls |  A list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format).   |  <code>["https://static.rust-lang.org/dist/{}.tar.gz"]</code> |
+| <a id="rust_register_toolchains-version"></a>version |  The version of Rust. Either "nightly", "beta", or an exact version. Defaults to a modern version.   |  <code>"1.62.1"</code> |
+
+
+<a id="rust_repositories"></a>
 
 ## rust_repositories
 
@@ -189,7 +251,7 @@
 | <a id="rust_repositories-kwargs"></a>kwargs |  Keyword arguments for the <code>rust_register_toolchains</code> macro.   |  none |
 
 
-<a id="#rust_repository_set"></a>
+<a id="rust_repository_set"></a>
 
 ## rust_repository_set
 
@@ -217,7 +279,7 @@
 | <a id="rust_repository_set-extra_target_triples"></a>extra_target_triples |  Additional rust-style targets that this set of toolchains should support. Defaults to [].   |  <code>[]</code> |
 | <a id="rust_repository_set-iso_date"></a>iso_date |  The date of the tool. Defaults to None.   |  <code>None</code> |
 | <a id="rust_repository_set-rustfmt_version"></a>rustfmt_version |  The version of rustfmt to be associated with the toolchain. Defaults to None.   |  <code>None</code> |
-| <a id="rust_repository_set-edition"></a>edition |  The rust edition to be used by default (2015, 2018 (if None), or 2021).   |  <code>None</code> |
+| <a id="rust_repository_set-edition"></a>edition |  The rust edition to be used by default (2015, 2018, or 2021). If absent, every rule is required to specify its <code>edition</code> attribute.   |  <code>None</code> |
 | <a id="rust_repository_set-dev_components"></a>dev_components |  Whether to download the rustc-dev components. Requires version to be "nightly". Defaults to False.   |  <code>False</code> |
 | <a id="rust_repository_set-sha256s"></a>sha256s |  A dict associating tool subdirectories to sha256 hashes. See [rust_repositories](#rust_repositories) for more details.   |  <code>None</code> |
 | <a id="rust_repository_set-urls"></a>urls |  A list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format). Defaults to ['https://static.rust-lang.org/dist/{}.tar.gz']   |  <code>["https://static.rust-lang.org/dist/{}.tar.gz"]</code> |
@@ -225,3 +287,44 @@
 | <a id="rust_repository_set-register_toolchain"></a>register_toolchain |  If True, the generated <code>rust_toolchain</code> target will become a registered toolchain.   |  <code>True</code> |
 
 
+<a id="rust_toolchain_repository"></a>
+
+## rust_toolchain_repository
+
+<pre>
+rust_toolchain_repository(<a href="#rust_toolchain_repository-name">name</a>, <a href="#rust_toolchain_repository-version">version</a>, <a href="#rust_toolchain_repository-exec_triple">exec_triple</a>, <a href="#rust_toolchain_repository-target_triple">target_triple</a>, <a href="#rust_toolchain_repository-exec_compatible_with">exec_compatible_with</a>,
+                          <a href="#rust_toolchain_repository-target_compatible_with">target_compatible_with</a>, <a href="#rust_toolchain_repository-include_rustc_srcs">include_rustc_srcs</a>, <a href="#rust_toolchain_repository-allocator_library">allocator_library</a>, <a href="#rust_toolchain_repository-iso_date">iso_date</a>,
+                          <a href="#rust_toolchain_repository-rustfmt_version">rustfmt_version</a>, <a href="#rust_toolchain_repository-edition">edition</a>, <a href="#rust_toolchain_repository-dev_components">dev_components</a>, <a href="#rust_toolchain_repository-sha256s">sha256s</a>, <a href="#rust_toolchain_repository-urls">urls</a>, <a href="#rust_toolchain_repository-auth">auth</a>)
+</pre>
+
+Assembles a remote repository for the given toolchain params, produces a proxy repository     to contain the toolchain declaration, and registers the toolchains.
+
+N.B. A "proxy repository" is needed to allow for registering the toolchain (with constraints)     without actually downloading the toolchain.
+
+
+**PARAMETERS**
+
+
+| Name  | Description | Default Value |
+| :------------- | :------------- | :------------- |
+| <a id="rust_toolchain_repository-name"></a>name |  The name of the generated repository   |  none |
+| <a id="rust_toolchain_repository-version"></a>version |  The version of the tool among "nightly", "beta', or an exact version.   |  none |
+| <a id="rust_toolchain_repository-exec_triple"></a>exec_triple |  The Rust-style target that this compiler runs on.   |  none |
+| <a id="rust_toolchain_repository-target_triple"></a>target_triple |  The Rust-style target to build for.   |  none |
+| <a id="rust_toolchain_repository-exec_compatible_with"></a>exec_compatible_with |  A list of constraints for the execution platform for this toolchain.   |  <code>None</code> |
+| <a id="rust_toolchain_repository-target_compatible_with"></a>target_compatible_with |  A list of constraints for the target platform for this toolchain.   |  <code>None</code> |
+| <a id="rust_toolchain_repository-include_rustc_srcs"></a>include_rustc_srcs |  Whether to download rustc's src code. This is required in order to use rust-analyzer support.   |  <code>False</code> |
+| <a id="rust_toolchain_repository-allocator_library"></a>allocator_library |  Target that provides allocator functions when rust_library targets are embedded in a cc_binary.   |  <code>None</code> |
+| <a id="rust_toolchain_repository-iso_date"></a>iso_date |  The date of the tool.   |  <code>None</code> |
+| <a id="rust_toolchain_repository-rustfmt_version"></a>rustfmt_version |  The version of rustfmt to be associated with the toolchain.   |  <code>None</code> |
+| <a id="rust_toolchain_repository-edition"></a>edition |  The rust edition to be used by default (2015, 2018, or 2021). If absent, every rule is required to specify its <code>edition</code> attribute.   |  <code>None</code> |
+| <a id="rust_toolchain_repository-dev_components"></a>dev_components |  Whether to download the rustc-dev components. Requires version to be "nightly". Defaults to False.   |  <code>False</code> |
+| <a id="rust_toolchain_repository-sha256s"></a>sha256s |  A dict associating tool subdirectories to sha256 hashes. See [rust_repositories](#rust_repositories) for more details.   |  <code>None</code> |
+| <a id="rust_toolchain_repository-urls"></a>urls |  A list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format). Defaults to ['https://static.rust-lang.org/dist/{}.tar.gz']   |  <code>["https://static.rust-lang.org/dist/{}.tar.gz"]</code> |
+| <a id="rust_toolchain_repository-auth"></a>auth |  Auth object compatible with repository_ctx.download to use when downloading files. See [repository_ctx.download](https://docs.bazel.build/versions/main/skylark/lib/repository_ctx.html#download) for more details.   |  <code>None</code> |
+
+**RETURNS**
+
+str: The name of the registerable toolchain created by this rule.
+
+
diff --git a/third_party/rules_rust/docs/rust_wasm_bindgen.md b/third_party/rules_rust/docs/rust_wasm_bindgen.md
index be7dcf0..9af8ad3 100644
--- a/third_party/rules_rust/docs/rust_wasm_bindgen.md
+++ b/third_party/rules_rust/docs/rust_wasm_bindgen.md
@@ -1,7 +1,8 @@
 <!-- Generated with Stardoc: http://skydoc.bazel.build -->
 # Rust Wasm Bindgen
 
-* [rust_wasm_bindgen_repositories](#rust_wasm_bindgen_repositories)
+* [rust_wasm_bindgen_dependencies](#rust_wasm_bindgen_dependencies)
+* [rust_wasm_bindgen_register_toolchains](#rust_wasm_bindgen_register_toolchains)
 * [rust_wasm_bindgen_toolchain](#rust_wasm_bindgen_toolchain)
 * [rust_wasm_bindgen](#rust_wasm_bindgen)
 
@@ -24,7 +25,7 @@
 building WebAssembly code for the host target.
 
 
-<a id="#rust_wasm_bindgen"></a>
+<a id="rust_wasm_bindgen"></a>
 
 ## rust_wasm_bindgen
 
@@ -61,7 +62,7 @@
 | <a id="rust_wasm_bindgen-wasm_file"></a>wasm_file |  The <code>.wasm</code> file or crate to generate bindings for.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | required |  |
 
 
-<a id="#rust_wasm_bindgen_toolchain"></a>
+<a id="rust_wasm_bindgen_toolchain"></a>
 
 ## rust_wasm_bindgen_toolchain
 
@@ -84,7 +85,7 @@
 toolchain(
     name = "wasm_bindgen_toolchain",
     toolchain = "wasm_bindgen_toolchain_impl",
-    toolchain_type = "@rules_rust//wasm_bindgen:wasm_bindgen_toolchain",
+    toolchain_type = "@rules_rust//wasm_bindgen:toolchain_type",
 )
 ```
 
@@ -109,21 +110,38 @@
 | <a id="rust_wasm_bindgen_toolchain-bindgen"></a>bindgen |  The label of a <code>wasm-bindgen-cli</code> executable.   | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
 
 
-<a id="#rust_wasm_bindgen_repositories"></a>
+<a id="rust_wasm_bindgen_dependencies"></a>
 
-## rust_wasm_bindgen_repositories
+## rust_wasm_bindgen_dependencies
 
 <pre>
-rust_wasm_bindgen_repositories(<a href="#rust_wasm_bindgen_repositories-register_default_toolchain">register_default_toolchain</a>)
+rust_wasm_bindgen_dependencies()
 </pre>
 
-Declare dependencies needed for [rust_wasm_bindgen](#rust_wasm_bindgen).
+Declare dependencies needed for the `rules_rust` [wasm-bindgen][wb] rules.
+
+[wb]: https://github.com/rustwasm/wasm-bindgen
+
+
+
+<a id="rust_wasm_bindgen_register_toolchains"></a>
+
+## rust_wasm_bindgen_register_toolchains
+
+<pre>
+rust_wasm_bindgen_register_toolchains(<a href="#rust_wasm_bindgen_register_toolchains-register_toolchains">register_toolchains</a>)
+</pre>
+
+Registers the default toolchains for the `rules_rust` [wasm-bindgen][wb] rules.
+
+[wb]: https://github.com/rustwasm/wasm-bindgen
+
 
 **PARAMETERS**
 
 
 | Name  | Description | Default Value |
 | :------------- | :------------- | :------------- |
-| <a id="rust_wasm_bindgen_repositories-register_default_toolchain"></a>register_default_toolchain |  If True, the default [rust_wasm_bindgen_toolchain](#rust_wasm_bindgen_toolchain) (<code>@rules_rust//wasm_bindgen:default_wasm_bindgen_toolchain</code>) is registered. This toolchain requires a set of dependencies that were generated using [cargo raze](https://github.com/google/cargo-raze). These will also be loaded.   |  <code>True</code> |
+| <a id="rust_wasm_bindgen_register_toolchains-register_toolchains"></a>register_toolchains |  Whether or not to register toolchains.   |  <code>True</code> |
 
 
diff --git a/third_party/rules_rust/docs/settings.md b/third_party/rules_rust/docs/settings.md
index 4605272..0a1339c 100644
--- a/third_party/rules_rust/docs/settings.md
+++ b/third_party/rules_rust/docs/settings.md
@@ -4,7 +4,7 @@
 * [incompatible_flag](#incompatible_flag)
 * [fail_when_enabled](#fail_when_enabled)
 
-<a id="#incompatible_flag"></a>
+<a id="incompatible_flag"></a>
 
 ## incompatible_flag
 
diff --git a/third_party/rules_rust/docs/symbols.bzl b/third_party/rules_rust/docs/symbols.bzl
index 4427845..42e2f20 100644
--- a/third_party/rules_rust/docs/symbols.bzl
+++ b/third_party/rules_rust/docs/symbols.bzl
@@ -10,6 +10,8 @@
 )
 load(
     "@rules_rust//bindgen:repositories.bzl",
+    _rust_bindgen_dependencies = "rust_bindgen_dependencies",
+    _rust_bindgen_register_toolchains = "rust_bindgen_register_toolchains",
     _rust_bindgen_repositories = "rust_bindgen_repositories",
 )
 load(
@@ -19,8 +21,9 @@
     _cargo_env = "cargo_env",
 )
 load(
-    "@rules_rust//crate_universe:defs.bzl",
+    "@rules_rust//crate_universe:docs.bzl",
     _crate = "crate",
+    _crate_universe_dependencies = "crate_universe_dependencies",
     _crates_repository = "crates_repository",
     _crates_vendor = "crates_vendor",
 )
@@ -45,8 +48,8 @@
     "@rules_rust//rust:defs.bzl",
     _capture_clippy_output = "capture_clippy_output",
     _error_format = "error_format",
+    _extra_rustc_flag = "extra_rustc_flag",
     _extra_rustc_flags = "extra_rustc_flags",
-    _rust_analyzer = "rust_analyzer",
     _rust_analyzer_aspect = "rust_analyzer_aspect",
     _rust_binary = "rust_binary",
     _rust_clippy = "rust_clippy",
@@ -64,13 +67,17 @@
 )
 load(
     "@rules_rust//rust:repositories.bzl",
+    _rules_rust_dependencies = "rules_rust_dependencies",
+    _rust_register_toolchains = "rust_register_toolchains",
     _rust_repositories = "rust_repositories",
     _rust_repository_set = "rust_repository_set",
     _rust_toolchain_repository = "rust_toolchain_repository",
     _rust_toolchain_repository_proxy = "rust_toolchain_repository_proxy",
+    _rust_toolchain_tools_repository = "rust_toolchain_tools_repository",
 )
 load(
     "@rules_rust//rust:toolchain.bzl",
+    _rust_analyzer_toolchain = "rust_analyzer_toolchain",
     _rust_stdlib_filegroup = "rust_stdlib_filegroup",
     _rust_toolchain = "rust_toolchain",
 )
@@ -88,7 +95,8 @@
 )
 load(
     "@rules_rust//wasm_bindgen:repositories.bzl",
-    _rust_wasm_bindgen_repositories = "rust_wasm_bindgen_repositories",
+    _rust_wasm_bindgen_dependencies = "rust_wasm_bindgen_dependencies",
+    _rust_wasm_bindgen_register_toolchains = "rust_wasm_bindgen_register_toolchains",
 )
 load(
     "@rules_rust//wasm_bindgen:wasm_bindgen.bzl",
@@ -109,10 +117,12 @@
 rust_proto_library = _rust_proto_library
 rust_grpc_library = _rust_grpc_library
 
-rust_bindgen_toolchain = _rust_bindgen_toolchain
 rust_bindgen = _rust_bindgen
+rust_bindgen_dependencies = _rust_bindgen_dependencies
 rust_bindgen_library = _rust_bindgen_library
+rust_bindgen_register_toolchains = _rust_bindgen_register_toolchains
 rust_bindgen_repositories = _rust_bindgen_repositories
+rust_bindgen_toolchain = _rust_bindgen_toolchain
 
 rust_toolchain = _rust_toolchain
 rust_proto_toolchain = _rust_proto_toolchain
@@ -125,27 +135,33 @@
 cargo_env = _cargo_env
 
 rust_wasm_bindgen = _rust_wasm_bindgen
+rust_wasm_bindgen_dependencies = _rust_wasm_bindgen_dependencies
+rust_wasm_bindgen_register_toolchains = _rust_wasm_bindgen_register_toolchains
 rust_wasm_bindgen_toolchain = _rust_wasm_bindgen_toolchain
-rust_wasm_bindgen_repositories = _rust_wasm_bindgen_repositories
 
+rules_rust_dependencies = _rules_rust_dependencies
+rust_register_toolchains = _rust_register_toolchains
 rust_repositories = _rust_repositories
 rust_repository_set = _rust_repository_set
 rust_toolchain_repository = _rust_toolchain_repository
 rust_toolchain_repository_proxy = _rust_toolchain_repository_proxy
+rust_toolchain_tools_repository = _rust_toolchain_tools_repository
 
 rust_clippy = _rust_clippy
 rust_clippy_aspect = _rust_clippy_aspect
-rust_analyzer = _rust_analyzer
 rust_analyzer_aspect = _rust_analyzer_aspect
+rust_analyzer_toolchain = _rust_analyzer_toolchain
 
 crate = _crate
 crates_repository = _crates_repository
 crates_vendor = _crates_vendor
+crate_universe_dependencies = _crate_universe_dependencies
 
 rustfmt_aspect = _rustfmt_aspect
 rustfmt_test = _rustfmt_test
 
 error_format = _error_format
+extra_rustc_flag = _extra_rustc_flag
 extra_rustc_flags = _extra_rustc_flags
 incompatible_flag = _incompatible_flag
 capture_clippy_output = _capture_clippy_output
diff --git a/third_party/rules_rust/examples/WORKSPACE.bazel b/third_party/rules_rust/examples/WORKSPACE.bazel
index 47dec43..a9ca080 100644
--- a/third_party/rules_rust/examples/WORKSPACE.bazel
+++ b/third_party/rules_rust/examples/WORKSPACE.bazel
@@ -12,11 +12,23 @@
 
 rules_rust_dependencies()
 
-rust_register_toolchains(include_rustc_srcs = True)
+rust_register_toolchains(
+    edition = "2018",
+)
 
-load("@rules_rust//bindgen:repositories.bzl", "rust_bindgen_repositories")
+load("@rules_rust//crate_universe:repositories.bzl", "crate_universe_dependencies")
 
-rust_bindgen_repositories()
+crate_universe_dependencies(bootstrap = True)
+
+load("@rules_rust//tools/rust_analyzer:deps.bzl", "rust_analyzer_dependencies")
+
+rust_analyzer_dependencies()
+
+load("@rules_rust//bindgen:repositories.bzl", "rust_bindgen_dependencies", "rust_bindgen_register_toolchains")
+
+rust_bindgen_dependencies()
+
+rust_bindgen_register_toolchains()
 
 load("@rules_rust//proto:repositories.bzl", "rust_proto_repositories")
 
@@ -26,9 +38,11 @@
 
 rust_proto_transitive_repositories()
 
-load("@rules_rust//wasm_bindgen:repositories.bzl", "rust_wasm_bindgen_repositories")
+load("@rules_rust//wasm_bindgen:repositories.bzl", "rust_wasm_bindgen_dependencies", "rust_wasm_bindgen_register_toolchains")
 
-rust_wasm_bindgen_repositories()
+rust_wasm_bindgen_dependencies()
+
+rust_wasm_bindgen_register_toolchains()
 
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 
@@ -60,6 +74,12 @@
 # Examples dependencies
 ###############################################################################
 
+http_archive(
+    name = "build_bazel_rules_nodejs",
+    sha256 = "c78216f5be5d451a42275b0b7dc809fb9347e2b04a68f68bad620a2b01f5c774",
+    urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.5.2/rules_nodejs-5.5.2.tar.gz"],
+)
+
 load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories")
 
 node_repositories()
@@ -91,6 +111,13 @@
     name = "libc",
     srcs = glob(["src/**/*.rs"]),
     edition = "2015",
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
     visibility = ["//visibility:public"],
 )
 """
diff --git a/third_party/rules_rust/examples/ambiguous_deps/cc_library_with_func.cc b/third_party/rules_rust/examples/ambiguous_deps/cc_library_with_func.cc
index 536fa93..1f12151 100644
--- a/third_party/rules_rust/examples/ambiguous_deps/cc_library_with_func.cc
+++ b/third_party/rules_rust/examples/ambiguous_deps/cc_library_with_func.cc
@@ -1,3 +1 @@
-extern "C" int func() {
-  return 123;
-}
+extern "C" int func() { return 123; }
diff --git a/third_party/rules_rust/examples/cargo_manifest_dir/external_crate/WORKSPACE.bazel b/third_party/rules_rust/examples/cargo_manifest_dir/external_crate/WORKSPACE.bazel
index 38395cc..82b00c3 100644
--- a/third_party/rules_rust/examples/cargo_manifest_dir/external_crate/WORKSPACE.bazel
+++ b/third_party/rules_rust/examples/cargo_manifest_dir/external_crate/WORKSPACE.bazel
@@ -7,4 +7,4 @@
 
 load("@rules_rust//rust:repositories.bzl", "rust_repositories")
 
-rust_repositories()
+rust_repositories(edition = "2018")
diff --git a/third_party/rules_rust/examples/crate_universe/.gitignore b/third_party/rules_rust/examples/crate_universe/.gitignore
deleted file mode 100644
index ac51a05..0000000
--- a/third_party/rules_rust/examples/crate_universe/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bazel-*
diff --git a/third_party/rules_rust/examples/crate_universe/DEVELOPMENT.md b/third_party/rules_rust/examples/crate_universe/DEVELOPMENT.md
new file mode 100644
index 0000000..f39ee31
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/DEVELOPMENT.md
@@ -0,0 +1,26 @@
+# Developing crate_universe examples
+
+## Bootstrapping
+
+Crate Universe examples require a bootstrapping process the first time
+`rules_rust` is checked out. To setup the examples, run the following
+bazel commands:
+
+```shell
+bazel run //vendor_external:crates_vendor
+bazel run //vendor_local_manifests:crates_vendor
+bazel run //vendor_local_pkgs:crates_vendor
+bazel run //vendor_remote_manifests:crates_vendor_manifests
+bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+```
+
+## Repinning/Updating Dependencies
+
+After bootstrapping, Bazel lockfiles can be regenerated by running the following:
+
+```shell
+CARGO_BAZEL_REPIN=1 bazel test //...
+```
+
+For more information on repinning, see: https://bazelbuild.github.io/rules_rust/crate_universe.html#repinning--updating-dependencies
+
diff --git a/third_party/rules_rust/examples/crate_universe/WORKSPACE.bazel b/third_party/rules_rust/examples/crate_universe/WORKSPACE.bazel
index 40b4b08..c0c6371 100644
--- a/third_party/rules_rust/examples/crate_universe/WORKSPACE.bazel
+++ b/third_party/rules_rust/examples/crate_universe/WORKSPACE.bazel
@@ -9,15 +9,13 @@
 
 rules_rust_dependencies()
 
-rust_register_toolchains(include_rustc_srcs = True)
+rust_register_toolchains(
+    edition = "2018",
+)
 
-load("@rules_rust//crate_universe:crates.bzl", "crate_deps_repository")
+load("@rules_rust//crate_universe:repositories.bzl", "crate_universe_dependencies")
 
-crate_deps_repository()
-
-load("@rules_rust//crate_universe:crates_deps.bzl", "crate_repositories")
-
-crate_repositories()
+crate_universe_dependencies(bootstrap = True)
 
 load("@rules_rust//crate_universe:defs.bzl", "crate", "crates_repository", "splicing_config")
 
@@ -33,10 +31,11 @@
             version = "0.12.1-dev",
         )],
     },
+    cargo_lockfile = "//cargo_aliases:Cargo.Bazel.lock",
     # `generator` is not necessary in official releases.
     # See load satement for `cargo_bazel_bootstrap`.
     generator = "@cargo_bazel_bootstrap//:cargo-bazel",
-    lockfile = "//cargo_aliases:Cargo.Bazel.lock",
+    lockfile = "//cargo_aliases:cargo-bazel-lock.json",
     manifests = ["//cargo_aliases:Cargo.toml"],
 )
 
@@ -53,11 +52,10 @@
 
 crates_repository(
     name = "crate_index_cargo_local",
+    cargo_lockfile = "//cargo_local:Cargo.lock",
     # `generator` is not necessary in official releases.
     # See load satement for `cargo_bazel_bootstrap`.
     generator = "@cargo_bazel_bootstrap//:cargo-bazel",
-    lockfile = "//cargo_local:Cargo.lock",
-    lockfile_kind = "cargo",
     manifests = ["//cargo_local:Cargo.toml"],
 )
 
@@ -84,11 +82,10 @@
 
 crates_repository(
     name = "crate_index_cargo_remote",
+    cargo_lockfile = "@names//:Cargo.lock",
     # `generator` is not necessary in official releases.
     # See load satement for `cargo_bazel_bootstrap`.
     generator = "@cargo_bazel_bootstrap//:cargo-bazel",
-    lockfile = "@names//:Cargo.lock",
-    lockfile_kind = "cargo",
     manifests = ["@names//:Cargo.toml"],
 )
 
@@ -105,10 +102,12 @@
 
 crates_repository(
     name = "crate_index_cargo_workspace",
+    cargo_config = "//cargo_workspace:.cargo/config.toml",
+    cargo_lockfile = "//cargo_workspace:Cargo.Bazel.lock",
     # `generator` is not necessary in official releases.
     # See load satement for `cargo_bazel_bootstrap`.
     generator = "@cargo_bazel_bootstrap//:cargo-bazel",
-    lockfile = "//cargo_workspace:Cargo.Bazel.lock",
+    lockfile = "//cargo_workspace:cargo-bazel-lock.json",
     manifests = [
         "//cargo_workspace:Cargo.toml",
         "//cargo_workspace/num_printer:Cargo.toml",
@@ -125,32 +124,6 @@
 cargo_workspace_crate_repositories()
 
 ###############################################################################
-# E X T R A   W O R K S P A C E   M E M B E R S
-###############################################################################
-
-crates_repository(
-    name = "crate_index_extra_members",
-    extra_workspace_members = {
-        "texture-synthesis-cli": crate.workspace_member(
-            sha256 = "a7dbdf13f5e6f214750fce1073279b71ce3076157a8d337c9b0f0e14334e2aec",
-            version = "0.8.2",
-        ),
-    },
-    # `generator` is not necessary in official releases.
-    # See load satement for `cargo_bazel_bootstrap`.
-    generator = "@cargo_bazel_bootstrap//:cargo-bazel",
-    lockfile = "//extra_workspace_members:Cargo.Bazel.lock",
-    manifests = ["//extra_workspace_members:Cargo.toml"],
-)
-
-load(
-    "@crate_index_extra_members//:defs.bzl",
-    extra_workspace_members_crate_repositories = "crate_repositories",
-)
-
-extra_workspace_members_crate_repositories()
-
-###############################################################################
 # M U L T I   P A C K A G E
 ###############################################################################
 
@@ -190,10 +163,11 @@
             build_script_data_glob = ["vendor/**"],
         )],
     },
+    cargo_lockfile = "//multi_package:Cargo.Bazel.lock",
     # `generator` is not necessary in official releases.
     # See load satement for `cargo_bazel_bootstrap`.
     generator = "@cargo_bazel_bootstrap//:cargo-bazel",
-    lockfile = "//multi_package:Cargo.Bazel.lock",
+    lockfile = "//multi_package:cargo-bazel-lock.json",
     manifests = [
         "//multi_package/pkg_a:Cargo.toml",
         "//multi_package/sub_pkgs/pkg_b:Cargo.toml",
@@ -228,10 +202,10 @@
 # perl is used to build openssl
 http_archive(
     name = "rules_perl",
-    sha256 = "55fbe071971772758ad669615fc9aac9b126db6ae45909f0f36de499f6201dd3",
-    strip_prefix = "rules_perl-2f4f36f454375e678e81e5ca465d4d497c5c02da",
+    sha256 = "0c0cc01b158321c3c84af49409393c14b66070249d0affb78a88ca594b2aa9c2",
+    strip_prefix = "rules_perl-43d2db0aafe595fe0ac61b808c9c13ea9769ce03",
     urls = [
-        "https://github.com/bazelbuild/rules_perl/archive/2f4f36f454375e678e81e5ca465d4d497c5c02da.tar.gz",
+        "https://github.com/bazelbuild/rules_perl/archive/43d2db0aafe595fe0ac61b808c9c13ea9769ce03.tar.gz",
     ],
 )
 
@@ -252,10 +226,11 @@
             compile_data_glob = ["**/*.md"],
         )],
     },
+    cargo_lockfile = "//no_cargo_manifests:Cargo.Bazel.lock",
     # `generator` is not necessary in official releases.
     # See load satement for `cargo_bazel_bootstrap`.
     generator = "@cargo_bazel_bootstrap//:cargo-bazel",
-    lockfile = "//no_cargo_manifests:Cargo.Bazel.lock",
+    lockfile = "//no_cargo_manifests:cargo-bazel-lock.json",
     packages = {
         "axum": crate.spec(
             version = "0.4.0",
@@ -302,6 +277,25 @@
 no_cargo_crate_repositories()
 
 ###############################################################################
+# V E N D O R   E X T E R N A L
+###############################################################################
+
+http_archive(
+    name = "names_external",
+    build_file = "//cargo_remote:BUILD.names.bazel",
+    sha256 = "eab40caca5805624ba31d028913931c3d054b22daafff6f43e3435cfa9fb761e",
+    strip_prefix = "names-0.13.0",
+    urls = ["https://github.com/fnichol/names/archive/refs/tags/v0.13.0.zip"],
+)
+
+load(
+    "//vendor_external/crates:crates.bzl",
+    crates_vendor_external_repositories = "crate_repositories",
+)
+
+crates_vendor_external_repositories()
+
+###############################################################################
 # V E N D O R   R E M O T E   M A N I F E S T S
 ###############################################################################
 
diff --git a/third_party/rules_rust/examples/crate_universe/cargo_aliases/Cargo.Bazel.lock b/third_party/rules_rust/examples/crate_universe/cargo_aliases/Cargo.Bazel.lock
index 596b054..ed8b08d 100644
--- a/third_party/rules_rust/examples/crate_universe/cargo_aliases/Cargo.Bazel.lock
+++ b/third_party/rules_rust/examples/crate_universe/cargo_aliases/Cargo.Bazel.lock
@@ -1,2535 +1,410 @@
-{
-  "checksum": "ba701df4681897610cd747b83f18fcb46468e975284b0ed0b596bcfaefe2a881",
-  "crates": {
-    "aho-corasick 0.7.18": {
-      "name": "aho-corasick",
-      "version": "0.7.18",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/aho-corasick/0.7.18/download",
-          "sha256": "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "aho_corasick",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "aho_corasick",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.7.18"
-      },
-      "license": "Unlicense/MIT"
-    },
-    "aliases 0.1.0": {
-      "name": "aliases",
-      "version": "0.1.0",
-      "repository": null,
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "aliases",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "aliases",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "log 0.3.9",
-              "target": "log",
-              "alias": "pinned_log"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "names 0.12.1-dev",
-              "target": "names",
-              "alias": "pinned_names"
-            },
-            {
-              "id": "names 0.13.0",
-              "target": "names"
-            },
-            {
-              "id": "value-bag 1.0.0-alpha.7",
-              "target": "value_bag"
-            }
-          ],
-          "selects": {}
-        },
-        "deps_dev": {
-          "common": [
-            {
-              "id": "env_logger 0.9.0",
-              "target": "env_logger"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.0"
-      },
-      "license": null
-    },
-    "atty 0.2.14": {
-      "name": "atty",
-      "version": "0.2.14",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/atty/0.2.14/download",
-          "sha256": "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "atty",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "atty",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(target_os = \"hermit\")": [
-              {
-                "id": "hermit-abi 0.1.19",
-                "target": "hermit_abi"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.2.14"
-      },
-      "license": "MIT"
-    },
-    "autocfg 1.1.0": {
-      "name": "autocfg",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/autocfg/1.1.0/download",
-          "sha256": "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "autocfg",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "autocfg",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.1.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "bitflags 1.3.2": {
-      "name": "bitflags",
-      "version": "1.3.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download",
-          "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "bitflags",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "bitflags",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2018",
-        "version": "1.3.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "cfg-if 1.0.0": {
-      "name": "cfg-if",
-      "version": "1.0.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
-          "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cfg_if",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cfg_if",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "clap 3.1.6": {
-      "name": "clap",
-      "version": "3.1.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/clap/3.1.6/download",
-          "sha256": "d8c93436c21e4698bacadf42917db28b23017027a4deccb35dbe47a7e7840123"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "clap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "clap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "atty",
-          "clap_derive",
-          "color",
-          "default",
-          "derive",
-          "lazy_static",
-          "std",
-          "strsim",
-          "suggestions",
-          "termcolor"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "atty 0.2.14",
-              "target": "atty"
-            },
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            },
-            {
-              "id": "indexmap 1.8.0",
-              "target": "indexmap"
-            },
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            },
-            {
-              "id": "os_str_bytes 6.0.0",
-              "target": "os_str_bytes"
-            },
-            {
-              "id": "strsim 0.10.0",
-              "target": "strsim"
-            },
-            {
-              "id": "termcolor 1.1.3",
-              "target": "termcolor"
-            },
-            {
-              "id": "textwrap 0.15.0",
-              "target": "textwrap"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "clap_derive 3.1.4",
-              "target": "clap_derive"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "3.1.6"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "clap_derive 3.1.4": {
-      "name": "clap_derive",
-      "version": "3.1.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/clap_derive/3.1.4/download",
-          "sha256": "da95d038ede1a964ce99f49cbe27a7fb538d1da595e4b4f70b8c8f338d17bf16"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "clap_derive",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "clap_derive",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "heck 0.4.0",
-              "target": "heck"
-            },
-            {
-              "id": "proc-macro-error 1.0.4",
-              "target": "proc_macro_error"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "3.1.4"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "ctor 0.1.21": {
-      "name": "ctor",
-      "version": "0.1.21",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ctor/0.1.21/download",
-          "sha256": "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "ctor",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ctor",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.21"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "env_logger 0.9.0": {
-      "name": "env_logger",
-      "version": "0.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/env_logger/0.9.0/download",
-          "sha256": "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "env_logger",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "env_logger",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "atty",
-          "default",
-          "humantime",
-          "regex",
-          "termcolor"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "atty 0.2.14",
-              "target": "atty"
-            },
-            {
-              "id": "humantime 2.1.0",
-              "target": "humantime"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            },
-            {
-              "id": "termcolor 1.1.3",
-              "target": "termcolor"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.9.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "getrandom 0.2.5": {
-      "name": "getrandom",
-      "version": "0.2.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/getrandom/0.2.5/download",
-          "sha256": "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "getrandom",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "getrandom",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            }
-          ],
-          "selects": {
-            "cfg(target_os = \"wasi\")": [
-              {
-                "id": "wasi 0.10.2+wasi-snapshot-preview1",
-                "target": "wasi"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.2.5"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "hashbrown 0.11.2": {
-      "name": "hashbrown",
-      "version": "0.11.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hashbrown/0.11.2/download",
-          "sha256": "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hashbrown",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hashbrown",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "raw"
-        ],
-        "edition": "2018",
-        "version": "0.11.2"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "heck 0.4.0": {
-      "name": "heck",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/heck/0.4.0/download",
-          "sha256": "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "heck",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "heck",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2018",
-        "version": "0.4.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "hermit-abi 0.1.19": {
-      "name": "hermit-abi",
-      "version": "0.1.19",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download",
-          "sha256": "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hermit_abi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hermit_abi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.19"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "humantime 2.1.0": {
-      "name": "humantime",
-      "version": "2.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/humantime/2.1.0/download",
-          "sha256": "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "humantime",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "humantime",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "2.1.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "indexmap 1.8.0": {
-      "name": "indexmap",
-      "version": "1.8.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/indexmap/1.8.0/download",
-          "sha256": "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "indexmap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "indexmap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "hashbrown 0.11.2",
-              "target": "hashbrown"
-            },
-            {
-              "id": "indexmap 1.8.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.8.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "autocfg 1.1.0",
-              "target": "autocfg"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "lazy_static 1.4.0": {
-      "name": "lazy_static",
-      "version": "1.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/lazy_static/1.4.0/download",
-          "sha256": "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "lazy_static",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "lazy_static",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.4.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "libc 0.2.119": {
-      "name": "libc",
-      "version": "0.2.119",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/libc/0.2.119/download",
-          "sha256": "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "libc",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "libc",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.2.119"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "log 0.3.9": {
-      "name": "log",
-      "version": "0.3.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/log/0.3.9/download",
-          "sha256": "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "log",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "log",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "use_std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.3.9"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "log 0.4.14": {
-      "name": "log",
-      "version": "0.4.14",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/log/0.4.14/download",
-          "sha256": "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "log",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "log",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.14"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "memchr 2.4.1": {
-      "name": "memchr",
-      "version": "2.4.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/memchr/2.4.1/download",
-          "sha256": "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "memchr",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "memchr",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "memchr 2.4.1",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "2.4.1"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "Unlicense/MIT"
-    },
-    "names 0.12.1-dev": {
-      "name": "names",
-      "version": "0.12.1-dev",
-      "repository": {
-        "Git": {
-          "remote": "https://github.com/fnichol/names.git",
-          "commitish": {
-            "Rev": "760516503b89ddc8bc2ab42d579d4566cfb1054f"
-          },
-          "shallow_since": "1646516410 -0700"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "names",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "Binary": {
-            "crate_name": "names",
-            "crate_root": "src/bin/names.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "names",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "application",
-          "clap",
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "clap 3.1.6",
-              "target": "clap"
-            },
-            {
-              "id": "names 0.12.1-dev",
-              "target": "build_script_build"
-            },
-            {
-              "id": "rand 0.8.5",
-              "target": "rand"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.12.1-dev"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT"
-    },
-    "names 0.13.0": {
-      "name": "names",
-      "version": "0.13.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/names/0.13.0/download",
-          "sha256": "e7d66043b25d4a6cccb23619d10c19c25304b355a7dccd4a8e11423dd2382146"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "names",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "Binary": {
-            "crate_name": "names",
-            "crate_root": "src/bin/names.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "names",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "application",
-          "clap",
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "clap 3.1.6",
-              "target": "clap"
-            },
-            {
-              "id": "names 0.13.0",
-              "target": "build_script_build"
-            },
-            {
-              "id": "rand 0.8.5",
-              "target": "rand"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.13.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT"
-    },
-    "os_str_bytes 6.0.0": {
-      "name": "os_str_bytes",
-      "version": "6.0.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/os_str_bytes/6.0.0/download",
-          "sha256": "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "os_str_bytes",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "os_str_bytes",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "memchr",
-          "raw_os_str"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "6.0.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "ppv-lite86 0.2.16": {
-      "name": "ppv-lite86",
-      "version": "0.2.16",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ppv-lite86/0.2.16/download",
-          "sha256": "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ppv_lite86",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ppv_lite86",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "simd",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.2.16"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "proc-macro-error 1.0.4": {
-      "name": "proc-macro-error",
-      "version": "1.0.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/proc-macro-error/1.0.4/download",
-          "sha256": "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "proc_macro_error",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "proc_macro_error",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "syn",
-          "syn-error"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro-error 1.0.4",
-              "target": "build_script_build"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "proc-macro-error-attr 1.0.4",
-              "target": "proc_macro_error_attr"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "1.0.4"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "version_check 0.9.4",
-              "target": "version_check"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "proc-macro-error-attr 1.0.4": {
-      "name": "proc-macro-error-attr",
-      "version": "1.0.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/proc-macro-error-attr/1.0.4/download",
-          "sha256": "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "proc_macro_error_attr",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "proc_macro_error_attr",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro-error-attr 1.0.4",
-              "target": "build_script_build"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.4"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "version_check 0.9.4",
-              "target": "version_check"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "proc-macro2 1.0.36": {
-      "name": "proc-macro2",
-      "version": "1.0.36",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/proc-macro2/1.0.36/download",
-          "sha256": "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "proc_macro2",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "proc_macro2",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "proc-macro"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "build_script_build"
-            },
-            {
-              "id": "unicode-xid 0.2.2",
-              "target": "unicode_xid"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.36"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "quote 1.0.15": {
-      "name": "quote",
-      "version": "1.0.15",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/quote/1.0.15/download",
-          "sha256": "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "quote",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "quote",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "proc-macro"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.15"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rand 0.8.5": {
-      "name": "rand",
-      "version": "0.8.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand/0.8.5/download",
-          "sha256": "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "getrandom",
-          "libc",
-          "rand_chacha",
-          "std",
-          "std_rng"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "rand_chacha 0.3.1",
-              "target": "rand_chacha"
-            },
-            {
-              "id": "rand_core 0.6.3",
-              "target": "rand_core"
-            }
-          ],
-          "selects": {
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.8.5"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rand_chacha 0.3.1": {
-      "name": "rand_chacha",
-      "version": "0.3.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand_chacha/0.3.1/download",
-          "sha256": "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand_chacha",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand_chacha",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "ppv-lite86 0.2.16",
-              "target": "ppv_lite86"
-            },
-            {
-              "id": "rand_core 0.6.3",
-              "target": "rand_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rand_core 0.6.3": {
-      "name": "rand_core",
-      "version": "0.6.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand_core/0.6.3/download",
-          "sha256": "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand_core",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand_core",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "getrandom",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "getrandom 0.2.5",
-              "target": "getrandom"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.6.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "regex 1.5.4": {
-      "name": "regex",
-      "version": "1.5.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/regex/1.5.4/download",
-          "sha256": "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "regex",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "regex",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "aho-corasick",
-          "memchr",
-          "perf",
-          "perf-cache",
-          "perf-dfa",
-          "perf-inline",
-          "perf-literal",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "aho-corasick 0.7.18",
-              "target": "aho_corasick"
-            },
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            },
-            {
-              "id": "regex-syntax 0.6.25",
-              "target": "regex_syntax"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.5.4"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "regex-syntax 0.6.25": {
-      "name": "regex-syntax",
-      "version": "0.6.25",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/regex-syntax/0.6.25/download",
-          "sha256": "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "regex_syntax",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "regex_syntax",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.6.25"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "strsim 0.10.0": {
-      "name": "strsim",
-      "version": "0.10.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/strsim/0.10.0/download",
-          "sha256": "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "strsim",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "strsim",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.10.0"
-      },
-      "license": "MIT"
-    },
-    "syn 1.0.86": {
-      "name": "syn",
-      "version": "1.0.86",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/syn/1.0.86/download",
-          "sha256": "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "syn",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "syn",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "clone-impls",
-          "default",
-          "derive",
-          "full",
-          "parsing",
-          "printing",
-          "proc-macro",
-          "quote"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "build_script_build"
-            },
-            {
-              "id": "unicode-xid 0.2.2",
-              "target": "unicode_xid"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.86"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "termcolor 1.1.3": {
-      "name": "termcolor",
-      "version": "1.1.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/termcolor/1.1.3/download",
-          "sha256": "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "termcolor",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "termcolor",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi-util 0.1.5",
-                "target": "winapi_util"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "1.1.3"
-      },
-      "license": "Unlicense OR MIT"
-    },
-    "textwrap 0.15.0": {
-      "name": "textwrap",
-      "version": "0.15.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/textwrap/0.15.0/download",
-          "sha256": "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "textwrap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "textwrap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.15.0"
-      },
-      "license": "MIT"
-    },
-    "unicode-xid 0.2.2": {
-      "name": "unicode-xid",
-      "version": "0.2.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-xid/0.2.2/download",
-          "sha256": "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_xid",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_xid",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2015",
-        "version": "0.2.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "value-bag 1.0.0-alpha.7": {
-      "name": "value-bag",
-      "version": "1.0.0-alpha.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/value-bag/1.0.0-alpha.7/download",
-          "sha256": "dd320e1520f94261153e96f7534476ad869c14022aee1e59af7c778075d840ae"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "value_bag",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "value_bag",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "value-bag 1.0.0-alpha.7",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "ctor 0.1.21",
-              "target": "ctor"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "1.0.0-alpha.7"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "version_check 0.9.4",
-              "target": "version_check",
-              "alias": "rustc"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "version_check 0.9.4": {
-      "name": "version_check",
-      "version": "0.9.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/version_check/0.9.4/download",
-          "sha256": "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "version_check",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "version_check",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.9.4"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "wasi 0.10.2+wasi-snapshot-preview1": {
-      "name": "wasi",
-      "version": "0.10.2+wasi-snapshot-preview1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/wasi/0.10.2+wasi-snapshot-preview1/download",
-          "sha256": "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "wasi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "wasi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.10.2+wasi-snapshot-preview1"
-      },
-      "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT"
-    },
-    "winapi 0.3.9": {
-      "name": "winapi",
-      "version": "0.3.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download",
-          "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "consoleapi",
-          "errhandlingapi",
-          "fileapi",
-          "minwinbase",
-          "minwindef",
-          "processenv",
-          "std",
-          "winbase",
-          "wincon",
-          "winerror",
-          "winnt"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi 0.3.9",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {
-            "i686-pc-windows-gnu": [
-              {
-                "id": "winapi-i686-pc-windows-gnu 0.4.0",
-                "target": "winapi_i686_pc_windows_gnu"
-              }
-            ],
-            "x86_64-pc-windows-gnu": [
-              {
-                "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
-                "target": "winapi_x86_64_pc_windows_gnu"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.3.9"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "winapi-i686-pc-windows-gnu 0.4.0": {
-      "name": "winapi-i686-pc-windows-gnu",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
-          "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_i686_pc_windows_gnu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_i686_pc_windows_gnu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi-i686-pc-windows-gnu 0.4.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "winapi-util 0.1.5": {
-      "name": "winapi-util",
-      "version": "0.1.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-util/0.1.5/download",
-          "sha256": "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_util",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_util",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.1.5"
-      },
-      "license": "Unlicense/MIT"
-    },
-    "winapi-x86_64-pc-windows-gnu 0.4.0": {
-      "name": "winapi-x86_64-pc-windows-gnu",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
-          "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_x86_64_pc_windows_gnu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_x86_64_pc_windows_gnu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    }
-  },
-  "binary_crates": [
-    "names 0.12.1-dev",
-    "names 0.13.0"
-  ],
-  "workspace_members": {
-    "aliases 0.1.0": "cargo_aliases"
-  },
-  "conditions": {
-    "cfg(target_os = \"hermit\")": [],
-    "cfg(target_os = \"wasi\")": [
-      "wasm32-wasi"
-    ],
-    "cfg(unix)": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(windows)": [
-      "i686-pc-windows-msvc",
-      "x86_64-pc-windows-msvc"
-    ],
-    "i686-pc-windows-gnu": [],
-    "x86_64-pc-windows-gnu": []
-  }
-}
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "aliases"
+version = "0.1.0"
+dependencies = [
+ "env_logger",
+ "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.14 (registry+https://github.com/rust-lang/crates.io-index)",
+ "names 0.12.1-dev (git+https://github.com/fnichol/names.git?rev=760516503b89ddc8bc2ab42d579d4566cfb1054f#760516503b89ddc8bc2ab42d579d4566cfb1054f)",
+ "names 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "value-bag",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "3.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "190814073e85d238f31ff738fcb0bf6910cedeb73376c87cd69291028966fd83"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_derive",
+ "clap_lex",
+ "indexmap",
+ "once_cell",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
+dependencies = [
+ "atty",
+ "humantime",
+ "log 0.4.14 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
+
+[[package]]
+name = "heck"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "indexmap"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "log"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
+dependencies = [
+ "log 0.4.14 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "names"
+version = "0.12.1-dev"
+source = "git+https://github.com/fnichol/names.git?rev=760516503b89ddc8bc2ab42d579d4566cfb1054f#760516503b89ddc8bc2ab42d579d4566cfb1054f"
+dependencies = [
+ "clap",
+ "rand",
+]
+
+[[package]]
+name = "names"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7d66043b25d4a6cccb23619d10c19c25304b355a7dccd4a8e11423dd2382146"
+dependencies = [
+ "clap",
+ "rand",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
+
+[[package]]
+name = "os_str_bytes"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "regex"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.98"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
+
+[[package]]
+name = "value-bag"
+version = "1.0.0-alpha.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd320e1520f94261153e96f7534476ad869c14022aee1e59af7c778075d840ae"
+dependencies = [
+ "ctor",
+ "version_check",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/third_party/rules_rust/examples/crate_universe/cargo_aliases/cargo-bazel-lock.json b/third_party/rules_rust/examples/crate_universe/cargo_aliases/cargo-bazel-lock.json
new file mode 100644
index 0000000..7c11d08
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/cargo_aliases/cargo-bazel-lock.json
@@ -0,0 +1,2605 @@
+{
+  "checksum": "18e65377d421f78219df17791be449590f3d10960d5595f9005cee735032567b",
+  "crates": {
+    "aho-corasick 0.7.18": {
+      "name": "aho-corasick",
+      "version": "0.7.18",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/aho-corasick/0.7.18/download",
+          "sha256": "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "aho_corasick",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "aho_corasick",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "memchr 2.5.0",
+              "target": "memchr"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.7.18"
+      },
+      "license": "Unlicense/MIT"
+    },
+    "aliases 0.1.0": {
+      "name": "aliases",
+      "version": "0.1.0",
+      "repository": null,
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "aliases",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "aliases",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "log 0.3.9",
+              "target": "log",
+              "alias": "pinned_log"
+            },
+            {
+              "id": "log 0.4.14",
+              "target": "log"
+            },
+            {
+              "id": "names 0.12.1-dev",
+              "target": "names",
+              "alias": "pinned_names"
+            },
+            {
+              "id": "names 0.13.0",
+              "target": "names"
+            },
+            {
+              "id": "value-bag 1.0.0-alpha.7",
+              "target": "value_bag"
+            }
+          ],
+          "selects": {}
+        },
+        "deps_dev": {
+          "common": [
+            {
+              "id": "env_logger 0.9.0",
+              "target": "env_logger"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.0"
+      },
+      "license": null
+    },
+    "atty 0.2.14": {
+      "name": "atty",
+      "version": "0.2.14",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/atty/0.2.14/download",
+          "sha256": "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "atty",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "atty",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [],
+          "selects": {
+            "cfg(target_os = \"hermit\")": [
+              {
+                "id": "hermit-abi 0.1.19",
+                "target": "hermit_abi"
+              }
+            ],
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2015",
+        "version": "0.2.14"
+      },
+      "license": "MIT"
+    },
+    "autocfg 1.1.0": {
+      "name": "autocfg",
+      "version": "1.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/autocfg/1.1.0/download",
+          "sha256": "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "autocfg",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "autocfg",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "1.1.0"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "bitflags 1.3.2": {
+      "name": "bitflags",
+      "version": "1.3.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download",
+          "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "bitflags",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "bitflags",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "edition": "2018",
+        "version": "1.3.2"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "cfg-if 1.0.0": {
+      "name": "cfg-if",
+      "version": "1.0.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
+          "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "cfg_if",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "cfg_if",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.0.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "clap 3.2.8": {
+      "name": "clap",
+      "version": "3.2.8",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/clap/3.2.8/download",
+          "sha256": "190814073e85d238f31ff738fcb0bf6910cedeb73376c87cd69291028966fd83"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "clap",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "Binary": {
+            "crate_name": "stdio-fixture",
+            "crate_root": "src/bin/stdio-fixture.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "clap",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "atty",
+          "clap_derive",
+          "color",
+          "default",
+          "derive",
+          "once_cell",
+          "std",
+          "strsim",
+          "suggestions",
+          "termcolor"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "atty 0.2.14",
+              "target": "atty"
+            },
+            {
+              "id": "bitflags 1.3.2",
+              "target": "bitflags"
+            },
+            {
+              "id": "clap_lex 0.2.4",
+              "target": "clap_lex"
+            },
+            {
+              "id": "indexmap 1.9.1",
+              "target": "indexmap"
+            },
+            {
+              "id": "once_cell 1.13.0",
+              "target": "once_cell"
+            },
+            {
+              "id": "strsim 0.10.0",
+              "target": "strsim"
+            },
+            {
+              "id": "termcolor 1.1.3",
+              "target": "termcolor"
+            },
+            {
+              "id": "textwrap 0.15.0",
+              "target": "textwrap"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2021",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "clap_derive 3.2.7",
+              "target": "clap_derive"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "3.2.8"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "clap_derive 3.2.7": {
+      "name": "clap_derive",
+      "version": "3.2.7",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/clap_derive/3.2.7/download",
+          "sha256": "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "clap_derive",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "clap_derive",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "heck 0.4.0",
+              "target": "heck"
+            },
+            {
+              "id": "proc-macro-error 1.0.4",
+              "target": "proc_macro_error"
+            },
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2021",
+        "version": "3.2.7"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "clap_lex 0.2.4": {
+      "name": "clap_lex",
+      "version": "0.2.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/clap_lex/0.2.4/download",
+          "sha256": "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "clap_lex",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "clap_lex",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "os_str_bytes 6.1.0",
+              "target": "os_str_bytes"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2021",
+        "version": "0.2.4"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "ctor 0.1.22": {
+      "name": "ctor",
+      "version": "0.1.22",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/ctor/0.1.22/download",
+          "sha256": "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "ctor",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "ctor",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.22"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "env_logger 0.9.0": {
+      "name": "env_logger",
+      "version": "0.9.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/env_logger/0.9.0/download",
+          "sha256": "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "env_logger",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "env_logger",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "atty",
+          "default",
+          "humantime",
+          "regex",
+          "termcolor"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "atty 0.2.14",
+              "target": "atty"
+            },
+            {
+              "id": "humantime 2.1.0",
+              "target": "humantime"
+            },
+            {
+              "id": "log 0.4.14",
+              "target": "log"
+            },
+            {
+              "id": "regex 1.6.0",
+              "target": "regex"
+            },
+            {
+              "id": "termcolor 1.1.3",
+              "target": "termcolor"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.9.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "getrandom 0.2.7": {
+      "name": "getrandom",
+      "version": "0.2.7",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/getrandom/0.2.7/download",
+          "sha256": "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "getrandom",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "getrandom",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            }
+          ],
+          "selects": {
+            "cfg(target_os = \"wasi\")": [
+              {
+                "id": "wasi 0.11.0+wasi-snapshot-preview1",
+                "target": "wasi"
+              }
+            ],
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.2.7"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "hashbrown 0.12.1": {
+      "name": "hashbrown",
+      "version": "0.12.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/hashbrown/0.12.1/download",
+          "sha256": "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "hashbrown",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "hashbrown",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "raw"
+        ],
+        "edition": "2021",
+        "version": "0.12.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "heck 0.4.0": {
+      "name": "heck",
+      "version": "0.4.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/heck/0.4.0/download",
+          "sha256": "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "heck",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "heck",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "edition": "2018",
+        "version": "0.4.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "hermit-abi 0.1.19": {
+      "name": "hermit-abi",
+      "version": "0.1.19",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download",
+          "sha256": "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "hermit_abi",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "hermit_abi",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "libc 0.2.126",
+              "target": "libc"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.19"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "humantime 2.1.0": {
+      "name": "humantime",
+      "version": "2.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/humantime/2.1.0/download",
+          "sha256": "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "humantime",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "humantime",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "2.1.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "indexmap 1.9.1": {
+      "name": "indexmap",
+      "version": "1.9.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/indexmap/1.9.1/download",
+          "sha256": "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "indexmap",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "indexmap",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "hashbrown 0.12.1",
+              "target": "hashbrown"
+            },
+            {
+              "id": "indexmap 1.9.1",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2021",
+        "version": "1.9.1"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "autocfg 1.1.0",
+              "target": "autocfg"
+            }
+          ],
+          "selects": {}
+        }
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "libc 0.2.126": {
+      "name": "libc",
+      "version": "0.2.126",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/libc/0.2.126/download",
+          "sha256": "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "libc",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "libc",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "libc 0.2.126",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.2.126"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "log 0.3.9": {
+      "name": "log",
+      "version": "0.3.9",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/log/0.3.9/download",
+          "sha256": "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "log",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "log",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "use_std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "log 0.4.14",
+              "target": "log"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.3.9"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "log 0.4.14": {
+      "name": "log",
+      "version": "0.4.14",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/log/0.4.14/download",
+          "sha256": "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "log",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "log",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "log 0.4.14",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.4.14"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "memchr 2.5.0": {
+      "name": "memchr",
+      "version": "2.5.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/memchr/2.5.0/download",
+          "sha256": "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "memchr",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "memchr",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "memchr 2.5.0",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "2.5.0"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "Unlicense/MIT"
+    },
+    "names 0.12.1-dev": {
+      "name": "names",
+      "version": "0.12.1-dev",
+      "repository": {
+        "Git": {
+          "remote": "https://github.com/fnichol/names.git",
+          "commitish": {
+            "Rev": "760516503b89ddc8bc2ab42d579d4566cfb1054f"
+          },
+          "shallow_since": "1646516410 -0700"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "names",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "Binary": {
+            "crate_name": "names",
+            "crate_root": "src/bin/names.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "names",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "application",
+          "clap",
+          "default"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "clap 3.2.8",
+              "target": "clap"
+            },
+            {
+              "id": "names 0.12.1-dev",
+              "target": "build_script_build"
+            },
+            {
+              "id": "rand 0.8.5",
+              "target": "rand"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.12.1-dev"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT"
+    },
+    "names 0.13.0": {
+      "name": "names",
+      "version": "0.13.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/names/0.13.0/download",
+          "sha256": "e7d66043b25d4a6cccb23619d10c19c25304b355a7dccd4a8e11423dd2382146"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "names",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "Binary": {
+            "crate_name": "names",
+            "crate_root": "src/bin/names.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "names",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "application",
+          "clap",
+          "default"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "clap 3.2.8",
+              "target": "clap"
+            },
+            {
+              "id": "names 0.13.0",
+              "target": "build_script_build"
+            },
+            {
+              "id": "rand 0.8.5",
+              "target": "rand"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.13.0"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT"
+    },
+    "once_cell 1.13.0": {
+      "name": "once_cell",
+      "version": "1.13.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/once_cell/1.13.0/download",
+          "sha256": "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "once_cell",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "once_cell",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "default",
+          "race",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "1.13.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "os_str_bytes 6.1.0": {
+      "name": "os_str_bytes",
+      "version": "6.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/os_str_bytes/6.1.0/download",
+          "sha256": "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "os_str_bytes",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "os_str_bytes",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "raw_os_str"
+        ],
+        "edition": "2018",
+        "version": "6.1.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "ppv-lite86 0.2.16": {
+      "name": "ppv-lite86",
+      "version": "0.2.16",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/ppv-lite86/0.2.16/download",
+          "sha256": "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "ppv_lite86",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "ppv_lite86",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "simd",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "0.2.16"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "proc-macro-error 1.0.4": {
+      "name": "proc-macro-error",
+      "version": "1.0.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/proc-macro-error/1.0.4/download",
+          "sha256": "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "proc_macro_error",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "proc_macro_error",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "syn",
+          "syn-error"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro-error 1.0.4",
+              "target": "build_script_build"
+            },
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "proc-macro-error-attr 1.0.4",
+              "target": "proc_macro_error_attr"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "1.0.4"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "version_check 0.9.4",
+              "target": "version_check"
+            }
+          ],
+          "selects": {}
+        }
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "proc-macro-error-attr 1.0.4": {
+      "name": "proc-macro-error-attr",
+      "version": "1.0.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/proc-macro-error-attr/1.0.4/download",
+          "sha256": "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "proc_macro_error_attr",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "proc_macro_error_attr",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro-error-attr 1.0.4",
+              "target": "build_script_build"
+            },
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.4"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "version_check 0.9.4",
+              "target": "version_check"
+            }
+          ],
+          "selects": {}
+        }
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "proc-macro2 1.0.40": {
+      "name": "proc-macro2",
+      "version": "1.0.40",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/proc-macro2/1.0.40/download",
+          "sha256": "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "proc_macro2",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "proc_macro2",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "proc-macro"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "build_script_build"
+            },
+            {
+              "id": "unicode-ident 1.0.1",
+              "target": "unicode_ident"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.40"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "quote 1.0.20": {
+      "name": "quote",
+      "version": "1.0.20",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/quote/1.0.20/download",
+          "sha256": "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "quote",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "quote",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "proc-macro"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.20"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "rand 0.8.5": {
+      "name": "rand",
+      "version": "0.8.5",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/rand/0.8.5/download",
+          "sha256": "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "rand",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "rand",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "default",
+          "getrandom",
+          "libc",
+          "rand_chacha",
+          "std",
+          "std_rng"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "rand_chacha 0.3.1",
+              "target": "rand_chacha"
+            },
+            {
+              "id": "rand_core 0.6.3",
+              "target": "rand_core"
+            }
+          ],
+          "selects": {
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.8.5"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "rand_chacha 0.3.1": {
+      "name": "rand_chacha",
+      "version": "0.3.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/rand_chacha/0.3.1/download",
+          "sha256": "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "rand_chacha",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "rand_chacha",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "ppv-lite86 0.2.16",
+              "target": "ppv_lite86"
+            },
+            {
+              "id": "rand_core 0.6.3",
+              "target": "rand_core"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "rand_core 0.6.3": {
+      "name": "rand_core",
+      "version": "0.6.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/rand_core/0.6.3/download",
+          "sha256": "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "rand_core",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "rand_core",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "getrandom",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "getrandom 0.2.7",
+              "target": "getrandom"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.6.3"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "regex 1.6.0": {
+      "name": "regex",
+      "version": "1.6.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/regex/1.6.0/download",
+          "sha256": "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "regex",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "regex",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "aho-corasick",
+          "memchr",
+          "perf",
+          "perf-cache",
+          "perf-dfa",
+          "perf-inline",
+          "perf-literal",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "aho-corasick 0.7.18",
+              "target": "aho_corasick"
+            },
+            {
+              "id": "memchr 2.5.0",
+              "target": "memchr"
+            },
+            {
+              "id": "regex-syntax 0.6.27",
+              "target": "regex_syntax"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.6.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "regex-syntax 0.6.27": {
+      "name": "regex-syntax",
+      "version": "0.6.27",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/regex-syntax/0.6.27/download",
+          "sha256": "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "regex_syntax",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "regex_syntax",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.6.27"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "strsim 0.10.0": {
+      "name": "strsim",
+      "version": "0.10.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/strsim/0.10.0/download",
+          "sha256": "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "strsim",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "strsim",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.10.0"
+      },
+      "license": "MIT"
+    },
+    "syn 1.0.98": {
+      "name": "syn",
+      "version": "1.0.98",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/syn/1.0.98/download",
+          "sha256": "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "syn",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "syn",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "clone-impls",
+          "default",
+          "derive",
+          "full",
+          "parsing",
+          "printing",
+          "proc-macro",
+          "quote"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "build_script_build"
+            },
+            {
+              "id": "unicode-ident 1.0.1",
+              "target": "unicode_ident"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.98"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "termcolor 1.1.3": {
+      "name": "termcolor",
+      "version": "1.1.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/termcolor/1.1.3/download",
+          "sha256": "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "termcolor",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "termcolor",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [],
+          "selects": {
+            "cfg(windows)": [
+              {
+                "id": "winapi-util 0.1.5",
+                "target": "winapi_util"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "1.1.3"
+      },
+      "license": "Unlicense OR MIT"
+    },
+    "textwrap 0.15.0": {
+      "name": "textwrap",
+      "version": "0.15.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/textwrap/0.15.0/download",
+          "sha256": "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "textwrap",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "textwrap",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.15.0"
+      },
+      "license": "MIT"
+    },
+    "unicode-ident 1.0.1": {
+      "name": "unicode-ident",
+      "version": "1.0.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/unicode-ident/1.0.1/download",
+          "sha256": "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "unicode_ident",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "unicode_ident",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.0.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "value-bag 1.0.0-alpha.7": {
+      "name": "value-bag",
+      "version": "1.0.0-alpha.7",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/value-bag/1.0.0-alpha.7/download",
+          "sha256": "dd320e1520f94261153e96f7534476ad869c14022aee1e59af7c778075d840ae"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "value_bag",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "value_bag",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "value-bag 1.0.0-alpha.7",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "ctor 0.1.22",
+              "target": "ctor"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "1.0.0-alpha.7"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "version_check 0.9.4",
+              "target": "version_check",
+              "alias": "rustc"
+            }
+          ],
+          "selects": {}
+        }
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "version_check 0.9.4": {
+      "name": "version_check",
+      "version": "0.9.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/version_check/0.9.4/download",
+          "sha256": "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "version_check",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "version_check",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.9.4"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "wasi 0.11.0+wasi-snapshot-preview1": {
+      "name": "wasi",
+      "version": "0.11.0+wasi-snapshot-preview1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/wasi/0.11.0+wasi-snapshot-preview1/download",
+          "sha256": "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "wasi",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "wasi",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "0.11.0+wasi-snapshot-preview1"
+      },
+      "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT"
+    },
+    "winapi 0.3.9": {
+      "name": "winapi",
+      "version": "0.3.9",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download",
+          "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "winapi",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "winapi",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "consoleapi",
+          "errhandlingapi",
+          "fileapi",
+          "minwinbase",
+          "minwindef",
+          "processenv",
+          "std",
+          "winbase",
+          "wincon",
+          "winerror",
+          "winnt"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "winapi 0.3.9",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {
+            "i686-pc-windows-gnu": [
+              {
+                "id": "winapi-i686-pc-windows-gnu 0.4.0",
+                "target": "winapi_i686_pc_windows_gnu"
+              }
+            ],
+            "x86_64-pc-windows-gnu": [
+              {
+                "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
+                "target": "winapi_x86_64_pc_windows_gnu"
+              }
+            ]
+          }
+        },
+        "edition": "2015",
+        "version": "0.3.9"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "winapi-i686-pc-windows-gnu 0.4.0": {
+      "name": "winapi-i686-pc-windows-gnu",
+      "version": "0.4.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
+          "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "winapi_i686_pc_windows_gnu",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "winapi_i686_pc_windows_gnu",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "winapi-i686-pc-windows-gnu 0.4.0",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.4.0"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "winapi-util 0.1.5": {
+      "name": "winapi-util",
+      "version": "0.1.5",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/winapi-util/0.1.5/download",
+          "sha256": "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "winapi_util",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "winapi_util",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [],
+          "selects": {
+            "cfg(windows)": [
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.1.5"
+      },
+      "license": "Unlicense/MIT"
+    },
+    "winapi-x86_64-pc-windows-gnu 0.4.0": {
+      "name": "winapi-x86_64-pc-windows-gnu",
+      "version": "0.4.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
+          "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "winapi_x86_64_pc_windows_gnu",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "winapi_x86_64_pc_windows_gnu",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.4.0"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT/Apache-2.0"
+    }
+  },
+  "binary_crates": [
+    "clap 3.2.8",
+    "names 0.12.1-dev",
+    "names 0.13.0"
+  ],
+  "workspace_members": {
+    "aliases 0.1.0": "cargo_aliases"
+  },
+  "conditions": {
+    "cfg(target_os = \"hermit\")": [],
+    "cfg(target_os = \"wasi\")": [
+      "wasm32-wasi"
+    ],
+    "cfg(unix)": [
+      "aarch64-apple-darwin",
+      "aarch64-apple-ios",
+      "aarch64-apple-ios-sim",
+      "aarch64-linux-android",
+      "aarch64-unknown-linux-gnu",
+      "arm-unknown-linux-gnueabi",
+      "armv7-linux-androideabi",
+      "armv7-unknown-linux-gnueabi",
+      "i686-apple-darwin",
+      "i686-linux-android",
+      "i686-unknown-freebsd",
+      "i686-unknown-linux-gnu",
+      "powerpc-unknown-linux-gnu",
+      "s390x-unknown-linux-gnu",
+      "x86_64-apple-darwin",
+      "x86_64-apple-ios",
+      "x86_64-linux-android",
+      "x86_64-unknown-freebsd",
+      "x86_64-unknown-linux-gnu"
+    ],
+    "cfg(windows)": [
+      "i686-pc-windows-msvc",
+      "x86_64-pc-windows-msvc"
+    ],
+    "i686-pc-windows-gnu": [],
+    "x86_64-pc-windows-gnu": []
+  }
+}
diff --git a/third_party/rules_rust/examples/crate_universe/cargo_local/Cargo.lock b/third_party/rules_rust/examples/crate_universe/cargo_local/Cargo.lock
index 6e94606..a9454b6 100644
--- a/third_party/rules_rust/examples/crate_universe/cargo_local/Cargo.lock
+++ b/third_party/rules_rust/examples/crate_universe/cargo_local/Cargo.lock
@@ -4,9 +4,9 @@
 
 [[package]]
 name = "async-stream"
-version = "0.3.2"
+version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "171374e7e3b2504e0e5236e3b59260560f9fe94bfe9ac39ba5e4e929c5590625"
+checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e"
 dependencies = [
  "async-stream-impl",
  "futures-core",
@@ -14,9 +14,9 @@
 
 [[package]]
 name = "async-stream-impl"
-version = "0.3.2"
+version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308"
+checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -25,9 +25,9 @@
 
 [[package]]
 name = "autocfg"
-version = "1.0.1"
+version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 
 [[package]]
 name = "bitflags"
@@ -57,21 +57,19 @@
 checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 
 [[package]]
-name = "futures-core"
-version = "0.3.17"
+name = "fastrand"
+version = "1.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d"
+checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
+dependencies = [
+ "instant",
+]
 
 [[package]]
-name = "getrandom"
-version = "0.2.3"
+name = "futures-core"
+version = "0.3.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
-dependencies = [
- "cfg-if",
- "libc",
- "wasi",
-]
+checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
 
 [[package]]
 name = "hermit-abi"
@@ -84,79 +82,61 @@
 
 [[package]]
 name = "instant"
-version = "0.1.11"
+version = "0.1.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "716d3d89f35ac6a34fd0eed635395f4c3b76fa889338a4632e5231a8684216bd"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
 dependencies = [
  "cfg-if",
 ]
 
 [[package]]
 name = "libc"
-version = "0.2.103"
+version = "0.2.126"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
 
 [[package]]
 name = "lock_api"
-version = "0.4.5"
+version = "0.4.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109"
+checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53"
 dependencies = [
+ "autocfg",
  "scopeguard",
 ]
 
 [[package]]
 name = "log"
-version = "0.4.14"
+version = "0.4.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
 dependencies = [
  "cfg-if",
 ]
 
 [[package]]
 name = "memchr"
-version = "2.4.1"
+version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
 
 [[package]]
 name = "mio"
-version = "0.7.13"
+version = "0.8.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16"
+checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf"
 dependencies = [
  "libc",
  "log",
- "miow",
- "ntapi",
- "winapi",
-]
-
-[[package]]
-name = "miow"
-version = "0.3.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
-dependencies = [
- "winapi",
-]
-
-[[package]]
-name = "ntapi"
-version = "0.3.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"
-dependencies = [
- "winapi",
+ "wasi",
+ "windows-sys",
 ]
 
 [[package]]
 name = "num_cpus"
-version = "1.13.0"
+version = "1.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
 dependencies = [
  "hermit-abi",
  "libc",
@@ -164,110 +144,62 @@
 
 [[package]]
 name = "once_cell"
-version = "1.8.0"
+version = "1.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
+checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
 
 [[package]]
 name = "parking_lot"
-version = "0.11.2"
+version = "0.12.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
 dependencies = [
- "instant",
  "lock_api",
  "parking_lot_core",
 ]
 
 [[package]]
 name = "parking_lot_core"
-version = "0.8.5"
+version = "0.9.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
+checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929"
 dependencies = [
  "cfg-if",
- "instant",
  "libc",
  "redox_syscall",
  "smallvec",
- "winapi",
+ "windows-sys",
 ]
 
 [[package]]
 name = "pin-project-lite"
-version = "0.2.7"
+version = "0.2.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"
-
-[[package]]
-name = "ppv-lite86"
-version = "0.2.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.29"
+version = "1.0.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d"
+checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
 dependencies = [
- "unicode-xid",
+ "unicode-ident",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.9"
+version = "1.0.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
+checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
 dependencies = [
  "proc-macro2",
 ]
 
 [[package]]
-name = "rand"
-version = "0.8.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8"
-dependencies = [
- "libc",
- "rand_chacha",
- "rand_core",
- "rand_hc",
-]
-
-[[package]]
-name = "rand_chacha"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
-dependencies = [
- "ppv-lite86",
- "rand_core",
-]
-
-[[package]]
-name = "rand_core"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
-dependencies = [
- "getrandom",
-]
-
-[[package]]
-name = "rand_hc"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7"
-dependencies = [
- "rand_core",
-]
-
-[[package]]
 name = "redox_syscall"
-version = "0.2.10"
+version = "0.2.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
+checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
 dependencies = [
  "bitflags",
 ]
@@ -298,30 +230,40 @@
 
 [[package]]
 name = "smallvec"
-version = "1.6.1"
+version = "1.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
+checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
+
+[[package]]
+name = "socket2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
+dependencies = [
+ "libc",
+ "winapi",
+]
 
 [[package]]
 name = "syn"
-version = "1.0.77"
+version = "1.0.98"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5239bc68e0fef57495900cfea4e8dc75596d9a319d7e16b1e0a440d24e6fe0a0"
+checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
 dependencies = [
  "proc-macro2",
  "quote",
- "unicode-xid",
+ "unicode-ident",
 ]
 
 [[package]]
 name = "tempfile"
-version = "3.2.0"
+version = "3.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
 dependencies = [
  "cfg-if",
+ "fastrand",
  "libc",
- "rand",
  "redox_syscall",
  "remove_dir_all",
  "winapi",
@@ -329,11 +271,10 @@
 
 [[package]]
 name = "tokio"
-version = "1.12.0"
+version = "1.19.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2c2416fdedca8443ae44b4527de1ea633af61d8f7169ffa6e72c5b53d24efcc"
+checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439"
 dependencies = [
- "autocfg",
  "bytes",
  "libc",
  "memchr",
@@ -343,15 +284,16 @@
  "parking_lot",
  "pin-project-lite",
  "signal-hook-registry",
+ "socket2",
  "tokio-macros",
  "winapi",
 ]
 
 [[package]]
 name = "tokio-macros"
-version = "1.3.0"
+version = "1.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54473be61f4ebe4efd09cec9bd5d16fa51d70ea0192213d754d2d500457db110"
+checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -360,9 +302,9 @@
 
 [[package]]
 name = "tokio-stream"
-version = "0.1.7"
+version = "0.1.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b2f3f698253f03119ac0102beaa64f67a67e08074d03a22d18784104543727f"
+checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9"
 dependencies = [
  "futures-core",
  "pin-project-lite",
@@ -383,16 +325,16 @@
 ]
 
 [[package]]
-name = "unicode-xid"
-version = "0.2.2"
+name = "unicode-ident"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
+checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
 
 [[package]]
 name = "wasi"
-version = "0.10.2+wasi-snapshot-preview1"
+version = "0.11.0+wasi-snapshot-preview1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
 
 [[package]]
 name = "winapi"
@@ -415,3 +357,46 @@
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
diff --git a/third_party/rules_rust/examples/crate_universe/cargo_workspace/.cargo/config.toml b/third_party/rules_rust/examples/crate_universe/cargo_workspace/.cargo/config.toml
new file mode 100644
index 0000000..1e04f5c
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/cargo_workspace/.cargo/config.toml
@@ -0,0 +1,2 @@
+# This file can contain cargo settings. For more details see:
+# https://doc.rust-lang.org/cargo/reference/config.html
diff --git a/third_party/rules_rust/examples/crate_universe/cargo_workspace/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/cargo_workspace/BUILD.bazel
index e69de29..22293b9 100644
--- a/third_party/rules_rust/examples/crate_universe/cargo_workspace/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/cargo_workspace/BUILD.bazel
@@ -0,0 +1,4 @@
+exports_files(
+    [".cargo/config.toml"],
+    visibility = ["//visibility:public"],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/cargo_workspace/Cargo.Bazel.lock b/third_party/rules_rust/examples/crate_universe/cargo_workspace/Cargo.Bazel.lock
index e71e918..170c43c 100644
--- a/third_party/rules_rust/examples/crate_universe/cargo_workspace/Cargo.Bazel.lock
+++ b/third_party/rules_rust/examples/crate_universe/cargo_workspace/Cargo.Bazel.lock
@@ -1,1462 +1,238 @@
-{
-  "checksum": "0116dced5bffc719d9e8c3a9fc34b13d9f97c61125722f5bcb4079df12465f56",
-  "crates": {
-    "ansi_term 0.12.1": {
-      "name": "ansi_term",
-      "version": "0.12.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ansi_term/0.12.1/download",
-          "sha256": "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ansi_term",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ansi_term",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(target_os = \"windows\")": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.12.1"
-      },
-      "license": "MIT"
-    },
-    "atty 0.2.14": {
-      "name": "atty",
-      "version": "0.2.14",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/atty/0.2.14/download",
-          "sha256": "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "atty",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "atty",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(target_os = \"hermit\")": [
-              {
-                "id": "hermit-abi 0.1.19",
-                "target": "hermit_abi"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.2.14"
-      },
-      "license": "MIT"
-    },
-    "bitflags 1.3.2": {
-      "name": "bitflags",
-      "version": "1.3.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download",
-          "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "bitflags",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "bitflags",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2018",
-        "version": "1.3.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "cfg-if 1.0.0": {
-      "name": "cfg-if",
-      "version": "1.0.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
-          "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cfg_if",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cfg_if",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "clap 2.34.0": {
-      "name": "clap",
-      "version": "2.34.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/clap/2.34.0/download",
-          "sha256": "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "clap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "clap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "ansi_term",
-          "atty",
-          "color",
-          "default",
-          "strsim",
-          "suggestions",
-          "vec_map"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "atty 0.2.14",
-              "target": "atty"
-            },
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            },
-            {
-              "id": "strsim 0.8.0",
-              "target": "strsim"
-            },
-            {
-              "id": "textwrap 0.11.0",
-              "target": "textwrap"
-            },
-            {
-              "id": "unicode-width 0.1.9",
-              "target": "unicode_width"
-            },
-            {
-              "id": "vec_map 0.8.2",
-              "target": "vec_map"
-            }
-          ],
-          "selects": {
-            "cfg(not(windows))": [
-              {
-                "id": "ansi_term 0.12.1",
-                "target": "ansi_term"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "2.34.0"
-      },
-      "license": "MIT"
-    },
-    "direct-cargo-bazel-deps 0.0.1": {
-      "name": "direct-cargo-bazel-deps",
-      "version": "0.0.1",
-      "repository": null,
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "direct_cargo_bazel_deps",
-            "crate_root": ".direct_cargo_bazel_deps.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "direct_cargo_bazel_deps",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.0.1"
-      },
-      "license": null
-    },
-    "ferris-says 0.2.1": {
-      "name": "ferris-says",
-      "version": "0.2.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ferris-says/0.2.1/download",
-          "sha256": "9515ec2dd9606ec230f6b2d1f25fd9e808a2f2af600143f7efe7e5865505b7aa"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ferris_says",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ferris_says",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "smallvec 0.4.5",
-              "target": "smallvec"
-            },
-            {
-              "id": "textwrap 0.13.4",
-              "target": "textwrap"
-            },
-            {
-              "id": "unicode-width 0.1.9",
-              "target": "unicode_width"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.2.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "getrandom 0.1.16": {
-      "name": "getrandom",
-      "version": "0.1.16",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/getrandom/0.1.16/download",
-          "sha256": "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "getrandom",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "getrandom",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "getrandom 0.1.16",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {
-            "cfg(target_os = \"wasi\")": [
-              {
-                "id": "wasi 0.9.0+wasi-snapshot-preview1",
-                "target": "wasi"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.1.16"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "hermit-abi 0.1.19": {
-      "name": "hermit-abi",
-      "version": "0.1.19",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download",
-          "sha256": "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hermit_abi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hermit_abi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.19"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "libc 0.2.119": {
-      "name": "libc",
-      "version": "0.2.119",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/libc/0.2.119/download",
-          "sha256": "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "libc",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "libc",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.2.119"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "num_printer 0.1.0": {
-      "name": "num_printer",
-      "version": "0.1.0",
-      "repository": null,
-      "targets": [
-        {
-          "Binary": {
-            "crate_name": "number-printer",
-            "crate_root": "src/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": null,
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "clap 2.34.0",
-              "target": "clap"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.0"
-      },
-      "license": null
-    },
-    "ppv-lite86 0.2.16": {
-      "name": "ppv-lite86",
-      "version": "0.2.16",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ppv-lite86/0.2.16/download",
-          "sha256": "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ppv_lite86",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ppv_lite86",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "simd",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.2.16"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "printer 0.1.0": {
-      "name": "printer",
-      "version": "0.1.0",
-      "repository": null,
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "printer",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "printer",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "ferris-says 0.2.1",
-              "target": "ferris_says"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.0"
-      },
-      "license": null
-    },
-    "rand 0.7.3": {
-      "name": "rand",
-      "version": "0.7.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand/0.7.3/download",
-          "sha256": "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "getrandom",
-          "getrandom_package",
-          "libc",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "getrandom 0.1.16",
-              "target": "getrandom",
-              "alias": "getrandom_package"
-            },
-            {
-              "id": "rand_core 0.5.1",
-              "target": "rand_core"
-            }
-          ],
-          "selects": {
-            "cfg(not(target_os = \"emscripten\"))": [
-              {
-                "id": "rand_chacha 0.2.2",
-                "target": "rand_chacha"
-              }
-            ],
-            "cfg(target_os = \"emscripten\")": [
-              {
-                "id": "rand_hc 0.2.0",
-                "target": "rand_hc"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.7.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rand_chacha 0.2.2": {
-      "name": "rand_chacha",
-      "version": "0.2.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand_chacha/0.2.2/download",
-          "sha256": "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand_chacha",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand_chacha",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "ppv-lite86 0.2.16",
-              "target": "ppv_lite86"
-            },
-            {
-              "id": "rand_core 0.5.1",
-              "target": "rand_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rand_core 0.5.1": {
-      "name": "rand_core",
-      "version": "0.5.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand_core/0.5.1/download",
-          "sha256": "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand_core",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand_core",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "getrandom",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "getrandom 0.1.16",
-              "target": "getrandom"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.5.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rand_hc 0.2.0": {
-      "name": "rand_hc",
-      "version": "0.2.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand_hc/0.2.0/download",
-          "sha256": "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand_hc",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand_hc",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "rand_core 0.5.1",
-              "target": "rand_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "rng 0.1.0": {
-      "name": "rng",
-      "version": "0.1.0",
-      "repository": null,
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rng",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rng",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "rand 0.7.3",
-              "target": "rand"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.0"
-      },
-      "license": null
-    },
-    "smallvec 0.4.5": {
-      "name": "smallvec",
-      "version": "0.4.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/smallvec/0.4.5/download",
-          "sha256": "f90c5e5fe535e48807ab94fc611d323935f39d4660c52b26b96446a7b33aef10"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "smallvec",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "smallvec",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2015",
-        "version": "0.4.5"
-      },
-      "license": "MPL-2.0"
-    },
-    "smawk 0.3.1": {
-      "name": "smawk",
-      "version": "0.3.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/smawk/0.3.1/download",
-          "sha256": "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "smawk",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "smawk",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.3.1"
-      },
-      "license": "MIT"
-    },
-    "strsim 0.8.0": {
-      "name": "strsim",
-      "version": "0.8.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/strsim/0.8.0/download",
-          "sha256": "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "strsim",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "strsim",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.8.0"
-      },
-      "license": "MIT"
-    },
-    "textwrap 0.11.0": {
-      "name": "textwrap",
-      "version": "0.11.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/textwrap/0.11.0/download",
-          "sha256": "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "textwrap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "textwrap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "unicode-width 0.1.9",
-              "target": "unicode_width"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.11.0"
-      },
-      "license": "MIT"
-    },
-    "textwrap 0.13.4": {
-      "name": "textwrap",
-      "version": "0.13.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/textwrap/0.13.4/download",
-          "sha256": "cd05616119e612a8041ef58f2b578906cc2531a6069047ae092cfb86a325d835"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "textwrap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "textwrap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "smawk",
-          "unicode-width"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "smawk 0.3.1",
-              "target": "smawk"
-            },
-            {
-              "id": "unicode-width 0.1.9",
-              "target": "unicode_width"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.13.4"
-      },
-      "license": "MIT"
-    },
-    "unicode-width 0.1.9": {
-      "name": "unicode-width",
-      "version": "0.1.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-width/0.1.9/download",
-          "sha256": "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_width",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_width",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2015",
-        "version": "0.1.9"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "vec_map 0.8.2": {
-      "name": "vec_map",
-      "version": "0.8.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/vec_map/0.8.2/download",
-          "sha256": "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "vec_map",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "vec_map",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.8.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "wasi 0.9.0+wasi-snapshot-preview1": {
-      "name": "wasi",
-      "version": "0.9.0+wasi-snapshot-preview1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/wasi/0.9.0+wasi-snapshot-preview1/download",
-          "sha256": "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "wasi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "wasi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.9.0+wasi-snapshot-preview1"
-      },
-      "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT"
-    },
-    "winapi 0.3.9": {
-      "name": "winapi",
-      "version": "0.3.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download",
-          "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "consoleapi",
-          "errhandlingapi",
-          "fileapi",
-          "handleapi",
-          "minwinbase",
-          "minwindef",
-          "processenv",
-          "winbase"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi 0.3.9",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {
-            "i686-pc-windows-gnu": [
-              {
-                "id": "winapi-i686-pc-windows-gnu 0.4.0",
-                "target": "winapi_i686_pc_windows_gnu"
-              }
-            ],
-            "x86_64-pc-windows-gnu": [
-              {
-                "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
-                "target": "winapi_x86_64_pc_windows_gnu"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.3.9"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "winapi-i686-pc-windows-gnu 0.4.0": {
-      "name": "winapi-i686-pc-windows-gnu",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
-          "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_i686_pc_windows_gnu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_i686_pc_windows_gnu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi-i686-pc-windows-gnu 0.4.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "winapi-x86_64-pc-windows-gnu 0.4.0": {
-      "name": "winapi-x86_64-pc-windows-gnu",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
-          "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_x86_64_pc_windows_gnu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_x86_64_pc_windows_gnu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    }
-  },
-  "binary_crates": [],
-  "workspace_members": {
-    "direct-cargo-bazel-deps 0.0.1": "cargo_workspace",
-    "num_printer 0.1.0": "cargo_workspace/num_printer",
-    "printer 0.1.0": "cargo_workspace/printer",
-    "rng 0.1.0": "cargo_workspace/rng"
-  },
-  "conditions": {
-    "cfg(not(target_os = \"emscripten\"))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-pc-windows-msvc",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "wasm32-unknown-unknown",
-      "wasm32-wasi",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-pc-windows-msvc",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(not(windows))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "wasm32-unknown-unknown",
-      "wasm32-wasi",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(target_os = \"emscripten\")": [],
-    "cfg(target_os = \"hermit\")": [],
-    "cfg(target_os = \"wasi\")": [
-      "wasm32-wasi"
-    ],
-    "cfg(target_os = \"windows\")": [
-      "i686-pc-windows-msvc",
-      "x86_64-pc-windows-msvc"
-    ],
-    "cfg(unix)": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(windows)": [
-      "i686-pc-windows-msvc",
-      "x86_64-pc-windows-msvc"
-    ],
-    "i686-pc-windows-gnu": [],
-    "x86_64-pc-windows-gnu": []
-  }
-}
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "direct-cargo-bazel-deps"
+version = "0.0.1"
+
+[[package]]
+name = "ferris-says"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9515ec2dd9606ec230f6b2d1f25fd9e808a2f2af600143f7efe7e5865505b7aa"
+dependencies = [
+ "smallvec",
+ "textwrap 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-width",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "num_printer"
+version = "0.1.0"
+dependencies = [
+ "clap",
+ "printer",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+
+[[package]]
+name = "printer"
+version = "0.1.0"
+dependencies = [
+ "ferris-says",
+ "rng",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom",
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rng"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "smallvec"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f90c5e5fe535e48807ab94fc611d323935f39d4660c52b26b96446a7b33aef10"
+
+[[package]]
+name = "smawk"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd05616119e612a8041ef58f2b578906cc2531a6069047ae092cfb86a325d835"
+dependencies = [
+ "smawk",
+ "unicode-width",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/third_party/rules_rust/examples/crate_universe/cargo_workspace/cargo-bazel-lock.json b/third_party/rules_rust/examples/crate_universe/cargo_workspace/cargo-bazel-lock.json
new file mode 100644
index 0000000..4c7e145
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/cargo_workspace/cargo-bazel-lock.json
@@ -0,0 +1,1470 @@
+{
+  "checksum": "746574dd60cef41f95be67cc408ac93637dea1f729ae7f1d2450cbfc0dff4a8b",
+  "crates": {
+    "ansi_term 0.12.1": {
+      "name": "ansi_term",
+      "version": "0.12.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/ansi_term/0.12.1/download",
+          "sha256": "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "ansi_term",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "ansi_term",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [],
+          "selects": {
+            "cfg(target_os = \"windows\")": [
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2015",
+        "version": "0.12.1"
+      },
+      "license": "MIT"
+    },
+    "atty 0.2.14": {
+      "name": "atty",
+      "version": "0.2.14",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/atty/0.2.14/download",
+          "sha256": "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "atty",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "atty",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [],
+          "selects": {
+            "cfg(target_os = \"hermit\")": [
+              {
+                "id": "hermit-abi 0.1.19",
+                "target": "hermit_abi"
+              }
+            ],
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2015",
+        "version": "0.2.14"
+      },
+      "license": "MIT"
+    },
+    "bitflags 1.3.2": {
+      "name": "bitflags",
+      "version": "1.3.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download",
+          "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "bitflags",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "bitflags",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "edition": "2018",
+        "version": "1.3.2"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "cfg-if 1.0.0": {
+      "name": "cfg-if",
+      "version": "1.0.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
+          "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "cfg_if",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "cfg_if",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.0.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "clap 2.34.0": {
+      "name": "clap",
+      "version": "2.34.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/clap/2.34.0/download",
+          "sha256": "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "clap",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "clap",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "ansi_term",
+          "atty",
+          "color",
+          "default",
+          "strsim",
+          "suggestions",
+          "vec_map"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "atty 0.2.14",
+              "target": "atty"
+            },
+            {
+              "id": "bitflags 1.3.2",
+              "target": "bitflags"
+            },
+            {
+              "id": "strsim 0.8.0",
+              "target": "strsim"
+            },
+            {
+              "id": "textwrap 0.11.0",
+              "target": "textwrap"
+            },
+            {
+              "id": "unicode-width 0.1.9",
+              "target": "unicode_width"
+            },
+            {
+              "id": "vec_map 0.8.2",
+              "target": "vec_map"
+            }
+          ],
+          "selects": {
+            "cfg(not(windows))": [
+              {
+                "id": "ansi_term 0.12.1",
+                "target": "ansi_term"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "2.34.0"
+      },
+      "license": "MIT"
+    },
+    "direct-cargo-bazel-deps 0.0.1": {
+      "name": "direct-cargo-bazel-deps",
+      "version": "0.0.1",
+      "repository": null,
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "direct_cargo_bazel_deps",
+            "crate_root": ".direct_cargo_bazel_deps.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "direct_cargo_bazel_deps",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.0.1"
+      },
+      "license": null
+    },
+    "ferris-says 0.2.1": {
+      "name": "ferris-says",
+      "version": "0.2.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/ferris-says/0.2.1/download",
+          "sha256": "9515ec2dd9606ec230f6b2d1f25fd9e808a2f2af600143f7efe7e5865505b7aa"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "ferris_says",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "ferris_says",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "smallvec 0.4.5",
+              "target": "smallvec"
+            },
+            {
+              "id": "textwrap 0.13.4",
+              "target": "textwrap"
+            },
+            {
+              "id": "unicode-width 0.1.9",
+              "target": "unicode_width"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.2.1"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "getrandom 0.1.16": {
+      "name": "getrandom",
+      "version": "0.1.16",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/getrandom/0.1.16/download",
+          "sha256": "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "getrandom",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "getrandom",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "getrandom 0.1.16",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {
+            "cfg(target_os = \"wasi\")": [
+              {
+                "id": "wasi 0.9.0+wasi-snapshot-preview1",
+                "target": "wasi"
+              }
+            ],
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.1.16"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "hermit-abi 0.1.19": {
+      "name": "hermit-abi",
+      "version": "0.1.19",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download",
+          "sha256": "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "hermit_abi",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "hermit_abi",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "libc 0.2.126",
+              "target": "libc"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.19"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "libc 0.2.126": {
+      "name": "libc",
+      "version": "0.2.126",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/libc/0.2.126/download",
+          "sha256": "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "libc",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "libc",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "libc 0.2.126",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.2.126"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "num_printer 0.1.0": {
+      "name": "num_printer",
+      "version": "0.1.0",
+      "repository": null,
+      "targets": [
+        {
+          "Binary": {
+            "crate_name": "number-printer",
+            "crate_root": "src/main.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": null,
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "clap 2.34.0",
+              "target": "clap"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.0"
+      },
+      "license": null
+    },
+    "ppv-lite86 0.2.16": {
+      "name": "ppv-lite86",
+      "version": "0.2.16",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/ppv-lite86/0.2.16/download",
+          "sha256": "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "ppv_lite86",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "ppv_lite86",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "simd",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "0.2.16"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "printer 0.1.0": {
+      "name": "printer",
+      "version": "0.1.0",
+      "repository": null,
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "printer",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "printer",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "ferris-says 0.2.1",
+              "target": "ferris_says"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.0"
+      },
+      "license": null
+    },
+    "rand 0.7.3": {
+      "name": "rand",
+      "version": "0.7.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/rand/0.7.3/download",
+          "sha256": "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "rand",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "rand",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "default",
+          "getrandom",
+          "getrandom_package",
+          "libc",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "getrandom 0.1.16",
+              "target": "getrandom",
+              "alias": "getrandom_package"
+            },
+            {
+              "id": "rand_core 0.5.1",
+              "target": "rand_core"
+            }
+          ],
+          "selects": {
+            "cfg(not(target_os = \"emscripten\"))": [
+              {
+                "id": "rand_chacha 0.2.2",
+                "target": "rand_chacha"
+              }
+            ],
+            "cfg(target_os = \"emscripten\")": [
+              {
+                "id": "rand_hc 0.2.0",
+                "target": "rand_hc"
+              }
+            ],
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.7.3"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "rand_chacha 0.2.2": {
+      "name": "rand_chacha",
+      "version": "0.2.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/rand_chacha/0.2.2/download",
+          "sha256": "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "rand_chacha",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "rand_chacha",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "ppv-lite86 0.2.16",
+              "target": "ppv_lite86"
+            },
+            {
+              "id": "rand_core 0.5.1",
+              "target": "rand_core"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.2.2"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "rand_core 0.5.1": {
+      "name": "rand_core",
+      "version": "0.5.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/rand_core/0.5.1/download",
+          "sha256": "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "rand_core",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "rand_core",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "getrandom",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "getrandom 0.1.16",
+              "target": "getrandom"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.5.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "rand_hc 0.2.0": {
+      "name": "rand_hc",
+      "version": "0.2.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/rand_hc/0.2.0/download",
+          "sha256": "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "rand_hc",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "rand_hc",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "rand_core 0.5.1",
+              "target": "rand_core"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.2.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "rng 0.1.0": {
+      "name": "rng",
+      "version": "0.1.0",
+      "repository": null,
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "rng",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "rng",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "rand 0.7.3",
+              "target": "rand"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.0"
+      },
+      "license": null
+    },
+    "smallvec 0.4.5": {
+      "name": "smallvec",
+      "version": "0.4.5",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/smallvec/0.4.5/download",
+          "sha256": "f90c5e5fe535e48807ab94fc611d323935f39d4660c52b26b96446a7b33aef10"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "smallvec",
+            "crate_root": "lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "smallvec",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "edition": "2015",
+        "version": "0.4.5"
+      },
+      "license": "MPL-2.0"
+    },
+    "smawk 0.3.1": {
+      "name": "smawk",
+      "version": "0.3.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/smawk/0.3.1/download",
+          "sha256": "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "smawk",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "smawk",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.3.1"
+      },
+      "license": "MIT"
+    },
+    "strsim 0.8.0": {
+      "name": "strsim",
+      "version": "0.8.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/strsim/0.8.0/download",
+          "sha256": "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "strsim",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "strsim",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.8.0"
+      },
+      "license": "MIT"
+    },
+    "textwrap 0.11.0": {
+      "name": "textwrap",
+      "version": "0.11.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/textwrap/0.11.0/download",
+          "sha256": "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "textwrap",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "textwrap",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "unicode-width 0.1.9",
+              "target": "unicode_width"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.11.0"
+      },
+      "license": "MIT"
+    },
+    "textwrap 0.13.4": {
+      "name": "textwrap",
+      "version": "0.13.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/textwrap/0.13.4/download",
+          "sha256": "cd05616119e612a8041ef58f2b578906cc2531a6069047ae092cfb86a325d835"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "textwrap",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "textwrap",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "smawk",
+          "unicode-width"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "smawk 0.3.1",
+              "target": "smawk"
+            },
+            {
+              "id": "unicode-width 0.1.9",
+              "target": "unicode_width"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.13.4"
+      },
+      "license": "MIT"
+    },
+    "unicode-width 0.1.9": {
+      "name": "unicode-width",
+      "version": "0.1.9",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/unicode-width/0.1.9/download",
+          "sha256": "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "unicode_width",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "unicode_width",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "edition": "2015",
+        "version": "0.1.9"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "vec_map 0.8.2": {
+      "name": "vec_map",
+      "version": "0.8.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/vec_map/0.8.2/download",
+          "sha256": "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "vec_map",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "vec_map",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.8.2"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "wasi 0.9.0+wasi-snapshot-preview1": {
+      "name": "wasi",
+      "version": "0.9.0+wasi-snapshot-preview1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/wasi/0.9.0+wasi-snapshot-preview1/download",
+          "sha256": "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "wasi",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "wasi",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "0.9.0+wasi-snapshot-preview1"
+      },
+      "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT"
+    },
+    "winapi 0.3.9": {
+      "name": "winapi",
+      "version": "0.3.9",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download",
+          "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "winapi",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "winapi",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "consoleapi",
+          "errhandlingapi",
+          "fileapi",
+          "handleapi",
+          "minwinbase",
+          "minwindef",
+          "processenv",
+          "winbase"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "winapi 0.3.9",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {
+            "i686-pc-windows-gnu": [
+              {
+                "id": "winapi-i686-pc-windows-gnu 0.4.0",
+                "target": "winapi_i686_pc_windows_gnu"
+              }
+            ],
+            "x86_64-pc-windows-gnu": [
+              {
+                "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
+                "target": "winapi_x86_64_pc_windows_gnu"
+              }
+            ]
+          }
+        },
+        "edition": "2015",
+        "version": "0.3.9"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "winapi-i686-pc-windows-gnu 0.4.0": {
+      "name": "winapi-i686-pc-windows-gnu",
+      "version": "0.4.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
+          "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "winapi_i686_pc_windows_gnu",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "winapi_i686_pc_windows_gnu",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "winapi-i686-pc-windows-gnu 0.4.0",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.4.0"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "winapi-x86_64-pc-windows-gnu 0.4.0": {
+      "name": "winapi-x86_64-pc-windows-gnu",
+      "version": "0.4.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
+          "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "winapi_x86_64_pc_windows_gnu",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "winapi_x86_64_pc_windows_gnu",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.4.0"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT/Apache-2.0"
+    }
+  },
+  "binary_crates": [],
+  "workspace_members": {
+    "direct-cargo-bazel-deps 0.0.1": "cargo_workspace",
+    "num_printer 0.1.0": "cargo_workspace/num_printer",
+    "printer 0.1.0": "cargo_workspace/printer",
+    "rng 0.1.0": "cargo_workspace/rng"
+  },
+  "conditions": {
+    "cfg(not(target_os = \"emscripten\"))": [
+      "aarch64-apple-darwin",
+      "aarch64-apple-ios",
+      "aarch64-apple-ios-sim",
+      "aarch64-linux-android",
+      "aarch64-unknown-linux-gnu",
+      "arm-unknown-linux-gnueabi",
+      "armv7-linux-androideabi",
+      "armv7-unknown-linux-gnueabi",
+      "i686-apple-darwin",
+      "i686-linux-android",
+      "i686-pc-windows-msvc",
+      "i686-unknown-freebsd",
+      "i686-unknown-linux-gnu",
+      "powerpc-unknown-linux-gnu",
+      "riscv32imc-unknown-none-elf",
+      "s390x-unknown-linux-gnu",
+      "wasm32-unknown-unknown",
+      "wasm32-wasi",
+      "x86_64-apple-darwin",
+      "x86_64-apple-ios",
+      "x86_64-linux-android",
+      "x86_64-pc-windows-msvc",
+      "x86_64-unknown-freebsd",
+      "x86_64-unknown-linux-gnu"
+    ],
+    "cfg(not(windows))": [
+      "aarch64-apple-darwin",
+      "aarch64-apple-ios",
+      "aarch64-apple-ios-sim",
+      "aarch64-linux-android",
+      "aarch64-unknown-linux-gnu",
+      "arm-unknown-linux-gnueabi",
+      "armv7-linux-androideabi",
+      "armv7-unknown-linux-gnueabi",
+      "i686-apple-darwin",
+      "i686-linux-android",
+      "i686-unknown-freebsd",
+      "i686-unknown-linux-gnu",
+      "powerpc-unknown-linux-gnu",
+      "riscv32imc-unknown-none-elf",
+      "s390x-unknown-linux-gnu",
+      "wasm32-unknown-unknown",
+      "wasm32-wasi",
+      "x86_64-apple-darwin",
+      "x86_64-apple-ios",
+      "x86_64-linux-android",
+      "x86_64-unknown-freebsd",
+      "x86_64-unknown-linux-gnu"
+    ],
+    "cfg(target_os = \"emscripten\")": [],
+    "cfg(target_os = \"hermit\")": [],
+    "cfg(target_os = \"wasi\")": [
+      "wasm32-wasi"
+    ],
+    "cfg(target_os = \"windows\")": [
+      "i686-pc-windows-msvc",
+      "x86_64-pc-windows-msvc"
+    ],
+    "cfg(unix)": [
+      "aarch64-apple-darwin",
+      "aarch64-apple-ios",
+      "aarch64-apple-ios-sim",
+      "aarch64-linux-android",
+      "aarch64-unknown-linux-gnu",
+      "arm-unknown-linux-gnueabi",
+      "armv7-linux-androideabi",
+      "armv7-unknown-linux-gnueabi",
+      "i686-apple-darwin",
+      "i686-linux-android",
+      "i686-unknown-freebsd",
+      "i686-unknown-linux-gnu",
+      "powerpc-unknown-linux-gnu",
+      "s390x-unknown-linux-gnu",
+      "x86_64-apple-darwin",
+      "x86_64-apple-ios",
+      "x86_64-linux-android",
+      "x86_64-unknown-freebsd",
+      "x86_64-unknown-linux-gnu"
+    ],
+    "cfg(windows)": [
+      "i686-pc-windows-msvc",
+      "x86_64-pc-windows-msvc"
+    ],
+    "i686-pc-windows-gnu": [],
+    "x86_64-pc-windows-gnu": []
+  }
+}
diff --git a/third_party/rules_rust/examples/crate_universe/extra_workspace_members/.bazelrc b/third_party/rules_rust/examples/crate_universe/extra_workspace_members/.bazelrc
deleted file mode 100644
index d63c809..0000000
--- a/third_party/rules_rust/examples/crate_universe/extra_workspace_members/.bazelrc
+++ /dev/null
@@ -1,13 +0,0 @@
-# A config file containing Bazel settings
-
-# Enable rustfmt
-build:strict --aspects=@rules_rust//rust:defs.bzl%rustfmt_aspect
-build:strict --output_groups=+rustfmt_checks
-
-# Enable clippy
-build:strict --aspects=@rules_rust//rust:defs.bzl%rust_clippy_aspect
-build:strict --output_groups=+clippy_checks
-
-# This import should always be last to allow users to override
-# settings for local development.
-try-import %workspace%/user.bazelrc
diff --git a/third_party/rules_rust/examples/crate_universe/extra_workspace_members/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/extra_workspace_members/BUILD.bazel
deleted file mode 100644
index 199257f..0000000
--- a/third_party/rules_rust/examples/crate_universe/extra_workspace_members/BUILD.bazel
+++ /dev/null
@@ -1,22 +0,0 @@
-load("@crate_index_extra_members//:defs.bzl", "all_crate_deps")
-load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_test")
-
-rust_binary(
-    name = "extra_workspace_member",
-    srcs = ["src/main.rs"],
-    data = ["@crate_index_extra_members//:texture-synthesis-cli__texture-synthesis"],
-    proc_macro_deps = all_crate_deps(proc_macro = True),
-    rustc_env = {
-        "TEXTURE_SYNTHESIS_CLI": "$(rootpath @crate_index_extra_members//:texture-synthesis-cli__texture-synthesis)",
-    },
-    deps = all_crate_deps(),
-)
-
-rust_test(
-    name = "unit_test",
-    crate = ":extra_workspace_member",
-    data = ["@crate_index_extra_members//:texture-synthesis-cli__texture-synthesis"],
-    rustc_env = {
-        "TEXTURE_SYNTHESIS_CLI": "$(rootpath @crate_index_extra_members//:texture-synthesis-cli__texture-synthesis)",
-    },
-)
diff --git a/third_party/rules_rust/examples/crate_universe/extra_workspace_members/Cargo.Bazel.lock b/third_party/rules_rust/examples/crate_universe/extra_workspace_members/Cargo.Bazel.lock
deleted file mode 100644
index c9d296d..0000000
--- a/third_party/rules_rust/examples/crate_universe/extra_workspace_members/Cargo.Bazel.lock
+++ /dev/null
@@ -1,3273 +0,0 @@
-{
-  "checksum": "e3970ece78ced37e01b3e8d70f9b1350e9d902a2be78f8c08789b05242583bef",
-  "crates": {
-    "adler32 1.2.0": {
-      "name": "adler32",
-      "version": "1.2.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/adler32/1.2.0/download",
-          "sha256": "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "adler32",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "adler32",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "1.2.0"
-      },
-      "license": "Zlib"
-    },
-    "ansi_term 0.12.1": {
-      "name": "ansi_term",
-      "version": "0.12.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ansi_term/0.12.1/download",
-          "sha256": "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ansi_term",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ansi_term",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(target_os = \"windows\")": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.12.1"
-      },
-      "license": "MIT"
-    },
-    "atty 0.2.14": {
-      "name": "atty",
-      "version": "0.2.14",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/atty/0.2.14/download",
-          "sha256": "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "atty",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "atty",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(target_os = \"hermit\")": [
-              {
-                "id": "hermit-abi 0.1.19",
-                "target": "hermit_abi"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.2.14"
-      },
-      "license": "MIT"
-    },
-    "autocfg 1.1.0": {
-      "name": "autocfg",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/autocfg/1.1.0/download",
-          "sha256": "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "autocfg",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "autocfg",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.1.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "bitflags 1.3.2": {
-      "name": "bitflags",
-      "version": "1.3.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download",
-          "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "bitflags",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "bitflags",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2018",
-        "version": "1.3.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "bytemuck 1.8.0": {
-      "name": "bytemuck",
-      "version": "1.8.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/bytemuck/1.8.0/download",
-          "sha256": "0e851ca7c24871e7336801608a4797d7376545b6928a10d32d75685687141ead"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "bytemuck",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "bytemuck",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.8.0"
-      },
-      "license": "Zlib OR Apache-2.0 OR MIT"
-    },
-    "byteorder 1.4.3": {
-      "name": "byteorder",
-      "version": "1.4.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/byteorder/1.4.3/download",
-          "sha256": "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "byteorder",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "byteorder",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "1.4.3"
-      },
-      "license": "Unlicense OR MIT"
-    },
-    "cfg-if 1.0.0": {
-      "name": "cfg-if",
-      "version": "1.0.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
-          "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cfg_if",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cfg_if",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "clap 2.34.0": {
-      "name": "clap",
-      "version": "2.34.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/clap/2.34.0/download",
-          "sha256": "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "clap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "clap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "ansi_term",
-          "atty",
-          "color",
-          "default",
-          "strsim",
-          "suggestions",
-          "vec_map"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "atty 0.2.14",
-              "target": "atty"
-            },
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            },
-            {
-              "id": "strsim 0.8.0",
-              "target": "strsim"
-            },
-            {
-              "id": "textwrap 0.11.0",
-              "target": "textwrap"
-            },
-            {
-              "id": "unicode-width 0.1.9",
-              "target": "unicode_width"
-            },
-            {
-              "id": "vec_map 0.8.2",
-              "target": "vec_map"
-            }
-          ],
-          "selects": {
-            "cfg(not(windows))": [
-              {
-                "id": "ansi_term 0.12.1",
-                "target": "ansi_term"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "2.34.0"
-      },
-      "license": "MIT"
-    },
-    "color_quant 1.1.0": {
-      "name": "color_quant",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/color_quant/1.1.0/download",
-          "sha256": "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "color_quant",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "color_quant",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.1.0"
-      },
-      "license": "MIT"
-    },
-    "console 0.15.0": {
-      "name": "console",
-      "version": "0.15.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/console/0.15.0/download",
-          "sha256": "a28b32d32ca44b70c3e4acd7db1babf555fa026e385fb95f18028f88848b3c31"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "console",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "console",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "ansi-parsing",
-          "default",
-          "regex",
-          "unicode-width"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            },
-            {
-              "id": "once_cell 1.10.0",
-              "target": "once_cell"
-            },
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            },
-            {
-              "id": "terminal_size 0.1.17",
-              "target": "terminal_size"
-            },
-            {
-              "id": "unicode-width 0.1.9",
-              "target": "unicode_width"
-            }
-          ],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "encode_unicode 0.3.6",
-                "target": "encode_unicode"
-              },
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.15.0"
-      },
-      "license": "MIT"
-    },
-    "crc32fast 1.3.2": {
-      "name": "crc32fast",
-      "version": "1.3.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/crc32fast/1.3.2/download",
-          "sha256": "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "crc32fast",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "crc32fast",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "crc32fast 1.3.2",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "1.3.2"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "crossbeam-utils 0.8.7": {
-      "name": "crossbeam-utils",
-      "version": "0.8.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/crossbeam-utils/0.8.7/download",
-          "sha256": "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "crossbeam_utils",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "crossbeam_utils",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "lazy_static",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "crossbeam-utils 0.8.7",
-              "target": "build_script_build"
-            },
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.8.7"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "deflate 0.8.6": {
-      "name": "deflate",
-      "version": "0.8.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/deflate/0.8.6/download",
-          "sha256": "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "deflate",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "deflate",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "adler32 1.2.0",
-              "target": "adler32"
-            },
-            {
-              "id": "byteorder 1.4.3",
-              "target": "byteorder"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.8.6"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "encode_unicode 0.3.6": {
-      "name": "encode_unicode",
-      "version": "0.3.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/encode_unicode/0.3.6/download",
-          "sha256": "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "encode_unicode",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "encode_unicode",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2015",
-        "version": "0.3.6"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "extra_workspace_members 0.1.0": {
-      "name": "extra_workspace_members",
-      "version": "0.1.0",
-      "repository": null,
-      "targets": [
-        {
-          "Binary": {
-            "crate_name": "extra_workspace_members",
-            "crate_root": "src/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": null,
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "ferris-says 0.2.1",
-              "target": "ferris_says"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.0"
-      },
-      "license": null
-    },
-    "ferris-says 0.2.1": {
-      "name": "ferris-says",
-      "version": "0.2.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ferris-says/0.2.1/download",
-          "sha256": "9515ec2dd9606ec230f6b2d1f25fd9e808a2f2af600143f7efe7e5865505b7aa"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ferris_says",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ferris_says",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "smallvec 0.4.5",
-              "target": "smallvec"
-            },
-            {
-              "id": "textwrap 0.13.4",
-              "target": "textwrap"
-            },
-            {
-              "id": "unicode-width 0.1.9",
-              "target": "unicode_width"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.2.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "heck 0.3.3": {
-      "name": "heck",
-      "version": "0.3.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/heck/0.3.3/download",
-          "sha256": "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "heck",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "heck",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "unicode-segmentation 1.9.0",
-              "target": "unicode_segmentation"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "hermit-abi 0.1.19": {
-      "name": "hermit-abi",
-      "version": "0.1.19",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download",
-          "sha256": "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hermit_abi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hermit_abi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.19"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "image 0.23.12": {
-      "name": "image",
-      "version": "0.23.12",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/image/0.23.12/download",
-          "sha256": "7ce04077ead78e39ae8610ad26216aed811996b043d47beed5090db674f9e9b5"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "image",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "image",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "bmp",
-          "jpeg",
-          "png"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytemuck 1.8.0",
-              "target": "bytemuck"
-            },
-            {
-              "id": "byteorder 1.4.3",
-              "target": "byteorder"
-            },
-            {
-              "id": "color_quant 1.1.0",
-              "target": "color_quant"
-            },
-            {
-              "id": "jpeg-decoder 0.1.22",
-              "target": "jpeg_decoder",
-              "alias": "jpeg"
-            },
-            {
-              "id": "num-iter 0.1.42",
-              "target": "num_iter"
-            },
-            {
-              "id": "num-rational 0.3.2",
-              "target": "num_rational"
-            },
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            },
-            {
-              "id": "png 0.16.8",
-              "target": "png"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.23.12"
-      },
-      "license": "MIT"
-    },
-    "indicatif 0.15.0": {
-      "name": "indicatif",
-      "version": "0.15.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/indicatif/0.15.0/download",
-          "sha256": "7baab56125e25686df467fe470785512329883aab42696d661247aca2a2896e4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "indicatif",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "indicatif",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "console 0.15.0",
-              "target": "console"
-            },
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            },
-            {
-              "id": "number_prefix 0.3.0",
-              "target": "number_prefix"
-            },
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.15.0"
-      },
-      "license": "MIT"
-    },
-    "jpeg-decoder 0.1.22": {
-      "name": "jpeg-decoder",
-      "version": "0.1.22",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/jpeg-decoder/0.1.22/download",
-          "sha256": "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "jpeg_decoder",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "jpeg_decoder",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.1.22"
-      },
-      "license": "MIT / Apache-2.0"
-    },
-    "lazy_static 1.4.0": {
-      "name": "lazy_static",
-      "version": "1.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/lazy_static/1.4.0/download",
-          "sha256": "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "lazy_static",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "lazy_static",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.4.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "libc 0.2.119": {
-      "name": "libc",
-      "version": "0.2.119",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/libc/0.2.119/download",
-          "sha256": "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "libc",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "libc",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.2.119"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "miniz_oxide 0.3.7": {
-      "name": "miniz_oxide",
-      "version": "0.3.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/miniz_oxide/0.3.7/download",
-          "sha256": "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "miniz_oxide",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "miniz_oxide",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "adler32 1.2.0",
-              "target": "adler32"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.7"
-      },
-      "license": "MIT"
-    },
-    "num-integer 0.1.44": {
-      "name": "num-integer",
-      "version": "0.1.44",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num-integer/0.1.44/download",
-          "sha256": "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_integer",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_integer",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "i128",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-integer 0.1.44",
-              "target": "build_script_build"
-            },
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.44"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "autocfg 1.1.0",
-              "target": "autocfg"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "num-iter 0.1.42": {
-      "name": "num-iter",
-      "version": "0.1.42",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num-iter/0.1.42/download",
-          "sha256": "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_iter",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_iter",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-integer 0.1.44",
-              "target": "num_integer"
-            },
-            {
-              "id": "num-iter 0.1.42",
-              "target": "build_script_build"
-            },
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.42"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "autocfg 1.1.0",
-              "target": "autocfg"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "num-rational 0.3.2": {
-      "name": "num-rational",
-      "version": "0.3.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num-rational/0.3.2/download",
-          "sha256": "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_rational",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_rational",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-integer 0.1.44",
-              "target": "num_integer"
-            },
-            {
-              "id": "num-rational 0.3.2",
-              "target": "build_script_build"
-            },
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.2"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "autocfg 1.1.0",
-              "target": "autocfg"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "num-traits 0.2.14": {
-      "name": "num-traits",
-      "version": "0.2.14",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num-traits/0.2.14/download",
-          "sha256": "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_traits",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_traits",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "i128",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-traits 0.2.14",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.2.14"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "autocfg 1.1.0",
-              "target": "autocfg"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "num_cpus 1.13.1": {
-      "name": "num_cpus",
-      "version": "1.13.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num_cpus/1.13.1/download",
-          "sha256": "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_cpus",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_cpus",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [
-              {
-                "id": "hermit-abi 0.1.19",
-                "target": "hermit_abi"
-              }
-            ],
-            "cfg(not(windows))": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "1.13.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "number_prefix 0.3.0": {
-      "name": "number_prefix",
-      "version": "0.3.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/number_prefix/0.3.0/download",
-          "sha256": "17b02fc0ff9a9e4b35b3342880f48e896ebf69f2967921fe8646bf5b7125956a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "number_prefix",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "number_prefix",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2015",
-        "version": "0.3.0"
-      },
-      "license": "MIT"
-    },
-    "once_cell 1.10.0": {
-      "name": "once_cell",
-      "version": "1.10.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/once_cell/1.10.0/download",
-          "sha256": "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "once_cell",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "once_cell",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "race",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "1.10.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "pdqselect 0.1.1": {
-      "name": "pdqselect",
-      "version": "0.1.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pdqselect/0.1.1/download",
-          "sha256": "7778906d9321dd56cde1d1ffa69a73e59dcf5fda6d366f62727adf2bd4193aee"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pdqselect",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pdqselect",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2021",
-        "version": "0.1.1"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "png 0.16.8": {
-      "name": "png",
-      "version": "0.16.8",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/png/0.16.8/download",
-          "sha256": "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "png",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "png",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "deflate",
-          "png-encoding"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            },
-            {
-              "id": "crc32fast 1.3.2",
-              "target": "crc32fast"
-            },
-            {
-              "id": "deflate 0.8.6",
-              "target": "deflate"
-            },
-            {
-              "id": "miniz_oxide 0.3.7",
-              "target": "miniz_oxide"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.16.8"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "proc-macro-error 1.0.4": {
-      "name": "proc-macro-error",
-      "version": "1.0.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/proc-macro-error/1.0.4/download",
-          "sha256": "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "proc_macro_error",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "proc_macro_error",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "syn",
-          "syn-error"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro-error 1.0.4",
-              "target": "build_script_build"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "proc-macro-error-attr 1.0.4",
-              "target": "proc_macro_error_attr"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "1.0.4"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "version_check 0.9.4",
-              "target": "version_check"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "proc-macro-error-attr 1.0.4": {
-      "name": "proc-macro-error-attr",
-      "version": "1.0.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/proc-macro-error-attr/1.0.4/download",
-          "sha256": "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "proc_macro_error_attr",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "proc_macro_error_attr",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro-error-attr 1.0.4",
-              "target": "build_script_build"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.4"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "version_check 0.9.4",
-              "target": "version_check"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "proc-macro2 1.0.36": {
-      "name": "proc-macro2",
-      "version": "1.0.36",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/proc-macro2/1.0.36/download",
-          "sha256": "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "proc_macro2",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "proc_macro2",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "proc-macro"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "build_script_build"
-            },
-            {
-              "id": "unicode-xid 0.2.2",
-              "target": "unicode_xid"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.36"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "quote 1.0.15": {
-      "name": "quote",
-      "version": "1.0.15",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/quote/1.0.15/download",
-          "sha256": "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "quote",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "quote",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "proc-macro"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.15"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rand 0.8.5": {
-      "name": "rand",
-      "version": "0.8.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand/0.8.5/download",
-          "sha256": "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "rand_core 0.6.3",
-              "target": "rand_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.8.5"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rand_core 0.6.3": {
-      "name": "rand_core",
-      "version": "0.6.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand_core/0.6.3/download",
-          "sha256": "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand_core",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand_core",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.6.3"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "rand_pcg 0.3.1": {
-      "name": "rand_pcg",
-      "version": "0.3.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rand_pcg/0.3.1/download",
-          "sha256": "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rand_pcg",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rand_pcg",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "rand_core 0.6.3",
-              "target": "rand_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "regex 1.5.4": {
-      "name": "regex",
-      "version": "1.5.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/regex/1.5.4/download",
-          "sha256": "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "regex",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "regex",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "regex-syntax 0.6.25",
-              "target": "regex_syntax"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.5.4"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "regex-syntax 0.6.25": {
-      "name": "regex-syntax",
-      "version": "0.6.25",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/regex-syntax/0.6.25/download",
-          "sha256": "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "regex_syntax",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "regex_syntax",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.6.25"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "rstar 0.7.1": {
-      "name": "rstar",
-      "version": "0.7.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rstar/0.7.1/download",
-          "sha256": "0650eaaa56cbd1726fd671150fce8ac6ed9d9a25d1624430d7ee9d196052f6b6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "rstar",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rstar",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "num-traits 0.2.14",
-              "target": "num_traits"
-            },
-            {
-              "id": "pdqselect 0.1.1",
-              "target": "pdqselect"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.7.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "smallvec 0.4.5": {
-      "name": "smallvec",
-      "version": "0.4.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/smallvec/0.4.5/download",
-          "sha256": "f90c5e5fe535e48807ab94fc611d323935f39d4660c52b26b96446a7b33aef10"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "smallvec",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "smallvec",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2015",
-        "version": "0.4.5"
-      },
-      "license": "MPL-2.0"
-    },
-    "smawk 0.3.1": {
-      "name": "smawk",
-      "version": "0.3.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/smawk/0.3.1/download",
-          "sha256": "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "smawk",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "smawk",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.3.1"
-      },
-      "license": "MIT"
-    },
-    "strsim 0.8.0": {
-      "name": "strsim",
-      "version": "0.8.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/strsim/0.8.0/download",
-          "sha256": "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "strsim",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "strsim",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.8.0"
-      },
-      "license": "MIT"
-    },
-    "structopt 0.3.26": {
-      "name": "structopt",
-      "version": "0.3.26",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/structopt/0.3.26/download",
-          "sha256": "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "structopt",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "structopt",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "clap 2.34.0",
-              "target": "clap"
-            },
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "structopt-derive 0.4.18",
-              "target": "structopt_derive"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "0.3.26"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "structopt-derive 0.4.18": {
-      "name": "structopt-derive",
-      "version": "0.4.18",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/structopt-derive/0.4.18/download",
-          "sha256": "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "structopt_derive",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "structopt_derive",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "heck 0.3.3",
-              "target": "heck"
-            },
-            {
-              "id": "proc-macro-error 1.0.4",
-              "target": "proc_macro_error"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.4.18"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "syn 1.0.86": {
-      "name": "syn",
-      "version": "1.0.86",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/syn/1.0.86/download",
-          "sha256": "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "syn",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "syn",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "clone-impls",
-          "default",
-          "derive",
-          "full",
-          "parsing",
-          "printing",
-          "proc-macro",
-          "quote"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "build_script_build"
-            },
-            {
-              "id": "unicode-xid 0.2.2",
-              "target": "unicode_xid"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.86"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "terminal_size 0.1.17": {
-      "name": "terminal_size",
-      "version": "0.1.17",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/terminal_size/0.1.17/download",
-          "sha256": "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "terminal_size",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "terminal_size",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(not(windows))": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.1.17"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "texture-synthesis 0.8.2": {
-      "name": "texture-synthesis",
-      "version": "0.8.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/texture-synthesis/0.8.2/download",
-          "sha256": "62ff62ae485126fec4f3685ced13a1700afb6f6ea12a1a0dec410ebc5dc9378b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "texture_synthesis",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "texture_synthesis",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "image 0.23.12",
-              "target": "image"
-            },
-            {
-              "id": "num_cpus 1.13.1",
-              "target": "num_cpus"
-            },
-            {
-              "id": "rand 0.8.5",
-              "target": "rand"
-            },
-            {
-              "id": "rand_pcg 0.3.1",
-              "target": "rand_pcg"
-            },
-            {
-              "id": "rstar 0.7.1",
-              "target": "rstar"
-            }
-          ],
-          "selects": {
-            "cfg(not(target_arch = \"wasm32\"))": [
-              {
-                "id": "crossbeam-utils 0.8.7",
-                "target": "crossbeam_utils"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.8.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "texture-synthesis-cli 0.8.2": {
-      "name": "texture-synthesis-cli",
-      "version": "0.8.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/texture-synthesis-cli/0.8.2/download",
-          "sha256": "a7dbdf13f5e6f214750fce1073279b71ce3076157a8d337c9b0f0e14334e2aec"
-        }
-      },
-      "targets": [
-        {
-          "Binary": {
-            "crate_name": "texture-synthesis",
-            "crate_root": "src/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": null,
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "structopt 0.3.26",
-              "target": "structopt"
-            },
-            {
-              "id": "texture-synthesis 0.8.2",
-              "target": "texture_synthesis"
-            }
-          ],
-          "selects": {
-            "cfg(not(target_arch = \"wasm32\"))": [
-              {
-                "id": "atty 0.2.14",
-                "target": "atty"
-              },
-              {
-                "id": "indicatif 0.15.0",
-                "target": "indicatif"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.8.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "textwrap 0.11.0": {
-      "name": "textwrap",
-      "version": "0.11.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/textwrap/0.11.0/download",
-          "sha256": "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "textwrap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "textwrap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "unicode-width 0.1.9",
-              "target": "unicode_width"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.11.0"
-      },
-      "license": "MIT"
-    },
-    "textwrap 0.13.4": {
-      "name": "textwrap",
-      "version": "0.13.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/textwrap/0.13.4/download",
-          "sha256": "cd05616119e612a8041ef58f2b578906cc2531a6069047ae092cfb86a325d835"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "textwrap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "textwrap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "smawk",
-          "unicode-width"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "smawk 0.3.1",
-              "target": "smawk"
-            },
-            {
-              "id": "unicode-width 0.1.9",
-              "target": "unicode_width"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.13.4"
-      },
-      "license": "MIT"
-    },
-    "unicode-segmentation 1.9.0": {
-      "name": "unicode-segmentation",
-      "version": "1.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-segmentation/1.9.0/download",
-          "sha256": "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_segmentation",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_segmentation",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.9.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unicode-width 0.1.9": {
-      "name": "unicode-width",
-      "version": "0.1.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-width/0.1.9/download",
-          "sha256": "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_width",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_width",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2015",
-        "version": "0.1.9"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unicode-xid 0.2.2": {
-      "name": "unicode-xid",
-      "version": "0.2.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-xid/0.2.2/download",
-          "sha256": "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_xid",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_xid",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2015",
-        "version": "0.2.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "vec_map 0.8.2": {
-      "name": "vec_map",
-      "version": "0.8.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/vec_map/0.8.2/download",
-          "sha256": "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "vec_map",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "vec_map",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.8.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "version_check 0.9.4": {
-      "name": "version_check",
-      "version": "0.9.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/version_check/0.9.4/download",
-          "sha256": "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "version_check",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "version_check",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.9.4"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "winapi 0.3.9": {
-      "name": "winapi",
-      "version": "0.3.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download",
-          "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "consoleapi",
-          "errhandlingapi",
-          "fileapi",
-          "handleapi",
-          "minwinbase",
-          "minwindef",
-          "processenv",
-          "winbase",
-          "wincon",
-          "winnt",
-          "winuser"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi 0.3.9",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {
-            "i686-pc-windows-gnu": [
-              {
-                "id": "winapi-i686-pc-windows-gnu 0.4.0",
-                "target": "winapi_i686_pc_windows_gnu"
-              }
-            ],
-            "x86_64-pc-windows-gnu": [
-              {
-                "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
-                "target": "winapi_x86_64_pc_windows_gnu"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.3.9"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "winapi-i686-pc-windows-gnu 0.4.0": {
-      "name": "winapi-i686-pc-windows-gnu",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
-          "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_i686_pc_windows_gnu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_i686_pc_windows_gnu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi-i686-pc-windows-gnu 0.4.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "winapi-x86_64-pc-windows-gnu 0.4.0": {
-      "name": "winapi-x86_64-pc-windows-gnu",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
-          "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_x86_64_pc_windows_gnu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_x86_64_pc_windows_gnu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    }
-  },
-  "binary_crates": [
-    "texture-synthesis-cli 0.8.2"
-  ],
-  "workspace_members": {
-    "extra_workspace_members 0.1.0": "extra_workspace_members"
-  },
-  "conditions": {
-    "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [],
-    "cfg(not(target_arch = \"wasm32\"))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-pc-windows-msvc",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-pc-windows-msvc",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(not(windows))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "wasm32-unknown-unknown",
-      "wasm32-wasi",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(target_os = \"hermit\")": [],
-    "cfg(target_os = \"windows\")": [
-      "i686-pc-windows-msvc",
-      "x86_64-pc-windows-msvc"
-    ],
-    "cfg(unix)": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(windows)": [
-      "i686-pc-windows-msvc",
-      "x86_64-pc-windows-msvc"
-    ],
-    "i686-pc-windows-gnu": [],
-    "x86_64-pc-windows-gnu": []
-  }
-}
diff --git a/third_party/rules_rust/examples/crate_universe/extra_workspace_members/Cargo.toml b/third_party/rules_rust/examples/crate_universe/extra_workspace_members/Cargo.toml
deleted file mode 100644
index 2577506..0000000
--- a/third_party/rules_rust/examples/crate_universe/extra_workspace_members/Cargo.toml
+++ /dev/null
@@ -1,11 +0,0 @@
-[package]
-name = "extra_workspace_members"
-version = "0.1.0"
-authors = ["UebelAndre <github@uebelandre.com>"]
-
-[[bin]]
-name = "extra_workspace_members"
-path = "src/main.rs"
-
-[dependencies]
-ferris-says = "0.2.1"
diff --git a/third_party/rules_rust/examples/crate_universe/extra_workspace_members/src/main.rs b/third_party/rules_rust/examples/crate_universe/extra_workspace_members/src/main.rs
deleted file mode 100644
index 0f2fffe..0000000
--- a/third_party/rules_rust/examples/crate_universe/extra_workspace_members/src/main.rs
+++ /dev/null
@@ -1,39 +0,0 @@
-use std::io::{stdout, BufWriter};
-use std::path::Path;
-use std::process::Command;
-
-fn execute_texture_synthesis() -> Vec<u8> {
-    let texture_synthesis_path = Path::new(env!("TEXTURE_SYNTHESIS_CLI"));
-
-    let output = Command::new(texture_synthesis_path)
-        .arg("--help")
-        .output()
-        .unwrap();
-
-    if !output.status.success() {
-        panic!("Execution of texter-synthesis-cli failed")
-    }
-
-    output.stdout
-}
-
-fn main() {
-    // Run the command
-    let output = execute_texture_synthesis();
-
-    // Print the results
-    let mut writer = BufWriter::new(stdout());
-    ferris_says::say(&output, 120, &mut writer).unwrap();
-}
-
-#[cfg(test)]
-mod test {
-    use super::*;
-
-    #[test]
-    fn test_output() {
-        let stdout = execute_texture_synthesis();
-        let text = String::from_utf8(stdout).unwrap();
-        assert!(text.contains("Synthesizes images based on example images"));
-    }
-}
diff --git a/third_party/rules_rust/examples/crate_universe/multi_package/Cargo.Bazel.lock b/third_party/rules_rust/examples/crate_universe/multi_package/Cargo.Bazel.lock
index 12540bc..ef75482 100644
--- a/third_party/rules_rust/examples/crate_universe/multi_package/Cargo.Bazel.lock
+++ b/third_party/rules_rust/examples/crate_universe/multi_package/Cargo.Bazel.lock
@@ -1,10787 +1,1921 @@
-{
-  "checksum": "cba62ac1869a36d1f714ffd077e59f027e78a09a85df999006e21db814f938f4",
-  "crates": {
-    "aho-corasick 0.7.18": {
-      "name": "aho-corasick",
-      "version": "0.7.18",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/aho-corasick/0.7.18/download",
-          "sha256": "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "aho_corasick",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "aho_corasick",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.7.18"
-      },
-      "license": "Unlicense/MIT"
-    },
-    "anyhow 1.0.55": {
-      "name": "anyhow",
-      "version": "1.0.55",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/anyhow/1.0.55/download",
-          "sha256": "159bb86af3a200e19a068f4224eae4c8bb2d0fa054c7e5d1cacd5cef95e684cd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "anyhow",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "anyhow",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "anyhow 1.0.55",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.55"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "ascii-canvas 3.0.0": {
-      "name": "ascii-canvas",
-      "version": "3.0.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ascii-canvas/3.0.0/download",
-          "sha256": "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ascii_canvas",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ascii_canvas",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "term 0.7.0",
-              "target": "term"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "3.0.0"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "assert-json-diff 2.0.1": {
-      "name": "assert-json-diff",
-      "version": "2.0.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/assert-json-diff/2.0.1/download",
-          "sha256": "50f1c3703dd33532d7f0ca049168930e9099ecac238e23cf932f3a69c42f06da"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "assert_json_diff",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "assert_json_diff",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "serde_json"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "2.0.1"
-      },
-      "license": "MIT"
-    },
-    "async-channel 1.6.1": {
-      "name": "async-channel",
-      "version": "1.6.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/async-channel/1.6.1/download",
-          "sha256": "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "async_channel",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "async_channel",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "concurrent-queue 1.2.2",
-              "target": "concurrent_queue"
-            },
-            {
-              "id": "event-listener 2.5.2",
-              "target": "event_listener"
-            },
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.6.1"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "async-executor 1.4.1": {
-      "name": "async-executor",
-      "version": "1.4.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/async-executor/1.4.1/download",
-          "sha256": "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "async_executor",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "async_executor",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "async-task 4.2.0",
-              "target": "async_task"
-            },
-            {
-              "id": "concurrent-queue 1.2.2",
-              "target": "concurrent_queue"
-            },
-            {
-              "id": "fastrand 1.7.0",
-              "target": "fastrand"
-            },
-            {
-              "id": "futures-lite 1.12.0",
-              "target": "futures_lite"
-            },
-            {
-              "id": "once_cell 1.10.0",
-              "target": "once_cell"
-            },
-            {
-              "id": "slab 0.4.5",
-              "target": "slab"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.4.1"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "async-global-executor 2.0.3": {
-      "name": "async-global-executor",
-      "version": "2.0.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/async-global-executor/2.0.3/download",
-          "sha256": "c026b7e44f1316b567ee750fea85103f87fcb80792b860e979f221259796ca0a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "async_global_executor",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "async_global_executor",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "async-io",
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "async-channel 1.6.1",
-              "target": "async_channel"
-            },
-            {
-              "id": "async-executor 1.4.1",
-              "target": "async_executor"
-            },
-            {
-              "id": "async-io 1.6.0",
-              "target": "async_io"
-            },
-            {
-              "id": "async-mutex 1.4.0",
-              "target": "async_mutex"
-            },
-            {
-              "id": "blocking 1.1.0",
-              "target": "blocking"
-            },
-            {
-              "id": "futures-lite 1.12.0",
-              "target": "futures_lite"
-            },
-            {
-              "id": "num_cpus 1.13.1",
-              "target": "num_cpus"
-            },
-            {
-              "id": "once_cell 1.10.0",
-              "target": "once_cell"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "2.0.3"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "async-io 1.6.0": {
-      "name": "async-io",
-      "version": "1.6.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/async-io/1.6.0/download",
-          "sha256": "a811e6a479f2439f0c04038796b5cfb3d2ad56c230e0f2d3f7b04d68cfee607b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "async_io",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "async_io",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "concurrent-queue 1.2.2",
-              "target": "concurrent_queue"
-            },
-            {
-              "id": "futures-lite 1.12.0",
-              "target": "futures_lite"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "once_cell 1.10.0",
-              "target": "once_cell"
-            },
-            {
-              "id": "parking 2.0.0",
-              "target": "parking"
-            },
-            {
-              "id": "polling 2.2.0",
-              "target": "polling"
-            },
-            {
-              "id": "slab 0.4.5",
-              "target": "slab"
-            },
-            {
-              "id": "socket2 0.4.4",
-              "target": "socket2"
-            },
-            {
-              "id": "waker-fn 1.1.0",
-              "target": "waker_fn"
-            }
-          ],
-          "selects": {
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "1.6.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "async-lock 2.5.0": {
-      "name": "async-lock",
-      "version": "2.5.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/async-lock/2.5.0/download",
-          "sha256": "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "async_lock",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "async_lock",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "event-listener 2.5.2",
-              "target": "event_listener"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "2.5.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "async-mutex 1.4.0": {
-      "name": "async-mutex",
-      "version": "1.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/async-mutex/1.4.0/download",
-          "sha256": "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "async_mutex",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "async_mutex",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "event-listener 2.5.2",
-              "target": "event_listener"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.4.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "async-object-pool 0.1.4": {
-      "name": "async-object-pool",
-      "version": "0.1.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/async-object-pool/0.1.4/download",
-          "sha256": "aeb901c30ebc2fc4ab46395bbfbdba9542c16559d853645d75190c3056caf3bc"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "async_object_pool",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "async_object_pool",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "async-std 1.10.0",
-              "target": "async_std"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.4"
-      },
-      "license": "MIT"
-    },
-    "async-process 1.3.0": {
-      "name": "async-process",
-      "version": "1.3.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/async-process/1.3.0/download",
-          "sha256": "83137067e3a2a6a06d67168e49e68a0957d215410473a740cea95a2425c0b7c6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "async_process",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "async_process",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "event-listener 2.5.2",
-              "target": "event_listener"
-            },
-            {
-              "id": "futures-lite 1.12.0",
-              "target": "futures_lite"
-            },
-            {
-              "id": "once_cell 1.10.0",
-              "target": "once_cell"
-            }
-          ],
-          "selects": {
-            "cfg(unix)": [
-              {
-                "id": "async-io 1.6.0",
-                "target": "async_io"
-              },
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              },
-              {
-                "id": "signal-hook 0.3.13",
-                "target": "signal_hook"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "blocking 1.1.0",
-                "target": "blocking"
-              },
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "1.3.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "async-std 1.10.0": {
-      "name": "async-std",
-      "version": "1.10.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/async-std/1.10.0/download",
-          "sha256": "f8056f1455169ab86dd47b47391e4ab0cbd25410a70e9fe675544f49bafaf952"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "async_std",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "async_std",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "async-channel",
-          "async-global-executor",
-          "async-io",
-          "async-lock",
-          "async-process",
-          "crossbeam-utils",
-          "default",
-          "futures-channel",
-          "futures-core",
-          "futures-io",
-          "futures-lite",
-          "gloo-timers",
-          "kv-log-macro",
-          "log",
-          "memchr",
-          "num_cpus",
-          "once_cell",
-          "pin-project-lite",
-          "pin-utils",
-          "slab",
-          "std",
-          "unstable",
-          "wasm-bindgen-futures"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "async-channel 1.6.1",
-              "target": "async_channel"
-            },
-            {
-              "id": "async-lock 2.5.0",
-              "target": "async_lock"
-            },
-            {
-              "id": "crossbeam-utils 0.8.7",
-              "target": "crossbeam_utils"
-            },
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            },
-            {
-              "id": "futures-io 0.3.21",
-              "target": "futures_io"
-            },
-            {
-              "id": "kv-log-macro 1.0.7",
-              "target": "kv_log_macro"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            },
-            {
-              "id": "num_cpus 1.13.1",
-              "target": "num_cpus"
-            },
-            {
-              "id": "once_cell 1.10.0",
-              "target": "once_cell"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            },
-            {
-              "id": "pin-utils 0.1.0",
-              "target": "pin_utils"
-            },
-            {
-              "id": "slab 0.4.5",
-              "target": "slab"
-            }
-          ],
-          "selects": {
-            "cfg(not(target_os = \"unknown\"))": [
-              {
-                "id": "async-global-executor 2.0.3",
-                "target": "async_global_executor"
-              },
-              {
-                "id": "async-io 1.6.0",
-                "target": "async_io"
-              },
-              {
-                "id": "async-process 1.3.0",
-                "target": "async_process"
-              },
-              {
-                "id": "futures-lite 1.12.0",
-                "target": "futures_lite"
-              }
-            ],
-            "cfg(target_arch = \"wasm32\")": [
-              {
-                "id": "futures-channel 0.3.21",
-                "target": "futures_channel"
-              },
-              {
-                "id": "gloo-timers 0.2.3",
-                "target": "gloo_timers"
-              },
-              {
-                "id": "wasm-bindgen-futures 0.4.29",
-                "target": "wasm_bindgen_futures"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "1.10.0"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "async-task 4.2.0": {
-      "name": "async-task",
-      "version": "4.2.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/async-task/4.2.0/download",
-          "sha256": "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "async_task",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "async_task",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "4.2.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "async-trait 0.1.52": {
-      "name": "async-trait",
-      "version": "0.1.52",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/async-trait/0.1.52/download",
-          "sha256": "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "async_trait",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "async_trait",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "async-trait 0.1.52",
-              "target": "build_script_build"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.52"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "atomic-waker 1.0.0": {
-      "name": "atomic-waker",
-      "version": "1.0.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/atomic-waker/1.0.0/download",
-          "sha256": "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "atomic_waker",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "atomic_waker",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "atty 0.2.14": {
-      "name": "atty",
-      "version": "0.2.14",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/atty/0.2.14/download",
-          "sha256": "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "atty",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "atty",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(target_os = \"hermit\")": [
-              {
-                "id": "hermit-abi 0.1.19",
-                "target": "hermit_abi"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.2.14"
-      },
-      "license": "MIT"
-    },
-    "autocfg 1.1.0": {
-      "name": "autocfg",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/autocfg/1.1.0/download",
-          "sha256": "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "autocfg",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "autocfg",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.1.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "base64 0.13.0": {
-      "name": "base64",
-      "version": "0.13.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/base64/0.13.0/download",
-          "sha256": "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "base64",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "base64",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.13.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "basic-cookies 0.1.4": {
-      "name": "basic-cookies",
-      "version": "0.1.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/basic-cookies/0.1.4/download",
-          "sha256": "cb53b6b315f924c7f113b162e53b3901c05fc9966baf84d201dfcc7432a4bb38"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "basic_cookies",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "basic_cookies",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "basic-cookies 0.1.4",
-              "target": "build_script_build"
-            },
-            {
-              "id": "lalrpop-util 0.19.7",
-              "target": "lalrpop_util"
-            },
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.4"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "lalrpop 0.19.7",
-              "target": "lalrpop"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT"
-    },
-    "bit-set 0.5.2": {
-      "name": "bit-set",
-      "version": "0.5.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/bit-set/0.5.2/download",
-          "sha256": "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "bit_set",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "bit_set",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bit-vec 0.6.3",
-              "target": "bit_vec"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.5.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "bit-vec 0.6.3": {
-      "name": "bit-vec",
-      "version": "0.6.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/bit-vec/0.6.3/download",
-          "sha256": "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "bit_vec",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "bit_vec",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.6.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "bitflags 1.3.2": {
-      "name": "bitflags",
-      "version": "1.3.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download",
-          "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "bitflags",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "bitflags",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2018",
-        "version": "1.3.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "block-buffer 0.9.0": {
-      "name": "block-buffer",
-      "version": "0.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/block-buffer/0.9.0/download",
-          "sha256": "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "block_buffer",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "block_buffer",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "generic-array 0.14.5",
-              "target": "generic_array"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.9.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "blocking 1.1.0": {
-      "name": "blocking",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/blocking/1.1.0/download",
-          "sha256": "046e47d4b2d391b1f6f8b407b1deb8dee56c1852ccd868becf2710f601b5f427"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "blocking",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "blocking",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "async-channel 1.6.1",
-              "target": "async_channel"
-            },
-            {
-              "id": "async-task 4.2.0",
-              "target": "async_task"
-            },
-            {
-              "id": "atomic-waker 1.0.0",
-              "target": "atomic_waker"
-            },
-            {
-              "id": "fastrand 1.7.0",
-              "target": "fastrand"
-            },
-            {
-              "id": "futures-lite 1.12.0",
-              "target": "futures_lite"
-            },
-            {
-              "id": "once_cell 1.10.0",
-              "target": "once_cell"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.1.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "bumpalo 3.9.1": {
-      "name": "bumpalo",
-      "version": "3.9.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/bumpalo/3.9.1/download",
-          "sha256": "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "bumpalo",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "bumpalo",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2018",
-        "version": "3.9.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "bytes 1.1.0": {
-      "name": "bytes",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/bytes/1.1.0/download",
-          "sha256": "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "bytes",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "bytes",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "1.1.0"
-      },
-      "license": "MIT"
-    },
-    "cache-padded 1.2.0": {
-      "name": "cache-padded",
-      "version": "1.2.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cache-padded/1.2.0/download",
-          "sha256": "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cache_padded",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cache_padded",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.2.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "castaway 0.1.2": {
-      "name": "castaway",
-      "version": "0.1.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/castaway/0.1.2/download",
-          "sha256": "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "castaway",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "castaway",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.1.2"
-      },
-      "license": "MIT"
-    },
-    "cc 1.0.73": {
-      "name": "cc",
-      "version": "1.0.73",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cc/1.0.73/download",
-          "sha256": "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cc",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "Binary": {
-            "crate_name": "gcc-shim",
-            "crate_root": "src/bin/gcc-shim.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cc",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.73"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "cfg-if 1.0.0": {
-      "name": "cfg-if",
-      "version": "1.0.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
-          "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cfg_if",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cfg_if",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "concurrent-queue 1.2.2": {
-      "name": "concurrent-queue",
-      "version": "1.2.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/concurrent-queue/1.2.2/download",
-          "sha256": "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "concurrent_queue",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "concurrent_queue",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cache-padded 1.2.0",
-              "target": "cache_padded"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.2.2"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "core-foundation 0.9.3": {
-      "name": "core-foundation",
-      "version": "0.9.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/core-foundation/0.9.3/download",
-          "sha256": "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "core_foundation",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "core_foundation",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "core-foundation-sys 0.8.3",
-              "target": "core_foundation_sys"
-            },
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.9.3"
-      },
-      "license": "MIT / Apache-2.0"
-    },
-    "core-foundation-sys 0.8.3": {
-      "name": "core-foundation-sys",
-      "version": "0.8.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/core-foundation-sys/0.8.3/download",
-          "sha256": "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "core_foundation_sys",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "core_foundation_sys",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "core-foundation-sys 0.8.3",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.8.3"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT / Apache-2.0"
-    },
-    "crossbeam-utils 0.8.7": {
-      "name": "crossbeam-utils",
-      "version": "0.8.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/crossbeam-utils/0.8.7/download",
-          "sha256": "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "crossbeam_utils",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "crossbeam_utils",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "lazy_static",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "crossbeam-utils 0.8.7",
-              "target": "build_script_build"
-            },
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.8.7"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "crunchy 0.2.2": {
-      "name": "crunchy",
-      "version": "0.2.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/crunchy/0.2.2/download",
-          "sha256": "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "crunchy",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "crunchy",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "limit_128"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "crunchy 0.2.2",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.2.2"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT"
-    },
-    "ctor 0.1.21": {
-      "name": "ctor",
-      "version": "0.1.21",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ctor/0.1.21/download",
-          "sha256": "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "ctor",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ctor",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.21"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "curl 0.4.42": {
-      "name": "curl",
-      "version": "0.4.42",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/curl/0.4.42/download",
-          "sha256": "7de97b894edd5b5bcceef8b78d7da9b75b1d2f2f9a910569d0bde3dd31d84939"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "curl",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "curl",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "http2",
-          "openssl-probe",
-          "openssl-sys",
-          "ssl",
-          "static-curl"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "curl 0.4.42",
-              "target": "build_script_build"
-            },
-            {
-              "id": "curl-sys 0.4.52+curl-7.81.0",
-              "target": "curl_sys"
-            },
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            },
-            {
-              "id": "socket2 0.4.4",
-              "target": "socket2"
-            }
-          ],
-          "selects": {
-            "cfg(all(unix, not(target_os = \"macos\")))": [
-              {
-                "id": "openssl-probe 0.1.5",
-                "target": "openssl_probe"
-              },
-              {
-                "id": "openssl-sys 0.9.72",
-                "target": "openssl_sys"
-              }
-            ],
-            "cfg(target_env = \"msvc\")": [
-              {
-                "id": "schannel 0.1.19",
-                "target": "schannel"
-              },
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.4.42"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "curl-sys 0.4.52+curl-7.81.0",
-              "target": "curl_sys"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT"
-    },
-    "curl-sys 0.4.52+curl-7.81.0": {
-      "name": "curl-sys",
-      "version": "0.4.52+curl-7.81.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/curl-sys/0.4.52+curl-7.81.0/download",
-          "sha256": "14b8c2d1023ea5fded5b7b892e4b8e95f70038a421126a056761a84246a28971"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "curl_sys",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "curl_sys",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "http2",
-          "libnghttp2-sys",
-          "openssl-sys",
-          "ssl",
-          "static-curl"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            },
-            {
-              "id": "libnghttp2-sys 0.1.7+1.45.0",
-              "target": "libnghttp2_sys"
-            },
-            {
-              "id": "libz-sys 1.1.4",
-              "target": "libz_sys"
-            }
-          ],
-          "selects": {
-            "cfg(all(unix, not(target_os = \"macos\")))": [
-              {
-                "id": "openssl-sys 0.9.72",
-                "target": "openssl_sys"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "extra_deps": [
-          "@curl",
-          "@libssh2"
-        ],
-        "edition": "2018",
-        "version": "0.4.52+curl-7.81.0"
-      },
-      "license": "MIT"
-    },
-    "diff 0.1.12": {
-      "name": "diff",
-      "version": "0.1.12",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/diff/0.1.12/download",
-          "sha256": "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "diff",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "diff",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.1.12"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "digest 0.9.0": {
-      "name": "digest",
-      "version": "0.9.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/digest/0.9.0/download",
-          "sha256": "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "digest",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "digest",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "generic-array 0.14.5",
-              "target": "generic_array"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.9.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "direct-cargo-bazel-deps 0.0.1": {
-      "name": "direct-cargo-bazel-deps",
-      "version": "0.0.1",
-      "repository": null,
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "direct_cargo_bazel_deps",
-            "crate_root": ".direct_cargo_bazel_deps.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "direct_cargo_bazel_deps",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.0.1"
-      },
-      "license": null
-    },
-    "dirs-next 2.0.0": {
-      "name": "dirs-next",
-      "version": "2.0.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/dirs-next/2.0.0/download",
-          "sha256": "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "dirs_next",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "dirs_next",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "dirs-sys-next 0.1.2",
-              "target": "dirs_sys_next"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "2.0.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "dirs-sys-next 0.1.2": {
-      "name": "dirs-sys-next",
-      "version": "0.1.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/dirs-sys-next/0.1.2/download",
-          "sha256": "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "dirs_sys_next",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "dirs_sys_next",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(target_os = \"redox\")": [
-              {
-                "id": "redox_users 0.4.0",
-                "target": "redox_users"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.1.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "either 1.6.1": {
-      "name": "either",
-      "version": "1.6.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/either/1.6.1/download",
-          "sha256": "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "either",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "either",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.6.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "ena 0.14.0": {
-      "name": "ena",
-      "version": "0.14.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ena/0.14.0/download",
-          "sha256": "d7402b94a93c24e742487327a7cd839dc9d36fec9de9fb25b09f2dae459f36c3"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ena",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ena",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.14.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "encoding_rs 0.8.30": {
-      "name": "encoding_rs",
-      "version": "0.8.30",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/encoding_rs/0.8.30/download",
-          "sha256": "7896dc8abb250ffdda33912550faa54c88ec8b998dec0b2c55ab224921ce11df"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "encoding_rs",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "encoding_rs",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "encoding_rs 0.8.30",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.8.30"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": null
-    },
-    "event-listener 2.5.2": {
-      "name": "event-listener",
-      "version": "2.5.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/event-listener/2.5.2/download",
-          "sha256": "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "event_listener",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "event_listener",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "2.5.2"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "fastrand 1.7.0": {
-      "name": "fastrand",
-      "version": "1.7.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/fastrand/1.7.0/download",
-          "sha256": "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "fastrand",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "fastrand",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(target_arch = \"wasm32\")": [
-              {
-                "id": "instant 0.1.12",
-                "target": "instant"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "1.7.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "fixedbitset 0.2.0": {
-      "name": "fixedbitset",
-      "version": "0.2.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/fixedbitset/0.2.0/download",
-          "sha256": "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "fixedbitset",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "fixedbitset",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.2.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "fnv 1.0.7": {
-      "name": "fnv",
-      "version": "1.0.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/fnv/1.0.7/download",
-          "sha256": "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "fnv",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "fnv",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2015",
-        "version": "1.0.7"
-      },
-      "license": "Apache-2.0 / MIT"
-    },
-    "foreign-types 0.3.2": {
-      "name": "foreign-types",
-      "version": "0.3.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/foreign-types/0.3.2/download",
-          "sha256": "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "foreign_types",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "foreign_types",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "foreign-types-shared 0.1.1",
-              "target": "foreign_types_shared"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.3.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "foreign-types-shared 0.1.1": {
-      "name": "foreign-types-shared",
-      "version": "0.1.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/foreign-types-shared/0.1.1/download",
-          "sha256": "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "foreign_types_shared",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "foreign_types_shared",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.1.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "form_urlencoded 1.0.1": {
-      "name": "form_urlencoded",
-      "version": "1.0.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/form_urlencoded/1.0.1/download",
-          "sha256": "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "form_urlencoded",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "form_urlencoded",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "matches 0.1.9",
-              "target": "matches"
-            },
-            {
-              "id": "percent-encoding 2.1.0",
-              "target": "percent_encoding"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "futures-channel 0.3.21": {
-      "name": "futures-channel",
-      "version": "0.3.21",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/futures-channel/0.3.21/download",
-          "sha256": "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "futures_channel",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "futures_channel",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "futures-channel 0.3.21",
-              "target": "build_script_build"
-            },
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.21"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "futures-core 0.3.21": {
-      "name": "futures-core",
-      "version": "0.3.21",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/futures-core/0.3.21/download",
-          "sha256": "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "futures_core",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "futures_core",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "futures-core 0.3.21",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.21"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "futures-io 0.3.21": {
-      "name": "futures-io",
-      "version": "0.3.21",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/futures-io/0.3.21/download",
-          "sha256": "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "futures_io",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "futures_io",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.3.21"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "futures-lite 1.12.0": {
-      "name": "futures-lite",
-      "version": "1.12.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/futures-lite/1.12.0/download",
-          "sha256": "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "futures_lite",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "futures_lite",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "fastrand",
-          "futures-io",
-          "memchr",
-          "parking",
-          "std",
-          "waker-fn"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "fastrand 1.7.0",
-              "target": "fastrand"
-            },
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            },
-            {
-              "id": "futures-io 0.3.21",
-              "target": "futures_io"
-            },
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            },
-            {
-              "id": "parking 2.0.0",
-              "target": "parking"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            },
-            {
-              "id": "waker-fn 1.1.0",
-              "target": "waker_fn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.12.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "futures-macro 0.3.21": {
-      "name": "futures-macro",
-      "version": "0.3.21",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/futures-macro/0.3.21/download",
-          "sha256": "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "futures_macro",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "futures_macro",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.21"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "futures-sink 0.3.21": {
-      "name": "futures-sink",
-      "version": "0.3.21",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/futures-sink/0.3.21/download",
-          "sha256": "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "futures_sink",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "futures_sink",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.3.21"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "futures-task 0.3.21": {
-      "name": "futures-task",
-      "version": "0.3.21",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/futures-task/0.3.21/download",
-          "sha256": "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "futures_task",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "futures_task",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "futures-task 0.3.21",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.21"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "futures-util 0.3.21": {
-      "name": "futures-util",
-      "version": "0.3.21",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/futures-util/0.3.21/download",
-          "sha256": "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "futures_util",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "futures_util",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "async-await",
-          "async-await-macro",
-          "default",
-          "futures-io",
-          "futures-macro",
-          "io",
-          "memchr",
-          "slab",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            },
-            {
-              "id": "futures-io 0.3.21",
-              "target": "futures_io"
-            },
-            {
-              "id": "futures-task 0.3.21",
-              "target": "futures_task"
-            },
-            {
-              "id": "futures-util 0.3.21",
-              "target": "build_script_build"
-            },
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            },
-            {
-              "id": "pin-utils 0.1.0",
-              "target": "pin_utils"
-            },
-            {
-              "id": "slab 0.4.5",
-              "target": "slab"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "futures-macro 0.3.21",
-              "target": "futures_macro"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "0.3.21"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "generic-array 0.14.5": {
-      "name": "generic-array",
-      "version": "0.14.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/generic-array/0.14.5/download",
-          "sha256": "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "generic_array",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "generic_array",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "generic-array 0.14.5",
-              "target": "build_script_build"
-            },
-            {
-              "id": "typenum 1.15.0",
-              "target": "typenum"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.14.5"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "version_check 0.9.4",
-              "target": "version_check"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT"
-    },
-    "getrandom 0.2.5": {
-      "name": "getrandom",
-      "version": "0.2.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/getrandom/0.2.5/download",
-          "sha256": "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "getrandom",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "getrandom",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            }
-          ],
-          "selects": {
-            "cfg(target_os = \"wasi\")": [
-              {
-                "id": "wasi 0.10.2+wasi-snapshot-preview1",
-                "target": "wasi"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.2.5"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "gloo-timers 0.2.3": {
-      "name": "gloo-timers",
-      "version": "0.2.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/gloo-timers/0.2.3/download",
-          "sha256": "4d12a7f4e95cfe710f1d624fb1210b7d961a5fb05c4fd942f4feab06e61f590e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "gloo_timers",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "gloo_timers",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "futures",
-          "futures-channel",
-          "futures-core"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "futures-channel 0.3.21",
-              "target": "futures_channel"
-            },
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            },
-            {
-              "id": "js-sys 0.3.56",
-              "target": "js_sys"
-            },
-            {
-              "id": "wasm-bindgen 0.2.79",
-              "target": "wasm_bindgen"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "h2 0.3.11": {
-      "name": "h2",
-      "version": "0.3.11",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/h2/0.3.11/download",
-          "sha256": "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "h2",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "h2",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "fnv 1.0.7",
-              "target": "fnv"
-            },
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            },
-            {
-              "id": "futures-sink 0.3.21",
-              "target": "futures_sink"
-            },
-            {
-              "id": "futures-util 0.3.21",
-              "target": "futures_util"
-            },
-            {
-              "id": "http 0.2.6",
-              "target": "http"
-            },
-            {
-              "id": "indexmap 1.8.0",
-              "target": "indexmap"
-            },
-            {
-              "id": "slab 0.4.5",
-              "target": "slab"
-            },
-            {
-              "id": "tokio 1.17.0",
-              "target": "tokio"
-            },
-            {
-              "id": "tokio-util 0.6.9",
-              "target": "tokio_util"
-            },
-            {
-              "id": "tracing 0.1.31",
-              "target": "tracing"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.11"
-      },
-      "license": "MIT"
-    },
-    "hashbrown 0.11.2": {
-      "name": "hashbrown",
-      "version": "0.11.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hashbrown/0.11.2/download",
-          "sha256": "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hashbrown",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hashbrown",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "raw"
-        ],
-        "edition": "2018",
-        "version": "0.11.2"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "hermit-abi 0.1.19": {
-      "name": "hermit-abi",
-      "version": "0.1.19",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download",
-          "sha256": "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hermit_abi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hermit_abi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.19"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "hex-literal 0.3.4": {
-      "name": "hex-literal",
-      "version": "0.3.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hex-literal/0.3.4/download",
-          "sha256": "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "hex_literal",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hex_literal",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.3.4"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "http 0.2.6": {
-      "name": "http",
-      "version": "0.2.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/http/0.2.6/download",
-          "sha256": "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "http",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "http",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "fnv 1.0.7",
-              "target": "fnv"
-            },
-            {
-              "id": "itoa 1.0.1",
-              "target": "itoa"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.6"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "http-body 0.4.4": {
-      "name": "http-body",
-      "version": "0.4.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/http-body/0.4.4/download",
-          "sha256": "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "http_body",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "http_body",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "http 0.2.6",
-              "target": "http"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.4.4"
-      },
-      "license": "MIT"
-    },
-    "httparse 1.6.0": {
-      "name": "httparse",
-      "version": "1.6.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/httparse/1.6.0/download",
-          "sha256": "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "httparse",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "httparse",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "httparse 1.6.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "1.6.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "httpdate 1.0.2": {
-      "name": "httpdate",
-      "version": "1.0.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/httpdate/1.0.2/download",
-          "sha256": "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "httpdate",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "httpdate",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "httpmock 0.6.6": {
-      "name": "httpmock",
-      "version": "0.6.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/httpmock/0.6.6/download",
-          "sha256": "c159c4fc205e6c1a9b325cb7ec135d13b5f47188ce175dabb76ec847f331d9bd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "httpmock",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "Binary": {
-            "crate_name": "httpmock",
-            "crate_root": "src/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "httpmock",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "basic-cookies",
-          "cookies",
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "assert-json-diff 2.0.1",
-              "target": "assert_json_diff"
-            },
-            {
-              "id": "async-object-pool 0.1.4",
-              "target": "async_object_pool"
-            },
-            {
-              "id": "base64 0.13.0",
-              "target": "base64"
-            },
-            {
-              "id": "basic-cookies 0.1.4",
-              "target": "basic_cookies"
-            },
-            {
-              "id": "crossbeam-utils 0.8.7",
-              "target": "crossbeam_utils"
-            },
-            {
-              "id": "form_urlencoded 1.0.1",
-              "target": "form_urlencoded"
-            },
-            {
-              "id": "futures-util 0.3.21",
-              "target": "futures_util"
-            },
-            {
-              "id": "hyper 0.14.17",
-              "target": "hyper"
-            },
-            {
-              "id": "isahc 1.6.0",
-              "target": "isahc"
-            },
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            },
-            {
-              "id": "levenshtein 1.0.5",
-              "target": "levenshtein"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "serde_json"
-            },
-            {
-              "id": "serde_regex 1.1.0",
-              "target": "serde_regex"
-            },
-            {
-              "id": "similar 2.1.0",
-              "target": "similar"
-            },
-            {
-              "id": "tokio 1.17.0",
-              "target": "tokio"
-            },
-            {
-              "id": "url 2.2.2",
-              "target": "url"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "async-trait 0.1.52",
-              "target": "async_trait"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "0.6.6"
-      },
-      "license": "MIT"
-    },
-    "hyper 0.14.17": {
-      "name": "hyper",
-      "version": "0.14.17",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hyper/0.14.17/download",
-          "sha256": "043f0e083e9901b6cc658a77d1eb86f4fc650bbb977a4337dd63192826aa85dd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hyper",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hyper",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "client",
-          "default",
-          "h2",
-          "http1",
-          "http2",
-          "runtime",
-          "server",
-          "socket2",
-          "tcp"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "futures-channel 0.3.21",
-              "target": "futures_channel"
-            },
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            },
-            {
-              "id": "futures-util 0.3.21",
-              "target": "futures_util"
-            },
-            {
-              "id": "h2 0.3.11",
-              "target": "h2"
-            },
-            {
-              "id": "http 0.2.6",
-              "target": "http"
-            },
-            {
-              "id": "http-body 0.4.4",
-              "target": "http_body"
-            },
-            {
-              "id": "httparse 1.6.0",
-              "target": "httparse"
-            },
-            {
-              "id": "httpdate 1.0.2",
-              "target": "httpdate"
-            },
-            {
-              "id": "itoa 1.0.1",
-              "target": "itoa"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            },
-            {
-              "id": "socket2 0.4.4",
-              "target": "socket2"
-            },
-            {
-              "id": "tokio 1.17.0",
-              "target": "tokio"
-            },
-            {
-              "id": "tower-service 0.3.1",
-              "target": "tower_service"
-            },
-            {
-              "id": "tracing 0.1.31",
-              "target": "tracing"
-            },
-            {
-              "id": "want 0.3.0",
-              "target": "want"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.14.17"
-      },
-      "license": "MIT"
-    },
-    "hyper-tls 0.5.0": {
-      "name": "hyper-tls",
-      "version": "0.5.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hyper-tls/0.5.0/download",
-          "sha256": "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hyper_tls",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hyper_tls",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "hyper 0.14.17",
-              "target": "hyper"
-            },
-            {
-              "id": "native-tls 0.2.8",
-              "target": "native_tls"
-            },
-            {
-              "id": "tokio 1.17.0",
-              "target": "tokio"
-            },
-            {
-              "id": "tokio-native-tls 0.3.0",
-              "target": "tokio_native_tls"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.5.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "idna 0.2.3": {
-      "name": "idna",
-      "version": "0.2.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/idna/0.2.3/download",
-          "sha256": "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "idna",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "idna",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "matches 0.1.9",
-              "target": "matches"
-            },
-            {
-              "id": "unicode-bidi 0.3.7",
-              "target": "unicode_bidi"
-            },
-            {
-              "id": "unicode-normalization 0.1.19",
-              "target": "unicode_normalization"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "indexmap 1.8.0": {
-      "name": "indexmap",
-      "version": "1.8.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/indexmap/1.8.0/download",
-          "sha256": "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "indexmap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "indexmap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "hashbrown 0.11.2",
-              "target": "hashbrown"
-            },
-            {
-              "id": "indexmap 1.8.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.8.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "autocfg 1.1.0",
-              "target": "autocfg"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "instant 0.1.12": {
-      "name": "instant",
-      "version": "0.1.12",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/instant/0.1.12/download",
-          "sha256": "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "instant",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "instant",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.12"
-      },
-      "license": "BSD-3-Clause"
-    },
-    "ipnet 2.4.0": {
-      "name": "ipnet",
-      "version": "2.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ipnet/2.4.0/download",
-          "sha256": "35e70ee094dc02fd9c13fdad4940090f22dbd6ac7c9e7094a46cf0232a50bc7c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ipnet",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ipnet",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2015",
-        "version": "2.4.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "isahc 1.6.0": {
-      "name": "isahc",
-      "version": "1.6.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/isahc/1.6.0/download",
-          "sha256": "d140e84730d325378912ede32d7cd53ef1542725503b3353e5ec8113c7c6f588"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "isahc",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "isahc",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "encoding_rs",
-          "http2",
-          "mime",
-          "static-curl",
-          "text-decoding"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "async-channel 1.6.1",
-              "target": "async_channel"
-            },
-            {
-              "id": "castaway 0.1.2",
-              "target": "castaway"
-            },
-            {
-              "id": "crossbeam-utils 0.8.7",
-              "target": "crossbeam_utils"
-            },
-            {
-              "id": "curl 0.4.42",
-              "target": "curl"
-            },
-            {
-              "id": "curl-sys 0.4.52+curl-7.81.0",
-              "target": "curl_sys"
-            },
-            {
-              "id": "encoding_rs 0.8.30",
-              "target": "encoding_rs"
-            },
-            {
-              "id": "event-listener 2.5.2",
-              "target": "event_listener"
-            },
-            {
-              "id": "futures-lite 1.12.0",
-              "target": "futures_lite"
-            },
-            {
-              "id": "http 0.2.6",
-              "target": "http"
-            },
-            {
-              "id": "isahc 1.6.0",
-              "target": "build_script_build"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "mime 0.3.16",
-              "target": "mime"
-            },
-            {
-              "id": "once_cell 1.10.0",
-              "target": "once_cell"
-            },
-            {
-              "id": "polling 2.2.0",
-              "target": "polling"
-            },
-            {
-              "id": "slab 0.4.5",
-              "target": "slab"
-            },
-            {
-              "id": "sluice 0.5.5",
-              "target": "sluice"
-            },
-            {
-              "id": "tracing 0.1.31",
-              "target": "tracing"
-            },
-            {
-              "id": "tracing-futures 0.2.5",
-              "target": "tracing_futures"
-            },
-            {
-              "id": "url 2.2.2",
-              "target": "url"
-            },
-            {
-              "id": "waker-fn 1.1.0",
-              "target": "waker_fn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.6.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT"
-    },
-    "itertools 0.10.3": {
-      "name": "itertools",
-      "version": "0.10.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/itertools/0.10.3/download",
-          "sha256": "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "itertools",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "itertools",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "use_alloc",
-          "use_std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "either 1.6.1",
-              "target": "either"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "itoa 1.0.1": {
-      "name": "itoa",
-      "version": "1.0.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/itoa/1.0.1/download",
-          "sha256": "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "itoa",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "itoa",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "js-sys 0.3.56": {
-      "name": "js-sys",
-      "version": "0.3.56",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/js-sys/0.3.56/download",
-          "sha256": "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "js_sys",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "js_sys",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "wasm-bindgen 0.2.79",
-              "target": "wasm_bindgen"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.56"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "kv-log-macro 1.0.7": {
-      "name": "kv-log-macro",
-      "version": "1.0.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/kv-log-macro/1.0.7/download",
-          "sha256": "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "kv_log_macro",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "kv_log_macro",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.7"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "lalrpop 0.19.7": {
-      "name": "lalrpop",
-      "version": "0.19.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/lalrpop/0.19.7/download",
-          "sha256": "852b75a095da6b69da8c5557731c3afd06525d4f655a4fc1c799e2ec8bc4dce4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "lalrpop",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "Binary": {
-            "crate_name": "lalrpop",
-            "crate_root": "src/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "lalrpop",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "lexer",
-          "pico-args"
-        ],
-        "data_glob": [
-          "**/*.lalrpop"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "ascii-canvas 3.0.0",
-              "target": "ascii_canvas"
-            },
-            {
-              "id": "atty 0.2.14",
-              "target": "atty"
-            },
-            {
-              "id": "bit-set 0.5.2",
-              "target": "bit_set"
-            },
-            {
-              "id": "diff 0.1.12",
-              "target": "diff"
-            },
-            {
-              "id": "ena 0.14.0",
-              "target": "ena"
-            },
-            {
-              "id": "itertools 0.10.3",
-              "target": "itertools"
-            },
-            {
-              "id": "lalrpop-util 0.19.7",
-              "target": "lalrpop_util"
-            },
-            {
-              "id": "petgraph 0.5.1",
-              "target": "petgraph"
-            },
-            {
-              "id": "pico-args 0.4.2",
-              "target": "pico_args"
-            },
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            },
-            {
-              "id": "regex-syntax 0.6.25",
-              "target": "regex_syntax"
-            },
-            {
-              "id": "string_cache 0.8.3",
-              "target": "string_cache"
-            },
-            {
-              "id": "term 0.7.0",
-              "target": "term"
-            },
-            {
-              "id": "tiny-keccak 2.0.2",
-              "target": "tiny_keccak"
-            },
-            {
-              "id": "unicode-xid 0.2.2",
-              "target": "unicode_xid"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.19.7"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "lalrpop-util 0.19.7": {
-      "name": "lalrpop-util",
-      "version": "0.19.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/lalrpop-util/0.19.7/download",
-          "sha256": "d6d265705249fe209280676d8f68887859fa42e1d34f342fc05bd47726a5e188"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "lalrpop_util",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "lalrpop_util",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "lexer",
-          "regex",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.19.7"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "lazy_static 1.4.0": {
-      "name": "lazy_static",
-      "version": "1.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/lazy_static/1.4.0/download",
-          "sha256": "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "lazy_static",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "lazy_static",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.4.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "levenshtein 1.0.5": {
-      "name": "levenshtein",
-      "version": "1.0.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/levenshtein/1.0.5/download",
-          "sha256": "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "levenshtein",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "levenshtein",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.0.5"
-      },
-      "license": "MIT"
-    },
-    "libc 0.2.119": {
-      "name": "libc",
-      "version": "0.2.119",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/libc/0.2.119/download",
-          "sha256": "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "libc",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "libc",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.2.119"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "libnghttp2-sys 0.1.7+1.45.0": {
-      "name": "libnghttp2-sys",
-      "version": "0.1.7+1.45.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/libnghttp2-sys/0.1.7+1.45.0/download",
-          "sha256": "57ed28aba195b38d5ff02b9170cbff627e336a20925e43b4945390401c5dc93f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "libnghttp2_sys",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "libnghttp2_sys",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "data_glob": [
-          "nghttp2/**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            },
-            {
-              "id": "libnghttp2-sys 0.1.7+1.45.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.7+1.45.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**",
-          "nghttp2/**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cc 1.0.73",
-              "target": "cc"
-            }
-          ],
-          "selects": {}
-        },
-        "links": "nghttp2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "libz-sys 1.1.4": {
-      "name": "libz-sys",
-      "version": "1.1.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/libz-sys/1.1.4/download",
-          "sha256": "df2bf61678a0a521c3f7daf815d2e6717d85a272a7dcd02c9768272b32bd1e2a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "libz_sys",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "libz_sys",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "libc"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            },
-            {
-              "id": "libz-sys 1.1.4",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "1.1.4"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cc 1.0.73",
-              "target": "cc"
-            },
-            {
-              "id": "pkg-config 0.3.24",
-              "target": "pkg_config"
-            }
-          ],
-          "selects": {
-            "cfg(target_env = \"msvc\")": [
-              {
-                "id": "vcpkg 0.2.15",
-                "target": "vcpkg"
-              }
-            ]
-          }
-        },
-        "links": "z"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "lock_api 0.4.6": {
-      "name": "lock_api",
-      "version": "0.4.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/lock_api/0.4.6/download",
-          "sha256": "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "lock_api",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "lock_api",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "scopeguard 1.1.0",
-              "target": "scopeguard"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.4.6"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "log 0.4.14": {
-      "name": "log",
-      "version": "0.4.14",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/log/0.4.14/download",
-          "sha256": "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "log",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "log",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "kv_unstable",
-          "value-bag"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "build_script_build"
-            },
-            {
-              "id": "value-bag 1.0.0-alpha.8",
-              "target": "value_bag"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.14"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "matches 0.1.9": {
-      "name": "matches",
-      "version": "0.1.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/matches/0.1.9/download",
-          "sha256": "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "matches",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "matches",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.1.9"
-      },
-      "license": "MIT"
-    },
-    "md-5 0.9.1": {
-      "name": "md-5",
-      "version": "0.9.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/md-5/0.9.1/download",
-          "sha256": "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "md5",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "md5",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "block-buffer 0.9.0",
-              "target": "block_buffer"
-            },
-            {
-              "id": "digest 0.9.0",
-              "target": "digest"
-            },
-            {
-              "id": "opaque-debug 0.3.0",
-              "target": "opaque_debug"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.9.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "memchr 2.4.1": {
-      "name": "memchr",
-      "version": "2.4.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/memchr/2.4.1/download",
-          "sha256": "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "memchr",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "memchr",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "memchr 2.4.1",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "2.4.1"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "Unlicense/MIT"
-    },
-    "mime 0.3.16": {
-      "name": "mime",
-      "version": "0.3.16",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/mime/0.3.16/download",
-          "sha256": "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "mime",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "mime",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.3.16"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "mio 0.8.0": {
-      "name": "mio",
-      "version": "0.8.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/mio/0.8.0/download",
-          "sha256": "ba272f85fa0b41fc91872be579b3bbe0f56b792aa361a380eb669469f68dafb2"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "mio",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "mio",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "net",
-          "os-ext",
-          "os-poll"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            }
-          ],
-          "selects": {
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "miow 0.3.7",
-                "target": "miow"
-              },
-              {
-                "id": "ntapi 0.3.7",
-                "target": "ntapi"
-              },
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.8.0"
-      },
-      "license": "MIT"
-    },
-    "miow 0.3.7": {
-      "name": "miow",
-      "version": "0.3.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/miow/0.3.7/download",
-          "sha256": "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "miow",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "miow",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi 0.3.9",
-              "target": "winapi"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.7"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "native-tls 0.2.8": {
-      "name": "native-tls",
-      "version": "0.2.8",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/native-tls/0.2.8/download",
-          "sha256": "48ba9f7719b5a0f42f338907614285fb5fd70e53858141f69898a1fb7203b24d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "native_tls",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "native_tls",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "native-tls 0.2.8",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {
-            "cfg(any(target_os = \"macos\", target_os = \"ios\"))": [
-              {
-                "id": "lazy_static 1.4.0",
-                "target": "lazy_static"
-              },
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              },
-              {
-                "id": "security-framework 2.6.1",
-                "target": "security_framework"
-              },
-              {
-                "id": "security-framework-sys 2.6.1",
-                "target": "security_framework_sys"
-              },
-              {
-                "id": "tempfile 3.3.0",
-                "target": "tempfile"
-              }
-            ],
-            "cfg(not(any(target_os = \"windows\", target_os = \"macos\", target_os = \"ios\")))": [
-              {
-                "id": "log 0.4.14",
-                "target": "log"
-              },
-              {
-                "id": "openssl 0.10.38",
-                "target": "openssl"
-              },
-              {
-                "id": "openssl-probe 0.1.5",
-                "target": "openssl_probe"
-              },
-              {
-                "id": "openssl-sys 0.9.72",
-                "target": "openssl_sys"
-              }
-            ],
-            "cfg(target_os = \"windows\")": [
-              {
-                "id": "schannel 0.1.19",
-                "target": "schannel"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.2.8"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "new_debug_unreachable 1.0.4": {
-      "name": "new_debug_unreachable",
-      "version": "1.0.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/new_debug_unreachable/1.0.4/download",
-          "sha256": "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "debug_unreachable",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "debug_unreachable",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.4"
-      },
-      "license": "MIT"
-    },
-    "ntapi 0.3.7": {
-      "name": "ntapi",
-      "version": "0.3.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ntapi/0.3.7/download",
-          "sha256": "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ntapi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ntapi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "user"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "ntapi 0.3.7",
-              "target": "build_script_build"
-            },
-            {
-              "id": "winapi 0.3.9",
-              "target": "winapi"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.7"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "num_cpus 1.13.1": {
-      "name": "num_cpus",
-      "version": "1.13.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num_cpus/1.13.1/download",
-          "sha256": "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_cpus",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_cpus",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [
-              {
-                "id": "hermit-abi 0.1.19",
-                "target": "hermit_abi"
-              }
-            ],
-            "cfg(not(windows))": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "1.13.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "once_cell 1.10.0": {
-      "name": "once_cell",
-      "version": "1.10.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/once_cell/1.10.0/download",
-          "sha256": "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "once_cell",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "once_cell",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "race",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "1.10.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "opaque-debug 0.3.0": {
-      "name": "opaque-debug",
-      "version": "0.3.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/opaque-debug/0.3.0/download",
-          "sha256": "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "opaque_debug",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "opaque_debug",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.3.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "openssl 0.10.38": {
-      "name": "openssl",
-      "version": "0.10.38",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/openssl/0.10.38/download",
-          "sha256": "0c7ae222234c30df141154f159066c5093ff73b63204dcda7121eb082fc56a95"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "openssl",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "openssl",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            },
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "foreign-types 0.3.2",
-              "target": "foreign_types"
-            },
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            },
-            {
-              "id": "once_cell 1.10.0",
-              "target": "once_cell"
-            },
-            {
-              "id": "openssl 0.10.38",
-              "target": "build_script_build"
-            },
-            {
-              "id": "openssl-sys 0.9.72",
-              "target": "openssl_sys",
-              "alias": "ffi"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.38"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "openssl-sys 0.9.72",
-              "target": "openssl_sys",
-              "alias": "ffi"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "Apache-2.0"
-    },
-    "openssl-probe 0.1.5": {
-      "name": "openssl-probe",
-      "version": "0.1.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/openssl-probe/0.1.5/download",
-          "sha256": "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "openssl_probe",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "openssl_probe",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.1.5"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "openssl-sys 0.9.72": {
-      "name": "openssl-sys",
-      "version": "0.9.72",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/openssl-sys/0.9.72/download",
-          "sha256": "7e46109c383602735fa0a2e48dd2b7c892b048e1bf69e5c3b1d804b7d9c203cb"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "openssl_sys",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_main",
-            "crate_root": "build/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "openssl_sys",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "data": {
-          "common": [
-            "@openssl"
-          ],
-          "selects": {}
-        },
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            },
-            {
-              "id": "openssl-sys 0.9.72",
-              "target": "build_script_main"
-            }
-          ],
-          "selects": {}
-        },
-        "extra_deps": [
-          "@openssl"
-        ],
-        "edition": "2015",
-        "version": "0.9.72"
-      },
-      "build_script_attrs": {
-        "data": {
-          "common": [
-            "@openssl//:gen_dir",
-            "@openssl//:openssl"
-          ],
-          "selects": {}
-        },
-        "data_glob": [
-          "**",
-          "build/**/*.c"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "autocfg 1.1.0",
-              "target": "autocfg"
-            },
-            {
-              "id": "cc 1.0.73",
-              "target": "cc"
-            },
-            {
-              "id": "pkg-config 0.3.24",
-              "target": "pkg_config"
-            }
-          ],
-          "selects": {
-            "cfg(target_env = \"msvc\")": [
-              {
-                "id": "vcpkg 0.2.15",
-                "target": "vcpkg"
-              }
-            ]
-          }
-        },
-        "build_script_env": {
-          "common": {
-            "OPENSSL_DIR": "$(execpath @openssl//:gen_dir)",
-            "OPENSSL_STATIC": "1"
-          },
-          "selects": {}
-        },
-        "links": "openssl"
-      },
-      "license": "MIT"
-    },
-    "parking 2.0.0": {
-      "name": "parking",
-      "version": "2.0.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/parking/2.0.0/download",
-          "sha256": "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "parking",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "parking",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "2.0.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "parking_lot 0.11.2": {
-      "name": "parking_lot",
-      "version": "0.11.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/parking_lot/0.11.2/download",
-          "sha256": "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "parking_lot",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "parking_lot",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "instant 0.1.12",
-              "target": "instant"
-            },
-            {
-              "id": "lock_api 0.4.6",
-              "target": "lock_api"
-            },
-            {
-              "id": "parking_lot_core 0.8.5",
-              "target": "parking_lot_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.11.2"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "parking_lot_core 0.8.5": {
-      "name": "parking_lot_core",
-      "version": "0.8.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/parking_lot_core/0.8.5/download",
-          "sha256": "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "parking_lot_core",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "parking_lot_core",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "instant 0.1.12",
-              "target": "instant"
-            },
-            {
-              "id": "parking_lot_core 0.8.5",
-              "target": "build_script_build"
-            },
-            {
-              "id": "smallvec 1.8.0",
-              "target": "smallvec"
-            }
-          ],
-          "selects": {
-            "cfg(target_os = \"redox\")": [
-              {
-                "id": "redox_syscall 0.2.11",
-                "target": "syscall"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.8.5"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "percent-encoding 2.1.0": {
-      "name": "percent-encoding",
-      "version": "2.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/percent-encoding/2.1.0/download",
-          "sha256": "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "percent_encoding",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "percent_encoding",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "2.1.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "petgraph 0.5.1": {
-      "name": "petgraph",
-      "version": "0.5.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/petgraph/0.5.1/download",
-          "sha256": "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "petgraph",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "petgraph",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "fixedbitset 0.2.0",
-              "target": "fixedbitset"
-            },
-            {
-              "id": "indexmap 1.8.0",
-              "target": "indexmap"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.5.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "phf_shared 0.10.0": {
-      "name": "phf_shared",
-      "version": "0.10.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/phf_shared/0.10.0/download",
-          "sha256": "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "phf_shared",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "phf_shared",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "siphasher 0.3.10",
-              "target": "siphasher"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.10.0"
-      },
-      "license": "MIT"
-    },
-    "pico-args 0.4.2": {
-      "name": "pico-args",
-      "version": "0.4.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pico-args/0.4.2/download",
-          "sha256": "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pico_args",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pico_args",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.4.2"
-      },
-      "license": "MIT"
-    },
-    "pin-project 1.0.10": {
-      "name": "pin-project",
-      "version": "1.0.10",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pin-project/1.0.10/download",
-          "sha256": "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pin_project",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pin_project",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "pin-project-internal 1.0.10",
-              "target": "pin_project_internal"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "1.0.10"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "pin-project-internal 1.0.10": {
-      "name": "pin-project-internal",
-      "version": "1.0.10",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pin-project-internal/1.0.10/download",
-          "sha256": "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "pin_project_internal",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pin_project_internal",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.10"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "pin-project-lite 0.2.8": {
-      "name": "pin-project-lite",
-      "version": "0.2.8",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pin-project-lite/0.2.8/download",
-          "sha256": "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pin_project_lite",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pin_project_lite",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.2.8"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "pin-utils 0.1.0": {
-      "name": "pin-utils",
-      "version": "0.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pin-utils/0.1.0/download",
-          "sha256": "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pin_utils",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pin_utils",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.1.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "pkg-config 0.3.24": {
-      "name": "pkg-config",
-      "version": "0.3.24",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pkg-config/0.3.24/download",
-          "sha256": "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pkg_config",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pkg_config",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.3.24"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "pkg_a 0.1.0": {
-      "name": "pkg_a",
-      "version": "0.1.0",
-      "repository": null,
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pkg_a",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pkg_a",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "anyhow 1.0.55",
-              "target": "anyhow"
-            },
-            {
-              "id": "reqwest 0.11.9",
-              "target": "reqwest"
-            }
-          ],
-          "selects": {}
-        },
-        "deps_dev": {
-          "common": [
-            {
-              "id": "httpmock 0.6.6",
-              "target": "httpmock"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.0"
-      },
-      "license": null
-    },
-    "pkg_b 0.1.0": {
-      "name": "pkg_b",
-      "version": "0.1.0",
-      "repository": null,
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pkg_b",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pkg_b",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "openssl 0.10.38",
-              "target": "openssl"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.0"
-      },
-      "license": null
-    },
-    "pkg_c 0.1.0": {
-      "name": "pkg_c",
-      "version": "0.1.0",
-      "repository": null,
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pkg_c",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pkg_c",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "md-5 0.9.1",
-              "target": "md5"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps_dev": {
-          "common": [
-            {
-              "id": "hex-literal 0.3.4",
-              "target": "hex_literal"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "0.1.0"
-      },
-      "license": null
-    },
-    "polling 2.2.0": {
-      "name": "polling",
-      "version": "2.2.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/polling/2.2.0/download",
-          "sha256": "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "polling",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "polling",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            }
-          ],
-          "selects": {
-            "cfg(any(unix, target_os = \"fuchsia\", target_os = \"vxworks\"))": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "wepoll-ffi 0.1.2",
-                "target": "wepoll_ffi"
-              },
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "2.2.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "precomputed-hash 0.1.1": {
-      "name": "precomputed-hash",
-      "version": "0.1.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/precomputed-hash/0.1.1/download",
-          "sha256": "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "precomputed_hash",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "precomputed_hash",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.1.1"
-      },
-      "license": "MIT"
-    },
-    "proc-macro2 1.0.36": {
-      "name": "proc-macro2",
-      "version": "1.0.36",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/proc-macro2/1.0.36/download",
-          "sha256": "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "proc_macro2",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "proc_macro2",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "proc-macro"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "build_script_build"
-            },
-            {
-              "id": "unicode-xid 0.2.2",
-              "target": "unicode_xid"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.36"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "quote 1.0.15": {
-      "name": "quote",
-      "version": "1.0.15",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/quote/1.0.15/download",
-          "sha256": "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "quote",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "quote",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "proc-macro"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.15"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "redox_syscall 0.2.11": {
-      "name": "redox_syscall",
-      "version": "0.2.11",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/redox_syscall/0.2.11/download",
-          "sha256": "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "syscall",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "syscall",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.11"
-      },
-      "license": "MIT"
-    },
-    "redox_users 0.4.0": {
-      "name": "redox_users",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/redox_users/0.4.0/download",
-          "sha256": "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "redox_users",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "redox_users",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "getrandom 0.2.5",
-              "target": "getrandom"
-            },
-            {
-              "id": "redox_syscall 0.2.11",
-              "target": "syscall"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.4.0"
-      },
-      "license": "MIT"
-    },
-    "regex 1.5.4": {
-      "name": "regex",
-      "version": "1.5.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/regex/1.5.4/download",
-          "sha256": "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "regex",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "regex",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "aho-corasick",
-          "default",
-          "memchr",
-          "perf",
-          "perf-cache",
-          "perf-dfa",
-          "perf-inline",
-          "perf-literal",
-          "std",
-          "unicode",
-          "unicode-age",
-          "unicode-bool",
-          "unicode-case",
-          "unicode-gencat",
-          "unicode-perl",
-          "unicode-script",
-          "unicode-segment"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "aho-corasick 0.7.18",
-              "target": "aho_corasick"
-            },
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            },
-            {
-              "id": "regex-syntax 0.6.25",
-              "target": "regex_syntax"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.5.4"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "regex-syntax 0.6.25": {
-      "name": "regex-syntax",
-      "version": "0.6.25",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/regex-syntax/0.6.25/download",
-          "sha256": "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "regex_syntax",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "regex_syntax",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "unicode",
-          "unicode-age",
-          "unicode-bool",
-          "unicode-case",
-          "unicode-gencat",
-          "unicode-perl",
-          "unicode-script",
-          "unicode-segment"
-        ],
-        "edition": "2018",
-        "version": "0.6.25"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "remove_dir_all 0.5.3": {
-      "name": "remove_dir_all",
-      "version": "0.5.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/remove_dir_all/0.5.3/download",
-          "sha256": "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "remove_dir_all",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "remove_dir_all",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.5.3"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "reqwest 0.11.9": {
-      "name": "reqwest",
-      "version": "0.11.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/reqwest/0.11.9/download",
-          "sha256": "87f242f1488a539a79bac6dbe7c8609ae43b7914b7736210f239a37cccb32525"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "reqwest",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "reqwest",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "__tls",
-          "blocking",
-          "default",
-          "default-tls",
-          "hyper-tls",
-          "json",
-          "native-tls-crate",
-          "serde_json",
-          "tokio-native-tls"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "http 0.2.6",
-              "target": "http"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "serde_json"
-            },
-            {
-              "id": "serde_urlencoded 0.7.1",
-              "target": "serde_urlencoded"
-            },
-            {
-              "id": "url 2.2.2",
-              "target": "url"
-            }
-          ],
-          "selects": {
-            "cfg(not(target_arch = \"wasm32\"))": [
-              {
-                "id": "base64 0.13.0",
-                "target": "base64"
-              },
-              {
-                "id": "encoding_rs 0.8.30",
-                "target": "encoding_rs"
-              },
-              {
-                "id": "futures-core 0.3.21",
-                "target": "futures_core"
-              },
-              {
-                "id": "futures-util 0.3.21",
-                "target": "futures_util"
-              },
-              {
-                "id": "h2 0.3.11",
-                "target": "h2"
-              },
-              {
-                "id": "http-body 0.4.4",
-                "target": "http_body"
-              },
-              {
-                "id": "hyper 0.14.17",
-                "target": "hyper"
-              },
-              {
-                "id": "hyper-tls 0.5.0",
-                "target": "hyper_tls"
-              },
-              {
-                "id": "ipnet 2.4.0",
-                "target": "ipnet"
-              },
-              {
-                "id": "lazy_static 1.4.0",
-                "target": "lazy_static"
-              },
-              {
-                "id": "log 0.4.14",
-                "target": "log"
-              },
-              {
-                "id": "mime 0.3.16",
-                "target": "mime"
-              },
-              {
-                "id": "native-tls 0.2.8",
-                "target": "native_tls",
-                "alias": "native_tls_crate"
-              },
-              {
-                "id": "percent-encoding 2.1.0",
-                "target": "percent_encoding"
-              },
-              {
-                "id": "pin-project-lite 0.2.8",
-                "target": "pin_project_lite"
-              },
-              {
-                "id": "tokio 1.17.0",
-                "target": "tokio"
-              },
-              {
-                "id": "tokio-native-tls 0.3.0",
-                "target": "tokio_native_tls"
-              }
-            ],
-            "cfg(target_arch = \"wasm32\")": [
-              {
-                "id": "js-sys 0.3.56",
-                "target": "js_sys"
-              },
-              {
-                "id": "serde_json 1.0.79",
-                "target": "serde_json"
-              },
-              {
-                "id": "wasm-bindgen 0.2.79",
-                "target": "wasm_bindgen"
-              },
-              {
-                "id": "wasm-bindgen-futures 0.4.29",
-                "target": "wasm_bindgen_futures"
-              },
-              {
-                "id": "web-sys 0.3.56",
-                "target": "web_sys"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winreg 0.7.0",
-                "target": "winreg"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.11.9"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "rustversion 1.0.6": {
-      "name": "rustversion",
-      "version": "1.0.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/rustversion/1.0.6/download",
-          "sha256": "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "rustversion",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build/build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "rustversion",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "rustversion 1.0.6",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.6"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "ryu 1.0.9": {
-      "name": "ryu",
-      "version": "1.0.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ryu/1.0.9/download",
-          "sha256": "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ryu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ryu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.9"
-      },
-      "license": "Apache-2.0 OR BSL-1.0"
-    },
-    "schannel 0.1.19": {
-      "name": "schannel",
-      "version": "0.1.19",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/schannel/0.1.19/download",
-          "sha256": "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "schannel",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "schannel",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            },
-            {
-              "id": "winapi 0.3.9",
-              "target": "winapi"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.1.19"
-      },
-      "license": "MIT"
-    },
-    "scopeguard 1.1.0": {
-      "name": "scopeguard",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/scopeguard/1.1.0/download",
-          "sha256": "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "scopeguard",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "scopeguard",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.1.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "security-framework 2.6.1": {
-      "name": "security-framework",
-      "version": "2.6.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/security-framework/2.6.1/download",
-          "sha256": "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "security_framework",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "security_framework",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "OSX_10_9",
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            },
-            {
-              "id": "core-foundation 0.9.3",
-              "target": "core_foundation"
-            },
-            {
-              "id": "core-foundation-sys 0.8.3",
-              "target": "core_foundation_sys"
-            },
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            },
-            {
-              "id": "security-framework-sys 2.6.1",
-              "target": "security_framework_sys"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "2.6.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "security-framework-sys 2.6.1": {
-      "name": "security-framework-sys",
-      "version": "2.6.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/security-framework-sys/2.6.1/download",
-          "sha256": "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "security_framework_sys",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "security_framework_sys",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "OSX_10_9",
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "core-foundation-sys 0.8.3",
-              "target": "core_foundation_sys"
-            },
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "2.6.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "serde 1.0.136": {
-      "name": "serde",
-      "version": "1.0.136",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/serde/1.0.136/download",
-          "sha256": "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "serde",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "serde",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "derive",
-          "serde_derive",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "serde 1.0.136",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "serde_derive 1.0.136",
-              "target": "serde_derive"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "1.0.136"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "serde_derive 1.0.136": {
-      "name": "serde_derive",
-      "version": "1.0.136",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/serde_derive/1.0.136/download",
-          "sha256": "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "serde_derive",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "serde_derive",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "serde_derive 1.0.136",
-              "target": "build_script_build"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "1.0.136"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "serde_json 1.0.79": {
-      "name": "serde_json",
-      "version": "1.0.79",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/serde_json/1.0.79/download",
-          "sha256": "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "serde_json",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "serde_json",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "itoa 1.0.1",
-              "target": "itoa"
-            },
-            {
-              "id": "ryu 1.0.9",
-              "target": "ryu"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.79"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "serde_regex 1.1.0": {
-      "name": "serde_regex",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/serde_regex/1.1.0/download",
-          "sha256": "a8136f1a4ea815d7eac4101cfd0b16dc0cb5e1fe1b8609dfd728058656b7badf"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "serde_regex",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "serde_regex",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "regex 1.5.4",
-              "target": "regex"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.1.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "serde_urlencoded 0.7.1": {
-      "name": "serde_urlencoded",
-      "version": "0.7.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/serde_urlencoded/0.7.1/download",
-          "sha256": "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "serde_urlencoded",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "serde_urlencoded",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "form_urlencoded 1.0.1",
-              "target": "form_urlencoded"
-            },
-            {
-              "id": "itoa 1.0.1",
-              "target": "itoa"
-            },
-            {
-              "id": "ryu 1.0.9",
-              "target": "ryu"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.7.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "signal-hook 0.3.13": {
-      "name": "signal-hook",
-      "version": "0.3.13",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/signal-hook/0.3.13/download",
-          "sha256": "647c97df271007dcea485bb74ffdb57f2e683f1306c854f468a0c244badabf2d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "signal_hook",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "signal_hook",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "channel",
-          "iterator"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            },
-            {
-              "id": "signal-hook 0.3.13",
-              "target": "build_script_build"
-            },
-            {
-              "id": "signal-hook-registry 1.4.0",
-              "target": "signal_hook_registry"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.13"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "signal-hook-registry 1.4.0": {
-      "name": "signal-hook-registry",
-      "version": "1.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/signal-hook-registry/1.4.0/download",
-          "sha256": "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "signal_hook_registry",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "signal_hook_registry",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "1.4.0"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "similar 2.1.0": {
-      "name": "similar",
-      "version": "2.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/similar/2.1.0/download",
-          "sha256": "2e24979f63a11545f5f2c60141afe249d4f19f84581ea2138065e400941d83d3"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "similar",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "similar",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "text"
-        ],
-        "edition": "2018",
-        "version": "2.1.0"
-      },
-      "license": "Apache-2.0"
-    },
-    "siphasher 0.3.10": {
-      "name": "siphasher",
-      "version": "0.3.10",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/siphasher/0.3.10/download",
-          "sha256": "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "siphasher",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "siphasher",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.3.10"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "slab 0.4.5": {
-      "name": "slab",
-      "version": "0.4.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/slab/0.4.5/download",
-          "sha256": "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "slab",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "slab",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.4.5"
-      },
-      "license": "MIT"
-    },
-    "sluice 0.5.5": {
-      "name": "sluice",
-      "version": "0.5.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/sluice/0.5.5/download",
-          "sha256": "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "sluice",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "sluice",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "async-channel 1.6.1",
-              "target": "async_channel"
-            },
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            },
-            {
-              "id": "futures-io 0.3.21",
-              "target": "futures_io"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.5.5"
-      },
-      "license": "MIT"
-    },
-    "smallvec 1.8.0": {
-      "name": "smallvec",
-      "version": "1.8.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/smallvec/1.8.0/download",
-          "sha256": "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "smallvec",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "smallvec",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.8.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "socket2 0.4.4": {
-      "name": "socket2",
-      "version": "0.4.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/socket2/0.4.4/download",
-          "sha256": "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "socket2",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "socket2",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "all"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.4.4"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "string_cache 0.8.3": {
-      "name": "string_cache",
-      "version": "0.8.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/string_cache/0.8.3/download",
-          "sha256": "33994d0838dc2d152d17a62adf608a869b5e846b65b389af7f3dbc1de45c5b26"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "string_cache",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "string_cache",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            },
-            {
-              "id": "new_debug_unreachable 1.0.4",
-              "target": "debug_unreachable"
-            },
-            {
-              "id": "parking_lot 0.11.2",
-              "target": "parking_lot"
-            },
-            {
-              "id": "phf_shared 0.10.0",
-              "target": "phf_shared"
-            },
-            {
-              "id": "precomputed-hash 0.1.1",
-              "target": "precomputed_hash"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.8.3"
-      },
-      "license": "MIT / Apache-2.0"
-    },
-    "syn 1.0.86": {
-      "name": "syn",
-      "version": "1.0.86",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/syn/1.0.86/download",
-          "sha256": "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "syn",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "syn",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "clone-impls",
-          "default",
-          "derive",
-          "extra-traits",
-          "full",
-          "parsing",
-          "printing",
-          "proc-macro",
-          "quote",
-          "visit",
-          "visit-mut"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "build_script_build"
-            },
-            {
-              "id": "unicode-xid 0.2.2",
-              "target": "unicode_xid"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.86"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "tempfile 3.3.0": {
-      "name": "tempfile",
-      "version": "3.3.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tempfile/3.3.0/download",
-          "sha256": "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tempfile",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tempfile",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "fastrand 1.7.0",
-              "target": "fastrand"
-            },
-            {
-              "id": "remove_dir_all 0.5.3",
-              "target": "remove_dir_all"
-            }
-          ],
-          "selects": {
-            "cfg(any(unix, target_os = \"wasi\"))": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(target_os = \"redox\")": [
-              {
-                "id": "redox_syscall 0.2.11",
-                "target": "syscall"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "3.3.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "term 0.7.0": {
-      "name": "term",
-      "version": "0.7.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/term/0.7.0/download",
-          "sha256": "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "term",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "term",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "dirs-next 2.0.0",
-              "target": "dirs_next"
-            }
-          ],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [],
-          "selects": {
-            "cfg(windows)": [
-              {
-                "id": "rustversion 1.0.6",
-                "target": "rustversion"
-              }
-            ]
-          }
-        },
-        "version": "0.7.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "tiny-keccak 2.0.2": {
-      "name": "tiny-keccak",
-      "version": "2.0.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tiny-keccak/2.0.2/download",
-          "sha256": "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tiny_keccak",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tiny_keccak",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "sha3"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "crunchy 0.2.2",
-              "target": "crunchy"
-            },
-            {
-              "id": "tiny-keccak 2.0.2",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "2.0.2"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "CC0-1.0"
-    },
-    "tinyvec 1.5.1": {
-      "name": "tinyvec",
-      "version": "1.5.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tinyvec/1.5.1/download",
-          "sha256": "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tinyvec",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tinyvec",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "tinyvec_macros"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "tinyvec_macros 0.1.0",
-              "target": "tinyvec_macros"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.5.1"
-      },
-      "license": "Zlib OR Apache-2.0 OR MIT"
-    },
-    "tinyvec_macros 0.1.0": {
-      "name": "tinyvec_macros",
-      "version": "0.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tinyvec_macros/0.1.0/download",
-          "sha256": "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tinyvec_macros",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tinyvec_macros",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.1.0"
-      },
-      "license": "MIT OR Apache-2.0 OR Zlib"
-    },
-    "tokio 1.17.0": {
-      "name": "tokio",
-      "version": "1.17.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tokio/1.17.0/download",
-          "sha256": "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tokio",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tokio",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "bytes",
-          "default",
-          "io-util",
-          "libc",
-          "macros",
-          "memchr",
-          "mio",
-          "net",
-          "num_cpus",
-          "once_cell",
-          "rt",
-          "rt-multi-thread",
-          "signal",
-          "signal-hook-registry",
-          "socket2",
-          "sync",
-          "time",
-          "tokio-macros",
-          "winapi"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            },
-            {
-              "id": "mio 0.8.0",
-              "target": "mio"
-            },
-            {
-              "id": "num_cpus 1.13.1",
-              "target": "num_cpus"
-            },
-            {
-              "id": "once_cell 1.10.0",
-              "target": "once_cell"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            },
-            {
-              "id": "socket2 0.4.4",
-              "target": "socket2"
-            }
-          ],
-          "selects": {
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              },
-              {
-                "id": "signal-hook-registry 1.4.0",
-                "target": "signal_hook_registry"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "tokio-macros 1.7.0",
-              "target": "tokio_macros"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "1.17.0"
-      },
-      "license": "MIT"
-    },
-    "tokio-macros 1.7.0": {
-      "name": "tokio-macros",
-      "version": "1.7.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tokio-macros/1.7.0/download",
-          "sha256": "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "tokio_macros",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tokio_macros",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.7.0"
-      },
-      "license": "MIT"
-    },
-    "tokio-native-tls 0.3.0": {
-      "name": "tokio-native-tls",
-      "version": "0.3.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tokio-native-tls/0.3.0/download",
-          "sha256": "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tokio_native_tls",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tokio_native_tls",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "native-tls 0.2.8",
-              "target": "native_tls"
-            },
-            {
-              "id": "tokio 1.17.0",
-              "target": "tokio"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.0"
-      },
-      "license": "MIT"
-    },
-    "tokio-util 0.6.9": {
-      "name": "tokio-util",
-      "version": "0.6.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tokio-util/0.6.9/download",
-          "sha256": "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tokio_util",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tokio_util",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "codec",
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            },
-            {
-              "id": "futures-sink 0.3.21",
-              "target": "futures_sink"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            },
-            {
-              "id": "tokio 1.17.0",
-              "target": "tokio"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.6.9"
-      },
-      "license": "MIT"
-    },
-    "tower-service 0.3.1": {
-      "name": "tower-service",
-      "version": "0.3.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tower-service/0.3.1/download",
-          "sha256": "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tower_service",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tower_service",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.3.1"
-      },
-      "license": "MIT"
-    },
-    "tracing 0.1.31": {
-      "name": "tracing",
-      "version": "0.1.31",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tracing/0.1.31/download",
-          "sha256": "f6c650a8ef0cd2dd93736f033d21cbd1224c5a967aa0c258d00fcf7dafef9b9f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tracing",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tracing",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "attributes",
-          "default",
-          "log",
-          "std",
-          "tracing-attributes"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            },
-            {
-              "id": "tracing-core 0.1.22",
-              "target": "tracing_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "tracing-attributes 0.1.19",
-              "target": "tracing_attributes"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "0.1.31"
-      },
-      "license": "MIT"
-    },
-    "tracing-attributes 0.1.19": {
-      "name": "tracing-attributes",
-      "version": "0.1.19",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tracing-attributes/0.1.19/download",
-          "sha256": "8276d9a4a3a558d7b7ad5303ad50b53d58264641b82914b7ada36bd762e7a716"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "tracing_attributes",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tracing_attributes",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.19"
-      },
-      "license": "MIT"
-    },
-    "tracing-core 0.1.22": {
-      "name": "tracing-core",
-      "version": "0.1.22",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tracing-core/0.1.22/download",
-          "sha256": "03cfcb51380632a72d3111cb8d3447a8d908e577d31beeac006f836383d29a23"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tracing_core",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tracing_core",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "lazy_static",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.22"
-      },
-      "license": "MIT"
-    },
-    "tracing-futures 0.2.5": {
-      "name": "tracing-futures",
-      "version": "0.2.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tracing-futures/0.2.5/download",
-          "sha256": "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tracing_futures",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tracing_futures",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "pin-project",
-          "std",
-          "std-future"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "pin-project 1.0.10",
-              "target": "pin_project"
-            },
-            {
-              "id": "tracing 0.1.31",
-              "target": "tracing"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.5"
-      },
-      "license": "MIT"
-    },
-    "try-lock 0.2.3": {
-      "name": "try-lock",
-      "version": "0.2.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/try-lock/0.2.3/download",
-          "sha256": "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "try_lock",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "try_lock",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.2.3"
-      },
-      "license": "MIT"
-    },
-    "typenum 1.15.0": {
-      "name": "typenum",
-      "version": "1.15.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/typenum/1.15.0/download",
-          "sha256": "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "typenum",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_main",
-            "crate_root": "build/main.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "typenum",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "typenum 1.15.0",
-              "target": "build_script_main"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.15.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "unicode-bidi 0.3.7": {
-      "name": "unicode-bidi",
-      "version": "0.3.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-bidi/0.3.7/download",
-          "sha256": "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_bidi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_bidi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.3.7"
-      },
-      "license": "MIT / Apache-2.0"
-    },
-    "unicode-normalization 0.1.19": {
-      "name": "unicode-normalization",
-      "version": "0.1.19",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-normalization/0.1.19/download",
-          "sha256": "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_normalization",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_normalization",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "tinyvec 1.5.1",
-              "target": "tinyvec"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.19"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "unicode-xid 0.2.2": {
-      "name": "unicode-xid",
-      "version": "0.2.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-xid/0.2.2/download",
-          "sha256": "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_xid",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_xid",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2015",
-        "version": "0.2.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "url 2.2.2": {
-      "name": "url",
-      "version": "2.2.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/url/2.2.2/download",
-          "sha256": "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "url",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "url",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "form_urlencoded 1.0.1",
-              "target": "form_urlencoded"
-            },
-            {
-              "id": "idna 0.2.3",
-              "target": "idna"
-            },
-            {
-              "id": "matches 0.1.9",
-              "target": "matches"
-            },
-            {
-              "id": "percent-encoding 2.1.0",
-              "target": "percent_encoding"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "2.2.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "value-bag 1.0.0-alpha.8": {
-      "name": "value-bag",
-      "version": "1.0.0-alpha.8",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/value-bag/1.0.0-alpha.8/download",
-          "sha256": "79923f7731dc61ebfba3633098bf3ac533bbd35ccd8c57e7088d9a5eebe0263f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "value_bag",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "value_bag",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "value-bag 1.0.0-alpha.8",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "ctor 0.1.21",
-              "target": "ctor"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "1.0.0-alpha.8"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "version_check 0.9.4",
-              "target": "version_check",
-              "alias": "rustc"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "vcpkg 0.2.15": {
-      "name": "vcpkg",
-      "version": "0.2.15",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/vcpkg/0.2.15/download",
-          "sha256": "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "vcpkg",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "vcpkg",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.2.15"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "version_check 0.9.4": {
-      "name": "version_check",
-      "version": "0.9.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/version_check/0.9.4/download",
-          "sha256": "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "version_check",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "version_check",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.9.4"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "waker-fn 1.1.0": {
-      "name": "waker-fn",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/waker-fn/1.1.0/download",
-          "sha256": "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "waker_fn",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "waker_fn",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.1.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "want 0.3.0": {
-      "name": "want",
-      "version": "0.3.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/want/0.3.0/download",
-          "sha256": "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "want",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "want",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "try-lock 0.2.3",
-              "target": "try_lock"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.0"
-      },
-      "license": "MIT"
-    },
-    "wasi 0.10.2+wasi-snapshot-preview1": {
-      "name": "wasi",
-      "version": "0.10.2+wasi-snapshot-preview1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/wasi/0.10.2+wasi-snapshot-preview1/download",
-          "sha256": "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "wasi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "wasi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.10.2+wasi-snapshot-preview1"
-      },
-      "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT"
-    },
-    "wasm-bindgen 0.2.79": {
-      "name": "wasm-bindgen",
-      "version": "0.2.79",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/wasm-bindgen/0.2.79/download",
-          "sha256": "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "wasm_bindgen",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "wasm_bindgen",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "spans",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "wasm-bindgen 0.2.79",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "wasm-bindgen-macro 0.2.79",
-              "target": "wasm_bindgen_macro"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "0.2.79"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "wasm-bindgen-backend 0.2.79": {
-      "name": "wasm-bindgen-backend",
-      "version": "0.2.79",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/wasm-bindgen-backend/0.2.79/download",
-          "sha256": "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "wasm_bindgen_backend",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "wasm_bindgen_backend",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "spans"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bumpalo 3.9.1",
-              "target": "bumpalo"
-            },
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            },
-            {
-              "id": "wasm-bindgen-shared 0.2.79",
-              "target": "wasm_bindgen_shared"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.79"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "wasm-bindgen-futures 0.4.29": {
-      "name": "wasm-bindgen-futures",
-      "version": "0.4.29",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/wasm-bindgen-futures/0.4.29/download",
-          "sha256": "2eb6ec270a31b1d3c7e266b999739109abce8b6c87e4b31fcfcd788b65267395"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "wasm_bindgen_futures",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "wasm_bindgen_futures",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "js-sys 0.3.56",
-              "target": "js_sys"
-            },
-            {
-              "id": "wasm-bindgen 0.2.79",
-              "target": "wasm_bindgen"
-            }
-          ],
-          "selects": {
-            "cfg(target_feature = \"atomics\")": [
-              {
-                "id": "web-sys 0.3.56",
-                "target": "web_sys"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.4.29"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "wasm-bindgen-macro 0.2.79": {
-      "name": "wasm-bindgen-macro",
-      "version": "0.2.79",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/wasm-bindgen-macro/0.2.79/download",
-          "sha256": "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "wasm_bindgen_macro",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "wasm_bindgen_macro",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "spans"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "wasm-bindgen-macro-support 0.2.79",
-              "target": "wasm_bindgen_macro_support"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.79"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "wasm-bindgen-macro-support 0.2.79": {
-      "name": "wasm-bindgen-macro-support",
-      "version": "0.2.79",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/wasm-bindgen-macro-support/0.2.79/download",
-          "sha256": "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "wasm_bindgen_macro_support",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "wasm_bindgen_macro_support",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "spans"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            },
-            {
-              "id": "wasm-bindgen-backend 0.2.79",
-              "target": "wasm_bindgen_backend"
-            },
-            {
-              "id": "wasm-bindgen-shared 0.2.79",
-              "target": "wasm_bindgen_shared"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.79"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "wasm-bindgen-shared 0.2.79": {
-      "name": "wasm-bindgen-shared",
-      "version": "0.2.79",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/wasm-bindgen-shared/0.2.79/download",
-          "sha256": "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "wasm_bindgen_shared",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "wasm_bindgen_shared",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "wasm-bindgen-shared 0.2.79",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.79"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "links": "wasm_bindgen"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "web-sys 0.3.56": {
-      "name": "web-sys",
-      "version": "0.3.56",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/web-sys/0.3.56/download",
-          "sha256": "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "web_sys",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "web_sys",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "Blob",
-          "BlobPropertyBag",
-          "Event",
-          "EventTarget",
-          "File",
-          "FormData",
-          "Headers",
-          "MessageEvent",
-          "Request",
-          "RequestCredentials",
-          "RequestInit",
-          "RequestMode",
-          "Response",
-          "ServiceWorkerGlobalScope",
-          "Window",
-          "Worker",
-          "WorkerGlobalScope"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "js-sys 0.3.56",
-              "target": "js_sys"
-            },
-            {
-              "id": "wasm-bindgen 0.2.79",
-              "target": "wasm_bindgen"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.56"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "wepoll-ffi 0.1.2": {
-      "name": "wepoll-ffi",
-      "version": "0.1.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/wepoll-ffi/0.1.2/download",
-          "sha256": "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "wepoll_ffi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "wepoll_ffi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "null-overlapped-wakeups-patch"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "wepoll-ffi 0.1.2",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.2"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**",
-          "vendor/**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cc 1.0.73",
-              "target": "cc"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "MIT OR Apache-2.0 OR BSD-2-Clause"
-    },
-    "winapi 0.3.9": {
-      "name": "winapi",
-      "version": "0.3.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download",
-          "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "cfg",
-          "consoleapi",
-          "errhandlingapi",
-          "evntrace",
-          "fileapi",
-          "handleapi",
-          "impl-debug",
-          "impl-default",
-          "in6addr",
-          "inaddr",
-          "ioapiset",
-          "knownfolders",
-          "libloaderapi",
-          "lmcons",
-          "minschannel",
-          "minwinbase",
-          "minwindef",
-          "mswsock",
-          "namedpipeapi",
-          "ntdef",
-          "ntsecapi",
-          "ntstatus",
-          "objbase",
-          "processenv",
-          "schannel",
-          "securitybaseapi",
-          "shlobj",
-          "sspi",
-          "std",
-          "synchapi",
-          "sysinfoapi",
-          "timezoneapi",
-          "winbase",
-          "wincon",
-          "wincrypt",
-          "windef",
-          "winerror",
-          "winioctl",
-          "winnt",
-          "winreg",
-          "winsock2",
-          "ws2def",
-          "ws2ipdef",
-          "ws2tcpip"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi 0.3.9",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {
-            "i686-pc-windows-gnu": [
-              {
-                "id": "winapi-i686-pc-windows-gnu 0.4.0",
-                "target": "winapi_i686_pc_windows_gnu"
-              }
-            ],
-            "x86_64-pc-windows-gnu": [
-              {
-                "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
-                "target": "winapi_x86_64_pc_windows_gnu"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.3.9"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "winapi-i686-pc-windows-gnu 0.4.0": {
-      "name": "winapi-i686-pc-windows-gnu",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
-          "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_i686_pc_windows_gnu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_i686_pc_windows_gnu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi-i686-pc-windows-gnu 0.4.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "winapi-x86_64-pc-windows-gnu 0.4.0": {
-      "name": "winapi-x86_64-pc-windows-gnu",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
-          "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_x86_64_pc_windows_gnu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_x86_64_pc_windows_gnu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "winreg 0.7.0": {
-      "name": "winreg",
-      "version": "0.7.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winreg/0.7.0/download",
-          "sha256": "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winreg",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winreg",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi 0.3.9",
-              "target": "winapi"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.7.0"
-      },
-      "license": "MIT"
-    }
-  },
-  "binary_crates": [
-    "cc 1.0.73",
-    "httpmock 0.6.6",
-    "lalrpop 0.19.7"
-  ],
-  "workspace_members": {
-    "direct-cargo-bazel-deps 0.0.1": "",
-    "pkg_a 0.1.0": "multi_package/pkg_a",
-    "pkg_b 0.1.0": "multi_package/sub_pkgs/pkg_b",
-    "pkg_c 0.1.0": "multi_package/sub_pkgs/pkg_c"
-  },
-  "conditions": {
-    "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [],
-    "cfg(all(unix, not(target_os = \"macos\")))": [
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(any(target_os = \"macos\", target_os = \"ios\"))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "i686-apple-darwin",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios"
-    ],
-    "cfg(any(unix, target_os = \"fuchsia\", target_os = \"vxworks\"))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(any(unix, target_os = \"wasi\"))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "wasm32-wasi",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(not(any(target_os = \"windows\", target_os = \"macos\", target_os = \"ios\")))": [
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "wasm32-unknown-unknown",
-      "wasm32-wasi",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(not(target_arch = \"wasm32\"))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-pc-windows-msvc",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-pc-windows-msvc",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(not(target_os = \"unknown\"))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-pc-windows-msvc",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "wasm32-wasi",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-pc-windows-msvc",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(not(windows))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "wasm32-unknown-unknown",
-      "wasm32-wasi",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(target_arch = \"wasm32\")": [
-      "wasm32-unknown-unknown",
-      "wasm32-wasi"
-    ],
-    "cfg(target_env = \"msvc\")": [
-      "i686-pc-windows-msvc",
-      "x86_64-pc-windows-msvc"
-    ],
-    "cfg(target_feature = \"atomics\")": [],
-    "cfg(target_os = \"hermit\")": [],
-    "cfg(target_os = \"redox\")": [],
-    "cfg(target_os = \"wasi\")": [
-      "wasm32-wasi"
-    ],
-    "cfg(target_os = \"windows\")": [
-      "i686-pc-windows-msvc",
-      "x86_64-pc-windows-msvc"
-    ],
-    "cfg(unix)": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(windows)": [
-      "i686-pc-windows-msvc",
-      "x86_64-pc-windows-msvc"
-    ],
-    "i686-pc-windows-gnu": [],
-    "x86_64-pc-windows-gnu": []
-  }
-}
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704"
+
+[[package]]
+name = "ascii-canvas"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6"
+dependencies = [
+ "term",
+]
+
+[[package]]
+name = "assert-json-diff"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965"
+dependencies = [
+ "async-task",
+ "concurrent-queue",
+ "fastrand",
+ "futures-lite",
+ "once_cell",
+ "slab",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5262ed948da60dd8956c6c5aca4d4163593dddb7b32d73267c93dab7b2e98940"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-lock",
+ "blocking",
+ "futures-lite",
+ "num_cpus",
+ "once_cell",
+]
+
+[[package]]
+name = "async-io"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5e18f61464ae81cde0a23e713ae8fd299580c54d697a35820cfd0625b8b0e07"
+dependencies = [
+ "concurrent-queue",
+ "futures-lite",
+ "libc",
+ "log",
+ "once_cell",
+ "parking",
+ "polling",
+ "slab",
+ "socket2",
+ "waker-fn",
+ "winapi",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-object-pool"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aeb901c30ebc2fc4ab46395bbfbdba9542c16559d853645d75190c3056caf3bc"
+dependencies = [
+ "async-std",
+]
+
+[[package]]
+name = "async-process"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf2c06e30a24e8c78a3987d07f0930edf76ef35e027e7bdb063fccafdad1f60c"
+dependencies = [
+ "async-io",
+ "blocking",
+ "cfg-if",
+ "event-listener",
+ "futures-lite",
+ "libc",
+ "once_cell",
+ "signal-hook",
+ "winapi",
+]
+
+[[package]]
+name = "async-std"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+dependencies = [
+ "async-channel",
+ "async-global-executor",
+ "async-io",
+ "async-lock",
+ "async-process",
+ "crossbeam-utils",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite",
+ "gloo-timers",
+ "kv-log-macro",
+ "log",
+ "memchr",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async-task"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9"
+
+[[package]]
+name = "async-trait"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+
+[[package]]
+name = "basic-cookies"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb53b6b315f924c7f113b162e53b3901c05fc9966baf84d201dfcc7432a4bb38"
+dependencies = [
+ "lalrpop",
+ "lalrpop-util",
+ "regex",
+]
+
+[[package]]
+name = "bit-set"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block-buffer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "blocking"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc"
+dependencies = [
+ "async-channel",
+ "async-task",
+ "atomic-waker",
+ "fastrand",
+ "futures-lite",
+ "once_cell",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3"
+
+[[package]]
+name = "bytes"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
+
+[[package]]
+name = "cache-padded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c"
+
+[[package]]
+name = "castaway"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6"
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "concurrent-queue"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3"
+dependencies = [
+ "cache-padded",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "ctor"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "curl"
+version = "0.4.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37d855aeef205b43f65a5001e0997d81f8efca7badad4fad7d897aa7f0d0651f"
+dependencies = [
+ "curl-sys",
+ "libc",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "socket2",
+ "winapi",
+]
+
+[[package]]
+name = "curl-sys"
+version = "0.4.55+curl-7.83.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23734ec77368ec583c2e61dd3f0b0e5c98b93abe6d2a004ca06b91dd7e3e2762"
+dependencies = [
+ "cc",
+ "libc",
+ "libnghttp2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+ "winapi",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "direct-cargo-bazel-deps"
+version = "0.0.1"
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "either"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be"
+
+[[package]]
+name = "ena"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7402b94a93c24e742487327a7cd839dc9d36fec9de9fb25b09f2dae459f36c3"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71"
+
+[[package]]
+name = "fastrand"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+dependencies = [
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
+
+[[package]]
+name = "futures-io"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b"
+
+[[package]]
+name = "futures-lite"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868"
+
+[[package]]
+name = "futures-task"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
+
+[[package]]
+name = "futures-util"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fb7d06c1c8cc2a29bee7ec961009a0b2caa0793ee4900c2ffb348734ba1c8f9"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex-literal"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0"
+
+[[package]]
+name = "http"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "httpmock"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c159c4fc205e6c1a9b325cb7ec135d13b5f47188ce175dabb76ec847f331d9bd"
+dependencies = [
+ "assert-json-diff",
+ "async-object-pool",
+ "async-trait",
+ "base64",
+ "basic-cookies",
+ "crossbeam-utils",
+ "form_urlencoded",
+ "futures-util",
+ "hyper",
+ "isahc",
+ "lazy_static",
+ "levenshtein",
+ "log",
+ "regex",
+ "serde",
+ "serde_json",
+ "serde_regex",
+ "similar",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "hyper"
+version = "0.14.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42dc3c131584288d375f2d07f822b0cb012d8c6fb899a5b9fdb3cb7eb9b6004f"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b"
+
+[[package]]
+name = "isahc"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9"
+dependencies = [
+ "async-channel",
+ "castaway",
+ "crossbeam-utils",
+ "curl",
+ "curl-sys",
+ "encoding_rs",
+ "event-listener",
+ "futures-lite",
+ "http",
+ "log",
+ "mime",
+ "once_cell",
+ "polling",
+ "slab",
+ "sluice",
+ "tracing",
+ "tracing-futures",
+ "url",
+ "waker-fn",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
+
+[[package]]
+name = "js-sys"
+version = "0.3.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "lalrpop"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b30455341b0e18f276fa64540aff54deafb54c589de6aca68659c63dd2d5d823"
+dependencies = [
+ "ascii-canvas",
+ "atty",
+ "bit-set",
+ "diff",
+ "ena",
+ "itertools",
+ "lalrpop-util",
+ "petgraph",
+ "pico-args",
+ "regex",
+ "regex-syntax",
+ "string_cache",
+ "term",
+ "tiny-keccak",
+ "unicode-xid",
+]
+
+[[package]]
+name = "lalrpop-util"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcf796c978e9b4d983414f4caedc9273aa33ee214c5b887bd55fde84c85d2dc4"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "levenshtein"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760"
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "libnghttp2-sys"
+version = "0.1.7+1.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57ed28aba195b38d5ff02b9170cbff627e336a20925e43b4945390401c5dc93f"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+ "value-bag",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "md-5"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15"
+dependencies = [
+ "block-buffer",
+ "digest",
+ "opaque-debug",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "mio"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "num_cpus"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl"
+version = "0.10.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb81a6430ac911acb25fe5ac8f1d2af1b4ea8a4fdfda0f1ee4292af2e2d8eb0e"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "835363342df5fba8354c5b453325b110ffd54044e588c539cf2f20a8014e4cb1"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "parking"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "petgraph"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pico-args"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468"
+
+[[package]]
+name = "pin-project"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78203e83c48cffbe01e4a2d35d566ca4de445d79a85372fc64e378bfc812a260"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "710faf75e1b33345361201d36d04e98ac1ed8909151a017ed384700836104c74"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
+
+[[package]]
+name = "pkg_a"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "httpmock",
+ "reqwest",
+]
+
+[[package]]
+name = "pkg_b"
+version = "0.1.0"
+dependencies = [
+ "openssl",
+]
+
+[[package]]
+name = "pkg_c"
+version = "0.1.0"
+dependencies = [
+ "hex-literal",
+ "md-5",
+]
+
+[[package]]
+name = "polling"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "log",
+ "wepoll-ffi",
+ "winapi",
+]
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92"
+dependencies = [
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "mime",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0a5f7c728f5d284929a1cccb5bc19884422bfe6ef4d6c409da2c41838983fcf"
+
+[[package]]
+name = "ryu"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
+
+[[package]]
+name = "schannel"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
+dependencies = [
+ "lazy_static",
+ "windows-sys",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "security-framework"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.138"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.138"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_regex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8136f1a4ea815d7eac4101cfd0b16dc0cb5e1fe1b8609dfd728058656b7badf"
+dependencies = [
+ "regex",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "similar"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e24979f63a11545f5f2c60141afe249d4f19f84581ea2138065e400941d83d3"
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
+
+[[package]]
+name = "sluice"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5"
+dependencies = [
+ "async-channel",
+ "futures-core",
+ "futures-io",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
+
+[[package]]
+name = "socket2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "string_cache"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot",
+ "phf_shared",
+ "precomputed-hash",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.98"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "libc",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "term"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
+dependencies = [
+ "dirs-next",
+ "rustversion",
+ "winapi",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "tokio"
+version = "1.19.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439"
+dependencies = [
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "once_cell",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "winapi",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160"
+dependencies = [
+ "cfg-if",
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "typenum"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
+
+[[package]]
+name = "url"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "value-bag"
+version = "1.0.0-alpha.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55"
+dependencies = [
+ "ctor",
+ "version_check",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a"
+dependencies = [
+ "bumpalo",
+ "lazy_static",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be"
+
+[[package]]
+name = "web-sys"
+version = "0.3.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "wepoll-ffi"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
diff --git a/third_party/rules_rust/examples/crate_universe/multi_package/cargo-bazel-lock.json b/third_party/rules_rust/examples/crate_universe/multi_package/cargo-bazel-lock.json
new file mode 100644
index 0000000..2f3eb5c
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/multi_package/cargo-bazel-lock.json
@@ -0,0 +1,11318 @@
+{
+  "checksum": "fa8d2ec1c932effeab92d593fcf5e2294469a693cf931fe7166c6bdf4373c713",
+  "crates": {
+    "aho-corasick 0.7.18": {
+      "name": "aho-corasick",
+      "version": "0.7.18",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/aho-corasick/0.7.18/download",
+          "sha256": "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "aho_corasick",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "aho_corasick",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "memchr 2.5.0",
+              "target": "memchr"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.7.18"
+      },
+      "license": "Unlicense/MIT"
+    },
+    "anyhow 1.0.58": {
+      "name": "anyhow",
+      "version": "1.0.58",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/anyhow/1.0.58/download",
+          "sha256": "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "anyhow",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "anyhow",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "anyhow 1.0.58",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.58"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "ascii-canvas 3.0.0": {
+      "name": "ascii-canvas",
+      "version": "3.0.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/ascii-canvas/3.0.0/download",
+          "sha256": "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "ascii_canvas",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "ascii_canvas",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "term 0.7.0",
+              "target": "term"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "3.0.0"
+      },
+      "license": "Apache-2.0/MIT"
+    },
+    "assert-json-diff 2.0.2": {
+      "name": "assert-json-diff",
+      "version": "2.0.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/assert-json-diff/2.0.2/download",
+          "sha256": "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "assert_json_diff",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "assert_json_diff",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "serde 1.0.138",
+              "target": "serde"
+            },
+            {
+              "id": "serde_json 1.0.82",
+              "target": "serde_json"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "2.0.2"
+      },
+      "license": "MIT"
+    },
+    "async-channel 1.6.1": {
+      "name": "async-channel",
+      "version": "1.6.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/async-channel/1.6.1/download",
+          "sha256": "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "async_channel",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "async_channel",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "concurrent-queue 1.2.2",
+              "target": "concurrent_queue"
+            },
+            {
+              "id": "event-listener 2.5.2",
+              "target": "event_listener"
+            },
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.6.1"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "async-executor 1.4.1": {
+      "name": "async-executor",
+      "version": "1.4.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/async-executor/1.4.1/download",
+          "sha256": "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "async_executor",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "async_executor",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "async-task 4.2.0",
+              "target": "async_task"
+            },
+            {
+              "id": "concurrent-queue 1.2.2",
+              "target": "concurrent_queue"
+            },
+            {
+              "id": "fastrand 1.7.0",
+              "target": "fastrand"
+            },
+            {
+              "id": "futures-lite 1.12.0",
+              "target": "futures_lite"
+            },
+            {
+              "id": "once_cell 1.13.0",
+              "target": "once_cell"
+            },
+            {
+              "id": "slab 0.4.6",
+              "target": "slab"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.4.1"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "async-global-executor 2.2.0": {
+      "name": "async-global-executor",
+      "version": "2.2.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/async-global-executor/2.2.0/download",
+          "sha256": "5262ed948da60dd8956c6c5aca4d4163593dddb7b32d73267c93dab7b2e98940"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "async_global_executor",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "async_global_executor",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "async-io",
+          "default"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "async-channel 1.6.1",
+              "target": "async_channel"
+            },
+            {
+              "id": "async-executor 1.4.1",
+              "target": "async_executor"
+            },
+            {
+              "id": "async-io 1.7.0",
+              "target": "async_io"
+            },
+            {
+              "id": "async-lock 2.5.0",
+              "target": "async_lock"
+            },
+            {
+              "id": "blocking 1.2.0",
+              "target": "blocking"
+            },
+            {
+              "id": "futures-lite 1.12.0",
+              "target": "futures_lite"
+            },
+            {
+              "id": "num_cpus 1.13.1",
+              "target": "num_cpus"
+            },
+            {
+              "id": "once_cell 1.13.0",
+              "target": "once_cell"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "2.2.0"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "async-io 1.7.0": {
+      "name": "async-io",
+      "version": "1.7.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/async-io/1.7.0/download",
+          "sha256": "e5e18f61464ae81cde0a23e713ae8fd299580c54d697a35820cfd0625b8b0e07"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "async_io",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "async_io",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "concurrent-queue 1.2.2",
+              "target": "concurrent_queue"
+            },
+            {
+              "id": "futures-lite 1.12.0",
+              "target": "futures_lite"
+            },
+            {
+              "id": "log 0.4.17",
+              "target": "log"
+            },
+            {
+              "id": "once_cell 1.13.0",
+              "target": "once_cell"
+            },
+            {
+              "id": "parking 2.0.0",
+              "target": "parking"
+            },
+            {
+              "id": "polling 2.2.0",
+              "target": "polling"
+            },
+            {
+              "id": "slab 0.4.6",
+              "target": "slab"
+            },
+            {
+              "id": "socket2 0.4.4",
+              "target": "socket2"
+            },
+            {
+              "id": "waker-fn 1.1.0",
+              "target": "waker_fn"
+            }
+          ],
+          "selects": {
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "1.7.0"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "async-lock 2.5.0": {
+      "name": "async-lock",
+      "version": "2.5.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/async-lock/2.5.0/download",
+          "sha256": "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "async_lock",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "async_lock",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "event-listener 2.5.2",
+              "target": "event_listener"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "2.5.0"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "async-object-pool 0.1.4": {
+      "name": "async-object-pool",
+      "version": "0.1.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/async-object-pool/0.1.4/download",
+          "sha256": "aeb901c30ebc2fc4ab46395bbfbdba9542c16559d853645d75190c3056caf3bc"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "async_object_pool",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "async_object_pool",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "async-std 1.12.0",
+              "target": "async_std"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.4"
+      },
+      "license": "MIT"
+    },
+    "async-process 1.4.0": {
+      "name": "async-process",
+      "version": "1.4.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/async-process/1.4.0/download",
+          "sha256": "cf2c06e30a24e8c78a3987d07f0930edf76ef35e027e7bdb063fccafdad1f60c"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "async_process",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "async_process",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "event-listener 2.5.2",
+              "target": "event_listener"
+            },
+            {
+              "id": "futures-lite 1.12.0",
+              "target": "futures_lite"
+            },
+            {
+              "id": "once_cell 1.13.0",
+              "target": "once_cell"
+            }
+          ],
+          "selects": {
+            "cfg(unix)": [
+              {
+                "id": "async-io 1.7.0",
+                "target": "async_io"
+              },
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              },
+              {
+                "id": "signal-hook 0.3.14",
+                "target": "signal_hook"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "blocking 1.2.0",
+                "target": "blocking"
+              },
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "1.4.0"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "async-std 1.12.0": {
+      "name": "async-std",
+      "version": "1.12.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/async-std/1.12.0/download",
+          "sha256": "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "async_std",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "async_std",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "async-channel",
+          "async-global-executor",
+          "async-io",
+          "async-lock",
+          "async-process",
+          "crossbeam-utils",
+          "default",
+          "futures-channel",
+          "futures-core",
+          "futures-io",
+          "futures-lite",
+          "gloo-timers",
+          "kv-log-macro",
+          "log",
+          "memchr",
+          "once_cell",
+          "pin-project-lite",
+          "pin-utils",
+          "slab",
+          "std",
+          "unstable",
+          "wasm-bindgen-futures"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "async-channel 1.6.1",
+              "target": "async_channel"
+            },
+            {
+              "id": "async-lock 2.5.0",
+              "target": "async_lock"
+            },
+            {
+              "id": "crossbeam-utils 0.8.10",
+              "target": "crossbeam_utils"
+            },
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            },
+            {
+              "id": "futures-io 0.3.21",
+              "target": "futures_io"
+            },
+            {
+              "id": "kv-log-macro 1.0.7",
+              "target": "kv_log_macro"
+            },
+            {
+              "id": "log 0.4.17",
+              "target": "log"
+            },
+            {
+              "id": "memchr 2.5.0",
+              "target": "memchr"
+            },
+            {
+              "id": "once_cell 1.13.0",
+              "target": "once_cell"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            },
+            {
+              "id": "pin-utils 0.1.0",
+              "target": "pin_utils"
+            },
+            {
+              "id": "slab 0.4.6",
+              "target": "slab"
+            }
+          ],
+          "selects": {
+            "cfg(not(target_os = \"unknown\"))": [
+              {
+                "id": "async-global-executor 2.2.0",
+                "target": "async_global_executor"
+              },
+              {
+                "id": "async-io 1.7.0",
+                "target": "async_io"
+              },
+              {
+                "id": "async-process 1.4.0",
+                "target": "async_process"
+              },
+              {
+                "id": "futures-lite 1.12.0",
+                "target": "futures_lite"
+              }
+            ],
+            "cfg(target_arch = \"wasm32\")": [
+              {
+                "id": "futures-channel 0.3.21",
+                "target": "futures_channel"
+              },
+              {
+                "id": "gloo-timers 0.2.4",
+                "target": "gloo_timers"
+              },
+              {
+                "id": "wasm-bindgen-futures 0.4.31",
+                "target": "wasm_bindgen_futures"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "1.12.0"
+      },
+      "license": "Apache-2.0/MIT"
+    },
+    "async-task 4.2.0": {
+      "name": "async-task",
+      "version": "4.2.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/async-task/4.2.0/download",
+          "sha256": "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "async_task",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "async_task",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "4.2.0"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "async-trait 0.1.56": {
+      "name": "async-trait",
+      "version": "0.1.56",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/async-trait/0.1.56/download",
+          "sha256": "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "async_trait",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "async_trait",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "async-trait 0.1.56",
+              "target": "build_script_build"
+            },
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.56"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "atomic-waker 1.0.0": {
+      "name": "atomic-waker",
+      "version": "1.0.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/atomic-waker/1.0.0/download",
+          "sha256": "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "atomic_waker",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "atomic_waker",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.0.0"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "atty 0.2.14": {
+      "name": "atty",
+      "version": "0.2.14",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/atty/0.2.14/download",
+          "sha256": "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "atty",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "atty",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [],
+          "selects": {
+            "cfg(target_os = \"hermit\")": [
+              {
+                "id": "hermit-abi 0.1.19",
+                "target": "hermit_abi"
+              }
+            ],
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2015",
+        "version": "0.2.14"
+      },
+      "license": "MIT"
+    },
+    "autocfg 1.1.0": {
+      "name": "autocfg",
+      "version": "1.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/autocfg/1.1.0/download",
+          "sha256": "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "autocfg",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "autocfg",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "1.1.0"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "base64 0.13.0": {
+      "name": "base64",
+      "version": "0.13.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/base64/0.13.0/download",
+          "sha256": "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "base64",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "base64",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "0.13.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "basic-cookies 0.1.4": {
+      "name": "basic-cookies",
+      "version": "0.1.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/basic-cookies/0.1.4/download",
+          "sha256": "cb53b6b315f924c7f113b162e53b3901c05fc9966baf84d201dfcc7432a4bb38"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "basic_cookies",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "basic_cookies",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "basic-cookies 0.1.4",
+              "target": "build_script_build"
+            },
+            {
+              "id": "lalrpop-util 0.19.8",
+              "target": "lalrpop_util"
+            },
+            {
+              "id": "regex 1.6.0",
+              "target": "regex"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.4"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "lalrpop 0.19.8",
+              "target": "lalrpop"
+            }
+          ],
+          "selects": {}
+        }
+      },
+      "license": "MIT"
+    },
+    "bit-set 0.5.2": {
+      "name": "bit-set",
+      "version": "0.5.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/bit-set/0.5.2/download",
+          "sha256": "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "bit_set",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "bit_set",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bit-vec 0.6.3",
+              "target": "bit_vec"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.5.2"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "bit-vec 0.6.3": {
+      "name": "bit-vec",
+      "version": "0.6.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/bit-vec/0.6.3/download",
+          "sha256": "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "bit_vec",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "bit_vec",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.6.3"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "bitflags 1.3.2": {
+      "name": "bitflags",
+      "version": "1.3.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download",
+          "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "bitflags",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "bitflags",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "edition": "2018",
+        "version": "1.3.2"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "block-buffer 0.9.0": {
+      "name": "block-buffer",
+      "version": "0.9.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/block-buffer/0.9.0/download",
+          "sha256": "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "block_buffer",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "block_buffer",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "generic-array 0.14.5",
+              "target": "generic_array"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.9.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "blocking 1.2.0": {
+      "name": "blocking",
+      "version": "1.2.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/blocking/1.2.0/download",
+          "sha256": "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "blocking",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "blocking",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "async-channel 1.6.1",
+              "target": "async_channel"
+            },
+            {
+              "id": "async-task 4.2.0",
+              "target": "async_task"
+            },
+            {
+              "id": "atomic-waker 1.0.0",
+              "target": "atomic_waker"
+            },
+            {
+              "id": "fastrand 1.7.0",
+              "target": "fastrand"
+            },
+            {
+              "id": "futures-lite 1.12.0",
+              "target": "futures_lite"
+            },
+            {
+              "id": "once_cell 1.13.0",
+              "target": "once_cell"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.2.0"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "bumpalo 3.10.0": {
+      "name": "bumpalo",
+      "version": "3.10.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/bumpalo/3.10.0/download",
+          "sha256": "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "bumpalo",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "bumpalo",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "edition": "2018",
+        "version": "3.10.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "bytes 1.1.0": {
+      "name": "bytes",
+      "version": "1.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/bytes/1.1.0/download",
+          "sha256": "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "bytes",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "bytes",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "1.1.0"
+      },
+      "license": "MIT"
+    },
+    "cache-padded 1.2.0": {
+      "name": "cache-padded",
+      "version": "1.2.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/cache-padded/1.2.0/download",
+          "sha256": "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "cache_padded",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "cache_padded",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.2.0"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "castaway 0.1.2": {
+      "name": "castaway",
+      "version": "0.1.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/castaway/0.1.2/download",
+          "sha256": "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "castaway",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "castaway",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.1.2"
+      },
+      "license": "MIT"
+    },
+    "cc 1.0.73": {
+      "name": "cc",
+      "version": "1.0.73",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/cc/1.0.73/download",
+          "sha256": "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "cc",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "Binary": {
+            "crate_name": "gcc-shim",
+            "crate_root": "src/bin/gcc-shim.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "cc",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.0.73"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "cfg-if 1.0.0": {
+      "name": "cfg-if",
+      "version": "1.0.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
+          "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "cfg_if",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "cfg_if",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.0.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "concurrent-queue 1.2.2": {
+      "name": "concurrent-queue",
+      "version": "1.2.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/concurrent-queue/1.2.2/download",
+          "sha256": "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "concurrent_queue",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "concurrent_queue",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cache-padded 1.2.0",
+              "target": "cache_padded"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.2.2"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "core-foundation 0.9.3": {
+      "name": "core-foundation",
+      "version": "0.9.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/core-foundation/0.9.3/download",
+          "sha256": "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "core_foundation",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "core_foundation",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "core-foundation-sys 0.8.3",
+              "target": "core_foundation_sys"
+            },
+            {
+              "id": "libc 0.2.126",
+              "target": "libc"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.9.3"
+      },
+      "license": "MIT / Apache-2.0"
+    },
+    "core-foundation-sys 0.8.3": {
+      "name": "core-foundation-sys",
+      "version": "0.8.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/core-foundation-sys/0.8.3/download",
+          "sha256": "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "core_foundation_sys",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "core_foundation_sys",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "core-foundation-sys 0.8.3",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.8.3"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT / Apache-2.0"
+    },
+    "crossbeam-utils 0.8.10": {
+      "name": "crossbeam-utils",
+      "version": "0.8.10",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/crossbeam-utils/0.8.10/download",
+          "sha256": "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "crossbeam_utils",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "crossbeam_utils",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "once_cell",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "crossbeam-utils 0.8.10",
+              "target": "build_script_build"
+            },
+            {
+              "id": "once_cell 1.13.0",
+              "target": "once_cell"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.8.10"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "crunchy 0.2.2": {
+      "name": "crunchy",
+      "version": "0.2.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/crunchy/0.2.2/download",
+          "sha256": "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "crunchy",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "crunchy",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "limit_128"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "crunchy 0.2.2",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.2.2"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT"
+    },
+    "ctor 0.1.22": {
+      "name": "ctor",
+      "version": "0.1.22",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/ctor/0.1.22/download",
+          "sha256": "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "ctor",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "ctor",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.22"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "curl 0.4.43": {
+      "name": "curl",
+      "version": "0.4.43",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/curl/0.4.43/download",
+          "sha256": "37d855aeef205b43f65a5001e0997d81f8efca7badad4fad7d897aa7f0d0651f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "curl",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "curl",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "http2",
+          "openssl-probe",
+          "openssl-sys",
+          "ssl",
+          "static-curl"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "curl 0.4.43",
+              "target": "build_script_build"
+            },
+            {
+              "id": "curl-sys 0.4.55+curl-7.83.1",
+              "target": "curl_sys"
+            },
+            {
+              "id": "libc 0.2.126",
+              "target": "libc"
+            },
+            {
+              "id": "socket2 0.4.4",
+              "target": "socket2"
+            }
+          ],
+          "selects": {
+            "cfg(all(unix, not(target_os = \"macos\")))": [
+              {
+                "id": "openssl-probe 0.1.5",
+                "target": "openssl_probe"
+              },
+              {
+                "id": "openssl-sys 0.9.74",
+                "target": "openssl_sys"
+              }
+            ],
+            "cfg(target_env = \"msvc\")": [
+              {
+                "id": "schannel 0.1.20",
+                "target": "schannel"
+              },
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.4.43"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "curl-sys 0.4.55+curl-7.83.1",
+              "target": "curl_sys"
+            }
+          ],
+          "selects": {}
+        }
+      },
+      "license": "MIT"
+    },
+    "curl-sys 0.4.55+curl-7.83.1": {
+      "name": "curl-sys",
+      "version": "0.4.55+curl-7.83.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/curl-sys/0.4.55+curl-7.83.1/download",
+          "sha256": "23734ec77368ec583c2e61dd3f0b0e5c98b93abe6d2a004ca06b91dd7e3e2762"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "curl_sys",
+            "crate_root": "lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "curl_sys",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "http2",
+          "libnghttp2-sys",
+          "openssl-sys",
+          "ssl",
+          "static-curl"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "libc 0.2.126",
+              "target": "libc"
+            },
+            {
+              "id": "libnghttp2-sys 0.1.7+1.45.0",
+              "target": "libnghttp2_sys"
+            },
+            {
+              "id": "libz-sys 1.1.8",
+              "target": "libz_sys"
+            }
+          ],
+          "selects": {
+            "cfg(all(unix, not(target_os = \"macos\")))": [
+              {
+                "id": "openssl-sys 0.9.74",
+                "target": "openssl_sys"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "extra_deps": [
+          "@curl",
+          "@libssh2"
+        ],
+        "edition": "2018",
+        "version": "0.4.55+curl-7.83.1"
+      },
+      "license": "MIT"
+    },
+    "diff 0.1.13": {
+      "name": "diff",
+      "version": "0.1.13",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/diff/0.1.13/download",
+          "sha256": "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "diff",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "diff",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.1.13"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "digest 0.9.0": {
+      "name": "digest",
+      "version": "0.9.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/digest/0.9.0/download",
+          "sha256": "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "digest",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "digest",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "generic-array 0.14.5",
+              "target": "generic_array"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.9.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "direct-cargo-bazel-deps 0.0.1": {
+      "name": "direct-cargo-bazel-deps",
+      "version": "0.0.1",
+      "repository": null,
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "direct_cargo_bazel_deps",
+            "crate_root": ".direct_cargo_bazel_deps.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "direct_cargo_bazel_deps",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.0.1"
+      },
+      "license": null
+    },
+    "dirs-next 2.0.0": {
+      "name": "dirs-next",
+      "version": "2.0.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/dirs-next/2.0.0/download",
+          "sha256": "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "dirs_next",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "dirs_next",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "dirs-sys-next 0.1.2",
+              "target": "dirs_sys_next"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "2.0.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "dirs-sys-next 0.1.2": {
+      "name": "dirs-sys-next",
+      "version": "0.1.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/dirs-sys-next/0.1.2/download",
+          "sha256": "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "dirs_sys_next",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "dirs_sys_next",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [],
+          "selects": {
+            "cfg(target_os = \"redox\")": [
+              {
+                "id": "redox_users 0.4.3",
+                "target": "redox_users"
+              }
+            ],
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.1.2"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "either 1.7.0": {
+      "name": "either",
+      "version": "1.7.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/either/1.7.0/download",
+          "sha256": "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "either",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "either",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.7.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "ena 0.14.0": {
+      "name": "ena",
+      "version": "0.14.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/ena/0.14.0/download",
+          "sha256": "d7402b94a93c24e742487327a7cd839dc9d36fec9de9fb25b09f2dae459f36c3"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "ena",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "ena",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "log 0.4.17",
+              "target": "log"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.14.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "encoding_rs 0.8.31": {
+      "name": "encoding_rs",
+      "version": "0.8.31",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/encoding_rs/0.8.31/download",
+          "sha256": "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "encoding_rs",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "encoding_rs",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "default"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "encoding_rs 0.8.31",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.8.31"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "(Apache-2.0 OR MIT) AND BSD-3-Clause"
+    },
+    "event-listener 2.5.2": {
+      "name": "event-listener",
+      "version": "2.5.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/event-listener/2.5.2/download",
+          "sha256": "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "event_listener",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "event_listener",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "2.5.2"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "fastrand 1.7.0": {
+      "name": "fastrand",
+      "version": "1.7.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/fastrand/1.7.0/download",
+          "sha256": "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "fastrand",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "fastrand",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [],
+          "selects": {
+            "cfg(target_arch = \"wasm32\")": [
+              {
+                "id": "instant 0.1.12",
+                "target": "instant"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "1.7.0"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "fixedbitset 0.4.2": {
+      "name": "fixedbitset",
+      "version": "0.4.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/fixedbitset/0.4.2/download",
+          "sha256": "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "fixedbitset",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "fixedbitset",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.4.2"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "fnv 1.0.7": {
+      "name": "fnv",
+      "version": "1.0.7",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/fnv/1.0.7/download",
+          "sha256": "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "fnv",
+            "crate_root": "lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "fnv",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "edition": "2015",
+        "version": "1.0.7"
+      },
+      "license": "Apache-2.0 / MIT"
+    },
+    "foreign-types 0.3.2": {
+      "name": "foreign-types",
+      "version": "0.3.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/foreign-types/0.3.2/download",
+          "sha256": "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "foreign_types",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "foreign_types",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "foreign-types-shared 0.1.1",
+              "target": "foreign_types_shared"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.3.2"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "foreign-types-shared 0.1.1": {
+      "name": "foreign-types-shared",
+      "version": "0.1.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/foreign-types-shared/0.1.1/download",
+          "sha256": "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "foreign_types_shared",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "foreign_types_shared",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.1.1"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "form_urlencoded 1.0.1": {
+      "name": "form_urlencoded",
+      "version": "1.0.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/form_urlencoded/1.0.1/download",
+          "sha256": "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "form_urlencoded",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "form_urlencoded",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "matches 0.1.9",
+              "target": "matches"
+            },
+            {
+              "id": "percent-encoding 2.1.0",
+              "target": "percent_encoding"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.1"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "futures-channel 0.3.21": {
+      "name": "futures-channel",
+      "version": "0.3.21",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/futures-channel/0.3.21/download",
+          "sha256": "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "futures_channel",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "futures_channel",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "futures-channel 0.3.21",
+              "target": "build_script_build"
+            },
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.21"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "futures-core 0.3.21": {
+      "name": "futures-core",
+      "version": "0.3.21",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/futures-core/0.3.21/download",
+          "sha256": "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "futures_core",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "futures_core",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "futures-core 0.3.21",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.21"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "futures-io 0.3.21": {
+      "name": "futures-io",
+      "version": "0.3.21",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/futures-io/0.3.21/download",
+          "sha256": "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "futures_io",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "futures_io",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "0.3.21"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "futures-lite 1.12.0": {
+      "name": "futures-lite",
+      "version": "1.12.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/futures-lite/1.12.0/download",
+          "sha256": "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "futures_lite",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "futures_lite",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "default",
+          "fastrand",
+          "futures-io",
+          "memchr",
+          "parking",
+          "std",
+          "waker-fn"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "fastrand 1.7.0",
+              "target": "fastrand"
+            },
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            },
+            {
+              "id": "futures-io 0.3.21",
+              "target": "futures_io"
+            },
+            {
+              "id": "memchr 2.5.0",
+              "target": "memchr"
+            },
+            {
+              "id": "parking 2.0.0",
+              "target": "parking"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            },
+            {
+              "id": "waker-fn 1.1.0",
+              "target": "waker_fn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.12.0"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "futures-macro 0.3.21": {
+      "name": "futures-macro",
+      "version": "0.3.21",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/futures-macro/0.3.21/download",
+          "sha256": "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "futures_macro",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "futures_macro",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.21"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "futures-sink 0.3.21": {
+      "name": "futures-sink",
+      "version": "0.3.21",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/futures-sink/0.3.21/download",
+          "sha256": "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "futures_sink",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "futures_sink",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "default",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "0.3.21"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "futures-task 0.3.21": {
+      "name": "futures-task",
+      "version": "0.3.21",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/futures-task/0.3.21/download",
+          "sha256": "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "futures_task",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "futures_task",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "futures-task 0.3.21",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.21"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "futures-util 0.3.21": {
+      "name": "futures-util",
+      "version": "0.3.21",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/futures-util/0.3.21/download",
+          "sha256": "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "futures_util",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "futures_util",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "async-await",
+          "async-await-macro",
+          "default",
+          "futures-io",
+          "futures-macro",
+          "io",
+          "memchr",
+          "slab",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            },
+            {
+              "id": "futures-io 0.3.21",
+              "target": "futures_io"
+            },
+            {
+              "id": "futures-task 0.3.21",
+              "target": "futures_task"
+            },
+            {
+              "id": "futures-util 0.3.21",
+              "target": "build_script_build"
+            },
+            {
+              "id": "memchr 2.5.0",
+              "target": "memchr"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            },
+            {
+              "id": "pin-utils 0.1.0",
+              "target": "pin_utils"
+            },
+            {
+              "id": "slab 0.4.6",
+              "target": "slab"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "futures-macro 0.3.21",
+              "target": "futures_macro"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "0.3.21"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "generic-array 0.14.5": {
+      "name": "generic-array",
+      "version": "0.14.5",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/generic-array/0.14.5/download",
+          "sha256": "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "generic_array",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "generic_array",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "generic-array 0.14.5",
+              "target": "build_script_build"
+            },
+            {
+              "id": "typenum 1.15.0",
+              "target": "typenum"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.14.5"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "version_check 0.9.4",
+              "target": "version_check"
+            }
+          ],
+          "selects": {}
+        }
+      },
+      "license": "MIT"
+    },
+    "getrandom 0.2.7": {
+      "name": "getrandom",
+      "version": "0.2.7",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/getrandom/0.2.7/download",
+          "sha256": "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "getrandom",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "getrandom",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            }
+          ],
+          "selects": {
+            "cfg(target_os = \"wasi\")": [
+              {
+                "id": "wasi 0.11.0+wasi-snapshot-preview1",
+                "target": "wasi"
+              }
+            ],
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.2.7"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "gloo-timers 0.2.4": {
+      "name": "gloo-timers",
+      "version": "0.2.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/gloo-timers/0.2.4/download",
+          "sha256": "5fb7d06c1c8cc2a29bee7ec961009a0b2caa0793ee4900c2ffb348734ba1c8f9"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "gloo_timers",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "gloo_timers",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "futures",
+          "futures-channel",
+          "futures-core"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "futures-channel 0.3.21",
+              "target": "futures_channel"
+            },
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            },
+            {
+              "id": "js-sys 0.3.58",
+              "target": "js_sys"
+            },
+            {
+              "id": "wasm-bindgen 0.2.81",
+              "target": "wasm_bindgen"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.2.4"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "h2 0.3.13": {
+      "name": "h2",
+      "version": "0.3.13",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/h2/0.3.13/download",
+          "sha256": "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "h2",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "h2",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "fnv 1.0.7",
+              "target": "fnv"
+            },
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            },
+            {
+              "id": "futures-sink 0.3.21",
+              "target": "futures_sink"
+            },
+            {
+              "id": "futures-util 0.3.21",
+              "target": "futures_util"
+            },
+            {
+              "id": "http 0.2.8",
+              "target": "http"
+            },
+            {
+              "id": "indexmap 1.9.1",
+              "target": "indexmap"
+            },
+            {
+              "id": "slab 0.4.6",
+              "target": "slab"
+            },
+            {
+              "id": "tokio 1.19.2",
+              "target": "tokio"
+            },
+            {
+              "id": "tokio-util 0.7.3",
+              "target": "tokio_util"
+            },
+            {
+              "id": "tracing 0.1.35",
+              "target": "tracing"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.13"
+      },
+      "license": "MIT"
+    },
+    "hashbrown 0.12.1": {
+      "name": "hashbrown",
+      "version": "0.12.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/hashbrown/0.12.1/download",
+          "sha256": "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "hashbrown",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "hashbrown",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "raw"
+        ],
+        "edition": "2021",
+        "version": "0.12.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "hermit-abi 0.1.19": {
+      "name": "hermit-abi",
+      "version": "0.1.19",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download",
+          "sha256": "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "hermit_abi",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "hermit_abi",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "libc 0.2.126",
+              "target": "libc"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.19"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "hex-literal 0.3.4": {
+      "name": "hex-literal",
+      "version": "0.3.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/hex-literal/0.3.4/download",
+          "sha256": "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "hex_literal",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "hex_literal",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.3.4"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "http 0.2.8": {
+      "name": "http",
+      "version": "0.2.8",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/http/0.2.8/download",
+          "sha256": "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "http",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "http",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "fnv 1.0.7",
+              "target": "fnv"
+            },
+            {
+              "id": "itoa 1.0.2",
+              "target": "itoa"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.2.8"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "http-body 0.4.5": {
+      "name": "http-body",
+      "version": "0.4.5",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/http-body/0.4.5/download",
+          "sha256": "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "http_body",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "http_body",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "http 0.2.8",
+              "target": "http"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.4.5"
+      },
+      "license": "MIT"
+    },
+    "httparse 1.7.1": {
+      "name": "httparse",
+      "version": "1.7.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/httparse/1.7.1/download",
+          "sha256": "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "httparse",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "httparse",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "httparse 1.7.1",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "1.7.1"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "httpdate 1.0.2": {
+      "name": "httpdate",
+      "version": "1.0.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/httpdate/1.0.2/download",
+          "sha256": "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "httpdate",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "httpdate",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.0.2"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "httpmock 0.6.6": {
+      "name": "httpmock",
+      "version": "0.6.6",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/httpmock/0.6.6/download",
+          "sha256": "c159c4fc205e6c1a9b325cb7ec135d13b5f47188ce175dabb76ec847f331d9bd"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "httpmock",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "Binary": {
+            "crate_name": "httpmock",
+            "crate_root": "src/main.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "httpmock",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "basic-cookies",
+          "cookies",
+          "default"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "assert-json-diff 2.0.2",
+              "target": "assert_json_diff"
+            },
+            {
+              "id": "async-object-pool 0.1.4",
+              "target": "async_object_pool"
+            },
+            {
+              "id": "base64 0.13.0",
+              "target": "base64"
+            },
+            {
+              "id": "basic-cookies 0.1.4",
+              "target": "basic_cookies"
+            },
+            {
+              "id": "crossbeam-utils 0.8.10",
+              "target": "crossbeam_utils"
+            },
+            {
+              "id": "form_urlencoded 1.0.1",
+              "target": "form_urlencoded"
+            },
+            {
+              "id": "futures-util 0.3.21",
+              "target": "futures_util"
+            },
+            {
+              "id": "hyper 0.14.19",
+              "target": "hyper"
+            },
+            {
+              "id": "isahc 1.7.2",
+              "target": "isahc"
+            },
+            {
+              "id": "lazy_static 1.4.0",
+              "target": "lazy_static"
+            },
+            {
+              "id": "levenshtein 1.0.5",
+              "target": "levenshtein"
+            },
+            {
+              "id": "log 0.4.17",
+              "target": "log"
+            },
+            {
+              "id": "regex 1.6.0",
+              "target": "regex"
+            },
+            {
+              "id": "serde 1.0.138",
+              "target": "serde"
+            },
+            {
+              "id": "serde_json 1.0.82",
+              "target": "serde_json"
+            },
+            {
+              "id": "serde_regex 1.1.0",
+              "target": "serde_regex"
+            },
+            {
+              "id": "similar 2.1.0",
+              "target": "similar"
+            },
+            {
+              "id": "tokio 1.19.2",
+              "target": "tokio"
+            },
+            {
+              "id": "url 2.2.2",
+              "target": "url"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "async-trait 0.1.56",
+              "target": "async_trait"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "0.6.6"
+      },
+      "license": "MIT"
+    },
+    "hyper 0.14.19": {
+      "name": "hyper",
+      "version": "0.14.19",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/hyper/0.14.19/download",
+          "sha256": "42dc3c131584288d375f2d07f822b0cb012d8c6fb899a5b9fdb3cb7eb9b6004f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "hyper",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "hyper",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "client",
+          "default",
+          "h2",
+          "http1",
+          "http2",
+          "runtime",
+          "server",
+          "socket2",
+          "tcp"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "futures-channel 0.3.21",
+              "target": "futures_channel"
+            },
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            },
+            {
+              "id": "futures-util 0.3.21",
+              "target": "futures_util"
+            },
+            {
+              "id": "h2 0.3.13",
+              "target": "h2"
+            },
+            {
+              "id": "http 0.2.8",
+              "target": "http"
+            },
+            {
+              "id": "http-body 0.4.5",
+              "target": "http_body"
+            },
+            {
+              "id": "httparse 1.7.1",
+              "target": "httparse"
+            },
+            {
+              "id": "httpdate 1.0.2",
+              "target": "httpdate"
+            },
+            {
+              "id": "itoa 1.0.2",
+              "target": "itoa"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            },
+            {
+              "id": "socket2 0.4.4",
+              "target": "socket2"
+            },
+            {
+              "id": "tokio 1.19.2",
+              "target": "tokio"
+            },
+            {
+              "id": "tower-service 0.3.2",
+              "target": "tower_service"
+            },
+            {
+              "id": "tracing 0.1.35",
+              "target": "tracing"
+            },
+            {
+              "id": "want 0.3.0",
+              "target": "want"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.14.19"
+      },
+      "license": "MIT"
+    },
+    "hyper-tls 0.5.0": {
+      "name": "hyper-tls",
+      "version": "0.5.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/hyper-tls/0.5.0/download",
+          "sha256": "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "hyper_tls",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "hyper_tls",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "hyper 0.14.19",
+              "target": "hyper"
+            },
+            {
+              "id": "native-tls 0.2.10",
+              "target": "native_tls"
+            },
+            {
+              "id": "tokio 1.19.2",
+              "target": "tokio"
+            },
+            {
+              "id": "tokio-native-tls 0.3.0",
+              "target": "tokio_native_tls"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.5.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "idna 0.2.3": {
+      "name": "idna",
+      "version": "0.2.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/idna/0.2.3/download",
+          "sha256": "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "idna",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "idna",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "matches 0.1.9",
+              "target": "matches"
+            },
+            {
+              "id": "unicode-bidi 0.3.8",
+              "target": "unicode_bidi"
+            },
+            {
+              "id": "unicode-normalization 0.1.21",
+              "target": "unicode_normalization"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.2.3"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "indexmap 1.9.1": {
+      "name": "indexmap",
+      "version": "1.9.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/indexmap/1.9.1/download",
+          "sha256": "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "indexmap",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "indexmap",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "hashbrown 0.12.1",
+              "target": "hashbrown"
+            },
+            {
+              "id": "indexmap 1.9.1",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2021",
+        "version": "1.9.1"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "autocfg 1.1.0",
+              "target": "autocfg"
+            }
+          ],
+          "selects": {}
+        }
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "instant 0.1.12": {
+      "name": "instant",
+      "version": "0.1.12",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/instant/0.1.12/download",
+          "sha256": "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "instant",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "instant",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.12"
+      },
+      "license": "BSD-3-Clause"
+    },
+    "ipnet 2.5.0": {
+      "name": "ipnet",
+      "version": "2.5.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/ipnet/2.5.0/download",
+          "sha256": "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "ipnet",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "ipnet",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "edition": "2018",
+        "version": "2.5.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "isahc 1.7.2": {
+      "name": "isahc",
+      "version": "1.7.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/isahc/1.7.2/download",
+          "sha256": "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "isahc",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "isahc",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "encoding_rs",
+          "http2",
+          "mime",
+          "static-curl",
+          "text-decoding"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "async-channel 1.6.1",
+              "target": "async_channel"
+            },
+            {
+              "id": "castaway 0.1.2",
+              "target": "castaway"
+            },
+            {
+              "id": "crossbeam-utils 0.8.10",
+              "target": "crossbeam_utils"
+            },
+            {
+              "id": "curl 0.4.43",
+              "target": "curl"
+            },
+            {
+              "id": "curl-sys 0.4.55+curl-7.83.1",
+              "target": "curl_sys"
+            },
+            {
+              "id": "encoding_rs 0.8.31",
+              "target": "encoding_rs"
+            },
+            {
+              "id": "event-listener 2.5.2",
+              "target": "event_listener"
+            },
+            {
+              "id": "futures-lite 1.12.0",
+              "target": "futures_lite"
+            },
+            {
+              "id": "http 0.2.8",
+              "target": "http"
+            },
+            {
+              "id": "isahc 1.7.2",
+              "target": "build_script_build"
+            },
+            {
+              "id": "log 0.4.17",
+              "target": "log"
+            },
+            {
+              "id": "mime 0.3.16",
+              "target": "mime"
+            },
+            {
+              "id": "once_cell 1.13.0",
+              "target": "once_cell"
+            },
+            {
+              "id": "polling 2.2.0",
+              "target": "polling"
+            },
+            {
+              "id": "slab 0.4.6",
+              "target": "slab"
+            },
+            {
+              "id": "sluice 0.5.5",
+              "target": "sluice"
+            },
+            {
+              "id": "tracing 0.1.35",
+              "target": "tracing"
+            },
+            {
+              "id": "tracing-futures 0.2.5",
+              "target": "tracing_futures"
+            },
+            {
+              "id": "url 2.2.2",
+              "target": "url"
+            },
+            {
+              "id": "waker-fn 1.1.0",
+              "target": "waker_fn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.7.2"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT"
+    },
+    "itertools 0.10.3": {
+      "name": "itertools",
+      "version": "0.10.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/itertools/0.10.3/download",
+          "sha256": "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "itertools",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "itertools",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "use_alloc",
+          "use_std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "either 1.7.0",
+              "target": "either"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.10.3"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "itoa 1.0.2": {
+      "name": "itoa",
+      "version": "1.0.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/itoa/1.0.2/download",
+          "sha256": "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "itoa",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "itoa",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.0.2"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "js-sys 0.3.58": {
+      "name": "js-sys",
+      "version": "0.3.58",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/js-sys/0.3.58/download",
+          "sha256": "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "js_sys",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "js_sys",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "wasm-bindgen 0.2.81",
+              "target": "wasm_bindgen"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.58"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "kv-log-macro 1.0.7": {
+      "name": "kv-log-macro",
+      "version": "1.0.7",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/kv-log-macro/1.0.7/download",
+          "sha256": "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "kv_log_macro",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "kv_log_macro",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "log 0.4.17",
+              "target": "log"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.7"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "lalrpop 0.19.8": {
+      "name": "lalrpop",
+      "version": "0.19.8",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/lalrpop/0.19.8/download",
+          "sha256": "b30455341b0e18f276fa64540aff54deafb54c589de6aca68659c63dd2d5d823"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "lalrpop",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "Binary": {
+            "crate_name": "lalrpop",
+            "crate_root": "src/main.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "lalrpop",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "lexer",
+          "pico-args"
+        ],
+        "data_glob": [
+          "**/*.lalrpop"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "ascii-canvas 3.0.0",
+              "target": "ascii_canvas"
+            },
+            {
+              "id": "atty 0.2.14",
+              "target": "atty"
+            },
+            {
+              "id": "bit-set 0.5.2",
+              "target": "bit_set"
+            },
+            {
+              "id": "diff 0.1.13",
+              "target": "diff"
+            },
+            {
+              "id": "ena 0.14.0",
+              "target": "ena"
+            },
+            {
+              "id": "itertools 0.10.3",
+              "target": "itertools"
+            },
+            {
+              "id": "lalrpop-util 0.19.8",
+              "target": "lalrpop_util"
+            },
+            {
+              "id": "petgraph 0.6.2",
+              "target": "petgraph"
+            },
+            {
+              "id": "pico-args 0.4.2",
+              "target": "pico_args"
+            },
+            {
+              "id": "regex 1.6.0",
+              "target": "regex"
+            },
+            {
+              "id": "regex-syntax 0.6.27",
+              "target": "regex_syntax"
+            },
+            {
+              "id": "string_cache 0.8.4",
+              "target": "string_cache"
+            },
+            {
+              "id": "term 0.7.0",
+              "target": "term"
+            },
+            {
+              "id": "tiny-keccak 2.0.2",
+              "target": "tiny_keccak"
+            },
+            {
+              "id": "unicode-xid 0.2.3",
+              "target": "unicode_xid"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.19.8"
+      },
+      "license": "Apache-2.0/MIT"
+    },
+    "lalrpop-util 0.19.8": {
+      "name": "lalrpop-util",
+      "version": "0.19.8",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/lalrpop-util/0.19.8/download",
+          "sha256": "bcf796c978e9b4d983414f4caedc9273aa33ee214c5b887bd55fde84c85d2dc4"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "lalrpop_util",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "lalrpop_util",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "lexer",
+          "regex",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "regex 1.6.0",
+              "target": "regex"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.19.8"
+      },
+      "license": "Apache-2.0/MIT"
+    },
+    "lazy_static 1.4.0": {
+      "name": "lazy_static",
+      "version": "1.4.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/lazy_static/1.4.0/download",
+          "sha256": "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "lazy_static",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "lazy_static",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "1.4.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "levenshtein 1.0.5": {
+      "name": "levenshtein",
+      "version": "1.0.5",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/levenshtein/1.0.5/download",
+          "sha256": "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "levenshtein",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "levenshtein",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "1.0.5"
+      },
+      "license": "MIT"
+    },
+    "libc 0.2.126": {
+      "name": "libc",
+      "version": "0.2.126",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/libc/0.2.126/download",
+          "sha256": "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "libc",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "libc",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "libc 0.2.126",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.2.126"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "libnghttp2-sys 0.1.7+1.45.0": {
+      "name": "libnghttp2-sys",
+      "version": "0.1.7+1.45.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/libnghttp2-sys/0.1.7+1.45.0/download",
+          "sha256": "57ed28aba195b38d5ff02b9170cbff627e336a20925e43b4945390401c5dc93f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "libnghttp2_sys",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "libnghttp2_sys",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "data_glob": [
+          "nghttp2/**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "libc 0.2.126",
+              "target": "libc"
+            },
+            {
+              "id": "libnghttp2-sys 0.1.7+1.45.0",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.1.7+1.45.0"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**",
+          "nghttp2/**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cc 1.0.73",
+              "target": "cc"
+            }
+          ],
+          "selects": {}
+        },
+        "links": "nghttp2"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "libz-sys 1.1.8": {
+      "name": "libz-sys",
+      "version": "1.1.8",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/libz-sys/1.1.8/download",
+          "sha256": "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "libz_sys",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "libz_sys",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "libc"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "libc 0.2.126",
+              "target": "libc"
+            },
+            {
+              "id": "libz-sys 1.1.8",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.1.8"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cc 1.0.73",
+              "target": "cc"
+            },
+            {
+              "id": "pkg-config 0.3.25",
+              "target": "pkg_config"
+            }
+          ],
+          "selects": {
+            "cfg(target_env = \"msvc\")": [
+              {
+                "id": "vcpkg 0.2.15",
+                "target": "vcpkg"
+              }
+            ]
+          }
+        },
+        "links": "z"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "lock_api 0.4.7": {
+      "name": "lock_api",
+      "version": "0.4.7",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/lock_api/0.4.7/download",
+          "sha256": "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "lock_api",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "lock_api",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "lock_api 0.4.7",
+              "target": "build_script_build"
+            },
+            {
+              "id": "scopeguard 1.1.0",
+              "target": "scopeguard"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.4.7"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "autocfg 1.1.0",
+              "target": "autocfg"
+            }
+          ],
+          "selects": {}
+        }
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "log 0.4.17": {
+      "name": "log",
+      "version": "0.4.17",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/log/0.4.17/download",
+          "sha256": "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "log",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "log",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "kv_unstable",
+          "value-bag"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "log 0.4.17",
+              "target": "build_script_build"
+            },
+            {
+              "id": "value-bag 1.0.0-alpha.9",
+              "target": "value_bag"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.4.17"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "matches 0.1.9": {
+      "name": "matches",
+      "version": "0.1.9",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/matches/0.1.9/download",
+          "sha256": "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "matches",
+            "crate_root": "lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "matches",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.1.9"
+      },
+      "license": "MIT"
+    },
+    "md-5 0.9.1": {
+      "name": "md-5",
+      "version": "0.9.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/md-5/0.9.1/download",
+          "sha256": "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "md5",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "md5",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "block-buffer 0.9.0",
+              "target": "block_buffer"
+            },
+            {
+              "id": "digest 0.9.0",
+              "target": "digest"
+            },
+            {
+              "id": "opaque-debug 0.3.0",
+              "target": "opaque_debug"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.9.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "memchr 2.5.0": {
+      "name": "memchr",
+      "version": "2.5.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/memchr/2.5.0/download",
+          "sha256": "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "memchr",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "memchr",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "memchr 2.5.0",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "2.5.0"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "Unlicense/MIT"
+    },
+    "mime 0.3.16": {
+      "name": "mime",
+      "version": "0.3.16",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/mime/0.3.16/download",
+          "sha256": "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "mime",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "mime",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.3.16"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "mio 0.8.4": {
+      "name": "mio",
+      "version": "0.8.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/mio/0.8.4/download",
+          "sha256": "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "mio",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "mio",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "net",
+          "os-ext",
+          "os-poll"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "log 0.4.17",
+              "target": "log"
+            }
+          ],
+          "selects": {
+            "cfg(target_os = \"wasi\")": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              },
+              {
+                "id": "wasi 0.11.0+wasi-snapshot-preview1",
+                "target": "wasi"
+              }
+            ],
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "windows-sys 0.36.1",
+                "target": "windows_sys"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.8.4"
+      },
+      "license": "MIT"
+    },
+    "native-tls 0.2.10": {
+      "name": "native-tls",
+      "version": "0.2.10",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/native-tls/0.2.10/download",
+          "sha256": "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "native_tls",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "native_tls",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "native-tls 0.2.10",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {
+            "cfg(any(target_os = \"macos\", target_os = \"ios\"))": [
+              {
+                "id": "lazy_static 1.4.0",
+                "target": "lazy_static"
+              },
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              },
+              {
+                "id": "security-framework 2.6.1",
+                "target": "security_framework"
+              },
+              {
+                "id": "security-framework-sys 2.6.1",
+                "target": "security_framework_sys"
+              },
+              {
+                "id": "tempfile 3.3.0",
+                "target": "tempfile"
+              }
+            ],
+            "cfg(not(any(target_os = \"windows\", target_os = \"macos\", target_os = \"ios\")))": [
+              {
+                "id": "log 0.4.17",
+                "target": "log"
+              },
+              {
+                "id": "openssl 0.10.40",
+                "target": "openssl"
+              },
+              {
+                "id": "openssl-probe 0.1.5",
+                "target": "openssl_probe"
+              },
+              {
+                "id": "openssl-sys 0.9.74",
+                "target": "openssl_sys"
+              }
+            ],
+            "cfg(target_os = \"windows\")": [
+              {
+                "id": "schannel 0.1.20",
+                "target": "schannel"
+              }
+            ]
+          }
+        },
+        "edition": "2015",
+        "version": "0.2.10"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "new_debug_unreachable 1.0.4": {
+      "name": "new_debug_unreachable",
+      "version": "1.0.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/new_debug_unreachable/1.0.4/download",
+          "sha256": "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "debug_unreachable",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "debug_unreachable",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.0.4"
+      },
+      "license": "MIT"
+    },
+    "num_cpus 1.13.1": {
+      "name": "num_cpus",
+      "version": "1.13.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/num_cpus/1.13.1/download",
+          "sha256": "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "num_cpus",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "num_cpus",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [],
+          "selects": {
+            "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [
+              {
+                "id": "hermit-abi 0.1.19",
+                "target": "hermit_abi"
+              }
+            ],
+            "cfg(not(windows))": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ]
+          }
+        },
+        "edition": "2015",
+        "version": "1.13.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "once_cell 1.13.0": {
+      "name": "once_cell",
+      "version": "1.13.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/once_cell/1.13.0/download",
+          "sha256": "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "once_cell",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "once_cell",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "default",
+          "race",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "1.13.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "opaque-debug 0.3.0": {
+      "name": "opaque-debug",
+      "version": "0.3.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/opaque-debug/0.3.0/download",
+          "sha256": "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "opaque_debug",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "opaque_debug",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.3.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "openssl 0.10.40": {
+      "name": "openssl",
+      "version": "0.10.40",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/openssl/0.10.40/download",
+          "sha256": "fb81a6430ac911acb25fe5ac8f1d2af1b4ea8a4fdfda0f1ee4292af2e2d8eb0e"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "openssl",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "openssl",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bitflags 1.3.2",
+              "target": "bitflags"
+            },
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "foreign-types 0.3.2",
+              "target": "foreign_types"
+            },
+            {
+              "id": "libc 0.2.126",
+              "target": "libc"
+            },
+            {
+              "id": "once_cell 1.13.0",
+              "target": "once_cell"
+            },
+            {
+              "id": "openssl 0.10.40",
+              "target": "build_script_build"
+            },
+            {
+              "id": "openssl-sys 0.9.74",
+              "target": "openssl_sys",
+              "alias": "ffi"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "openssl-macros 0.1.0",
+              "target": "openssl_macros"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "0.10.40"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "openssl-sys 0.9.74",
+              "target": "openssl_sys",
+              "alias": "ffi"
+            }
+          ],
+          "selects": {}
+        }
+      },
+      "license": "Apache-2.0"
+    },
+    "openssl-macros 0.1.0": {
+      "name": "openssl-macros",
+      "version": "0.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/openssl-macros/0.1.0/download",
+          "sha256": "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "openssl_macros",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "openssl_macros",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "openssl-probe 0.1.5": {
+      "name": "openssl-probe",
+      "version": "0.1.5",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/openssl-probe/0.1.5/download",
+          "sha256": "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "openssl_probe",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "openssl_probe",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.1.5"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "openssl-sys 0.9.74": {
+      "name": "openssl-sys",
+      "version": "0.9.74",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/openssl-sys/0.9.74/download",
+          "sha256": "835363342df5fba8354c5b453325b110ffd54044e588c539cf2f20a8014e4cb1"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "openssl_sys",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_main",
+            "crate_root": "build/main.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "openssl_sys",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "data": {
+          "common": [
+            "@openssl"
+          ],
+          "selects": {}
+        },
+        "deps": {
+          "common": [
+            {
+              "id": "libc 0.2.126",
+              "target": "libc"
+            },
+            {
+              "id": "openssl-sys 0.9.74",
+              "target": "build_script_main"
+            }
+          ],
+          "selects": {}
+        },
+        "extra_deps": [
+          "@openssl"
+        ],
+        "edition": "2015",
+        "version": "0.9.74"
+      },
+      "build_script_attrs": {
+        "data": {
+          "common": [
+            "@openssl//:gen_dir",
+            "@openssl//:openssl"
+          ],
+          "selects": {}
+        },
+        "data_glob": [
+          "**",
+          "build/**/*.c"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "autocfg 1.1.0",
+              "target": "autocfg"
+            },
+            {
+              "id": "cc 1.0.73",
+              "target": "cc"
+            },
+            {
+              "id": "pkg-config 0.3.25",
+              "target": "pkg_config"
+            }
+          ],
+          "selects": {
+            "cfg(target_env = \"msvc\")": [
+              {
+                "id": "vcpkg 0.2.15",
+                "target": "vcpkg"
+              }
+            ]
+          }
+        },
+        "build_script_env": {
+          "common": {
+            "OPENSSL_DIR": "$(execpath @openssl//:gen_dir)",
+            "OPENSSL_STATIC": "1"
+          },
+          "selects": {}
+        },
+        "links": "openssl"
+      },
+      "license": "MIT"
+    },
+    "parking 2.0.0": {
+      "name": "parking",
+      "version": "2.0.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/parking/2.0.0/download",
+          "sha256": "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "parking",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "parking",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "2.0.0"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "parking_lot 0.12.1": {
+      "name": "parking_lot",
+      "version": "0.12.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/parking_lot/0.12.1/download",
+          "sha256": "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "parking_lot",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "parking_lot",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "lock_api 0.4.7",
+              "target": "lock_api"
+            },
+            {
+              "id": "parking_lot_core 0.9.3",
+              "target": "parking_lot_core"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.12.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "parking_lot_core 0.9.3": {
+      "name": "parking_lot_core",
+      "version": "0.9.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/parking_lot_core/0.9.3/download",
+          "sha256": "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "parking_lot_core",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "parking_lot_core",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "parking_lot_core 0.9.3",
+              "target": "build_script_build"
+            },
+            {
+              "id": "smallvec 1.9.0",
+              "target": "smallvec"
+            }
+          ],
+          "selects": {
+            "cfg(target_os = \"redox\")": [
+              {
+                "id": "redox_syscall 0.2.13",
+                "target": "syscall"
+              }
+            ],
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "windows-sys 0.36.1",
+                "target": "windows_sys"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.9.3"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "percent-encoding 2.1.0": {
+      "name": "percent-encoding",
+      "version": "2.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/percent-encoding/2.1.0/download",
+          "sha256": "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "percent_encoding",
+            "crate_root": "lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "percent_encoding",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "2.1.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "petgraph 0.6.2": {
+      "name": "petgraph",
+      "version": "0.6.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/petgraph/0.6.2/download",
+          "sha256": "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "petgraph",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "petgraph",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "fixedbitset 0.4.2",
+              "target": "fixedbitset"
+            },
+            {
+              "id": "indexmap 1.9.1",
+              "target": "indexmap"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.6.2"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "phf_shared 0.10.0": {
+      "name": "phf_shared",
+      "version": "0.10.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/phf_shared/0.10.0/download",
+          "sha256": "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "phf_shared",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "phf_shared",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "siphasher 0.3.10",
+              "target": "siphasher"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.10.0"
+      },
+      "license": "MIT"
+    },
+    "pico-args 0.4.2": {
+      "name": "pico-args",
+      "version": "0.4.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/pico-args/0.4.2/download",
+          "sha256": "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "pico_args",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "pico_args",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.4.2"
+      },
+      "license": "MIT"
+    },
+    "pin-project 1.0.11": {
+      "name": "pin-project",
+      "version": "1.0.11",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/pin-project/1.0.11/download",
+          "sha256": "78203e83c48cffbe01e4a2d35d566ca4de445d79a85372fc64e378bfc812a260"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "pin_project",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "pin_project",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "pin-project-internal 1.0.11",
+              "target": "pin_project_internal"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "1.0.11"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "pin-project-internal 1.0.11": {
+      "name": "pin-project-internal",
+      "version": "1.0.11",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/pin-project-internal/1.0.11/download",
+          "sha256": "710faf75e1b33345361201d36d04e98ac1ed8909151a017ed384700836104c74"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "pin_project_internal",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "pin_project_internal",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.11"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "pin-project-lite 0.2.9": {
+      "name": "pin-project-lite",
+      "version": "0.2.9",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/pin-project-lite/0.2.9/download",
+          "sha256": "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "pin_project_lite",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "pin_project_lite",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.2.9"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "pin-utils 0.1.0": {
+      "name": "pin-utils",
+      "version": "0.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/pin-utils/0.1.0/download",
+          "sha256": "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "pin_utils",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "pin_utils",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.1.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "pkg-config 0.3.25": {
+      "name": "pkg-config",
+      "version": "0.3.25",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/pkg-config/0.3.25/download",
+          "sha256": "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "pkg_config",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "pkg_config",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.3.25"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "pkg_a 0.1.0": {
+      "name": "pkg_a",
+      "version": "0.1.0",
+      "repository": null,
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "pkg_a",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "pkg_a",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "anyhow 1.0.58",
+              "target": "anyhow"
+            },
+            {
+              "id": "reqwest 0.11.11",
+              "target": "reqwest"
+            }
+          ],
+          "selects": {}
+        },
+        "deps_dev": {
+          "common": [
+            {
+              "id": "httpmock 0.6.6",
+              "target": "httpmock"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.0"
+      },
+      "license": null
+    },
+    "pkg_b 0.1.0": {
+      "name": "pkg_b",
+      "version": "0.1.0",
+      "repository": null,
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "pkg_b",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "pkg_b",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "openssl 0.10.40",
+              "target": "openssl"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.0"
+      },
+      "license": null
+    },
+    "pkg_c 0.1.0": {
+      "name": "pkg_c",
+      "version": "0.1.0",
+      "repository": null,
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "pkg_c",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "pkg_c",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "md-5 0.9.1",
+              "target": "md5"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "proc_macro_deps_dev": {
+          "common": [
+            {
+              "id": "hex-literal 0.3.4",
+              "target": "hex_literal"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "0.1.0"
+      },
+      "license": null
+    },
+    "polling 2.2.0": {
+      "name": "polling",
+      "version": "2.2.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/polling/2.2.0/download",
+          "sha256": "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "polling",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "polling",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "log 0.4.17",
+              "target": "log"
+            }
+          ],
+          "selects": {
+            "cfg(any(unix, target_os = \"fuchsia\", target_os = \"vxworks\"))": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "wepoll-ffi 0.1.2",
+                "target": "wepoll_ffi"
+              },
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "2.2.0"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "precomputed-hash 0.1.1": {
+      "name": "precomputed-hash",
+      "version": "0.1.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/precomputed-hash/0.1.1/download",
+          "sha256": "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "precomputed_hash",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "precomputed_hash",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.1.1"
+      },
+      "license": "MIT"
+    },
+    "proc-macro2 1.0.40": {
+      "name": "proc-macro2",
+      "version": "1.0.40",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/proc-macro2/1.0.40/download",
+          "sha256": "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "proc_macro2",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "proc_macro2",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "proc-macro"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "build_script_build"
+            },
+            {
+              "id": "unicode-ident 1.0.1",
+              "target": "unicode_ident"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.40"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "quote 1.0.20": {
+      "name": "quote",
+      "version": "1.0.20",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/quote/1.0.20/download",
+          "sha256": "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "quote",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "quote",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "proc-macro"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.20"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "redox_syscall 0.2.13": {
+      "name": "redox_syscall",
+      "version": "0.2.13",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/redox_syscall/0.2.13/download",
+          "sha256": "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "syscall",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "syscall",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bitflags 1.3.2",
+              "target": "bitflags"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.2.13"
+      },
+      "license": "MIT"
+    },
+    "redox_users 0.4.3": {
+      "name": "redox_users",
+      "version": "0.4.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/redox_users/0.4.3/download",
+          "sha256": "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "redox_users",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "redox_users",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "getrandom 0.2.7",
+              "target": "getrandom"
+            },
+            {
+              "id": "redox_syscall 0.2.13",
+              "target": "syscall"
+            },
+            {
+              "id": "thiserror 1.0.31",
+              "target": "thiserror"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.4.3"
+      },
+      "license": "MIT"
+    },
+    "regex 1.6.0": {
+      "name": "regex",
+      "version": "1.6.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/regex/1.6.0/download",
+          "sha256": "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "regex",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "regex",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "aho-corasick",
+          "default",
+          "memchr",
+          "perf",
+          "perf-cache",
+          "perf-dfa",
+          "perf-inline",
+          "perf-literal",
+          "std",
+          "unicode",
+          "unicode-age",
+          "unicode-bool",
+          "unicode-case",
+          "unicode-gencat",
+          "unicode-perl",
+          "unicode-script",
+          "unicode-segment"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "aho-corasick 0.7.18",
+              "target": "aho_corasick"
+            },
+            {
+              "id": "memchr 2.5.0",
+              "target": "memchr"
+            },
+            {
+              "id": "regex-syntax 0.6.27",
+              "target": "regex_syntax"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.6.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "regex-syntax 0.6.27": {
+      "name": "regex-syntax",
+      "version": "0.6.27",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/regex-syntax/0.6.27/download",
+          "sha256": "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "regex_syntax",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "regex_syntax",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "unicode",
+          "unicode-age",
+          "unicode-bool",
+          "unicode-case",
+          "unicode-gencat",
+          "unicode-perl",
+          "unicode-script",
+          "unicode-segment"
+        ],
+        "edition": "2018",
+        "version": "0.6.27"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "remove_dir_all 0.5.3": {
+      "name": "remove_dir_all",
+      "version": "0.5.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/remove_dir_all/0.5.3/download",
+          "sha256": "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "remove_dir_all",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "remove_dir_all",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [],
+          "selects": {
+            "cfg(windows)": [
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2015",
+        "version": "0.5.3"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "reqwest 0.11.11": {
+      "name": "reqwest",
+      "version": "0.11.11",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/reqwest/0.11.11/download",
+          "sha256": "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "reqwest",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "reqwest",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "__tls",
+          "blocking",
+          "default",
+          "default-tls",
+          "hyper-tls",
+          "json",
+          "native-tls-crate",
+          "serde_json",
+          "tokio-native-tls"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "base64 0.13.0",
+              "target": "base64"
+            },
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "http 0.2.8",
+              "target": "http"
+            },
+            {
+              "id": "serde 1.0.138",
+              "target": "serde"
+            },
+            {
+              "id": "serde_json 1.0.82",
+              "target": "serde_json"
+            },
+            {
+              "id": "serde_urlencoded 0.7.1",
+              "target": "serde_urlencoded"
+            },
+            {
+              "id": "tower-service 0.3.2",
+              "target": "tower_service"
+            },
+            {
+              "id": "url 2.2.2",
+              "target": "url"
+            }
+          ],
+          "selects": {
+            "cfg(not(target_arch = \"wasm32\"))": [
+              {
+                "id": "encoding_rs 0.8.31",
+                "target": "encoding_rs"
+              },
+              {
+                "id": "futures-core 0.3.21",
+                "target": "futures_core"
+              },
+              {
+                "id": "futures-util 0.3.21",
+                "target": "futures_util"
+              },
+              {
+                "id": "h2 0.3.13",
+                "target": "h2"
+              },
+              {
+                "id": "http-body 0.4.5",
+                "target": "http_body"
+              },
+              {
+                "id": "hyper 0.14.19",
+                "target": "hyper"
+              },
+              {
+                "id": "hyper-tls 0.5.0",
+                "target": "hyper_tls"
+              },
+              {
+                "id": "ipnet 2.5.0",
+                "target": "ipnet"
+              },
+              {
+                "id": "lazy_static 1.4.0",
+                "target": "lazy_static"
+              },
+              {
+                "id": "log 0.4.17",
+                "target": "log"
+              },
+              {
+                "id": "mime 0.3.16",
+                "target": "mime"
+              },
+              {
+                "id": "native-tls 0.2.10",
+                "target": "native_tls",
+                "alias": "native_tls_crate"
+              },
+              {
+                "id": "percent-encoding 2.1.0",
+                "target": "percent_encoding"
+              },
+              {
+                "id": "pin-project-lite 0.2.9",
+                "target": "pin_project_lite"
+              },
+              {
+                "id": "tokio 1.19.2",
+                "target": "tokio"
+              },
+              {
+                "id": "tokio-native-tls 0.3.0",
+                "target": "tokio_native_tls"
+              }
+            ],
+            "cfg(target_arch = \"wasm32\")": [
+              {
+                "id": "js-sys 0.3.58",
+                "target": "js_sys"
+              },
+              {
+                "id": "serde_json 1.0.82",
+                "target": "serde_json"
+              },
+              {
+                "id": "wasm-bindgen 0.2.81",
+                "target": "wasm_bindgen"
+              },
+              {
+                "id": "wasm-bindgen-futures 0.4.31",
+                "target": "wasm_bindgen_futures"
+              },
+              {
+                "id": "web-sys 0.3.58",
+                "target": "web_sys"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "winreg 0.10.1",
+                "target": "winreg"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.11.11"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "rustversion 1.0.7": {
+      "name": "rustversion",
+      "version": "1.0.7",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/rustversion/1.0.7/download",
+          "sha256": "a0a5f7c728f5d284929a1cccb5bc19884422bfe6ef4d6c409da2c41838983fcf"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "rustversion",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build/build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "rustversion",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "rustversion 1.0.7",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.7"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "ryu 1.0.10": {
+      "name": "ryu",
+      "version": "1.0.10",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/ryu/1.0.10/download",
+          "sha256": "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "ryu",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "ryu",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.0.10"
+      },
+      "license": "Apache-2.0 OR BSL-1.0"
+    },
+    "schannel 0.1.20": {
+      "name": "schannel",
+      "version": "0.1.20",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/schannel/0.1.20/download",
+          "sha256": "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "schannel",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "schannel",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "lazy_static 1.4.0",
+              "target": "lazy_static"
+            },
+            {
+              "id": "windows-sys 0.36.1",
+              "target": "windows_sys"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.20"
+      },
+      "license": "MIT"
+    },
+    "scopeguard 1.1.0": {
+      "name": "scopeguard",
+      "version": "1.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/scopeguard/1.1.0/download",
+          "sha256": "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "scopeguard",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "scopeguard",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "1.1.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "security-framework 2.6.1": {
+      "name": "security-framework",
+      "version": "2.6.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/security-framework/2.6.1/download",
+          "sha256": "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "security_framework",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "security_framework",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "OSX_10_9",
+          "default"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bitflags 1.3.2",
+              "target": "bitflags"
+            },
+            {
+              "id": "core-foundation 0.9.3",
+              "target": "core_foundation"
+            },
+            {
+              "id": "core-foundation-sys 0.8.3",
+              "target": "core_foundation_sys"
+            },
+            {
+              "id": "libc 0.2.126",
+              "target": "libc"
+            },
+            {
+              "id": "security-framework-sys 2.6.1",
+              "target": "security_framework_sys"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "2.6.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "security-framework-sys 2.6.1": {
+      "name": "security-framework-sys",
+      "version": "2.6.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/security-framework-sys/2.6.1/download",
+          "sha256": "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "security_framework_sys",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "security_framework_sys",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "OSX_10_9",
+          "default"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "core-foundation-sys 0.8.3",
+              "target": "core_foundation_sys"
+            },
+            {
+              "id": "libc 0.2.126",
+              "target": "libc"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "2.6.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "serde 1.0.138": {
+      "name": "serde",
+      "version": "1.0.138",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/serde/1.0.138/download",
+          "sha256": "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "serde",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "serde",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "derive",
+          "serde_derive",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "serde 1.0.138",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "serde_derive 1.0.138",
+              "target": "serde_derive"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "1.0.138"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "serde_derive 1.0.138": {
+      "name": "serde_derive",
+      "version": "1.0.138",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/serde_derive/1.0.138/download",
+          "sha256": "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "serde_derive",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "serde_derive",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "serde_derive 1.0.138",
+              "target": "build_script_build"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "1.0.138"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "serde_json 1.0.82": {
+      "name": "serde_json",
+      "version": "1.0.82",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/serde_json/1.0.82/download",
+          "sha256": "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "serde_json",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "serde_json",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "itoa 1.0.2",
+              "target": "itoa"
+            },
+            {
+              "id": "ryu 1.0.10",
+              "target": "ryu"
+            },
+            {
+              "id": "serde 1.0.138",
+              "target": "serde"
+            },
+            {
+              "id": "serde_json 1.0.82",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.82"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "serde_regex 1.1.0": {
+      "name": "serde_regex",
+      "version": "1.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/serde_regex/1.1.0/download",
+          "sha256": "a8136f1a4ea815d7eac4101cfd0b16dc0cb5e1fe1b8609dfd728058656b7badf"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "serde_regex",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "serde_regex",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "regex 1.6.0",
+              "target": "regex"
+            },
+            {
+              "id": "serde 1.0.138",
+              "target": "serde"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.1.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "serde_urlencoded 0.7.1": {
+      "name": "serde_urlencoded",
+      "version": "0.7.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/serde_urlencoded/0.7.1/download",
+          "sha256": "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "serde_urlencoded",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "serde_urlencoded",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "form_urlencoded 1.0.1",
+              "target": "form_urlencoded"
+            },
+            {
+              "id": "itoa 1.0.2",
+              "target": "itoa"
+            },
+            {
+              "id": "ryu 1.0.10",
+              "target": "ryu"
+            },
+            {
+              "id": "serde 1.0.138",
+              "target": "serde"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.7.1"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "signal-hook 0.3.14": {
+      "name": "signal-hook",
+      "version": "0.3.14",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/signal-hook/0.3.14/download",
+          "sha256": "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "signal_hook",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "signal_hook",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "channel",
+          "iterator"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "libc 0.2.126",
+              "target": "libc"
+            },
+            {
+              "id": "signal-hook 0.3.14",
+              "target": "build_script_build"
+            },
+            {
+              "id": "signal-hook-registry 1.4.0",
+              "target": "signal_hook_registry"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.14"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "Apache-2.0/MIT"
+    },
+    "signal-hook-registry 1.4.0": {
+      "name": "signal-hook-registry",
+      "version": "1.4.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/signal-hook-registry/1.4.0/download",
+          "sha256": "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "signal_hook_registry",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "signal_hook_registry",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "libc 0.2.126",
+              "target": "libc"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "1.4.0"
+      },
+      "license": "Apache-2.0/MIT"
+    },
+    "similar 2.1.0": {
+      "name": "similar",
+      "version": "2.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/similar/2.1.0/download",
+          "sha256": "2e24979f63a11545f5f2c60141afe249d4f19f84581ea2138065e400941d83d3"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "similar",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "similar",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "text"
+        ],
+        "edition": "2018",
+        "version": "2.1.0"
+      },
+      "license": "Apache-2.0"
+    },
+    "siphasher 0.3.10": {
+      "name": "siphasher",
+      "version": "0.3.10",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/siphasher/0.3.10/download",
+          "sha256": "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "siphasher",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "siphasher",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "0.3.10"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "slab 0.4.6": {
+      "name": "slab",
+      "version": "0.4.6",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/slab/0.4.6/download",
+          "sha256": "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "slab",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "slab",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "0.4.6"
+      },
+      "license": "MIT"
+    },
+    "sluice 0.5.5": {
+      "name": "sluice",
+      "version": "0.5.5",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/sluice/0.5.5/download",
+          "sha256": "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "sluice",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "sluice",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "async-channel 1.6.1",
+              "target": "async_channel"
+            },
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            },
+            {
+              "id": "futures-io 0.3.21",
+              "target": "futures_io"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.5.5"
+      },
+      "license": "MIT"
+    },
+    "smallvec 1.9.0": {
+      "name": "smallvec",
+      "version": "1.9.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/smallvec/1.9.0/download",
+          "sha256": "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "smallvec",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "smallvec",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.9.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "socket2 0.4.4": {
+      "name": "socket2",
+      "version": "0.4.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/socket2/0.4.4/download",
+          "sha256": "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "socket2",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "socket2",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "all"
+        ],
+        "deps": {
+          "common": [],
+          "selects": {
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.4.4"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "string_cache 0.8.4": {
+      "name": "string_cache",
+      "version": "0.8.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/string_cache/0.8.4/download",
+          "sha256": "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "string_cache",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "string_cache",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "new_debug_unreachable 1.0.4",
+              "target": "debug_unreachable"
+            },
+            {
+              "id": "once_cell 1.13.0",
+              "target": "once_cell"
+            },
+            {
+              "id": "parking_lot 0.12.1",
+              "target": "parking_lot"
+            },
+            {
+              "id": "phf_shared 0.10.0",
+              "target": "phf_shared"
+            },
+            {
+              "id": "precomputed-hash 0.1.1",
+              "target": "precomputed_hash"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.8.4"
+      },
+      "license": "MIT / Apache-2.0"
+    },
+    "syn 1.0.98": {
+      "name": "syn",
+      "version": "1.0.98",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/syn/1.0.98/download",
+          "sha256": "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "syn",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "syn",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "clone-impls",
+          "default",
+          "derive",
+          "extra-traits",
+          "full",
+          "parsing",
+          "printing",
+          "proc-macro",
+          "quote",
+          "visit",
+          "visit-mut"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "build_script_build"
+            },
+            {
+              "id": "unicode-ident 1.0.1",
+              "target": "unicode_ident"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.98"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "tempfile 3.3.0": {
+      "name": "tempfile",
+      "version": "3.3.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tempfile/3.3.0/download",
+          "sha256": "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tempfile",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tempfile",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "fastrand 1.7.0",
+              "target": "fastrand"
+            },
+            {
+              "id": "remove_dir_all 0.5.3",
+              "target": "remove_dir_all"
+            }
+          ],
+          "selects": {
+            "cfg(any(unix, target_os = \"wasi\"))": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ],
+            "cfg(target_os = \"redox\")": [
+              {
+                "id": "redox_syscall 0.2.13",
+                "target": "syscall"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "3.3.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "term 0.7.0": {
+      "name": "term",
+      "version": "0.7.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/term/0.7.0/download",
+          "sha256": "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "term",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "term",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "dirs-next 2.0.0",
+              "target": "dirs_next"
+            }
+          ],
+          "selects": {
+            "cfg(windows)": [
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [],
+          "selects": {
+            "cfg(windows)": [
+              {
+                "id": "rustversion 1.0.7",
+                "target": "rustversion"
+              }
+            ]
+          }
+        },
+        "version": "0.7.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "thiserror 1.0.31": {
+      "name": "thiserror",
+      "version": "1.0.31",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/thiserror/1.0.31/download",
+          "sha256": "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "thiserror",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "thiserror",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "thiserror-impl 1.0.31",
+              "target": "thiserror_impl"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "1.0.31"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "thiserror-impl 1.0.31": {
+      "name": "thiserror-impl",
+      "version": "1.0.31",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/thiserror-impl/1.0.31/download",
+          "sha256": "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "thiserror_impl",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "thiserror_impl",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.31"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "tiny-keccak 2.0.2": {
+      "name": "tiny-keccak",
+      "version": "2.0.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tiny-keccak/2.0.2/download",
+          "sha256": "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tiny_keccak",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tiny_keccak",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "sha3"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "crunchy 0.2.2",
+              "target": "crunchy"
+            },
+            {
+              "id": "tiny-keccak 2.0.2",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "2.0.2"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "CC0-1.0"
+    },
+    "tinyvec 1.6.0": {
+      "name": "tinyvec",
+      "version": "1.6.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tinyvec/1.6.0/download",
+          "sha256": "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tinyvec",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tinyvec",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "default",
+          "tinyvec_macros"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "tinyvec_macros 0.1.0",
+              "target": "tinyvec_macros"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.6.0"
+      },
+      "license": "Zlib OR Apache-2.0 OR MIT"
+    },
+    "tinyvec_macros 0.1.0": {
+      "name": "tinyvec_macros",
+      "version": "0.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tinyvec_macros/0.1.0/download",
+          "sha256": "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tinyvec_macros",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tinyvec_macros",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.1.0"
+      },
+      "license": "MIT OR Apache-2.0 OR Zlib"
+    },
+    "tokio 1.19.2": {
+      "name": "tokio",
+      "version": "1.19.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tokio/1.19.2/download",
+          "sha256": "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tokio",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tokio",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "bytes",
+          "default",
+          "io-util",
+          "libc",
+          "macros",
+          "memchr",
+          "mio",
+          "net",
+          "num_cpus",
+          "once_cell",
+          "rt",
+          "rt-multi-thread",
+          "signal",
+          "signal-hook-registry",
+          "socket2",
+          "sync",
+          "time",
+          "tokio-macros",
+          "winapi"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "memchr 2.5.0",
+              "target": "memchr"
+            },
+            {
+              "id": "mio 0.8.4",
+              "target": "mio"
+            },
+            {
+              "id": "num_cpus 1.13.1",
+              "target": "num_cpus"
+            },
+            {
+              "id": "once_cell 1.13.0",
+              "target": "once_cell"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            },
+            {
+              "id": "socket2 0.4.4",
+              "target": "socket2"
+            }
+          ],
+          "selects": {
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              },
+              {
+                "id": "signal-hook-registry 1.4.0",
+                "target": "signal_hook_registry"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "tokio-macros 1.8.0",
+              "target": "tokio_macros"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "1.19.2"
+      },
+      "license": "MIT"
+    },
+    "tokio-macros 1.8.0": {
+      "name": "tokio-macros",
+      "version": "1.8.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tokio-macros/1.8.0/download",
+          "sha256": "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "tokio_macros",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tokio_macros",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.8.0"
+      },
+      "license": "MIT"
+    },
+    "tokio-native-tls 0.3.0": {
+      "name": "tokio-native-tls",
+      "version": "0.3.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tokio-native-tls/0.3.0/download",
+          "sha256": "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tokio_native_tls",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tokio_native_tls",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "native-tls 0.2.10",
+              "target": "native_tls"
+            },
+            {
+              "id": "tokio 1.19.2",
+              "target": "tokio"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.0"
+      },
+      "license": "MIT"
+    },
+    "tokio-util 0.7.3": {
+      "name": "tokio-util",
+      "version": "0.7.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tokio-util/0.7.3/download",
+          "sha256": "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tokio_util",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tokio_util",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "codec",
+          "default",
+          "tracing"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            },
+            {
+              "id": "futures-sink 0.3.21",
+              "target": "futures_sink"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            },
+            {
+              "id": "tokio 1.19.2",
+              "target": "tokio"
+            },
+            {
+              "id": "tracing 0.1.35",
+              "target": "tracing"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.7.3"
+      },
+      "license": "MIT"
+    },
+    "tower-service 0.3.2": {
+      "name": "tower-service",
+      "version": "0.3.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tower-service/0.3.2/download",
+          "sha256": "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tower_service",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tower_service",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.3.2"
+      },
+      "license": "MIT"
+    },
+    "tracing 0.1.35": {
+      "name": "tracing",
+      "version": "0.1.35",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tracing/0.1.35/download",
+          "sha256": "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tracing",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tracing",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "attributes",
+          "default",
+          "log",
+          "std",
+          "tracing-attributes"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "log 0.4.17",
+              "target": "log"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            },
+            {
+              "id": "tracing-core 0.1.28",
+              "target": "tracing_core"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "tracing-attributes 0.1.22",
+              "target": "tracing_attributes"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "0.1.35"
+      },
+      "license": "MIT"
+    },
+    "tracing-attributes 0.1.22": {
+      "name": "tracing-attributes",
+      "version": "0.1.22",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tracing-attributes/0.1.22/download",
+          "sha256": "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "tracing_attributes",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tracing_attributes",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.22"
+      },
+      "license": "MIT"
+    },
+    "tracing-core 0.1.28": {
+      "name": "tracing-core",
+      "version": "0.1.28",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tracing-core/0.1.28/download",
+          "sha256": "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tracing_core",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tracing_core",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "once_cell",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "once_cell 1.13.0",
+              "target": "once_cell"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.28"
+      },
+      "license": "MIT"
+    },
+    "tracing-futures 0.2.5": {
+      "name": "tracing-futures",
+      "version": "0.2.5",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tracing-futures/0.2.5/download",
+          "sha256": "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tracing_futures",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tracing_futures",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "pin-project",
+          "std",
+          "std-future"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "pin-project 1.0.11",
+              "target": "pin_project"
+            },
+            {
+              "id": "tracing 0.1.35",
+              "target": "tracing"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.2.5"
+      },
+      "license": "MIT"
+    },
+    "try-lock 0.2.3": {
+      "name": "try-lock",
+      "version": "0.2.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/try-lock/0.2.3/download",
+          "sha256": "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "try_lock",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "try_lock",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.2.3"
+      },
+      "license": "MIT"
+    },
+    "typenum 1.15.0": {
+      "name": "typenum",
+      "version": "1.15.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/typenum/1.15.0/download",
+          "sha256": "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "typenum",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_main",
+            "crate_root": "build/main.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "typenum",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "typenum 1.15.0",
+              "target": "build_script_main"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.15.0"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "unicode-bidi 0.3.8": {
+      "name": "unicode-bidi",
+      "version": "0.3.8",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/unicode-bidi/0.3.8/download",
+          "sha256": "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "unicode_bidi",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "unicode_bidi",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "hardcoded-data",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "0.3.8"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "unicode-ident 1.0.1": {
+      "name": "unicode-ident",
+      "version": "1.0.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/unicode-ident/1.0.1/download",
+          "sha256": "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "unicode_ident",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "unicode_ident",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.0.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "unicode-normalization 0.1.21": {
+      "name": "unicode-normalization",
+      "version": "0.1.21",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/unicode-normalization/0.1.21/download",
+          "sha256": "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "unicode_normalization",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "unicode_normalization",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "tinyvec 1.6.0",
+              "target": "tinyvec"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.21"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "unicode-xid 0.2.3": {
+      "name": "unicode-xid",
+      "version": "0.2.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/unicode-xid/0.2.3/download",
+          "sha256": "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "unicode_xid",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "unicode_xid",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.2.3"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "url 2.2.2": {
+      "name": "url",
+      "version": "2.2.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/url/2.2.2/download",
+          "sha256": "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "url",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "url",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "form_urlencoded 1.0.1",
+              "target": "form_urlencoded"
+            },
+            {
+              "id": "idna 0.2.3",
+              "target": "idna"
+            },
+            {
+              "id": "matches 0.1.9",
+              "target": "matches"
+            },
+            {
+              "id": "percent-encoding 2.1.0",
+              "target": "percent_encoding"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "2.2.2"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "value-bag 1.0.0-alpha.9": {
+      "name": "value-bag",
+      "version": "1.0.0-alpha.9",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/value-bag/1.0.0-alpha.9/download",
+          "sha256": "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "value_bag",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "value_bag",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "value-bag 1.0.0-alpha.9",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "ctor 0.1.22",
+              "target": "ctor"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "1.0.0-alpha.9"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "version_check 0.9.4",
+              "target": "version_check",
+              "alias": "rustc"
+            }
+          ],
+          "selects": {}
+        }
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "vcpkg 0.2.15": {
+      "name": "vcpkg",
+      "version": "0.2.15",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/vcpkg/0.2.15/download",
+          "sha256": "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "vcpkg",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "vcpkg",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.2.15"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "version_check 0.9.4": {
+      "name": "version_check",
+      "version": "0.9.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/version_check/0.9.4/download",
+          "sha256": "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "version_check",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "version_check",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.9.4"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "waker-fn 1.1.0": {
+      "name": "waker-fn",
+      "version": "1.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/waker-fn/1.1.0/download",
+          "sha256": "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "waker_fn",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "waker_fn",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.1.0"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "want 0.3.0": {
+      "name": "want",
+      "version": "0.3.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/want/0.3.0/download",
+          "sha256": "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "want",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "want",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "log 0.4.17",
+              "target": "log"
+            },
+            {
+              "id": "try-lock 0.2.3",
+              "target": "try_lock"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.0"
+      },
+      "license": "MIT"
+    },
+    "wasi 0.11.0+wasi-snapshot-preview1": {
+      "name": "wasi",
+      "version": "0.11.0+wasi-snapshot-preview1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/wasi/0.11.0+wasi-snapshot-preview1/download",
+          "sha256": "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "wasi",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "wasi",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "0.11.0+wasi-snapshot-preview1"
+      },
+      "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT"
+    },
+    "wasm-bindgen 0.2.81": {
+      "name": "wasm-bindgen",
+      "version": "0.2.81",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/wasm-bindgen/0.2.81/download",
+          "sha256": "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "wasm_bindgen",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "wasm_bindgen",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "spans",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "wasm-bindgen 0.2.81",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "wasm-bindgen-macro 0.2.81",
+              "target": "wasm_bindgen_macro"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "0.2.81"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "wasm-bindgen-backend 0.2.81": {
+      "name": "wasm-bindgen-backend",
+      "version": "0.2.81",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/wasm-bindgen-backend/0.2.81/download",
+          "sha256": "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "wasm_bindgen_backend",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "wasm_bindgen_backend",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "spans"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bumpalo 3.10.0",
+              "target": "bumpalo"
+            },
+            {
+              "id": "lazy_static 1.4.0",
+              "target": "lazy_static"
+            },
+            {
+              "id": "log 0.4.17",
+              "target": "log"
+            },
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            },
+            {
+              "id": "wasm-bindgen-shared 0.2.81",
+              "target": "wasm_bindgen_shared"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.2.81"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "wasm-bindgen-futures 0.4.31": {
+      "name": "wasm-bindgen-futures",
+      "version": "0.4.31",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/wasm-bindgen-futures/0.4.31/download",
+          "sha256": "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "wasm_bindgen_futures",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "wasm_bindgen_futures",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "js-sys 0.3.58",
+              "target": "js_sys"
+            },
+            {
+              "id": "wasm-bindgen 0.2.81",
+              "target": "wasm_bindgen"
+            }
+          ],
+          "selects": {
+            "cfg(target_feature = \"atomics\")": [
+              {
+                "id": "web-sys 0.3.58",
+                "target": "web_sys"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.4.31"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "wasm-bindgen-macro 0.2.81": {
+      "name": "wasm-bindgen-macro",
+      "version": "0.2.81",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/wasm-bindgen-macro/0.2.81/download",
+          "sha256": "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "wasm_bindgen_macro",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "wasm_bindgen_macro",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "spans"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "wasm-bindgen-macro-support 0.2.81",
+              "target": "wasm_bindgen_macro_support"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.2.81"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "wasm-bindgen-macro-support 0.2.81": {
+      "name": "wasm-bindgen-macro-support",
+      "version": "0.2.81",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/wasm-bindgen-macro-support/0.2.81/download",
+          "sha256": "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "wasm_bindgen_macro_support",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "wasm_bindgen_macro_support",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "spans"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            },
+            {
+              "id": "wasm-bindgen-backend 0.2.81",
+              "target": "wasm_bindgen_backend"
+            },
+            {
+              "id": "wasm-bindgen-shared 0.2.81",
+              "target": "wasm_bindgen_shared"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.2.81"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "wasm-bindgen-shared 0.2.81": {
+      "name": "wasm-bindgen-shared",
+      "version": "0.2.81",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/wasm-bindgen-shared/0.2.81/download",
+          "sha256": "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "wasm_bindgen_shared",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "wasm_bindgen_shared",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "wasm-bindgen-shared 0.2.81",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.2.81"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ],
+        "links": "wasm_bindgen"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "web-sys 0.3.58": {
+      "name": "web-sys",
+      "version": "0.3.58",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/web-sys/0.3.58/download",
+          "sha256": "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "web_sys",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "web_sys",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "Blob",
+          "BlobPropertyBag",
+          "Event",
+          "EventTarget",
+          "File",
+          "FormData",
+          "Headers",
+          "MessageEvent",
+          "Request",
+          "RequestCredentials",
+          "RequestInit",
+          "RequestMode",
+          "Response",
+          "ServiceWorkerGlobalScope",
+          "Window",
+          "Worker",
+          "WorkerGlobalScope"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "js-sys 0.3.58",
+              "target": "js_sys"
+            },
+            {
+              "id": "wasm-bindgen 0.2.81",
+              "target": "wasm_bindgen"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.58"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "wepoll-ffi 0.1.2": {
+      "name": "wepoll-ffi",
+      "version": "0.1.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/wepoll-ffi/0.1.2/download",
+          "sha256": "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "wepoll_ffi",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "wepoll_ffi",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "null-overlapped-wakeups-patch"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "wepoll-ffi 0.1.2",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.2"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**",
+          "vendor/**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cc 1.0.73",
+              "target": "cc"
+            }
+          ],
+          "selects": {}
+        }
+      },
+      "license": "MIT OR Apache-2.0 OR BSD-2-Clause"
+    },
+    "winapi 0.3.9": {
+      "name": "winapi",
+      "version": "0.3.9",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download",
+          "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "winapi",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "winapi",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "consoleapi",
+          "errhandlingapi",
+          "fileapi",
+          "handleapi",
+          "impl-debug",
+          "impl-default",
+          "ioapiset",
+          "knownfolders",
+          "libloaderapi",
+          "minwinbase",
+          "minwindef",
+          "mswsock",
+          "namedpipeapi",
+          "objbase",
+          "processenv",
+          "shlobj",
+          "std",
+          "timezoneapi",
+          "winbase",
+          "wincon",
+          "wincrypt",
+          "winerror",
+          "winnt",
+          "winreg",
+          "winsock2",
+          "ws2def",
+          "ws2ipdef",
+          "ws2tcpip"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "winapi 0.3.9",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {
+            "i686-pc-windows-gnu": [
+              {
+                "id": "winapi-i686-pc-windows-gnu 0.4.0",
+                "target": "winapi_i686_pc_windows_gnu"
+              }
+            ],
+            "x86_64-pc-windows-gnu": [
+              {
+                "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
+                "target": "winapi_x86_64_pc_windows_gnu"
+              }
+            ]
+          }
+        },
+        "edition": "2015",
+        "version": "0.3.9"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "winapi-i686-pc-windows-gnu 0.4.0": {
+      "name": "winapi-i686-pc-windows-gnu",
+      "version": "0.4.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
+          "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "winapi_i686_pc_windows_gnu",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "winapi_i686_pc_windows_gnu",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "winapi-i686-pc-windows-gnu 0.4.0",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.4.0"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "winapi-x86_64-pc-windows-gnu 0.4.0": {
+      "name": "winapi-x86_64-pc-windows-gnu",
+      "version": "0.4.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
+          "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "winapi_x86_64_pc_windows_gnu",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "winapi_x86_64_pc_windows_gnu",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.4.0"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "windows-sys 0.36.1": {
+      "name": "windows-sys",
+      "version": "0.36.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/windows-sys/0.36.1/download",
+          "sha256": "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "windows_sys",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "windows_sys",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "Win32",
+          "Win32_Foundation",
+          "Win32_Networking",
+          "Win32_Networking_WinSock",
+          "Win32_Security",
+          "Win32_Security_Authentication",
+          "Win32_Security_Authentication_Identity",
+          "Win32_Security_Credentials",
+          "Win32_Security_Cryptography",
+          "Win32_Storage",
+          "Win32_Storage_FileSystem",
+          "Win32_System",
+          "Win32_System_IO",
+          "Win32_System_LibraryLoader",
+          "Win32_System_Memory",
+          "Win32_System_Pipes",
+          "Win32_System_SystemServices",
+          "Win32_System_WindowsProgramming",
+          "default"
+        ],
+        "deps": {
+          "common": [],
+          "selects": {
+            "aarch64-pc-windows-msvc": [
+              {
+                "id": "windows_aarch64_msvc 0.36.1",
+                "target": "windows_aarch64_msvc"
+              }
+            ],
+            "aarch64-uwp-windows-msvc": [
+              {
+                "id": "windows_aarch64_msvc 0.36.1",
+                "target": "windows_aarch64_msvc"
+              }
+            ],
+            "i686-pc-windows-gnu": [
+              {
+                "id": "windows_i686_gnu 0.36.1",
+                "target": "windows_i686_gnu"
+              }
+            ],
+            "i686-pc-windows-msvc": [
+              {
+                "id": "windows_i686_msvc 0.36.1",
+                "target": "windows_i686_msvc"
+              }
+            ],
+            "i686-uwp-windows-gnu": [
+              {
+                "id": "windows_i686_gnu 0.36.1",
+                "target": "windows_i686_gnu"
+              }
+            ],
+            "i686-uwp-windows-msvc": [
+              {
+                "id": "windows_i686_msvc 0.36.1",
+                "target": "windows_i686_msvc"
+              }
+            ],
+            "x86_64-pc-windows-gnu": [
+              {
+                "id": "windows_x86_64_gnu 0.36.1",
+                "target": "windows_x86_64_gnu"
+              }
+            ],
+            "x86_64-pc-windows-msvc": [
+              {
+                "id": "windows_x86_64_msvc 0.36.1",
+                "target": "windows_x86_64_msvc"
+              }
+            ],
+            "x86_64-uwp-windows-gnu": [
+              {
+                "id": "windows_x86_64_gnu 0.36.1",
+                "target": "windows_x86_64_gnu"
+              }
+            ],
+            "x86_64-uwp-windows-msvc": [
+              {
+                "id": "windows_x86_64_msvc 0.36.1",
+                "target": "windows_x86_64_msvc"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.36.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "windows_aarch64_msvc 0.36.1": {
+      "name": "windows_aarch64_msvc",
+      "version": "0.36.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/windows_aarch64_msvc/0.36.1/download",
+          "sha256": "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "windows_aarch64_msvc",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "windows_aarch64_msvc",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "windows_aarch64_msvc 0.36.1",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.36.1"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "windows_i686_gnu 0.36.1": {
+      "name": "windows_i686_gnu",
+      "version": "0.36.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/windows_i686_gnu/0.36.1/download",
+          "sha256": "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "windows_i686_gnu",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "windows_i686_gnu",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "windows_i686_gnu 0.36.1",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.36.1"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "windows_i686_msvc 0.36.1": {
+      "name": "windows_i686_msvc",
+      "version": "0.36.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/windows_i686_msvc/0.36.1/download",
+          "sha256": "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "windows_i686_msvc",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "windows_i686_msvc",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "windows_i686_msvc 0.36.1",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.36.1"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "windows_x86_64_gnu 0.36.1": {
+      "name": "windows_x86_64_gnu",
+      "version": "0.36.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/windows_x86_64_gnu/0.36.1/download",
+          "sha256": "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "windows_x86_64_gnu",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "windows_x86_64_gnu",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "windows_x86_64_gnu 0.36.1",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.36.1"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "windows_x86_64_msvc 0.36.1": {
+      "name": "windows_x86_64_msvc",
+      "version": "0.36.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/windows_x86_64_msvc/0.36.1/download",
+          "sha256": "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "windows_x86_64_msvc",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "windows_x86_64_msvc",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "windows_x86_64_msvc 0.36.1",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.36.1"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "winreg 0.10.1": {
+      "name": "winreg",
+      "version": "0.10.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/winreg/0.10.1/download",
+          "sha256": "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "winreg",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "winreg",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "winapi 0.3.9",
+              "target": "winapi"
+            },
+            {
+              "id": "winreg 0.10.1",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.10.1"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT"
+    }
+  },
+  "binary_crates": [
+    "cc 1.0.73",
+    "httpmock 0.6.6",
+    "lalrpop 0.19.8"
+  ],
+  "workspace_members": {
+    "direct-cargo-bazel-deps 0.0.1": "",
+    "pkg_a 0.1.0": "multi_package/pkg_a",
+    "pkg_b 0.1.0": "multi_package/sub_pkgs/pkg_b",
+    "pkg_c 0.1.0": "multi_package/sub_pkgs/pkg_c"
+  },
+  "conditions": {
+    "aarch64-pc-windows-msvc": [],
+    "aarch64-uwp-windows-msvc": [],
+    "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [],
+    "cfg(all(unix, not(target_os = \"macos\")))": [
+      "aarch64-apple-ios",
+      "aarch64-apple-ios-sim",
+      "aarch64-linux-android",
+      "aarch64-unknown-linux-gnu",
+      "arm-unknown-linux-gnueabi",
+      "armv7-linux-androideabi",
+      "armv7-unknown-linux-gnueabi",
+      "i686-linux-android",
+      "i686-unknown-freebsd",
+      "i686-unknown-linux-gnu",
+      "powerpc-unknown-linux-gnu",
+      "s390x-unknown-linux-gnu",
+      "x86_64-apple-ios",
+      "x86_64-linux-android",
+      "x86_64-unknown-freebsd",
+      "x86_64-unknown-linux-gnu"
+    ],
+    "cfg(any(target_os = \"macos\", target_os = \"ios\"))": [
+      "aarch64-apple-darwin",
+      "aarch64-apple-ios",
+      "aarch64-apple-ios-sim",
+      "i686-apple-darwin",
+      "x86_64-apple-darwin",
+      "x86_64-apple-ios"
+    ],
+    "cfg(any(unix, target_os = \"fuchsia\", target_os = \"vxworks\"))": [
+      "aarch64-apple-darwin",
+      "aarch64-apple-ios",
+      "aarch64-apple-ios-sim",
+      "aarch64-linux-android",
+      "aarch64-unknown-linux-gnu",
+      "arm-unknown-linux-gnueabi",
+      "armv7-linux-androideabi",
+      "armv7-unknown-linux-gnueabi",
+      "i686-apple-darwin",
+      "i686-linux-android",
+      "i686-unknown-freebsd",
+      "i686-unknown-linux-gnu",
+      "powerpc-unknown-linux-gnu",
+      "s390x-unknown-linux-gnu",
+      "x86_64-apple-darwin",
+      "x86_64-apple-ios",
+      "x86_64-linux-android",
+      "x86_64-unknown-freebsd",
+      "x86_64-unknown-linux-gnu"
+    ],
+    "cfg(any(unix, target_os = \"wasi\"))": [
+      "aarch64-apple-darwin",
+      "aarch64-apple-ios",
+      "aarch64-apple-ios-sim",
+      "aarch64-linux-android",
+      "aarch64-unknown-linux-gnu",
+      "arm-unknown-linux-gnueabi",
+      "armv7-linux-androideabi",
+      "armv7-unknown-linux-gnueabi",
+      "i686-apple-darwin",
+      "i686-linux-android",
+      "i686-unknown-freebsd",
+      "i686-unknown-linux-gnu",
+      "powerpc-unknown-linux-gnu",
+      "s390x-unknown-linux-gnu",
+      "wasm32-wasi",
+      "x86_64-apple-darwin",
+      "x86_64-apple-ios",
+      "x86_64-linux-android",
+      "x86_64-unknown-freebsd",
+      "x86_64-unknown-linux-gnu"
+    ],
+    "cfg(not(any(target_os = \"windows\", target_os = \"macos\", target_os = \"ios\")))": [
+      "aarch64-linux-android",
+      "aarch64-unknown-linux-gnu",
+      "arm-unknown-linux-gnueabi",
+      "armv7-linux-androideabi",
+      "armv7-unknown-linux-gnueabi",
+      "i686-linux-android",
+      "i686-unknown-freebsd",
+      "i686-unknown-linux-gnu",
+      "powerpc-unknown-linux-gnu",
+      "riscv32imc-unknown-none-elf",
+      "s390x-unknown-linux-gnu",
+      "wasm32-unknown-unknown",
+      "wasm32-wasi",
+      "x86_64-linux-android",
+      "x86_64-unknown-freebsd",
+      "x86_64-unknown-linux-gnu"
+    ],
+    "cfg(not(target_arch = \"wasm32\"))": [
+      "aarch64-apple-darwin",
+      "aarch64-apple-ios",
+      "aarch64-apple-ios-sim",
+      "aarch64-linux-android",
+      "aarch64-unknown-linux-gnu",
+      "arm-unknown-linux-gnueabi",
+      "armv7-linux-androideabi",
+      "armv7-unknown-linux-gnueabi",
+      "i686-apple-darwin",
+      "i686-linux-android",
+      "i686-pc-windows-msvc",
+      "i686-unknown-freebsd",
+      "i686-unknown-linux-gnu",
+      "powerpc-unknown-linux-gnu",
+      "riscv32imc-unknown-none-elf",
+      "s390x-unknown-linux-gnu",
+      "x86_64-apple-darwin",
+      "x86_64-apple-ios",
+      "x86_64-linux-android",
+      "x86_64-pc-windows-msvc",
+      "x86_64-unknown-freebsd",
+      "x86_64-unknown-linux-gnu"
+    ],
+    "cfg(not(target_os = \"unknown\"))": [
+      "aarch64-apple-darwin",
+      "aarch64-apple-ios",
+      "aarch64-apple-ios-sim",
+      "aarch64-linux-android",
+      "aarch64-unknown-linux-gnu",
+      "arm-unknown-linux-gnueabi",
+      "armv7-linux-androideabi",
+      "armv7-unknown-linux-gnueabi",
+      "i686-apple-darwin",
+      "i686-linux-android",
+      "i686-pc-windows-msvc",
+      "i686-unknown-freebsd",
+      "i686-unknown-linux-gnu",
+      "powerpc-unknown-linux-gnu",
+      "riscv32imc-unknown-none-elf",
+      "s390x-unknown-linux-gnu",
+      "wasm32-wasi",
+      "x86_64-apple-darwin",
+      "x86_64-apple-ios",
+      "x86_64-linux-android",
+      "x86_64-pc-windows-msvc",
+      "x86_64-unknown-freebsd",
+      "x86_64-unknown-linux-gnu"
+    ],
+    "cfg(not(windows))": [
+      "aarch64-apple-darwin",
+      "aarch64-apple-ios",
+      "aarch64-apple-ios-sim",
+      "aarch64-linux-android",
+      "aarch64-unknown-linux-gnu",
+      "arm-unknown-linux-gnueabi",
+      "armv7-linux-androideabi",
+      "armv7-unknown-linux-gnueabi",
+      "i686-apple-darwin",
+      "i686-linux-android",
+      "i686-unknown-freebsd",
+      "i686-unknown-linux-gnu",
+      "powerpc-unknown-linux-gnu",
+      "riscv32imc-unknown-none-elf",
+      "s390x-unknown-linux-gnu",
+      "wasm32-unknown-unknown",
+      "wasm32-wasi",
+      "x86_64-apple-darwin",
+      "x86_64-apple-ios",
+      "x86_64-linux-android",
+      "x86_64-unknown-freebsd",
+      "x86_64-unknown-linux-gnu"
+    ],
+    "cfg(target_arch = \"wasm32\")": [
+      "wasm32-unknown-unknown",
+      "wasm32-wasi"
+    ],
+    "cfg(target_env = \"msvc\")": [
+      "i686-pc-windows-msvc",
+      "x86_64-pc-windows-msvc"
+    ],
+    "cfg(target_feature = \"atomics\")": [],
+    "cfg(target_os = \"hermit\")": [],
+    "cfg(target_os = \"redox\")": [],
+    "cfg(target_os = \"wasi\")": [
+      "wasm32-wasi"
+    ],
+    "cfg(target_os = \"windows\")": [
+      "i686-pc-windows-msvc",
+      "x86_64-pc-windows-msvc"
+    ],
+    "cfg(unix)": [
+      "aarch64-apple-darwin",
+      "aarch64-apple-ios",
+      "aarch64-apple-ios-sim",
+      "aarch64-linux-android",
+      "aarch64-unknown-linux-gnu",
+      "arm-unknown-linux-gnueabi",
+      "armv7-linux-androideabi",
+      "armv7-unknown-linux-gnueabi",
+      "i686-apple-darwin",
+      "i686-linux-android",
+      "i686-unknown-freebsd",
+      "i686-unknown-linux-gnu",
+      "powerpc-unknown-linux-gnu",
+      "s390x-unknown-linux-gnu",
+      "x86_64-apple-darwin",
+      "x86_64-apple-ios",
+      "x86_64-linux-android",
+      "x86_64-unknown-freebsd",
+      "x86_64-unknown-linux-gnu"
+    ],
+    "cfg(windows)": [
+      "i686-pc-windows-msvc",
+      "x86_64-pc-windows-msvc"
+    ],
+    "i686-pc-windows-gnu": [],
+    "i686-pc-windows-msvc": [
+      "i686-pc-windows-msvc"
+    ],
+    "i686-uwp-windows-gnu": [],
+    "i686-uwp-windows-msvc": [],
+    "x86_64-pc-windows-gnu": [],
+    "x86_64-pc-windows-msvc": [
+      "x86_64-pc-windows-msvc"
+    ],
+    "x86_64-uwp-windows-gnu": [],
+    "x86_64-uwp-windows-msvc": []
+  }
+}
diff --git a/third_party/rules_rust/examples/crate_universe/no_cargo_manifests/Cargo.Bazel.lock b/third_party/rules_rust/examples/crate_universe/no_cargo_manifests/Cargo.Bazel.lock
index 6164f28..4a77a8b 100644
--- a/third_party/rules_rust/examples/crate_universe/no_cargo_manifests/Cargo.Bazel.lock
+++ b/third_party/rules_rust/examples/crate_universe/no_cargo_manifests/Cargo.Bazel.lock
@@ -1,5006 +1,805 @@
-{
-  "checksum": "5c8bd4f7527784376a1667a00ecf8f9ddd398a2a3ccefee5201b383f56d2c99b",
-  "crates": {
-    "ansi_term 0.12.1": {
-      "name": "ansi_term",
-      "version": "0.12.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ansi_term/0.12.1/download",
-          "sha256": "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ansi_term",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ansi_term",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(target_os = \"windows\")": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.12.1"
-      },
-      "license": "MIT"
-    },
-    "async-trait 0.1.52": {
-      "name": "async-trait",
-      "version": "0.1.52",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/async-trait/0.1.52/download",
-          "sha256": "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "async_trait",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "async_trait",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "async-trait 0.1.52",
-              "target": "build_script_build"
-            },
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.52"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "autocfg 1.1.0": {
-      "name": "autocfg",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/autocfg/1.1.0/download",
-          "sha256": "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "autocfg",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "autocfg",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.1.0"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "axum 0.4.8": {
-      "name": "axum",
-      "version": "0.4.8",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/axum/0.4.8/download",
-          "sha256": "c9f346c92c1e9a71d14fe4aaf7c2a5d9932cc4e5e48d8fb6641524416eb79ddd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "axum",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "axum",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**",
-          "**/*.md"
-        ],
-        "crate_features": [
-          "default",
-          "http1",
-          "json",
-          "serde_json",
-          "tower-log"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "axum-core 0.1.2",
-              "target": "axum_core"
-            },
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            },
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "futures-util 0.3.21",
-              "target": "futures_util"
-            },
-            {
-              "id": "http 0.2.6",
-              "target": "http"
-            },
-            {
-              "id": "http-body 0.4.4",
-              "target": "http_body"
-            },
-            {
-              "id": "hyper 0.14.17",
-              "target": "hyper"
-            },
-            {
-              "id": "matchit 0.4.6",
-              "target": "matchit"
-            },
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            },
-            {
-              "id": "mime 0.3.16",
-              "target": "mime"
-            },
-            {
-              "id": "percent-encoding 2.1.0",
-              "target": "percent_encoding"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "serde_json"
-            },
-            {
-              "id": "serde_urlencoded 0.7.1",
-              "target": "serde_urlencoded"
-            },
-            {
-              "id": "sync_wrapper 0.1.1",
-              "target": "sync_wrapper"
-            },
-            {
-              "id": "tokio 1.17.0",
-              "target": "tokio"
-            },
-            {
-              "id": "tower 0.4.12",
-              "target": "tower"
-            },
-            {
-              "id": "tower-http 0.2.4",
-              "target": "tower_http"
-            },
-            {
-              "id": "tower-layer 0.3.1",
-              "target": "tower_layer"
-            },
-            {
-              "id": "tower-service 0.3.1",
-              "target": "tower_service"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "async-trait 0.1.52",
-              "target": "async_trait"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "0.4.8"
-      },
-      "license": "MIT"
-    },
-    "axum-core 0.1.2": {
-      "name": "axum-core",
-      "version": "0.1.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/axum-core/0.1.2/download",
-          "sha256": "6dbcda393bef9c87572779cb8ef916f12d77750b27535dd6819fa86591627a51"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "axum_core",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "axum_core",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "futures-util 0.3.21",
-              "target": "futures_util"
-            },
-            {
-              "id": "http 0.2.6",
-              "target": "http"
-            },
-            {
-              "id": "http-body 0.4.4",
-              "target": "http_body"
-            },
-            {
-              "id": "mime 0.3.16",
-              "target": "mime"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "async-trait 0.1.52",
-              "target": "async_trait"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "0.1.2"
-      },
-      "license": "MIT"
-    },
-    "bitflags 1.3.2": {
-      "name": "bitflags",
-      "version": "1.3.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download",
-          "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "bitflags",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "bitflags",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2018",
-        "version": "1.3.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "bytes 1.1.0": {
-      "name": "bytes",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/bytes/1.1.0/download",
-          "sha256": "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "bytes",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "bytes",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "1.1.0"
-      },
-      "license": "MIT"
-    },
-    "cfg-if 1.0.0": {
-      "name": "cfg-if",
-      "version": "1.0.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
-          "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "cfg_if",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "cfg_if",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "direct-cargo-bazel-deps 0.0.1": {
-      "name": "direct-cargo-bazel-deps",
-      "version": "0.0.1",
-      "repository": null,
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "direct_cargo_bazel_deps",
-            "crate_root": ".direct_cargo_bazel_deps.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "direct_cargo_bazel_deps",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "axum 0.4.8",
-              "target": "axum"
-            },
-            {
-              "id": "hyper 0.14.17",
-              "target": "hyper"
-            },
-            {
-              "id": "mime 0.3.16",
-              "target": "mime"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "serde_json"
-            },
-            {
-              "id": "tokio 1.17.0",
-              "target": "tokio"
-            },
-            {
-              "id": "tower 0.4.12",
-              "target": "tower"
-            },
-            {
-              "id": "tower-http 0.2.4",
-              "target": "tower_http"
-            },
-            {
-              "id": "tracing 0.1.31",
-              "target": "tracing"
-            },
-            {
-              "id": "tracing-subscriber 0.3.9",
-              "target": "tracing_subscriber"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.0.1"
-      },
-      "license": null
-    },
-    "fnv 1.0.7": {
-      "name": "fnv",
-      "version": "1.0.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/fnv/1.0.7/download",
-          "sha256": "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "fnv",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "fnv",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2015",
-        "version": "1.0.7"
-      },
-      "license": "Apache-2.0 / MIT"
-    },
-    "form_urlencoded 1.0.1": {
-      "name": "form_urlencoded",
-      "version": "1.0.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/form_urlencoded/1.0.1/download",
-          "sha256": "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "form_urlencoded",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "form_urlencoded",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "matches 0.1.9",
-              "target": "matches"
-            },
-            {
-              "id": "percent-encoding 2.1.0",
-              "target": "percent_encoding"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "futures-channel 0.3.21": {
-      "name": "futures-channel",
-      "version": "0.3.21",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/futures-channel/0.3.21/download",
-          "sha256": "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "futures_channel",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "futures_channel",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "futures-channel 0.3.21",
-              "target": "build_script_build"
-            },
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.21"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "futures-core 0.3.21": {
-      "name": "futures-core",
-      "version": "0.3.21",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/futures-core/0.3.21/download",
-          "sha256": "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "futures_core",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "futures_core",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "futures-core 0.3.21",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.21"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "futures-sink 0.3.21": {
-      "name": "futures-sink",
-      "version": "0.3.21",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/futures-sink/0.3.21/download",
-          "sha256": "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "futures_sink",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "futures_sink",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.3.21"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "futures-task 0.3.21": {
-      "name": "futures-task",
-      "version": "0.3.21",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/futures-task/0.3.21/download",
-          "sha256": "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "futures_task",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "futures_task",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "futures-task 0.3.21",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.21"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "futures-util 0.3.21": {
-      "name": "futures-util",
-      "version": "0.3.21",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/futures-util/0.3.21/download",
-          "sha256": "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "futures_util",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "futures_util",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            },
-            {
-              "id": "futures-task 0.3.21",
-              "target": "futures_task"
-            },
-            {
-              "id": "futures-util 0.3.21",
-              "target": "build_script_build"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            },
-            {
-              "id": "pin-utils 0.1.0",
-              "target": "pin_utils"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.21"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "h2 0.3.11": {
-      "name": "h2",
-      "version": "0.3.11",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/h2/0.3.11/download",
-          "sha256": "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "h2",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "h2",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "fnv 1.0.7",
-              "target": "fnv"
-            },
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            },
-            {
-              "id": "futures-sink 0.3.21",
-              "target": "futures_sink"
-            },
-            {
-              "id": "futures-util 0.3.21",
-              "target": "futures_util"
-            },
-            {
-              "id": "http 0.2.6",
-              "target": "http"
-            },
-            {
-              "id": "indexmap 1.8.0",
-              "target": "indexmap"
-            },
-            {
-              "id": "slab 0.4.5",
-              "target": "slab"
-            },
-            {
-              "id": "tokio 1.17.0",
-              "target": "tokio"
-            },
-            {
-              "id": "tokio-util 0.6.9",
-              "target": "tokio_util"
-            },
-            {
-              "id": "tracing 0.1.31",
-              "target": "tracing"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.11"
-      },
-      "license": "MIT"
-    },
-    "hashbrown 0.11.2": {
-      "name": "hashbrown",
-      "version": "0.11.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hashbrown/0.11.2/download",
-          "sha256": "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hashbrown",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hashbrown",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "raw"
-        ],
-        "edition": "2018",
-        "version": "0.11.2"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "hermit-abi 0.1.19": {
-      "name": "hermit-abi",
-      "version": "0.1.19",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download",
-          "sha256": "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hermit_abi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hermit_abi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.19"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "http 0.2.6": {
-      "name": "http",
-      "version": "0.2.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/http/0.2.6/download",
-          "sha256": "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "http",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "http",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "fnv 1.0.7",
-              "target": "fnv"
-            },
-            {
-              "id": "itoa 1.0.1",
-              "target": "itoa"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.6"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "http-body 0.4.4": {
-      "name": "http-body",
-      "version": "0.4.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/http-body/0.4.4/download",
-          "sha256": "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "http_body",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "http_body",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "http 0.2.6",
-              "target": "http"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.4.4"
-      },
-      "license": "MIT"
-    },
-    "http-range-header 0.3.0": {
-      "name": "http-range-header",
-      "version": "0.3.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/http-range-header/0.3.0/download",
-          "sha256": "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "http_range_header",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "http_range_header",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.3.0"
-      },
-      "license": "MIT"
-    },
-    "httparse 1.6.0": {
-      "name": "httparse",
-      "version": "1.6.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/httparse/1.6.0/download",
-          "sha256": "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "httparse",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "httparse",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "httparse 1.6.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "1.6.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "httpdate 1.0.2": {
-      "name": "httpdate",
-      "version": "1.0.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/httpdate/1.0.2/download",
-          "sha256": "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "httpdate",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "httpdate",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.2"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "hyper 0.14.17": {
-      "name": "hyper",
-      "version": "0.14.17",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/hyper/0.14.17/download",
-          "sha256": "043f0e083e9901b6cc658a77d1eb86f4fc650bbb977a4337dd63192826aa85dd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "hyper",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "hyper",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "client",
-          "default",
-          "full",
-          "h2",
-          "http1",
-          "http2",
-          "runtime",
-          "server",
-          "socket2",
-          "stream",
-          "tcp"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "futures-channel 0.3.21",
-              "target": "futures_channel"
-            },
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            },
-            {
-              "id": "futures-util 0.3.21",
-              "target": "futures_util"
-            },
-            {
-              "id": "h2 0.3.11",
-              "target": "h2"
-            },
-            {
-              "id": "http 0.2.6",
-              "target": "http"
-            },
-            {
-              "id": "http-body 0.4.4",
-              "target": "http_body"
-            },
-            {
-              "id": "httparse 1.6.0",
-              "target": "httparse"
-            },
-            {
-              "id": "httpdate 1.0.2",
-              "target": "httpdate"
-            },
-            {
-              "id": "itoa 1.0.1",
-              "target": "itoa"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            },
-            {
-              "id": "socket2 0.4.4",
-              "target": "socket2"
-            },
-            {
-              "id": "tokio 1.17.0",
-              "target": "tokio"
-            },
-            {
-              "id": "tower-service 0.3.1",
-              "target": "tower_service"
-            },
-            {
-              "id": "tracing 0.1.31",
-              "target": "tracing"
-            },
-            {
-              "id": "want 0.3.0",
-              "target": "want"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.14.17"
-      },
-      "license": "MIT"
-    },
-    "indexmap 1.8.0": {
-      "name": "indexmap",
-      "version": "1.8.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/indexmap/1.8.0/download",
-          "sha256": "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "indexmap",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "indexmap",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "hashbrown 0.11.2",
-              "target": "hashbrown"
-            },
-            {
-              "id": "indexmap 1.8.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.8.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "autocfg 1.1.0",
-              "target": "autocfg"
-            }
-          ],
-          "selects": {}
-        }
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "itoa 1.0.1": {
-      "name": "itoa",
-      "version": "1.0.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/itoa/1.0.1/download",
-          "sha256": "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "itoa",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "itoa",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "lazy_static 1.4.0": {
-      "name": "lazy_static",
-      "version": "1.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/lazy_static/1.4.0/download",
-          "sha256": "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "lazy_static",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "lazy_static",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.4.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "libc 0.2.119": {
-      "name": "libc",
-      "version": "0.2.119",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/libc/0.2.119/download",
-          "sha256": "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "libc",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "libc",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.2.119"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "lock_api 0.4.6": {
-      "name": "lock_api",
-      "version": "0.4.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/lock_api/0.4.6/download",
-          "sha256": "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "lock_api",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "lock_api",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "scopeguard 1.1.0",
-              "target": "scopeguard"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.4.6"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "log 0.4.14": {
-      "name": "log",
-      "version": "0.4.14",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/log/0.4.14/download",
-          "sha256": "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "log",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "log",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.14"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "matches 0.1.9": {
-      "name": "matches",
-      "version": "0.1.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/matches/0.1.9/download",
-          "sha256": "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "matches",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "matches",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.1.9"
-      },
-      "license": "MIT"
-    },
-    "matchit 0.4.6": {
-      "name": "matchit",
-      "version": "0.4.6",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/matchit/0.4.6/download",
-          "sha256": "9376a4f0340565ad675d11fc1419227faf5f60cd7ac9cb2e7185a471f30af833"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "matchit",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "matchit",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2018",
-        "version": "0.4.6"
-      },
-      "license": "MIT"
-    },
-    "memchr 2.4.1": {
-      "name": "memchr",
-      "version": "2.4.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/memchr/2.4.1/download",
-          "sha256": "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "memchr",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "memchr",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "memchr 2.4.1",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "2.4.1"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "Unlicense/MIT"
-    },
-    "mime 0.3.16": {
-      "name": "mime",
-      "version": "0.3.16",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/mime/0.3.16/download",
-          "sha256": "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "mime",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "mime",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.3.16"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "mio 0.8.0": {
-      "name": "mio",
-      "version": "0.8.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/mio/0.8.0/download",
-          "sha256": "ba272f85fa0b41fc91872be579b3bbe0f56b792aa361a380eb669469f68dafb2"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "mio",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "mio",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "net",
-          "os-ext",
-          "os-poll"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            }
-          ],
-          "selects": {
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "miow 0.3.7",
-                "target": "miow"
-              },
-              {
-                "id": "ntapi 0.3.7",
-                "target": "ntapi"
-              },
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.8.0"
-      },
-      "license": "MIT"
-    },
-    "miow 0.3.7": {
-      "name": "miow",
-      "version": "0.3.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/miow/0.3.7/download",
-          "sha256": "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "miow",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "miow",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi 0.3.9",
-              "target": "winapi"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.7"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "ntapi 0.3.7": {
-      "name": "ntapi",
-      "version": "0.3.7",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ntapi/0.3.7/download",
-          "sha256": "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ntapi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ntapi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "user"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "ntapi 0.3.7",
-              "target": "build_script_build"
-            },
-            {
-              "id": "winapi 0.3.9",
-              "target": "winapi"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.7"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "num_cpus 1.13.1": {
-      "name": "num_cpus",
-      "version": "1.13.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/num_cpus/1.13.1/download",
-          "sha256": "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "num_cpus",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "num_cpus",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [
-              {
-                "id": "hermit-abi 0.1.19",
-                "target": "hermit_abi"
-              }
-            ],
-            "cfg(not(windows))": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "1.13.1"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "once_cell 1.10.0": {
-      "name": "once_cell",
-      "version": "1.10.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/once_cell/1.10.0/download",
-          "sha256": "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "once_cell",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "once_cell",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "default",
-          "race",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "1.10.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "parking_lot 0.12.0": {
-      "name": "parking_lot",
-      "version": "0.12.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/parking_lot/0.12.0/download",
-          "sha256": "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "parking_lot",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "parking_lot",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "lock_api 0.4.6",
-              "target": "lock_api"
-            },
-            {
-              "id": "parking_lot_core 0.9.1",
-              "target": "parking_lot_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.12.0"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "parking_lot_core 0.9.1": {
-      "name": "parking_lot_core",
-      "version": "0.9.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/parking_lot_core/0.9.1/download",
-          "sha256": "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "parking_lot_core",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "parking_lot_core",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "parking_lot_core 0.9.1",
-              "target": "build_script_build"
-            },
-            {
-              "id": "smallvec 1.8.0",
-              "target": "smallvec"
-            }
-          ],
-          "selects": {
-            "cfg(target_os = \"redox\")": [
-              {
-                "id": "redox_syscall 0.2.11",
-                "target": "syscall"
-              }
-            ],
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "windows-sys 0.32.0",
-                "target": "windows_sys"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.9.1"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "percent-encoding 2.1.0": {
-      "name": "percent-encoding",
-      "version": "2.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/percent-encoding/2.1.0/download",
-          "sha256": "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "percent_encoding",
-            "crate_root": "lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "percent_encoding",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "2.1.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "pin-project 1.0.10": {
-      "name": "pin-project",
-      "version": "1.0.10",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pin-project/1.0.10/download",
-          "sha256": "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pin_project",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pin_project",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "pin-project-internal 1.0.10",
-              "target": "pin_project_internal"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "1.0.10"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "pin-project-internal 1.0.10": {
-      "name": "pin-project-internal",
-      "version": "1.0.10",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pin-project-internal/1.0.10/download",
-          "sha256": "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "pin_project_internal",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pin_project_internal",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.10"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "pin-project-lite 0.2.8": {
-      "name": "pin-project-lite",
-      "version": "0.2.8",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pin-project-lite/0.2.8/download",
-          "sha256": "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pin_project_lite",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pin_project_lite",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.2.8"
-      },
-      "license": "Apache-2.0 OR MIT"
-    },
-    "pin-utils 0.1.0": {
-      "name": "pin-utils",
-      "version": "0.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/pin-utils/0.1.0/download",
-          "sha256": "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "pin_utils",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "pin_utils",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.1.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "proc-macro2 1.0.36": {
-      "name": "proc-macro2",
-      "version": "1.0.36",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/proc-macro2/1.0.36/download",
-          "sha256": "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "proc_macro2",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "proc_macro2",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "proc-macro"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "build_script_build"
-            },
-            {
-              "id": "unicode-xid 0.2.2",
-              "target": "unicode_xid"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.36"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "quote 1.0.15": {
-      "name": "quote",
-      "version": "1.0.15",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/quote/1.0.15/download",
-          "sha256": "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "quote",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "quote",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "proc-macro"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.15"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "redox_syscall 0.2.11": {
-      "name": "redox_syscall",
-      "version": "0.2.11",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/redox_syscall/0.2.11/download",
-          "sha256": "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "syscall",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "syscall",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.11"
-      },
-      "license": "MIT"
-    },
-    "ryu 1.0.9": {
-      "name": "ryu",
-      "version": "1.0.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/ryu/1.0.9/download",
-          "sha256": "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "ryu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "ryu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.0.9"
-      },
-      "license": "Apache-2.0 OR BSL-1.0"
-    },
-    "scopeguard 1.1.0": {
-      "name": "scopeguard",
-      "version": "1.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/scopeguard/1.1.0/download",
-          "sha256": "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "scopeguard",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "scopeguard",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "1.1.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "serde 1.0.136": {
-      "name": "serde",
-      "version": "1.0.136",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/serde/1.0.136/download",
-          "sha256": "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "serde",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "serde",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "serde 1.0.136",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "1.0.136"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "serde_json 1.0.79": {
-      "name": "serde_json",
-      "version": "1.0.79",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/serde_json/1.0.79/download",
-          "sha256": "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "serde_json",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "serde_json",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "raw_value",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "itoa 1.0.1",
-              "target": "itoa"
-            },
-            {
-              "id": "ryu 1.0.9",
-              "target": "ryu"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            },
-            {
-              "id": "serde_json 1.0.79",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.79"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "serde_urlencoded 0.7.1": {
-      "name": "serde_urlencoded",
-      "version": "0.7.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/serde_urlencoded/0.7.1/download",
-          "sha256": "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "serde_urlencoded",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "serde_urlencoded",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "form_urlencoded 1.0.1",
-              "target": "form_urlencoded"
-            },
-            {
-              "id": "itoa 1.0.1",
-              "target": "itoa"
-            },
-            {
-              "id": "ryu 1.0.9",
-              "target": "ryu"
-            },
-            {
-              "id": "serde 1.0.136",
-              "target": "serde"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.7.1"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "sharded-slab 0.1.4": {
-      "name": "sharded-slab",
-      "version": "0.1.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/sharded-slab/0.1.4/download",
-          "sha256": "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "sharded_slab",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "sharded_slab",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.4"
-      },
-      "license": "MIT"
-    },
-    "signal-hook-registry 1.4.0": {
-      "name": "signal-hook-registry",
-      "version": "1.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/signal-hook-registry/1.4.0/download",
-          "sha256": "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "signal_hook_registry",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "signal_hook_registry",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "libc 0.2.119",
-              "target": "libc"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "1.4.0"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "slab 0.4.5": {
-      "name": "slab",
-      "version": "0.4.5",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/slab/0.4.5/download",
-          "sha256": "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "slab",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "slab",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "std"
-        ],
-        "edition": "2018",
-        "version": "0.4.5"
-      },
-      "license": "MIT"
-    },
-    "smallvec 1.8.0": {
-      "name": "smallvec",
-      "version": "1.8.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/smallvec/1.8.0/download",
-          "sha256": "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "smallvec",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "smallvec",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "1.8.0"
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "socket2 0.4.4": {
-      "name": "socket2",
-      "version": "0.4.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/socket2/0.4.4/download",
-          "sha256": "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "socket2",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "socket2",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "all"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.4.4"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "syn 1.0.86": {
-      "name": "syn",
-      "version": "1.0.86",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/syn/1.0.86/download",
-          "sha256": "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "syn",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "syn",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "clone-impls",
-          "default",
-          "derive",
-          "extra-traits",
-          "full",
-          "parsing",
-          "printing",
-          "proc-macro",
-          "quote",
-          "visit",
-          "visit-mut"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "build_script_build"
-            },
-            {
-              "id": "unicode-xid 0.2.2",
-              "target": "unicode_xid"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.0.86"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "sync_wrapper 0.1.1": {
-      "name": "sync_wrapper",
-      "version": "0.1.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/sync_wrapper/0.1.1/download",
-          "sha256": "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "sync_wrapper",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "sync_wrapper",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.1.1"
-      },
-      "license": "Apache-2.0"
-    },
-    "thread_local 1.1.4": {
-      "name": "thread_local",
-      "version": "1.1.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/thread_local/1.1.4/download",
-          "sha256": "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "thread_local",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "thread_local",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "once_cell 1.10.0",
-              "target": "once_cell"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.1.4"
-      },
-      "license": "Apache-2.0/MIT"
-    },
-    "tokio 1.17.0": {
-      "name": "tokio",
-      "version": "1.17.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tokio/1.17.0/download",
-          "sha256": "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tokio",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tokio",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "bytes",
-          "default",
-          "fs",
-          "full",
-          "io-std",
-          "io-util",
-          "libc",
-          "macros",
-          "memchr",
-          "mio",
-          "net",
-          "num_cpus",
-          "once_cell",
-          "parking_lot",
-          "process",
-          "rt",
-          "rt-multi-thread",
-          "signal",
-          "signal-hook-registry",
-          "socket2",
-          "sync",
-          "time",
-          "tokio-macros",
-          "winapi"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "memchr 2.4.1",
-              "target": "memchr"
-            },
-            {
-              "id": "mio 0.8.0",
-              "target": "mio"
-            },
-            {
-              "id": "num_cpus 1.13.1",
-              "target": "num_cpus"
-            },
-            {
-              "id": "once_cell 1.10.0",
-              "target": "once_cell"
-            },
-            {
-              "id": "parking_lot 0.12.0",
-              "target": "parking_lot"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            },
-            {
-              "id": "socket2 0.4.4",
-              "target": "socket2"
-            }
-          ],
-          "selects": {
-            "cfg(unix)": [
-              {
-                "id": "libc 0.2.119",
-                "target": "libc"
-              },
-              {
-                "id": "signal-hook-registry 1.4.0",
-                "target": "signal_hook_registry"
-              }
-            ],
-            "cfg(windows)": [
-              {
-                "id": "winapi 0.3.9",
-                "target": "winapi"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "tokio-macros 1.7.0",
-              "target": "tokio_macros"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "1.17.0"
-      },
-      "license": "MIT"
-    },
-    "tokio-macros 1.7.0": {
-      "name": "tokio-macros",
-      "version": "1.7.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tokio-macros/1.7.0/download",
-          "sha256": "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "tokio_macros",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tokio_macros",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "1.7.0"
-      },
-      "license": "MIT"
-    },
-    "tokio-util 0.6.9": {
-      "name": "tokio-util",
-      "version": "0.6.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tokio-util/0.6.9/download",
-          "sha256": "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tokio_util",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tokio_util",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "codec",
-          "default"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            },
-            {
-              "id": "futures-sink 0.3.21",
-              "target": "futures_sink"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            },
-            {
-              "id": "tokio 1.17.0",
-              "target": "tokio"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.6.9"
-      },
-      "license": "MIT"
-    },
-    "tokio-util 0.7.0": {
-      "name": "tokio-util",
-      "version": "0.7.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tokio-util/0.7.0/download",
-          "sha256": "64910e1b9c1901aaf5375561e35b9c057d95ff41a44ede043a03e09279eabaf1"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tokio_util",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tokio_util",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            },
-            {
-              "id": "futures-sink 0.3.21",
-              "target": "futures_sink"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            },
-            {
-              "id": "tokio 1.17.0",
-              "target": "tokio"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.7.0"
-      },
-      "license": "MIT"
-    },
-    "tower 0.4.12": {
-      "name": "tower",
-      "version": "0.4.12",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tower/0.4.12/download",
-          "sha256": "9a89fd63ad6adf737582df5db40d286574513c69a11dac5214dc3b5603d6713e"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tower",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tower",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "__common",
-          "buffer",
-          "default",
-          "futures-core",
-          "futures-util",
-          "log",
-          "make",
-          "pin-project",
-          "pin-project-lite",
-          "tokio",
-          "tokio-util",
-          "tracing",
-          "util"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            },
-            {
-              "id": "futures-util 0.3.21",
-              "target": "futures_util"
-            },
-            {
-              "id": "pin-project 1.0.10",
-              "target": "pin_project"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            },
-            {
-              "id": "tokio 1.17.0",
-              "target": "tokio"
-            },
-            {
-              "id": "tokio-util 0.7.0",
-              "target": "tokio_util"
-            },
-            {
-              "id": "tower-layer 0.3.1",
-              "target": "tower_layer"
-            },
-            {
-              "id": "tower-service 0.3.1",
-              "target": "tower_service"
-            },
-            {
-              "id": "tracing 0.1.31",
-              "target": "tracing"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.4.12"
-      },
-      "license": "MIT"
-    },
-    "tower-http 0.2.4": {
-      "name": "tower-http",
-      "version": "0.2.4",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tower-http/0.2.4/download",
-          "sha256": "90c125fdea84614a4368fd35786b51d0682ab8d42705e061e92f0b955dea40fb"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tower_http",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tower_http",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "map-response-body",
-          "tower",
-          "trace",
-          "tracing",
-          "util"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "bitflags 1.3.2",
-              "target": "bitflags"
-            },
-            {
-              "id": "bytes 1.1.0",
-              "target": "bytes"
-            },
-            {
-              "id": "futures-core 0.3.21",
-              "target": "futures_core"
-            },
-            {
-              "id": "futures-util 0.3.21",
-              "target": "futures_util"
-            },
-            {
-              "id": "http 0.2.6",
-              "target": "http"
-            },
-            {
-              "id": "http-body 0.4.4",
-              "target": "http_body"
-            },
-            {
-              "id": "http-range-header 0.3.0",
-              "target": "http_range_header"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            },
-            {
-              "id": "tower 0.4.12",
-              "target": "tower"
-            },
-            {
-              "id": "tower-layer 0.3.1",
-              "target": "tower_layer"
-            },
-            {
-              "id": "tower-service 0.3.1",
-              "target": "tower_service"
-            },
-            {
-              "id": "tracing 0.1.31",
-              "target": "tracing"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.2.4"
-      },
-      "license": "MIT"
-    },
-    "tower-layer 0.3.1": {
-      "name": "tower-layer",
-      "version": "0.3.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tower-layer/0.3.1/download",
-          "sha256": "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tower_layer",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tower_layer",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.3.1"
-      },
-      "license": "MIT"
-    },
-    "tower-service 0.3.1": {
-      "name": "tower-service",
-      "version": "0.3.1",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tower-service/0.3.1/download",
-          "sha256": "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tower_service",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tower_service",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2018",
-        "version": "0.3.1"
-      },
-      "license": "MIT"
-    },
-    "tracing 0.1.31": {
-      "name": "tracing",
-      "version": "0.1.31",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tracing/0.1.31/download",
-          "sha256": "f6c650a8ef0cd2dd93736f033d21cbd1224c5a967aa0c258d00fcf7dafef9b9f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tracing",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tracing",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "attributes",
-          "default",
-          "log",
-          "std",
-          "tracing-attributes"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "cfg-if 1.0.0",
-              "target": "cfg_if"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "pin-project-lite 0.2.8",
-              "target": "pin_project_lite"
-            },
-            {
-              "id": "tracing-core 0.1.22",
-              "target": "tracing_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "proc_macro_deps": {
-          "common": [
-            {
-              "id": "tracing-attributes 0.1.19",
-              "target": "tracing_attributes"
-            }
-          ],
-          "selects": {}
-        },
-        "version": "0.1.31"
-      },
-      "license": "MIT"
-    },
-    "tracing-attributes 0.1.19": {
-      "name": "tracing-attributes",
-      "version": "0.1.19",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tracing-attributes/0.1.19/download",
-          "sha256": "8276d9a4a3a558d7b7ad5303ad50b53d58264641b82914b7ada36bd762e7a716"
-        }
-      },
-      "targets": [
-        {
-          "ProcMacro": {
-            "crate_name": "tracing_attributes",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tracing_attributes",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "proc-macro2 1.0.36",
-              "target": "proc_macro2"
-            },
-            {
-              "id": "quote 1.0.15",
-              "target": "quote"
-            },
-            {
-              "id": "syn 1.0.86",
-              "target": "syn"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.19"
-      },
-      "license": "MIT"
-    },
-    "tracing-core 0.1.22": {
-      "name": "tracing-core",
-      "version": "0.1.22",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tracing-core/0.1.22/download",
-          "sha256": "03cfcb51380632a72d3111cb8d3447a8d908e577d31beeac006f836383d29a23"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tracing_core",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tracing_core",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default",
-          "lazy_static",
-          "std",
-          "valuable"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            }
-          ],
-          "selects": {
-            "cfg(tracing_unstable)": [
-              {
-                "id": "valuable 0.1.0",
-                "target": "valuable"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.1.22"
-      },
-      "license": "MIT"
-    },
-    "tracing-log 0.1.2": {
-      "name": "tracing-log",
-      "version": "0.1.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tracing-log/0.1.2/download",
-          "sha256": "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tracing_log",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tracing_log",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "log-tracer",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "lazy_static 1.4.0",
-              "target": "lazy_static"
-            },
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "tracing-core 0.1.22",
-              "target": "tracing_core"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.2"
-      },
-      "license": "MIT"
-    },
-    "tracing-subscriber 0.3.9": {
-      "name": "tracing-subscriber",
-      "version": "0.3.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/tracing-subscriber/0.3.9/download",
-          "sha256": "9e0ab7bdc962035a87fba73f3acca9b8a8d0034c2e6f60b84aeaaddddc155dce"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "tracing_subscriber",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "tracing_subscriber",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "ansi",
-          "ansi_term",
-          "default",
-          "fmt",
-          "registry",
-          "sharded-slab",
-          "smallvec",
-          "std",
-          "thread_local",
-          "tracing-log"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "ansi_term 0.12.1",
-              "target": "ansi_term"
-            },
-            {
-              "id": "sharded-slab 0.1.4",
-              "target": "sharded_slab"
-            },
-            {
-              "id": "smallvec 1.8.0",
-              "target": "smallvec"
-            },
-            {
-              "id": "thread_local 1.1.4",
-              "target": "thread_local"
-            },
-            {
-              "id": "tracing-core 0.1.22",
-              "target": "tracing_core"
-            },
-            {
-              "id": "tracing-log 0.1.2",
-              "target": "tracing_log"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.9"
-      },
-      "license": "MIT"
-    },
-    "try-lock 0.2.3": {
-      "name": "try-lock",
-      "version": "0.2.3",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/try-lock/0.2.3/download",
-          "sha256": "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "try_lock",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "try_lock",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "edition": "2015",
-        "version": "0.2.3"
-      },
-      "license": "MIT"
-    },
-    "unicode-xid 0.2.2": {
-      "name": "unicode-xid",
-      "version": "0.2.2",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/unicode-xid/0.2.2/download",
-          "sha256": "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "unicode_xid",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "unicode_xid",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "default"
-        ],
-        "edition": "2015",
-        "version": "0.2.2"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "valuable 0.1.0": {
-      "name": "valuable",
-      "version": "0.1.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/valuable/0.1.0/download",
-          "sha256": "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "valuable",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "valuable",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "alloc",
-          "std"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "valuable 0.1.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.1.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT"
-    },
-    "want 0.3.0": {
-      "name": "want",
-      "version": "0.3.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/want/0.3.0/download",
-          "sha256": "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "want",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "want",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "log 0.4.14",
-              "target": "log"
-            },
-            {
-              "id": "try-lock 0.2.3",
-              "target": "try_lock"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.3.0"
-      },
-      "license": "MIT"
-    },
-    "winapi 0.3.9": {
-      "name": "winapi",
-      "version": "0.3.9",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download",
-          "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "cfg",
-          "consoleapi",
-          "errhandlingapi",
-          "evntrace",
-          "fileapi",
-          "handleapi",
-          "in6addr",
-          "inaddr",
-          "ioapiset",
-          "minwinbase",
-          "minwindef",
-          "mswsock",
-          "namedpipeapi",
-          "ntdef",
-          "ntsecapi",
-          "processenv",
-          "std",
-          "synchapi",
-          "threadpoollegacyapiset",
-          "windef",
-          "winerror",
-          "winioctl",
-          "winsock2",
-          "ws2def",
-          "ws2ipdef",
-          "ws2tcpip"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi 0.3.9",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {
-            "i686-pc-windows-gnu": [
-              {
-                "id": "winapi-i686-pc-windows-gnu 0.4.0",
-                "target": "winapi_i686_pc_windows_gnu"
-              }
-            ],
-            "x86_64-pc-windows-gnu": [
-              {
-                "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
-                "target": "winapi_x86_64_pc_windows_gnu"
-              }
-            ]
-          }
-        },
-        "edition": "2015",
-        "version": "0.3.9"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "winapi-i686-pc-windows-gnu 0.4.0": {
-      "name": "winapi-i686-pc-windows-gnu",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
-          "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_i686_pc_windows_gnu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_i686_pc_windows_gnu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi-i686-pc-windows-gnu 0.4.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "winapi-x86_64-pc-windows-gnu 0.4.0": {
-      "name": "winapi-x86_64-pc-windows-gnu",
-      "version": "0.4.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
-          "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "winapi_x86_64_pc_windows_gnu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "winapi_x86_64_pc_windows_gnu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2015",
-        "version": "0.4.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT/Apache-2.0"
-    },
-    "windows-sys 0.32.0": {
-      "name": "windows-sys",
-      "version": "0.32.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/windows-sys/0.32.0/download",
-          "sha256": "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "windows_sys",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "windows_sys",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "crate_features": [
-          "Win32",
-          "Win32_Foundation",
-          "Win32_System",
-          "Win32_System_LibraryLoader",
-          "Win32_System_SystemServices",
-          "Win32_System_WindowsProgramming",
-          "default"
-        ],
-        "deps": {
-          "common": [],
-          "selects": {
-            "aarch64-pc-windows-msvc": [
-              {
-                "id": "windows_aarch64_msvc 0.32.0",
-                "target": "windows_aarch64_msvc"
-              }
-            ],
-            "aarch64-uwp-windows-msvc": [
-              {
-                "id": "windows_aarch64_msvc 0.32.0",
-                "target": "windows_aarch64_msvc"
-              }
-            ],
-            "i686-pc-windows-gnu": [
-              {
-                "id": "windows_i686_gnu 0.32.0",
-                "target": "windows_i686_gnu"
-              }
-            ],
-            "i686-pc-windows-msvc": [
-              {
-                "id": "windows_i686_msvc 0.32.0",
-                "target": "windows_i686_msvc"
-              }
-            ],
-            "i686-uwp-windows-gnu": [
-              {
-                "id": "windows_i686_gnu 0.32.0",
-                "target": "windows_i686_gnu"
-              }
-            ],
-            "i686-uwp-windows-msvc": [
-              {
-                "id": "windows_i686_msvc 0.32.0",
-                "target": "windows_i686_msvc"
-              }
-            ],
-            "x86_64-pc-windows-gnu": [
-              {
-                "id": "windows_x86_64_gnu 0.32.0",
-                "target": "windows_x86_64_gnu"
-              }
-            ],
-            "x86_64-pc-windows-msvc": [
-              {
-                "id": "windows_x86_64_msvc 0.32.0",
-                "target": "windows_x86_64_msvc"
-              }
-            ],
-            "x86_64-uwp-windows-gnu": [
-              {
-                "id": "windows_x86_64_gnu 0.32.0",
-                "target": "windows_x86_64_gnu"
-              }
-            ],
-            "x86_64-uwp-windows-msvc": [
-              {
-                "id": "windows_x86_64_msvc 0.32.0",
-                "target": "windows_x86_64_msvc"
-              }
-            ]
-          }
-        },
-        "edition": "2018",
-        "version": "0.32.0"
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "windows_aarch64_msvc 0.32.0": {
-      "name": "windows_aarch64_msvc",
-      "version": "0.32.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/windows_aarch64_msvc/0.32.0/download",
-          "sha256": "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "windows_aarch64_msvc",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "windows_aarch64_msvc",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "windows_aarch64_msvc 0.32.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.32.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "windows_i686_gnu 0.32.0": {
-      "name": "windows_i686_gnu",
-      "version": "0.32.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/windows_i686_gnu/0.32.0/download",
-          "sha256": "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "windows_i686_gnu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "windows_i686_gnu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "windows_i686_gnu 0.32.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.32.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "windows_i686_msvc 0.32.0": {
-      "name": "windows_i686_msvc",
-      "version": "0.32.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/windows_i686_msvc/0.32.0/download",
-          "sha256": "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "windows_i686_msvc",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "windows_i686_msvc",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "windows_i686_msvc 0.32.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.32.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "windows_x86_64_gnu 0.32.0": {
-      "name": "windows_x86_64_gnu",
-      "version": "0.32.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/windows_x86_64_gnu/0.32.0/download",
-          "sha256": "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "windows_x86_64_gnu",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "windows_x86_64_gnu",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "windows_x86_64_gnu 0.32.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.32.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    },
-    "windows_x86_64_msvc 0.32.0": {
-      "name": "windows_x86_64_msvc",
-      "version": "0.32.0",
-      "repository": {
-        "Http": {
-          "url": "https://crates.io/api/v1/crates/windows_x86_64_msvc/0.32.0/download",
-          "sha256": "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316"
-        }
-      },
-      "targets": [
-        {
-          "Library": {
-            "crate_name": "windows_x86_64_msvc",
-            "crate_root": "src/lib.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        },
-        {
-          "BuildScript": {
-            "crate_name": "build_script_build",
-            "crate_root": "build.rs",
-            "srcs": {
-              "include": [
-                "**/*.rs"
-              ],
-              "exclude": []
-            }
-          }
-        }
-      ],
-      "library_target_name": "windows_x86_64_msvc",
-      "common_attrs": {
-        "compile_data_glob": [
-          "**"
-        ],
-        "deps": {
-          "common": [
-            {
-              "id": "windows_x86_64_msvc 0.32.0",
-              "target": "build_script_build"
-            }
-          ],
-          "selects": {}
-        },
-        "edition": "2018",
-        "version": "0.32.0"
-      },
-      "build_script_attrs": {
-        "data_glob": [
-          "**"
-        ]
-      },
-      "license": "MIT OR Apache-2.0"
-    }
-  },
-  "binary_crates": [],
-  "workspace_members": {
-    "direct-cargo-bazel-deps 0.0.1": ""
-  },
-  "conditions": {
-    "aarch64-pc-windows-msvc": [],
-    "aarch64-uwp-windows-msvc": [],
-    "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [],
-    "cfg(not(windows))": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "wasm32-unknown-unknown",
-      "wasm32-wasi",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(target_os = \"redox\")": [],
-    "cfg(target_os = \"windows\")": [
-      "i686-pc-windows-msvc",
-      "x86_64-pc-windows-msvc"
-    ],
-    "cfg(tracing_unstable)": [],
-    "cfg(unix)": [
-      "aarch64-apple-darwin",
-      "aarch64-apple-ios",
-      "aarch64-linux-android",
-      "aarch64-unknown-linux-gnu",
-      "arm-unknown-linux-gnueabi",
-      "armv7-unknown-linux-gnueabi",
-      "i686-apple-darwin",
-      "i686-linux-android",
-      "i686-unknown-freebsd",
-      "i686-unknown-linux-gnu",
-      "powerpc-unknown-linux-gnu",
-      "s390x-unknown-linux-gnu",
-      "x86_64-apple-darwin",
-      "x86_64-apple-ios",
-      "x86_64-linux-android",
-      "x86_64-unknown-freebsd",
-      "x86_64-unknown-linux-gnu"
-    ],
-    "cfg(windows)": [
-      "i686-pc-windows-msvc",
-      "x86_64-pc-windows-msvc"
-    ],
-    "i686-pc-windows-gnu": [],
-    "i686-pc-windows-msvc": [
-      "i686-pc-windows-msvc"
-    ],
-    "i686-uwp-windows-gnu": [],
-    "i686-uwp-windows-msvc": [],
-    "x86_64-pc-windows-gnu": [],
-    "x86_64-pc-windows-msvc": [
-      "x86_64-pc-windows-msvc"
-    ],
-    "x86_64-uwp-windows-gnu": [],
-    "x86_64-uwp-windows-msvc": []
-  }
-}
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "axum"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9f346c92c1e9a71d14fe4aaf7c2a5d9932cc4e5e48d8fb6641524416eb79ddd"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bitflags",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "sync_wrapper",
+ "tokio",
+ "tower",
+ "tower-http",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dbcda393bef9c87572779cb8ef916f12d77750b27535dd6819fa86591627a51"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bytes"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "direct-cargo-bazel-deps"
+version = "0.0.1"
+dependencies = [
+ "axum",
+ "hyper",
+ "mime",
+ "serde_json",
+ "tokio",
+ "tower",
+ "tower-http",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+dependencies = [
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868"
+
+[[package]]
+name = "futures-task"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
+
+[[package]]
+name = "futures-util"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "pin-project-lite",
+ "pin-utils",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "http"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "http-range-header"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29"
+
+[[package]]
+name = "httparse"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42dc3c131584288d375f2d07f822b0cb012d8c6fb899a5b9fdb3cb7eb9b6004f"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "lock_api"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "matchit"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9376a4f0340565ad675d11fc1419227faf5f60cd7ac9cb2e7185a471f30af833"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "mio"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "pin-project"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78203e83c48cffbe01e4a2d35d566ca4de445d79a85372fc64e378bfc812a260"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "710faf75e1b33345361201d36d04e98ac1ed8909151a017ed384700836104c74"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "serde"
+version = "1.0.138"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47"
+
+[[package]]
+name = "serde_json"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
+
+[[package]]
+name = "smallvec"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
+
+[[package]]
+name = "socket2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.98"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8"
+
+[[package]]
+name = "thread_local"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tokio"
+version = "1.19.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439"
+dependencies = [
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "once_cell",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "winapi",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-http"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aba3f3efabf7fb41fae8534fc20a817013dd1c12cb45441efb6c82e6556b4cd8"
+dependencies = [
+ "bitflags",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "http-range-header",
+ "pin-project-lite",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62"
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160"
+dependencies = [
+ "cfg-if",
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a713421342a5a666b7577783721d3117f1b69a393df803ee17bb73b1e122a59"
+dependencies = [
+ "ansi_term",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
diff --git a/third_party/rules_rust/examples/crate_universe/no_cargo_manifests/cargo-bazel-lock.json b/third_party/rules_rust/examples/crate_universe/no_cargo_manifests/cargo-bazel-lock.json
new file mode 100644
index 0000000..03692c0
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/no_cargo_manifests/cargo-bazel-lock.json
@@ -0,0 +1,4924 @@
+{
+  "checksum": "4b51399cb949606e8decd4492f40694118346c25f81e405088c43eecdc9b54ad",
+  "crates": {
+    "ansi_term 0.12.1": {
+      "name": "ansi_term",
+      "version": "0.12.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/ansi_term/0.12.1/download",
+          "sha256": "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "ansi_term",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "ansi_term",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [],
+          "selects": {
+            "cfg(target_os = \"windows\")": [
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2015",
+        "version": "0.12.1"
+      },
+      "license": "MIT"
+    },
+    "async-trait 0.1.56": {
+      "name": "async-trait",
+      "version": "0.1.56",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/async-trait/0.1.56/download",
+          "sha256": "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "async_trait",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "async_trait",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "async-trait 0.1.56",
+              "target": "build_script_build"
+            },
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.56"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "autocfg 1.1.0": {
+      "name": "autocfg",
+      "version": "1.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/autocfg/1.1.0/download",
+          "sha256": "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "autocfg",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "autocfg",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "1.1.0"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "axum 0.4.8": {
+      "name": "axum",
+      "version": "0.4.8",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/axum/0.4.8/download",
+          "sha256": "c9f346c92c1e9a71d14fe4aaf7c2a5d9932cc4e5e48d8fb6641524416eb79ddd"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "axum",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "axum",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**",
+          "**/*.md"
+        ],
+        "crate_features": [
+          "default",
+          "http1",
+          "json",
+          "serde_json",
+          "tower-log"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "axum-core 0.1.2",
+              "target": "axum_core"
+            },
+            {
+              "id": "bitflags 1.3.2",
+              "target": "bitflags"
+            },
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "futures-util 0.3.21",
+              "target": "futures_util"
+            },
+            {
+              "id": "http 0.2.8",
+              "target": "http"
+            },
+            {
+              "id": "http-body 0.4.5",
+              "target": "http_body"
+            },
+            {
+              "id": "hyper 0.14.19",
+              "target": "hyper"
+            },
+            {
+              "id": "matchit 0.4.6",
+              "target": "matchit"
+            },
+            {
+              "id": "memchr 2.5.0",
+              "target": "memchr"
+            },
+            {
+              "id": "mime 0.3.16",
+              "target": "mime"
+            },
+            {
+              "id": "percent-encoding 2.1.0",
+              "target": "percent_encoding"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            },
+            {
+              "id": "serde 1.0.138",
+              "target": "serde"
+            },
+            {
+              "id": "serde_json 1.0.82",
+              "target": "serde_json"
+            },
+            {
+              "id": "serde_urlencoded 0.7.1",
+              "target": "serde_urlencoded"
+            },
+            {
+              "id": "sync_wrapper 0.1.1",
+              "target": "sync_wrapper"
+            },
+            {
+              "id": "tokio 1.19.2",
+              "target": "tokio"
+            },
+            {
+              "id": "tower 0.4.13",
+              "target": "tower"
+            },
+            {
+              "id": "tower-http 0.2.5",
+              "target": "tower_http"
+            },
+            {
+              "id": "tower-layer 0.3.1",
+              "target": "tower_layer"
+            },
+            {
+              "id": "tower-service 0.3.2",
+              "target": "tower_service"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "async-trait 0.1.56",
+              "target": "async_trait"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "0.4.8"
+      },
+      "license": "MIT"
+    },
+    "axum-core 0.1.2": {
+      "name": "axum-core",
+      "version": "0.1.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/axum-core/0.1.2/download",
+          "sha256": "6dbcda393bef9c87572779cb8ef916f12d77750b27535dd6819fa86591627a51"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "axum_core",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "axum_core",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "futures-util 0.3.21",
+              "target": "futures_util"
+            },
+            {
+              "id": "http 0.2.8",
+              "target": "http"
+            },
+            {
+              "id": "http-body 0.4.5",
+              "target": "http_body"
+            },
+            {
+              "id": "mime 0.3.16",
+              "target": "mime"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "async-trait 0.1.56",
+              "target": "async_trait"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "0.1.2"
+      },
+      "license": "MIT"
+    },
+    "bitflags 1.3.2": {
+      "name": "bitflags",
+      "version": "1.3.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download",
+          "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "bitflags",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "bitflags",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "edition": "2018",
+        "version": "1.3.2"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "bytes 1.1.0": {
+      "name": "bytes",
+      "version": "1.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/bytes/1.1.0/download",
+          "sha256": "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "bytes",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "bytes",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "1.1.0"
+      },
+      "license": "MIT"
+    },
+    "cfg-if 1.0.0": {
+      "name": "cfg-if",
+      "version": "1.0.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
+          "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "cfg_if",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "cfg_if",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.0.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "direct-cargo-bazel-deps 0.0.1": {
+      "name": "direct-cargo-bazel-deps",
+      "version": "0.0.1",
+      "repository": null,
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "direct_cargo_bazel_deps",
+            "crate_root": ".direct_cargo_bazel_deps.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "direct_cargo_bazel_deps",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "axum 0.4.8",
+              "target": "axum"
+            },
+            {
+              "id": "hyper 0.14.19",
+              "target": "hyper"
+            },
+            {
+              "id": "mime 0.3.16",
+              "target": "mime"
+            },
+            {
+              "id": "serde_json 1.0.82",
+              "target": "serde_json"
+            },
+            {
+              "id": "tokio 1.19.2",
+              "target": "tokio"
+            },
+            {
+              "id": "tower 0.4.13",
+              "target": "tower"
+            },
+            {
+              "id": "tower-http 0.2.5",
+              "target": "tower_http"
+            },
+            {
+              "id": "tracing 0.1.35",
+              "target": "tracing"
+            },
+            {
+              "id": "tracing-subscriber 0.3.14",
+              "target": "tracing_subscriber"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.0.1"
+      },
+      "license": null
+    },
+    "fnv 1.0.7": {
+      "name": "fnv",
+      "version": "1.0.7",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/fnv/1.0.7/download",
+          "sha256": "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "fnv",
+            "crate_root": "lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "fnv",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "edition": "2015",
+        "version": "1.0.7"
+      },
+      "license": "Apache-2.0 / MIT"
+    },
+    "form_urlencoded 1.0.1": {
+      "name": "form_urlencoded",
+      "version": "1.0.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/form_urlencoded/1.0.1/download",
+          "sha256": "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "form_urlencoded",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "form_urlencoded",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "matches 0.1.9",
+              "target": "matches"
+            },
+            {
+              "id": "percent-encoding 2.1.0",
+              "target": "percent_encoding"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.1"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "futures-channel 0.3.21": {
+      "name": "futures-channel",
+      "version": "0.3.21",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/futures-channel/0.3.21/download",
+          "sha256": "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "futures_channel",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "futures_channel",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "futures-channel 0.3.21",
+              "target": "build_script_build"
+            },
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.21"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "futures-core 0.3.21": {
+      "name": "futures-core",
+      "version": "0.3.21",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/futures-core/0.3.21/download",
+          "sha256": "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "futures_core",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "futures_core",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "futures-core 0.3.21",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.21"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "futures-sink 0.3.21": {
+      "name": "futures-sink",
+      "version": "0.3.21",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/futures-sink/0.3.21/download",
+          "sha256": "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "futures_sink",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "futures_sink",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "default",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "0.3.21"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "futures-task 0.3.21": {
+      "name": "futures-task",
+      "version": "0.3.21",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/futures-task/0.3.21/download",
+          "sha256": "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "futures_task",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "futures_task",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "futures-task 0.3.21",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.21"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "futures-util 0.3.21": {
+      "name": "futures-util",
+      "version": "0.3.21",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/futures-util/0.3.21/download",
+          "sha256": "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "futures_util",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "futures_util",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            },
+            {
+              "id": "futures-task 0.3.21",
+              "target": "futures_task"
+            },
+            {
+              "id": "futures-util 0.3.21",
+              "target": "build_script_build"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            },
+            {
+              "id": "pin-utils 0.1.0",
+              "target": "pin_utils"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.21"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "h2 0.3.13": {
+      "name": "h2",
+      "version": "0.3.13",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/h2/0.3.13/download",
+          "sha256": "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "h2",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "h2",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "fnv 1.0.7",
+              "target": "fnv"
+            },
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            },
+            {
+              "id": "futures-sink 0.3.21",
+              "target": "futures_sink"
+            },
+            {
+              "id": "futures-util 0.3.21",
+              "target": "futures_util"
+            },
+            {
+              "id": "http 0.2.8",
+              "target": "http"
+            },
+            {
+              "id": "indexmap 1.9.1",
+              "target": "indexmap"
+            },
+            {
+              "id": "slab 0.4.6",
+              "target": "slab"
+            },
+            {
+              "id": "tokio 1.19.2",
+              "target": "tokio"
+            },
+            {
+              "id": "tokio-util 0.7.3",
+              "target": "tokio_util"
+            },
+            {
+              "id": "tracing 0.1.35",
+              "target": "tracing"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.13"
+      },
+      "license": "MIT"
+    },
+    "hashbrown 0.12.1": {
+      "name": "hashbrown",
+      "version": "0.12.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/hashbrown/0.12.1/download",
+          "sha256": "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "hashbrown",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "hashbrown",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "raw"
+        ],
+        "edition": "2021",
+        "version": "0.12.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "hermit-abi 0.1.19": {
+      "name": "hermit-abi",
+      "version": "0.1.19",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download",
+          "sha256": "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "hermit_abi",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "hermit_abi",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "libc 0.2.126",
+              "target": "libc"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.19"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "http 0.2.8": {
+      "name": "http",
+      "version": "0.2.8",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/http/0.2.8/download",
+          "sha256": "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "http",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "http",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "fnv 1.0.7",
+              "target": "fnv"
+            },
+            {
+              "id": "itoa 1.0.2",
+              "target": "itoa"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.2.8"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "http-body 0.4.5": {
+      "name": "http-body",
+      "version": "0.4.5",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/http-body/0.4.5/download",
+          "sha256": "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "http_body",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "http_body",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "http 0.2.8",
+              "target": "http"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.4.5"
+      },
+      "license": "MIT"
+    },
+    "http-range-header 0.3.0": {
+      "name": "http-range-header",
+      "version": "0.3.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/http-range-header/0.3.0/download",
+          "sha256": "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "http_range_header",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "http_range_header",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.3.0"
+      },
+      "license": "MIT"
+    },
+    "httparse 1.7.1": {
+      "name": "httparse",
+      "version": "1.7.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/httparse/1.7.1/download",
+          "sha256": "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "httparse",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "httparse",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "httparse 1.7.1",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "1.7.1"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "httpdate 1.0.2": {
+      "name": "httpdate",
+      "version": "1.0.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/httpdate/1.0.2/download",
+          "sha256": "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "httpdate",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "httpdate",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.0.2"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "hyper 0.14.19": {
+      "name": "hyper",
+      "version": "0.14.19",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/hyper/0.14.19/download",
+          "sha256": "42dc3c131584288d375f2d07f822b0cb012d8c6fb899a5b9fdb3cb7eb9b6004f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "hyper",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "hyper",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "client",
+          "default",
+          "full",
+          "h2",
+          "http1",
+          "http2",
+          "runtime",
+          "server",
+          "socket2",
+          "stream",
+          "tcp"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "futures-channel 0.3.21",
+              "target": "futures_channel"
+            },
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            },
+            {
+              "id": "futures-util 0.3.21",
+              "target": "futures_util"
+            },
+            {
+              "id": "h2 0.3.13",
+              "target": "h2"
+            },
+            {
+              "id": "http 0.2.8",
+              "target": "http"
+            },
+            {
+              "id": "http-body 0.4.5",
+              "target": "http_body"
+            },
+            {
+              "id": "httparse 1.7.1",
+              "target": "httparse"
+            },
+            {
+              "id": "httpdate 1.0.2",
+              "target": "httpdate"
+            },
+            {
+              "id": "itoa 1.0.2",
+              "target": "itoa"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            },
+            {
+              "id": "socket2 0.4.4",
+              "target": "socket2"
+            },
+            {
+              "id": "tokio 1.19.2",
+              "target": "tokio"
+            },
+            {
+              "id": "tower-service 0.3.2",
+              "target": "tower_service"
+            },
+            {
+              "id": "tracing 0.1.35",
+              "target": "tracing"
+            },
+            {
+              "id": "want 0.3.0",
+              "target": "want"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.14.19"
+      },
+      "license": "MIT"
+    },
+    "indexmap 1.9.1": {
+      "name": "indexmap",
+      "version": "1.9.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/indexmap/1.9.1/download",
+          "sha256": "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "indexmap",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "indexmap",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "hashbrown 0.12.1",
+              "target": "hashbrown"
+            },
+            {
+              "id": "indexmap 1.9.1",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2021",
+        "version": "1.9.1"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "autocfg 1.1.0",
+              "target": "autocfg"
+            }
+          ],
+          "selects": {}
+        }
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "itoa 1.0.2": {
+      "name": "itoa",
+      "version": "1.0.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/itoa/1.0.2/download",
+          "sha256": "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "itoa",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "itoa",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.0.2"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "lazy_static 1.4.0": {
+      "name": "lazy_static",
+      "version": "1.4.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/lazy_static/1.4.0/download",
+          "sha256": "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "lazy_static",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "lazy_static",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "1.4.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "libc 0.2.126": {
+      "name": "libc",
+      "version": "0.2.126",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/libc/0.2.126/download",
+          "sha256": "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "libc",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "libc",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "libc 0.2.126",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.2.126"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "lock_api 0.4.7": {
+      "name": "lock_api",
+      "version": "0.4.7",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/lock_api/0.4.7/download",
+          "sha256": "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "lock_api",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "lock_api",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "lock_api 0.4.7",
+              "target": "build_script_build"
+            },
+            {
+              "id": "scopeguard 1.1.0",
+              "target": "scopeguard"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.4.7"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "autocfg 1.1.0",
+              "target": "autocfg"
+            }
+          ],
+          "selects": {}
+        }
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "log 0.4.17": {
+      "name": "log",
+      "version": "0.4.17",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/log/0.4.17/download",
+          "sha256": "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "log",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "log",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "log 0.4.17",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.4.17"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "matches 0.1.9": {
+      "name": "matches",
+      "version": "0.1.9",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/matches/0.1.9/download",
+          "sha256": "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "matches",
+            "crate_root": "lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "matches",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.1.9"
+      },
+      "license": "MIT"
+    },
+    "matchit 0.4.6": {
+      "name": "matchit",
+      "version": "0.4.6",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/matchit/0.4.6/download",
+          "sha256": "9376a4f0340565ad675d11fc1419227faf5f60cd7ac9cb2e7185a471f30af833"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "matchit",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "matchit",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "edition": "2018",
+        "version": "0.4.6"
+      },
+      "license": "MIT"
+    },
+    "memchr 2.5.0": {
+      "name": "memchr",
+      "version": "2.5.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/memchr/2.5.0/download",
+          "sha256": "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "memchr",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "memchr",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "memchr 2.5.0",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "2.5.0"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "Unlicense/MIT"
+    },
+    "mime 0.3.16": {
+      "name": "mime",
+      "version": "0.3.16",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/mime/0.3.16/download",
+          "sha256": "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "mime",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "mime",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.3.16"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "mio 0.8.4": {
+      "name": "mio",
+      "version": "0.8.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/mio/0.8.4/download",
+          "sha256": "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "mio",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "mio",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "net",
+          "os-ext",
+          "os-poll"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "log 0.4.17",
+              "target": "log"
+            }
+          ],
+          "selects": {
+            "cfg(target_os = \"wasi\")": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              },
+              {
+                "id": "wasi 0.11.0+wasi-snapshot-preview1",
+                "target": "wasi"
+              }
+            ],
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "windows-sys 0.36.1",
+                "target": "windows_sys"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.8.4"
+      },
+      "license": "MIT"
+    },
+    "num_cpus 1.13.1": {
+      "name": "num_cpus",
+      "version": "1.13.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/num_cpus/1.13.1/download",
+          "sha256": "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "num_cpus",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "num_cpus",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [],
+          "selects": {
+            "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [
+              {
+                "id": "hermit-abi 0.1.19",
+                "target": "hermit_abi"
+              }
+            ],
+            "cfg(not(windows))": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ]
+          }
+        },
+        "edition": "2015",
+        "version": "1.13.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "once_cell 1.13.0": {
+      "name": "once_cell",
+      "version": "1.13.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/once_cell/1.13.0/download",
+          "sha256": "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "once_cell",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "once_cell",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "default",
+          "race",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "1.13.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "parking_lot 0.12.1": {
+      "name": "parking_lot",
+      "version": "0.12.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/parking_lot/0.12.1/download",
+          "sha256": "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "parking_lot",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "parking_lot",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "lock_api 0.4.7",
+              "target": "lock_api"
+            },
+            {
+              "id": "parking_lot_core 0.9.3",
+              "target": "parking_lot_core"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.12.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "parking_lot_core 0.9.3": {
+      "name": "parking_lot_core",
+      "version": "0.9.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/parking_lot_core/0.9.3/download",
+          "sha256": "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "parking_lot_core",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "parking_lot_core",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "parking_lot_core 0.9.3",
+              "target": "build_script_build"
+            },
+            {
+              "id": "smallvec 1.9.0",
+              "target": "smallvec"
+            }
+          ],
+          "selects": {
+            "cfg(target_os = \"redox\")": [
+              {
+                "id": "redox_syscall 0.2.13",
+                "target": "syscall"
+              }
+            ],
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "windows-sys 0.36.1",
+                "target": "windows_sys"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.9.3"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "percent-encoding 2.1.0": {
+      "name": "percent-encoding",
+      "version": "2.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/percent-encoding/2.1.0/download",
+          "sha256": "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "percent_encoding",
+            "crate_root": "lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "percent_encoding",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "2.1.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "pin-project 1.0.11": {
+      "name": "pin-project",
+      "version": "1.0.11",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/pin-project/1.0.11/download",
+          "sha256": "78203e83c48cffbe01e4a2d35d566ca4de445d79a85372fc64e378bfc812a260"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "pin_project",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "pin_project",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "pin-project-internal 1.0.11",
+              "target": "pin_project_internal"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "1.0.11"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "pin-project-internal 1.0.11": {
+      "name": "pin-project-internal",
+      "version": "1.0.11",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/pin-project-internal/1.0.11/download",
+          "sha256": "710faf75e1b33345361201d36d04e98ac1ed8909151a017ed384700836104c74"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "pin_project_internal",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "pin_project_internal",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.11"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "pin-project-lite 0.2.9": {
+      "name": "pin-project-lite",
+      "version": "0.2.9",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/pin-project-lite/0.2.9/download",
+          "sha256": "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "pin_project_lite",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "pin_project_lite",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.2.9"
+      },
+      "license": "Apache-2.0 OR MIT"
+    },
+    "pin-utils 0.1.0": {
+      "name": "pin-utils",
+      "version": "0.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/pin-utils/0.1.0/download",
+          "sha256": "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "pin_utils",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "pin_utils",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.1.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "proc-macro2 1.0.40": {
+      "name": "proc-macro2",
+      "version": "1.0.40",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/proc-macro2/1.0.40/download",
+          "sha256": "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "proc_macro2",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "proc_macro2",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "proc-macro"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "build_script_build"
+            },
+            {
+              "id": "unicode-ident 1.0.1",
+              "target": "unicode_ident"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.40"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "quote 1.0.20": {
+      "name": "quote",
+      "version": "1.0.20",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/quote/1.0.20/download",
+          "sha256": "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "quote",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "quote",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "proc-macro"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.20"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "redox_syscall 0.2.13": {
+      "name": "redox_syscall",
+      "version": "0.2.13",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/redox_syscall/0.2.13/download",
+          "sha256": "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "syscall",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "syscall",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bitflags 1.3.2",
+              "target": "bitflags"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.2.13"
+      },
+      "license": "MIT"
+    },
+    "ryu 1.0.10": {
+      "name": "ryu",
+      "version": "1.0.10",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/ryu/1.0.10/download",
+          "sha256": "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "ryu",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "ryu",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.0.10"
+      },
+      "license": "Apache-2.0 OR BSL-1.0"
+    },
+    "scopeguard 1.1.0": {
+      "name": "scopeguard",
+      "version": "1.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/scopeguard/1.1.0/download",
+          "sha256": "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "scopeguard",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "scopeguard",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "1.1.0"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "serde 1.0.138": {
+      "name": "serde",
+      "version": "1.0.138",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/serde/1.0.138/download",
+          "sha256": "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "serde",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "serde",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "serde 1.0.138",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "1.0.138"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "serde_json 1.0.82": {
+      "name": "serde_json",
+      "version": "1.0.82",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/serde_json/1.0.82/download",
+          "sha256": "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "serde_json",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "serde_json",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "raw_value",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "itoa 1.0.2",
+              "target": "itoa"
+            },
+            {
+              "id": "ryu 1.0.10",
+              "target": "ryu"
+            },
+            {
+              "id": "serde 1.0.138",
+              "target": "serde"
+            },
+            {
+              "id": "serde_json 1.0.82",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.82"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "serde_urlencoded 0.7.1": {
+      "name": "serde_urlencoded",
+      "version": "0.7.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/serde_urlencoded/0.7.1/download",
+          "sha256": "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "serde_urlencoded",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "serde_urlencoded",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "form_urlencoded 1.0.1",
+              "target": "form_urlencoded"
+            },
+            {
+              "id": "itoa 1.0.2",
+              "target": "itoa"
+            },
+            {
+              "id": "ryu 1.0.10",
+              "target": "ryu"
+            },
+            {
+              "id": "serde 1.0.138",
+              "target": "serde"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.7.1"
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "sharded-slab 0.1.4": {
+      "name": "sharded-slab",
+      "version": "0.1.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/sharded-slab/0.1.4/download",
+          "sha256": "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "sharded_slab",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "sharded_slab",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "lazy_static 1.4.0",
+              "target": "lazy_static"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.4"
+      },
+      "license": "MIT"
+    },
+    "signal-hook-registry 1.4.0": {
+      "name": "signal-hook-registry",
+      "version": "1.4.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/signal-hook-registry/1.4.0/download",
+          "sha256": "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "signal_hook_registry",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "signal_hook_registry",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "libc 0.2.126",
+              "target": "libc"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "1.4.0"
+      },
+      "license": "Apache-2.0/MIT"
+    },
+    "slab 0.4.6": {
+      "name": "slab",
+      "version": "0.4.6",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/slab/0.4.6/download",
+          "sha256": "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "slab",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "slab",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "0.4.6"
+      },
+      "license": "MIT"
+    },
+    "smallvec 1.9.0": {
+      "name": "smallvec",
+      "version": "1.9.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/smallvec/1.9.0/download",
+          "sha256": "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "smallvec",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "smallvec",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.9.0"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "socket2 0.4.4": {
+      "name": "socket2",
+      "version": "0.4.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/socket2/0.4.4/download",
+          "sha256": "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "socket2",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "socket2",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "all"
+        ],
+        "deps": {
+          "common": [],
+          "selects": {
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.4.4"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "syn 1.0.98": {
+      "name": "syn",
+      "version": "1.0.98",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/syn/1.0.98/download",
+          "sha256": "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "syn",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "syn",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "clone-impls",
+          "default",
+          "derive",
+          "extra-traits",
+          "full",
+          "parsing",
+          "printing",
+          "proc-macro",
+          "quote",
+          "visit",
+          "visit-mut"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "build_script_build"
+            },
+            {
+              "id": "unicode-ident 1.0.1",
+              "target": "unicode_ident"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.0.98"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "sync_wrapper 0.1.1": {
+      "name": "sync_wrapper",
+      "version": "0.1.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/sync_wrapper/0.1.1/download",
+          "sha256": "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "sync_wrapper",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "sync_wrapper",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.1.1"
+      },
+      "license": "Apache-2.0"
+    },
+    "thread_local 1.1.4": {
+      "name": "thread_local",
+      "version": "1.1.4",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/thread_local/1.1.4/download",
+          "sha256": "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "thread_local",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "thread_local",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "once_cell 1.13.0",
+              "target": "once_cell"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.1.4"
+      },
+      "license": "Apache-2.0/MIT"
+    },
+    "tokio 1.19.2": {
+      "name": "tokio",
+      "version": "1.19.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tokio/1.19.2/download",
+          "sha256": "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tokio",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tokio",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "bytes",
+          "default",
+          "fs",
+          "full",
+          "io-std",
+          "io-util",
+          "libc",
+          "macros",
+          "memchr",
+          "mio",
+          "net",
+          "num_cpus",
+          "once_cell",
+          "parking_lot",
+          "process",
+          "rt",
+          "rt-multi-thread",
+          "signal",
+          "signal-hook-registry",
+          "socket2",
+          "sync",
+          "time",
+          "tokio-macros",
+          "winapi"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "memchr 2.5.0",
+              "target": "memchr"
+            },
+            {
+              "id": "mio 0.8.4",
+              "target": "mio"
+            },
+            {
+              "id": "num_cpus 1.13.1",
+              "target": "num_cpus"
+            },
+            {
+              "id": "once_cell 1.13.0",
+              "target": "once_cell"
+            },
+            {
+              "id": "parking_lot 0.12.1",
+              "target": "parking_lot"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            },
+            {
+              "id": "socket2 0.4.4",
+              "target": "socket2"
+            }
+          ],
+          "selects": {
+            "cfg(unix)": [
+              {
+                "id": "libc 0.2.126",
+                "target": "libc"
+              },
+              {
+                "id": "signal-hook-registry 1.4.0",
+                "target": "signal_hook_registry"
+              }
+            ],
+            "cfg(windows)": [
+              {
+                "id": "winapi 0.3.9",
+                "target": "winapi"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "tokio-macros 1.8.0",
+              "target": "tokio_macros"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "1.19.2"
+      },
+      "license": "MIT"
+    },
+    "tokio-macros 1.8.0": {
+      "name": "tokio-macros",
+      "version": "1.8.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tokio-macros/1.8.0/download",
+          "sha256": "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "tokio_macros",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tokio_macros",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "1.8.0"
+      },
+      "license": "MIT"
+    },
+    "tokio-util 0.7.3": {
+      "name": "tokio-util",
+      "version": "0.7.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tokio-util/0.7.3/download",
+          "sha256": "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tokio_util",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tokio_util",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "codec",
+          "default",
+          "tracing"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            },
+            {
+              "id": "futures-sink 0.3.21",
+              "target": "futures_sink"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            },
+            {
+              "id": "tokio 1.19.2",
+              "target": "tokio"
+            },
+            {
+              "id": "tracing 0.1.35",
+              "target": "tracing"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.7.3"
+      },
+      "license": "MIT"
+    },
+    "tower 0.4.13": {
+      "name": "tower",
+      "version": "0.4.13",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tower/0.4.13/download",
+          "sha256": "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tower",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tower",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "__common",
+          "buffer",
+          "default",
+          "futures-core",
+          "futures-util",
+          "log",
+          "make",
+          "pin-project",
+          "pin-project-lite",
+          "tokio",
+          "tokio-util",
+          "tracing",
+          "util"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            },
+            {
+              "id": "futures-util 0.3.21",
+              "target": "futures_util"
+            },
+            {
+              "id": "pin-project 1.0.11",
+              "target": "pin_project"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            },
+            {
+              "id": "tokio 1.19.2",
+              "target": "tokio"
+            },
+            {
+              "id": "tokio-util 0.7.3",
+              "target": "tokio_util"
+            },
+            {
+              "id": "tower-layer 0.3.1",
+              "target": "tower_layer"
+            },
+            {
+              "id": "tower-service 0.3.2",
+              "target": "tower_service"
+            },
+            {
+              "id": "tracing 0.1.35",
+              "target": "tracing"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.4.13"
+      },
+      "license": "MIT"
+    },
+    "tower-http 0.2.5": {
+      "name": "tower-http",
+      "version": "0.2.5",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tower-http/0.2.5/download",
+          "sha256": "aba3f3efabf7fb41fae8534fc20a817013dd1c12cb45441efb6c82e6556b4cd8"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tower_http",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tower_http",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "map-response-body",
+          "tower",
+          "trace",
+          "tracing",
+          "util"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "bitflags 1.3.2",
+              "target": "bitflags"
+            },
+            {
+              "id": "bytes 1.1.0",
+              "target": "bytes"
+            },
+            {
+              "id": "futures-core 0.3.21",
+              "target": "futures_core"
+            },
+            {
+              "id": "futures-util 0.3.21",
+              "target": "futures_util"
+            },
+            {
+              "id": "http 0.2.8",
+              "target": "http"
+            },
+            {
+              "id": "http-body 0.4.5",
+              "target": "http_body"
+            },
+            {
+              "id": "http-range-header 0.3.0",
+              "target": "http_range_header"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            },
+            {
+              "id": "tower 0.4.13",
+              "target": "tower"
+            },
+            {
+              "id": "tower-layer 0.3.1",
+              "target": "tower_layer"
+            },
+            {
+              "id": "tower-service 0.3.2",
+              "target": "tower_service"
+            },
+            {
+              "id": "tracing 0.1.35",
+              "target": "tracing"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.2.5"
+      },
+      "license": "MIT"
+    },
+    "tower-layer 0.3.1": {
+      "name": "tower-layer",
+      "version": "0.3.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tower-layer/0.3.1/download",
+          "sha256": "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tower_layer",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tower_layer",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.3.1"
+      },
+      "license": "MIT"
+    },
+    "tower-service 0.3.2": {
+      "name": "tower-service",
+      "version": "0.3.2",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tower-service/0.3.2/download",
+          "sha256": "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tower_service",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tower_service",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "0.3.2"
+      },
+      "license": "MIT"
+    },
+    "tracing 0.1.35": {
+      "name": "tracing",
+      "version": "0.1.35",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tracing/0.1.35/download",
+          "sha256": "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tracing",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tracing",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "attributes",
+          "default",
+          "log",
+          "std",
+          "tracing-attributes"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "cfg-if 1.0.0",
+              "target": "cfg_if"
+            },
+            {
+              "id": "log 0.4.17",
+              "target": "log"
+            },
+            {
+              "id": "pin-project-lite 0.2.9",
+              "target": "pin_project_lite"
+            },
+            {
+              "id": "tracing-core 0.1.28",
+              "target": "tracing_core"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "proc_macro_deps": {
+          "common": [
+            {
+              "id": "tracing-attributes 0.1.22",
+              "target": "tracing_attributes"
+            }
+          ],
+          "selects": {}
+        },
+        "version": "0.1.35"
+      },
+      "license": "MIT"
+    },
+    "tracing-attributes 0.1.22": {
+      "name": "tracing-attributes",
+      "version": "0.1.22",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tracing-attributes/0.1.22/download",
+          "sha256": "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2"
+        }
+      },
+      "targets": [
+        {
+          "ProcMacro": {
+            "crate_name": "tracing_attributes",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tracing_attributes",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "proc-macro2 1.0.40",
+              "target": "proc_macro2"
+            },
+            {
+              "id": "quote 1.0.20",
+              "target": "quote"
+            },
+            {
+              "id": "syn 1.0.98",
+              "target": "syn"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.22"
+      },
+      "license": "MIT"
+    },
+    "tracing-core 0.1.28": {
+      "name": "tracing-core",
+      "version": "0.1.28",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tracing-core/0.1.28/download",
+          "sha256": "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tracing_core",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tracing_core",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "once_cell",
+          "std",
+          "valuable"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "once_cell 1.13.0",
+              "target": "once_cell"
+            }
+          ],
+          "selects": {
+            "cfg(tracing_unstable)": [
+              {
+                "id": "valuable 0.1.0",
+                "target": "valuable"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.1.28"
+      },
+      "license": "MIT"
+    },
+    "tracing-log 0.1.3": {
+      "name": "tracing-log",
+      "version": "0.1.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tracing-log/0.1.3/download",
+          "sha256": "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tracing_log",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tracing_log",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "log-tracer",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "lazy_static 1.4.0",
+              "target": "lazy_static"
+            },
+            {
+              "id": "log 0.4.17",
+              "target": "log"
+            },
+            {
+              "id": "tracing-core 0.1.28",
+              "target": "tracing_core"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.3"
+      },
+      "license": "MIT"
+    },
+    "tracing-subscriber 0.3.14": {
+      "name": "tracing-subscriber",
+      "version": "0.3.14",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/tracing-subscriber/0.3.14/download",
+          "sha256": "3a713421342a5a666b7577783721d3117f1b69a393df803ee17bb73b1e122a59"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "tracing_subscriber",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "tracing_subscriber",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "ansi",
+          "ansi_term",
+          "default",
+          "fmt",
+          "registry",
+          "sharded-slab",
+          "smallvec",
+          "std",
+          "thread_local",
+          "tracing-log"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "ansi_term 0.12.1",
+              "target": "ansi_term"
+            },
+            {
+              "id": "sharded-slab 0.1.4",
+              "target": "sharded_slab"
+            },
+            {
+              "id": "smallvec 1.9.0",
+              "target": "smallvec"
+            },
+            {
+              "id": "thread_local 1.1.4",
+              "target": "thread_local"
+            },
+            {
+              "id": "tracing-core 0.1.28",
+              "target": "tracing_core"
+            },
+            {
+              "id": "tracing-log 0.1.3",
+              "target": "tracing_log"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.14"
+      },
+      "license": "MIT"
+    },
+    "try-lock 0.2.3": {
+      "name": "try-lock",
+      "version": "0.2.3",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/try-lock/0.2.3/download",
+          "sha256": "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "try_lock",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "try_lock",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2015",
+        "version": "0.2.3"
+      },
+      "license": "MIT"
+    },
+    "unicode-ident 1.0.1": {
+      "name": "unicode-ident",
+      "version": "1.0.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/unicode-ident/1.0.1/download",
+          "sha256": "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "unicode_ident",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "unicode_ident",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "edition": "2018",
+        "version": "1.0.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "valuable 0.1.0": {
+      "name": "valuable",
+      "version": "0.1.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/valuable/0.1.0/download",
+          "sha256": "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "valuable",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "valuable",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "alloc",
+          "std"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "valuable 0.1.0",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.1.0"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT"
+    },
+    "want 0.3.0": {
+      "name": "want",
+      "version": "0.3.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/want/0.3.0/download",
+          "sha256": "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "want",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "want",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "log 0.4.17",
+              "target": "log"
+            },
+            {
+              "id": "try-lock 0.2.3",
+              "target": "try_lock"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.3.0"
+      },
+      "license": "MIT"
+    },
+    "wasi 0.11.0+wasi-snapshot-preview1": {
+      "name": "wasi",
+      "version": "0.11.0+wasi-snapshot-preview1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/wasi/0.11.0+wasi-snapshot-preview1/download",
+          "sha256": "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "wasi",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "wasi",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "default",
+          "std"
+        ],
+        "edition": "2018",
+        "version": "0.11.0+wasi-snapshot-preview1"
+      },
+      "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT"
+    },
+    "winapi 0.3.9": {
+      "name": "winapi",
+      "version": "0.3.9",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download",
+          "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "winapi",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "winapi",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "consoleapi",
+          "errhandlingapi",
+          "fileapi",
+          "handleapi",
+          "mswsock",
+          "namedpipeapi",
+          "processenv",
+          "std",
+          "threadpoollegacyapiset",
+          "winsock2",
+          "ws2ipdef",
+          "ws2tcpip"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "winapi 0.3.9",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {
+            "i686-pc-windows-gnu": [
+              {
+                "id": "winapi-i686-pc-windows-gnu 0.4.0",
+                "target": "winapi_i686_pc_windows_gnu"
+              }
+            ],
+            "x86_64-pc-windows-gnu": [
+              {
+                "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
+                "target": "winapi_x86_64_pc_windows_gnu"
+              }
+            ]
+          }
+        },
+        "edition": "2015",
+        "version": "0.3.9"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "winapi-i686-pc-windows-gnu 0.4.0": {
+      "name": "winapi-i686-pc-windows-gnu",
+      "version": "0.4.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
+          "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "winapi_i686_pc_windows_gnu",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "winapi_i686_pc_windows_gnu",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "winapi-i686-pc-windows-gnu 0.4.0",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.4.0"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "winapi-x86_64-pc-windows-gnu 0.4.0": {
+      "name": "winapi-x86_64-pc-windows-gnu",
+      "version": "0.4.0",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
+          "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "winapi_x86_64_pc_windows_gnu",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "winapi_x86_64_pc_windows_gnu",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2015",
+        "version": "0.4.0"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT/Apache-2.0"
+    },
+    "windows-sys 0.36.1": {
+      "name": "windows-sys",
+      "version": "0.36.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/windows-sys/0.36.1/download",
+          "sha256": "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "windows_sys",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "windows_sys",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "crate_features": [
+          "Win32",
+          "Win32_Foundation",
+          "Win32_Networking",
+          "Win32_Networking_WinSock",
+          "Win32_Security",
+          "Win32_Storage",
+          "Win32_Storage_FileSystem",
+          "Win32_System",
+          "Win32_System_IO",
+          "Win32_System_LibraryLoader",
+          "Win32_System_Pipes",
+          "Win32_System_SystemServices",
+          "Win32_System_WindowsProgramming",
+          "default"
+        ],
+        "deps": {
+          "common": [],
+          "selects": {
+            "aarch64-pc-windows-msvc": [
+              {
+                "id": "windows_aarch64_msvc 0.36.1",
+                "target": "windows_aarch64_msvc"
+              }
+            ],
+            "aarch64-uwp-windows-msvc": [
+              {
+                "id": "windows_aarch64_msvc 0.36.1",
+                "target": "windows_aarch64_msvc"
+              }
+            ],
+            "i686-pc-windows-gnu": [
+              {
+                "id": "windows_i686_gnu 0.36.1",
+                "target": "windows_i686_gnu"
+              }
+            ],
+            "i686-pc-windows-msvc": [
+              {
+                "id": "windows_i686_msvc 0.36.1",
+                "target": "windows_i686_msvc"
+              }
+            ],
+            "i686-uwp-windows-gnu": [
+              {
+                "id": "windows_i686_gnu 0.36.1",
+                "target": "windows_i686_gnu"
+              }
+            ],
+            "i686-uwp-windows-msvc": [
+              {
+                "id": "windows_i686_msvc 0.36.1",
+                "target": "windows_i686_msvc"
+              }
+            ],
+            "x86_64-pc-windows-gnu": [
+              {
+                "id": "windows_x86_64_gnu 0.36.1",
+                "target": "windows_x86_64_gnu"
+              }
+            ],
+            "x86_64-pc-windows-msvc": [
+              {
+                "id": "windows_x86_64_msvc 0.36.1",
+                "target": "windows_x86_64_msvc"
+              }
+            ],
+            "x86_64-uwp-windows-gnu": [
+              {
+                "id": "windows_x86_64_gnu 0.36.1",
+                "target": "windows_x86_64_gnu"
+              }
+            ],
+            "x86_64-uwp-windows-msvc": [
+              {
+                "id": "windows_x86_64_msvc 0.36.1",
+                "target": "windows_x86_64_msvc"
+              }
+            ]
+          }
+        },
+        "edition": "2018",
+        "version": "0.36.1"
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "windows_aarch64_msvc 0.36.1": {
+      "name": "windows_aarch64_msvc",
+      "version": "0.36.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/windows_aarch64_msvc/0.36.1/download",
+          "sha256": "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "windows_aarch64_msvc",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "windows_aarch64_msvc",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "windows_aarch64_msvc 0.36.1",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.36.1"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "windows_i686_gnu 0.36.1": {
+      "name": "windows_i686_gnu",
+      "version": "0.36.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/windows_i686_gnu/0.36.1/download",
+          "sha256": "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "windows_i686_gnu",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "windows_i686_gnu",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "windows_i686_gnu 0.36.1",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.36.1"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "windows_i686_msvc 0.36.1": {
+      "name": "windows_i686_msvc",
+      "version": "0.36.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/windows_i686_msvc/0.36.1/download",
+          "sha256": "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "windows_i686_msvc",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "windows_i686_msvc",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "windows_i686_msvc 0.36.1",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.36.1"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "windows_x86_64_gnu 0.36.1": {
+      "name": "windows_x86_64_gnu",
+      "version": "0.36.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/windows_x86_64_gnu/0.36.1/download",
+          "sha256": "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "windows_x86_64_gnu",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "windows_x86_64_gnu",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "windows_x86_64_gnu 0.36.1",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.36.1"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    },
+    "windows_x86_64_msvc 0.36.1": {
+      "name": "windows_x86_64_msvc",
+      "version": "0.36.1",
+      "repository": {
+        "Http": {
+          "url": "https://crates.io/api/v1/crates/windows_x86_64_msvc/0.36.1/download",
+          "sha256": "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+        }
+      },
+      "targets": [
+        {
+          "Library": {
+            "crate_name": "windows_x86_64_msvc",
+            "crate_root": "src/lib.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        },
+        {
+          "BuildScript": {
+            "crate_name": "build_script_build",
+            "crate_root": "build.rs",
+            "srcs": {
+              "include": [
+                "**/*.rs"
+              ],
+              "exclude": []
+            }
+          }
+        }
+      ],
+      "library_target_name": "windows_x86_64_msvc",
+      "common_attrs": {
+        "compile_data_glob": [
+          "**"
+        ],
+        "deps": {
+          "common": [
+            {
+              "id": "windows_x86_64_msvc 0.36.1",
+              "target": "build_script_build"
+            }
+          ],
+          "selects": {}
+        },
+        "edition": "2018",
+        "version": "0.36.1"
+      },
+      "build_script_attrs": {
+        "data_glob": [
+          "**"
+        ]
+      },
+      "license": "MIT OR Apache-2.0"
+    }
+  },
+  "binary_crates": [],
+  "workspace_members": {
+    "direct-cargo-bazel-deps 0.0.1": ""
+  },
+  "conditions": {
+    "aarch64-pc-windows-msvc": [],
+    "aarch64-uwp-windows-msvc": [],
+    "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [],
+    "cfg(not(windows))": [
+      "aarch64-apple-darwin",
+      "aarch64-apple-ios",
+      "aarch64-apple-ios-sim",
+      "aarch64-linux-android",
+      "aarch64-unknown-linux-gnu",
+      "arm-unknown-linux-gnueabi",
+      "armv7-linux-androideabi",
+      "armv7-unknown-linux-gnueabi",
+      "i686-apple-darwin",
+      "i686-linux-android",
+      "i686-unknown-freebsd",
+      "i686-unknown-linux-gnu",
+      "powerpc-unknown-linux-gnu",
+      "riscv32imc-unknown-none-elf",
+      "s390x-unknown-linux-gnu",
+      "wasm32-unknown-unknown",
+      "wasm32-wasi",
+      "x86_64-apple-darwin",
+      "x86_64-apple-ios",
+      "x86_64-linux-android",
+      "x86_64-unknown-freebsd",
+      "x86_64-unknown-linux-gnu"
+    ],
+    "cfg(target_os = \"redox\")": [],
+    "cfg(target_os = \"wasi\")": [
+      "wasm32-wasi"
+    ],
+    "cfg(target_os = \"windows\")": [
+      "i686-pc-windows-msvc",
+      "x86_64-pc-windows-msvc"
+    ],
+    "cfg(tracing_unstable)": [],
+    "cfg(unix)": [
+      "aarch64-apple-darwin",
+      "aarch64-apple-ios",
+      "aarch64-apple-ios-sim",
+      "aarch64-linux-android",
+      "aarch64-unknown-linux-gnu",
+      "arm-unknown-linux-gnueabi",
+      "armv7-linux-androideabi",
+      "armv7-unknown-linux-gnueabi",
+      "i686-apple-darwin",
+      "i686-linux-android",
+      "i686-unknown-freebsd",
+      "i686-unknown-linux-gnu",
+      "powerpc-unknown-linux-gnu",
+      "s390x-unknown-linux-gnu",
+      "x86_64-apple-darwin",
+      "x86_64-apple-ios",
+      "x86_64-linux-android",
+      "x86_64-unknown-freebsd",
+      "x86_64-unknown-linux-gnu"
+    ],
+    "cfg(windows)": [
+      "i686-pc-windows-msvc",
+      "x86_64-pc-windows-msvc"
+    ],
+    "i686-pc-windows-gnu": [],
+    "i686-pc-windows-msvc": [
+      "i686-pc-windows-msvc"
+    ],
+    "i686-uwp-windows-gnu": [],
+    "i686-uwp-windows-msvc": [],
+    "x86_64-pc-windows-gnu": [],
+    "x86_64-pc-windows-msvc": [
+      "x86_64-pc-windows-msvc"
+    ],
+    "x86_64-uwp-windows-gnu": [],
+    "x86_64-uwp-windows-msvc": []
+  }
+}
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/BUILD.bazel
new file mode 100644
index 0000000..fb3708e
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/BUILD.bazel
@@ -0,0 +1,21 @@
+load("@rules_rust//crate_universe:defs.bzl", "crates_vendor")
+load("@rules_rust//rust:defs.bzl", "rust_test")
+
+exports_files([
+    "BUILD.names.bazel",
+])
+
+crates_vendor(
+    name = "crates_vendor",
+    manifests = ["@names_external//:Cargo.toml"],
+    mode = "remote",
+)
+
+rust_test(
+    name = "launch_test",
+    srcs = ["remote_crate_test.rs"],
+    data = ["@names_external//:names_bin"],
+    rustc_env = {
+        "EXECUTABLE": "$(rootpath @names_external//:names_bin)",
+    },
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/BUILD.names.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/BUILD.names.bazel
new file mode 100644
index 0000000..e84318d
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/BUILD.names.bazel
@@ -0,0 +1,67 @@
+load("@crate_index_cargo_remote//:defs.bzl", "aliases", "all_crate_deps")
+load("@rules_rust//cargo:defs.bzl", "cargo_build_script")
+load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_library")
+
+package(default_visibility = ["//visibility:public"])
+
+exports_files([
+    "Cargo.toml",
+    "Cargo.lock",
+])
+
+rust_binary(
+    name = "names_bin",
+    srcs = ["src/bin/names.rs"],
+    aliases = aliases(
+        normal = True,
+        proc_macro = True,
+    ),
+    crate_features = [
+        "application",
+        "clap",
+        "default",
+    ],
+    crate_root = "src/bin/names.rs",
+    edition = "2018",
+    proc_macro_deps = all_crate_deps(proc_macro = True),
+    version = "0.12.0",
+    deps = all_crate_deps(normal = True) + [
+        ":names",
+    ],
+)
+
+rust_library(
+    name = "names",
+    srcs = glob(["src/**/*.rs"]),
+    aliases = aliases(
+        normal = True,
+        proc_macro = True,
+    ),
+    crate_features = [
+        "application",
+        "clap",
+        "default",
+    ],
+    edition = "2018",
+    proc_macro_deps = all_crate_deps(proc_macro = True),
+    version = "0.13.0",
+    deps = all_crate_deps(normal = True) + [
+        ":build-script-build",
+    ],
+)
+
+cargo_build_script(
+    name = "build-script-build",
+    srcs = ["build.rs"],
+    aliases = aliases(build = True),
+    crate_features = [
+        "application",
+        "clap",
+        "default",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["data/**"]),
+    edition = "2018",
+    version = "0.13.0",
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.atty-0.2.14.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.atty-0.2.14.bazel
new file mode 100644
index 0000000..2c182ca
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.atty-0.2.14.bazel
@@ -0,0 +1,132 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "atty",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.14",
+    deps = [
+    ] + select_with_or({
+        # cfg(target_os = "hermit")
+        #
+        # No supported platform triples for cfg: 'cfg(target_os = "hermit")'
+        # Skipped dependencies: [{"id":"hermit-abi 0.1.19","target":"hermit_abi"}]
+        #
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@crates_vendor__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@crates_vendor__winapi-0.3.9//:winapi",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.autocfg-1.1.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.autocfg-1.1.0.bazel
new file mode 100644
index 0000000..3b60731
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.autocfg-1.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "autocfg",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.bazel
new file mode 100644
index 0000000..d22556d
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.bazel
@@ -0,0 +1,65 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+package(default_visibility = ["//visibility:public"])
+
+exports_files(
+    [
+        "cargo-bazel.json",
+        "defs.bzl",
+        "crates.bzl",
+    ] + glob([
+        "*.bazel",
+    ]),
+)
+
+filegroup(
+    name = "srcs",
+    srcs = glob([
+        "*.bazel",
+        "*.bzl",
+    ]),
+)
+
+# Workspace Member Dependencies
+alias(
+    name = "clap",
+    actual = "@crates_vendor__clap-3.2.14//:clap",
+    tags = ["manual"],
+)
+
+alias(
+    name = "names",
+    actual = "@crates_vendor__names-0.13.0//:names",
+    tags = ["manual"],
+)
+
+alias(
+    name = "rand",
+    actual = "@crates_vendor__rand-0.8.5//:rand",
+    tags = ["manual"],
+)
+
+alias(
+    name = "version-sync",
+    actual = "@crates_vendor__version-sync-0.9.4//:version_sync",
+    tags = ["manual"],
+)
+
+# Binaries
+alias(
+    name = "clap__stdio-fixture",
+    actual = "@crates_vendor__clap-3.2.14//:stdio-fixture__bin",
+    tags = ["manual"],
+)
+
+alias(
+    name = "pulldown-cmark__pulldown-cmark",
+    actual = "@crates_vendor__pulldown-cmark-0.8.0//:pulldown-cmark__bin",
+    tags = ["manual"],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.bitflags-1.3.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.bitflags-1.3.2.bazel
new file mode 100644
index 0000000..2171174
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.bitflags-1.3.2.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "bitflags",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.3.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.cfg-if-1.0.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.cfg-if-1.0.0.bazel
new file mode 100644
index 0000000..b2a4be9
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.cfg-if-1.0.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "cfg_if",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.clap-3.2.14.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.clap-3.2.14.bazel
new file mode 100644
index 0000000..28e28ac
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.clap-3.2.14.bazel
@@ -0,0 +1,195 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "clap",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "atty",
+        "clap_derive",
+        "color",
+        "default",
+        "derive",
+        "once_cell",
+        "std",
+        "strsim",
+        "suggestions",
+        "termcolor",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__clap_derive-3.2.7//:clap_derive",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "3.2.14",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__atty-0.2.14//:atty",
+            "@crates_vendor__bitflags-1.3.2//:bitflags",
+            "@crates_vendor__clap_lex-0.2.4//:clap_lex",
+            "@crates_vendor__indexmap-1.9.1//:indexmap",
+            "@crates_vendor__once_cell-1.13.0//:once_cell",
+            "@crates_vendor__strsim-0.10.0//:strsim",
+            "@crates_vendor__termcolor-1.1.3//:termcolor",
+            "@crates_vendor__textwrap-0.15.0//:textwrap",
+        ],
+    }),
+)
+
+rust_binary(
+    name = "stdio-fixture__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "atty",
+        "clap_derive",
+        "color",
+        "default",
+        "derive",
+        "once_cell",
+        "std",
+        "strsim",
+        "suggestions",
+        "termcolor",
+    ],
+    crate_root = "src/bin/stdio-fixture.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__clap_derive-3.2.7//:clap_derive",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "3.2.14",
+    deps = [
+        ":clap",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__atty-0.2.14//:atty",
+            "@crates_vendor__bitflags-1.3.2//:bitflags",
+            "@crates_vendor__clap_lex-0.2.4//:clap_lex",
+            "@crates_vendor__indexmap-1.9.1//:indexmap",
+            "@crates_vendor__once_cell-1.13.0//:once_cell",
+            "@crates_vendor__strsim-0.10.0//:strsim",
+            "@crates_vendor__termcolor-1.1.3//:termcolor",
+            "@crates_vendor__textwrap-0.15.0//:textwrap",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.clap_derive-3.2.7.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.clap_derive-3.2.7.bazel
new file mode 100644
index 0000000..876e5c3
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.clap_derive-3.2.7.bazel
@@ -0,0 +1,96 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_proc_macro(
+    name = "clap_derive",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "3.2.7",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__heck-0.4.0//:heck",
+            "@crates_vendor__proc-macro-error-1.0.4//:proc_macro_error",
+            "@crates_vendor__proc-macro2-1.0.40//:proc_macro2",
+            "@crates_vendor__quote-1.0.20//:quote",
+            "@crates_vendor__syn-1.0.98//:syn",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.clap_lex-0.2.4.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.clap_lex-0.2.4.bazel
new file mode 100644
index 0000000..09a8c32
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.clap_lex-0.2.4.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "clap_lex",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__os_str_bytes-6.2.0//:os_str_bytes",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.form_urlencoded-1.0.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.form_urlencoded-1.0.1.bazel
new file mode 100644
index 0000000..e028933
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.form_urlencoded-1.0.1.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "form_urlencoded",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__matches-0.1.9//:matches",
+            "@crates_vendor__percent-encoding-2.1.0//:percent_encoding",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.getrandom-0.2.7.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.getrandom-0.2.7.bazel
new file mode 100644
index 0000000..2b0eb93
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.getrandom-0.2.7.bazel
@@ -0,0 +1,130 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "getrandom",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.7",
+    deps = [
+    ] + select_with_or({
+        # cfg(target_os = "wasi")
+        (
+            "@rules_rust//rust/platform:wasm32-wasi",
+        ): [
+            # Target Deps
+            "@crates_vendor__wasi-0.11.0-wasi-snapshot-preview1//:wasi",
+
+            # Common Deps
+            "@crates_vendor__cfg-if-1.0.0//:cfg_if",
+        ],
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@crates_vendor__libc-0.2.126//:libc",
+
+            # Common Deps
+            "@crates_vendor__cfg-if-1.0.0//:cfg_if",
+        ],
+        "//conditions:default": [
+            "@crates_vendor__cfg-if-1.0.0//:cfg_if",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.hashbrown-0.12.3.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.hashbrown-0.12.3.bazel
new file mode 100644
index 0000000..ee4c144
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.hashbrown-0.12.3.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "hashbrown",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "raw",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.12.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.heck-0.4.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.heck-0.4.0.bazel
new file mode 100644
index 0000000..b7a6bcf
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.heck-0.4.0.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "heck",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.hermit-abi-0.1.19.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.hermit-abi-0.1.19.bazel
new file mode 100644
index 0000000..29ea303
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.hermit-abi-0.1.19.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "hermit_abi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.19",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__libc-0.2.126//:libc",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.idna-0.2.3.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.idna-0.2.3.bazel
new file mode 100644
index 0000000..23a60c1
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.idna-0.2.3.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "idna",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__matches-0.1.9//:matches",
+            "@crates_vendor__unicode-bidi-0.3.8//:unicode_bidi",
+            "@crates_vendor__unicode-normalization-0.1.21//:unicode_normalization",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.indexmap-1.9.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.indexmap-1.9.1.bazel
new file mode 100644
index 0000000..462a5c9
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.indexmap-1.9.1.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "indexmap",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.9.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__hashbrown-0.12.3//:hashbrown",
+            "@crates_vendor__indexmap-1.9.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "indexmap_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.9.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "indexmap_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.libc-0.2.126.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.libc-0.2.126.bazel
new file mode 100644
index 0000000..e65cf08
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.libc-0.2.126.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.126",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__libc-0.2.126//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "libc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.126",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "libc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.matches-0.1.9.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.matches-0.1.9.bazel
new file mode 100644
index 0000000..86545ae
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.matches-0.1.9.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "matches",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.9",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.memchr-2.5.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.memchr-2.5.0.bazel
new file mode 100644
index 0000000..1f83b45
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.memchr-2.5.0.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "memchr",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.5.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__memchr-2.5.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "memchr_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "2.5.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "memchr_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.once_cell-1.13.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.once_cell-1.13.0.bazel
new file mode 100644
index 0000000..d0b6a1f
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.once_cell-1.13.0.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "once_cell",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "default",
+        "race",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.13.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.os_str_bytes-6.2.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.os_str_bytes-6.2.0.bazel
new file mode 100644
index 0000000..c633c4e
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.os_str_bytes-6.2.0.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "os_str_bytes",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "raw_os_str",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "6.2.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.percent-encoding-2.1.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.percent-encoding-2.1.0.bazel
new file mode 100644
index 0000000..37966d5
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.percent-encoding-2.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "percent_encoding",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.ppv-lite86-0.2.16.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.ppv-lite86-0.2.16.bazel
new file mode 100644
index 0000000..f734f5f
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.ppv-lite86-0.2.16.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "ppv_lite86",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "simd",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.16",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.proc-macro-error-1.0.4.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.proc-macro-error-1.0.4.bazel
new file mode 100644
index 0000000..125c73f
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.proc-macro-error-1.0.4.bazel
@@ -0,0 +1,185 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "proc_macro_error",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "syn",
+        "syn-error",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__proc-macro-error-attr-1.0.4//:proc_macro_error_attr",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__proc-macro-error-1.0.4//:build_script_build",
+            "@crates_vendor__proc-macro2-1.0.40//:proc_macro2",
+            "@crates_vendor__quote-1.0.20//:quote",
+            "@crates_vendor__syn-1.0.98//:syn",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "proc-macro-error_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "syn",
+        "syn-error",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.4",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__version_check-0.9.4//:version_check",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "proc-macro-error_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.proc-macro-error-attr-1.0.4.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.proc-macro-error-attr-1.0.4.bazel
new file mode 100644
index 0000000..3ad585e
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.proc-macro-error-attr-1.0.4.bazel
@@ -0,0 +1,177 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_proc_macro(
+    name = "proc_macro_error_attr",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__proc-macro-error-attr-1.0.4//:build_script_build",
+            "@crates_vendor__proc-macro2-1.0.40//:proc_macro2",
+            "@crates_vendor__quote-1.0.20//:quote",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "proc-macro-error-attr_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.4",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__version_check-0.9.4//:version_check",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "proc-macro-error-attr_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.proc-macro2-1.0.40.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.proc-macro2-1.0.40.bazel
new file mode 100644
index 0000000..92b0c55
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.proc-macro2-1.0.40.bazel
@@ -0,0 +1,181 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "proc_macro2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+        "span-locations",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.40",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__proc-macro2-1.0.40//:build_script_build",
+            "@crates_vendor__unicode-ident-1.0.2//:unicode_ident",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "proc-macro2_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+        "span-locations",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.40",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "proc-macro2_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.pulldown-cmark-0.8.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.pulldown-cmark-0.8.0.bazel
new file mode 100644
index 0000000..0dacb77
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.pulldown-cmark-0.8.0.bazel
@@ -0,0 +1,248 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "pulldown_cmark",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.8.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__bitflags-1.3.2//:bitflags",
+            "@crates_vendor__memchr-2.5.0//:memchr",
+            "@crates_vendor__pulldown-cmark-0.8.0//:build_script_build",
+            "@crates_vendor__unicase-2.6.0//:unicase",
+        ],
+    }),
+)
+
+rust_binary(
+    name = "pulldown-cmark__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/main.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.8.0",
+    deps = [
+        ":pulldown_cmark",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__bitflags-1.3.2//:bitflags",
+            "@crates_vendor__memchr-2.5.0//:memchr",
+            "@crates_vendor__pulldown-cmark-0.8.0//:build_script_build",
+            "@crates_vendor__unicase-2.6.0//:unicase",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "pulldown-cmark_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.8.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "pulldown-cmark_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.quote-1.0.20.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.quote-1.0.20.bazel
new file mode 100644
index 0000000..b5e02ff
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.quote-1.0.20.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "quote",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.20",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__proc-macro2-1.0.40//:proc_macro2",
+            "@crates_vendor__quote-1.0.20//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "quote_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.20",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "quote_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.rand-0.8.5.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.rand-0.8.5.bazel
new file mode 100644
index 0000000..b5ea8c2
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.rand-0.8.5.bazel
@@ -0,0 +1,128 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "rand",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "default",
+        "getrandom",
+        "libc",
+        "rand_chacha",
+        "std",
+        "std_rng",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.8.5",
+    deps = [
+    ] + select_with_or({
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@crates_vendor__libc-0.2.126//:libc",
+
+            # Common Deps
+            "@crates_vendor__rand_chacha-0.3.1//:rand_chacha",
+            "@crates_vendor__rand_core-0.6.3//:rand_core",
+        ],
+        "//conditions:default": [
+            "@crates_vendor__rand_chacha-0.3.1//:rand_chacha",
+            "@crates_vendor__rand_core-0.6.3//:rand_core",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.rand_chacha-0.3.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.rand_chacha-0.3.1.bazel
new file mode 100644
index 0000000..6fa11ed
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.rand_chacha-0.3.1.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "rand_chacha",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__ppv-lite86-0.2.16//:ppv_lite86",
+            "@crates_vendor__rand_core-0.6.3//:rand_core",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.rand_core-0.6.3.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.rand_core-0.6.3.bazel
new file mode 100644
index 0000000..9fd0059
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.rand_core-0.6.3.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "rand_core",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "getrandom",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__getrandom-0.2.7//:getrandom",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.regex-1.6.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.regex-1.6.0.bazel
new file mode 100644
index 0000000..9692032
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.regex-1.6.0.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "regex",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+        "unicode",
+        "unicode-age",
+        "unicode-bool",
+        "unicode-case",
+        "unicode-gencat",
+        "unicode-perl",
+        "unicode-script",
+        "unicode-segment",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.6.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__regex-syntax-0.6.27//:regex_syntax",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.regex-syntax-0.6.27.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.regex-syntax-0.6.27.bazel
new file mode 100644
index 0000000..0f3cccd
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.regex-syntax-0.6.27.bazel
@@ -0,0 +1,98 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "regex_syntax",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "unicode",
+        "unicode-age",
+        "unicode-bool",
+        "unicode-case",
+        "unicode-gencat",
+        "unicode-perl",
+        "unicode-script",
+        "unicode-segment",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.27",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.semver-1.0.12.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.semver-1.0.12.bazel
new file mode 100644
index 0000000..577f791
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.semver-1.0.12.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "semver",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.12",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__semver-1.0.12//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "semver_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.12",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "semver_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.serde-1.0.140.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.serde-1.0.140.bazel
new file mode 100644
index 0000000..02d0f95
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.serde-1.0.140.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "serde",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.140",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__serde-1.0.140//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "serde_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.140",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "serde_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.strsim-0.10.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.strsim-0.10.0.bazel
new file mode 100644
index 0000000..1d8428a
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.strsim-0.10.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "strsim",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.10.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.syn-1.0.98.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.syn-1.0.98.bazel
new file mode 100644
index 0000000..da84b64
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.syn-1.0.98.bazel
@@ -0,0 +1,193 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "syn",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "full",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.98",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__proc-macro2-1.0.40//:proc_macro2",
+            "@crates_vendor__quote-1.0.20//:quote",
+            "@crates_vendor__syn-1.0.98//:build_script_build",
+            "@crates_vendor__unicode-ident-1.0.2//:unicode_ident",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "syn_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "full",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.98",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "syn_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.termcolor-1.1.3.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.termcolor-1.1.3.bazel
new file mode 100644
index 0000000..2cc6b7c
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.termcolor-1.1.3.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense OR MIT
+# ])
+
+rust_library(
+    name = "termcolor",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.3",
+    deps = [
+    ] + select_with_or({
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@crates_vendor__winapi-util-0.1.5//:winapi_util",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.textwrap-0.15.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.textwrap-0.15.0.bazel
new file mode 100644
index 0000000..363cb51
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.textwrap-0.15.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "textwrap",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.15.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.tinyvec-1.6.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.tinyvec-1.6.0.bazel
new file mode 100644
index 0000000..9a5c4ee
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.tinyvec-1.6.0.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Zlib OR Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "tinyvec",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "default",
+        "tinyvec_macros",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.6.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__tinyvec_macros-0.1.0//:tinyvec_macros",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.tinyvec_macros-0.1.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.tinyvec_macros-0.1.0.bazel
new file mode 100644
index 0000000..65a45c9
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.tinyvec_macros-0.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0 OR Zlib
+# ])
+
+rust_library(
+    name = "tinyvec_macros",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.toml-0.5.9.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.toml-0.5.9.bazel
new file mode 100644
index 0000000..e7852a8
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.toml-0.5.9.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "toml",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.5.9",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__serde-1.0.140//:serde",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.unicase-2.6.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.unicase-2.6.0.bazel
new file mode 100644
index 0000000..781e1c9
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.unicase-2.6.0.bazel
@@ -0,0 +1,175 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "unicase",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.6.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__unicase-2.6.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "unicase_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "2.6.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__version_check-0.9.4//:version_check",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "unicase_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.unicode-bidi-0.3.8.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.unicode-bidi-0.3.8.bazel
new file mode 100644
index 0000000..e42cddd
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.unicode-bidi-0.3.8.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "unicode_bidi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "hardcoded-data",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.unicode-ident-1.0.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.unicode-ident-1.0.2.bazel
new file mode 100644
index 0000000..fc8f01b
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.unicode-ident-1.0.2.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # (MIT OR Apache-2.0) AND Unicode-DFS-2016
+# ])
+
+rust_library(
+    name = "unicode_ident",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.unicode-normalization-0.1.21.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.unicode-normalization-0.1.21.bazel
new file mode 100644
index 0000000..8d77583
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.unicode-normalization-0.1.21.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "unicode_normalization",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.21",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__tinyvec-1.6.0//:tinyvec",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.url-2.2.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.url-2.2.2.bazel
new file mode 100644
index 0000000..2ff49a6
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.url-2.2.2.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "url",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.2.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__form_urlencoded-1.0.1//:form_urlencoded",
+            "@crates_vendor__idna-0.2.3//:idna",
+            "@crates_vendor__matches-0.1.9//:matches",
+            "@crates_vendor__percent-encoding-2.1.0//:percent_encoding",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.version-sync-0.9.4.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.version-sync-0.9.4.bazel
new file mode 100644
index 0000000..1ac26c5
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.version-sync-0.9.4.bazel
@@ -0,0 +1,108 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "version_sync",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "contains_regex",
+        "default",
+        "html_root_url_updated",
+        "markdown_deps_updated",
+        "proc-macro2",
+        "pulldown-cmark",
+        "regex",
+        "semver",
+        "syn",
+        "toml",
+        "url",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.9.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__proc-macro2-1.0.40//:proc_macro2",
+            "@crates_vendor__pulldown-cmark-0.8.0//:pulldown_cmark",
+            "@crates_vendor__regex-1.6.0//:regex",
+            "@crates_vendor__semver-1.0.12//:semver",
+            "@crates_vendor__syn-1.0.98//:syn",
+            "@crates_vendor__toml-0.5.9//:toml",
+            "@crates_vendor__url-2.2.2//:url",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.version_check-0.9.4.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.version_check-0.9.4.bazel
new file mode 100644
index 0000000..26147bc
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.version_check-0.9.4.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "version_check",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.9.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel
new file mode 100644
index 0000000..8f4d886
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "wasi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.11.0+wasi-snapshot-preview1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.winapi-0.3.9.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.winapi-0.3.9.bazel
new file mode 100644
index 0000000..ef89ed5
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.winapi-0.3.9.bazel
@@ -0,0 +1,206 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "winapi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "consoleapi",
+        "errhandlingapi",
+        "fileapi",
+        "minwinbase",
+        "minwindef",
+        "processenv",
+        "std",
+        "winbase",
+        "wincon",
+        "winerror",
+        "winnt",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.9",
+    deps = [
+    ] + select_with_or({
+        # i686-pc-windows-gnu
+        #
+        # No supported platform triples for cfg: 'i686-pc-windows-gnu'
+        # Skipped dependencies: [{"id":"winapi-i686-pc-windows-gnu 0.4.0","target":"winapi_i686_pc_windows_gnu"}]
+        #
+        # x86_64-pc-windows-gnu
+        #
+        # No supported platform triples for cfg: 'x86_64-pc-windows-gnu'
+        # Skipped dependencies: [{"id":"winapi-x86_64-pc-windows-gnu 0.4.0","target":"winapi_x86_64_pc_windows_gnu"}]
+        #
+        "//conditions:default": [
+            "@crates_vendor__winapi-0.3.9//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "winapi_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "consoleapi",
+        "errhandlingapi",
+        "fileapi",
+        "minwinbase",
+        "minwindef",
+        "processenv",
+        "std",
+        "winbase",
+        "wincon",
+        "winerror",
+        "winnt",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.3.9",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "winapi_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
new file mode 100644
index 0000000..2ef904e
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "winapi_i686_pc_windows_gnu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__winapi-i686-pc-windows-gnu-0.4.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "winapi-i686-pc-windows-gnu_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "winapi-i686-pc-windows-gnu_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.winapi-util-0.1.5.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.winapi-util-0.1.5.bazel
new file mode 100644
index 0000000..352af1f
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.winapi-util-0.1.5.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "winapi_util",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.5",
+    deps = [
+    ] + select_with_or({
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@crates_vendor__winapi-0.3.9//:winapi",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
new file mode 100644
index 0000000..ba34a01
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "winapi_x86_64_pc_windows_gnu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor__winapi-x86_64-pc-windows-gnu-0.4.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "winapi-x86_64-pc-windows-gnu_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "winapi-x86_64-pc-windows-gnu_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/crates.bzl b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/crates.bzl
new file mode 100644
index 0000000..e86b985
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/crates.bzl
@@ -0,0 +1,25 @@
+###############################################################################
+# @generated
+# This file is auto-generated by the cargo-bazel tool.
+#
+# DO NOT MODIFY: Local changes may be replaced in future executions.
+###############################################################################
+"""Rules for defining repositories for remote `crates_vendor` repositories"""
+
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+# buildifier: disable=bzl-visibility
+load("@examples//vendor_external/crates:defs.bzl", _crate_repositories = "crate_repositories")
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:crates_vendor.bzl", "crates_vendor_remote_repository")
+
+def crate_repositories():
+    maybe(
+        crates_vendor_remote_repository,
+        name = "crates_vendor",
+        build_file = Label("@examples//vendor_external/crates:BUILD.bazel"),
+        defs_module = Label("@examples//vendor_external/crates:defs.bzl"),
+    )
+
+    _crate_repositories()
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/crates/defs.bzl b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/defs.bzl
new file mode 100644
index 0000000..ebd2376
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/crates/defs.bzl
@@ -0,0 +1,895 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_external:crates_vendor
+###############################################################################
+"""
+# `crates_repository` API
+
+- [aliases](#aliases)
+- [crate_deps](#crate_deps)
+- [all_crate_deps](#all_crate_deps)
+- [crate_repositories](#crate_repositories)
+
+"""
+
+load("@bazel_skylib//lib:selects.bzl", "selects")
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+###############################################################################
+# MACROS API
+###############################################################################
+
+# An identifier that represent common dependencies (unconditional).
+_COMMON_CONDITION = ""
+
+def _flatten_dependency_maps(all_dependency_maps):
+    """Flatten a list of dependency maps into one dictionary.
+
+    Dependency maps have the following structure:
+
+    ```python
+    DEPENDENCIES_MAP = {
+        # The first key in the map is a Bazel package
+        # name of the workspace this file is defined in.
+        "workspace_member_package": {
+
+            # Not all dependnecies are supported for all platforms.
+            # the condition key is the condition required to be true
+            # on the host platform.
+            "condition": {
+
+                # An alias to a crate target.     # The label of the crate target the
+                # Aliases are only crate names.   # package name refers to.
+                "package_name":                   "@full//:label",
+            }
+        }
+    }
+    ```
+
+    Args:
+        all_dependency_maps (list): A list of dicts as described above
+
+    Returns:
+        dict: A dictionary as described above
+    """
+    dependencies = {}
+
+    for workspace_deps_map in all_dependency_maps:
+        for pkg_name, conditional_deps_map in workspace_deps_map.items():
+            if pkg_name not in dependencies:
+                non_frozen_map = dict()
+                for key, values in conditional_deps_map.items():
+                    non_frozen_map.update({key: dict(values.items())})
+                dependencies.setdefault(pkg_name, non_frozen_map)
+                continue
+
+            for condition, deps_map in conditional_deps_map.items():
+                # If the condition has not been recorded, do so and continue
+                if condition not in dependencies[pkg_name]:
+                    dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))
+                    continue
+
+                # Alert on any miss-matched dependencies
+                inconsistent_entries = []
+                for crate_name, crate_label in deps_map.items():
+                    existing = dependencies[pkg_name][condition].get(crate_name)
+                    if existing and existing != crate_label:
+                        inconsistent_entries.append((crate_name, existing, crate_label))
+                    dependencies[pkg_name][condition].update({crate_name: crate_label})
+
+    return dependencies
+
+def crate_deps(deps, package_name = None):
+    """Finds the fully qualified label of the requested crates for the package where this macro is called.
+
+    Args:
+        deps (list): The desired list of crate targets.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()`.
+
+    Returns:
+        list: A list of labels to generated rust targets (str)
+    """
+
+    if not deps:
+        return []
+
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Join both sets of dependencies
+    dependencies = _flatten_dependency_maps([
+        _NORMAL_DEPENDENCIES,
+        _NORMAL_DEV_DEPENDENCIES,
+        _PROC_MACRO_DEPENDENCIES,
+        _PROC_MACRO_DEV_DEPENDENCIES,
+        _BUILD_DEPENDENCIES,
+        _BUILD_PROC_MACRO_DEPENDENCIES,
+    ]).pop(package_name, {})
+
+    # Combine all conditional packages so we can easily index over a flat list
+    # TODO: Perhaps this should actually return select statements and maintain
+    # the conditionals of the dependencies
+    flat_deps = {}
+    for deps_set in dependencies.values():
+        for crate_name, crate_label in deps_set.items():
+            flat_deps.update({crate_name: crate_label})
+
+    missing_crates = []
+    crate_targets = []
+    for crate_target in deps:
+        if crate_target not in flat_deps:
+            missing_crates.append(crate_target)
+        else:
+            crate_targets.append(flat_deps[crate_target])
+
+    if missing_crates:
+        fail("Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`".format(
+            missing_crates,
+            package_name,
+            dependencies,
+        ))
+
+    return crate_targets
+
+def all_crate_deps(
+        normal = False,
+        normal_dev = False,
+        proc_macro = False,
+        proc_macro_dev = False,
+        build = False,
+        build_proc_macro = False,
+        package_name = None):
+    """Finds the fully qualified label of all requested direct crate dependencies \
+    for the package where this macro is called.
+
+    If no parameters are set, all normal dependencies are returned. Setting any one flag will
+    otherwise impact the contents of the returned list.
+
+    Args:
+        normal (bool, optional): If True, normal dependencies are included in the
+            output list.
+        normal_dev (bool, optional): If True, normla dev dependencies will be
+            included in the output list..
+        proc_macro (bool, optional): If True, proc_macro dependencies are included
+            in the output list.
+        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
+            included in the output list.
+        build (bool, optional): If True, build dependencies are included
+            in the output list.
+        build_proc_macro (bool, optional): If True, build proc_macro dependencies are
+            included in the output list.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()` when unset.
+
+    Returns:
+        list: A list of labels to generated rust targets (str)
+    """
+
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Determine the relevant maps to use
+    all_dependency_maps = []
+    if normal:
+        all_dependency_maps.append(_NORMAL_DEPENDENCIES)
+    if normal_dev:
+        all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)
+    if proc_macro:
+        all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)
+    if proc_macro_dev:
+        all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)
+    if build:
+        all_dependency_maps.append(_BUILD_DEPENDENCIES)
+    if build_proc_macro:
+        all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)
+
+    # Default to always using normal dependencies
+    if not all_dependency_maps:
+        all_dependency_maps.append(_NORMAL_DEPENDENCIES)
+
+    dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
+
+    if not dependencies:
+        if dependencies == None:
+            fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
+        else:
+            return []
+
+    crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
+    for condition, deps in dependencies.items():
+        crate_deps += selects.with_or({_CONDITIONS[condition]: deps.values()})
+
+    return crate_deps
+
+def aliases(
+        normal = False,
+        normal_dev = False,
+        proc_macro = False,
+        proc_macro_dev = False,
+        build = False,
+        build_proc_macro = False,
+        package_name = None):
+    """Produces a map of Crate alias names to their original label
+
+    If no dependency kinds are specified, `normal` and `proc_macro` are used by default.
+    Setting any one flag will otherwise determine the contents of the returned dict.
+
+    Args:
+        normal (bool, optional): If True, normal dependencies are included in the
+            output list.
+        normal_dev (bool, optional): If True, normla dev dependencies will be
+            included in the output list..
+        proc_macro (bool, optional): If True, proc_macro dependencies are included
+            in the output list.
+        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
+            included in the output list.
+        build (bool, optional): If True, build dependencies are included
+            in the output list.
+        build_proc_macro (bool, optional): If True, build proc_macro dependencies are
+            included in the output list.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()` when unset.
+
+    Returns:
+        dict: The aliases of all associated packages
+    """
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Determine the relevant maps to use
+    all_aliases_maps = []
+    if normal:
+        all_aliases_maps.append(_NORMAL_ALIASES)
+    if normal_dev:
+        all_aliases_maps.append(_NORMAL_DEV_ALIASES)
+    if proc_macro:
+        all_aliases_maps.append(_PROC_MACRO_ALIASES)
+    if proc_macro_dev:
+        all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)
+    if build:
+        all_aliases_maps.append(_BUILD_ALIASES)
+    if build_proc_macro:
+        all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)
+
+    # Default to always using normal aliases
+    if not all_aliases_maps:
+        all_aliases_maps.append(_NORMAL_ALIASES)
+        all_aliases_maps.append(_PROC_MACRO_ALIASES)
+
+    aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)
+
+    if not aliases:
+        return dict()
+
+    common_items = aliases.pop(_COMMON_CONDITION, {}).items()
+
+    # If there are only common items in the dictionary, immediately return them
+    if not len(aliases.keys()) == 1:
+        return dict(common_items)
+
+    # Build a single select statement where each conditional has accounted for the
+    # common set of aliases.
+    crate_aliases = {"//conditions:default": common_items}
+    for condition, deps in aliases.items():
+        condition_triples = _CONDITIONS[condition]
+        if condition_triples in crate_aliases:
+            crate_aliases[condition_triples].update(deps)
+        else:
+            crate_aliases.update({_CONDITIONS[condition]: dict(deps.items() + common_items)})
+
+    return selects.with_or(crate_aliases)
+
+###############################################################################
+# WORKSPACE MEMBER DEPS AND ALIASES
+###############################################################################
+
+_NORMAL_DEPENDENCIES = {
+    "": {
+        _COMMON_CONDITION: {
+            "clap": "@crates_vendor__clap-3.2.14//:clap",
+            "rand": "@crates_vendor__rand-0.8.5//:rand",
+        },
+    },
+}
+
+_NORMAL_ALIASES = {
+    "": {
+        _COMMON_CONDITION: {
+        },
+    },
+}
+
+_NORMAL_DEV_DEPENDENCIES = {
+    "": {
+        _COMMON_CONDITION: {
+            "version-sync": "@crates_vendor__version-sync-0.9.4//:version_sync",
+        },
+    },
+}
+
+_NORMAL_DEV_ALIASES = {
+    "": {
+        _COMMON_CONDITION: {
+        },
+    },
+}
+
+_PROC_MACRO_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_ALIASES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEV_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEV_ALIASES = {
+    "": {
+        _COMMON_CONDITION: {
+        },
+    },
+}
+
+_BUILD_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_BUILD_ALIASES = {
+    "": {
+    },
+}
+
+_BUILD_PROC_MACRO_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_BUILD_PROC_MACRO_ALIASES = {
+    "": {
+    },
+}
+
+_CONDITIONS = {
+    "cfg(target_os = \"hermit\")": [],
+    "cfg(target_os = \"wasi\")": ["wasm32-wasi"],
+    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(windows)": ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc"],
+    "i686-pc-windows-gnu": [],
+    "x86_64-pc-windows-gnu": [],
+}
+
+###############################################################################
+
+def crate_repositories():
+    """A macro for defining repositories for all generated crates"""
+    maybe(
+        http_archive,
+        name = "crates_vendor__atty-0.2.14",
+        sha256 = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/atty/0.2.14/download"],
+        strip_prefix = "atty-0.2.14",
+        build_file = Label("@examples//vendor_external/crates:BUILD.atty-0.2.14.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__autocfg-1.1.0",
+        sha256 = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/autocfg/1.1.0/download"],
+        strip_prefix = "autocfg-1.1.0",
+        build_file = Label("@examples//vendor_external/crates:BUILD.autocfg-1.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__bitflags-1.3.2",
+        sha256 = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/bitflags/1.3.2/download"],
+        strip_prefix = "bitflags-1.3.2",
+        build_file = Label("@examples//vendor_external/crates:BUILD.bitflags-1.3.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__cfg-if-1.0.0",
+        sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/cfg-if/1.0.0/download"],
+        strip_prefix = "cfg-if-1.0.0",
+        build_file = Label("@examples//vendor_external/crates:BUILD.cfg-if-1.0.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__clap-3.2.14",
+        sha256 = "54635806b078b7925d6e36810b1755f2a4b5b4d57560432c1ecf60bcbe10602b",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/clap/3.2.14/download"],
+        strip_prefix = "clap-3.2.14",
+        build_file = Label("@examples//vendor_external/crates:BUILD.clap-3.2.14.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__clap_derive-3.2.7",
+        sha256 = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/clap_derive/3.2.7/download"],
+        strip_prefix = "clap_derive-3.2.7",
+        build_file = Label("@examples//vendor_external/crates:BUILD.clap_derive-3.2.7.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__clap_lex-0.2.4",
+        sha256 = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/clap_lex/0.2.4/download"],
+        strip_prefix = "clap_lex-0.2.4",
+        build_file = Label("@examples//vendor_external/crates:BUILD.clap_lex-0.2.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__form_urlencoded-1.0.1",
+        sha256 = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/form_urlencoded/1.0.1/download"],
+        strip_prefix = "form_urlencoded-1.0.1",
+        build_file = Label("@examples//vendor_external/crates:BUILD.form_urlencoded-1.0.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__getrandom-0.2.7",
+        sha256 = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/getrandom/0.2.7/download"],
+        strip_prefix = "getrandom-0.2.7",
+        build_file = Label("@examples//vendor_external/crates:BUILD.getrandom-0.2.7.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__hashbrown-0.12.3",
+        sha256 = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/hashbrown/0.12.3/download"],
+        strip_prefix = "hashbrown-0.12.3",
+        build_file = Label("@examples//vendor_external/crates:BUILD.hashbrown-0.12.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__heck-0.4.0",
+        sha256 = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/heck/0.4.0/download"],
+        strip_prefix = "heck-0.4.0",
+        build_file = Label("@examples//vendor_external/crates:BUILD.heck-0.4.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__hermit-abi-0.1.19",
+        sha256 = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/hermit-abi/0.1.19/download"],
+        strip_prefix = "hermit-abi-0.1.19",
+        build_file = Label("@examples//vendor_external/crates:BUILD.hermit-abi-0.1.19.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__idna-0.2.3",
+        sha256 = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/idna/0.2.3/download"],
+        strip_prefix = "idna-0.2.3",
+        build_file = Label("@examples//vendor_external/crates:BUILD.idna-0.2.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__indexmap-1.9.1",
+        sha256 = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/indexmap/1.9.1/download"],
+        strip_prefix = "indexmap-1.9.1",
+        build_file = Label("@examples//vendor_external/crates:BUILD.indexmap-1.9.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__libc-0.2.126",
+        sha256 = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/libc/0.2.126/download"],
+        strip_prefix = "libc-0.2.126",
+        build_file = Label("@examples//vendor_external/crates:BUILD.libc-0.2.126.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__matches-0.1.9",
+        sha256 = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/matches/0.1.9/download"],
+        strip_prefix = "matches-0.1.9",
+        build_file = Label("@examples//vendor_external/crates:BUILD.matches-0.1.9.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__memchr-2.5.0",
+        sha256 = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/memchr/2.5.0/download"],
+        strip_prefix = "memchr-2.5.0",
+        build_file = Label("@examples//vendor_external/crates:BUILD.memchr-2.5.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__once_cell-1.13.0",
+        sha256 = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/once_cell/1.13.0/download"],
+        strip_prefix = "once_cell-1.13.0",
+        build_file = Label("@examples//vendor_external/crates:BUILD.once_cell-1.13.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__os_str_bytes-6.2.0",
+        sha256 = "648001efe5d5c0102d8cea768e348da85d90af8ba91f0bea908f157951493cd4",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/os_str_bytes/6.2.0/download"],
+        strip_prefix = "os_str_bytes-6.2.0",
+        build_file = Label("@examples//vendor_external/crates:BUILD.os_str_bytes-6.2.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__percent-encoding-2.1.0",
+        sha256 = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/percent-encoding/2.1.0/download"],
+        strip_prefix = "percent-encoding-2.1.0",
+        build_file = Label("@examples//vendor_external/crates:BUILD.percent-encoding-2.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__ppv-lite86-0.2.16",
+        sha256 = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/ppv-lite86/0.2.16/download"],
+        strip_prefix = "ppv-lite86-0.2.16",
+        build_file = Label("@examples//vendor_external/crates:BUILD.ppv-lite86-0.2.16.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__proc-macro-error-1.0.4",
+        sha256 = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/proc-macro-error/1.0.4/download"],
+        strip_prefix = "proc-macro-error-1.0.4",
+        build_file = Label("@examples//vendor_external/crates:BUILD.proc-macro-error-1.0.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__proc-macro-error-attr-1.0.4",
+        sha256 = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/proc-macro-error-attr/1.0.4/download"],
+        strip_prefix = "proc-macro-error-attr-1.0.4",
+        build_file = Label("@examples//vendor_external/crates:BUILD.proc-macro-error-attr-1.0.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__proc-macro2-1.0.40",
+        sha256 = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/proc-macro2/1.0.40/download"],
+        strip_prefix = "proc-macro2-1.0.40",
+        build_file = Label("@examples//vendor_external/crates:BUILD.proc-macro2-1.0.40.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__pulldown-cmark-0.8.0",
+        sha256 = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/pulldown-cmark/0.8.0/download"],
+        strip_prefix = "pulldown-cmark-0.8.0",
+        build_file = Label("@examples//vendor_external/crates:BUILD.pulldown-cmark-0.8.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__quote-1.0.20",
+        sha256 = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/quote/1.0.20/download"],
+        strip_prefix = "quote-1.0.20",
+        build_file = Label("@examples//vendor_external/crates:BUILD.quote-1.0.20.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__rand-0.8.5",
+        sha256 = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/rand/0.8.5/download"],
+        strip_prefix = "rand-0.8.5",
+        build_file = Label("@examples//vendor_external/crates:BUILD.rand-0.8.5.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__rand_chacha-0.3.1",
+        sha256 = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/rand_chacha/0.3.1/download"],
+        strip_prefix = "rand_chacha-0.3.1",
+        build_file = Label("@examples//vendor_external/crates:BUILD.rand_chacha-0.3.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__rand_core-0.6.3",
+        sha256 = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/rand_core/0.6.3/download"],
+        strip_prefix = "rand_core-0.6.3",
+        build_file = Label("@examples//vendor_external/crates:BUILD.rand_core-0.6.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__regex-1.6.0",
+        sha256 = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/regex/1.6.0/download"],
+        strip_prefix = "regex-1.6.0",
+        build_file = Label("@examples//vendor_external/crates:BUILD.regex-1.6.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__regex-syntax-0.6.27",
+        sha256 = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/regex-syntax/0.6.27/download"],
+        strip_prefix = "regex-syntax-0.6.27",
+        build_file = Label("@examples//vendor_external/crates:BUILD.regex-syntax-0.6.27.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__semver-1.0.12",
+        sha256 = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/semver/1.0.12/download"],
+        strip_prefix = "semver-1.0.12",
+        build_file = Label("@examples//vendor_external/crates:BUILD.semver-1.0.12.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__serde-1.0.140",
+        sha256 = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/serde/1.0.140/download"],
+        strip_prefix = "serde-1.0.140",
+        build_file = Label("@examples//vendor_external/crates:BUILD.serde-1.0.140.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__strsim-0.10.0",
+        sha256 = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/strsim/0.10.0/download"],
+        strip_prefix = "strsim-0.10.0",
+        build_file = Label("@examples//vendor_external/crates:BUILD.strsim-0.10.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__syn-1.0.98",
+        sha256 = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/syn/1.0.98/download"],
+        strip_prefix = "syn-1.0.98",
+        build_file = Label("@examples//vendor_external/crates:BUILD.syn-1.0.98.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__termcolor-1.1.3",
+        sha256 = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/termcolor/1.1.3/download"],
+        strip_prefix = "termcolor-1.1.3",
+        build_file = Label("@examples//vendor_external/crates:BUILD.termcolor-1.1.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__textwrap-0.15.0",
+        sha256 = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/textwrap/0.15.0/download"],
+        strip_prefix = "textwrap-0.15.0",
+        build_file = Label("@examples//vendor_external/crates:BUILD.textwrap-0.15.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__tinyvec-1.6.0",
+        sha256 = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tinyvec/1.6.0/download"],
+        strip_prefix = "tinyvec-1.6.0",
+        build_file = Label("@examples//vendor_external/crates:BUILD.tinyvec-1.6.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__tinyvec_macros-0.1.0",
+        sha256 = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tinyvec_macros/0.1.0/download"],
+        strip_prefix = "tinyvec_macros-0.1.0",
+        build_file = Label("@examples//vendor_external/crates:BUILD.tinyvec_macros-0.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__toml-0.5.9",
+        sha256 = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/toml/0.5.9/download"],
+        strip_prefix = "toml-0.5.9",
+        build_file = Label("@examples//vendor_external/crates:BUILD.toml-0.5.9.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__unicase-2.6.0",
+        sha256 = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unicase/2.6.0/download"],
+        strip_prefix = "unicase-2.6.0",
+        build_file = Label("@examples//vendor_external/crates:BUILD.unicase-2.6.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__unicode-bidi-0.3.8",
+        sha256 = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unicode-bidi/0.3.8/download"],
+        strip_prefix = "unicode-bidi-0.3.8",
+        build_file = Label("@examples//vendor_external/crates:BUILD.unicode-bidi-0.3.8.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__unicode-ident-1.0.2",
+        sha256 = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unicode-ident/1.0.2/download"],
+        strip_prefix = "unicode-ident-1.0.2",
+        build_file = Label("@examples//vendor_external/crates:BUILD.unicode-ident-1.0.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__unicode-normalization-0.1.21",
+        sha256 = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unicode-normalization/0.1.21/download"],
+        strip_prefix = "unicode-normalization-0.1.21",
+        build_file = Label("@examples//vendor_external/crates:BUILD.unicode-normalization-0.1.21.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__url-2.2.2",
+        sha256 = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/url/2.2.2/download"],
+        strip_prefix = "url-2.2.2",
+        build_file = Label("@examples//vendor_external/crates:BUILD.url-2.2.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__version-sync-0.9.4",
+        sha256 = "99d0801cec07737d88cb900e6419f6f68733867f90b3faaa837e84692e101bf0",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/version-sync/0.9.4/download"],
+        strip_prefix = "version-sync-0.9.4",
+        build_file = Label("@examples//vendor_external/crates:BUILD.version-sync-0.9.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__version_check-0.9.4",
+        sha256 = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/version_check/0.9.4/download"],
+        strip_prefix = "version_check-0.9.4",
+        build_file = Label("@examples//vendor_external/crates:BUILD.version_check-0.9.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__wasi-0.11.0-wasi-snapshot-preview1",
+        sha256 = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasi/0.11.0+wasi-snapshot-preview1/download"],
+        strip_prefix = "wasi-0.11.0+wasi-snapshot-preview1",
+        build_file = Label("@examples//vendor_external/crates:BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__winapi-0.3.9",
+        sha256 = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi/0.3.9/download"],
+        strip_prefix = "winapi-0.3.9",
+        build_file = Label("@examples//vendor_external/crates:BUILD.winapi-0.3.9.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__winapi-i686-pc-windows-gnu-0.4.0",
+        sha256 = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download"],
+        strip_prefix = "winapi-i686-pc-windows-gnu-0.4.0",
+        build_file = Label("@examples//vendor_external/crates:BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__winapi-util-0.1.5",
+        sha256 = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi-util/0.1.5/download"],
+        strip_prefix = "winapi-util-0.1.5",
+        build_file = Label("@examples//vendor_external/crates:BUILD.winapi-util-0.1.5.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor__winapi-x86_64-pc-windows-gnu-0.4.0",
+        sha256 = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download"],
+        strip_prefix = "winapi-x86_64-pc-windows-gnu-0.4.0",
+        build_file = Label("@examples//vendor_external/crates:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel"),
+    )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_external/remote_crate_test.rs b/third_party/rules_rust/examples/crate_universe/vendor_external/remote_crate_test.rs
new file mode 100644
index 0000000..f25340a
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_external/remote_crate_test.rs
@@ -0,0 +1,18 @@
+//! A Test module confirming the functionality of `cargo->bazel` with remote crates.
+
+use std::path::PathBuf;
+use std::process::Command;
+
+#[test]
+fn test_executable() {
+    let exe = PathBuf::from(env!("EXECUTABLE"));
+
+    let output = Command::new(exe)
+        .arg("--help")
+        .output()
+        .expect("Failed to run executable");
+
+    let text = String::from_utf8(output.stdout).unwrap();
+
+    assert!(text.contains("A random name generator with results like"));
+}
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/BUILD.bazel
index 866840e..bd5ce66 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 package(default_visibility = ["//visibility:public"])
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/async-stream-0.3.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/async-stream-0.3.2/BUILD.bazel
deleted file mode 100644
index b6de9af..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/async-stream-0.3.2/BUILD.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "async_stream",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_manifests/crates/async-stream-impl-0.3.2:async_stream_impl",
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_manifests/crates/futures-core-0.3.21:futures_core",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/async-stream-0.3.3/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/async-stream-0.3.3/BUILD.bazel
new file mode 100644
index 0000000..23dc4b0
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/async-stream-0.3.3/BUILD.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "async_stream",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_manifests/crates/async-stream-impl-0.3.3:async_stream_impl",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_manifests/crates/futures-core-0.3.21:futures_core",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/async-stream-impl-0.3.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/async-stream-impl-0.3.2/BUILD.bazel
deleted file mode 100644
index a33e572..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/async-stream-impl-0.3.2/BUILD.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_proc_macro",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_proc_macro(
-    name = "async_stream_impl",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_manifests/crates/proc-macro2-1.0.36:proc_macro2",
-            "//vendor_local_manifests/crates/quote-1.0.15:quote",
-            "//vendor_local_manifests/crates/syn-1.0.86:syn",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/async-stream-impl-0.3.3/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/async-stream-impl-0.3.3/BUILD.bazel
new file mode 100644
index 0000000..22e284c
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/async-stream-impl-0.3.3/BUILD.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_proc_macro(
+    name = "async_stream_impl",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_manifests/crates/proc-macro2-1.0.40:proc_macro2",
+            "//vendor_local_manifests/crates/quote-1.0.20:quote",
+            "//vendor_local_manifests/crates/syn-1.0.98:syn",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/autocfg-1.1.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/autocfg-1.1.0/BUILD.bazel
new file mode 100644
index 0000000..7a36c81
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/autocfg-1.1.0/BUILD.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "autocfg",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/bitflags-1.3.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/bitflags-1.3.2/BUILD.bazel
index 6894746..428808b 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/bitflags-1.3.2/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/bitflags-1.3.2/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/bytes-1.1.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/bytes-1.1.0/BUILD.bazel
deleted file mode 100644
index b679f2e..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/bytes-1.1.0/BUILD.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "bytes",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.1.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/bytes-1.2.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/bytes-1.2.0/BUILD.bazel
new file mode 100644
index 0000000..fc8c4f8
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/bytes-1.2.0/BUILD.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "bytes",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.2.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/cfg-if-1.0.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/cfg-if-1.0.0/BUILD.bazel
index e4aab64..5e2242a 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/cfg-if-1.0.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/cfg-if-1.0.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/defs.bzl b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/defs.bzl
index 9950158..ae3a6ce 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/defs.bzl
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/defs.bzl
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 """
 # `crates_repository` API
@@ -192,7 +193,10 @@
     dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
 
     if not dependencies:
-        return []
+        if dependencies == None:
+            fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
+        else:
+            return []
 
     crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
     for condition, deps in dependencies.items():
@@ -357,11 +361,11 @@
 
 _CONDITIONS = {
     "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [],
-    "cfg(any(unix, target_os = \"wasi\"))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
-    "cfg(not(windows))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(any(unix, target_os = \"wasi\"))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(not(windows))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "riscv32imc-unknown-none-elf", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
     "cfg(target_arch = \"wasm32\")": ["wasm32-unknown-unknown", "wasm32-wasi"],
     "cfg(target_os = \"redox\")": [],
-    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
     "cfg(windows)": ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc"],
     "i686-pc-windows-gnu": [],
     "x86_64-pc-windows-gnu": [],
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/fastrand-1.7.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/fastrand-1.7.0/BUILD.bazel
index a421204..588744b 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/fastrand-1.7.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/fastrand-1.7.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/futures-core-0.3.21/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/futures-core-0.3.21/BUILD.bazel
index fa2bd35..2c06ef8 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/futures-core-0.3.21/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/futures-core-0.3.21/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -72,10 +81,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -140,10 +146,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/hermit-abi-0.1.19/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/hermit-abi-0.1.19/BUILD.bazel
index 0d57813..5202106 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/hermit-abi-0.1.19/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/hermit-abi-0.1.19/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,7 +86,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "//vendor_local_manifests/crates/libc-0.2.119:libc",
+            "//vendor_local_manifests/crates/libc-0.2.126:libc",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/instant-0.1.12/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/instant-0.1.12/BUILD.bazel
index 3793223..d38861b 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/instant-0.1.12/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/instant-0.1.12/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/libc-0.2.119/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/libc-0.2.119/BUILD.bazel
deleted file mode 100644
index b41bc90..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/libc-0.2.119/BUILD.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "libc",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.119",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_manifests/crates/libc-0.2.119:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "libc_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.2.119",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "libc_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/libc-0.2.126/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/libc-0.2.126/BUILD.bazel
new file mode 100644
index 0000000..d926423
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/libc-0.2.126/BUILD.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.126",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_manifests/crates/libc-0.2.126:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "libc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.126",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "libc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/lock_api-0.4.6/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/lock_api-0.4.6/BUILD.bazel
deleted file mode 100644
index 4d93580..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/lock_api-0.4.6/BUILD.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0/MIT
-# ])
-
-rust_library(
-    name = "lock_api",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.6",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_manifests/crates/scopeguard-1.1.0:scopeguard",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/lock_api-0.4.7/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/lock_api-0.4.7/BUILD.bazel
new file mode 100644
index 0000000..5e879e6
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/lock_api-0.4.7/BUILD.bazel
@@ -0,0 +1,176 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "lock_api",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.7",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_manifests/crates/lock_api-0.4.7:build_script_build",
+            "//vendor_local_manifests/crates/scopeguard-1.1.0:scopeguard",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "lock_api_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.7",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_manifests/crates/autocfg-1.1.0:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "lock_api_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/log-0.4.14/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/log-0.4.14/BUILD.bazel
deleted file mode 100644
index b32f242..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/log-0.4.14/BUILD.bazel
+++ /dev/null
@@ -1,172 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "log",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.14",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_manifests/crates/cfg-if-1.0.0:cfg_if",
-            "//vendor_local_manifests/crates/log-0.4.14:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "log_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.4.14",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "log_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/log-0.4.17/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/log-0.4.17/BUILD.bazel
new file mode 100644
index 0000000..20c2039
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/log-0.4.17/BUILD.bazel
@@ -0,0 +1,175 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "log",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.17",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_manifests/crates/cfg-if-1.0.0:cfg_if",
+            "//vendor_local_manifests/crates/log-0.4.17:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "log_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.17",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "log_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/memchr-2.4.1/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/memchr-2.4.1/BUILD.bazel
deleted file mode 100644
index 29f02e0..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/memchr-2.4.1/BUILD.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Unlicense/MIT
-# ])
-
-rust_library(
-    name = "memchr",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "2.4.1",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_manifests/crates/memchr-2.4.1:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "memchr_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "2.4.1",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "memchr_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/memchr-2.5.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/memchr-2.5.0/BUILD.bazel
new file mode 100644
index 0000000..7f98d44
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/memchr-2.5.0/BUILD.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "memchr",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.5.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_manifests/crates/memchr-2.5.0:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "memchr_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "2.5.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "memchr_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/mio-0.7.14/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/mio-0.7.14/BUILD.bazel
index 78472d8..7ccd2ab 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/mio-0.7.14/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/mio-0.7.14/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -73,10 +82,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -90,9 +96,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -107,10 +115,10 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "//vendor_local_manifests/crates/libc-0.2.119:libc",
+            "//vendor_local_manifests/crates/libc-0.2.126:libc",
 
             # Common Deps
-            "//vendor_local_manifests/crates/log-0.4.14:log",
+            "//vendor_local_manifests/crates/log-0.4.17:log",
         ],
         # cfg(windows)
         (
@@ -123,10 +131,10 @@
             "//vendor_local_manifests/crates/winapi-0.3.9:winapi",
 
             # Common Deps
-            "//vendor_local_manifests/crates/log-0.4.14:log",
+            "//vendor_local_manifests/crates/log-0.4.17:log",
         ],
         "//conditions:default": [
-            "//vendor_local_manifests/crates/log-0.4.14:log",
+            "//vendor_local_manifests/crates/log-0.4.17:log",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/miow-0.3.7/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/miow-0.3.7/BUILD.bazel
index 13a2472..d37d84c 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/miow-0.3.7/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/miow-0.3.7/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/ntapi-0.3.7/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/ntapi-0.3.7/BUILD.bazel
index b90789b..a0c0dce 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/ntapi-0.3.7/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/ntapi-0.3.7/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -71,10 +80,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -139,10 +145,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/num_cpus-1.13.1/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/num_cpus-1.13.1/BUILD.bazel
index ecdf236..fd589b4 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/num_cpus-1.13.1/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/num_cpus-1.13.1/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -87,15 +93,18 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
             "@rules_rust//rust/platform:i686-unknown-freebsd",
             "@rules_rust//rust/platform:i686-unknown-linux-gnu",
             "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:riscv32imc-unknown-none-elf",
             "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
             "@rules_rust//rust/platform:wasm32-unknown-unknown",
             "@rules_rust//rust/platform:wasm32-wasi",
@@ -106,7 +115,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "//vendor_local_manifests/crates/libc-0.2.119:libc",
+            "//vendor_local_manifests/crates/libc-0.2.126:libc",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/once_cell-1.13.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/once_cell-1.13.0/BUILD.bazel
new file mode 100644
index 0000000..54e83c0
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/once_cell-1.13.0/BUILD.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "once_cell",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "default",
+        "race",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.13.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/once_cell-1.9.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/once_cell-1.9.0/BUILD.bazel
deleted file mode 100644
index f2a936a..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/once_cell-1.9.0/BUILD.bazel
+++ /dev/null
@@ -1,88 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "once_cell",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "alloc",
-        "default",
-        "race",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.9.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/parking_lot-0.11.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/parking_lot-0.11.2/BUILD.bazel
index 4d944c2..217c60e 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/parking_lot-0.11.2/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/parking_lot-0.11.2/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -81,7 +87,7 @@
     ] + select_with_or({
         "//conditions:default": [
             "//vendor_local_manifests/crates/instant-0.1.12:instant",
-            "//vendor_local_manifests/crates/lock_api-0.4.6:lock_api",
+            "//vendor_local_manifests/crates/lock_api-0.4.7:lock_api",
             "//vendor_local_manifests/crates/parking_lot_core-0.8.5:parking_lot_core",
         ],
     }),
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/parking_lot_core-0.8.5/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/parking_lot_core-0.8.5/BUILD.bazel
index 0fc55d5..1a24f6c 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/parking_lot_core-0.8.5/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/parking_lot_core-0.8.5/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -85,15 +91,17 @@
         # cfg(target_os = "redox")
         #
         # No supported platform triples for cfg: 'cfg(target_os = "redox")'
-        # Skipped dependencies: [{"id":"redox_syscall 0.2.11","target":"syscall"}]
+        # Skipped dependencies: [{"id":"redox_syscall 0.2.13","target":"syscall"}]
         #
         # cfg(unix)
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -108,13 +116,13 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "//vendor_local_manifests/crates/libc-0.2.119:libc",
+            "//vendor_local_manifests/crates/libc-0.2.126:libc",
 
             # Common Deps
             "//vendor_local_manifests/crates/cfg-if-1.0.0:cfg_if",
             "//vendor_local_manifests/crates/instant-0.1.12:instant",
             "//vendor_local_manifests/crates/parking_lot_core-0.8.5:build_script_build",
-            "//vendor_local_manifests/crates/smallvec-1.8.0:smallvec",
+            "//vendor_local_manifests/crates/smallvec-1.9.0:smallvec",
         ],
         # cfg(windows)
         (
@@ -128,13 +136,13 @@
             "//vendor_local_manifests/crates/cfg-if-1.0.0:cfg_if",
             "//vendor_local_manifests/crates/instant-0.1.12:instant",
             "//vendor_local_manifests/crates/parking_lot_core-0.8.5:build_script_build",
-            "//vendor_local_manifests/crates/smallvec-1.8.0:smallvec",
+            "//vendor_local_manifests/crates/smallvec-1.9.0:smallvec",
         ],
         "//conditions:default": [
             "//vendor_local_manifests/crates/cfg-if-1.0.0:cfg_if",
             "//vendor_local_manifests/crates/instant-0.1.12:instant",
             "//vendor_local_manifests/crates/parking_lot_core-0.8.5:build_script_build",
-            "//vendor_local_manifests/crates/smallvec-1.8.0:smallvec",
+            "//vendor_local_manifests/crates/smallvec-1.9.0:smallvec",
         ],
     }),
 )
@@ -185,10 +193,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/pin-project-lite-0.2.8/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/pin-project-lite-0.2.8/BUILD.bazel
deleted file mode 100644
index cfd3870..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/pin-project-lite-0.2.8/BUILD.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0 OR MIT
-# ])
-
-rust_library(
-    name = "pin_project_lite",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.8",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/pin-project-lite-0.2.9/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/pin-project-lite-0.2.9/BUILD.bazel
new file mode 100644
index 0000000..6d3b20a
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/pin-project-lite-0.2.9/BUILD.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "pin_project_lite",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.9",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/proc-macro2-1.0.36/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/proc-macro2-1.0.36/BUILD.bazel
deleted file mode 100644
index 95239eb..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/proc-macro2-1.0.36/BUILD.bazel
+++ /dev/null
@@ -1,176 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "proc_macro2",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.36",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_manifests/crates/proc-macro2-1.0.36:build_script_build",
-            "//vendor_local_manifests/crates/unicode-xid-0.2.2:unicode_xid",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "proc-macro2_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.36",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "proc-macro2_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/proc-macro2-1.0.40/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/proc-macro2-1.0.40/BUILD.bazel
new file mode 100644
index 0000000..56fab87
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/proc-macro2-1.0.40/BUILD.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "proc_macro2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.40",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_manifests/crates/proc-macro2-1.0.40:build_script_build",
+            "//vendor_local_manifests/crates/unicode-ident-1.0.2:unicode_ident",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "proc-macro2_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.40",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "proc-macro2_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/quote-1.0.15/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/quote-1.0.15/BUILD.bazel
deleted file mode 100644
index 3c8a69f..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/quote-1.0.15/BUILD.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "quote",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.15",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_manifests/crates/proc-macro2-1.0.36:proc_macro2",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/quote-1.0.20/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/quote-1.0.20/BUILD.bazel
new file mode 100644
index 0000000..3ec4a4f
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/quote-1.0.20/BUILD.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "quote",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.20",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_manifests/crates/proc-macro2-1.0.40:proc_macro2",
+            "//vendor_local_manifests/crates/quote-1.0.20:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "quote_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.20",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "quote_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/redox_syscall-0.2.11/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/redox_syscall-0.2.11/BUILD.bazel
deleted file mode 100644
index 9057648..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/redox_syscall-0.2.11/BUILD.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "syscall",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.11",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_manifests/crates/bitflags-1.3.2:bitflags",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/redox_syscall-0.2.13/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/redox_syscall-0.2.13/BUILD.bazel
new file mode 100644
index 0000000..8dbb510
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/redox_syscall-0.2.13/BUILD.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "syscall",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.13",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_manifests/crates/bitflags-1.3.2:bitflags",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/remove_dir_all-0.5.3/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/remove_dir_all-0.5.3/BUILD.bazel
index 9b8cded..ab7cae8 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/remove_dir_all-0.5.3/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/remove_dir_all-0.5.3/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/scopeguard-1.1.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/scopeguard-1.1.0/BUILD.bazel
index 0bc1e13..67199bd 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/scopeguard-1.1.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/scopeguard-1.1.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/signal-hook-registry-1.4.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/signal-hook-registry-1.4.0/BUILD.bazel
index 022c182..dc20563 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/signal-hook-registry-1.4.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/signal-hook-registry-1.4.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "//vendor_local_manifests/crates/libc-0.2.119:libc",
+            "//vendor_local_manifests/crates/libc-0.2.126:libc",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/smallvec-1.8.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/smallvec-1.8.0/BUILD.bazel
deleted file mode 100644
index a9ae389..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/smallvec-1.8.0/BUILD.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "smallvec",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.8.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/smallvec-1.9.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/smallvec-1.9.0/BUILD.bazel
new file mode 100644
index 0000000..3b63877
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/smallvec-1.9.0/BUILD.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "smallvec",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.9.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/syn-1.0.86/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/syn-1.0.86/BUILD.bazel
deleted file mode 100644
index 0b72df3..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/syn-1.0.86/BUILD.bazel
+++ /dev/null
@@ -1,194 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "syn",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "clone-impls",
-        "default",
-        "derive",
-        "extra-traits",
-        "full",
-        "parsing",
-        "printing",
-        "proc-macro",
-        "quote",
-        "visit-mut",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.86",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_manifests/crates/proc-macro2-1.0.36:proc_macro2",
-            "//vendor_local_manifests/crates/quote-1.0.15:quote",
-            "//vendor_local_manifests/crates/syn-1.0.86:build_script_build",
-            "//vendor_local_manifests/crates/unicode-xid-0.2.2:unicode_xid",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "syn_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "clone-impls",
-        "default",
-        "derive",
-        "extra-traits",
-        "full",
-        "parsing",
-        "printing",
-        "proc-macro",
-        "quote",
-        "visit-mut",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.86",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "syn_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/syn-1.0.98/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/syn-1.0.98/BUILD.bazel
new file mode 100644
index 0000000..986b758
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/syn-1.0.98/BUILD.bazel
@@ -0,0 +1,195 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "syn",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "full",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+        "visit-mut",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.98",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_manifests/crates/proc-macro2-1.0.40:proc_macro2",
+            "//vendor_local_manifests/crates/quote-1.0.20:quote",
+            "//vendor_local_manifests/crates/syn-1.0.98:build_script_build",
+            "//vendor_local_manifests/crates/unicode-ident-1.0.2:unicode_ident",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "syn_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "full",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+        "visit-mut",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.98",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "syn_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tempfile-3.3.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tempfile-3.3.0/BUILD.bazel
index d685cc8..977cea2 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tempfile-3.3.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tempfile-3.3.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -82,9 +88,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -100,7 +108,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "//vendor_local_manifests/crates/libc-0.2.119:libc",
+            "//vendor_local_manifests/crates/libc-0.2.126:libc",
 
             # Common Deps
             "//vendor_local_manifests/crates/cfg-if-1.0.0:cfg_if",
@@ -110,7 +118,7 @@
         # cfg(target_os = "redox")
         #
         # No supported platform triples for cfg: 'cfg(target_os = "redox")'
-        # Skipped dependencies: [{"id":"redox_syscall 0.2.11","target":"syscall"}]
+        # Skipped dependencies: [{"id":"redox_syscall 0.2.13","target":"syscall"}]
         #
         # cfg(windows)
         (
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-1.16.1/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-1.16.1/BUILD.bazel
index 3e662a5..77b9171 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-1.16.1/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-1.16.1/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -75,7 +84,7 @@
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "//vendor_local_manifests/crates/tokio-macros-1.7.0:tokio_macros",
+            "//vendor_local_manifests/crates/tokio-macros-1.8.0:tokio_macros",
         ],
     }),
     rustc_env = {
@@ -90,10 +99,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -107,9 +113,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -124,17 +132,17 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "//vendor_local_manifests/crates/libc-0.2.119:libc",
+            "//vendor_local_manifests/crates/libc-0.2.126:libc",
             "//vendor_local_manifests/crates/signal-hook-registry-1.4.0:signal_hook_registry",
 
             # Common Deps
-            "//vendor_local_manifests/crates/bytes-1.1.0:bytes",
-            "//vendor_local_manifests/crates/memchr-2.4.1:memchr",
+            "//vendor_local_manifests/crates/bytes-1.2.0:bytes",
+            "//vendor_local_manifests/crates/memchr-2.5.0:memchr",
             "//vendor_local_manifests/crates/mio-0.7.14:mio",
             "//vendor_local_manifests/crates/num_cpus-1.13.1:num_cpus",
-            "//vendor_local_manifests/crates/once_cell-1.9.0:once_cell",
+            "//vendor_local_manifests/crates/once_cell-1.13.0:once_cell",
             "//vendor_local_manifests/crates/parking_lot-0.11.2:parking_lot",
-            "//vendor_local_manifests/crates/pin-project-lite-0.2.8:pin_project_lite",
+            "//vendor_local_manifests/crates/pin-project-lite-0.2.9:pin_project_lite",
         ],
         # cfg(windows)
         (
@@ -145,22 +153,22 @@
             "//vendor_local_manifests/crates/winapi-0.3.9:winapi",
 
             # Common Deps
-            "//vendor_local_manifests/crates/bytes-1.1.0:bytes",
-            "//vendor_local_manifests/crates/memchr-2.4.1:memchr",
+            "//vendor_local_manifests/crates/bytes-1.2.0:bytes",
+            "//vendor_local_manifests/crates/memchr-2.5.0:memchr",
             "//vendor_local_manifests/crates/mio-0.7.14:mio",
             "//vendor_local_manifests/crates/num_cpus-1.13.1:num_cpus",
-            "//vendor_local_manifests/crates/once_cell-1.9.0:once_cell",
+            "//vendor_local_manifests/crates/once_cell-1.13.0:once_cell",
             "//vendor_local_manifests/crates/parking_lot-0.11.2:parking_lot",
-            "//vendor_local_manifests/crates/pin-project-lite-0.2.8:pin_project_lite",
+            "//vendor_local_manifests/crates/pin-project-lite-0.2.9:pin_project_lite",
         ],
         "//conditions:default": [
-            "//vendor_local_manifests/crates/bytes-1.1.0:bytes",
-            "//vendor_local_manifests/crates/memchr-2.4.1:memchr",
+            "//vendor_local_manifests/crates/bytes-1.2.0:bytes",
+            "//vendor_local_manifests/crates/memchr-2.5.0:memchr",
             "//vendor_local_manifests/crates/mio-0.7.14:mio",
             "//vendor_local_manifests/crates/num_cpus-1.13.1:num_cpus",
-            "//vendor_local_manifests/crates/once_cell-1.9.0:once_cell",
+            "//vendor_local_manifests/crates/once_cell-1.13.0:once_cell",
             "//vendor_local_manifests/crates/parking_lot-0.11.2:parking_lot",
-            "//vendor_local_manifests/crates/pin-project-lite-0.2.8:pin_project_lite",
+            "//vendor_local_manifests/crates/pin-project-lite-0.2.9:pin_project_lite",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-macros-1.7.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-macros-1.7.0/BUILD.bazel
deleted file mode 100644
index ba51873..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-macros-1.7.0/BUILD.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_proc_macro",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_proc_macro(
-    name = "tokio_macros",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.7.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_manifests/crates/proc-macro2-1.0.36:proc_macro2",
-            "//vendor_local_manifests/crates/quote-1.0.15:quote",
-            "//vendor_local_manifests/crates/syn-1.0.86:syn",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-macros-1.8.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-macros-1.8.0/BUILD.bazel
new file mode 100644
index 0000000..4da8e5c
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-macros-1.8.0/BUILD.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_proc_macro(
+    name = "tokio_macros",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.8.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_manifests/crates/proc-macro2-1.0.40:proc_macro2",
+            "//vendor_local_manifests/crates/quote-1.0.20:quote",
+            "//vendor_local_manifests/crates/syn-1.0.98:syn",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-stream-0.1.8/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-stream-0.1.8/BUILD.bazel
deleted file mode 100644
index bdc973a..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-stream-0.1.8/BUILD.bazel
+++ /dev/null
@@ -1,89 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tokio_stream",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "time",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.8",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_manifests/crates/futures-core-0.3.21:futures_core",
-            "//vendor_local_manifests/crates/pin-project-lite-0.2.8:pin_project_lite",
-            "//vendor_local_manifests/crates/tokio-1.16.1:tokio",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-stream-0.1.9/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-stream-0.1.9/BUILD.bazel
new file mode 100644
index 0000000..28775be
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-stream-0.1.9/BUILD.bazel
@@ -0,0 +1,95 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio_stream",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "time",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.9",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_manifests/crates/futures-core-0.3.21:futures_core",
+            "//vendor_local_manifests/crates/pin-project-lite-0.2.9:pin_project_lite",
+            "//vendor_local_manifests/crates/tokio-1.16.1:tokio",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-test-0.4.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-test-0.4.2/BUILD.bazel
index 6ecccfc..867fcbd 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-test-0.4.2/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/tokio-test-0.4.2/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,11 +85,11 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "//vendor_local_manifests/crates/async-stream-0.3.2:async_stream",
-            "//vendor_local_manifests/crates/bytes-1.1.0:bytes",
+            "//vendor_local_manifests/crates/async-stream-0.3.3:async_stream",
+            "//vendor_local_manifests/crates/bytes-1.2.0:bytes",
             "//vendor_local_manifests/crates/futures-core-0.3.21:futures_core",
             "//vendor_local_manifests/crates/tokio-1.16.1:tokio",
-            "//vendor_local_manifests/crates/tokio-stream-0.1.8:tokio_stream",
+            "//vendor_local_manifests/crates/tokio-stream-0.1.9:tokio_stream",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/unicode-ident-1.0.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/unicode-ident-1.0.2/BUILD.bazel
new file mode 100644
index 0000000..59417d8
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/unicode-ident-1.0.2/BUILD.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_manifests:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # (MIT OR Apache-2.0) AND Unicode-DFS-2016
+# ])
+
+rust_library(
+    name = "unicode_ident",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/unicode-xid-0.2.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/unicode-xid-0.2.2/BUILD.bazel
deleted file mode 100644
index 30562c1..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/unicode-xid-0.2.2/BUILD.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "unicode_xid",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/winapi-0.3.9/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/winapi-0.3.9/BUILD.bazel
index 28e223c..8f55c3f 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/winapi-0.3.9/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/winapi-0.3.9/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -97,10 +106,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -200,10 +206,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/winapi-i686-pc-windows-gnu-0.4.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/winapi-i686-pc-windows-gnu-0.4.0/BUILD.bazel
index fbf405f..729cfb5 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/winapi-i686-pc-windows-gnu-0.4.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/winapi-i686-pc-windows-gnu-0.4.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/winapi-x86_64-pc-windows-gnu-0.4.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/winapi-x86_64-pc-windows-gnu-0.4.0/BUILD.bazel
index f0fe920..a52f593 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/winapi-x86_64-pc-windows-gnu-0.4.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_manifests/crates/winapi-x86_64-pc-windows-gnu-0.4.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_manifests:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/BUILD.bazel
index 3e93a62..5c2c712 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 package(default_visibility = ["//visibility:public"])
@@ -33,7 +34,7 @@
 
 alias(
     name = "hyper",
-    actual = "//vendor_local_pkgs/crates/hyper-0.14.17:hyper",
+    actual = "//vendor_local_pkgs/crates/hyper-0.14.20:hyper",
     tags = ["manual"],
 )
 
@@ -45,7 +46,7 @@
 
 alias(
     name = "serde_json",
-    actual = "//vendor_local_pkgs/crates/serde_json-1.0.79:serde_json",
+    actual = "//vendor_local_pkgs/crates/serde_json-1.0.82:serde_json",
     tags = ["manual"],
 )
 
@@ -57,25 +58,25 @@
 
 alias(
     name = "tower",
-    actual = "//vendor_local_pkgs/crates/tower-0.4.12:tower",
+    actual = "//vendor_local_pkgs/crates/tower-0.4.13:tower",
     tags = ["manual"],
 )
 
 alias(
     name = "tower-http",
-    actual = "//vendor_local_pkgs/crates/tower-http-0.2.3:tower_http",
+    actual = "//vendor_local_pkgs/crates/tower-http-0.2.5:tower_http",
     tags = ["manual"],
 )
 
 alias(
     name = "tracing",
-    actual = "//vendor_local_pkgs/crates/tracing-0.1.31:tracing",
+    actual = "//vendor_local_pkgs/crates/tracing-0.1.35:tracing",
     tags = ["manual"],
 )
 
 alias(
     name = "tracing-subscriber",
-    actual = "//vendor_local_pkgs/crates/tracing-subscriber-0.3.9:tracing_subscriber",
+    actual = "//vendor_local_pkgs/crates/tracing-subscriber-0.3.15:tracing_subscriber",
     tags = ["manual"],
 )
 
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/ansi_term-0.12.1/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/ansi_term-0.12.1/BUILD.bazel
index 8fd8de6..0e648f3 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/ansi_term-0.12.1/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/ansi_term-0.12.1/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/async-trait-0.1.52/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/async-trait-0.1.52/BUILD.bazel
deleted file mode 100644
index ec371b8..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/async-trait-0.1.52/BUILD.bazel
+++ /dev/null
@@ -1,174 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_proc_macro",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_proc_macro(
-    name = "async_trait",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.52",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/async-trait-0.1.52:build_script_build",
-            "//vendor_local_pkgs/crates/proc-macro2-1.0.36:proc_macro2",
-            "//vendor_local_pkgs/crates/quote-1.0.15:quote",
-            "//vendor_local_pkgs/crates/syn-1.0.86:syn",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "async-trait_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.1.52",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "async-trait_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/async-trait-0.1.56/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/async-trait-0.1.56/BUILD.bazel
new file mode 100644
index 0000000..3b01367
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/async-trait-0.1.56/BUILD.bazel
@@ -0,0 +1,177 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_proc_macro(
+    name = "async_trait",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.56",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/async-trait-0.1.56:build_script_build",
+            "//vendor_local_pkgs/crates/proc-macro2-1.0.40:proc_macro2",
+            "//vendor_local_pkgs/crates/quote-1.0.20:quote",
+            "//vendor_local_pkgs/crates/syn-1.0.98:syn",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "async-trait_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.1.56",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "async-trait_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/autocfg-1.1.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/autocfg-1.1.0/BUILD.bazel
index bd2fcd9..1bb71ea 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/autocfg-1.1.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/autocfg-1.1.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/axum-0.4.8/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/axum-0.4.8/BUILD.bazel
index 92fea8b..e40d6d4 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/axum-0.4.8/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/axum-0.4.8/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,10 +37,18 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob([
-        "**",
-        "**/*.md",
-    ]) + select_with_or({
+    compile_data = glob(
+        include = [
+            "**",
+            "**/*.md",
+        ],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -59,7 +68,7 @@
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "//vendor_local_pkgs/crates/async-trait-0.1.52:async_trait",
+            "//vendor_local_pkgs/crates/async-trait-0.1.56:async_trait",
         ],
     }),
     rustc_env = {
@@ -74,10 +83,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -90,25 +96,25 @@
         "//conditions:default": [
             "//vendor_local_pkgs/crates/axum-core-0.1.2:axum_core",
             "//vendor_local_pkgs/crates/bitflags-1.3.2:bitflags",
-            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
+            "//vendor_local_pkgs/crates/bytes-1.2.0:bytes",
             "//vendor_local_pkgs/crates/futures-util-0.3.21:futures_util",
-            "//vendor_local_pkgs/crates/http-0.2.6:http",
-            "//vendor_local_pkgs/crates/http-body-0.4.4:http_body",
-            "//vendor_local_pkgs/crates/hyper-0.14.17:hyper",
+            "//vendor_local_pkgs/crates/http-0.2.8:http",
+            "//vendor_local_pkgs/crates/http-body-0.4.5:http_body",
+            "//vendor_local_pkgs/crates/hyper-0.14.20:hyper",
             "//vendor_local_pkgs/crates/matchit-0.4.6:matchit",
-            "//vendor_local_pkgs/crates/memchr-2.4.1:memchr",
+            "//vendor_local_pkgs/crates/memchr-2.5.0:memchr",
             "//vendor_local_pkgs/crates/mime-0.3.16:mime",
             "//vendor_local_pkgs/crates/percent-encoding-2.1.0:percent_encoding",
-            "//vendor_local_pkgs/crates/pin-project-lite-0.2.8:pin_project_lite",
-            "//vendor_local_pkgs/crates/serde-1.0.136:serde",
-            "//vendor_local_pkgs/crates/serde_json-1.0.79:serde_json",
+            "//vendor_local_pkgs/crates/pin-project-lite-0.2.9:pin_project_lite",
+            "//vendor_local_pkgs/crates/serde-1.0.140:serde",
+            "//vendor_local_pkgs/crates/serde_json-1.0.82:serde_json",
             "//vendor_local_pkgs/crates/serde_urlencoded-0.7.1:serde_urlencoded",
             "//vendor_local_pkgs/crates/sync_wrapper-0.1.1:sync_wrapper",
             "//vendor_local_pkgs/crates/tokio-1.16.1:tokio",
-            "//vendor_local_pkgs/crates/tower-0.4.12:tower",
-            "//vendor_local_pkgs/crates/tower-http-0.2.3:tower_http",
+            "//vendor_local_pkgs/crates/tower-0.4.13:tower",
+            "//vendor_local_pkgs/crates/tower-http-0.2.5:tower_http",
             "//vendor_local_pkgs/crates/tower-layer-0.3.1:tower_layer",
-            "//vendor_local_pkgs/crates/tower-service-0.3.1:tower_service",
+            "//vendor_local_pkgs/crates/tower-service-0.3.2:tower_service",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/axum-core-0.1.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/axum-core-0.1.2/BUILD.bazel
index 1d5427f..b5f263f 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/axum-core-0.1.2/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/axum-core-0.1.2/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -51,7 +60,7 @@
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "//vendor_local_pkgs/crates/async-trait-0.1.52:async_trait",
+            "//vendor_local_pkgs/crates/async-trait-0.1.56:async_trait",
         ],
     }),
     rustc_env = {
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,10 +86,10 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
+            "//vendor_local_pkgs/crates/bytes-1.2.0:bytes",
             "//vendor_local_pkgs/crates/futures-util-0.3.21:futures_util",
-            "//vendor_local_pkgs/crates/http-0.2.6:http",
-            "//vendor_local_pkgs/crates/http-body-0.4.4:http_body",
+            "//vendor_local_pkgs/crates/http-0.2.8:http",
+            "//vendor_local_pkgs/crates/http-body-0.4.5:http_body",
             "//vendor_local_pkgs/crates/mime-0.3.16:mime",
         ],
     }),
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/bitflags-1.3.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/bitflags-1.3.2/BUILD.bazel
index 6894746..913bd2c 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/bitflags-1.3.2/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/bitflags-1.3.2/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/bytes-1.1.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/bytes-1.1.0/BUILD.bazel
deleted file mode 100644
index b679f2e..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/bytes-1.1.0/BUILD.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "bytes",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.1.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/bytes-1.2.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/bytes-1.2.0/BUILD.bazel
new file mode 100644
index 0000000..21cf49d
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/bytes-1.2.0/BUILD.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "bytes",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.2.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/cfg-if-1.0.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/cfg-if-1.0.0/BUILD.bazel
index e4aab64..ddca8cf 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/cfg-if-1.0.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/cfg-if-1.0.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/defs.bzl b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/defs.bzl
index 00a5273..e8c8bc4 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/defs.bzl
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/defs.bzl
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 """
 # `crates_repository` API
@@ -192,7 +193,10 @@
     dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
 
     if not dependencies:
-        return []
+        if dependencies == None:
+            fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
+        else:
+            return []
 
     crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
     for condition, deps in dependencies.items():
@@ -286,14 +290,14 @@
     "": {
         _COMMON_CONDITION: {
             "axum": "//vendor_local_pkgs/crates/axum-0.4.8:axum",
-            "hyper": "//vendor_local_pkgs/crates/hyper-0.14.17:hyper",
+            "hyper": "//vendor_local_pkgs/crates/hyper-0.14.20:hyper",
             "mime": "//vendor_local_pkgs/crates/mime-0.3.16:mime",
-            "serde_json": "//vendor_local_pkgs/crates/serde_json-1.0.79:serde_json",
+            "serde_json": "//vendor_local_pkgs/crates/serde_json-1.0.82:serde_json",
             "tokio": "//vendor_local_pkgs/crates/tokio-1.16.1:tokio",
-            "tower": "//vendor_local_pkgs/crates/tower-0.4.12:tower",
-            "tower-http": "//vendor_local_pkgs/crates/tower-http-0.2.3:tower_http",
-            "tracing": "//vendor_local_pkgs/crates/tracing-0.1.31:tracing",
-            "tracing-subscriber": "//vendor_local_pkgs/crates/tracing-subscriber-0.3.9:tracing_subscriber",
+            "tower": "//vendor_local_pkgs/crates/tower-0.4.13:tower",
+            "tower-http": "//vendor_local_pkgs/crates/tower-http-0.2.5:tower_http",
+            "tracing": "//vendor_local_pkgs/crates/tracing-0.1.35:tracing",
+            "tracing-subscriber": "//vendor_local_pkgs/crates/tracing-subscriber-0.3.15:tracing_subscriber",
         },
     },
 }
@@ -357,11 +361,11 @@
 
 _CONDITIONS = {
     "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [],
-    "cfg(not(windows))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(not(windows))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "riscv32imc-unknown-none-elf", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
     "cfg(target_os = \"redox\")": [],
     "cfg(target_os = \"windows\")": ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc"],
     "cfg(tracing_unstable)": [],
-    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
     "cfg(windows)": ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc"],
     "i686-pc-windows-gnu": [],
     "x86_64-pc-windows-gnu": [],
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/fnv-1.0.7/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/fnv-1.0.7/BUILD.bazel
index 9b3c6e3..787ef89 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/fnv-1.0.7/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/fnv-1.0.7/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/form_urlencoded-1.0.1/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/form_urlencoded-1.0.1/BUILD.bazel
index 9b0711c..295100f 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/form_urlencoded-1.0.1/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/form_urlencoded-1.0.1/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-channel-0.3.21/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-channel-0.3.21/BUILD.bazel
index 63a38dd..4a084a2 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-channel-0.3.21/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-channel-0.3.21/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -72,10 +81,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -141,10 +147,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-core-0.3.21/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-core-0.3.21/BUILD.bazel
index fe1f1cb..dc7e01c 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-core-0.3.21/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-core-0.3.21/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -72,10 +81,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -140,10 +146,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-sink-0.3.21/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-sink-0.3.21/BUILD.bazel
index cbdd96f..e1773d5 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-sink-0.3.21/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-sink-0.3.21/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -68,10 +77,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-task-0.3.21/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-task-0.3.21/BUILD.bazel
index 20bc494..aba469c 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-task-0.3.21/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-task-0.3.21/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -70,10 +79,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -136,10 +142,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-util-0.3.21/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-util-0.3.21/BUILD.bazel
index 99d0ccd..1c17d8d 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-util-0.3.21/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/futures-util-0.3.21/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -70,10 +79,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -87,7 +93,7 @@
             "//vendor_local_pkgs/crates/futures-core-0.3.21:futures_core",
             "//vendor_local_pkgs/crates/futures-task-0.3.21:futures_task",
             "//vendor_local_pkgs/crates/futures-util-0.3.21:build_script_build",
-            "//vendor_local_pkgs/crates/pin-project-lite-0.2.8:pin_project_lite",
+            "//vendor_local_pkgs/crates/pin-project-lite-0.2.9:pin_project_lite",
             "//vendor_local_pkgs/crates/pin-utils-0.1.0:pin_utils",
         ],
     }),
@@ -140,10 +146,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/h2-0.3.11/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/h2-0.3.11/BUILD.bazel
deleted file mode 100644
index 3aa6ad9..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/h2-0.3.11/BUILD.bazel
+++ /dev/null
@@ -1,95 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "h2",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.11",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
-            "//vendor_local_pkgs/crates/fnv-1.0.7:fnv",
-            "//vendor_local_pkgs/crates/futures-core-0.3.21:futures_core",
-            "//vendor_local_pkgs/crates/futures-sink-0.3.21:futures_sink",
-            "//vendor_local_pkgs/crates/futures-util-0.3.21:futures_util",
-            "//vendor_local_pkgs/crates/http-0.2.6:http",
-            "//vendor_local_pkgs/crates/indexmap-1.8.0:indexmap",
-            "//vendor_local_pkgs/crates/slab-0.4.5:slab",
-            "//vendor_local_pkgs/crates/tokio-1.16.1:tokio",
-            "//vendor_local_pkgs/crates/tokio-util-0.6.9:tokio_util",
-            "//vendor_local_pkgs/crates/tracing-0.1.31:tracing",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/h2-0.3.13/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/h2-0.3.13/BUILD.bazel
new file mode 100644
index 0000000..b7e726a
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/h2-0.3.13/BUILD.bazel
@@ -0,0 +1,101 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "h2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.13",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/bytes-1.2.0:bytes",
+            "//vendor_local_pkgs/crates/fnv-1.0.7:fnv",
+            "//vendor_local_pkgs/crates/futures-core-0.3.21:futures_core",
+            "//vendor_local_pkgs/crates/futures-sink-0.3.21:futures_sink",
+            "//vendor_local_pkgs/crates/futures-util-0.3.21:futures_util",
+            "//vendor_local_pkgs/crates/http-0.2.8:http",
+            "//vendor_local_pkgs/crates/indexmap-1.9.1:indexmap",
+            "//vendor_local_pkgs/crates/slab-0.4.7:slab",
+            "//vendor_local_pkgs/crates/tokio-1.16.1:tokio",
+            "//vendor_local_pkgs/crates/tokio-util-0.7.2:tokio_util",
+            "//vendor_local_pkgs/crates/tracing-0.1.35:tracing",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/hashbrown-0.11.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/hashbrown-0.11.2/BUILD.bazel
deleted file mode 100644
index 54a071b..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/hashbrown-0.11.2/BUILD.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0/MIT
-# ])
-
-rust_library(
-    name = "hashbrown",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "raw",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.11.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/hashbrown-0.12.3/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/hashbrown-0.12.3/BUILD.bazel
new file mode 100644
index 0000000..62da4bf
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/hashbrown-0.12.3/BUILD.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "hashbrown",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "raw",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.12.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/hermit-abi-0.1.19/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/hermit-abi-0.1.19/BUILD.bazel
index 8bc328d..d3341c3 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/hermit-abi-0.1.19/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/hermit-abi-0.1.19/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,7 +86,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "//vendor_local_pkgs/crates/libc-0.2.119:libc",
+            "//vendor_local_pkgs/crates/libc-0.2.126:libc",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/http-0.2.6/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/http-0.2.6/BUILD.bazel
deleted file mode 100644
index f2128d1..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/http-0.2.6/BUILD.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "http",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.6",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
-            "//vendor_local_pkgs/crates/fnv-1.0.7:fnv",
-            "//vendor_local_pkgs/crates/itoa-1.0.1:itoa",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/http-0.2.8/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/http-0.2.8/BUILD.bazel
new file mode 100644
index 0000000..d4a9c25
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/http-0.2.8/BUILD.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "http",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/bytes-1.2.0:bytes",
+            "//vendor_local_pkgs/crates/fnv-1.0.7:fnv",
+            "//vendor_local_pkgs/crates/itoa-1.0.2:itoa",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/http-body-0.4.4/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/http-body-0.4.4/BUILD.bazel
deleted file mode 100644
index e2010e3..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/http-body-0.4.4/BUILD.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "http_body",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.4",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
-            "//vendor_local_pkgs/crates/http-0.2.6:http",
-            "//vendor_local_pkgs/crates/pin-project-lite-0.2.8:pin_project_lite",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/http-body-0.4.5/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/http-body-0.4.5/BUILD.bazel
new file mode 100644
index 0000000..d903766
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/http-body-0.4.5/BUILD.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "http_body",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.5",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/bytes-1.2.0:bytes",
+            "//vendor_local_pkgs/crates/http-0.2.8:http",
+            "//vendor_local_pkgs/crates/pin-project-lite-0.2.9:pin_project_lite",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/http-range-header-0.3.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/http-range-header-0.3.0/BUILD.bazel
index c2d71d8..8cabbbf 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/http-range-header-0.3.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/http-range-header-0.3.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/httparse-1.6.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/httparse-1.6.0/BUILD.bazel
deleted file mode 100644
index 34dfd8b..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/httparse-1.6.0/BUILD.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "httparse",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.6.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/httparse-1.6.0:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "httparse_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.6.0",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "httparse_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/httparse-1.7.1/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/httparse-1.7.1/BUILD.bazel
new file mode 100644
index 0000000..c39b690
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/httparse-1.7.1/BUILD.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "httparse",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.7.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/httparse-1.7.1:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "httparse_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.7.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "httparse_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/httpdate-1.0.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/httpdate-1.0.2/BUILD.bazel
index 16d4a28..e58a3a3 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/httpdate-1.0.2/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/httpdate-1.0.2/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/hyper-0.14.17/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/hyper-0.14.17/BUILD.bazel
deleted file mode 100644
index 8120d34..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/hyper-0.14.17/BUILD.bazel
+++ /dev/null
@@ -1,111 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "hyper",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "client",
-        "default",
-        "full",
-        "h2",
-        "http1",
-        "http2",
-        "runtime",
-        "server",
-        "socket2",
-        "stream",
-        "tcp",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.14.17",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
-            "//vendor_local_pkgs/crates/futures-channel-0.3.21:futures_channel",
-            "//vendor_local_pkgs/crates/futures-core-0.3.21:futures_core",
-            "//vendor_local_pkgs/crates/futures-util-0.3.21:futures_util",
-            "//vendor_local_pkgs/crates/h2-0.3.11:h2",
-            "//vendor_local_pkgs/crates/http-0.2.6:http",
-            "//vendor_local_pkgs/crates/http-body-0.4.4:http_body",
-            "//vendor_local_pkgs/crates/httparse-1.6.0:httparse",
-            "//vendor_local_pkgs/crates/httpdate-1.0.2:httpdate",
-            "//vendor_local_pkgs/crates/itoa-1.0.1:itoa",
-            "//vendor_local_pkgs/crates/pin-project-lite-0.2.8:pin_project_lite",
-            "//vendor_local_pkgs/crates/socket2-0.4.4:socket2",
-            "//vendor_local_pkgs/crates/tokio-1.16.1:tokio",
-            "//vendor_local_pkgs/crates/tower-service-0.3.1:tower_service",
-            "//vendor_local_pkgs/crates/tracing-0.1.31:tracing",
-            "//vendor_local_pkgs/crates/want-0.3.0:want",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/hyper-0.14.20/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/hyper-0.14.20/BUILD.bazel
new file mode 100644
index 0000000..a75076c
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/hyper-0.14.20/BUILD.bazel
@@ -0,0 +1,117 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "hyper",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "client",
+        "default",
+        "full",
+        "h2",
+        "http1",
+        "http2",
+        "runtime",
+        "server",
+        "socket2",
+        "stream",
+        "tcp",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.14.20",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/bytes-1.2.0:bytes",
+            "//vendor_local_pkgs/crates/futures-channel-0.3.21:futures_channel",
+            "//vendor_local_pkgs/crates/futures-core-0.3.21:futures_core",
+            "//vendor_local_pkgs/crates/futures-util-0.3.21:futures_util",
+            "//vendor_local_pkgs/crates/h2-0.3.13:h2",
+            "//vendor_local_pkgs/crates/http-0.2.8:http",
+            "//vendor_local_pkgs/crates/http-body-0.4.5:http_body",
+            "//vendor_local_pkgs/crates/httparse-1.7.1:httparse",
+            "//vendor_local_pkgs/crates/httpdate-1.0.2:httpdate",
+            "//vendor_local_pkgs/crates/itoa-1.0.2:itoa",
+            "//vendor_local_pkgs/crates/pin-project-lite-0.2.9:pin_project_lite",
+            "//vendor_local_pkgs/crates/socket2-0.4.4:socket2",
+            "//vendor_local_pkgs/crates/tokio-1.16.1:tokio",
+            "//vendor_local_pkgs/crates/tower-service-0.3.2:tower_service",
+            "//vendor_local_pkgs/crates/tracing-0.1.35:tracing",
+            "//vendor_local_pkgs/crates/want-0.3.0:want",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/indexmap-1.8.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/indexmap-1.8.0/BUILD.bazel
deleted file mode 100644
index dca71c5..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/indexmap-1.8.0/BUILD.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0/MIT
-# ])
-
-rust_library(
-    name = "indexmap",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.8.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/hashbrown-0.11.2:hashbrown",
-            "//vendor_local_pkgs/crates/indexmap-1.8.0:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "indexmap_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.8.0",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/autocfg-1.1.0:autocfg",
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "indexmap_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/indexmap-1.9.1/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/indexmap-1.9.1/BUILD.bazel
new file mode 100644
index 0000000..0e1e4ca
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/indexmap-1.9.1/BUILD.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "indexmap",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.9.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/hashbrown-0.12.3:hashbrown",
+            "//vendor_local_pkgs/crates/indexmap-1.9.1:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "indexmap_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.9.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/autocfg-1.1.0:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "indexmap_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/instant-0.1.12/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/instant-0.1.12/BUILD.bazel
index e6d64d7..7c6a7cb 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/instant-0.1.12/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/instant-0.1.12/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/itoa-1.0.1/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/itoa-1.0.1/BUILD.bazel
deleted file mode 100644
index 69bfcf9..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/itoa-1.0.1/BUILD.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "itoa",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.1",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/itoa-1.0.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/itoa-1.0.2/BUILD.bazel
new file mode 100644
index 0000000..4237dab
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/itoa-1.0.2/BUILD.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "itoa",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/lazy_static-1.4.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/lazy_static-1.4.0/BUILD.bazel
index aabde66..6645036 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/lazy_static-1.4.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/lazy_static-1.4.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/libc-0.2.119/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/libc-0.2.119/BUILD.bazel
deleted file mode 100644
index 5728a21..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/libc-0.2.119/BUILD.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "libc",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.119",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/libc-0.2.119:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "libc_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.2.119",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "libc_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/libc-0.2.126/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/libc-0.2.126/BUILD.bazel
new file mode 100644
index 0000000..1ed39f4
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/libc-0.2.126/BUILD.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.126",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/libc-0.2.126:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "libc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.126",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "libc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/lock_api-0.4.6/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/lock_api-0.4.6/BUILD.bazel
deleted file mode 100644
index e0a626e..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/lock_api-0.4.6/BUILD.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0/MIT
-# ])
-
-rust_library(
-    name = "lock_api",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.6",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/scopeguard-1.1.0:scopeguard",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/lock_api-0.4.7/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/lock_api-0.4.7/BUILD.bazel
new file mode 100644
index 0000000..aaec2df
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/lock_api-0.4.7/BUILD.bazel
@@ -0,0 +1,176 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "lock_api",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.7",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/lock_api-0.4.7:build_script_build",
+            "//vendor_local_pkgs/crates/scopeguard-1.1.0:scopeguard",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "lock_api_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.7",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/autocfg-1.1.0:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "lock_api_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/log-0.4.14/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/log-0.4.14/BUILD.bazel
deleted file mode 100644
index ddae413..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/log-0.4.14/BUILD.bazel
+++ /dev/null
@@ -1,174 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "log",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.14",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/cfg-if-1.0.0:cfg_if",
-            "//vendor_local_pkgs/crates/log-0.4.14:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "log_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.4.14",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "log_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/log-0.4.17/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/log-0.4.17/BUILD.bazel
new file mode 100644
index 0000000..b972509
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/log-0.4.17/BUILD.bazel
@@ -0,0 +1,177 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "log",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.17",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/cfg-if-1.0.0:cfg_if",
+            "//vendor_local_pkgs/crates/log-0.4.17:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "log_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.17",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "log_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/matches-0.1.9/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/matches-0.1.9/BUILD.bazel
index b2ec92b..705b2b3 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/matches-0.1.9/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/matches-0.1.9/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/matchit-0.4.6/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/matchit-0.4.6/BUILD.bazel
index dd3406b..2f54bb7 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/matchit-0.4.6/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/matchit-0.4.6/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/memchr-2.4.1/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/memchr-2.4.1/BUILD.bazel
deleted file mode 100644
index 316b2a2..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/memchr-2.4.1/BUILD.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Unlicense/MIT
-# ])
-
-rust_library(
-    name = "memchr",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "2.4.1",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/memchr-2.4.1:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "memchr_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "2.4.1",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "memchr_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/memchr-2.5.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/memchr-2.5.0/BUILD.bazel
new file mode 100644
index 0000000..0fae985
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/memchr-2.5.0/BUILD.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "memchr",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.5.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/memchr-2.5.0:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "memchr_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "2.5.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "memchr_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/mime-0.3.16/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/mime-0.3.16/BUILD.bazel
index d7f8128..c785481 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/mime-0.3.16/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/mime-0.3.16/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/mio-0.7.14/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/mio-0.7.14/BUILD.bazel
index 3995b37..056014a 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/mio-0.7.14/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/mio-0.7.14/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -73,10 +82,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -90,9 +96,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -107,10 +115,10 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "//vendor_local_pkgs/crates/libc-0.2.119:libc",
+            "//vendor_local_pkgs/crates/libc-0.2.126:libc",
 
             # Common Deps
-            "//vendor_local_pkgs/crates/log-0.4.14:log",
+            "//vendor_local_pkgs/crates/log-0.4.17:log",
         ],
         # cfg(windows)
         (
@@ -123,10 +131,10 @@
             "//vendor_local_pkgs/crates/winapi-0.3.9:winapi",
 
             # Common Deps
-            "//vendor_local_pkgs/crates/log-0.4.14:log",
+            "//vendor_local_pkgs/crates/log-0.4.17:log",
         ],
         "//conditions:default": [
-            "//vendor_local_pkgs/crates/log-0.4.14:log",
+            "//vendor_local_pkgs/crates/log-0.4.17:log",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/miow-0.3.7/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/miow-0.3.7/BUILD.bazel
index 1bca438..97e2c7e 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/miow-0.3.7/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/miow-0.3.7/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/ntapi-0.3.7/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/ntapi-0.3.7/BUILD.bazel
index 0ada3ac..34c17ea 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/ntapi-0.3.7/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/ntapi-0.3.7/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -71,10 +80,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -139,10 +145,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/num_cpus-1.13.1/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/num_cpus-1.13.1/BUILD.bazel
index 55e897d..1868e6a 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/num_cpus-1.13.1/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/num_cpus-1.13.1/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -87,15 +93,18 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
             "@rules_rust//rust/platform:i686-unknown-freebsd",
             "@rules_rust//rust/platform:i686-unknown-linux-gnu",
             "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:riscv32imc-unknown-none-elf",
             "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
             "@rules_rust//rust/platform:wasm32-unknown-unknown",
             "@rules_rust//rust/platform:wasm32-wasi",
@@ -106,7 +115,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "//vendor_local_pkgs/crates/libc-0.2.119:libc",
+            "//vendor_local_pkgs/crates/libc-0.2.126:libc",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/once_cell-1.13.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/once_cell-1.13.0/BUILD.bazel
new file mode 100644
index 0000000..61a4291
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/once_cell-1.13.0/BUILD.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "once_cell",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "default",
+        "race",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.13.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/once_cell-1.9.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/once_cell-1.9.0/BUILD.bazel
deleted file mode 100644
index f2a936a..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/once_cell-1.9.0/BUILD.bazel
+++ /dev/null
@@ -1,88 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "once_cell",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "alloc",
-        "default",
-        "race",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.9.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/parking_lot-0.11.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/parking_lot-0.11.2/BUILD.bazel
index 9cc5a37..0a117ab 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/parking_lot-0.11.2/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/parking_lot-0.11.2/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -81,7 +87,7 @@
     ] + select_with_or({
         "//conditions:default": [
             "//vendor_local_pkgs/crates/instant-0.1.12:instant",
-            "//vendor_local_pkgs/crates/lock_api-0.4.6:lock_api",
+            "//vendor_local_pkgs/crates/lock_api-0.4.7:lock_api",
             "//vendor_local_pkgs/crates/parking_lot_core-0.8.5:parking_lot_core",
         ],
     }),
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/parking_lot_core-0.8.5/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/parking_lot_core-0.8.5/BUILD.bazel
index adbd416..d13d935 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/parking_lot_core-0.8.5/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/parking_lot_core-0.8.5/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -85,15 +91,17 @@
         # cfg(target_os = "redox")
         #
         # No supported platform triples for cfg: 'cfg(target_os = "redox")'
-        # Skipped dependencies: [{"id":"redox_syscall 0.2.11","target":"syscall"}]
+        # Skipped dependencies: [{"id":"redox_syscall 0.2.13","target":"syscall"}]
         #
         # cfg(unix)
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -108,13 +116,13 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "//vendor_local_pkgs/crates/libc-0.2.119:libc",
+            "//vendor_local_pkgs/crates/libc-0.2.126:libc",
 
             # Common Deps
             "//vendor_local_pkgs/crates/cfg-if-1.0.0:cfg_if",
             "//vendor_local_pkgs/crates/instant-0.1.12:instant",
             "//vendor_local_pkgs/crates/parking_lot_core-0.8.5:build_script_build",
-            "//vendor_local_pkgs/crates/smallvec-1.8.0:smallvec",
+            "//vendor_local_pkgs/crates/smallvec-1.9.0:smallvec",
         ],
         # cfg(windows)
         (
@@ -128,13 +136,13 @@
             "//vendor_local_pkgs/crates/cfg-if-1.0.0:cfg_if",
             "//vendor_local_pkgs/crates/instant-0.1.12:instant",
             "//vendor_local_pkgs/crates/parking_lot_core-0.8.5:build_script_build",
-            "//vendor_local_pkgs/crates/smallvec-1.8.0:smallvec",
+            "//vendor_local_pkgs/crates/smallvec-1.9.0:smallvec",
         ],
         "//conditions:default": [
             "//vendor_local_pkgs/crates/cfg-if-1.0.0:cfg_if",
             "//vendor_local_pkgs/crates/instant-0.1.12:instant",
             "//vendor_local_pkgs/crates/parking_lot_core-0.8.5:build_script_build",
-            "//vendor_local_pkgs/crates/smallvec-1.8.0:smallvec",
+            "//vendor_local_pkgs/crates/smallvec-1.9.0:smallvec",
         ],
     }),
 )
@@ -185,10 +193,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/percent-encoding-2.1.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/percent-encoding-2.1.0/BUILD.bazel
index 1ad467a..462c724 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/percent-encoding-2.1.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/percent-encoding-2.1.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-1.0.10/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-1.0.10/BUILD.bazel
deleted file mode 100644
index 50eb667..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-1.0.10/BUILD.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0 OR MIT
-# ])
-
-rust_library(
-    name = "pin_project",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/pin-project-internal-1.0.10:pin_project_internal",
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.10",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-1.0.11/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-1.0.11/BUILD.bazel
new file mode 100644
index 0000000..d6c2ce5
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-1.0.11/BUILD.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "pin_project",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/pin-project-internal-1.0.11:pin_project_internal",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.11",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-internal-1.0.10/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-internal-1.0.10/BUILD.bazel
deleted file mode 100644
index d9fe346..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-internal-1.0.10/BUILD.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_proc_macro",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0 OR MIT
-# ])
-
-rust_proc_macro(
-    name = "pin_project_internal",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.10",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/proc-macro2-1.0.36:proc_macro2",
-            "//vendor_local_pkgs/crates/quote-1.0.15:quote",
-            "//vendor_local_pkgs/crates/syn-1.0.86:syn",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-internal-1.0.11/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-internal-1.0.11/BUILD.bazel
new file mode 100644
index 0000000..6b5bea9
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-internal-1.0.11/BUILD.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_proc_macro(
+    name = "pin_project_internal",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.11",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/proc-macro2-1.0.40:proc_macro2",
+            "//vendor_local_pkgs/crates/quote-1.0.20:quote",
+            "//vendor_local_pkgs/crates/syn-1.0.98:syn",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-lite-0.2.8/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-lite-0.2.8/BUILD.bazel
deleted file mode 100644
index cfd3870..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-lite-0.2.8/BUILD.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0 OR MIT
-# ])
-
-rust_library(
-    name = "pin_project_lite",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.8",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-lite-0.2.9/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-lite-0.2.9/BUILD.bazel
new file mode 100644
index 0000000..2b7023a
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-project-lite-0.2.9/BUILD.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "pin_project_lite",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.9",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-utils-0.1.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-utils-0.1.0/BUILD.bazel
index de4c1a2..6520efd 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-utils-0.1.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/pin-utils-0.1.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/proc-macro2-1.0.36/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/proc-macro2-1.0.36/BUILD.bazel
deleted file mode 100644
index ab8ac7d..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/proc-macro2-1.0.36/BUILD.bazel
+++ /dev/null
@@ -1,176 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "proc_macro2",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.36",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/proc-macro2-1.0.36:build_script_build",
-            "//vendor_local_pkgs/crates/unicode-xid-0.2.2:unicode_xid",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "proc-macro2_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.36",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "proc-macro2_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/proc-macro2-1.0.40/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/proc-macro2-1.0.40/BUILD.bazel
new file mode 100644
index 0000000..29e3029
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/proc-macro2-1.0.40/BUILD.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "proc_macro2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.40",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/proc-macro2-1.0.40:build_script_build",
+            "//vendor_local_pkgs/crates/unicode-ident-1.0.2:unicode_ident",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "proc-macro2_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.40",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "proc-macro2_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/quote-1.0.15/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/quote-1.0.15/BUILD.bazel
deleted file mode 100644
index f11544c..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/quote-1.0.15/BUILD.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "quote",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.15",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/proc-macro2-1.0.36:proc_macro2",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/quote-1.0.20/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/quote-1.0.20/BUILD.bazel
new file mode 100644
index 0000000..76ef54f
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/quote-1.0.20/BUILD.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "quote",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.20",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/proc-macro2-1.0.40:proc_macro2",
+            "//vendor_local_pkgs/crates/quote-1.0.20:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "quote_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.20",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "quote_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/redox_syscall-0.2.11/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/redox_syscall-0.2.11/BUILD.bazel
deleted file mode 100644
index ff935f0..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/redox_syscall-0.2.11/BUILD.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "syscall",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.11",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/bitflags-1.3.2:bitflags",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/redox_syscall-0.2.13/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/redox_syscall-0.2.13/BUILD.bazel
new file mode 100644
index 0000000..57622e6
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/redox_syscall-0.2.13/BUILD.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "syscall",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.13",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/bitflags-1.3.2:bitflags",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/ryu-1.0.10/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/ryu-1.0.10/BUILD.bazel
new file mode 100644
index 0000000..bee638e
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/ryu-1.0.10/BUILD.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR BSL-1.0
+# ])
+
+rust_library(
+    name = "ryu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.10",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/ryu-1.0.9/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/ryu-1.0.9/BUILD.bazel
deleted file mode 100644
index c2a9c81..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/ryu-1.0.9/BUILD.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0 OR BSL-1.0
-# ])
-
-rust_library(
-    name = "ryu",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.9",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/scopeguard-1.1.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/scopeguard-1.1.0/BUILD.bazel
index 0bc1e13..e318ede 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/scopeguard-1.1.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/scopeguard-1.1.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/serde-1.0.136/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/serde-1.0.136/BUILD.bazel
deleted file mode 100644
index 16a6c19..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/serde-1.0.136/BUILD.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "serde",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.136",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/serde-1.0.136:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "serde_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.136",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "serde_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/serde-1.0.140/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/serde-1.0.140/BUILD.bazel
new file mode 100644
index 0000000..2b33912
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/serde-1.0.140/BUILD.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "serde",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.140",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/serde-1.0.140:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "serde_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.140",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "serde_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/serde_json-1.0.79/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/serde_json-1.0.79/BUILD.bazel
deleted file mode 100644
index 7c55f8d..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/serde_json-1.0.79/BUILD.bazel
+++ /dev/null
@@ -1,180 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "serde_json",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "raw_value",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.79",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/itoa-1.0.1:itoa",
-            "//vendor_local_pkgs/crates/ryu-1.0.9:ryu",
-            "//vendor_local_pkgs/crates/serde-1.0.136:serde",
-            "//vendor_local_pkgs/crates/serde_json-1.0.79:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "serde_json_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "raw_value",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.79",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "serde_json_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/serde_json-1.0.82/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/serde_json-1.0.82/BUILD.bazel
new file mode 100644
index 0000000..1b58f9e
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/serde_json-1.0.82/BUILD.bazel
@@ -0,0 +1,183 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "serde_json",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "raw_value",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.82",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/itoa-1.0.2:itoa",
+            "//vendor_local_pkgs/crates/ryu-1.0.10:ryu",
+            "//vendor_local_pkgs/crates/serde-1.0.140:serde",
+            "//vendor_local_pkgs/crates/serde_json-1.0.82:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "serde_json_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "raw_value",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.82",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "serde_json_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/serde_urlencoded-0.7.1/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/serde_urlencoded-0.7.1/BUILD.bazel
index 98e60e9..2b76170 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/serde_urlencoded-0.7.1/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/serde_urlencoded-0.7.1/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,9 +86,9 @@
     ] + select_with_or({
         "//conditions:default": [
             "//vendor_local_pkgs/crates/form_urlencoded-1.0.1:form_urlencoded",
-            "//vendor_local_pkgs/crates/itoa-1.0.1:itoa",
-            "//vendor_local_pkgs/crates/ryu-1.0.9:ryu",
-            "//vendor_local_pkgs/crates/serde-1.0.136:serde",
+            "//vendor_local_pkgs/crates/itoa-1.0.2:itoa",
+            "//vendor_local_pkgs/crates/ryu-1.0.10:ryu",
+            "//vendor_local_pkgs/crates/serde-1.0.140:serde",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/sharded-slab-0.1.4/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/sharded-slab-0.1.4/BUILD.bazel
index 8731db1..f1e3485 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/sharded-slab-0.1.4/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/sharded-slab-0.1.4/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/signal-hook-registry-1.4.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/signal-hook-registry-1.4.0/BUILD.bazel
index e41c37a..57b82cb 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/signal-hook-registry-1.4.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/signal-hook-registry-1.4.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "//vendor_local_pkgs/crates/libc-0.2.119:libc",
+            "//vendor_local_pkgs/crates/libc-0.2.126:libc",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/slab-0.4.5/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/slab-0.4.5/BUILD.bazel
deleted file mode 100644
index d4303ef..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/slab-0.4.5/BUILD.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "slab",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.5",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/slab-0.4.7/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/slab-0.4.7/BUILD.bazel
new file mode 100644
index 0000000..0637184
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/slab-0.4.7/BUILD.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "slab",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.7",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/slab-0.4.7:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "slab_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.7",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/autocfg-1.1.0:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "slab_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/smallvec-1.8.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/smallvec-1.8.0/BUILD.bazel
deleted file mode 100644
index a9ae389..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/smallvec-1.8.0/BUILD.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "smallvec",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.8.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/smallvec-1.9.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/smallvec-1.9.0/BUILD.bazel
new file mode 100644
index 0000000..3085cbc
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/smallvec-1.9.0/BUILD.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "smallvec",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.9.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/socket2-0.4.4/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/socket2-0.4.4/BUILD.bazel
index 028f436..9c1852f 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/socket2-0.4.4/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/socket2-0.4.4/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -82,9 +88,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -99,7 +107,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "//vendor_local_pkgs/crates/libc-0.2.119:libc",
+            "//vendor_local_pkgs/crates/libc-0.2.126:libc",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/syn-1.0.86/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/syn-1.0.86/BUILD.bazel
deleted file mode 100644
index 2a05ffd..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/syn-1.0.86/BUILD.bazel
+++ /dev/null
@@ -1,196 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "syn",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "clone-impls",
-        "default",
-        "derive",
-        "extra-traits",
-        "full",
-        "parsing",
-        "printing",
-        "proc-macro",
-        "quote",
-        "visit",
-        "visit-mut",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.86",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/proc-macro2-1.0.36:proc_macro2",
-            "//vendor_local_pkgs/crates/quote-1.0.15:quote",
-            "//vendor_local_pkgs/crates/syn-1.0.86:build_script_build",
-            "//vendor_local_pkgs/crates/unicode-xid-0.2.2:unicode_xid",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "syn_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "clone-impls",
-        "default",
-        "derive",
-        "extra-traits",
-        "full",
-        "parsing",
-        "printing",
-        "proc-macro",
-        "quote",
-        "visit",
-        "visit-mut",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.86",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "syn_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/syn-1.0.98/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/syn-1.0.98/BUILD.bazel
new file mode 100644
index 0000000..07610ec
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/syn-1.0.98/BUILD.bazel
@@ -0,0 +1,199 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "syn",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "extra-traits",
+        "full",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+        "visit",
+        "visit-mut",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.98",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/proc-macro2-1.0.40:proc_macro2",
+            "//vendor_local_pkgs/crates/quote-1.0.20:quote",
+            "//vendor_local_pkgs/crates/syn-1.0.98:build_script_build",
+            "//vendor_local_pkgs/crates/unicode-ident-1.0.2:unicode_ident",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "syn_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "extra-traits",
+        "full",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+        "visit",
+        "visit-mut",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.98",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "syn_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/sync_wrapper-0.1.1/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/sync_wrapper-0.1.1/BUILD.bazel
index d3358b4..96d58ba 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/sync_wrapper-0.1.1/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/sync_wrapper-0.1.1/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/thread_local-1.1.4/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/thread_local-1.1.4/BUILD.bazel
index f77834f..1670689 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/thread_local-1.1.4/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/thread_local-1.1.4/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "//vendor_local_pkgs/crates/once_cell-1.9.0:once_cell",
+            "//vendor_local_pkgs/crates/once_cell-1.13.0:once_cell",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-1.16.1/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-1.16.1/BUILD.bazel
index 559800b..21913e2 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-1.16.1/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-1.16.1/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -74,7 +83,7 @@
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "//vendor_local_pkgs/crates/tokio-macros-1.7.0:tokio_macros",
+            "//vendor_local_pkgs/crates/tokio-macros-1.8.0:tokio_macros",
         ],
     }),
     rustc_env = {
@@ -89,10 +98,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -106,9 +112,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -123,17 +131,17 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "//vendor_local_pkgs/crates/libc-0.2.119:libc",
+            "//vendor_local_pkgs/crates/libc-0.2.126:libc",
             "//vendor_local_pkgs/crates/signal-hook-registry-1.4.0:signal_hook_registry",
 
             # Common Deps
-            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
-            "//vendor_local_pkgs/crates/memchr-2.4.1:memchr",
+            "//vendor_local_pkgs/crates/bytes-1.2.0:bytes",
+            "//vendor_local_pkgs/crates/memchr-2.5.0:memchr",
             "//vendor_local_pkgs/crates/mio-0.7.14:mio",
             "//vendor_local_pkgs/crates/num_cpus-1.13.1:num_cpus",
-            "//vendor_local_pkgs/crates/once_cell-1.9.0:once_cell",
+            "//vendor_local_pkgs/crates/once_cell-1.13.0:once_cell",
             "//vendor_local_pkgs/crates/parking_lot-0.11.2:parking_lot",
-            "//vendor_local_pkgs/crates/pin-project-lite-0.2.8:pin_project_lite",
+            "//vendor_local_pkgs/crates/pin-project-lite-0.2.9:pin_project_lite",
         ],
         # cfg(windows)
         (
@@ -144,22 +152,22 @@
             "//vendor_local_pkgs/crates/winapi-0.3.9:winapi",
 
             # Common Deps
-            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
-            "//vendor_local_pkgs/crates/memchr-2.4.1:memchr",
+            "//vendor_local_pkgs/crates/bytes-1.2.0:bytes",
+            "//vendor_local_pkgs/crates/memchr-2.5.0:memchr",
             "//vendor_local_pkgs/crates/mio-0.7.14:mio",
             "//vendor_local_pkgs/crates/num_cpus-1.13.1:num_cpus",
-            "//vendor_local_pkgs/crates/once_cell-1.9.0:once_cell",
+            "//vendor_local_pkgs/crates/once_cell-1.13.0:once_cell",
             "//vendor_local_pkgs/crates/parking_lot-0.11.2:parking_lot",
-            "//vendor_local_pkgs/crates/pin-project-lite-0.2.8:pin_project_lite",
+            "//vendor_local_pkgs/crates/pin-project-lite-0.2.9:pin_project_lite",
         ],
         "//conditions:default": [
-            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
-            "//vendor_local_pkgs/crates/memchr-2.4.1:memchr",
+            "//vendor_local_pkgs/crates/bytes-1.2.0:bytes",
+            "//vendor_local_pkgs/crates/memchr-2.5.0:memchr",
             "//vendor_local_pkgs/crates/mio-0.7.14:mio",
             "//vendor_local_pkgs/crates/num_cpus-1.13.1:num_cpus",
-            "//vendor_local_pkgs/crates/once_cell-1.9.0:once_cell",
+            "//vendor_local_pkgs/crates/once_cell-1.13.0:once_cell",
             "//vendor_local_pkgs/crates/parking_lot-0.11.2:parking_lot",
-            "//vendor_local_pkgs/crates/pin-project-lite-0.2.8:pin_project_lite",
+            "//vendor_local_pkgs/crates/pin-project-lite-0.2.9:pin_project_lite",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-macros-1.7.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-macros-1.7.0/BUILD.bazel
deleted file mode 100644
index 32e221f..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-macros-1.7.0/BUILD.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_proc_macro",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_proc_macro(
-    name = "tokio_macros",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.7.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/proc-macro2-1.0.36:proc_macro2",
-            "//vendor_local_pkgs/crates/quote-1.0.15:quote",
-            "//vendor_local_pkgs/crates/syn-1.0.86:syn",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-macros-1.8.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-macros-1.8.0/BUILD.bazel
new file mode 100644
index 0000000..4f4fc3d
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-macros-1.8.0/BUILD.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_proc_macro(
+    name = "tokio_macros",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.8.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/proc-macro2-1.0.40:proc_macro2",
+            "//vendor_local_pkgs/crates/quote-1.0.20:quote",
+            "//vendor_local_pkgs/crates/syn-1.0.98:syn",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-util-0.6.9/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-util-0.6.9/BUILD.bazel
deleted file mode 100644
index 379638c..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-util-0.6.9/BUILD.bazel
+++ /dev/null
@@ -1,92 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tokio_util",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "codec",
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.6.9",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
-            "//vendor_local_pkgs/crates/futures-core-0.3.21:futures_core",
-            "//vendor_local_pkgs/crates/futures-sink-0.3.21:futures_sink",
-            "//vendor_local_pkgs/crates/log-0.4.14:log",
-            "//vendor_local_pkgs/crates/pin-project-lite-0.2.8:pin_project_lite",
-            "//vendor_local_pkgs/crates/tokio-1.16.1:tokio",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-util-0.7.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-util-0.7.0/BUILD.bazel
deleted file mode 100644
index 2758f4b..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-util-0.7.0/BUILD.bazel
+++ /dev/null
@@ -1,90 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tokio_util",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.7.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
-            "//vendor_local_pkgs/crates/futures-core-0.3.21:futures_core",
-            "//vendor_local_pkgs/crates/futures-sink-0.3.21:futures_sink",
-            "//vendor_local_pkgs/crates/log-0.4.14:log",
-            "//vendor_local_pkgs/crates/pin-project-lite-0.2.8:pin_project_lite",
-            "//vendor_local_pkgs/crates/tokio-1.16.1:tokio",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-util-0.7.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-util-0.7.2/BUILD.bazel
new file mode 100644
index 0000000..bc5ac58
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tokio-util-0.7.2/BUILD.bazel
@@ -0,0 +1,99 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio_util",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "codec",
+        "default",
+        "tracing",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.7.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/bytes-1.2.0:bytes",
+            "//vendor_local_pkgs/crates/futures-core-0.3.21:futures_core",
+            "//vendor_local_pkgs/crates/futures-sink-0.3.21:futures_sink",
+            "//vendor_local_pkgs/crates/pin-project-lite-0.2.9:pin_project_lite",
+            "//vendor_local_pkgs/crates/tokio-1.16.1:tokio",
+            "//vendor_local_pkgs/crates/tracing-0.1.35:tracing",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-0.4.12/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-0.4.12/BUILD.bazel
deleted file mode 100644
index 36d9127..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-0.4.12/BUILD.bazel
+++ /dev/null
@@ -1,106 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tower",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "__common",
-        "buffer",
-        "default",
-        "futures-core",
-        "futures-util",
-        "log",
-        "make",
-        "pin-project",
-        "pin-project-lite",
-        "tokio",
-        "tokio-util",
-        "tracing",
-        "util",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.12",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/futures-core-0.3.21:futures_core",
-            "//vendor_local_pkgs/crates/futures-util-0.3.21:futures_util",
-            "//vendor_local_pkgs/crates/pin-project-1.0.10:pin_project",
-            "//vendor_local_pkgs/crates/pin-project-lite-0.2.8:pin_project_lite",
-            "//vendor_local_pkgs/crates/tokio-1.16.1:tokio",
-            "//vendor_local_pkgs/crates/tokio-util-0.7.0:tokio_util",
-            "//vendor_local_pkgs/crates/tower-layer-0.3.1:tower_layer",
-            "//vendor_local_pkgs/crates/tower-service-0.3.1:tower_service",
-            "//vendor_local_pkgs/crates/tracing-0.1.31:tracing",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-0.4.13/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-0.4.13/BUILD.bazel
new file mode 100644
index 0000000..56995d5
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-0.4.13/BUILD.bazel
@@ -0,0 +1,112 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tower",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "__common",
+        "buffer",
+        "default",
+        "futures-core",
+        "futures-util",
+        "log",
+        "make",
+        "pin-project",
+        "pin-project-lite",
+        "tokio",
+        "tokio-util",
+        "tracing",
+        "util",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.13",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/futures-core-0.3.21:futures_core",
+            "//vendor_local_pkgs/crates/futures-util-0.3.21:futures_util",
+            "//vendor_local_pkgs/crates/pin-project-1.0.11:pin_project",
+            "//vendor_local_pkgs/crates/pin-project-lite-0.2.9:pin_project_lite",
+            "//vendor_local_pkgs/crates/tokio-1.16.1:tokio",
+            "//vendor_local_pkgs/crates/tokio-util-0.7.2:tokio_util",
+            "//vendor_local_pkgs/crates/tower-layer-0.3.1:tower_layer",
+            "//vendor_local_pkgs/crates/tower-service-0.3.2:tower_service",
+            "//vendor_local_pkgs/crates/tracing-0.1.35:tracing",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-http-0.2.3/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-http-0.2.3/BUILD.bazel
deleted file mode 100644
index 4c75db0..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-http-0.2.3/BUILD.bazel
+++ /dev/null
@@ -1,102 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tower_http",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "map-response-body",
-        "tower",
-        "trace",
-        "tracing",
-        "util",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.3",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/bitflags-1.3.2:bitflags",
-            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
-            "//vendor_local_pkgs/crates/futures-core-0.3.21:futures_core",
-            "//vendor_local_pkgs/crates/futures-util-0.3.21:futures_util",
-            "//vendor_local_pkgs/crates/http-0.2.6:http",
-            "//vendor_local_pkgs/crates/http-body-0.4.4:http_body",
-            "//vendor_local_pkgs/crates/http-range-header-0.3.0:http_range_header",
-            "//vendor_local_pkgs/crates/pin-project-lite-0.2.8:pin_project_lite",
-            "//vendor_local_pkgs/crates/tower-0.4.12:tower",
-            "//vendor_local_pkgs/crates/tower-layer-0.3.1:tower_layer",
-            "//vendor_local_pkgs/crates/tower-service-0.3.1:tower_service",
-            "//vendor_local_pkgs/crates/tracing-0.1.31:tracing",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-http-0.2.5/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-http-0.2.5/BUILD.bazel
new file mode 100644
index 0000000..983fd2f
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-http-0.2.5/BUILD.bazel
@@ -0,0 +1,108 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tower_http",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "map-response-body",
+        "tower",
+        "trace",
+        "tracing",
+        "util",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.5",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/bitflags-1.3.2:bitflags",
+            "//vendor_local_pkgs/crates/bytes-1.2.0:bytes",
+            "//vendor_local_pkgs/crates/futures-core-0.3.21:futures_core",
+            "//vendor_local_pkgs/crates/futures-util-0.3.21:futures_util",
+            "//vendor_local_pkgs/crates/http-0.2.8:http",
+            "//vendor_local_pkgs/crates/http-body-0.4.5:http_body",
+            "//vendor_local_pkgs/crates/http-range-header-0.3.0:http_range_header",
+            "//vendor_local_pkgs/crates/pin-project-lite-0.2.9:pin_project_lite",
+            "//vendor_local_pkgs/crates/tower-0.4.13:tower",
+            "//vendor_local_pkgs/crates/tower-layer-0.3.1:tower_layer",
+            "//vendor_local_pkgs/crates/tower-service-0.3.2:tower_service",
+            "//vendor_local_pkgs/crates/tracing-0.1.35:tracing",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-layer-0.3.1/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-layer-0.3.1/BUILD.bazel
index 9e48ea0..c0e6fba 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-layer-0.3.1/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-layer-0.3.1/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-service-0.3.1/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-service-0.3.1/BUILD.bazel
deleted file mode 100644
index 317d496..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-service-0.3.1/BUILD.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tower_service",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.1",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-service-0.3.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-service-0.3.2/BUILD.bazel
new file mode 100644
index 0000000..f5c0978
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tower-service-0.3.2/BUILD.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tower_service",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-0.1.31/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-0.1.31/BUILD.bazel
deleted file mode 100644
index 069009a..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-0.1.31/BUILD.bazel
+++ /dev/null
@@ -1,94 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tracing",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "attributes",
-        "default",
-        "log",
-        "std",
-        "tracing-attributes",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/tracing-attributes-0.1.19:tracing_attributes",
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.31",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/cfg-if-1.0.0:cfg_if",
-            "//vendor_local_pkgs/crates/log-0.4.14:log",
-            "//vendor_local_pkgs/crates/pin-project-lite-0.2.8:pin_project_lite",
-            "//vendor_local_pkgs/crates/tracing-core-0.1.22:tracing_core",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-0.1.35/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-0.1.35/BUILD.bazel
new file mode 100644
index 0000000..885046e
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-0.1.35/BUILD.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tracing",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "attributes",
+        "default",
+        "log",
+        "std",
+        "tracing-attributes",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/tracing-attributes-0.1.22:tracing_attributes",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.35",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/cfg-if-1.0.0:cfg_if",
+            "//vendor_local_pkgs/crates/log-0.4.17:log",
+            "//vendor_local_pkgs/crates/pin-project-lite-0.2.9:pin_project_lite",
+            "//vendor_local_pkgs/crates/tracing-core-0.1.28:tracing_core",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-attributes-0.1.19/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-attributes-0.1.19/BUILD.bazel
deleted file mode 100644
index 9ed8663..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-attributes-0.1.19/BUILD.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_proc_macro",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_proc_macro(
-    name = "tracing_attributes",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.19",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/proc-macro2-1.0.36:proc_macro2",
-            "//vendor_local_pkgs/crates/quote-1.0.15:quote",
-            "//vendor_local_pkgs/crates/syn-1.0.86:syn",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-attributes-0.1.22/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-attributes-0.1.22/BUILD.bazel
new file mode 100644
index 0000000..62af55e
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-attributes-0.1.22/BUILD.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_proc_macro(
+    name = "tracing_attributes",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.22",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/proc-macro2-1.0.40:proc_macro2",
+            "//vendor_local_pkgs/crates/quote-1.0.20:quote",
+            "//vendor_local_pkgs/crates/syn-1.0.98:syn",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-core-0.1.22/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-core-0.1.22/BUILD.bazel
deleted file mode 100644
index 6256b9f..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-core-0.1.22/BUILD.bazel
+++ /dev/null
@@ -1,94 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tracing_core",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "lazy_static",
-        "std",
-        "valuable",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.22",
-    deps = [
-    ] + select_with_or({
-        # cfg(tracing_unstable)
-        #
-        # No supported platform triples for cfg: 'cfg(tracing_unstable)'
-        # Skipped dependencies: [{"id":"valuable 0.1.0","target":"valuable"}]
-        #
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/lazy_static-1.4.0:lazy_static",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-core-0.1.28/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-core-0.1.28/BUILD.bazel
new file mode 100644
index 0000000..c77c36b
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-core-0.1.28/BUILD.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tracing_core",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "once_cell",
+        "std",
+        "valuable",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.28",
+    deps = [
+    ] + select_with_or({
+        # cfg(tracing_unstable)
+        #
+        # No supported platform triples for cfg: 'cfg(tracing_unstable)'
+        # Skipped dependencies: [{"id":"valuable 0.1.0","target":"valuable"}]
+        #
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/once_cell-1.13.0:once_cell",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-log-0.1.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-log-0.1.2/BUILD.bazel
deleted file mode 100644
index 3f5ff7d..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-log-0.1.2/BUILD.bazel
+++ /dev/null
@@ -1,89 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tracing_log",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "log-tracer",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/lazy_static-1.4.0:lazy_static",
-            "//vendor_local_pkgs/crates/log-0.4.14:log",
-            "//vendor_local_pkgs/crates/tracing-core-0.1.22:tracing_core",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-log-0.1.3/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-log-0.1.3/BUILD.bazel
new file mode 100644
index 0000000..59a3135
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-log-0.1.3/BUILD.bazel
@@ -0,0 +1,95 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tracing_log",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "log-tracer",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/lazy_static-1.4.0:lazy_static",
+            "//vendor_local_pkgs/crates/log-0.4.17:log",
+            "//vendor_local_pkgs/crates/tracing-core-0.1.28:tracing_core",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-subscriber-0.3.15/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-subscriber-0.3.15/BUILD.bazel
new file mode 100644
index 0000000..2bd2af0
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-subscriber-0.3.15/BUILD.bazel
@@ -0,0 +1,107 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tracing_subscriber",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "ansi",
+        "ansi_term",
+        "default",
+        "fmt",
+        "registry",
+        "sharded-slab",
+        "smallvec",
+        "std",
+        "thread_local",
+        "tracing-log",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.15",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "//vendor_local_pkgs/crates/ansi_term-0.12.1:ansi_term",
+            "//vendor_local_pkgs/crates/sharded-slab-0.1.4:sharded_slab",
+            "//vendor_local_pkgs/crates/smallvec-1.9.0:smallvec",
+            "//vendor_local_pkgs/crates/thread_local-1.1.4:thread_local",
+            "//vendor_local_pkgs/crates/tracing-core-0.1.28:tracing_core",
+            "//vendor_local_pkgs/crates/tracing-log-0.1.3:tracing_log",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-subscriber-0.3.9/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-subscriber-0.3.9/BUILD.bazel
deleted file mode 100644
index 17b127e..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/tracing-subscriber-0.3.9/BUILD.bazel
+++ /dev/null
@@ -1,101 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tracing_subscriber",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "alloc",
-        "ansi",
-        "ansi_term",
-        "default",
-        "fmt",
-        "registry",
-        "sharded-slab",
-        "smallvec",
-        "std",
-        "thread_local",
-        "tracing-log",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.9",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "//vendor_local_pkgs/crates/ansi_term-0.12.1:ansi_term",
-            "//vendor_local_pkgs/crates/sharded-slab-0.1.4:sharded_slab",
-            "//vendor_local_pkgs/crates/smallvec-1.8.0:smallvec",
-            "//vendor_local_pkgs/crates/thread_local-1.1.4:thread_local",
-            "//vendor_local_pkgs/crates/tracing-core-0.1.22:tracing_core",
-            "//vendor_local_pkgs/crates/tracing-log-0.1.2:tracing_log",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/try-lock-0.2.3/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/try-lock-0.2.3/BUILD.bazel
index 10fbaf6..174cafa 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/try-lock-0.2.3/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/try-lock-0.2.3/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/unicode-ident-1.0.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/unicode-ident-1.0.2/BUILD.bazel
new file mode 100644
index 0000000..95a5dee
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/unicode-ident-1.0.2/BUILD.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_local_pkgs:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # (MIT OR Apache-2.0) AND Unicode-DFS-2016
+# ])
+
+rust_library(
+    name = "unicode_ident",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/unicode-xid-0.2.2/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/unicode-xid-0.2.2/BUILD.bazel
deleted file mode 100644
index 30562c1..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/unicode-xid-0.2.2/BUILD.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "unicode_xid",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/valuable-0.1.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/valuable-0.1.0/BUILD.bazel
index e044513..a44df92 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/valuable-0.1.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/valuable-0.1.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -71,10 +80,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -138,10 +144,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/want-0.3.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/want-0.3.0/BUILD.bazel
index 9978792..e07b82f 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/want-0.3.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/want-0.3.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "//vendor_local_pkgs/crates/log-0.4.14:log",
+            "//vendor_local_pkgs/crates/log-0.4.17:log",
             "//vendor_local_pkgs/crates/try-lock-0.2.3:try_lock",
         ],
     }),
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/winapi-0.3.9/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/winapi-0.3.9/BUILD.bazel
index 9173bf8..2109ea2 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/winapi-0.3.9/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/winapi-0.3.9/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -99,10 +108,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -204,10 +210,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/winapi-i686-pc-windows-gnu-0.4.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/winapi-i686-pc-windows-gnu-0.4.0/BUILD.bazel
index 828411f..ebb2951 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/winapi-i686-pc-windows-gnu-0.4.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/winapi-i686-pc-windows-gnu-0.4.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/winapi-x86_64-pc-windows-gnu-0.4.0/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/winapi-x86_64-pc-windows-gnu-0.4.0/BUILD.bazel
index 8e4afeb..5de7063 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/winapi-x86_64-pc-windows-gnu-0.4.0/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_local_pkgs/crates/winapi-x86_64-pc-windows-gnu-0.4.0/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_local_pkgs:crates_vendor
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.async-stream-0.3.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.async-stream-0.3.2.bazel
deleted file mode 100644
index 9f22c11..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.async-stream-0.3.2.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "async_stream",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__async-stream-impl-0.3.2//:async_stream_impl",
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__futures-core-0.3.21//:futures_core",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.async-stream-0.3.3.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.async-stream-0.3.3.bazel
new file mode 100644
index 0000000..efbf54c
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.async-stream-0.3.3.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "async_stream",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__async-stream-impl-0.3.3//:async_stream_impl",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__futures-core-0.3.21//:futures_core",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.async-stream-impl-0.3.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.async-stream-impl-0.3.2.bazel
deleted file mode 100644
index e73b1ee..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.async-stream-impl-0.3.2.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_proc_macro",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_proc_macro(
-    name = "async_stream_impl",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__proc-macro2-1.0.36//:proc_macro2",
-            "@crates_vendor_manifests__quote-1.0.15//:quote",
-            "@crates_vendor_manifests__syn-1.0.86//:syn",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.async-stream-impl-0.3.3.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.async-stream-impl-0.3.3.bazel
new file mode 100644
index 0000000..90144bf
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.async-stream-impl-0.3.3.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_proc_macro(
+    name = "async_stream_impl",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__proc-macro2-1.0.40//:proc_macro2",
+            "@crates_vendor_manifests__quote-1.0.20//:quote",
+            "@crates_vendor_manifests__syn-1.0.98//:syn",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.autocfg-1.1.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.autocfg-1.1.0.bazel
new file mode 100644
index 0000000..ae085b2
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.autocfg-1.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "autocfg",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.bazel
index 0da6951..9ebbbdd 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 package(default_visibility = ["//visibility:public"])
@@ -34,7 +35,7 @@
 
 alias(
     name = "tokio",
-    actual = "@crates_vendor_manifests__tokio-1.17.0//:tokio",
+    actual = "@crates_vendor_manifests__tokio-1.20.0//:tokio",
     tags = ["manual"],
 )
 
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.bitflags-1.3.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.bitflags-1.3.2.bazel
index 6894746..a9511c1 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.bitflags-1.3.2.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.bitflags-1.3.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.bytes-1.1.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.bytes-1.1.0.bazel
deleted file mode 100644
index b679f2e..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.bytes-1.1.0.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "bytes",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.1.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.bytes-1.2.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.bytes-1.2.0.bazel
new file mode 100644
index 0000000..cdf271b
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.bytes-1.2.0.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "bytes",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.2.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.cfg-if-1.0.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.cfg-if-1.0.0.bazel
index e4aab64..a4c94bd 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.cfg-if-1.0.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.cfg-if-1.0.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.fastrand-1.7.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.fastrand-1.7.0.bazel
index fb44acc..cfda930 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.fastrand-1.7.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.fastrand-1.7.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.futures-core-0.3.21.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.futures-core-0.3.21.bazel
index 18c784f..04584b9 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.futures-core-0.3.21.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.futures-core-0.3.21.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -72,10 +81,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -140,10 +146,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.hermit-abi-0.1.19.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.hermit-abi-0.1.19.bazel
index 02c882d..bf75664 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.hermit-abi-0.1.19.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.hermit-abi-0.1.19.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,7 +86,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crates_vendor_manifests__libc-0.2.119//:libc",
+            "@crates_vendor_manifests__libc-0.2.126//:libc",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.instant-0.1.12.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.instant-0.1.12.bazel
index 9bd589e..f6d4fd6 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.instant-0.1.12.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.instant-0.1.12.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.libc-0.2.119.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.libc-0.2.119.bazel
deleted file mode 100644
index 0fd8f4d..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.libc-0.2.119.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "libc",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.119",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__libc-0.2.119//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "libc_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.2.119",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "libc_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.libc-0.2.126.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.libc-0.2.126.bazel
new file mode 100644
index 0000000..e9fa92d
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.libc-0.2.126.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.126",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__libc-0.2.126//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "libc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.126",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "libc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.lock_api-0.4.6.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.lock_api-0.4.6.bazel
deleted file mode 100644
index e7a3f40..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.lock_api-0.4.6.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0/MIT
-# ])
-
-rust_library(
-    name = "lock_api",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.6",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__scopeguard-1.1.0//:scopeguard",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.lock_api-0.4.7.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.lock_api-0.4.7.bazel
new file mode 100644
index 0000000..774ff96
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.lock_api-0.4.7.bazel
@@ -0,0 +1,176 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "lock_api",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.7",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__lock_api-0.4.7//:build_script_build",
+            "@crates_vendor_manifests__scopeguard-1.1.0//:scopeguard",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "lock_api_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.7",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "lock_api_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.log-0.4.14.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.log-0.4.14.bazel
deleted file mode 100644
index 57df435..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.log-0.4.14.bazel
+++ /dev/null
@@ -1,172 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "log",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.14",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__cfg-if-1.0.0//:cfg_if",
-            "@crates_vendor_manifests__log-0.4.14//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "log_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.4.14",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "log_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.log-0.4.17.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.log-0.4.17.bazel
new file mode 100644
index 0000000..f9b030c
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.log-0.4.17.bazel
@@ -0,0 +1,175 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "log",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.17",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__cfg-if-1.0.0//:cfg_if",
+            "@crates_vendor_manifests__log-0.4.17//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "log_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.17",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "log_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.memchr-2.4.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.memchr-2.4.1.bazel
deleted file mode 100644
index 2dbd77e..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.memchr-2.4.1.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Unlicense/MIT
-# ])
-
-rust_library(
-    name = "memchr",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "2.4.1",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__memchr-2.4.1//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "memchr_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "2.4.1",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "memchr_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.memchr-2.5.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.memchr-2.5.0.bazel
new file mode 100644
index 0000000..08aff31
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.memchr-2.5.0.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "memchr",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.5.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__memchr-2.5.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "memchr_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "2.5.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "memchr_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.mio-0.8.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.mio-0.8.0.bazel
deleted file mode 100644
index f5e30fc..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.mio-0.8.0.bazel
+++ /dev/null
@@ -1,128 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "mio",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "net",
-        "os-ext",
-        "os-poll",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.8.0",
-    deps = [
-    ] + select_with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-        ): [
-            # Target Deps
-            "@crates_vendor_manifests__libc-0.2.119//:libc",
-
-            # Common Deps
-            "@crates_vendor_manifests__log-0.4.14//:log",
-        ],
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            # Target Deps
-            "@crates_vendor_manifests__miow-0.3.7//:miow",
-            "@crates_vendor_manifests__ntapi-0.3.7//:ntapi",
-            "@crates_vendor_manifests__winapi-0.3.9//:winapi",
-
-            # Common Deps
-            "@crates_vendor_manifests__log-0.4.14//:log",
-        ],
-        "//conditions:default": [
-            "@crates_vendor_manifests__log-0.4.14//:log",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.mio-0.8.4.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.mio-0.8.4.bazel
new file mode 100644
index 0000000..38b3e85
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.mio-0.8.4.bazel
@@ -0,0 +1,145 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "mio",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "net",
+        "os-ext",
+        "os-poll",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.8.4",
+    deps = [
+    ] + select_with_or({
+        # cfg(target_os = "wasi")
+        (
+            "@rules_rust//rust/platform:wasm32-wasi",
+        ): [
+            # Target Deps
+            "@crates_vendor_manifests__libc-0.2.126//:libc",
+            "@crates_vendor_manifests__wasi-0.11.0-wasi-snapshot-preview1//:wasi",
+
+            # Common Deps
+            "@crates_vendor_manifests__log-0.4.17//:log",
+        ],
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@crates_vendor_manifests__libc-0.2.126//:libc",
+
+            # Common Deps
+            "@crates_vendor_manifests__log-0.4.17//:log",
+        ],
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@crates_vendor_manifests__windows-sys-0.36.1//:windows_sys",
+
+            # Common Deps
+            "@crates_vendor_manifests__log-0.4.17//:log",
+        ],
+        "//conditions:default": [
+            "@crates_vendor_manifests__log-0.4.17//:log",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.miow-0.3.7.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.miow-0.3.7.bazel
deleted file mode 100644
index 63faa37..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.miow-0.3.7.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "miow",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.7",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__winapi-0.3.9//:winapi",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.ntapi-0.3.7.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.ntapi-0.3.7.bazel
deleted file mode 100644
index a6479c9..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.ntapi-0.3.7.bazel
+++ /dev/null
@@ -1,176 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0 OR MIT
-# ])
-
-rust_library(
-    name = "ntapi",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "user",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.7",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__ntapi-0.3.7//:build_script_build",
-            "@crates_vendor_manifests__winapi-0.3.9//:winapi",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "ntapi_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "user",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.3.7",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "ntapi_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.num_cpus-1.13.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.num_cpus-1.13.1.bazel
index 3586ee5..720205c 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.num_cpus-1.13.1.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.num_cpus-1.13.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -87,15 +93,18 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
             "@rules_rust//rust/platform:i686-unknown-freebsd",
             "@rules_rust//rust/platform:i686-unknown-linux-gnu",
             "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:riscv32imc-unknown-none-elf",
             "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
             "@rules_rust//rust/platform:wasm32-unknown-unknown",
             "@rules_rust//rust/platform:wasm32-wasi",
@@ -106,7 +115,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crates_vendor_manifests__libc-0.2.119//:libc",
+            "@crates_vendor_manifests__libc-0.2.126//:libc",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.once_cell-1.13.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.once_cell-1.13.0.bazel
new file mode 100644
index 0000000..fb857e5
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.once_cell-1.13.0.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "once_cell",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "default",
+        "race",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.13.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.once_cell-1.9.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.once_cell-1.9.0.bazel
deleted file mode 100644
index f2a936a..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.once_cell-1.9.0.bazel
+++ /dev/null
@@ -1,88 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "once_cell",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "alloc",
-        "default",
-        "race",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.9.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.parking_lot-0.12.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.parking_lot-0.12.0.bazel
deleted file mode 100644
index 424b7977..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.parking_lot-0.12.0.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0/MIT
-# ])
-
-rust_library(
-    name = "parking_lot",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.12.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__lock_api-0.4.6//:lock_api",
-            "@crates_vendor_manifests__parking_lot_core-0.9.1//:parking_lot_core",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.parking_lot-0.12.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.parking_lot-0.12.1.bazel
new file mode 100644
index 0000000..6660ece
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.parking_lot-0.12.1.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "parking_lot",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.12.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__lock_api-0.4.7//:lock_api",
+            "@crates_vendor_manifests__parking_lot_core-0.9.3//:parking_lot_core",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.parking_lot_core-0.9.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.parking_lot_core-0.9.1.bazel
deleted file mode 100644
index fd20e37..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.parking_lot_core-0.9.1.bazel
+++ /dev/null
@@ -1,219 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0/MIT
-# ])
-
-rust_library(
-    name = "parking_lot_core",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.9.1",
-    deps = [
-    ] + select_with_or({
-        # cfg(target_os = "redox")
-        #
-        # No supported platform triples for cfg: 'cfg(target_os = "redox")'
-        # Skipped dependencies: [{"id":"redox_syscall 0.2.11","target":"syscall"}]
-        #
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-        ): [
-            # Target Deps
-            "@crates_vendor_manifests__libc-0.2.119//:libc",
-
-            # Common Deps
-            "@crates_vendor_manifests__cfg-if-1.0.0//:cfg_if",
-            "@crates_vendor_manifests__parking_lot_core-0.9.1//:build_script_build",
-            "@crates_vendor_manifests__smallvec-1.8.0//:smallvec",
-        ],
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            # Target Deps
-            "@crates_vendor_manifests__windows-sys-0.32.0//:windows_sys",
-
-            # Common Deps
-            "@crates_vendor_manifests__cfg-if-1.0.0//:cfg_if",
-            "@crates_vendor_manifests__parking_lot_core-0.9.1//:build_script_build",
-            "@crates_vendor_manifests__smallvec-1.8.0//:smallvec",
-        ],
-        "//conditions:default": [
-            "@crates_vendor_manifests__cfg-if-1.0.0//:cfg_if",
-            "@crates_vendor_manifests__parking_lot_core-0.9.1//:build_script_build",
-            "@crates_vendor_manifests__smallvec-1.8.0//:smallvec",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "parking_lot_core_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.9.1",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "parking_lot_core_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.parking_lot_core-0.9.3.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.parking_lot_core-0.9.3.bazel
new file mode 100644
index 0000000..2aff6ee
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.parking_lot_core-0.9.3.bazel
@@ -0,0 +1,224 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "parking_lot_core",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.9.3",
+    deps = [
+    ] + select_with_or({
+        # cfg(target_os = "redox")
+        #
+        # No supported platform triples for cfg: 'cfg(target_os = "redox")'
+        # Skipped dependencies: [{"id":"redox_syscall 0.2.13","target":"syscall"}]
+        #
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@crates_vendor_manifests__libc-0.2.126//:libc",
+
+            # Common Deps
+            "@crates_vendor_manifests__cfg-if-1.0.0//:cfg_if",
+            "@crates_vendor_manifests__parking_lot_core-0.9.3//:build_script_build",
+            "@crates_vendor_manifests__smallvec-1.9.0//:smallvec",
+        ],
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@crates_vendor_manifests__windows-sys-0.36.1//:windows_sys",
+
+            # Common Deps
+            "@crates_vendor_manifests__cfg-if-1.0.0//:cfg_if",
+            "@crates_vendor_manifests__parking_lot_core-0.9.3//:build_script_build",
+            "@crates_vendor_manifests__smallvec-1.9.0//:smallvec",
+        ],
+        "//conditions:default": [
+            "@crates_vendor_manifests__cfg-if-1.0.0//:cfg_if",
+            "@crates_vendor_manifests__parking_lot_core-0.9.3//:build_script_build",
+            "@crates_vendor_manifests__smallvec-1.9.0//:smallvec",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "parking_lot_core_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.9.3",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "parking_lot_core_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.pin-project-lite-0.2.8.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.pin-project-lite-0.2.8.bazel
deleted file mode 100644
index cfd3870..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.pin-project-lite-0.2.8.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0 OR MIT
-# ])
-
-rust_library(
-    name = "pin_project_lite",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.8",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.pin-project-lite-0.2.9.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.pin-project-lite-0.2.9.bazel
new file mode 100644
index 0000000..36d2a9a
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.pin-project-lite-0.2.9.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "pin_project_lite",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.9",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.proc-macro2-1.0.36.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.proc-macro2-1.0.36.bazel
deleted file mode 100644
index 5485684..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.proc-macro2-1.0.36.bazel
+++ /dev/null
@@ -1,176 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "proc_macro2",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.36",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__proc-macro2-1.0.36//:build_script_build",
-            "@crates_vendor_manifests__unicode-xid-0.2.2//:unicode_xid",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "proc-macro2_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.36",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "proc-macro2_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.proc-macro2-1.0.40.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.proc-macro2-1.0.40.bazel
new file mode 100644
index 0000000..c867257
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.proc-macro2-1.0.40.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "proc_macro2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.40",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__proc-macro2-1.0.40//:build_script_build",
+            "@crates_vendor_manifests__unicode-ident-1.0.2//:unicode_ident",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "proc-macro2_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.40",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "proc-macro2_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.quote-1.0.15.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.quote-1.0.15.bazel
deleted file mode 100644
index 3dc3818..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.quote-1.0.15.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "quote",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.15",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__proc-macro2-1.0.36//:proc_macro2",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.quote-1.0.20.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.quote-1.0.20.bazel
new file mode 100644
index 0000000..b262076
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.quote-1.0.20.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "quote",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.20",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__proc-macro2-1.0.40//:proc_macro2",
+            "@crates_vendor_manifests__quote-1.0.20//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "quote_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.20",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "quote_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.redox_syscall-0.2.11.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.redox_syscall-0.2.11.bazel
deleted file mode 100644
index 590ddd8..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.redox_syscall-0.2.11.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "syscall",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.11",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__bitflags-1.3.2//:bitflags",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.redox_syscall-0.2.13.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.redox_syscall-0.2.13.bazel
new file mode 100644
index 0000000..11acaea
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.redox_syscall-0.2.13.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "syscall",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.13",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__bitflags-1.3.2//:bitflags",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.remove_dir_all-0.5.3.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.remove_dir_all-0.5.3.bazel
index 329b121..c59565d 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.remove_dir_all-0.5.3.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.remove_dir_all-0.5.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.scopeguard-1.1.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.scopeguard-1.1.0.bazel
index 0bc1e13..37e9633 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.scopeguard-1.1.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.scopeguard-1.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.signal-hook-registry-1.4.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.signal-hook-registry-1.4.0.bazel
index 320e197..8e9f077 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.signal-hook-registry-1.4.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.signal-hook-registry-1.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crates_vendor_manifests__libc-0.2.119//:libc",
+            "@crates_vendor_manifests__libc-0.2.126//:libc",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.smallvec-1.8.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.smallvec-1.8.0.bazel
deleted file mode 100644
index a9ae389..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.smallvec-1.8.0.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "smallvec",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.8.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.smallvec-1.9.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.smallvec-1.9.0.bazel
new file mode 100644
index 0000000..0ad6bad
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.smallvec-1.9.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "smallvec",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.9.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.socket2-0.4.4.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.socket2-0.4.4.bazel
index a2283ce..5279810 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.socket2-0.4.4.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.socket2-0.4.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -83,9 +89,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -100,7 +108,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crates_vendor_manifests__libc-0.2.119//:libc",
+            "@crates_vendor_manifests__libc-0.2.126//:libc",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.syn-1.0.86.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.syn-1.0.86.bazel
deleted file mode 100644
index b4ff6d3..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.syn-1.0.86.bazel
+++ /dev/null
@@ -1,194 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "syn",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "clone-impls",
-        "default",
-        "derive",
-        "extra-traits",
-        "full",
-        "parsing",
-        "printing",
-        "proc-macro",
-        "quote",
-        "visit-mut",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.86",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__proc-macro2-1.0.36//:proc_macro2",
-            "@crates_vendor_manifests__quote-1.0.15//:quote",
-            "@crates_vendor_manifests__syn-1.0.86//:build_script_build",
-            "@crates_vendor_manifests__unicode-xid-0.2.2//:unicode_xid",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "syn_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "clone-impls",
-        "default",
-        "derive",
-        "extra-traits",
-        "full",
-        "parsing",
-        "printing",
-        "proc-macro",
-        "quote",
-        "visit-mut",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.86",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "syn_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.syn-1.0.98.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.syn-1.0.98.bazel
new file mode 100644
index 0000000..b421ebc
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.syn-1.0.98.bazel
@@ -0,0 +1,195 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "syn",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "full",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+        "visit-mut",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.98",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__proc-macro2-1.0.40//:proc_macro2",
+            "@crates_vendor_manifests__quote-1.0.20//:quote",
+            "@crates_vendor_manifests__syn-1.0.98//:build_script_build",
+            "@crates_vendor_manifests__unicode-ident-1.0.2//:unicode_ident",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "syn_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "full",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+        "visit-mut",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.98",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "syn_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tempfile-3.3.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tempfile-3.3.0.bazel
index 6e3cacd..d08e331 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tempfile-3.3.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tempfile-3.3.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -82,9 +88,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -100,7 +108,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crates_vendor_manifests__libc-0.2.119//:libc",
+            "@crates_vendor_manifests__libc-0.2.126//:libc",
 
             # Common Deps
             "@crates_vendor_manifests__cfg-if-1.0.0//:cfg_if",
@@ -110,7 +118,7 @@
         # cfg(target_os = "redox")
         #
         # No supported platform triples for cfg: 'cfg(target_os = "redox")'
-        # Skipped dependencies: [{"id":"redox_syscall 0.2.11","target":"syscall"}]
+        # Skipped dependencies: [{"id":"redox_syscall 0.2.13","target":"syscall"}]
         #
         # cfg(windows)
         (
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-1.17.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-1.17.0.bazel
deleted file mode 100644
index 3490657..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-1.17.0.bazel
+++ /dev/null
@@ -1,170 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tokio",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "bytes",
-        "default",
-        "fs",
-        "full",
-        "io-std",
-        "io-util",
-        "libc",
-        "macros",
-        "memchr",
-        "mio",
-        "net",
-        "num_cpus",
-        "once_cell",
-        "parking_lot",
-        "process",
-        "rt",
-        "rt-multi-thread",
-        "signal",
-        "signal-hook-registry",
-        "socket2",
-        "sync",
-        "test-util",
-        "time",
-        "tokio-macros",
-        "winapi",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__tokio-macros-1.7.0//:tokio_macros",
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.17.0",
-    deps = [
-    ] + select_with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-        ): [
-            # Target Deps
-            "@crates_vendor_manifests__libc-0.2.119//:libc",
-            "@crates_vendor_manifests__signal-hook-registry-1.4.0//:signal_hook_registry",
-
-            # Common Deps
-            "@crates_vendor_manifests__bytes-1.1.0//:bytes",
-            "@crates_vendor_manifests__memchr-2.4.1//:memchr",
-            "@crates_vendor_manifests__mio-0.8.0//:mio",
-            "@crates_vendor_manifests__num_cpus-1.13.1//:num_cpus",
-            "@crates_vendor_manifests__once_cell-1.9.0//:once_cell",
-            "@crates_vendor_manifests__parking_lot-0.12.0//:parking_lot",
-            "@crates_vendor_manifests__pin-project-lite-0.2.8//:pin_project_lite",
-            "@crates_vendor_manifests__socket2-0.4.4//:socket2",
-        ],
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            # Target Deps
-            "@crates_vendor_manifests__winapi-0.3.9//:winapi",
-
-            # Common Deps
-            "@crates_vendor_manifests__bytes-1.1.0//:bytes",
-            "@crates_vendor_manifests__memchr-2.4.1//:memchr",
-            "@crates_vendor_manifests__mio-0.8.0//:mio",
-            "@crates_vendor_manifests__num_cpus-1.13.1//:num_cpus",
-            "@crates_vendor_manifests__once_cell-1.9.0//:once_cell",
-            "@crates_vendor_manifests__parking_lot-0.12.0//:parking_lot",
-            "@crates_vendor_manifests__pin-project-lite-0.2.8//:pin_project_lite",
-            "@crates_vendor_manifests__socket2-0.4.4//:socket2",
-        ],
-        "//conditions:default": [
-            "@crates_vendor_manifests__bytes-1.1.0//:bytes",
-            "@crates_vendor_manifests__memchr-2.4.1//:memchr",
-            "@crates_vendor_manifests__mio-0.8.0//:mio",
-            "@crates_vendor_manifests__num_cpus-1.13.1//:num_cpus",
-            "@crates_vendor_manifests__once_cell-1.9.0//:once_cell",
-            "@crates_vendor_manifests__parking_lot-0.12.0//:parking_lot",
-            "@crates_vendor_manifests__pin-project-lite-0.2.8//:pin_project_lite",
-            "@crates_vendor_manifests__socket2-0.4.4//:socket2",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-1.20.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-1.20.0.bazel
new file mode 100644
index 0000000..eba2749
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-1.20.0.bazel
@@ -0,0 +1,290 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "bytes",
+        "default",
+        "fs",
+        "full",
+        "io-std",
+        "io-util",
+        "libc",
+        "macros",
+        "memchr",
+        "mio",
+        "net",
+        "num_cpus",
+        "once_cell",
+        "parking_lot",
+        "process",
+        "rt",
+        "rt-multi-thread",
+        "signal",
+        "signal-hook-registry",
+        "socket2",
+        "sync",
+        "test-util",
+        "time",
+        "tokio-macros",
+        "winapi",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__tokio-macros-1.8.0//:tokio_macros",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.20.0",
+    deps = [
+    ] + select_with_or({
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@crates_vendor_manifests__libc-0.2.126//:libc",
+            "@crates_vendor_manifests__signal-hook-registry-1.4.0//:signal_hook_registry",
+
+            # Common Deps
+            "@crates_vendor_manifests__bytes-1.2.0//:bytes",
+            "@crates_vendor_manifests__memchr-2.5.0//:memchr",
+            "@crates_vendor_manifests__mio-0.8.4//:mio",
+            "@crates_vendor_manifests__num_cpus-1.13.1//:num_cpus",
+            "@crates_vendor_manifests__once_cell-1.13.0//:once_cell",
+            "@crates_vendor_manifests__parking_lot-0.12.1//:parking_lot",
+            "@crates_vendor_manifests__pin-project-lite-0.2.9//:pin_project_lite",
+            "@crates_vendor_manifests__socket2-0.4.4//:socket2",
+            "@crates_vendor_manifests__tokio-1.20.0//:build_script_build",
+        ],
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@crates_vendor_manifests__winapi-0.3.9//:winapi",
+
+            # Common Deps
+            "@crates_vendor_manifests__bytes-1.2.0//:bytes",
+            "@crates_vendor_manifests__memchr-2.5.0//:memchr",
+            "@crates_vendor_manifests__mio-0.8.4//:mio",
+            "@crates_vendor_manifests__num_cpus-1.13.1//:num_cpus",
+            "@crates_vendor_manifests__once_cell-1.13.0//:once_cell",
+            "@crates_vendor_manifests__parking_lot-0.12.1//:parking_lot",
+            "@crates_vendor_manifests__pin-project-lite-0.2.9//:pin_project_lite",
+            "@crates_vendor_manifests__socket2-0.4.4//:socket2",
+            "@crates_vendor_manifests__tokio-1.20.0//:build_script_build",
+        ],
+        "//conditions:default": [
+            "@crates_vendor_manifests__bytes-1.2.0//:bytes",
+            "@crates_vendor_manifests__memchr-2.5.0//:memchr",
+            "@crates_vendor_manifests__mio-0.8.4//:mio",
+            "@crates_vendor_manifests__num_cpus-1.13.1//:num_cpus",
+            "@crates_vendor_manifests__once_cell-1.13.0//:once_cell",
+            "@crates_vendor_manifests__parking_lot-0.12.1//:parking_lot",
+            "@crates_vendor_manifests__pin-project-lite-0.2.9//:pin_project_lite",
+            "@crates_vendor_manifests__socket2-0.4.4//:socket2",
+            "@crates_vendor_manifests__tokio-1.20.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "tokio_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "bytes",
+        "default",
+        "fs",
+        "full",
+        "io-std",
+        "io-util",
+        "libc",
+        "macros",
+        "memchr",
+        "mio",
+        "net",
+        "num_cpus",
+        "once_cell",
+        "parking_lot",
+        "process",
+        "rt",
+        "rt-multi-thread",
+        "signal",
+        "signal-hook-registry",
+        "socket2",
+        "sync",
+        "test-util",
+        "time",
+        "tokio-macros",
+        "winapi",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.20.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "tokio_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-macros-1.7.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-macros-1.7.0.bazel
deleted file mode 100644
index b209beb..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-macros-1.7.0.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_proc_macro",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_proc_macro(
-    name = "tokio_macros",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.7.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__proc-macro2-1.0.36//:proc_macro2",
-            "@crates_vendor_manifests__quote-1.0.15//:quote",
-            "@crates_vendor_manifests__syn-1.0.86//:syn",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-macros-1.8.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-macros-1.8.0.bazel
new file mode 100644
index 0000000..fcdd24b
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-macros-1.8.0.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_proc_macro(
+    name = "tokio_macros",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.8.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__proc-macro2-1.0.40//:proc_macro2",
+            "@crates_vendor_manifests__quote-1.0.20//:quote",
+            "@crates_vendor_manifests__syn-1.0.98//:syn",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-stream-0.1.8.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-stream-0.1.8.bazel
deleted file mode 100644
index ab24cb7..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-stream-0.1.8.bazel
+++ /dev/null
@@ -1,89 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tokio_stream",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "time",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.8",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__futures-core-0.3.21//:futures_core",
-            "@crates_vendor_manifests__pin-project-lite-0.2.8//:pin_project_lite",
-            "@crates_vendor_manifests__tokio-1.17.0//:tokio",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-stream-0.1.9.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-stream-0.1.9.bazel
new file mode 100644
index 0000000..cadbc4f
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-stream-0.1.9.bazel
@@ -0,0 +1,95 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio_stream",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "time",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.9",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__futures-core-0.3.21//:futures_core",
+            "@crates_vendor_manifests__pin-project-lite-0.2.9//:pin_project_lite",
+            "@crates_vendor_manifests__tokio-1.20.0//:tokio",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-test-0.4.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-test-0.4.2.bazel
index 43f9908..8c885f1 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-test-0.4.2.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.tokio-test-0.4.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,11 +85,11 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crates_vendor_manifests__async-stream-0.3.2//:async_stream",
-            "@crates_vendor_manifests__bytes-1.1.0//:bytes",
+            "@crates_vendor_manifests__async-stream-0.3.3//:async_stream",
+            "@crates_vendor_manifests__bytes-1.2.0//:bytes",
             "@crates_vendor_manifests__futures-core-0.3.21//:futures_core",
-            "@crates_vendor_manifests__tokio-1.17.0//:tokio",
-            "@crates_vendor_manifests__tokio-stream-0.1.8//:tokio_stream",
+            "@crates_vendor_manifests__tokio-1.20.0//:tokio",
+            "@crates_vendor_manifests__tokio-stream-0.1.9//:tokio_stream",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.unicode-ident-1.0.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.unicode-ident-1.0.2.bazel
new file mode 100644
index 0000000..1a8fdc9
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.unicode-ident-1.0.2.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # (MIT OR Apache-2.0) AND Unicode-DFS-2016
+# ])
+
+rust_library(
+    name = "unicode_ident",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.unicode-xid-0.2.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.unicode-xid-0.2.2.bazel
deleted file mode 100644
index 30562c1..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.unicode-xid-0.2.2.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "unicode_xid",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel
new file mode 100644
index 0000000..3aff937
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "wasi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.11.0+wasi-snapshot-preview1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.winapi-0.3.9.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.winapi-0.3.9.bazel
index 3e20685..a9d5418 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.winapi-0.3.9.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.winapi-0.3.9.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 load(
@@ -40,35 +41,32 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
     crate_features = [
-        "cfg",
         "consoleapi",
         "errhandlingapi",
-        "evntrace",
         "fileapi",
         "handleapi",
-        "in6addr",
-        "inaddr",
-        "ioapiset",
-        "minwinbase",
         "minwindef",
-        "mswsock",
         "namedpipeapi",
-        "ntdef",
-        "ntsecapi",
+        "processthreadsapi",
         "std",
-        "synchapi",
         "threadpoollegacyapiset",
         "winbase",
-        "windef",
+        "wincon",
         "winerror",
-        "winioctl",
-        "winsock2",
-        "ws2def",
+        "winnt",
         "ws2ipdef",
         "ws2tcpip",
     ],
@@ -95,10 +93,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -145,30 +140,19 @@
         ],
     }),
     crate_features = [
-        "cfg",
         "consoleapi",
         "errhandlingapi",
-        "evntrace",
         "fileapi",
         "handleapi",
-        "in6addr",
-        "inaddr",
-        "ioapiset",
-        "minwinbase",
         "minwindef",
-        "mswsock",
         "namedpipeapi",
-        "ntdef",
-        "ntsecapi",
+        "processthreadsapi",
         "std",
-        "synchapi",
         "threadpoollegacyapiset",
         "winbase",
-        "windef",
+        "wincon",
         "winerror",
-        "winioctl",
-        "winsock2",
-        "ws2def",
+        "winnt",
         "ws2ipdef",
         "ws2tcpip",
     ],
@@ -196,10 +180,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
index 5583f0e..c4c74c5 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
index 612e171..6c8b94c 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows-sys-0.32.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows-sys-0.32.0.bazel
deleted file mode 100644
index aea4e85..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows-sys-0.32.0.bazel
+++ /dev/null
@@ -1,149 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "windows_sys",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "Win32",
-        "Win32_Foundation",
-        "Win32_System",
-        "Win32_System_LibraryLoader",
-        "Win32_System_SystemServices",
-        "Win32_System_WindowsProgramming",
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.32.0",
-    deps = [
-    ] + select_with_or({
-        # aarch64-pc-windows-msvc
-        #
-        # No supported platform triples for cfg: 'aarch64-pc-windows-msvc'
-        # Skipped dependencies: [{"id":"windows_aarch64_msvc 0.32.0","target":"windows_aarch64_msvc"}]
-        #
-        # aarch64-uwp-windows-msvc
-        #
-        # No supported platform triples for cfg: 'aarch64-uwp-windows-msvc'
-        # Skipped dependencies: [{"id":"windows_aarch64_msvc 0.32.0","target":"windows_aarch64_msvc"}]
-        #
-        # i686-pc-windows-gnu
-        #
-        # No supported platform triples for cfg: 'i686-pc-windows-gnu'
-        # Skipped dependencies: [{"id":"windows_i686_gnu 0.32.0","target":"windows_i686_gnu"}]
-        #
-        # i686-pc-windows-msvc
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-        ): [
-            # Target Deps
-            "@crates_vendor_manifests__windows_i686_msvc-0.32.0//:windows_i686_msvc",
-
-            # Common Deps
-        ],
-        # i686-uwp-windows-gnu
-        #
-        # No supported platform triples for cfg: 'i686-uwp-windows-gnu'
-        # Skipped dependencies: [{"id":"windows_i686_gnu 0.32.0","target":"windows_i686_gnu"}]
-        #
-        # i686-uwp-windows-msvc
-        #
-        # No supported platform triples for cfg: 'i686-uwp-windows-msvc'
-        # Skipped dependencies: [{"id":"windows_i686_msvc 0.32.0","target":"windows_i686_msvc"}]
-        #
-        # x86_64-pc-windows-gnu
-        #
-        # No supported platform triples for cfg: 'x86_64-pc-windows-gnu'
-        # Skipped dependencies: [{"id":"windows_x86_64_gnu 0.32.0","target":"windows_x86_64_gnu"}]
-        #
-        # x86_64-pc-windows-msvc
-        (
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            # Target Deps
-            "@crates_vendor_manifests__windows_x86_64_msvc-0.32.0//:windows_x86_64_msvc",
-
-            # Common Deps
-        ],
-        # x86_64-uwp-windows-gnu
-        #
-        # No supported platform triples for cfg: 'x86_64-uwp-windows-gnu'
-        # Skipped dependencies: [{"id":"windows_x86_64_gnu 0.32.0","target":"windows_x86_64_gnu"}]
-        #
-        # x86_64-uwp-windows-msvc
-        #
-        # No supported platform triples for cfg: 'x86_64-uwp-windows-msvc'
-        # Skipped dependencies: [{"id":"windows_x86_64_msvc 0.32.0","target":"windows_x86_64_msvc"}]
-        #
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows-sys-0.36.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows-sys-0.36.1.bazel
new file mode 100644
index 0000000..f808f6a
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows-sys-0.36.1.bazel
@@ -0,0 +1,162 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "windows_sys",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "Win32",
+        "Win32_Foundation",
+        "Win32_Networking",
+        "Win32_Networking_WinSock",
+        "Win32_Security",
+        "Win32_Storage",
+        "Win32_Storage_FileSystem",
+        "Win32_System",
+        "Win32_System_IO",
+        "Win32_System_LibraryLoader",
+        "Win32_System_Pipes",
+        "Win32_System_SystemServices",
+        "Win32_System_WindowsProgramming",
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.36.1",
+    deps = [
+    ] + select_with_or({
+        # aarch64-pc-windows-msvc
+        #
+        # No supported platform triples for cfg: 'aarch64-pc-windows-msvc'
+        # Skipped dependencies: [{"id":"windows_aarch64_msvc 0.36.1","target":"windows_aarch64_msvc"}]
+        #
+        # aarch64-uwp-windows-msvc
+        #
+        # No supported platform triples for cfg: 'aarch64-uwp-windows-msvc'
+        # Skipped dependencies: [{"id":"windows_aarch64_msvc 0.36.1","target":"windows_aarch64_msvc"}]
+        #
+        # i686-pc-windows-gnu
+        #
+        # No supported platform triples for cfg: 'i686-pc-windows-gnu'
+        # Skipped dependencies: [{"id":"windows_i686_gnu 0.36.1","target":"windows_i686_gnu"}]
+        #
+        # i686-pc-windows-msvc
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@crates_vendor_manifests__windows_i686_msvc-0.36.1//:windows_i686_msvc",
+
+            # Common Deps
+        ],
+        # i686-uwp-windows-gnu
+        #
+        # No supported platform triples for cfg: 'i686-uwp-windows-gnu'
+        # Skipped dependencies: [{"id":"windows_i686_gnu 0.36.1","target":"windows_i686_gnu"}]
+        #
+        # i686-uwp-windows-msvc
+        #
+        # No supported platform triples for cfg: 'i686-uwp-windows-msvc'
+        # Skipped dependencies: [{"id":"windows_i686_msvc 0.36.1","target":"windows_i686_msvc"}]
+        #
+        # x86_64-pc-windows-gnu
+        #
+        # No supported platform triples for cfg: 'x86_64-pc-windows-gnu'
+        # Skipped dependencies: [{"id":"windows_x86_64_gnu 0.36.1","target":"windows_x86_64_gnu"}]
+        #
+        # x86_64-pc-windows-msvc
+        (
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@crates_vendor_manifests__windows_x86_64_msvc-0.36.1//:windows_x86_64_msvc",
+
+            # Common Deps
+        ],
+        # x86_64-uwp-windows-gnu
+        #
+        # No supported platform triples for cfg: 'x86_64-uwp-windows-gnu'
+        # Skipped dependencies: [{"id":"windows_x86_64_gnu 0.36.1","target":"windows_x86_64_gnu"}]
+        #
+        # x86_64-uwp-windows-msvc
+        #
+        # No supported platform triples for cfg: 'x86_64-uwp-windows-msvc'
+        # Skipped dependencies: [{"id":"windows_x86_64_msvc 0.36.1","target":"windows_x86_64_msvc"}]
+        #
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_aarch64_msvc-0.32.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_aarch64_msvc-0.32.0.bazel
deleted file mode 100644
index 4d430cb..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_aarch64_msvc-0.32.0.bazel
+++ /dev/null
@@ -1,171 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "windows_aarch64_msvc",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.32.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__windows_aarch64_msvc-0.32.0//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "windows_aarch64_msvc_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.32.0",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "windows_aarch64_msvc_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_aarch64_msvc-0.36.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_aarch64_msvc-0.36.1.bazel
new file mode 100644
index 0000000..a67128f
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_aarch64_msvc-0.36.1.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "windows_aarch64_msvc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.36.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__windows_aarch64_msvc-0.36.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "windows_aarch64_msvc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.36.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "windows_aarch64_msvc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_i686_gnu-0.32.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_i686_gnu-0.32.0.bazel
deleted file mode 100644
index 8dfdd56..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_i686_gnu-0.32.0.bazel
+++ /dev/null
@@ -1,171 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "windows_i686_gnu",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.32.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__windows_i686_gnu-0.32.0//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "windows_i686_gnu_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.32.0",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "windows_i686_gnu_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_i686_gnu-0.36.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_i686_gnu-0.36.1.bazel
new file mode 100644
index 0000000..e349c26
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_i686_gnu-0.36.1.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "windows_i686_gnu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.36.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__windows_i686_gnu-0.36.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "windows_i686_gnu_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.36.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "windows_i686_gnu_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_i686_msvc-0.32.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_i686_msvc-0.32.0.bazel
deleted file mode 100644
index 9dff704..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_i686_msvc-0.32.0.bazel
+++ /dev/null
@@ -1,171 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "windows_i686_msvc",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.32.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__windows_i686_msvc-0.32.0//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "windows_i686_msvc_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.32.0",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "windows_i686_msvc_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_i686_msvc-0.36.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_i686_msvc-0.36.1.bazel
new file mode 100644
index 0000000..6f42fc9
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_i686_msvc-0.36.1.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "windows_i686_msvc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.36.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__windows_i686_msvc-0.36.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "windows_i686_msvc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.36.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "windows_i686_msvc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_x86_64_gnu-0.32.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_x86_64_gnu-0.32.0.bazel
deleted file mode 100644
index d8c50da..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_x86_64_gnu-0.32.0.bazel
+++ /dev/null
@@ -1,171 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "windows_x86_64_gnu",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.32.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__windows_x86_64_gnu-0.32.0//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "windows_x86_64_gnu_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.32.0",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "windows_x86_64_gnu_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_x86_64_gnu-0.36.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_x86_64_gnu-0.36.1.bazel
new file mode 100644
index 0000000..332f53f
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_x86_64_gnu-0.36.1.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "windows_x86_64_gnu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.36.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__windows_x86_64_gnu-0.36.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "windows_x86_64_gnu_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.36.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "windows_x86_64_gnu_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_x86_64_msvc-0.32.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_x86_64_msvc-0.32.0.bazel
deleted file mode 100644
index f0f7b5e..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_x86_64_msvc-0.32.0.bazel
+++ /dev/null
@@ -1,171 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "windows_x86_64_msvc",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.32.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_manifests__windows_x86_64_msvc-0.32.0//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "windows_x86_64_msvc_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.32.0",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "windows_x86_64_msvc_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_x86_64_msvc-0.36.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_x86_64_msvc-0.36.1.bazel
new file mode 100644
index 0000000..4775c73
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/BUILD.windows_x86_64_msvc-0.36.1.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "windows_x86_64_msvc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.36.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_manifests__windows_x86_64_msvc-0.36.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "windows_x86_64_msvc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.36.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "windows_x86_64_msvc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/defs.bzl b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/defs.bzl
index 4e5b7be..a3f0480 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/defs.bzl
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_manifests/crates/defs.bzl
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_manifests:crates_vendor_manifests
 ###############################################################################
 """
 # `crates_repository` API
@@ -194,7 +195,10 @@
     dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
 
     if not dependencies:
-        return []
+        if dependencies == None:
+            fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
+        else:
+            return []
 
     crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
     for condition, deps in dependencies.items():
@@ -287,7 +291,7 @@
 _NORMAL_DEPENDENCIES = {
     "vendor_remote_manifests": {
         _COMMON_CONDITION: {
-            "tokio": "@crates_vendor_manifests__tokio-1.17.0//:tokio",
+            "tokio": "@crates_vendor_manifests__tokio-1.20.0//:tokio",
         },
     },
 }
@@ -361,11 +365,12 @@
     "aarch64-pc-windows-msvc": [],
     "aarch64-uwp-windows-msvc": [],
     "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [],
-    "cfg(any(unix, target_os = \"wasi\"))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
-    "cfg(not(windows))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(any(unix, target_os = \"wasi\"))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(not(windows))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "riscv32imc-unknown-none-elf", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
     "cfg(target_arch = \"wasm32\")": ["wasm32-unknown-unknown", "wasm32-wasi"],
     "cfg(target_os = \"redox\")": [],
-    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(target_os = \"wasi\")": ["wasm32-wasi"],
+    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
     "cfg(windows)": ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc"],
     "i686-pc-windows-gnu": [],
     "i686-pc-windows-msvc": ["i686-pc-windows-msvc"],
@@ -383,22 +388,32 @@
     """A macro for defining repositories for all generated crates"""
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__async-stream-0.3.2",
-        sha256 = "171374e7e3b2504e0e5236e3b59260560f9fe94bfe9ac39ba5e4e929c5590625",
+        name = "crates_vendor_manifests__async-stream-0.3.3",
+        sha256 = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/async-stream/0.3.2/download"],
-        strip_prefix = "async-stream-0.3.2",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.async-stream-0.3.2.bazel"),
+        urls = ["https://crates.io/api/v1/crates/async-stream/0.3.3/download"],
+        strip_prefix = "async-stream-0.3.3",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.async-stream-0.3.3.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__async-stream-impl-0.3.2",
-        sha256 = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308",
+        name = "crates_vendor_manifests__async-stream-impl-0.3.3",
+        sha256 = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/async-stream-impl/0.3.2/download"],
-        strip_prefix = "async-stream-impl-0.3.2",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.async-stream-impl-0.3.2.bazel"),
+        urls = ["https://crates.io/api/v1/crates/async-stream-impl/0.3.3/download"],
+        strip_prefix = "async-stream-impl-0.3.3",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.async-stream-impl-0.3.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor_manifests__autocfg-1.1.0",
+        sha256 = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/autocfg/1.1.0/download"],
+        strip_prefix = "autocfg-1.1.0",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.autocfg-1.1.0.bazel"),
     )
 
     maybe(
@@ -413,12 +428,12 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__bytes-1.1.0",
-        sha256 = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8",
+        name = "crates_vendor_manifests__bytes-1.2.0",
+        sha256 = "f0b3de4a0c5e67e16066a0715723abd91edc2f9001d09c46e1dca929351e130e",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/bytes/1.1.0/download"],
-        strip_prefix = "bytes-1.1.0",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.bytes-1.1.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/bytes/1.2.0/download"],
+        strip_prefix = "bytes-1.2.0",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.bytes-1.2.0.bazel"),
     )
 
     maybe(
@@ -473,72 +488,52 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__libc-0.2.119",
-        sha256 = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4",
+        name = "crates_vendor_manifests__libc-0.2.126",
+        sha256 = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/libc/0.2.119/download"],
-        strip_prefix = "libc-0.2.119",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.libc-0.2.119.bazel"),
+        urls = ["https://crates.io/api/v1/crates/libc/0.2.126/download"],
+        strip_prefix = "libc-0.2.126",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.libc-0.2.126.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__lock_api-0.4.6",
-        sha256 = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b",
+        name = "crates_vendor_manifests__lock_api-0.4.7",
+        sha256 = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/lock_api/0.4.6/download"],
-        strip_prefix = "lock_api-0.4.6",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.lock_api-0.4.6.bazel"),
+        urls = ["https://crates.io/api/v1/crates/lock_api/0.4.7/download"],
+        strip_prefix = "lock_api-0.4.7",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.lock_api-0.4.7.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__log-0.4.14",
-        sha256 = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710",
+        name = "crates_vendor_manifests__log-0.4.17",
+        sha256 = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/log/0.4.14/download"],
-        strip_prefix = "log-0.4.14",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.log-0.4.14.bazel"),
+        urls = ["https://crates.io/api/v1/crates/log/0.4.17/download"],
+        strip_prefix = "log-0.4.17",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.log-0.4.17.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__memchr-2.4.1",
-        sha256 = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a",
+        name = "crates_vendor_manifests__memchr-2.5.0",
+        sha256 = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/memchr/2.4.1/download"],
-        strip_prefix = "memchr-2.4.1",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.memchr-2.4.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/memchr/2.5.0/download"],
+        strip_prefix = "memchr-2.5.0",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.memchr-2.5.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__mio-0.8.0",
-        sha256 = "ba272f85fa0b41fc91872be579b3bbe0f56b792aa361a380eb669469f68dafb2",
+        name = "crates_vendor_manifests__mio-0.8.4",
+        sha256 = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/mio/0.8.0/download"],
-        strip_prefix = "mio-0.8.0",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.mio-0.8.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "crates_vendor_manifests__miow-0.3.7",
-        sha256 = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21",
-        type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/miow/0.3.7/download"],
-        strip_prefix = "miow-0.3.7",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.miow-0.3.7.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "crates_vendor_manifests__ntapi-0.3.7",
-        sha256 = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f",
-        type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/ntapi/0.3.7/download"],
-        strip_prefix = "ntapi-0.3.7",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.ntapi-0.3.7.bazel"),
+        urls = ["https://crates.io/api/v1/crates/mio/0.8.4/download"],
+        strip_prefix = "mio-0.8.4",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.mio-0.8.4.bazel"),
     )
 
     maybe(
@@ -553,72 +548,72 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__once_cell-1.9.0",
-        sha256 = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5",
+        name = "crates_vendor_manifests__once_cell-1.13.0",
+        sha256 = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/once_cell/1.9.0/download"],
-        strip_prefix = "once_cell-1.9.0",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.once_cell-1.9.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/once_cell/1.13.0/download"],
+        strip_prefix = "once_cell-1.13.0",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.once_cell-1.13.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__parking_lot-0.12.0",
-        sha256 = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58",
+        name = "crates_vendor_manifests__parking_lot-0.12.1",
+        sha256 = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/parking_lot/0.12.0/download"],
-        strip_prefix = "parking_lot-0.12.0",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.parking_lot-0.12.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/parking_lot/0.12.1/download"],
+        strip_prefix = "parking_lot-0.12.1",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.parking_lot-0.12.1.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__parking_lot_core-0.9.1",
-        sha256 = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954",
+        name = "crates_vendor_manifests__parking_lot_core-0.9.3",
+        sha256 = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/parking_lot_core/0.9.1/download"],
-        strip_prefix = "parking_lot_core-0.9.1",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.parking_lot_core-0.9.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/parking_lot_core/0.9.3/download"],
+        strip_prefix = "parking_lot_core-0.9.3",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.parking_lot_core-0.9.3.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__pin-project-lite-0.2.8",
-        sha256 = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c",
+        name = "crates_vendor_manifests__pin-project-lite-0.2.9",
+        sha256 = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/pin-project-lite/0.2.8/download"],
-        strip_prefix = "pin-project-lite-0.2.8",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.pin-project-lite-0.2.8.bazel"),
+        urls = ["https://crates.io/api/v1/crates/pin-project-lite/0.2.9/download"],
+        strip_prefix = "pin-project-lite-0.2.9",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.pin-project-lite-0.2.9.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__proc-macro2-1.0.36",
-        sha256 = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029",
+        name = "crates_vendor_manifests__proc-macro2-1.0.40",
+        sha256 = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/proc-macro2/1.0.36/download"],
-        strip_prefix = "proc-macro2-1.0.36",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.proc-macro2-1.0.36.bazel"),
+        urls = ["https://crates.io/api/v1/crates/proc-macro2/1.0.40/download"],
+        strip_prefix = "proc-macro2-1.0.40",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.proc-macro2-1.0.40.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__quote-1.0.15",
-        sha256 = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145",
+        name = "crates_vendor_manifests__quote-1.0.20",
+        sha256 = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/quote/1.0.15/download"],
-        strip_prefix = "quote-1.0.15",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.quote-1.0.15.bazel"),
+        urls = ["https://crates.io/api/v1/crates/quote/1.0.20/download"],
+        strip_prefix = "quote-1.0.20",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.quote-1.0.20.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__redox_syscall-0.2.11",
-        sha256 = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c",
+        name = "crates_vendor_manifests__redox_syscall-0.2.13",
+        sha256 = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/redox_syscall/0.2.11/download"],
-        strip_prefix = "redox_syscall-0.2.11",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.redox_syscall-0.2.11.bazel"),
+        urls = ["https://crates.io/api/v1/crates/redox_syscall/0.2.13/download"],
+        strip_prefix = "redox_syscall-0.2.13",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.redox_syscall-0.2.13.bazel"),
     )
 
     maybe(
@@ -653,12 +648,12 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__smallvec-1.8.0",
-        sha256 = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83",
+        name = "crates_vendor_manifests__smallvec-1.9.0",
+        sha256 = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/smallvec/1.8.0/download"],
-        strip_prefix = "smallvec-1.8.0",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.smallvec-1.8.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/smallvec/1.9.0/download"],
+        strip_prefix = "smallvec-1.9.0",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.smallvec-1.9.0.bazel"),
     )
 
     maybe(
@@ -673,12 +668,12 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__syn-1.0.86",
-        sha256 = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b",
+        name = "crates_vendor_manifests__syn-1.0.98",
+        sha256 = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/syn/1.0.86/download"],
-        strip_prefix = "syn-1.0.86",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.syn-1.0.86.bazel"),
+        urls = ["https://crates.io/api/v1/crates/syn/1.0.98/download"],
+        strip_prefix = "syn-1.0.98",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.syn-1.0.98.bazel"),
     )
 
     maybe(
@@ -693,32 +688,32 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__tokio-1.17.0",
-        sha256 = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee",
+        name = "crates_vendor_manifests__tokio-1.20.0",
+        sha256 = "57aec3cfa4c296db7255446efb4928a6be304b431a806216105542a67b6ca82e",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tokio/1.17.0/download"],
-        strip_prefix = "tokio-1.17.0",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.tokio-1.17.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tokio/1.20.0/download"],
+        strip_prefix = "tokio-1.20.0",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.tokio-1.20.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__tokio-macros-1.7.0",
-        sha256 = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7",
+        name = "crates_vendor_manifests__tokio-macros-1.8.0",
+        sha256 = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tokio-macros/1.7.0/download"],
-        strip_prefix = "tokio-macros-1.7.0",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.tokio-macros-1.7.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tokio-macros/1.8.0/download"],
+        strip_prefix = "tokio-macros-1.8.0",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.tokio-macros-1.8.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__tokio-stream-0.1.8",
-        sha256 = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3",
+        name = "crates_vendor_manifests__tokio-stream-0.1.9",
+        sha256 = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tokio-stream/0.1.8/download"],
-        strip_prefix = "tokio-stream-0.1.8",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.tokio-stream-0.1.8.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tokio-stream/0.1.9/download"],
+        strip_prefix = "tokio-stream-0.1.9",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.tokio-stream-0.1.9.bazel"),
     )
 
     maybe(
@@ -733,12 +728,22 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__unicode-xid-0.2.2",
-        sha256 = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3",
+        name = "crates_vendor_manifests__unicode-ident-1.0.2",
+        sha256 = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/unicode-xid/0.2.2/download"],
-        strip_prefix = "unicode-xid-0.2.2",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.unicode-xid-0.2.2.bazel"),
+        urls = ["https://crates.io/api/v1/crates/unicode-ident/1.0.2/download"],
+        strip_prefix = "unicode-ident-1.0.2",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.unicode-ident-1.0.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "crates_vendor_manifests__wasi-0.11.0-wasi-snapshot-preview1",
+        sha256 = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasi/0.11.0+wasi-snapshot-preview1/download"],
+        strip_prefix = "wasi-0.11.0+wasi-snapshot-preview1",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel"),
     )
 
     maybe(
@@ -773,60 +778,60 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__windows-sys-0.32.0",
-        sha256 = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6",
+        name = "crates_vendor_manifests__windows-sys-0.36.1",
+        sha256 = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/windows-sys/0.32.0/download"],
-        strip_prefix = "windows-sys-0.32.0",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.windows-sys-0.32.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/windows-sys/0.36.1/download"],
+        strip_prefix = "windows-sys-0.36.1",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.windows-sys-0.36.1.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__windows_aarch64_msvc-0.32.0",
-        sha256 = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5",
+        name = "crates_vendor_manifests__windows_aarch64_msvc-0.36.1",
+        sha256 = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/windows_aarch64_msvc/0.32.0/download"],
-        strip_prefix = "windows_aarch64_msvc-0.32.0",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.windows_aarch64_msvc-0.32.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/windows_aarch64_msvc/0.36.1/download"],
+        strip_prefix = "windows_aarch64_msvc-0.36.1",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.windows_aarch64_msvc-0.36.1.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__windows_i686_gnu-0.32.0",
-        sha256 = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615",
+        name = "crates_vendor_manifests__windows_i686_gnu-0.36.1",
+        sha256 = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/windows_i686_gnu/0.32.0/download"],
-        strip_prefix = "windows_i686_gnu-0.32.0",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.windows_i686_gnu-0.32.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/windows_i686_gnu/0.36.1/download"],
+        strip_prefix = "windows_i686_gnu-0.36.1",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.windows_i686_gnu-0.36.1.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__windows_i686_msvc-0.32.0",
-        sha256 = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172",
+        name = "crates_vendor_manifests__windows_i686_msvc-0.36.1",
+        sha256 = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/windows_i686_msvc/0.32.0/download"],
-        strip_prefix = "windows_i686_msvc-0.32.0",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.windows_i686_msvc-0.32.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/windows_i686_msvc/0.36.1/download"],
+        strip_prefix = "windows_i686_msvc-0.36.1",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.windows_i686_msvc-0.36.1.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__windows_x86_64_gnu-0.32.0",
-        sha256 = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc",
+        name = "crates_vendor_manifests__windows_x86_64_gnu-0.36.1",
+        sha256 = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/windows_x86_64_gnu/0.32.0/download"],
-        strip_prefix = "windows_x86_64_gnu-0.32.0",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.windows_x86_64_gnu-0.32.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/windows_x86_64_gnu/0.36.1/download"],
+        strip_prefix = "windows_x86_64_gnu-0.36.1",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.windows_x86_64_gnu-0.36.1.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_manifests__windows_x86_64_msvc-0.32.0",
-        sha256 = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316",
+        name = "crates_vendor_manifests__windows_x86_64_msvc-0.36.1",
+        sha256 = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/windows_x86_64_msvc/0.32.0/download"],
-        strip_prefix = "windows_x86_64_msvc-0.32.0",
-        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.windows_x86_64_msvc-0.32.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/windows_x86_64_msvc/0.36.1/download"],
+        strip_prefix = "windows_x86_64_msvc-0.36.1",
+        build_file = Label("@examples//vendor_remote_manifests/crates:BUILD.windows_x86_64_msvc-0.36.1.bazel"),
     )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.ansi_term-0.12.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.ansi_term-0.12.1.bazel
index 3e1dbce..68a4670 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.ansi_term-0.12.1.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.ansi_term-0.12.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.async-trait-0.1.52.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.async-trait-0.1.52.bazel
deleted file mode 100644
index b58cec9..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.async-trait-0.1.52.bazel
+++ /dev/null
@@ -1,174 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_proc_macro",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_proc_macro(
-    name = "async_trait",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.52",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__async-trait-0.1.52//:build_script_build",
-            "@crates_vendor_pkgs__proc-macro2-1.0.36//:proc_macro2",
-            "@crates_vendor_pkgs__quote-1.0.15//:quote",
-            "@crates_vendor_pkgs__syn-1.0.86//:syn",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "async-trait_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.1.52",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "async-trait_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.async-trait-0.1.56.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.async-trait-0.1.56.bazel
new file mode 100644
index 0000000..3598f0c
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.async-trait-0.1.56.bazel
@@ -0,0 +1,177 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_proc_macro(
+    name = "async_trait",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.56",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__async-trait-0.1.56//:build_script_build",
+            "@crates_vendor_pkgs__proc-macro2-1.0.40//:proc_macro2",
+            "@crates_vendor_pkgs__quote-1.0.20//:quote",
+            "@crates_vendor_pkgs__syn-1.0.98//:syn",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "async-trait_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.1.56",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "async-trait_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.autocfg-1.1.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.autocfg-1.1.0.bazel
index bd2fcd9..7c30696 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.autocfg-1.1.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.autocfg-1.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.axum-0.4.8.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.axum-0.4.8.bazel
index 5becb06..fe42fc5 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.axum-0.4.8.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.axum-0.4.8.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,10 +37,18 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob([
-        "**",
-        "**/*.md",
-    ]) + select_with_or({
+    compile_data = glob(
+        include = [
+            "**",
+            "**/*.md",
+        ],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -59,7 +68,7 @@
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crates_vendor_pkgs__async-trait-0.1.52//:async_trait",
+            "@crates_vendor_pkgs__async-trait-0.1.56//:async_trait",
         ],
     }),
     rustc_env = {
@@ -74,10 +83,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -90,25 +96,25 @@
         "//conditions:default": [
             "@crates_vendor_pkgs__axum-core-0.1.2//:axum_core",
             "@crates_vendor_pkgs__bitflags-1.3.2//:bitflags",
-            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
+            "@crates_vendor_pkgs__bytes-1.2.0//:bytes",
             "@crates_vendor_pkgs__futures-util-0.3.21//:futures_util",
-            "@crates_vendor_pkgs__http-0.2.6//:http",
-            "@crates_vendor_pkgs__http-body-0.4.4//:http_body",
-            "@crates_vendor_pkgs__hyper-0.14.17//:hyper",
+            "@crates_vendor_pkgs__http-0.2.8//:http",
+            "@crates_vendor_pkgs__http-body-0.4.5//:http_body",
+            "@crates_vendor_pkgs__hyper-0.14.20//:hyper",
             "@crates_vendor_pkgs__matchit-0.4.6//:matchit",
-            "@crates_vendor_pkgs__memchr-2.4.1//:memchr",
+            "@crates_vendor_pkgs__memchr-2.5.0//:memchr",
             "@crates_vendor_pkgs__mime-0.3.16//:mime",
             "@crates_vendor_pkgs__percent-encoding-2.1.0//:percent_encoding",
-            "@crates_vendor_pkgs__pin-project-lite-0.2.8//:pin_project_lite",
-            "@crates_vendor_pkgs__serde-1.0.136//:serde",
-            "@crates_vendor_pkgs__serde_json-1.0.79//:serde_json",
+            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
+            "@crates_vendor_pkgs__serde-1.0.140//:serde",
+            "@crates_vendor_pkgs__serde_json-1.0.82//:serde_json",
             "@crates_vendor_pkgs__serde_urlencoded-0.7.1//:serde_urlencoded",
             "@crates_vendor_pkgs__sync_wrapper-0.1.1//:sync_wrapper",
             "@crates_vendor_pkgs__tokio-1.16.1//:tokio",
-            "@crates_vendor_pkgs__tower-0.4.12//:tower",
-            "@crates_vendor_pkgs__tower-http-0.2.3//:tower_http",
+            "@crates_vendor_pkgs__tower-0.4.13//:tower",
+            "@crates_vendor_pkgs__tower-http-0.2.5//:tower_http",
             "@crates_vendor_pkgs__tower-layer-0.3.1//:tower_layer",
-            "@crates_vendor_pkgs__tower-service-0.3.1//:tower_service",
+            "@crates_vendor_pkgs__tower-service-0.3.2//:tower_service",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.axum-core-0.1.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.axum-core-0.1.2.bazel
index 60eff32..41da823 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.axum-core-0.1.2.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.axum-core-0.1.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -51,7 +60,7 @@
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crates_vendor_pkgs__async-trait-0.1.52//:async_trait",
+            "@crates_vendor_pkgs__async-trait-0.1.56//:async_trait",
         ],
     }),
     rustc_env = {
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,10 +86,10 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
+            "@crates_vendor_pkgs__bytes-1.2.0//:bytes",
             "@crates_vendor_pkgs__futures-util-0.3.21//:futures_util",
-            "@crates_vendor_pkgs__http-0.2.6//:http",
-            "@crates_vendor_pkgs__http-body-0.4.4//:http_body",
+            "@crates_vendor_pkgs__http-0.2.8//:http",
+            "@crates_vendor_pkgs__http-body-0.4.5//:http_body",
             "@crates_vendor_pkgs__mime-0.3.16//:mime",
         ],
     }),
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.bazel
index 8c3bd31..fe47f17 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 package(default_visibility = ["//visibility:public"])
@@ -34,7 +35,7 @@
 
 alias(
     name = "hyper",
-    actual = "@crates_vendor_pkgs__hyper-0.14.17//:hyper",
+    actual = "@crates_vendor_pkgs__hyper-0.14.20//:hyper",
     tags = ["manual"],
 )
 
@@ -46,7 +47,7 @@
 
 alias(
     name = "serde_json",
-    actual = "@crates_vendor_pkgs__serde_json-1.0.79//:serde_json",
+    actual = "@crates_vendor_pkgs__serde_json-1.0.82//:serde_json",
     tags = ["manual"],
 )
 
@@ -58,25 +59,25 @@
 
 alias(
     name = "tower",
-    actual = "@crates_vendor_pkgs__tower-0.4.12//:tower",
+    actual = "@crates_vendor_pkgs__tower-0.4.13//:tower",
     tags = ["manual"],
 )
 
 alias(
     name = "tower-http",
-    actual = "@crates_vendor_pkgs__tower-http-0.2.3//:tower_http",
+    actual = "@crates_vendor_pkgs__tower-http-0.2.5//:tower_http",
     tags = ["manual"],
 )
 
 alias(
     name = "tracing",
-    actual = "@crates_vendor_pkgs__tracing-0.1.31//:tracing",
+    actual = "@crates_vendor_pkgs__tracing-0.1.35//:tracing",
     tags = ["manual"],
 )
 
 alias(
     name = "tracing-subscriber",
-    actual = "@crates_vendor_pkgs__tracing-subscriber-0.3.9//:tracing_subscriber",
+    actual = "@crates_vendor_pkgs__tracing-subscriber-0.3.15//:tracing_subscriber",
     tags = ["manual"],
 )
 
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.bitflags-1.3.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.bitflags-1.3.2.bazel
index 6894746..795ab83 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.bitflags-1.3.2.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.bitflags-1.3.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.bytes-1.1.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.bytes-1.1.0.bazel
deleted file mode 100644
index b679f2e..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.bytes-1.1.0.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "bytes",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.1.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.bytes-1.2.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.bytes-1.2.0.bazel
new file mode 100644
index 0000000..d6372fc
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.bytes-1.2.0.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "bytes",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.2.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.cfg-if-1.0.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.cfg-if-1.0.0.bazel
index e4aab64..7e3c294 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.cfg-if-1.0.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.cfg-if-1.0.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.fnv-1.0.7.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.fnv-1.0.7.bazel
index 9b3c6e3..f95cc0a 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.fnv-1.0.7.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.fnv-1.0.7.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -67,10 +76,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.form_urlencoded-1.0.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.form_urlencoded-1.0.1.bazel
index bd48fd1..b356338 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.form_urlencoded-1.0.1.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.form_urlencoded-1.0.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-channel-0.3.21.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-channel-0.3.21.bazel
index 2b9d729..7a338f1 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-channel-0.3.21.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-channel-0.3.21.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -72,10 +81,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -141,10 +147,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-core-0.3.21.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-core-0.3.21.bazel
index 8d8e0cf..1e65a5b 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-core-0.3.21.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-core-0.3.21.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -72,10 +81,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -140,10 +146,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-sink-0.3.21.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-sink-0.3.21.bazel
index cbdd96f..f547b5a 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-sink-0.3.21.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-sink-0.3.21.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -68,10 +77,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-task-0.3.21.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-task-0.3.21.bazel
index 0c6da9d..99e2866 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-task-0.3.21.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-task-0.3.21.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -70,10 +79,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -136,10 +142,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-util-0.3.21.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-util-0.3.21.bazel
index 0645b60..03462e4 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-util-0.3.21.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.futures-util-0.3.21.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -70,10 +79,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -87,7 +93,7 @@
             "@crates_vendor_pkgs__futures-core-0.3.21//:futures_core",
             "@crates_vendor_pkgs__futures-task-0.3.21//:futures_task",
             "@crates_vendor_pkgs__futures-util-0.3.21//:build_script_build",
-            "@crates_vendor_pkgs__pin-project-lite-0.2.8//:pin_project_lite",
+            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
             "@crates_vendor_pkgs__pin-utils-0.1.0//:pin_utils",
         ],
     }),
@@ -140,10 +146,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.h2-0.3.11.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.h2-0.3.11.bazel
deleted file mode 100644
index 0e2689d..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.h2-0.3.11.bazel
+++ /dev/null
@@ -1,95 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "h2",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.11",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
-            "@crates_vendor_pkgs__fnv-1.0.7//:fnv",
-            "@crates_vendor_pkgs__futures-core-0.3.21//:futures_core",
-            "@crates_vendor_pkgs__futures-sink-0.3.21//:futures_sink",
-            "@crates_vendor_pkgs__futures-util-0.3.21//:futures_util",
-            "@crates_vendor_pkgs__http-0.2.6//:http",
-            "@crates_vendor_pkgs__indexmap-1.8.0//:indexmap",
-            "@crates_vendor_pkgs__slab-0.4.5//:slab",
-            "@crates_vendor_pkgs__tokio-1.16.1//:tokio",
-            "@crates_vendor_pkgs__tokio-util-0.6.9//:tokio_util",
-            "@crates_vendor_pkgs__tracing-0.1.31//:tracing",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.h2-0.3.13.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.h2-0.3.13.bazel
new file mode 100644
index 0000000..a1bbb4e
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.h2-0.3.13.bazel
@@ -0,0 +1,101 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "h2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.13",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__bytes-1.2.0//:bytes",
+            "@crates_vendor_pkgs__fnv-1.0.7//:fnv",
+            "@crates_vendor_pkgs__futures-core-0.3.21//:futures_core",
+            "@crates_vendor_pkgs__futures-sink-0.3.21//:futures_sink",
+            "@crates_vendor_pkgs__futures-util-0.3.21//:futures_util",
+            "@crates_vendor_pkgs__http-0.2.8//:http",
+            "@crates_vendor_pkgs__indexmap-1.9.1//:indexmap",
+            "@crates_vendor_pkgs__slab-0.4.7//:slab",
+            "@crates_vendor_pkgs__tokio-1.16.1//:tokio",
+            "@crates_vendor_pkgs__tokio-util-0.7.2//:tokio_util",
+            "@crates_vendor_pkgs__tracing-0.1.35//:tracing",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.hashbrown-0.11.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.hashbrown-0.11.2.bazel
deleted file mode 100644
index 54a071b..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.hashbrown-0.11.2.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0/MIT
-# ])
-
-rust_library(
-    name = "hashbrown",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "raw",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.11.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.hashbrown-0.12.3.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.hashbrown-0.12.3.bazel
new file mode 100644
index 0000000..c40844a
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.hashbrown-0.12.3.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "hashbrown",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "raw",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.12.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.hermit-abi-0.1.19.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.hermit-abi-0.1.19.bazel
index c59daf3..2f1f330 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.hermit-abi-0.1.19.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.hermit-abi-0.1.19.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,7 +86,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crates_vendor_pkgs__libc-0.2.119//:libc",
+            "@crates_vendor_pkgs__libc-0.2.126//:libc",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.http-0.2.6.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.http-0.2.6.bazel
deleted file mode 100644
index e72665d..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.http-0.2.6.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "http",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.6",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
-            "@crates_vendor_pkgs__fnv-1.0.7//:fnv",
-            "@crates_vendor_pkgs__itoa-1.0.1//:itoa",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.http-0.2.8.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.http-0.2.8.bazel
new file mode 100644
index 0000000..997fc34
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.http-0.2.8.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "http",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__bytes-1.2.0//:bytes",
+            "@crates_vendor_pkgs__fnv-1.0.7//:fnv",
+            "@crates_vendor_pkgs__itoa-1.0.2//:itoa",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.http-body-0.4.4.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.http-body-0.4.4.bazel
deleted file mode 100644
index d85585b..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.http-body-0.4.4.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "http_body",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.4",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
-            "@crates_vendor_pkgs__http-0.2.6//:http",
-            "@crates_vendor_pkgs__pin-project-lite-0.2.8//:pin_project_lite",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.http-body-0.4.5.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.http-body-0.4.5.bazel
new file mode 100644
index 0000000..15331a1
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.http-body-0.4.5.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "http_body",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.5",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__bytes-1.2.0//:bytes",
+            "@crates_vendor_pkgs__http-0.2.8//:http",
+            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.http-range-header-0.3.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.http-range-header-0.3.0.bazel
index c2d71d8..b688f4f 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.http-range-header-0.3.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.http-range-header-0.3.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.httparse-1.6.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.httparse-1.6.0.bazel
deleted file mode 100644
index c28f5d5..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.httparse-1.6.0.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "httparse",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.6.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__httparse-1.6.0//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "httparse_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.6.0",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "httparse_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.httparse-1.7.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.httparse-1.7.1.bazel
new file mode 100644
index 0000000..ca4134f
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.httparse-1.7.1.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "httparse",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.7.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__httparse-1.7.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "httparse_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.7.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "httparse_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.httpdate-1.0.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.httpdate-1.0.2.bazel
index 16d4a28..ce4aa55 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.httpdate-1.0.2.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.httpdate-1.0.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.hyper-0.14.17.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.hyper-0.14.17.bazel
deleted file mode 100644
index ee4bdb4..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.hyper-0.14.17.bazel
+++ /dev/null
@@ -1,111 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "hyper",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "client",
-        "default",
-        "full",
-        "h2",
-        "http1",
-        "http2",
-        "runtime",
-        "server",
-        "socket2",
-        "stream",
-        "tcp",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.14.17",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
-            "@crates_vendor_pkgs__futures-channel-0.3.21//:futures_channel",
-            "@crates_vendor_pkgs__futures-core-0.3.21//:futures_core",
-            "@crates_vendor_pkgs__futures-util-0.3.21//:futures_util",
-            "@crates_vendor_pkgs__h2-0.3.11//:h2",
-            "@crates_vendor_pkgs__http-0.2.6//:http",
-            "@crates_vendor_pkgs__http-body-0.4.4//:http_body",
-            "@crates_vendor_pkgs__httparse-1.6.0//:httparse",
-            "@crates_vendor_pkgs__httpdate-1.0.2//:httpdate",
-            "@crates_vendor_pkgs__itoa-1.0.1//:itoa",
-            "@crates_vendor_pkgs__pin-project-lite-0.2.8//:pin_project_lite",
-            "@crates_vendor_pkgs__socket2-0.4.4//:socket2",
-            "@crates_vendor_pkgs__tokio-1.16.1//:tokio",
-            "@crates_vendor_pkgs__tower-service-0.3.1//:tower_service",
-            "@crates_vendor_pkgs__tracing-0.1.31//:tracing",
-            "@crates_vendor_pkgs__want-0.3.0//:want",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.hyper-0.14.20.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.hyper-0.14.20.bazel
new file mode 100644
index 0000000..e3dcfa9
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.hyper-0.14.20.bazel
@@ -0,0 +1,117 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "hyper",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "client",
+        "default",
+        "full",
+        "h2",
+        "http1",
+        "http2",
+        "runtime",
+        "server",
+        "socket2",
+        "stream",
+        "tcp",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.14.20",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__bytes-1.2.0//:bytes",
+            "@crates_vendor_pkgs__futures-channel-0.3.21//:futures_channel",
+            "@crates_vendor_pkgs__futures-core-0.3.21//:futures_core",
+            "@crates_vendor_pkgs__futures-util-0.3.21//:futures_util",
+            "@crates_vendor_pkgs__h2-0.3.13//:h2",
+            "@crates_vendor_pkgs__http-0.2.8//:http",
+            "@crates_vendor_pkgs__http-body-0.4.5//:http_body",
+            "@crates_vendor_pkgs__httparse-1.7.1//:httparse",
+            "@crates_vendor_pkgs__httpdate-1.0.2//:httpdate",
+            "@crates_vendor_pkgs__itoa-1.0.2//:itoa",
+            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
+            "@crates_vendor_pkgs__socket2-0.4.4//:socket2",
+            "@crates_vendor_pkgs__tokio-1.16.1//:tokio",
+            "@crates_vendor_pkgs__tower-service-0.3.2//:tower_service",
+            "@crates_vendor_pkgs__tracing-0.1.35//:tracing",
+            "@crates_vendor_pkgs__want-0.3.0//:want",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.indexmap-1.8.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.indexmap-1.8.0.bazel
deleted file mode 100644
index 6989baf..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.indexmap-1.8.0.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0/MIT
-# ])
-
-rust_library(
-    name = "indexmap",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.8.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__hashbrown-0.11.2//:hashbrown",
-            "@crates_vendor_pkgs__indexmap-1.8.0//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "indexmap_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.8.0",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__autocfg-1.1.0//:autocfg",
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "indexmap_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.indexmap-1.9.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.indexmap-1.9.1.bazel
new file mode 100644
index 0000000..592d2a8
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.indexmap-1.9.1.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "indexmap",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.9.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__hashbrown-0.12.3//:hashbrown",
+            "@crates_vendor_pkgs__indexmap-1.9.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "indexmap_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.9.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "indexmap_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.instant-0.1.12.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.instant-0.1.12.bazel
index 024232d..60649d1 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.instant-0.1.12.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.instant-0.1.12.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.itoa-1.0.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.itoa-1.0.1.bazel
deleted file mode 100644
index 69bfcf9..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.itoa-1.0.1.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "itoa",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.1",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.itoa-1.0.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.itoa-1.0.2.bazel
new file mode 100644
index 0000000..1c042ef
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.itoa-1.0.2.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "itoa",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.lazy_static-1.4.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.lazy_static-1.4.0.bazel
index aabde66..6abb739 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.lazy_static-1.4.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.lazy_static-1.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.libc-0.2.119.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.libc-0.2.119.bazel
deleted file mode 100644
index 139c214..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.libc-0.2.119.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "libc",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.119",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__libc-0.2.119//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "libc_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.2.119",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "libc_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.libc-0.2.126.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.libc-0.2.126.bazel
new file mode 100644
index 0000000..2de4a43
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.libc-0.2.126.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.126",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__libc-0.2.126//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "libc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.126",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "libc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.lock_api-0.4.6.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.lock_api-0.4.6.bazel
deleted file mode 100644
index 3c36221..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.lock_api-0.4.6.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0/MIT
-# ])
-
-rust_library(
-    name = "lock_api",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.6",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__scopeguard-1.1.0//:scopeguard",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.lock_api-0.4.7.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.lock_api-0.4.7.bazel
new file mode 100644
index 0000000..f80bfdc
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.lock_api-0.4.7.bazel
@@ -0,0 +1,176 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "lock_api",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.7",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__lock_api-0.4.7//:build_script_build",
+            "@crates_vendor_pkgs__scopeguard-1.1.0//:scopeguard",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "lock_api_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.7",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "lock_api_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.log-0.4.14.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.log-0.4.14.bazel
deleted file mode 100644
index e63b9d0..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.log-0.4.14.bazel
+++ /dev/null
@@ -1,174 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "log",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.14",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__cfg-if-1.0.0//:cfg_if",
-            "@crates_vendor_pkgs__log-0.4.14//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "log_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "0.4.14",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "log_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.log-0.4.17.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.log-0.4.17.bazel
new file mode 100644
index 0000000..a9435e4
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.log-0.4.17.bazel
@@ -0,0 +1,177 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "log",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.17",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__cfg-if-1.0.0//:cfg_if",
+            "@crates_vendor_pkgs__log-0.4.17//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "log_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.17",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "log_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.matches-0.1.9.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.matches-0.1.9.bazel
index b2ec92b..c61088d 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.matches-0.1.9.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.matches-0.1.9.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.matchit-0.4.6.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.matchit-0.4.6.bazel
index dd3406b..2a24ebd 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.matchit-0.4.6.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.matchit-0.4.6.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.memchr-2.4.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.memchr-2.4.1.bazel
deleted file mode 100644
index c1d16f6..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.memchr-2.4.1.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Unlicense/MIT
-# ])
-
-rust_library(
-    name = "memchr",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "2.4.1",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__memchr-2.4.1//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "memchr_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "2.4.1",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "memchr_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.memchr-2.5.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.memchr-2.5.0.bazel
new file mode 100644
index 0000000..fbb573d
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.memchr-2.5.0.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "memchr",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.5.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__memchr-2.5.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "memchr_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "2.5.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "memchr_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.mime-0.3.16.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.mime-0.3.16.bazel
index d7f8128..0c421cd 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.mime-0.3.16.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.mime-0.3.16.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.mio-0.7.14.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.mio-0.7.14.bazel
index f439769..720ecad 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.mio-0.7.14.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.mio-0.7.14.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -73,10 +82,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -90,9 +96,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -107,10 +115,10 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crates_vendor_pkgs__libc-0.2.119//:libc",
+            "@crates_vendor_pkgs__libc-0.2.126//:libc",
 
             # Common Deps
-            "@crates_vendor_pkgs__log-0.4.14//:log",
+            "@crates_vendor_pkgs__log-0.4.17//:log",
         ],
         # cfg(windows)
         (
@@ -123,10 +131,10 @@
             "@crates_vendor_pkgs__winapi-0.3.9//:winapi",
 
             # Common Deps
-            "@crates_vendor_pkgs__log-0.4.14//:log",
+            "@crates_vendor_pkgs__log-0.4.17//:log",
         ],
         "//conditions:default": [
-            "@crates_vendor_pkgs__log-0.4.14//:log",
+            "@crates_vendor_pkgs__log-0.4.17//:log",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.miow-0.3.7.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.miow-0.3.7.bazel
index 3934129..b615e3c 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.miow-0.3.7.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.miow-0.3.7.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.ntapi-0.3.7.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.ntapi-0.3.7.bazel
index 533a620..8d41087 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.ntapi-0.3.7.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.ntapi-0.3.7.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -71,10 +80,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -139,10 +145,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.num_cpus-1.13.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.num_cpus-1.13.1.bazel
index 95eca12..28bb82a 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.num_cpus-1.13.1.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.num_cpus-1.13.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -87,15 +93,18 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
             "@rules_rust//rust/platform:i686-unknown-freebsd",
             "@rules_rust//rust/platform:i686-unknown-linux-gnu",
             "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:riscv32imc-unknown-none-elf",
             "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
             "@rules_rust//rust/platform:wasm32-unknown-unknown",
             "@rules_rust//rust/platform:wasm32-wasi",
@@ -106,7 +115,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crates_vendor_pkgs__libc-0.2.119//:libc",
+            "@crates_vendor_pkgs__libc-0.2.126//:libc",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.once_cell-1.13.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.once_cell-1.13.0.bazel
new file mode 100644
index 0000000..6b76c12
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.once_cell-1.13.0.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "once_cell",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "default",
+        "race",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.13.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.once_cell-1.9.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.once_cell-1.9.0.bazel
deleted file mode 100644
index f2a936a..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.once_cell-1.9.0.bazel
+++ /dev/null
@@ -1,88 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "once_cell",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "alloc",
-        "default",
-        "race",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.9.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.parking_lot-0.11.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.parking_lot-0.11.2.bazel
index f630b0e..1b83d77 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.parking_lot-0.11.2.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.parking_lot-0.11.2.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -66,10 +75,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -81,7 +87,7 @@
     ] + select_with_or({
         "//conditions:default": [
             "@crates_vendor_pkgs__instant-0.1.12//:instant",
-            "@crates_vendor_pkgs__lock_api-0.4.6//:lock_api",
+            "@crates_vendor_pkgs__lock_api-0.4.7//:lock_api",
             "@crates_vendor_pkgs__parking_lot_core-0.8.5//:parking_lot_core",
         ],
     }),
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.parking_lot_core-0.8.5.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.parking_lot_core-0.8.5.bazel
index 2f0ece6..b19b5d1 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.parking_lot_core-0.8.5.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.parking_lot_core-0.8.5.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -85,15 +91,17 @@
         # cfg(target_os = "redox")
         #
         # No supported platform triples for cfg: 'cfg(target_os = "redox")'
-        # Skipped dependencies: [{"id":"redox_syscall 0.2.11","target":"syscall"}]
+        # Skipped dependencies: [{"id":"redox_syscall 0.2.13","target":"syscall"}]
         #
         # cfg(unix)
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -108,13 +116,13 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crates_vendor_pkgs__libc-0.2.119//:libc",
+            "@crates_vendor_pkgs__libc-0.2.126//:libc",
 
             # Common Deps
             "@crates_vendor_pkgs__cfg-if-1.0.0//:cfg_if",
             "@crates_vendor_pkgs__instant-0.1.12//:instant",
             "@crates_vendor_pkgs__parking_lot_core-0.8.5//:build_script_build",
-            "@crates_vendor_pkgs__smallvec-1.8.0//:smallvec",
+            "@crates_vendor_pkgs__smallvec-1.9.0//:smallvec",
         ],
         # cfg(windows)
         (
@@ -128,13 +136,13 @@
             "@crates_vendor_pkgs__cfg-if-1.0.0//:cfg_if",
             "@crates_vendor_pkgs__instant-0.1.12//:instant",
             "@crates_vendor_pkgs__parking_lot_core-0.8.5//:build_script_build",
-            "@crates_vendor_pkgs__smallvec-1.8.0//:smallvec",
+            "@crates_vendor_pkgs__smallvec-1.9.0//:smallvec",
         ],
         "//conditions:default": [
             "@crates_vendor_pkgs__cfg-if-1.0.0//:cfg_if",
             "@crates_vendor_pkgs__instant-0.1.12//:instant",
             "@crates_vendor_pkgs__parking_lot_core-0.8.5//:build_script_build",
-            "@crates_vendor_pkgs__smallvec-1.8.0//:smallvec",
+            "@crates_vendor_pkgs__smallvec-1.9.0//:smallvec",
         ],
     }),
 )
@@ -185,10 +193,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.percent-encoding-2.1.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.percent-encoding-2.1.0.bazel
index 1ad467a..396cb48 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.percent-encoding-2.1.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.percent-encoding-2.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-1.0.10.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-1.0.10.bazel
deleted file mode 100644
index dace729..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-1.0.10.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0 OR MIT
-# ])
-
-rust_library(
-    name = "pin_project",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__pin-project-internal-1.0.10//:pin_project_internal",
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.10",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-1.0.11.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-1.0.11.bazel
new file mode 100644
index 0000000..4548f7c
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-1.0.11.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "pin_project",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__pin-project-internal-1.0.11//:pin_project_internal",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.11",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-internal-1.0.10.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-internal-1.0.10.bazel
deleted file mode 100644
index be8b0c9..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-internal-1.0.10.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_proc_macro",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0 OR MIT
-# ])
-
-rust_proc_macro(
-    name = "pin_project_internal",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.10",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__proc-macro2-1.0.36//:proc_macro2",
-            "@crates_vendor_pkgs__quote-1.0.15//:quote",
-            "@crates_vendor_pkgs__syn-1.0.86//:syn",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-internal-1.0.11.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-internal-1.0.11.bazel
new file mode 100644
index 0000000..31d06ff
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-internal-1.0.11.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_proc_macro(
+    name = "pin_project_internal",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.11",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__proc-macro2-1.0.40//:proc_macro2",
+            "@crates_vendor_pkgs__quote-1.0.20//:quote",
+            "@crates_vendor_pkgs__syn-1.0.98//:syn",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-lite-0.2.8.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-lite-0.2.8.bazel
deleted file mode 100644
index cfd3870..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-lite-0.2.8.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0 OR MIT
-# ])
-
-rust_library(
-    name = "pin_project_lite",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.8",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-lite-0.2.9.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-lite-0.2.9.bazel
new file mode 100644
index 0000000..99db166
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-project-lite-0.2.9.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "pin_project_lite",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.9",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-utils-0.1.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-utils-0.1.0.bazel
index de4c1a2..29329ce 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-utils-0.1.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.pin-utils-0.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.proc-macro2-1.0.36.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.proc-macro2-1.0.36.bazel
deleted file mode 100644
index 6318a86..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.proc-macro2-1.0.36.bazel
+++ /dev/null
@@ -1,176 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "proc_macro2",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.36",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__proc-macro2-1.0.36//:build_script_build",
-            "@crates_vendor_pkgs__unicode-xid-0.2.2//:unicode_xid",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "proc-macro2_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.36",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "proc-macro2_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.proc-macro2-1.0.40.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.proc-macro2-1.0.40.bazel
new file mode 100644
index 0000000..59b3e6d
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.proc-macro2-1.0.40.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "proc_macro2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.40",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__proc-macro2-1.0.40//:build_script_build",
+            "@crates_vendor_pkgs__unicode-ident-1.0.2//:unicode_ident",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "proc-macro2_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.40",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "proc-macro2_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.quote-1.0.15.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.quote-1.0.15.bazel
deleted file mode 100644
index bad70cc..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.quote-1.0.15.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "quote",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.15",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__proc-macro2-1.0.36//:proc_macro2",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.quote-1.0.20.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.quote-1.0.20.bazel
new file mode 100644
index 0000000..c0ee8c7
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.quote-1.0.20.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "quote",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.20",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__proc-macro2-1.0.40//:proc_macro2",
+            "@crates_vendor_pkgs__quote-1.0.20//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "quote_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.20",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "quote_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.redox_syscall-0.2.11.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.redox_syscall-0.2.11.bazel
deleted file mode 100644
index f001325..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.redox_syscall-0.2.11.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "syscall",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.11",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__bitflags-1.3.2//:bitflags",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.redox_syscall-0.2.13.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.redox_syscall-0.2.13.bazel
new file mode 100644
index 0000000..2a3af83
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.redox_syscall-0.2.13.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "syscall",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.13",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__bitflags-1.3.2//:bitflags",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.ryu-1.0.10.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.ryu-1.0.10.bazel
new file mode 100644
index 0000000..8963fe2
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.ryu-1.0.10.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR BSL-1.0
+# ])
+
+rust_library(
+    name = "ryu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.10",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.ryu-1.0.9.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.ryu-1.0.9.bazel
deleted file mode 100644
index c2a9c81..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.ryu-1.0.9.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # Apache-2.0 OR BSL-1.0
-# ])
-
-rust_library(
-    name = "ryu",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.9",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.scopeguard-1.1.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.scopeguard-1.1.0.bazel
index 0bc1e13..521cf9c 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.scopeguard-1.1.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.scopeguard-1.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.serde-1.0.136.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.serde-1.0.136.bazel
deleted file mode 100644
index b2b5369..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.serde-1.0.136.bazel
+++ /dev/null
@@ -1,175 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "serde",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.136",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__serde-1.0.136//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "serde_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.136",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "serde_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.serde-1.0.140.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.serde-1.0.140.bazel
new file mode 100644
index 0000000..7be7179
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.serde-1.0.140.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "serde",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.140",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__serde-1.0.140//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "serde_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.140",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "serde_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.serde_json-1.0.79.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.serde_json-1.0.79.bazel
deleted file mode 100644
index e827016..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.serde_json-1.0.79.bazel
+++ /dev/null
@@ -1,180 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "serde_json",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "raw_value",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.79",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__itoa-1.0.1//:itoa",
-            "@crates_vendor_pkgs__ryu-1.0.9//:ryu",
-            "@crates_vendor_pkgs__serde-1.0.136//:serde",
-            "@crates_vendor_pkgs__serde_json-1.0.79//:build_script_build",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "serde_json_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "raw_value",
-        "std",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.79",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "serde_json_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.serde_json-1.0.82.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.serde_json-1.0.82.bazel
new file mode 100644
index 0000000..27af144
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.serde_json-1.0.82.bazel
@@ -0,0 +1,183 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "serde_json",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "raw_value",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.82",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__itoa-1.0.2//:itoa",
+            "@crates_vendor_pkgs__ryu-1.0.10//:ryu",
+            "@crates_vendor_pkgs__serde-1.0.140//:serde",
+            "@crates_vendor_pkgs__serde_json-1.0.82//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "serde_json_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "raw_value",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.82",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "serde_json_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.serde_urlencoded-0.7.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.serde_urlencoded-0.7.1.bazel
index a0618b4..3409249 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.serde_urlencoded-0.7.1.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.serde_urlencoded-0.7.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -80,9 +86,9 @@
     ] + select_with_or({
         "//conditions:default": [
             "@crates_vendor_pkgs__form_urlencoded-1.0.1//:form_urlencoded",
-            "@crates_vendor_pkgs__itoa-1.0.1//:itoa",
-            "@crates_vendor_pkgs__ryu-1.0.9//:ryu",
-            "@crates_vendor_pkgs__serde-1.0.136//:serde",
+            "@crates_vendor_pkgs__itoa-1.0.2//:itoa",
+            "@crates_vendor_pkgs__ryu-1.0.10//:ryu",
+            "@crates_vendor_pkgs__serde-1.0.140//:serde",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.sharded-slab-0.1.4.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.sharded-slab-0.1.4.bazel
index cfcc376..a9ae32f 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.sharded-slab-0.1.4.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.sharded-slab-0.1.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.signal-hook-registry-1.4.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.signal-hook-registry-1.4.0.bazel
index 1bfc0da..6f7ae8e 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.signal-hook-registry-1.4.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.signal-hook-registry-1.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crates_vendor_pkgs__libc-0.2.119//:libc",
+            "@crates_vendor_pkgs__libc-0.2.126//:libc",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.slab-0.4.5.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.slab-0.4.5.bazel
deleted file mode 100644
index d4303ef..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.slab-0.4.5.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "slab",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.5",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.slab-0.4.7.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.slab-0.4.7.bazel
new file mode 100644
index 0000000..24d1160
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.slab-0.4.7.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "slab",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.7",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__slab-0.4.7//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "slab_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.7",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "slab_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.smallvec-1.8.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.smallvec-1.8.0.bazel
deleted file mode 100644
index a9ae389..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.smallvec-1.8.0.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT/Apache-2.0
-# ])
-
-rust_library(
-    name = "smallvec",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.8.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.smallvec-1.9.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.smallvec-1.9.0.bazel
new file mode 100644
index 0000000..acb3495
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.smallvec-1.9.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "smallvec",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.9.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.socket2-0.4.4.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.socket2-0.4.4.bazel
index f9ccd49..bb6c436 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.socket2-0.4.4.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.socket2-0.4.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -82,9 +88,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -99,7 +107,7 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crates_vendor_pkgs__libc-0.2.119//:libc",
+            "@crates_vendor_pkgs__libc-0.2.126//:libc",
 
             # Common Deps
         ],
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.syn-1.0.86.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.syn-1.0.86.bazel
deleted file mode 100644
index 5653b39..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.syn-1.0.86.bazel
+++ /dev/null
@@ -1,196 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-load(
-    "@rules_rust//cargo:defs.bzl",
-    "cargo_build_script",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "syn",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "clone-impls",
-        "default",
-        "derive",
-        "extra-traits",
-        "full",
-        "parsing",
-        "printing",
-        "proc-macro",
-        "quote",
-        "visit",
-        "visit-mut",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.0.86",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__proc-macro2-1.0.36//:proc_macro2",
-            "@crates_vendor_pkgs__quote-1.0.15//:quote",
-            "@crates_vendor_pkgs__syn-1.0.86//:build_script_build",
-            "@crates_vendor_pkgs__unicode-xid-0.2.2//:unicode_xid",
-        ],
-    }),
-)
-
-cargo_build_script(
-    # See comment associated with alias. Do not change this name
-    name = "syn_build_script",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    build_script_env = {
-    },
-    compile_data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "clone-impls",
-        "default",
-        "derive",
-        "extra-traits",
-        "full",
-        "parsing",
-        "printing",
-        "proc-macro",
-        "quote",
-        "visit",
-        "visit-mut",
-    ],
-    crate_name = "build_script_build",
-    crate_root = "build.rs",
-    data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    tools = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    version = "1.0.86",
-    visibility = ["//visibility:private"],
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
-
-alias(
-    # Because `cargo_build_script` does some invisible target name mutating to
-    # determine the package and crate name for a build script, the Bazel
-    # target namename of any build script cannot be the Cargo canonical name
-    # of `build_script_build` without losing out on having certain Cargo
-    # environment variables set.
-    name = "build_script_build",
-    actual = "syn_build_script",
-    tags = [
-        "manual",
-    ],
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.syn-1.0.98.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.syn-1.0.98.bazel
new file mode 100644
index 0000000..2e292ae
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.syn-1.0.98.bazel
@@ -0,0 +1,199 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "syn",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "extra-traits",
+        "full",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+        "visit",
+        "visit-mut",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.98",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__proc-macro2-1.0.40//:proc_macro2",
+            "@crates_vendor_pkgs__quote-1.0.20//:quote",
+            "@crates_vendor_pkgs__syn-1.0.98//:build_script_build",
+            "@crates_vendor_pkgs__unicode-ident-1.0.2//:unicode_ident",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "syn_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "extra-traits",
+        "full",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+        "visit",
+        "visit-mut",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.98",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "syn_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.sync_wrapper-0.1.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.sync_wrapper-0.1.1.bazel
index d3358b4..6ac7c88 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.sync_wrapper-0.1.1.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.sync_wrapper-0.1.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.thread_local-1.1.4.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.thread_local-1.1.4.bazel
index 68b0305..c3d5f5c 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.thread_local-1.1.4.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.thread_local-1.1.4.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crates_vendor_pkgs__once_cell-1.9.0//:once_cell",
+            "@crates_vendor_pkgs__once_cell-1.13.0//:once_cell",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-1.16.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-1.16.1.bazel
index 35237a9..c4f48c7 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-1.16.1.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-1.16.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -74,7 +83,7 @@
     proc_macro_deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crates_vendor_pkgs__tokio-macros-1.7.0//:tokio_macros",
+            "@crates_vendor_pkgs__tokio-macros-1.8.0//:tokio_macros",
         ],
     }),
     rustc_env = {
@@ -89,10 +98,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -106,9 +112,11 @@
         (
             "@rules_rust//rust/platform:aarch64-apple-darwin",
             "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
             "@rules_rust//rust/platform:aarch64-linux-android",
             "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
             "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
             "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
             "@rules_rust//rust/platform:i686-apple-darwin",
             "@rules_rust//rust/platform:i686-linux-android",
@@ -123,17 +131,17 @@
             "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
         ): [
             # Target Deps
-            "@crates_vendor_pkgs__libc-0.2.119//:libc",
+            "@crates_vendor_pkgs__libc-0.2.126//:libc",
             "@crates_vendor_pkgs__signal-hook-registry-1.4.0//:signal_hook_registry",
 
             # Common Deps
-            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
-            "@crates_vendor_pkgs__memchr-2.4.1//:memchr",
+            "@crates_vendor_pkgs__bytes-1.2.0//:bytes",
+            "@crates_vendor_pkgs__memchr-2.5.0//:memchr",
             "@crates_vendor_pkgs__mio-0.7.14//:mio",
             "@crates_vendor_pkgs__num_cpus-1.13.1//:num_cpus",
-            "@crates_vendor_pkgs__once_cell-1.9.0//:once_cell",
+            "@crates_vendor_pkgs__once_cell-1.13.0//:once_cell",
             "@crates_vendor_pkgs__parking_lot-0.11.2//:parking_lot",
-            "@crates_vendor_pkgs__pin-project-lite-0.2.8//:pin_project_lite",
+            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
         ],
         # cfg(windows)
         (
@@ -144,22 +152,22 @@
             "@crates_vendor_pkgs__winapi-0.3.9//:winapi",
 
             # Common Deps
-            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
-            "@crates_vendor_pkgs__memchr-2.4.1//:memchr",
+            "@crates_vendor_pkgs__bytes-1.2.0//:bytes",
+            "@crates_vendor_pkgs__memchr-2.5.0//:memchr",
             "@crates_vendor_pkgs__mio-0.7.14//:mio",
             "@crates_vendor_pkgs__num_cpus-1.13.1//:num_cpus",
-            "@crates_vendor_pkgs__once_cell-1.9.0//:once_cell",
+            "@crates_vendor_pkgs__once_cell-1.13.0//:once_cell",
             "@crates_vendor_pkgs__parking_lot-0.11.2//:parking_lot",
-            "@crates_vendor_pkgs__pin-project-lite-0.2.8//:pin_project_lite",
+            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
         ],
         "//conditions:default": [
-            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
-            "@crates_vendor_pkgs__memchr-2.4.1//:memchr",
+            "@crates_vendor_pkgs__bytes-1.2.0//:bytes",
+            "@crates_vendor_pkgs__memchr-2.5.0//:memchr",
             "@crates_vendor_pkgs__mio-0.7.14//:mio",
             "@crates_vendor_pkgs__num_cpus-1.13.1//:num_cpus",
-            "@crates_vendor_pkgs__once_cell-1.9.0//:once_cell",
+            "@crates_vendor_pkgs__once_cell-1.13.0//:once_cell",
             "@crates_vendor_pkgs__parking_lot-0.11.2//:parking_lot",
-            "@crates_vendor_pkgs__pin-project-lite-0.2.8//:pin_project_lite",
+            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
         ],
     }),
 )
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-macros-1.7.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-macros-1.7.0.bazel
deleted file mode 100644
index fee514a..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-macros-1.7.0.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_proc_macro",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_proc_macro(
-    name = "tokio_macros",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "1.7.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__proc-macro2-1.0.36//:proc_macro2",
-            "@crates_vendor_pkgs__quote-1.0.15//:quote",
-            "@crates_vendor_pkgs__syn-1.0.86//:syn",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-macros-1.8.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-macros-1.8.0.bazel
new file mode 100644
index 0000000..7d990ca
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-macros-1.8.0.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_proc_macro(
+    name = "tokio_macros",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.8.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__proc-macro2-1.0.40//:proc_macro2",
+            "@crates_vendor_pkgs__quote-1.0.20//:quote",
+            "@crates_vendor_pkgs__syn-1.0.98//:syn",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-util-0.6.9.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-util-0.6.9.bazel
deleted file mode 100644
index 7d8b271..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-util-0.6.9.bazel
+++ /dev/null
@@ -1,92 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tokio_util",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "codec",
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.6.9",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
-            "@crates_vendor_pkgs__futures-core-0.3.21//:futures_core",
-            "@crates_vendor_pkgs__futures-sink-0.3.21//:futures_sink",
-            "@crates_vendor_pkgs__log-0.4.14//:log",
-            "@crates_vendor_pkgs__pin-project-lite-0.2.8//:pin_project_lite",
-            "@crates_vendor_pkgs__tokio-1.16.1//:tokio",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-util-0.7.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-util-0.7.0.bazel
deleted file mode 100644
index 7cb6846..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-util-0.7.0.bazel
+++ /dev/null
@@ -1,90 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tokio_util",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.7.0",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
-            "@crates_vendor_pkgs__futures-core-0.3.21//:futures_core",
-            "@crates_vendor_pkgs__futures-sink-0.3.21//:futures_sink",
-            "@crates_vendor_pkgs__log-0.4.14//:log",
-            "@crates_vendor_pkgs__pin-project-lite-0.2.8//:pin_project_lite",
-            "@crates_vendor_pkgs__tokio-1.16.1//:tokio",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-util-0.7.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-util-0.7.2.bazel
new file mode 100644
index 0000000..47d160b
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tokio-util-0.7.2.bazel
@@ -0,0 +1,99 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio_util",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "codec",
+        "default",
+        "tracing",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.7.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__bytes-1.2.0//:bytes",
+            "@crates_vendor_pkgs__futures-core-0.3.21//:futures_core",
+            "@crates_vendor_pkgs__futures-sink-0.3.21//:futures_sink",
+            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
+            "@crates_vendor_pkgs__tokio-1.16.1//:tokio",
+            "@crates_vendor_pkgs__tracing-0.1.35//:tracing",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-0.4.12.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-0.4.12.bazel
deleted file mode 100644
index 7acabc6..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-0.4.12.bazel
+++ /dev/null
@@ -1,106 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tower",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "__common",
-        "buffer",
-        "default",
-        "futures-core",
-        "futures-util",
-        "log",
-        "make",
-        "pin-project",
-        "pin-project-lite",
-        "tokio",
-        "tokio-util",
-        "tracing",
-        "util",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.4.12",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__futures-core-0.3.21//:futures_core",
-            "@crates_vendor_pkgs__futures-util-0.3.21//:futures_util",
-            "@crates_vendor_pkgs__pin-project-1.0.10//:pin_project",
-            "@crates_vendor_pkgs__pin-project-lite-0.2.8//:pin_project_lite",
-            "@crates_vendor_pkgs__tokio-1.16.1//:tokio",
-            "@crates_vendor_pkgs__tokio-util-0.7.0//:tokio_util",
-            "@crates_vendor_pkgs__tower-layer-0.3.1//:tower_layer",
-            "@crates_vendor_pkgs__tower-service-0.3.1//:tower_service",
-            "@crates_vendor_pkgs__tracing-0.1.31//:tracing",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-0.4.13.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-0.4.13.bazel
new file mode 100644
index 0000000..31410cd
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-0.4.13.bazel
@@ -0,0 +1,112 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tower",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "__common",
+        "buffer",
+        "default",
+        "futures-core",
+        "futures-util",
+        "log",
+        "make",
+        "pin-project",
+        "pin-project-lite",
+        "tokio",
+        "tokio-util",
+        "tracing",
+        "util",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.13",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__futures-core-0.3.21//:futures_core",
+            "@crates_vendor_pkgs__futures-util-0.3.21//:futures_util",
+            "@crates_vendor_pkgs__pin-project-1.0.11//:pin_project",
+            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
+            "@crates_vendor_pkgs__tokio-1.16.1//:tokio",
+            "@crates_vendor_pkgs__tokio-util-0.7.2//:tokio_util",
+            "@crates_vendor_pkgs__tower-layer-0.3.1//:tower_layer",
+            "@crates_vendor_pkgs__tower-service-0.3.2//:tower_service",
+            "@crates_vendor_pkgs__tracing-0.1.35//:tracing",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-http-0.2.3.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-http-0.2.3.bazel
deleted file mode 100644
index fed12a5..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-http-0.2.3.bazel
+++ /dev/null
@@ -1,102 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tower_http",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "map-response-body",
-        "tower",
-        "trace",
-        "tracing",
-        "util",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.3",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__bitflags-1.3.2//:bitflags",
-            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
-            "@crates_vendor_pkgs__futures-core-0.3.21//:futures_core",
-            "@crates_vendor_pkgs__futures-util-0.3.21//:futures_util",
-            "@crates_vendor_pkgs__http-0.2.6//:http",
-            "@crates_vendor_pkgs__http-body-0.4.4//:http_body",
-            "@crates_vendor_pkgs__http-range-header-0.3.0//:http_range_header",
-            "@crates_vendor_pkgs__pin-project-lite-0.2.8//:pin_project_lite",
-            "@crates_vendor_pkgs__tower-0.4.12//:tower",
-            "@crates_vendor_pkgs__tower-layer-0.3.1//:tower_layer",
-            "@crates_vendor_pkgs__tower-service-0.3.1//:tower_service",
-            "@crates_vendor_pkgs__tracing-0.1.31//:tracing",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-http-0.2.5.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-http-0.2.5.bazel
new file mode 100644
index 0000000..59153cb
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-http-0.2.5.bazel
@@ -0,0 +1,108 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tower_http",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "map-response-body",
+        "tower",
+        "trace",
+        "tracing",
+        "util",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.5",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__bitflags-1.3.2//:bitflags",
+            "@crates_vendor_pkgs__bytes-1.2.0//:bytes",
+            "@crates_vendor_pkgs__futures-core-0.3.21//:futures_core",
+            "@crates_vendor_pkgs__futures-util-0.3.21//:futures_util",
+            "@crates_vendor_pkgs__http-0.2.8//:http",
+            "@crates_vendor_pkgs__http-body-0.4.5//:http_body",
+            "@crates_vendor_pkgs__http-range-header-0.3.0//:http_range_header",
+            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
+            "@crates_vendor_pkgs__tower-0.4.13//:tower",
+            "@crates_vendor_pkgs__tower-layer-0.3.1//:tower_layer",
+            "@crates_vendor_pkgs__tower-service-0.3.2//:tower_service",
+            "@crates_vendor_pkgs__tracing-0.1.35//:tracing",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-layer-0.3.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-layer-0.3.1.bazel
index 9e48ea0..e88fe62 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-layer-0.3.1.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-layer-0.3.1.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-service-0.3.1.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-service-0.3.1.bazel
deleted file mode 100644
index 317d496..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-service-0.3.1.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tower_service",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.1",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-service-0.3.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-service-0.3.2.bazel
new file mode 100644
index 0000000..b72fb38
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tower-service-0.3.2.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tower_service",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-0.1.31.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-0.1.31.bazel
deleted file mode 100644
index 4b7cbd3..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-0.1.31.bazel
+++ /dev/null
@@ -1,94 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tracing",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "attributes",
-        "default",
-        "log",
-        "std",
-        "tracing-attributes",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__tracing-attributes-0.1.19//:tracing_attributes",
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.31",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__cfg-if-1.0.0//:cfg_if",
-            "@crates_vendor_pkgs__log-0.4.14//:log",
-            "@crates_vendor_pkgs__pin-project-lite-0.2.8//:pin_project_lite",
-            "@crates_vendor_pkgs__tracing-core-0.1.22//:tracing_core",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-0.1.35.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-0.1.35.bazel
new file mode 100644
index 0000000..fb9bbfb
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-0.1.35.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tracing",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "attributes",
+        "default",
+        "log",
+        "std",
+        "tracing-attributes",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__tracing-attributes-0.1.22//:tracing_attributes",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.35",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__cfg-if-1.0.0//:cfg_if",
+            "@crates_vendor_pkgs__log-0.4.17//:log",
+            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
+            "@crates_vendor_pkgs__tracing-core-0.1.28//:tracing_core",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-attributes-0.1.19.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-attributes-0.1.19.bazel
deleted file mode 100644
index fe555bb..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-attributes-0.1.19.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_proc_macro",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_proc_macro(
-    name = "tracing_attributes",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.19",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__proc-macro2-1.0.36//:proc_macro2",
-            "@crates_vendor_pkgs__quote-1.0.15//:quote",
-            "@crates_vendor_pkgs__syn-1.0.86//:syn",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-attributes-0.1.22.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-attributes-0.1.22.bazel
new file mode 100644
index 0000000..03eabcd
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-attributes-0.1.22.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_proc_macro(
+    name = "tracing_attributes",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.22",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__proc-macro2-1.0.40//:proc_macro2",
+            "@crates_vendor_pkgs__quote-1.0.20//:quote",
+            "@crates_vendor_pkgs__syn-1.0.98//:syn",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-core-0.1.22.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-core-0.1.22.bazel
deleted file mode 100644
index 8dd06ff..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-core-0.1.22.bazel
+++ /dev/null
@@ -1,94 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tracing_core",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-        "lazy_static",
-        "std",
-        "valuable",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.22",
-    deps = [
-    ] + select_with_or({
-        # cfg(tracing_unstable)
-        #
-        # No supported platform triples for cfg: 'cfg(tracing_unstable)'
-        # Skipped dependencies: [{"id":"valuable 0.1.0","target":"valuable"}]
-        #
-        "//conditions:default": [
-            "@crates_vendor_pkgs__lazy_static-1.4.0//:lazy_static",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-core-0.1.28.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-core-0.1.28.bazel
new file mode 100644
index 0000000..8692724
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-core-0.1.28.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tracing_core",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "once_cell",
+        "std",
+        "valuable",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.28",
+    deps = [
+    ] + select_with_or({
+        # cfg(tracing_unstable)
+        #
+        # No supported platform triples for cfg: 'cfg(tracing_unstable)'
+        # Skipped dependencies: [{"id":"valuable 0.1.0","target":"valuable"}]
+        #
+        "//conditions:default": [
+            "@crates_vendor_pkgs__once_cell-1.13.0//:once_cell",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-log-0.1.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-log-0.1.2.bazel
deleted file mode 100644
index a516069..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-log-0.1.2.bazel
+++ /dev/null
@@ -1,89 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tracing_log",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "log-tracer",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.1.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__lazy_static-1.4.0//:lazy_static",
-            "@crates_vendor_pkgs__log-0.4.14//:log",
-            "@crates_vendor_pkgs__tracing-core-0.1.22//:tracing_core",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-log-0.1.3.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-log-0.1.3.bazel
new file mode 100644
index 0000000..ecf9023
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-log-0.1.3.bazel
@@ -0,0 +1,95 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tracing_log",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "log-tracer",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__lazy_static-1.4.0//:lazy_static",
+            "@crates_vendor_pkgs__log-0.4.17//:log",
+            "@crates_vendor_pkgs__tracing-core-0.1.28//:tracing_core",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-subscriber-0.3.15.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-subscriber-0.3.15.bazel
new file mode 100644
index 0000000..9c0f6e6
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-subscriber-0.3.15.bazel
@@ -0,0 +1,107 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tracing_subscriber",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "ansi",
+        "ansi_term",
+        "default",
+        "fmt",
+        "registry",
+        "sharded-slab",
+        "smallvec",
+        "std",
+        "thread_local",
+        "tracing-log",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.15",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@crates_vendor_pkgs__ansi_term-0.12.1//:ansi_term",
+            "@crates_vendor_pkgs__sharded-slab-0.1.4//:sharded_slab",
+            "@crates_vendor_pkgs__smallvec-1.9.0//:smallvec",
+            "@crates_vendor_pkgs__thread_local-1.1.4//:thread_local",
+            "@crates_vendor_pkgs__tracing-core-0.1.28//:tracing_core",
+            "@crates_vendor_pkgs__tracing-log-0.1.3//:tracing_log",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-subscriber-0.3.9.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-subscriber-0.3.9.bazel
deleted file mode 100644
index 6555328..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.tracing-subscriber-0.3.9.bazel
+++ /dev/null
@@ -1,101 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT
-# ])
-
-rust_library(
-    name = "tracing_subscriber",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "alloc",
-        "ansi",
-        "ansi_term",
-        "default",
-        "fmt",
-        "registry",
-        "sharded-slab",
-        "smallvec",
-        "std",
-        "thread_local",
-        "tracing-log",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2018",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.3.9",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-            "@crates_vendor_pkgs__ansi_term-0.12.1//:ansi_term",
-            "@crates_vendor_pkgs__sharded-slab-0.1.4//:sharded_slab",
-            "@crates_vendor_pkgs__smallvec-1.8.0//:smallvec",
-            "@crates_vendor_pkgs__thread_local-1.1.4//:thread_local",
-            "@crates_vendor_pkgs__tracing-core-0.1.22//:tracing_core",
-            "@crates_vendor_pkgs__tracing-log-0.1.2//:tracing_log",
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.try-lock-0.2.3.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.try-lock-0.2.3.bazel
index 10fbaf6..2cc2a5e 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.try-lock-0.2.3.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.try-lock-0.2.3.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.unicode-ident-1.0.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.unicode-ident-1.0.2.bazel
new file mode 100644
index 0000000..e83d79c
--- /dev/null
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.unicode-ident-1.0.2.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # (MIT OR Apache-2.0) AND Unicode-DFS-2016
+# ])
+
+rust_library(
+    name = "unicode_ident",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.unicode-xid-0.2.2.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.unicode-xid-0.2.2.bazel
deleted file mode 100644
index 30562c1..0000000
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.unicode-xid-0.2.2.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# @generated
-# This file is auto-generated by the cargo-bazel tool.
-#
-# DO NOT MODIFY: Local changes may be replaced in future executions.
-###############################################################################
-
-load(
-    "@bazel_skylib//lib:selects.bzl",
-    "selects",
-)
-
-# buildifier: disable=bzl-visibility
-load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_library",
-)
-
-package(default_visibility = ["//visibility:public"])
-
-# licenses([
-#     "TODO",  # MIT OR Apache-2.0
-# ])
-
-rust_library(
-    name = "unicode_xid",
-    srcs = glob(
-        include = [
-            "**/*.rs",
-        ],
-        exclude = [
-        ],
-    ),
-    aliases = selects.with_or({
-        "//conditions:default": {
-        },
-    }),
-    compile_data = glob(["**"]) + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    edition = "2015",
-    proc_macro_deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_env = {
-    },
-    rustc_env_files = select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    rustc_flags = [
-        # In most cases, warnings in 3rd party crates are not interesting as
-        # they're out of the control of consumers. The flag here silences
-        # warnings. For more details see:
-        # https://doc.rust-lang.org/rustc/lints/levels.html
-        "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-    tags = [
-        "cargo-bazel",
-        "manual",
-        "noclippy",
-        "norustfmt",
-    ],
-    version = "0.2.2",
-    deps = [
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
-)
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.valuable-0.1.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.valuable-0.1.0.bazel
index 9bd0d0b..0612bb2 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.valuable-0.1.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.valuable-0.1.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -71,10 +80,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -138,10 +144,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.want-0.3.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.want-0.3.0.bazel
index d13a311..0886b54 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.want-0.3.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.want-0.3.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -36,7 +37,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -65,10 +74,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -79,7 +85,7 @@
     deps = [
     ] + select_with_or({
         "//conditions:default": [
-            "@crates_vendor_pkgs__log-0.4.14//:log",
+            "@crates_vendor_pkgs__log-0.4.17//:log",
             "@crates_vendor_pkgs__try-lock-0.2.3//:try_lock",
         ],
     }),
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.winapi-0.3.9.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.winapi-0.3.9.bazel
index f50047d..7343249 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.winapi-0.3.9.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.winapi-0.3.9.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -99,10 +108,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -204,10 +210,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
index ec8ffa9..9b00a33 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
index 0ce2e90..9c1e225 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 
 load(
@@ -40,7 +41,15 @@
         "//conditions:default": {
         },
     }),
-    compile_data = glob(["**"]) + select_with_or({
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
         "//conditions:default": [
         ],
     }),
@@ -69,10 +78,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
@@ -134,10 +140,7 @@
         # warnings. For more details see:
         # https://doc.rust-lang.org/rustc/lints/levels.html
         "--cap-lints=allow",
-    ] + select_with_or({
-        "//conditions:default": [
-        ],
-    }),
+    ],
     tags = [
         "cargo-bazel",
         "manual",
diff --git a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/defs.bzl b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/defs.bzl
index ad7dac5..3d2763f 100644
--- a/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/defs.bzl
+++ b/third_party/rules_rust/examples/crate_universe/vendor_remote_pkgs/crates/defs.bzl
@@ -1,8 +1,9 @@
 ###############################################################################
 # @generated
-# This file is auto-generated by the cargo-bazel tool.
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
 #
-# DO NOT MODIFY: Local changes may be replaced in future executions.
+#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
 ###############################################################################
 """
 # `crates_repository` API
@@ -194,7 +195,10 @@
     dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
 
     if not dependencies:
-        return []
+        if dependencies == None:
+            fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
+        else:
+            return []
 
     crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
     for condition, deps in dependencies.items():
@@ -288,14 +292,14 @@
     "": {
         _COMMON_CONDITION: {
             "axum": "@crates_vendor_pkgs__axum-0.4.8//:axum",
-            "hyper": "@crates_vendor_pkgs__hyper-0.14.17//:hyper",
+            "hyper": "@crates_vendor_pkgs__hyper-0.14.20//:hyper",
             "mime": "@crates_vendor_pkgs__mime-0.3.16//:mime",
-            "serde_json": "@crates_vendor_pkgs__serde_json-1.0.79//:serde_json",
+            "serde_json": "@crates_vendor_pkgs__serde_json-1.0.82//:serde_json",
             "tokio": "@crates_vendor_pkgs__tokio-1.16.1//:tokio",
-            "tower": "@crates_vendor_pkgs__tower-0.4.12//:tower",
-            "tower-http": "@crates_vendor_pkgs__tower-http-0.2.3//:tower_http",
-            "tracing": "@crates_vendor_pkgs__tracing-0.1.31//:tracing",
-            "tracing-subscriber": "@crates_vendor_pkgs__tracing-subscriber-0.3.9//:tracing_subscriber",
+            "tower": "@crates_vendor_pkgs__tower-0.4.13//:tower",
+            "tower-http": "@crates_vendor_pkgs__tower-http-0.2.5//:tower_http",
+            "tracing": "@crates_vendor_pkgs__tracing-0.1.35//:tracing",
+            "tracing-subscriber": "@crates_vendor_pkgs__tracing-subscriber-0.3.15//:tracing_subscriber",
         },
     },
 }
@@ -359,11 +363,11 @@
 
 _CONDITIONS = {
     "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [],
-    "cfg(not(windows))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(not(windows))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "riscv32imc-unknown-none-elf", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
     "cfg(target_os = \"redox\")": [],
     "cfg(target_os = \"windows\")": ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc"],
     "cfg(tracing_unstable)": [],
-    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
     "cfg(windows)": ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc"],
     "i686-pc-windows-gnu": [],
     "x86_64-pc-windows-gnu": [],
@@ -385,12 +389,12 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__async-trait-0.1.52",
-        sha256 = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3",
+        name = "crates_vendor_pkgs__async-trait-0.1.56",
+        sha256 = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/async-trait/0.1.52/download"],
-        strip_prefix = "async-trait-0.1.52",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.async-trait-0.1.52.bazel"),
+        urls = ["https://crates.io/api/v1/crates/async-trait/0.1.56/download"],
+        strip_prefix = "async-trait-0.1.56",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.async-trait-0.1.56.bazel"),
     )
 
     maybe(
@@ -435,12 +439,12 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__bytes-1.1.0",
-        sha256 = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8",
+        name = "crates_vendor_pkgs__bytes-1.2.0",
+        sha256 = "f0b3de4a0c5e67e16066a0715723abd91edc2f9001d09c46e1dca929351e130e",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/bytes/1.1.0/download"],
-        strip_prefix = "bytes-1.1.0",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.bytes-1.1.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/bytes/1.2.0/download"],
+        strip_prefix = "bytes-1.2.0",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.bytes-1.2.0.bazel"),
     )
 
     maybe(
@@ -525,22 +529,22 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__h2-0.3.11",
-        sha256 = "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e",
+        name = "crates_vendor_pkgs__h2-0.3.13",
+        sha256 = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/h2/0.3.11/download"],
-        strip_prefix = "h2-0.3.11",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.h2-0.3.11.bazel"),
+        urls = ["https://crates.io/api/v1/crates/h2/0.3.13/download"],
+        strip_prefix = "h2-0.3.13",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.h2-0.3.13.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__hashbrown-0.11.2",
-        sha256 = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e",
+        name = "crates_vendor_pkgs__hashbrown-0.12.3",
+        sha256 = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/hashbrown/0.11.2/download"],
-        strip_prefix = "hashbrown-0.11.2",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.hashbrown-0.11.2.bazel"),
+        urls = ["https://crates.io/api/v1/crates/hashbrown/0.12.3/download"],
+        strip_prefix = "hashbrown-0.12.3",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.hashbrown-0.12.3.bazel"),
     )
 
     maybe(
@@ -555,22 +559,22 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__http-0.2.6",
-        sha256 = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03",
+        name = "crates_vendor_pkgs__http-0.2.8",
+        sha256 = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/http/0.2.6/download"],
-        strip_prefix = "http-0.2.6",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.http-0.2.6.bazel"),
+        urls = ["https://crates.io/api/v1/crates/http/0.2.8/download"],
+        strip_prefix = "http-0.2.8",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.http-0.2.8.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__http-body-0.4.4",
-        sha256 = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6",
+        name = "crates_vendor_pkgs__http-body-0.4.5",
+        sha256 = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/http-body/0.4.4/download"],
-        strip_prefix = "http-body-0.4.4",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.http-body-0.4.4.bazel"),
+        urls = ["https://crates.io/api/v1/crates/http-body/0.4.5/download"],
+        strip_prefix = "http-body-0.4.5",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.http-body-0.4.5.bazel"),
     )
 
     maybe(
@@ -585,12 +589,12 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__httparse-1.6.0",
-        sha256 = "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4",
+        name = "crates_vendor_pkgs__httparse-1.7.1",
+        sha256 = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/httparse/1.6.0/download"],
-        strip_prefix = "httparse-1.6.0",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.httparse-1.6.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/httparse/1.7.1/download"],
+        strip_prefix = "httparse-1.7.1",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.httparse-1.7.1.bazel"),
     )
 
     maybe(
@@ -605,22 +609,22 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__hyper-0.14.17",
-        sha256 = "043f0e083e9901b6cc658a77d1eb86f4fc650bbb977a4337dd63192826aa85dd",
+        name = "crates_vendor_pkgs__hyper-0.14.20",
+        sha256 = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/hyper/0.14.17/download"],
-        strip_prefix = "hyper-0.14.17",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.hyper-0.14.17.bazel"),
+        urls = ["https://crates.io/api/v1/crates/hyper/0.14.20/download"],
+        strip_prefix = "hyper-0.14.20",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.hyper-0.14.20.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__indexmap-1.8.0",
-        sha256 = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223",
+        name = "crates_vendor_pkgs__indexmap-1.9.1",
+        sha256 = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/indexmap/1.8.0/download"],
-        strip_prefix = "indexmap-1.8.0",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.indexmap-1.8.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/indexmap/1.9.1/download"],
+        strip_prefix = "indexmap-1.9.1",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.indexmap-1.9.1.bazel"),
     )
 
     maybe(
@@ -635,12 +639,12 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__itoa-1.0.1",
-        sha256 = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35",
+        name = "crates_vendor_pkgs__itoa-1.0.2",
+        sha256 = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/itoa/1.0.1/download"],
-        strip_prefix = "itoa-1.0.1",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.itoa-1.0.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/itoa/1.0.2/download"],
+        strip_prefix = "itoa-1.0.2",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.itoa-1.0.2.bazel"),
     )
 
     maybe(
@@ -655,32 +659,32 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__libc-0.2.119",
-        sha256 = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4",
+        name = "crates_vendor_pkgs__libc-0.2.126",
+        sha256 = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/libc/0.2.119/download"],
-        strip_prefix = "libc-0.2.119",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.libc-0.2.119.bazel"),
+        urls = ["https://crates.io/api/v1/crates/libc/0.2.126/download"],
+        strip_prefix = "libc-0.2.126",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.libc-0.2.126.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__lock_api-0.4.6",
-        sha256 = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b",
+        name = "crates_vendor_pkgs__lock_api-0.4.7",
+        sha256 = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/lock_api/0.4.6/download"],
-        strip_prefix = "lock_api-0.4.6",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.lock_api-0.4.6.bazel"),
+        urls = ["https://crates.io/api/v1/crates/lock_api/0.4.7/download"],
+        strip_prefix = "lock_api-0.4.7",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.lock_api-0.4.7.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__log-0.4.14",
-        sha256 = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710",
+        name = "crates_vendor_pkgs__log-0.4.17",
+        sha256 = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/log/0.4.14/download"],
-        strip_prefix = "log-0.4.14",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.log-0.4.14.bazel"),
+        urls = ["https://crates.io/api/v1/crates/log/0.4.17/download"],
+        strip_prefix = "log-0.4.17",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.log-0.4.17.bazel"),
     )
 
     maybe(
@@ -705,12 +709,12 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__memchr-2.4.1",
-        sha256 = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a",
+        name = "crates_vendor_pkgs__memchr-2.5.0",
+        sha256 = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/memchr/2.4.1/download"],
-        strip_prefix = "memchr-2.4.1",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.memchr-2.4.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/memchr/2.5.0/download"],
+        strip_prefix = "memchr-2.5.0",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.memchr-2.5.0.bazel"),
     )
 
     maybe(
@@ -765,12 +769,12 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__once_cell-1.9.0",
-        sha256 = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5",
+        name = "crates_vendor_pkgs__once_cell-1.13.0",
+        sha256 = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/once_cell/1.9.0/download"],
-        strip_prefix = "once_cell-1.9.0",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.once_cell-1.9.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/once_cell/1.13.0/download"],
+        strip_prefix = "once_cell-1.13.0",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.once_cell-1.13.0.bazel"),
     )
 
     maybe(
@@ -805,32 +809,32 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__pin-project-1.0.10",
-        sha256 = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e",
+        name = "crates_vendor_pkgs__pin-project-1.0.11",
+        sha256 = "78203e83c48cffbe01e4a2d35d566ca4de445d79a85372fc64e378bfc812a260",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/pin-project/1.0.10/download"],
-        strip_prefix = "pin-project-1.0.10",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.pin-project-1.0.10.bazel"),
+        urls = ["https://crates.io/api/v1/crates/pin-project/1.0.11/download"],
+        strip_prefix = "pin-project-1.0.11",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.pin-project-1.0.11.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__pin-project-internal-1.0.10",
-        sha256 = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb",
+        name = "crates_vendor_pkgs__pin-project-internal-1.0.11",
+        sha256 = "710faf75e1b33345361201d36d04e98ac1ed8909151a017ed384700836104c74",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/pin-project-internal/1.0.10/download"],
-        strip_prefix = "pin-project-internal-1.0.10",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.pin-project-internal-1.0.10.bazel"),
+        urls = ["https://crates.io/api/v1/crates/pin-project-internal/1.0.11/download"],
+        strip_prefix = "pin-project-internal-1.0.11",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.pin-project-internal-1.0.11.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__pin-project-lite-0.2.8",
-        sha256 = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c",
+        name = "crates_vendor_pkgs__pin-project-lite-0.2.9",
+        sha256 = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/pin-project-lite/0.2.8/download"],
-        strip_prefix = "pin-project-lite-0.2.8",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.pin-project-lite-0.2.8.bazel"),
+        urls = ["https://crates.io/api/v1/crates/pin-project-lite/0.2.9/download"],
+        strip_prefix = "pin-project-lite-0.2.9",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.pin-project-lite-0.2.9.bazel"),
     )
 
     maybe(
@@ -845,42 +849,42 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__proc-macro2-1.0.36",
-        sha256 = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029",
+        name = "crates_vendor_pkgs__proc-macro2-1.0.40",
+        sha256 = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/proc-macro2/1.0.36/download"],
-        strip_prefix = "proc-macro2-1.0.36",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.proc-macro2-1.0.36.bazel"),
+        urls = ["https://crates.io/api/v1/crates/proc-macro2/1.0.40/download"],
+        strip_prefix = "proc-macro2-1.0.40",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.proc-macro2-1.0.40.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__quote-1.0.15",
-        sha256 = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145",
+        name = "crates_vendor_pkgs__quote-1.0.20",
+        sha256 = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/quote/1.0.15/download"],
-        strip_prefix = "quote-1.0.15",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.quote-1.0.15.bazel"),
+        urls = ["https://crates.io/api/v1/crates/quote/1.0.20/download"],
+        strip_prefix = "quote-1.0.20",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.quote-1.0.20.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__redox_syscall-0.2.11",
-        sha256 = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c",
+        name = "crates_vendor_pkgs__redox_syscall-0.2.13",
+        sha256 = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/redox_syscall/0.2.11/download"],
-        strip_prefix = "redox_syscall-0.2.11",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.redox_syscall-0.2.11.bazel"),
+        urls = ["https://crates.io/api/v1/crates/redox_syscall/0.2.13/download"],
+        strip_prefix = "redox_syscall-0.2.13",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.redox_syscall-0.2.13.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__ryu-1.0.9",
-        sha256 = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f",
+        name = "crates_vendor_pkgs__ryu-1.0.10",
+        sha256 = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/ryu/1.0.9/download"],
-        strip_prefix = "ryu-1.0.9",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.ryu-1.0.9.bazel"),
+        urls = ["https://crates.io/api/v1/crates/ryu/1.0.10/download"],
+        strip_prefix = "ryu-1.0.10",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.ryu-1.0.10.bazel"),
     )
 
     maybe(
@@ -895,22 +899,22 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__serde-1.0.136",
-        sha256 = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789",
+        name = "crates_vendor_pkgs__serde-1.0.140",
+        sha256 = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/serde/1.0.136/download"],
-        strip_prefix = "serde-1.0.136",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.serde-1.0.136.bazel"),
+        urls = ["https://crates.io/api/v1/crates/serde/1.0.140/download"],
+        strip_prefix = "serde-1.0.140",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.serde-1.0.140.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__serde_json-1.0.79",
-        sha256 = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95",
+        name = "crates_vendor_pkgs__serde_json-1.0.82",
+        sha256 = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/serde_json/1.0.79/download"],
-        strip_prefix = "serde_json-1.0.79",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.serde_json-1.0.79.bazel"),
+        urls = ["https://crates.io/api/v1/crates/serde_json/1.0.82/download"],
+        strip_prefix = "serde_json-1.0.82",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.serde_json-1.0.82.bazel"),
     )
 
     maybe(
@@ -945,22 +949,22 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__slab-0.4.5",
-        sha256 = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5",
+        name = "crates_vendor_pkgs__slab-0.4.7",
+        sha256 = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/slab/0.4.5/download"],
-        strip_prefix = "slab-0.4.5",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.slab-0.4.5.bazel"),
+        urls = ["https://crates.io/api/v1/crates/slab/0.4.7/download"],
+        strip_prefix = "slab-0.4.7",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.slab-0.4.7.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__smallvec-1.8.0",
-        sha256 = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83",
+        name = "crates_vendor_pkgs__smallvec-1.9.0",
+        sha256 = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/smallvec/1.8.0/download"],
-        strip_prefix = "smallvec-1.8.0",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.smallvec-1.8.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/smallvec/1.9.0/download"],
+        strip_prefix = "smallvec-1.9.0",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.smallvec-1.9.0.bazel"),
     )
 
     maybe(
@@ -975,12 +979,12 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__syn-1.0.86",
-        sha256 = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b",
+        name = "crates_vendor_pkgs__syn-1.0.98",
+        sha256 = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/syn/1.0.86/download"],
-        strip_prefix = "syn-1.0.86",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.syn-1.0.86.bazel"),
+        urls = ["https://crates.io/api/v1/crates/syn/1.0.98/download"],
+        strip_prefix = "syn-1.0.98",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.syn-1.0.98.bazel"),
     )
 
     maybe(
@@ -1015,52 +1019,42 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__tokio-macros-1.7.0",
-        sha256 = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7",
+        name = "crates_vendor_pkgs__tokio-macros-1.8.0",
+        sha256 = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tokio-macros/1.7.0/download"],
-        strip_prefix = "tokio-macros-1.7.0",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tokio-macros-1.7.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tokio-macros/1.8.0/download"],
+        strip_prefix = "tokio-macros-1.8.0",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tokio-macros-1.8.0.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__tokio-util-0.6.9",
-        sha256 = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0",
+        name = "crates_vendor_pkgs__tokio-util-0.7.2",
+        sha256 = "f988a1a1adc2fb21f9c12aa96441da33a1728193ae0b95d2be22dbd17fcb4e5c",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tokio-util/0.6.9/download"],
-        strip_prefix = "tokio-util-0.6.9",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tokio-util-0.6.9.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tokio-util/0.7.2/download"],
+        strip_prefix = "tokio-util-0.7.2",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tokio-util-0.7.2.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__tokio-util-0.7.0",
-        sha256 = "64910e1b9c1901aaf5375561e35b9c057d95ff41a44ede043a03e09279eabaf1",
+        name = "crates_vendor_pkgs__tower-0.4.13",
+        sha256 = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tokio-util/0.7.0/download"],
-        strip_prefix = "tokio-util-0.7.0",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tokio-util-0.7.0.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tower/0.4.13/download"],
+        strip_prefix = "tower-0.4.13",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tower-0.4.13.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__tower-0.4.12",
-        sha256 = "9a89fd63ad6adf737582df5db40d286574513c69a11dac5214dc3b5603d6713e",
+        name = "crates_vendor_pkgs__tower-http-0.2.5",
+        sha256 = "aba3f3efabf7fb41fae8534fc20a817013dd1c12cb45441efb6c82e6556b4cd8",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tower/0.4.12/download"],
-        strip_prefix = "tower-0.4.12",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tower-0.4.12.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "crates_vendor_pkgs__tower-http-0.2.3",
-        sha256 = "2bb284cac1883d54083a0edbdc9cabf931dfed87455f8c7266c01ece6394a43a",
-        type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tower-http/0.2.3/download"],
-        strip_prefix = "tower-http-0.2.3",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tower-http-0.2.3.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tower-http/0.2.5/download"],
+        strip_prefix = "tower-http-0.2.5",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tower-http-0.2.5.bazel"),
     )
 
     maybe(
@@ -1075,62 +1069,62 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__tower-service-0.3.1",
-        sha256 = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6",
+        name = "crates_vendor_pkgs__tower-service-0.3.2",
+        sha256 = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tower-service/0.3.1/download"],
-        strip_prefix = "tower-service-0.3.1",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tower-service-0.3.1.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tower-service/0.3.2/download"],
+        strip_prefix = "tower-service-0.3.2",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tower-service-0.3.2.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__tracing-0.1.31",
-        sha256 = "f6c650a8ef0cd2dd93736f033d21cbd1224c5a967aa0c258d00fcf7dafef9b9f",
+        name = "crates_vendor_pkgs__tracing-0.1.35",
+        sha256 = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tracing/0.1.31/download"],
-        strip_prefix = "tracing-0.1.31",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tracing-0.1.31.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tracing/0.1.35/download"],
+        strip_prefix = "tracing-0.1.35",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tracing-0.1.35.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__tracing-attributes-0.1.19",
-        sha256 = "8276d9a4a3a558d7b7ad5303ad50b53d58264641b82914b7ada36bd762e7a716",
+        name = "crates_vendor_pkgs__tracing-attributes-0.1.22",
+        sha256 = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tracing-attributes/0.1.19/download"],
-        strip_prefix = "tracing-attributes-0.1.19",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tracing-attributes-0.1.19.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tracing-attributes/0.1.22/download"],
+        strip_prefix = "tracing-attributes-0.1.22",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tracing-attributes-0.1.22.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__tracing-core-0.1.22",
-        sha256 = "03cfcb51380632a72d3111cb8d3447a8d908e577d31beeac006f836383d29a23",
+        name = "crates_vendor_pkgs__tracing-core-0.1.28",
+        sha256 = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tracing-core/0.1.22/download"],
-        strip_prefix = "tracing-core-0.1.22",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tracing-core-0.1.22.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tracing-core/0.1.28/download"],
+        strip_prefix = "tracing-core-0.1.28",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tracing-core-0.1.28.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__tracing-log-0.1.2",
-        sha256 = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3",
+        name = "crates_vendor_pkgs__tracing-log-0.1.3",
+        sha256 = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tracing-log/0.1.2/download"],
-        strip_prefix = "tracing-log-0.1.2",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tracing-log-0.1.2.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tracing-log/0.1.3/download"],
+        strip_prefix = "tracing-log-0.1.3",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tracing-log-0.1.3.bazel"),
     )
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__tracing-subscriber-0.3.9",
-        sha256 = "9e0ab7bdc962035a87fba73f3acca9b8a8d0034c2e6f60b84aeaaddddc155dce",
+        name = "crates_vendor_pkgs__tracing-subscriber-0.3.15",
+        sha256 = "60db860322da191b40952ad9affe65ea23e7dd6a5c442c2c42865810c6ab8e6b",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/tracing-subscriber/0.3.9/download"],
-        strip_prefix = "tracing-subscriber-0.3.9",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tracing-subscriber-0.3.9.bazel"),
+        urls = ["https://crates.io/api/v1/crates/tracing-subscriber/0.3.15/download"],
+        strip_prefix = "tracing-subscriber-0.3.15",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.tracing-subscriber-0.3.15.bazel"),
     )
 
     maybe(
@@ -1145,12 +1139,12 @@
 
     maybe(
         http_archive,
-        name = "crates_vendor_pkgs__unicode-xid-0.2.2",
-        sha256 = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3",
+        name = "crates_vendor_pkgs__unicode-ident-1.0.2",
+        sha256 = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7",
         type = "tar.gz",
-        urls = ["https://crates.io/api/v1/crates/unicode-xid/0.2.2/download"],
-        strip_prefix = "unicode-xid-0.2.2",
-        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.unicode-xid-0.2.2.bazel"),
+        urls = ["https://crates.io/api/v1/crates/unicode-ident/1.0.2/download"],
+        strip_prefix = "unicode-ident-1.0.2",
+        build_file = Label("@examples//vendor_remote_pkgs/crates:BUILD.unicode-ident-1.0.2.bazel"),
     )
 
     maybe(
diff --git a/third_party/rules_rust/examples/ffi/rust_calling_c/c/matrix.h b/third_party/rules_rust/examples/ffi/rust_calling_c/c/matrix.h
index 40797a2..cfe917b 100644
--- a/third_party/rules_rust/examples/ffi/rust_calling_c/c/matrix.h
+++ b/third_party/rules_rust/examples/ffi/rust_calling_c/c/matrix.h
@@ -45,4 +45,4 @@
 // Frees the matrix.
 void matrix_free(Matrix* matrix);
 
-#endif // MATRIX_SRC_MATRIX_H_
+#endif  // MATRIX_SRC_MATRIX_H_
diff --git a/third_party/rules_rust/examples/ffi/rust_calling_c/c/matrix_test.c b/third_party/rules_rust/examples/ffi/rust_calling_c/c/matrix_test.c
index d7bb76b..ab81269 100644
--- a/third_party/rules_rust/examples/ffi/rust_calling_c/c/matrix_test.c
+++ b/third_party/rules_rust/examples/ffi/rust_calling_c/c/matrix_test.c
@@ -25,7 +25,7 @@
     for (size_t j = 0; j < m->cols; ++j) {
       uint64_t val = 0;
       matrix_at(m, i, j, &val);
-      printf("%"PRIu64" ", val);
+      printf("%" PRIu64 " ", val);
     }
     printf("\n");
   }
@@ -44,30 +44,38 @@
 }
 
 void test_equal() {
+  // clang-format off
   static uint64_t a_data[] = {11, 12, 13, 14,
                               21, 22, 23, 24};
+  // clang-format on
   Matrix* a = matrix_new(2, 4, a_data);
   assert(a != NULL);
   assert(check_equal(a, a));
 
+  // clang-format off
   static uint64_t b_data[] = {13, 14, 15, 16,
                               22, 23, 24, 25};
+  // clang-format on
   Matrix* b = matrix_new(2, 4, b_data);
   assert(b != NULL);
   assert(!matrix_equal(a, b));
 }
 
 void test_transpose() {
+  // clang-format off
   static uint64_t matrix_data[] = {11, 12, 13, 14,
                                    21, 22, 23, 24};
+  // clang-format on
   Matrix* matrix = matrix_new(2, 4, matrix_data);
   assert(matrix != NULL);
   matrix_transpose(matrix);
 
+  // clang-format off
   static uint64_t expected_transpose_data[] = {11, 21,
                                                12, 22,
                                                13, 23,
                                                14, 24};
+  // clang-format off
   Matrix* expected_transpose = matrix_new(4, 2, expected_transpose_data);
 
   assert(check_equal(expected_transpose, matrix));
diff --git a/third_party/rules_rust/examples/hello_lib/BUILD.bazel b/third_party/rules_rust/examples/hello_lib/BUILD.bazel
index e8fb6f6..1e1f830 100644
--- a/third_party/rules_rust/examples/hello_lib/BUILD.bazel
+++ b/third_party/rules_rust/examples/hello_lib/BUILD.bazel
@@ -1,4 +1,12 @@
-load("@rules_rust//rust:defs.bzl", "rust_analyzer", "rust_doc", "rust_doc_test", "rust_library", "rust_shared_library", "rust_static_library", "rust_test")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_doc",
+    "rust_doc_test",
+    "rust_library",
+    "rust_shared_library",
+    "rust_static_library",
+    "rust_test",
+)
 
 package(default_visibility = ["//visibility:public"])
 
@@ -66,8 +74,3 @@
     name = "hello_lib_doc_test",
     crate = ":hello_lib",
 )
-
-rust_analyzer(
-    name = "hello_rust_analyzer",
-    targets = [":hello_lib"],
-)
diff --git a/third_party/rules_rust/examples/shared_libs/BUILD.bazel b/third_party/rules_rust/examples/shared_libs/BUILD.bazel
new file mode 100644
index 0000000..c90f65d
--- /dev/null
+++ b/third_party/rules_rust/examples/shared_libs/BUILD.bazel
@@ -0,0 +1,29 @@
+load("@rules_cc//cc:defs.bzl", "cc_import", "cc_library")
+load("@rules_rust//rust:defs.bzl", "rust_shared_library")
+
+# A rust_shared_library (forcing the use of pic) that depends on a native
+# linker library with only a static_library member.
+rust_shared_library(
+    name = "rust_shared_lib_with_static_dep",
+    srcs = ["rust_shared_lib_with_static_dep.rs"],
+    deps = [":static_cclib"],
+)
+
+cc_library(
+    name = "nonstandard_name_cc_lib",
+    srcs = ["cc_library_with_func.cc"],
+)
+
+genrule(
+    name = "nonstandard_name_gen",
+    srcs = [":nonstandard_name_cc_lib"],
+    outs = ["nonstandard_name_gen.a"],
+    # Copy the first member (libnonstandard_name_cc_lib.a) from the srcs to the
+    # output nonstandard_name_gen.a.
+    cmd = "cp $$(awk '{print $$1}' <<< '$(SRCS)') $@",
+)
+
+cc_import(
+    name = "static_cclib",
+    static_library = "nonstandard_name_gen.a",
+)
diff --git a/third_party/rules_rust/examples/shared_libs/cc_library_with_func.cc b/third_party/rules_rust/examples/shared_libs/cc_library_with_func.cc
new file mode 100644
index 0000000..1f12151
--- /dev/null
+++ b/third_party/rules_rust/examples/shared_libs/cc_library_with_func.cc
@@ -0,0 +1 @@
+extern "C" int func() { return 123; }
diff --git a/third_party/rules_rust/examples/shared_libs/rust_shared_lib_with_static_dep.rs b/third_party/rules_rust/examples/shared_libs/rust_shared_lib_with_static_dep.rs
new file mode 100644
index 0000000..bbeb52c
--- /dev/null
+++ b/third_party/rules_rust/examples/shared_libs/rust_shared_lib_with_static_dep.rs
@@ -0,0 +1,9 @@
+use std::os::raw::c_int;
+
+extern "C" {
+    pub fn func() -> c_int;
+}
+
+pub fn f() {
+    println!("hi {}", unsafe { func() });
+}
diff --git a/third_party/rules_rust/examples/sys/basic/3rdparty/BUILD.bazel b/third_party/rules_rust/examples/sys/basic/3rdparty/BUILD.bazel
new file mode 100644
index 0000000..8516755
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/basic/3rdparty/BUILD.bazel
@@ -0,0 +1,20 @@
+load("@rules_rust//crate_universe:defs.bzl", "crate", "crates_vendor")
+
+crates_vendor(
+    name = "crates_vendor",
+    annotations = {
+        "bzip2-sys": [crate.annotation(
+            gen_build_script = True,
+        )],
+    },
+    cargo_lockfile = "Cargo.Bazel.lock",
+    generate_build_scripts = False,
+    mode = "remote",
+    packages = {
+        "bzip2": crate.spec(
+            version = "=0.3.3",
+        ),
+    },
+    repository_name = "basic_sys",
+    tags = ["manual"],
+)
diff --git a/third_party/rules_rust/examples/sys/basic/3rdparty/Cargo.Bazel.lock b/third_party/rules_rust/examples/sys/basic/3rdparty/Cargo.Bazel.lock
new file mode 100644
index 0000000..39f301a
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/basic/3rdparty/Cargo.Bazel.lock
@@ -0,0 +1,49 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "bzip2"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+
+[[package]]
+name = "direct-cargo-bazel-deps"
+version = "0.0.1"
+dependencies = [
+ "bzip2",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
diff --git a/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.bazel b/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.bazel
new file mode 100644
index 0000000..f78524b
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.bazel
@@ -0,0 +1,41 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/basic/3rdparty:crates_vendor
+###############################################################################
+
+package(default_visibility = ["//visibility:public"])
+
+exports_files(
+    [
+        "cargo-bazel.json",
+        "defs.bzl",
+        "crates.bzl",
+    ] + glob([
+        "*.bazel",
+    ]),
+)
+
+filegroup(
+    name = "srcs",
+    srcs = glob([
+        "*.bazel",
+        "*.bzl",
+    ]),
+)
+
+# Workspace Member Dependencies
+alias(
+    name = "bzip2",
+    actual = "@basic_sys__bzip2-0.3.3//:bzip2",
+    tags = ["manual"],
+)
+
+# Binaries
+alias(
+    name = "cc__gcc-shim",
+    actual = "@basic_sys__cc-1.0.73//:gcc-shim__bin",
+    tags = ["manual"],
+)
diff --git a/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.bzip2-0.3.3.bazel b/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.bzip2-0.3.3.bazel
new file mode 100644
index 0000000..e790651
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.bzip2-0.3.3.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/basic/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "bzip2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@basic_sys__bzip2-sys-0.1.11-1.0.8//:bzip2_sys",
+            "@basic_sys__libc-0.2.126//:libc",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.bzip2-sys-0.1.11+1.0.8.bazel b/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.bzip2-sys-0.1.11+1.0.8.bazel
new file mode 100644
index 0000000..34b0c06
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.bzip2-sys-0.1.11+1.0.8.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/basic/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "bzip2_sys",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.11+1.0.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@basic_sys__bzip2-sys-0.1.11-1.0.8//:build_script_build",
+            "@basic_sys__libc-0.2.126//:libc",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "bzip2-sys_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    links = "bzip2",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.1.11+1.0.8",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@basic_sys__cc-1.0.73//:cc",
+            "@basic_sys__pkg-config-0.3.25//:pkg_config",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "bzip2-sys_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.cc-1.0.73.bazel b/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.cc-1.0.73.bazel
new file mode 100644
index 0000000..94dad1f
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.cc-1.0.73.bazel
@@ -0,0 +1,157 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/basic/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "cc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.73",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+rust_binary(
+    name = "gcc-shim__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/bin/gcc-shim.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.73",
+    deps = [
+        ":cc",
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.libc-0.2.126.bazel b/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.libc-0.2.126.bazel
new file mode 100644
index 0000000..84344d1
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.libc-0.2.126.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/basic/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.126",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.pkg-config-0.3.25.bazel b/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.pkg-config-0.3.25.bazel
new file mode 100644
index 0000000..cb28873
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/basic/3rdparty/crates/BUILD.pkg-config-0.3.25.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/basic/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "pkg_config",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.25",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/basic/3rdparty/crates/crates.bzl b/third_party/rules_rust/examples/sys/basic/3rdparty/crates/crates.bzl
new file mode 100644
index 0000000..ba569c7
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/basic/3rdparty/crates/crates.bzl
@@ -0,0 +1,25 @@
+###############################################################################
+# @generated
+# This file is auto-generated by the cargo-bazel tool.
+#
+# DO NOT MODIFY: Local changes may be replaced in future executions.
+###############################################################################
+"""Rules for defining repositories for remote `crates_vendor` repositories"""
+
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+# buildifier: disable=bzl-visibility
+load("@examples//sys/basic/3rdparty/crates:defs.bzl", _crate_repositories = "crate_repositories")
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:crates_vendor.bzl", "crates_vendor_remote_repository")
+
+def crate_repositories():
+    maybe(
+        crates_vendor_remote_repository,
+        name = "basic_sys",
+        build_file = Label("@examples//sys/basic/3rdparty/crates:BUILD.bazel"),
+        defs_module = Label("@examples//sys/basic/3rdparty/crates:defs.bzl"),
+    )
+
+    _crate_repositories()
diff --git a/third_party/rules_rust/examples/sys/basic/3rdparty/crates/defs.bzl b/third_party/rules_rust/examples/sys/basic/3rdparty/crates/defs.bzl
new file mode 100644
index 0000000..3f110a1
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/basic/3rdparty/crates/defs.bzl
@@ -0,0 +1,411 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/basic/3rdparty:crates_vendor
+###############################################################################
+"""
+# `crates_repository` API
+
+- [aliases](#aliases)
+- [crate_deps](#crate_deps)
+- [all_crate_deps](#all_crate_deps)
+- [crate_repositories](#crate_repositories)
+
+"""
+
+load("@bazel_skylib//lib:selects.bzl", "selects")
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+###############################################################################
+# MACROS API
+###############################################################################
+
+# An identifier that represent common dependencies (unconditional).
+_COMMON_CONDITION = ""
+
+def _flatten_dependency_maps(all_dependency_maps):
+    """Flatten a list of dependency maps into one dictionary.
+
+    Dependency maps have the following structure:
+
+    ```python
+    DEPENDENCIES_MAP = {
+        # The first key in the map is a Bazel package
+        # name of the workspace this file is defined in.
+        "workspace_member_package": {
+
+            # Not all dependnecies are supported for all platforms.
+            # the condition key is the condition required to be true
+            # on the host platform.
+            "condition": {
+
+                # An alias to a crate target.     # The label of the crate target the
+                # Aliases are only crate names.   # package name refers to.
+                "package_name":                   "@full//:label",
+            }
+        }
+    }
+    ```
+
+    Args:
+        all_dependency_maps (list): A list of dicts as described above
+
+    Returns:
+        dict: A dictionary as described above
+    """
+    dependencies = {}
+
+    for workspace_deps_map in all_dependency_maps:
+        for pkg_name, conditional_deps_map in workspace_deps_map.items():
+            if pkg_name not in dependencies:
+                non_frozen_map = dict()
+                for key, values in conditional_deps_map.items():
+                    non_frozen_map.update({key: dict(values.items())})
+                dependencies.setdefault(pkg_name, non_frozen_map)
+                continue
+
+            for condition, deps_map in conditional_deps_map.items():
+                # If the condition has not been recorded, do so and continue
+                if condition not in dependencies[pkg_name]:
+                    dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))
+                    continue
+
+                # Alert on any miss-matched dependencies
+                inconsistent_entries = []
+                for crate_name, crate_label in deps_map.items():
+                    existing = dependencies[pkg_name][condition].get(crate_name)
+                    if existing and existing != crate_label:
+                        inconsistent_entries.append((crate_name, existing, crate_label))
+                    dependencies[pkg_name][condition].update({crate_name: crate_label})
+
+    return dependencies
+
+def crate_deps(deps, package_name = None):
+    """Finds the fully qualified label of the requested crates for the package where this macro is called.
+
+    Args:
+        deps (list): The desired list of crate targets.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()`.
+
+    Returns:
+        list: A list of labels to generated rust targets (str)
+    """
+
+    if not deps:
+        return []
+
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Join both sets of dependencies
+    dependencies = _flatten_dependency_maps([
+        _NORMAL_DEPENDENCIES,
+        _NORMAL_DEV_DEPENDENCIES,
+        _PROC_MACRO_DEPENDENCIES,
+        _PROC_MACRO_DEV_DEPENDENCIES,
+        _BUILD_DEPENDENCIES,
+        _BUILD_PROC_MACRO_DEPENDENCIES,
+    ]).pop(package_name, {})
+
+    # Combine all conditional packages so we can easily index over a flat list
+    # TODO: Perhaps this should actually return select statements and maintain
+    # the conditionals of the dependencies
+    flat_deps = {}
+    for deps_set in dependencies.values():
+        for crate_name, crate_label in deps_set.items():
+            flat_deps.update({crate_name: crate_label})
+
+    missing_crates = []
+    crate_targets = []
+    for crate_target in deps:
+        if crate_target not in flat_deps:
+            missing_crates.append(crate_target)
+        else:
+            crate_targets.append(flat_deps[crate_target])
+
+    if missing_crates:
+        fail("Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`".format(
+            missing_crates,
+            package_name,
+            dependencies,
+        ))
+
+    return crate_targets
+
+def all_crate_deps(
+        normal = False,
+        normal_dev = False,
+        proc_macro = False,
+        proc_macro_dev = False,
+        build = False,
+        build_proc_macro = False,
+        package_name = None):
+    """Finds the fully qualified label of all requested direct crate dependencies \
+    for the package where this macro is called.
+
+    If no parameters are set, all normal dependencies are returned. Setting any one flag will
+    otherwise impact the contents of the returned list.
+
+    Args:
+        normal (bool, optional): If True, normal dependencies are included in the
+            output list.
+        normal_dev (bool, optional): If True, normla dev dependencies will be
+            included in the output list..
+        proc_macro (bool, optional): If True, proc_macro dependencies are included
+            in the output list.
+        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
+            included in the output list.
+        build (bool, optional): If True, build dependencies are included
+            in the output list.
+        build_proc_macro (bool, optional): If True, build proc_macro dependencies are
+            included in the output list.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()` when unset.
+
+    Returns:
+        list: A list of labels to generated rust targets (str)
+    """
+
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Determine the relevant maps to use
+    all_dependency_maps = []
+    if normal:
+        all_dependency_maps.append(_NORMAL_DEPENDENCIES)
+    if normal_dev:
+        all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)
+    if proc_macro:
+        all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)
+    if proc_macro_dev:
+        all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)
+    if build:
+        all_dependency_maps.append(_BUILD_DEPENDENCIES)
+    if build_proc_macro:
+        all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)
+
+    # Default to always using normal dependencies
+    if not all_dependency_maps:
+        all_dependency_maps.append(_NORMAL_DEPENDENCIES)
+
+    dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
+
+    if not dependencies:
+        if dependencies == None:
+            fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
+        else:
+            return []
+
+    crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
+    for condition, deps in dependencies.items():
+        crate_deps += selects.with_or({_CONDITIONS[condition]: deps.values()})
+
+    return crate_deps
+
+def aliases(
+        normal = False,
+        normal_dev = False,
+        proc_macro = False,
+        proc_macro_dev = False,
+        build = False,
+        build_proc_macro = False,
+        package_name = None):
+    """Produces a map of Crate alias names to their original label
+
+    If no dependency kinds are specified, `normal` and `proc_macro` are used by default.
+    Setting any one flag will otherwise determine the contents of the returned dict.
+
+    Args:
+        normal (bool, optional): If True, normal dependencies are included in the
+            output list.
+        normal_dev (bool, optional): If True, normla dev dependencies will be
+            included in the output list..
+        proc_macro (bool, optional): If True, proc_macro dependencies are included
+            in the output list.
+        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
+            included in the output list.
+        build (bool, optional): If True, build dependencies are included
+            in the output list.
+        build_proc_macro (bool, optional): If True, build proc_macro dependencies are
+            included in the output list.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()` when unset.
+
+    Returns:
+        dict: The aliases of all associated packages
+    """
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Determine the relevant maps to use
+    all_aliases_maps = []
+    if normal:
+        all_aliases_maps.append(_NORMAL_ALIASES)
+    if normal_dev:
+        all_aliases_maps.append(_NORMAL_DEV_ALIASES)
+    if proc_macro:
+        all_aliases_maps.append(_PROC_MACRO_ALIASES)
+    if proc_macro_dev:
+        all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)
+    if build:
+        all_aliases_maps.append(_BUILD_ALIASES)
+    if build_proc_macro:
+        all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)
+
+    # Default to always using normal aliases
+    if not all_aliases_maps:
+        all_aliases_maps.append(_NORMAL_ALIASES)
+        all_aliases_maps.append(_PROC_MACRO_ALIASES)
+
+    aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)
+
+    if not aliases:
+        return dict()
+
+    common_items = aliases.pop(_COMMON_CONDITION, {}).items()
+
+    # If there are only common items in the dictionary, immediately return them
+    if not len(aliases.keys()) == 1:
+        return dict(common_items)
+
+    # Build a single select statement where each conditional has accounted for the
+    # common set of aliases.
+    crate_aliases = {"//conditions:default": common_items}
+    for condition, deps in aliases.items():
+        condition_triples = _CONDITIONS[condition]
+        if condition_triples in crate_aliases:
+            crate_aliases[condition_triples].update(deps)
+        else:
+            crate_aliases.update({_CONDITIONS[condition]: dict(deps.items() + common_items)})
+
+    return selects.with_or(crate_aliases)
+
+###############################################################################
+# WORKSPACE MEMBER DEPS AND ALIASES
+###############################################################################
+
+_NORMAL_DEPENDENCIES = {
+    "": {
+        _COMMON_CONDITION: {
+            "bzip2": "@basic_sys__bzip2-0.3.3//:bzip2",
+        },
+    },
+}
+
+_NORMAL_ALIASES = {
+    "": {
+        _COMMON_CONDITION: {
+        },
+    },
+}
+
+_NORMAL_DEV_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_NORMAL_DEV_ALIASES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_ALIASES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEV_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEV_ALIASES = {
+    "": {
+    },
+}
+
+_BUILD_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_BUILD_ALIASES = {
+    "": {
+    },
+}
+
+_BUILD_PROC_MACRO_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_BUILD_PROC_MACRO_ALIASES = {
+    "": {
+    },
+}
+
+_CONDITIONS = {
+}
+
+###############################################################################
+
+def crate_repositories():
+    """A macro for defining repositories for all generated crates"""
+    maybe(
+        http_archive,
+        name = "basic_sys__bzip2-0.3.3",
+        sha256 = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/bzip2/0.3.3/download"],
+        strip_prefix = "bzip2-0.3.3",
+        build_file = Label("@examples//sys/basic/3rdparty/crates:BUILD.bzip2-0.3.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "basic_sys__bzip2-sys-0.1.11-1.0.8",
+        sha256 = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/bzip2-sys/0.1.11+1.0.8/download"],
+        strip_prefix = "bzip2-sys-0.1.11+1.0.8",
+        build_file = Label("@examples//sys/basic/3rdparty/crates:BUILD.bzip2-sys-0.1.11+1.0.8.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "basic_sys__cc-1.0.73",
+        sha256 = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/cc/1.0.73/download"],
+        strip_prefix = "cc-1.0.73",
+        build_file = Label("@examples//sys/basic/3rdparty/crates:BUILD.cc-1.0.73.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "basic_sys__libc-0.2.126",
+        sha256 = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/libc/0.2.126/download"],
+        strip_prefix = "libc-0.2.126",
+        build_file = Label("@examples//sys/basic/3rdparty/crates:BUILD.libc-0.2.126.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "basic_sys__pkg-config-0.3.25",
+        sha256 = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/pkg-config/0.3.25/download"],
+        strip_prefix = "pkg-config-0.3.25",
+        build_file = Label("@examples//sys/basic/3rdparty/crates:BUILD.pkg-config-0.3.25.bazel"),
+    )
diff --git a/third_party/rules_rust/examples/sys/basic/BUILD.bazel b/third_party/rules_rust/examples/sys/basic/BUILD.bazel
index 142aa89..8971c66 100644
--- a/third_party/rules_rust/examples/sys/basic/BUILD.bazel
+++ b/third_party/rules_rust/examples/sys/basic/BUILD.bazel
@@ -22,7 +22,7 @@
     edition = "2018",
     # Note the `cargo-raze` dependencies here need to have been loaded
     # in the WORKSPACE file. See `//sys:sys_deps.bzl` for rmore details.
-    deps = ["//sys/basic/raze:bzip2"],
+    deps = ["//sys/basic/3rdparty/crates:bzip2"],
 )
 
 sh_test(
diff --git a/third_party/rules_rust/examples/sys/basic/Cargo.lock b/third_party/rules_rust/examples/sys/basic/Cargo.lock
deleted file mode 100644
index 7a14e37..0000000
--- a/third_party/rules_rust/examples/sys/basic/Cargo.lock
+++ /dev/null
@@ -1,47 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-[[package]]
-name = "bzip2"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b"
-dependencies = [
- "bzip2-sys",
- "libc",
-]
-
-[[package]]
-name = "bzip2-sys"
-version = "0.1.9+1.0.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad3b39a260062fca31f7b0b12f207e8f2590a67d32ec7d59c20484b07ea7285e"
-dependencies = [
- "cc",
- "libc",
- "pkg-config",
-]
-
-[[package]]
-name = "cc"
-version = "1.0.60"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef611cc68ff783f18535d77ddd080185275713d852c4f5cbb6122c462a7a825c"
-
-[[package]]
-name = "libc"
-version = "0.2.77"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2f96b10ec2560088a8e76961b00d47107b3a625fecb76dedb29ee7ccbf98235"
-
-[[package]]
-name = "pkg-config"
-version = "0.3.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33"
-
-[[package]]
-name = "rules_rust_examples_basic_sys"
-version = "0.0.1"
-dependencies = [
- "bzip2",
-]
diff --git a/third_party/rules_rust/examples/sys/basic/Cargo.toml b/third_party/rules_rust/examples/sys/basic/Cargo.toml
deleted file mode 100644
index 61b97fc..0000000
--- a/third_party/rules_rust/examples/sys/basic/Cargo.toml
+++ /dev/null
@@ -1,21 +0,0 @@
-[package]
-name = "rules_rust_examples_basic_sys"
-version = "0.0.1"
-
-[[bin]]
-name = "rules_rust_examples_basic_sys"
-path = "src/main.rs"
-
-[dependencies]
-bzip2 = "=0.3.3"
-
-[package.metadata.raze]
-workspace_path = "//sys/basic/raze"
-genmode = "Remote"
-gen_workspace_prefix = "basic_sys"
-rust_rules_workspace_name = "rules_rust"
-package_aliases_dir = "raze"
-default_gen_buildrs = false
-
-[package.metadata.raze.crates.bzip2-sys.'0.1.9+1.0.8']
-gen_buildrs = true
diff --git a/third_party/rules_rust/examples/sys/basic/raze/BUILD.bazel b/third_party/rules_rust/examples/sys/basic/raze/BUILD.bazel
deleted file mode 100644
index ade3349..0000000
--- a/third_party/rules_rust/examples/sys/basic/raze/BUILD.bazel
+++ /dev/null
@@ -1,30 +0,0 @@
-"""
-@generated
-cargo-raze generated Bazel file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-package(default_visibility = ["//visibility:public"])
-
-licenses([
-    "notice",  # See individual crates for specific licenses
-])
-
-# Aliased targets
-alias(
-    name = "bzip2",
-    actual = "@basic_sys__bzip2__0_3_3//:bzip2",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-# Export file for Stardoc support
-exports_files(
-    [
-        "crates.bzl",
-    ],
-    visibility = ["//visibility:public"],
-)
diff --git a/third_party/rules_rust/examples/sys/basic/raze/crates.bzl b/third_party/rules_rust/examples/sys/basic/raze/crates.bzl
deleted file mode 100644
index beacc3e..0000000
--- a/third_party/rules_rust/examples/sys/basic/raze/crates.bzl
+++ /dev/null
@@ -1,62 +0,0 @@
-"""
-@generated
-cargo-raze generated Bazel file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-load("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository")  # buildifier: disable=load
-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")  # buildifier: disable=load
-load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")  # buildifier: disable=load
-
-def basic_sys_fetch_remote_crates():
-    """This function defines a collection of repos and should be called in a WORKSPACE file"""
-    maybe(
-        http_archive,
-        name = "basic_sys__bzip2__0_3_3",
-        url = "https://crates.io/api/v1/crates/bzip2/0.3.3/download",
-        type = "tar.gz",
-        sha256 = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b",
-        strip_prefix = "bzip2-0.3.3",
-        build_file = Label("//sys/basic/raze/remote:BUILD.bzip2-0.3.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "basic_sys__bzip2_sys__0_1_9_1_0_8",
-        url = "https://crates.io/api/v1/crates/bzip2-sys/0.1.9+1.0.8/download",
-        type = "tar.gz",
-        sha256 = "ad3b39a260062fca31f7b0b12f207e8f2590a67d32ec7d59c20484b07ea7285e",
-        strip_prefix = "bzip2-sys-0.1.9+1.0.8",
-        build_file = Label("//sys/basic/raze/remote:BUILD.bzip2-sys-0.1.9+1.0.8.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "basic_sys__cc__1_0_60",
-        url = "https://crates.io/api/v1/crates/cc/1.0.60/download",
-        type = "tar.gz",
-        sha256 = "ef611cc68ff783f18535d77ddd080185275713d852c4f5cbb6122c462a7a825c",
-        strip_prefix = "cc-1.0.60",
-        build_file = Label("//sys/basic/raze/remote:BUILD.cc-1.0.60.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "basic_sys__libc__0_2_77",
-        url = "https://crates.io/api/v1/crates/libc/0.2.77/download",
-        type = "tar.gz",
-        sha256 = "f2f96b10ec2560088a8e76961b00d47107b3a625fecb76dedb29ee7ccbf98235",
-        strip_prefix = "libc-0.2.77",
-        build_file = Label("//sys/basic/raze/remote:BUILD.libc-0.2.77.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "basic_sys__pkg_config__0_3_18",
-        url = "https://crates.io/api/v1/crates/pkg-config/0.3.18/download",
-        type = "tar.gz",
-        sha256 = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33",
-        strip_prefix = "pkg-config-0.3.18",
-        build_file = Label("//sys/basic/raze/remote:BUILD.pkg-config-0.3.18.bazel"),
-    )
diff --git a/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.bazel b/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.bazel
deleted file mode 100644
index e69de29..0000000
--- a/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.bazel
+++ /dev/null
diff --git a/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.bzip2-0.3.3.bazel b/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.bzip2-0.3.3.bazel
deleted file mode 100644
index 403de65..0000000
--- a/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.bzip2-0.3.3.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/basic/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "bzip2",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.3",
-    # buildifier: leave-alone
-    deps = [
-        "@basic_sys__bzip2_sys__0_1_9_1_0_8//:bzip2_sys",
-        "@basic_sys__libc__0_2_77//:libc",
-    ],
-)
-
-# Unsupported target "tokio" with type "test" omitted
diff --git a/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.bzip2-sys-0.1.9+1.0.8.bazel b/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.bzip2-sys-0.1.9+1.0.8.bazel
deleted file mode 100644
index 2401d2c..0000000
--- a/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.bzip2-sys-0.1.9+1.0.8.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/basic/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "bzip2_sys_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    links = "bzip2",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.9+1.0.8",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@basic_sys__cc__1_0_60//:cc",
-        "@basic_sys__pkg_config__0_3_18//:pkg_config",
-    ],
-)
-
-rust_library(
-    name = "bzip2_sys",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.9+1.0.8",
-    # buildifier: leave-alone
-    deps = [
-        ":bzip2_sys_build_script",
-        "@basic_sys__libc__0_2_77//:libc",
-    ],
-)
diff --git a/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.cc-1.0.60.bazel b/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.cc-1.0.60.bazel
deleted file mode 100644
index ad826c1..0000000
--- a/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.cc-1.0.60.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/basic/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_gcc_shim",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/bin/gcc-shim.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.60",
-    # buildifier: leave-alone
-    deps = [
-        ":cc",
-    ],
-)
-
-rust_library(
-    name = "cc",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.60",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "cc_env" with type "test" omitted
-
-# Unsupported target "cflags" with type "test" omitted
-
-# Unsupported target "cxxflags" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.libc-0.2.77.bazel b/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.libc-0.2.77.bazel
deleted file mode 100644
index 4b8aed7..0000000
--- a/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.libc-0.2.77.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/basic/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "libc",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.77",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "const_fn" with type "test" omitted
diff --git a/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.pkg-config-0.3.18.bazel b/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.pkg-config-0.3.18.bazel
deleted file mode 100644
index 0121432..0000000
--- a/third_party/rules_rust/examples/sys/basic/raze/remote/BUILD.pkg-config-0.3.18.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/basic/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "pkg_config",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.18",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/BUILD.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/BUILD.bazel
new file mode 100644
index 0000000..9046d78
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/BUILD.bazel
@@ -0,0 +1,28 @@
+load("@rules_rust//crate_universe:defs.bzl", "crate", "crates_vendor")
+
+crates_vendor(
+    name = "crates_vendor",
+    annotations = {
+        "libgit2-sys": [crate.annotation(
+            gen_build_script = False,
+            # libgit2 comes from @rules_rust//crate_universe/3rdparty:third_party_deps.bzl
+            deps = ["@libgit2"],
+        )],
+        "libz-sys": [crate.annotation(
+            gen_build_script = False,
+            # zlib comes from @rules_rust//crate_universe/3rdparty:third_party_deps.bzl
+            deps = ["@zlib"],
+        )],
+    },
+    cargo_lockfile = "Cargo.Bazel.lock",
+    generate_build_scripts = True,
+    mode = "remote",
+    packages = {
+        "git2": crate.spec(
+            default_features = False,
+            version = "=0.14.4",
+        ),
+    },
+    repository_name = "complex_sys",
+    tags = ["manual"],
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/Cargo.Bazel.lock b/third_party/rules_rust/examples/sys/complex/3rdparty/Cargo.Bazel.lock
new file mode 100644
index 0000000..e8bdcd0
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/Cargo.Bazel.lock
@@ -0,0 +1,179 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "direct-cargo-bazel-deps"
+version = "0.0.1"
+dependencies = [
+ "git2",
+]
+
+[[package]]
+name = "form_urlencoded"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+dependencies = [
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "git2"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0155506aab710a86160ddb504a480d2964d7ab5b9e62419be69e0032bc5931c"
+dependencies = [
+ "bitflags",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "url",
+]
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "jobserver"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "libgit2-sys"
+version = "0.13.4+1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0fa6563431ede25f5cc7f6d803c6afbc1c5d3ad3d4925d12c882bf2b526f5d1"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "url"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.bazel
new file mode 100644
index 0000000..85dc3b7
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.bazel
@@ -0,0 +1,41 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+package(default_visibility = ["//visibility:public"])
+
+exports_files(
+    [
+        "cargo-bazel.json",
+        "defs.bzl",
+        "crates.bzl",
+    ] + glob([
+        "*.bazel",
+    ]),
+)
+
+filegroup(
+    name = "srcs",
+    srcs = glob([
+        "*.bazel",
+        "*.bzl",
+    ]),
+)
+
+# Workspace Member Dependencies
+alias(
+    name = "git2",
+    actual = "@complex_sys__git2-0.14.4//:git2",
+    tags = ["manual"],
+)
+
+# Binaries
+alias(
+    name = "cc__gcc-shim",
+    actual = "@complex_sys__cc-1.0.73//:gcc-shim__bin",
+    tags = ["manual"],
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.bitflags-1.3.2.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.bitflags-1.3.2.bazel
new file mode 100644
index 0000000..2315084
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.bitflags-1.3.2.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "bitflags",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.3.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.cc-1.0.73.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.cc-1.0.73.bazel
new file mode 100644
index 0000000..02c3dd8
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.cc-1.0.73.bazel
@@ -0,0 +1,163 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "cc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "jobserver",
+        "parallel",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.73",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@complex_sys__jobserver-0.1.24//:jobserver",
+        ],
+    }),
+)
+
+rust_binary(
+    name = "gcc-shim__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "jobserver",
+        "parallel",
+    ],
+    crate_root = "src/bin/gcc-shim.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.73",
+    deps = [
+        ":cc",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@complex_sys__jobserver-0.1.24//:jobserver",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
new file mode 100644
index 0000000..1c475ad
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "cfg_if",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.form_urlencoded-1.0.1.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.form_urlencoded-1.0.1.bazel
new file mode 100644
index 0000000..25bbf71
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.form_urlencoded-1.0.1.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "form_urlencoded",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@complex_sys__matches-0.1.9//:matches",
+            "@complex_sys__percent-encoding-2.1.0//:percent_encoding",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.git2-0.14.4.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.git2-0.14.4.bazel
new file mode 100644
index 0000000..8bddd3b
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.git2-0.14.4.bazel
@@ -0,0 +1,95 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "git2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.14.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@complex_sys__bitflags-1.3.2//:bitflags",
+            "@complex_sys__libc-0.2.126//:libc",
+            "@complex_sys__libgit2-sys-0.13.4-1.4.2//:libgit2_sys",
+            "@complex_sys__log-0.4.17//:log",
+            "@complex_sys__url-2.2.2//:url",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.idna-0.2.3.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.idna-0.2.3.bazel
new file mode 100644
index 0000000..b117628
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.idna-0.2.3.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "idna",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@complex_sys__matches-0.1.9//:matches",
+            "@complex_sys__unicode-bidi-0.3.8//:unicode_bidi",
+            "@complex_sys__unicode-normalization-0.1.21//:unicode_normalization",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.jobserver-0.1.24.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.jobserver-0.1.24.bazel
new file mode 100644
index 0000000..425194f
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.jobserver-0.1.24.bazel
@@ -0,0 +1,117 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "jobserver",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.24",
+    deps = [
+    ] + select_with_or({
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@complex_sys__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.libc-0.2.126.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.libc-0.2.126.bazel
new file mode 100644
index 0000000..8df7c2b
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.libc-0.2.126.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.126",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@complex_sys__libc-0.2.126//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "libc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.126",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "libc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.libgit2-sys-0.13.4+1.4.2.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.libgit2-sys-0.13.4+1.4.2.bazel
new file mode 100644
index 0000000..0cbe928
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.libgit2-sys-0.13.4+1.4.2.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libgit2_sys",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.13.4+1.4.2",
+    deps = [
+        "@libgit2",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@complex_sys__libc-0.2.126//:libc",
+            "@complex_sys__libz-sys-1.1.8//:libz_sys",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.libz-sys-1.1.8.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.libz-sys-1.1.8.bazel
new file mode 100644
index 0000000..0a01278
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.libz-sys-1.1.8.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libz_sys",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "libc",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.8",
+    deps = [
+        "@zlib",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@complex_sys__libc-0.2.126//:libc",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.log-0.4.17.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.log-0.4.17.bazel
new file mode 100644
index 0000000..2e38426
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.log-0.4.17.bazel
@@ -0,0 +1,175 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "log",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.17",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@complex_sys__cfg-if-1.0.0//:cfg_if",
+            "@complex_sys__log-0.4.17//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "log_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.17",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "log_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.matches-0.1.9.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.matches-0.1.9.bazel
new file mode 100644
index 0000000..9faefd4
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.matches-0.1.9.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "matches",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.9",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.percent-encoding-2.1.0.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.percent-encoding-2.1.0.bazel
new file mode 100644
index 0000000..d0e033c
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.percent-encoding-2.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "percent_encoding",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.pkg-config-0.3.25.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.pkg-config-0.3.25.bazel
new file mode 100644
index 0000000..e022ea7
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.pkg-config-0.3.25.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "pkg_config",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.25",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.tinyvec-1.6.0.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.tinyvec-1.6.0.bazel
new file mode 100644
index 0000000..3c99ffc
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.tinyvec-1.6.0.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Zlib OR Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "tinyvec",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "default",
+        "tinyvec_macros",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.6.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@complex_sys__tinyvec_macros-0.1.0//:tinyvec_macros",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.tinyvec_macros-0.1.0.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.tinyvec_macros-0.1.0.bazel
new file mode 100644
index 0000000..e7cf813
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.tinyvec_macros-0.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0 OR Zlib
+# ])
+
+rust_library(
+    name = "tinyvec_macros",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.unicode-bidi-0.3.8.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.unicode-bidi-0.3.8.bazel
new file mode 100644
index 0000000..94c2631
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.unicode-bidi-0.3.8.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "unicode_bidi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "hardcoded-data",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.unicode-normalization-0.1.21.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.unicode-normalization-0.1.21.bazel
new file mode 100644
index 0000000..b57cb1f
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.unicode-normalization-0.1.21.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "unicode_normalization",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.21",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@complex_sys__tinyvec-1.6.0//:tinyvec",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.url-2.2.2.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.url-2.2.2.bazel
new file mode 100644
index 0000000..5fb550c
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.url-2.2.2.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "url",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.2.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@complex_sys__form_urlencoded-1.0.1//:form_urlencoded",
+            "@complex_sys__idna-0.2.3//:idna",
+            "@complex_sys__matches-0.1.9//:matches",
+            "@complex_sys__percent-encoding-2.1.0//:percent_encoding",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.vcpkg-0.2.15.bazel b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.vcpkg-0.2.15.bazel
new file mode 100644
index 0000000..795f202
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/BUILD.vcpkg-0.2.15.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "vcpkg",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.15",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/crates.bzl b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/crates.bzl
new file mode 100644
index 0000000..5969c28
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/crates.bzl
@@ -0,0 +1,25 @@
+###############################################################################
+# @generated
+# This file is auto-generated by the cargo-bazel tool.
+#
+# DO NOT MODIFY: Local changes may be replaced in future executions.
+###############################################################################
+"""Rules for defining repositories for remote `crates_vendor` repositories"""
+
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+# buildifier: disable=bzl-visibility
+load("@examples//sys/complex/3rdparty/crates:defs.bzl", _crate_repositories = "crate_repositories")
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:crates_vendor.bzl", "crates_vendor_remote_repository")
+
+def crate_repositories():
+    maybe(
+        crates_vendor_remote_repository,
+        name = "complex_sys",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.bazel"),
+        defs_module = Label("@examples//sys/complex/3rdparty/crates:defs.bzl"),
+    )
+
+    _crate_repositories()
diff --git a/third_party/rules_rust/examples/sys/complex/3rdparty/crates/defs.bzl b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/defs.bzl
new file mode 100644
index 0000000..5fc3e58
--- /dev/null
+++ b/third_party/rules_rust/examples/sys/complex/3rdparty/crates/defs.bzl
@@ -0,0 +1,562 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //sys/complex/3rdparty:crates_vendor
+###############################################################################
+"""
+# `crates_repository` API
+
+- [aliases](#aliases)
+- [crate_deps](#crate_deps)
+- [all_crate_deps](#all_crate_deps)
+- [crate_repositories](#crate_repositories)
+
+"""
+
+load("@bazel_skylib//lib:selects.bzl", "selects")
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+###############################################################################
+# MACROS API
+###############################################################################
+
+# An identifier that represent common dependencies (unconditional).
+_COMMON_CONDITION = ""
+
+def _flatten_dependency_maps(all_dependency_maps):
+    """Flatten a list of dependency maps into one dictionary.
+
+    Dependency maps have the following structure:
+
+    ```python
+    DEPENDENCIES_MAP = {
+        # The first key in the map is a Bazel package
+        # name of the workspace this file is defined in.
+        "workspace_member_package": {
+
+            # Not all dependnecies are supported for all platforms.
+            # the condition key is the condition required to be true
+            # on the host platform.
+            "condition": {
+
+                # An alias to a crate target.     # The label of the crate target the
+                # Aliases are only crate names.   # package name refers to.
+                "package_name":                   "@full//:label",
+            }
+        }
+    }
+    ```
+
+    Args:
+        all_dependency_maps (list): A list of dicts as described above
+
+    Returns:
+        dict: A dictionary as described above
+    """
+    dependencies = {}
+
+    for workspace_deps_map in all_dependency_maps:
+        for pkg_name, conditional_deps_map in workspace_deps_map.items():
+            if pkg_name not in dependencies:
+                non_frozen_map = dict()
+                for key, values in conditional_deps_map.items():
+                    non_frozen_map.update({key: dict(values.items())})
+                dependencies.setdefault(pkg_name, non_frozen_map)
+                continue
+
+            for condition, deps_map in conditional_deps_map.items():
+                # If the condition has not been recorded, do so and continue
+                if condition not in dependencies[pkg_name]:
+                    dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))
+                    continue
+
+                # Alert on any miss-matched dependencies
+                inconsistent_entries = []
+                for crate_name, crate_label in deps_map.items():
+                    existing = dependencies[pkg_name][condition].get(crate_name)
+                    if existing and existing != crate_label:
+                        inconsistent_entries.append((crate_name, existing, crate_label))
+                    dependencies[pkg_name][condition].update({crate_name: crate_label})
+
+    return dependencies
+
+def crate_deps(deps, package_name = None):
+    """Finds the fully qualified label of the requested crates for the package where this macro is called.
+
+    Args:
+        deps (list): The desired list of crate targets.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()`.
+
+    Returns:
+        list: A list of labels to generated rust targets (str)
+    """
+
+    if not deps:
+        return []
+
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Join both sets of dependencies
+    dependencies = _flatten_dependency_maps([
+        _NORMAL_DEPENDENCIES,
+        _NORMAL_DEV_DEPENDENCIES,
+        _PROC_MACRO_DEPENDENCIES,
+        _PROC_MACRO_DEV_DEPENDENCIES,
+        _BUILD_DEPENDENCIES,
+        _BUILD_PROC_MACRO_DEPENDENCIES,
+    ]).pop(package_name, {})
+
+    # Combine all conditional packages so we can easily index over a flat list
+    # TODO: Perhaps this should actually return select statements and maintain
+    # the conditionals of the dependencies
+    flat_deps = {}
+    for deps_set in dependencies.values():
+        for crate_name, crate_label in deps_set.items():
+            flat_deps.update({crate_name: crate_label})
+
+    missing_crates = []
+    crate_targets = []
+    for crate_target in deps:
+        if crate_target not in flat_deps:
+            missing_crates.append(crate_target)
+        else:
+            crate_targets.append(flat_deps[crate_target])
+
+    if missing_crates:
+        fail("Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`".format(
+            missing_crates,
+            package_name,
+            dependencies,
+        ))
+
+    return crate_targets
+
+def all_crate_deps(
+        normal = False,
+        normal_dev = False,
+        proc_macro = False,
+        proc_macro_dev = False,
+        build = False,
+        build_proc_macro = False,
+        package_name = None):
+    """Finds the fully qualified label of all requested direct crate dependencies \
+    for the package where this macro is called.
+
+    If no parameters are set, all normal dependencies are returned. Setting any one flag will
+    otherwise impact the contents of the returned list.
+
+    Args:
+        normal (bool, optional): If True, normal dependencies are included in the
+            output list.
+        normal_dev (bool, optional): If True, normla dev dependencies will be
+            included in the output list..
+        proc_macro (bool, optional): If True, proc_macro dependencies are included
+            in the output list.
+        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
+            included in the output list.
+        build (bool, optional): If True, build dependencies are included
+            in the output list.
+        build_proc_macro (bool, optional): If True, build proc_macro dependencies are
+            included in the output list.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()` when unset.
+
+    Returns:
+        list: A list of labels to generated rust targets (str)
+    """
+
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Determine the relevant maps to use
+    all_dependency_maps = []
+    if normal:
+        all_dependency_maps.append(_NORMAL_DEPENDENCIES)
+    if normal_dev:
+        all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)
+    if proc_macro:
+        all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)
+    if proc_macro_dev:
+        all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)
+    if build:
+        all_dependency_maps.append(_BUILD_DEPENDENCIES)
+    if build_proc_macro:
+        all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)
+
+    # Default to always using normal dependencies
+    if not all_dependency_maps:
+        all_dependency_maps.append(_NORMAL_DEPENDENCIES)
+
+    dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
+
+    if not dependencies:
+        if dependencies == None:
+            fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
+        else:
+            return []
+
+    crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
+    for condition, deps in dependencies.items():
+        crate_deps += selects.with_or({_CONDITIONS[condition]: deps.values()})
+
+    return crate_deps
+
+def aliases(
+        normal = False,
+        normal_dev = False,
+        proc_macro = False,
+        proc_macro_dev = False,
+        build = False,
+        build_proc_macro = False,
+        package_name = None):
+    """Produces a map of Crate alias names to their original label
+
+    If no dependency kinds are specified, `normal` and `proc_macro` are used by default.
+    Setting any one flag will otherwise determine the contents of the returned dict.
+
+    Args:
+        normal (bool, optional): If True, normal dependencies are included in the
+            output list.
+        normal_dev (bool, optional): If True, normla dev dependencies will be
+            included in the output list..
+        proc_macro (bool, optional): If True, proc_macro dependencies are included
+            in the output list.
+        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
+            included in the output list.
+        build (bool, optional): If True, build dependencies are included
+            in the output list.
+        build_proc_macro (bool, optional): If True, build proc_macro dependencies are
+            included in the output list.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()` when unset.
+
+    Returns:
+        dict: The aliases of all associated packages
+    """
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Determine the relevant maps to use
+    all_aliases_maps = []
+    if normal:
+        all_aliases_maps.append(_NORMAL_ALIASES)
+    if normal_dev:
+        all_aliases_maps.append(_NORMAL_DEV_ALIASES)
+    if proc_macro:
+        all_aliases_maps.append(_PROC_MACRO_ALIASES)
+    if proc_macro_dev:
+        all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)
+    if build:
+        all_aliases_maps.append(_BUILD_ALIASES)
+    if build_proc_macro:
+        all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)
+
+    # Default to always using normal aliases
+    if not all_aliases_maps:
+        all_aliases_maps.append(_NORMAL_ALIASES)
+        all_aliases_maps.append(_PROC_MACRO_ALIASES)
+
+    aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)
+
+    if not aliases:
+        return dict()
+
+    common_items = aliases.pop(_COMMON_CONDITION, {}).items()
+
+    # If there are only common items in the dictionary, immediately return them
+    if not len(aliases.keys()) == 1:
+        return dict(common_items)
+
+    # Build a single select statement where each conditional has accounted for the
+    # common set of aliases.
+    crate_aliases = {"//conditions:default": common_items}
+    for condition, deps in aliases.items():
+        condition_triples = _CONDITIONS[condition]
+        if condition_triples in crate_aliases:
+            crate_aliases[condition_triples].update(deps)
+        else:
+            crate_aliases.update({_CONDITIONS[condition]: dict(deps.items() + common_items)})
+
+    return selects.with_or(crate_aliases)
+
+###############################################################################
+# WORKSPACE MEMBER DEPS AND ALIASES
+###############################################################################
+
+_NORMAL_DEPENDENCIES = {
+    "": {
+        _COMMON_CONDITION: {
+            "git2": "@complex_sys__git2-0.14.4//:git2",
+        },
+    },
+}
+
+_NORMAL_ALIASES = {
+    "": {
+        _COMMON_CONDITION: {
+        },
+    },
+}
+
+_NORMAL_DEV_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_NORMAL_DEV_ALIASES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_ALIASES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEV_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEV_ALIASES = {
+    "": {
+    },
+}
+
+_BUILD_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_BUILD_ALIASES = {
+    "": {
+    },
+}
+
+_BUILD_PROC_MACRO_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_BUILD_PROC_MACRO_ALIASES = {
+    "": {
+    },
+}
+
+_CONDITIONS = {
+    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+}
+
+###############################################################################
+
+def crate_repositories():
+    """A macro for defining repositories for all generated crates"""
+    maybe(
+        http_archive,
+        name = "complex_sys__bitflags-1.3.2",
+        sha256 = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/bitflags/1.3.2/download"],
+        strip_prefix = "bitflags-1.3.2",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.bitflags-1.3.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__cc-1.0.73",
+        sha256 = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/cc/1.0.73/download"],
+        strip_prefix = "cc-1.0.73",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.cc-1.0.73.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__cfg-if-1.0.0",
+        sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/cfg-if/1.0.0/download"],
+        strip_prefix = "cfg-if-1.0.0",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.cfg-if-1.0.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__form_urlencoded-1.0.1",
+        sha256 = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/form_urlencoded/1.0.1/download"],
+        strip_prefix = "form_urlencoded-1.0.1",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.form_urlencoded-1.0.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__git2-0.14.4",
+        sha256 = "d0155506aab710a86160ddb504a480d2964d7ab5b9e62419be69e0032bc5931c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/git2/0.14.4/download"],
+        strip_prefix = "git2-0.14.4",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.git2-0.14.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__idna-0.2.3",
+        sha256 = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/idna/0.2.3/download"],
+        strip_prefix = "idna-0.2.3",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.idna-0.2.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__jobserver-0.1.24",
+        sha256 = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/jobserver/0.1.24/download"],
+        strip_prefix = "jobserver-0.1.24",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.jobserver-0.1.24.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__libc-0.2.126",
+        sha256 = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/libc/0.2.126/download"],
+        strip_prefix = "libc-0.2.126",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.libc-0.2.126.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__libgit2-sys-0.13.4-1.4.2",
+        sha256 = "d0fa6563431ede25f5cc7f6d803c6afbc1c5d3ad3d4925d12c882bf2b526f5d1",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/libgit2-sys/0.13.4+1.4.2/download"],
+        strip_prefix = "libgit2-sys-0.13.4+1.4.2",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.libgit2-sys-0.13.4+1.4.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__libz-sys-1.1.8",
+        sha256 = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/libz-sys/1.1.8/download"],
+        strip_prefix = "libz-sys-1.1.8",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.libz-sys-1.1.8.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__log-0.4.17",
+        sha256 = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/log/0.4.17/download"],
+        strip_prefix = "log-0.4.17",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.log-0.4.17.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__matches-0.1.9",
+        sha256 = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/matches/0.1.9/download"],
+        strip_prefix = "matches-0.1.9",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.matches-0.1.9.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__percent-encoding-2.1.0",
+        sha256 = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/percent-encoding/2.1.0/download"],
+        strip_prefix = "percent-encoding-2.1.0",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.percent-encoding-2.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__pkg-config-0.3.25",
+        sha256 = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/pkg-config/0.3.25/download"],
+        strip_prefix = "pkg-config-0.3.25",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.pkg-config-0.3.25.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__tinyvec-1.6.0",
+        sha256 = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tinyvec/1.6.0/download"],
+        strip_prefix = "tinyvec-1.6.0",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.tinyvec-1.6.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__tinyvec_macros-0.1.0",
+        sha256 = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tinyvec_macros/0.1.0/download"],
+        strip_prefix = "tinyvec_macros-0.1.0",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.tinyvec_macros-0.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__unicode-bidi-0.3.8",
+        sha256 = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unicode-bidi/0.3.8/download"],
+        strip_prefix = "unicode-bidi-0.3.8",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.unicode-bidi-0.3.8.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__unicode-normalization-0.1.21",
+        sha256 = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unicode-normalization/0.1.21/download"],
+        strip_prefix = "unicode-normalization-0.1.21",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.unicode-normalization-0.1.21.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__url-2.2.2",
+        sha256 = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/url/2.2.2/download"],
+        strip_prefix = "url-2.2.2",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.url-2.2.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "complex_sys__vcpkg-0.2.15",
+        sha256 = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/vcpkg/0.2.15/download"],
+        strip_prefix = "vcpkg-0.2.15",
+        build_file = Label("@examples//sys/complex/3rdparty/crates:BUILD.vcpkg-0.2.15.bazel"),
+    )
diff --git a/third_party/rules_rust/examples/sys/complex/BUILD.bazel b/third_party/rules_rust/examples/sys/complex/BUILD.bazel
index f0e7f0b..eaf3199 100644
--- a/third_party/rules_rust/examples/sys/complex/BUILD.bazel
+++ b/third_party/rules_rust/examples/sys/complex/BUILD.bazel
@@ -20,7 +20,7 @@
     name = "complex_sys",
     srcs = ["src/main.rs"],
     edition = "2018",
-    # Note the `cargo-raze` dependencies here need to have been loaded
+    # Note the `crate_universe` dependencies here need to have been loaded
     # in the WORKSPACE file. See `//sys:sys_deps.bzl` for rmore details.
-    deps = ["//sys/complex/raze:git2"],
+    deps = ["//sys/complex/3rdparty/crates:git2"],
 )
diff --git a/third_party/rules_rust/examples/sys/complex/Cargo.lock b/third_party/rules_rust/examples/sys/complex/Cargo.lock
deleted file mode 100644
index a2676c7..0000000
--- a/third_party/rules_rust/examples/sys/complex/Cargo.lock
+++ /dev/null
@@ -1,260 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-[[package]]
-name = "autocfg"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
-
-[[package]]
-name = "bitflags"
-version = "1.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
-
-[[package]]
-name = "cc"
-version = "1.0.69"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2"
-dependencies = [
- "jobserver",
-]
-
-[[package]]
-name = "cfg-if"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-
-[[package]]
-name = "foreign-types"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
-dependencies = [
- "foreign-types-shared",
-]
-
-[[package]]
-name = "foreign-types-shared"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
-
-[[package]]
-name = "form_urlencoded"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
-dependencies = [
- "matches",
- "percent-encoding",
-]
-
-[[package]]
-name = "git2"
-version = "0.13.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca6f1a0238d7f8f8fd5ee642f4ebac4dbc03e03d1f78fbe7a3ede35dcf7e2224"
-dependencies = [
- "bitflags",
- "libc",
- "libgit2-sys",
- "log",
- "openssl-probe",
- "openssl-sys",
- "url",
-]
-
-[[package]]
-name = "idna"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
-dependencies = [
- "matches",
- "unicode-bidi",
- "unicode-normalization",
-]
-
-[[package]]
-name = "jobserver"
-version = "0.1.23"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f5ca711fd837261e14ec9e674f092cbb931d3fa1482b017ae59328ddc6f3212b"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "lazy_static"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-
-[[package]]
-name = "libc"
-version = "0.2.98"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790"
-
-[[package]]
-name = "libgit2-sys"
-version = "0.12.21+1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86271bacd72b2b9e854c3dcfb82efd538f15f870e4c11af66900effb462f6825"
-dependencies = [
- "cc",
- "libc",
- "libssh2-sys",
- "libz-sys",
- "openssl-sys",
- "pkg-config",
-]
-
-[[package]]
-name = "libssh2-sys"
-version = "0.2.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e0186af0d8f171ae6b9c4c90ec51898bad5d08a2d5e470903a50d9ad8959cbee"
-dependencies = [
- "cc",
- "libc",
- "libz-sys",
- "openssl-sys",
- "pkg-config",
- "vcpkg",
-]
-
-[[package]]
-name = "libz-sys"
-version = "1.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66"
-dependencies = [
- "cc",
- "libc",
- "pkg-config",
- "vcpkg",
-]
-
-[[package]]
-name = "log"
-version = "0.4.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
-name = "matches"
-version = "0.1.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
-
-[[package]]
-name = "openssl"
-version = "0.10.32"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "038d43985d1ddca7a9900630d8cd031b56e4794eecc2e9ea39dd17aa04399a70"
-dependencies = [
- "bitflags",
- "cfg-if",
- "foreign-types",
- "lazy_static",
- "libc",
- "openssl-sys",
-]
-
-[[package]]
-name = "openssl-probe"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a"
-
-[[package]]
-name = "openssl-sys"
-version = "0.9.60"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "921fc71883267538946025deffb622905ecad223c28efbfdef9bb59a0175f3e6"
-dependencies = [
- "autocfg",
- "cc",
- "libc",
- "pkg-config",
- "vcpkg",
-]
-
-[[package]]
-name = "percent-encoding"
-version = "2.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
-
-[[package]]
-name = "pkg-config"
-version = "0.3.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
-
-[[package]]
-name = "rules_rust_examples_complex_sys"
-version = "0.0.1"
-dependencies = [
- "git2",
- "openssl",
- "openssl-sys",
-]
-
-[[package]]
-name = "tinyvec"
-version = "1.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338"
-dependencies = [
- "tinyvec_macros",
-]
-
-[[package]]
-name = "tinyvec_macros"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
-
-[[package]]
-name = "unicode-bidi"
-version = "0.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eeb8be209bb1c96b7c177c7420d26e04eccacb0eeae6b980e35fcb74678107e0"
-dependencies = [
- "matches",
-]
-
-[[package]]
-name = "unicode-normalization"
-version = "0.1.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
-dependencies = [
- "tinyvec",
-]
-
-[[package]]
-name = "url"
-version = "2.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
-dependencies = [
- "form_urlencoded",
- "idna",
- "matches",
- "percent-encoding",
-]
-
-[[package]]
-name = "vcpkg"
-version = "0.2.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
diff --git a/third_party/rules_rust/examples/sys/complex/Cargo.toml b/third_party/rules_rust/examples/sys/complex/Cargo.toml
deleted file mode 100644
index 1e47fb4..0000000
--- a/third_party/rules_rust/examples/sys/complex/Cargo.toml
+++ /dev/null
@@ -1,35 +0,0 @@
-[package]
-name = "rules_rust_examples_complex_sys"
-version = "0.0.1"
-
-[[bin]]
-name = "rules_rust_examples_complex_sys"
-path = "src/main.rs"
-
-[dependencies]
-git2 = "=0.13.12"
-openssl = "=0.10.32"
-openssl-sys = "=0.9.60"
-
-[package.metadata.raze]
-workspace_path = "//sys/complex/raze"
-genmode = "Remote"
-gen_workspace_prefix = "complex_sys"
-rust_rules_workspace_name = "rules_rust"
-package_aliases_dir = "raze"
-default_gen_buildrs = true
-
-[package.metadata.raze.crates.openssl-sys.'*']
-# build.rs file: https://github.com/sfackler/rust-openssl/blob/master/openssl-sys/build/main.rs
-build_data_dependencies = [
-    "@openssl//:openssl",
-    "@openssl//:gen_dir",
-]
-data_attr = "[\"@openssl//:openssl\"]"
-additional_deps = ["@openssl//:openssl"]
-    [package.metadata.raze.crates.openssl-sys.'*'.buildrs_additional_environment_variables]
-        OPENSSL_DIR="$(execpath @openssl//:gen_dir)"
-        OPENSSL_STATIC="1"
-
-[package.metadata.raze.crates.libssh2-sys.'0.2.20']
-build_data_dependencies = ["@openssl"]
diff --git a/third_party/rules_rust/examples/sys/complex/raze/BUILD.bazel b/third_party/rules_rust/examples/sys/complex/raze/BUILD.bazel
deleted file mode 100644
index f718efb..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/BUILD.bazel
+++ /dev/null
@@ -1,48 +0,0 @@
-"""
-@generated
-cargo-raze generated Bazel file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-package(default_visibility = ["//visibility:public"])
-
-licenses([
-    "notice",  # See individual crates for specific licenses
-])
-
-# Aliased targets
-alias(
-    name = "git2",
-    actual = "@complex_sys__git2__0_13_12//:git2",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "openssl",
-    actual = "@complex_sys__openssl__0_10_32//:openssl",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "openssl_sys",
-    actual = "@complex_sys__openssl_sys__0_9_60//:openssl_sys",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-# Export file for Stardoc support
-exports_files(
-    [
-        "crates.bzl",
-    ],
-    visibility = ["//visibility:public"],
-)
diff --git a/third_party/rules_rust/examples/sys/complex/raze/crates.bzl b/third_party/rules_rust/examples/sys/complex/raze/crates.bzl
deleted file mode 100644
index a8ccc94..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/crates.bzl
+++ /dev/null
@@ -1,292 +0,0 @@
-"""
-@generated
-cargo-raze generated Bazel file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-load("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository")  # buildifier: disable=load
-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")  # buildifier: disable=load
-load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")  # buildifier: disable=load
-
-def complex_sys_fetch_remote_crates():
-    """This function defines a collection of repos and should be called in a WORKSPACE file"""
-    maybe(
-        http_archive,
-        name = "complex_sys__autocfg__1_0_1",
-        url = "https://crates.io/api/v1/crates/autocfg/1.0.1/download",
-        type = "tar.gz",
-        sha256 = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a",
-        strip_prefix = "autocfg-1.0.1",
-        build_file = Label("//sys/complex/raze/remote:BUILD.autocfg-1.0.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__bitflags__1_2_1",
-        url = "https://crates.io/api/v1/crates/bitflags/1.2.1/download",
-        type = "tar.gz",
-        sha256 = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693",
-        strip_prefix = "bitflags-1.2.1",
-        build_file = Label("//sys/complex/raze/remote:BUILD.bitflags-1.2.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__cc__1_0_69",
-        url = "https://crates.io/api/v1/crates/cc/1.0.69/download",
-        type = "tar.gz",
-        sha256 = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2",
-        strip_prefix = "cc-1.0.69",
-        build_file = Label("//sys/complex/raze/remote:BUILD.cc-1.0.69.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__cfg_if__1_0_0",
-        url = "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
-        type = "tar.gz",
-        sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd",
-        strip_prefix = "cfg-if-1.0.0",
-        build_file = Label("//sys/complex/raze/remote:BUILD.cfg-if-1.0.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__foreign_types__0_3_2",
-        url = "https://crates.io/api/v1/crates/foreign-types/0.3.2/download",
-        type = "tar.gz",
-        sha256 = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1",
-        strip_prefix = "foreign-types-0.3.2",
-        build_file = Label("//sys/complex/raze/remote:BUILD.foreign-types-0.3.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__foreign_types_shared__0_1_1",
-        url = "https://crates.io/api/v1/crates/foreign-types-shared/0.1.1/download",
-        type = "tar.gz",
-        sha256 = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b",
-        strip_prefix = "foreign-types-shared-0.1.1",
-        build_file = Label("//sys/complex/raze/remote:BUILD.foreign-types-shared-0.1.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__form_urlencoded__1_0_1",
-        url = "https://crates.io/api/v1/crates/form_urlencoded/1.0.1/download",
-        type = "tar.gz",
-        sha256 = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191",
-        strip_prefix = "form_urlencoded-1.0.1",
-        build_file = Label("//sys/complex/raze/remote:BUILD.form_urlencoded-1.0.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__git2__0_13_12",
-        url = "https://crates.io/api/v1/crates/git2/0.13.12/download",
-        type = "tar.gz",
-        sha256 = "ca6f1a0238d7f8f8fd5ee642f4ebac4dbc03e03d1f78fbe7a3ede35dcf7e2224",
-        strip_prefix = "git2-0.13.12",
-        build_file = Label("//sys/complex/raze/remote:BUILD.git2-0.13.12.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__idna__0_2_3",
-        url = "https://crates.io/api/v1/crates/idna/0.2.3/download",
-        type = "tar.gz",
-        sha256 = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8",
-        strip_prefix = "idna-0.2.3",
-        build_file = Label("//sys/complex/raze/remote:BUILD.idna-0.2.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__jobserver__0_1_23",
-        url = "https://crates.io/api/v1/crates/jobserver/0.1.23/download",
-        type = "tar.gz",
-        sha256 = "f5ca711fd837261e14ec9e674f092cbb931d3fa1482b017ae59328ddc6f3212b",
-        strip_prefix = "jobserver-0.1.23",
-        build_file = Label("//sys/complex/raze/remote:BUILD.jobserver-0.1.23.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__lazy_static__1_4_0",
-        url = "https://crates.io/api/v1/crates/lazy_static/1.4.0/download",
-        type = "tar.gz",
-        sha256 = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646",
-        strip_prefix = "lazy_static-1.4.0",
-        build_file = Label("//sys/complex/raze/remote:BUILD.lazy_static-1.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__libc__0_2_98",
-        url = "https://crates.io/api/v1/crates/libc/0.2.98/download",
-        type = "tar.gz",
-        sha256 = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790",
-        strip_prefix = "libc-0.2.98",
-        build_file = Label("//sys/complex/raze/remote:BUILD.libc-0.2.98.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__libgit2_sys__0_12_21_1_1_0",
-        url = "https://crates.io/api/v1/crates/libgit2-sys/0.12.21+1.1.0/download",
-        type = "tar.gz",
-        sha256 = "86271bacd72b2b9e854c3dcfb82efd538f15f870e4c11af66900effb462f6825",
-        strip_prefix = "libgit2-sys-0.12.21+1.1.0",
-        build_file = Label("//sys/complex/raze/remote:BUILD.libgit2-sys-0.12.21+1.1.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__libssh2_sys__0_2_21",
-        url = "https://crates.io/api/v1/crates/libssh2-sys/0.2.21/download",
-        type = "tar.gz",
-        sha256 = "e0186af0d8f171ae6b9c4c90ec51898bad5d08a2d5e470903a50d9ad8959cbee",
-        strip_prefix = "libssh2-sys-0.2.21",
-        build_file = Label("//sys/complex/raze/remote:BUILD.libssh2-sys-0.2.21.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__libz_sys__1_1_3",
-        url = "https://crates.io/api/v1/crates/libz-sys/1.1.3/download",
-        type = "tar.gz",
-        sha256 = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66",
-        strip_prefix = "libz-sys-1.1.3",
-        build_file = Label("//sys/complex/raze/remote:BUILD.libz-sys-1.1.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__log__0_4_14",
-        url = "https://crates.io/api/v1/crates/log/0.4.14/download",
-        type = "tar.gz",
-        sha256 = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710",
-        strip_prefix = "log-0.4.14",
-        build_file = Label("//sys/complex/raze/remote:BUILD.log-0.4.14.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__matches__0_1_8",
-        url = "https://crates.io/api/v1/crates/matches/0.1.8/download",
-        type = "tar.gz",
-        sha256 = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08",
-        strip_prefix = "matches-0.1.8",
-        build_file = Label("//sys/complex/raze/remote:BUILD.matches-0.1.8.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__openssl__0_10_32",
-        url = "https://crates.io/api/v1/crates/openssl/0.10.32/download",
-        type = "tar.gz",
-        sha256 = "038d43985d1ddca7a9900630d8cd031b56e4794eecc2e9ea39dd17aa04399a70",
-        strip_prefix = "openssl-0.10.32",
-        build_file = Label("//sys/complex/raze/remote:BUILD.openssl-0.10.32.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__openssl_probe__0_1_4",
-        url = "https://crates.io/api/v1/crates/openssl-probe/0.1.4/download",
-        type = "tar.gz",
-        sha256 = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a",
-        strip_prefix = "openssl-probe-0.1.4",
-        build_file = Label("//sys/complex/raze/remote:BUILD.openssl-probe-0.1.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__openssl_sys__0_9_60",
-        url = "https://crates.io/api/v1/crates/openssl-sys/0.9.60/download",
-        type = "tar.gz",
-        sha256 = "921fc71883267538946025deffb622905ecad223c28efbfdef9bb59a0175f3e6",
-        strip_prefix = "openssl-sys-0.9.60",
-        build_file = Label("//sys/complex/raze/remote:BUILD.openssl-sys-0.9.60.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__percent_encoding__2_1_0",
-        url = "https://crates.io/api/v1/crates/percent-encoding/2.1.0/download",
-        type = "tar.gz",
-        sha256 = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e",
-        strip_prefix = "percent-encoding-2.1.0",
-        build_file = Label("//sys/complex/raze/remote:BUILD.percent-encoding-2.1.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__pkg_config__0_3_19",
-        url = "https://crates.io/api/v1/crates/pkg-config/0.3.19/download",
-        type = "tar.gz",
-        sha256 = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c",
-        strip_prefix = "pkg-config-0.3.19",
-        build_file = Label("//sys/complex/raze/remote:BUILD.pkg-config-0.3.19.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__tinyvec__1_3_1",
-        url = "https://crates.io/api/v1/crates/tinyvec/1.3.1/download",
-        type = "tar.gz",
-        sha256 = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338",
-        strip_prefix = "tinyvec-1.3.1",
-        build_file = Label("//sys/complex/raze/remote:BUILD.tinyvec-1.3.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__tinyvec_macros__0_1_0",
-        url = "https://crates.io/api/v1/crates/tinyvec_macros/0.1.0/download",
-        type = "tar.gz",
-        sha256 = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c",
-        strip_prefix = "tinyvec_macros-0.1.0",
-        build_file = Label("//sys/complex/raze/remote:BUILD.tinyvec_macros-0.1.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__unicode_bidi__0_3_5",
-        url = "https://crates.io/api/v1/crates/unicode-bidi/0.3.5/download",
-        type = "tar.gz",
-        sha256 = "eeb8be209bb1c96b7c177c7420d26e04eccacb0eeae6b980e35fcb74678107e0",
-        strip_prefix = "unicode-bidi-0.3.5",
-        build_file = Label("//sys/complex/raze/remote:BUILD.unicode-bidi-0.3.5.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__unicode_normalization__0_1_19",
-        url = "https://crates.io/api/v1/crates/unicode-normalization/0.1.19/download",
-        type = "tar.gz",
-        sha256 = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9",
-        strip_prefix = "unicode-normalization-0.1.19",
-        build_file = Label("//sys/complex/raze/remote:BUILD.unicode-normalization-0.1.19.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__url__2_2_2",
-        url = "https://crates.io/api/v1/crates/url/2.2.2/download",
-        type = "tar.gz",
-        sha256 = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c",
-        strip_prefix = "url-2.2.2",
-        build_file = Label("//sys/complex/raze/remote:BUILD.url-2.2.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "complex_sys__vcpkg__0_2_15",
-        url = "https://crates.io/api/v1/crates/vcpkg/0.2.15/download",
-        type = "tar.gz",
-        sha256 = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426",
-        strip_prefix = "vcpkg-0.2.15",
-        build_file = Label("//sys/complex/raze/remote:BUILD.vcpkg-0.2.15.bazel"),
-    )
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.autocfg-1.0.1.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.autocfg-1.0.1.bazel
deleted file mode 100644
index 5faa88d..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.autocfg-1.0.1.bazel
+++ /dev/null
@@ -1,63 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "integers" with type "example" omitted
-
-# Unsupported target "paths" with type "example" omitted
-
-# Unsupported target "traits" with type "example" omitted
-
-# Unsupported target "versions" with type "example" omitted
-
-rust_library(
-    name = "autocfg",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.1",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "rustflags" with type "test" omitted
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.bazel
deleted file mode 100644
index e69de29..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.bazel
+++ /dev/null
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.bitflags-1.2.1.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.bitflags-1.2.1.bazel
deleted file mode 100644
index 09adb27..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.bitflags-1.2.1.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "bitflags_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.2.1",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "bitflags",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.2.1",
-    # buildifier: leave-alone
-    deps = [
-        ":bitflags_build_script",
-    ],
-)
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.cc-1.0.69.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.cc-1.0.69.bazel
deleted file mode 100644
index 2bc830d..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.cc-1.0.69.bazel
+++ /dev/null
@@ -1,91 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_gcc_shim",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "jobserver",
-        "parallel",
-    ],
-    crate_root = "src/bin/gcc-shim.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.69",
-    # buildifier: leave-alone
-    deps = [
-        ":cc",
-        "@complex_sys__jobserver__0_1_23//:jobserver",
-    ],
-)
-
-rust_library(
-    name = "cc",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "jobserver",
-        "parallel",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.69",
-    # buildifier: leave-alone
-    deps = [
-        "@complex_sys__jobserver__0_1_23//:jobserver",
-    ],
-)
-
-# Unsupported target "cc_env" with type "test" omitted
-
-# Unsupported target "cflags" with type "test" omitted
-
-# Unsupported target "cxxflags" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.cfg-if-1.0.0.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.cfg-if-1.0.0.bazel
deleted file mode 100644
index c2cdc13..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.cfg-if-1.0.0.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "cfg_if",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "xcrate" with type "test" omitted
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.foreign-types-0.3.2.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.foreign-types-0.3.2.bazel
deleted file mode 100644
index 598b30a..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.foreign-types-0.3.2.bazel
+++ /dev/null
@@ -1,54 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "foreign_types",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.2",
-    # buildifier: leave-alone
-    deps = [
-        "@complex_sys__foreign_types_shared__0_1_1//:foreign_types_shared",
-    ],
-)
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.foreign-types-shared-0.1.1.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.foreign-types-shared-0.1.1.bazel
deleted file mode 100644
index b084e4e..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.foreign-types-shared-0.1.1.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "foreign_types_shared",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.1",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.form_urlencoded-1.0.1.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.form_urlencoded-1.0.1.bazel
deleted file mode 100644
index 4e1962b..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.form_urlencoded-1.0.1.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "form_urlencoded",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.1",
-    # buildifier: leave-alone
-    deps = [
-        "@complex_sys__matches__0_1_8//:matches",
-        "@complex_sys__percent_encoding__2_1_0//:percent_encoding",
-    ],
-)
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.git2-0.13.12.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.git2-0.13.12.bazel
deleted file mode 100644
index 2c84c59..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.git2-0.13.12.bazel
+++ /dev/null
@@ -1,115 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "add" with type "example" omitted
-
-# Unsupported target "blame" with type "example" omitted
-
-# Unsupported target "cat-file" with type "example" omitted
-
-# Unsupported target "clone" with type "example" omitted
-
-# Unsupported target "diff" with type "example" omitted
-
-# Unsupported target "fetch" with type "example" omitted
-
-# Unsupported target "init" with type "example" omitted
-
-# Unsupported target "log" with type "example" omitted
-
-# Unsupported target "ls-remote" with type "example" omitted
-
-# Unsupported target "pull" with type "example" omitted
-
-# Unsupported target "rev-list" with type "example" omitted
-
-# Unsupported target "rev-parse" with type "example" omitted
-
-# Unsupported target "status" with type "example" omitted
-
-# Unsupported target "tag" with type "example" omitted
-
-rust_library(
-    name = "git2",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-        "default",
-        "https",
-        "openssl-probe",
-        "openssl-sys",
-        "ssh",
-        "ssh_key_from_memory",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.13.12",
-    # buildifier: leave-alone
-    deps = [
-        "@complex_sys__bitflags__1_2_1//:bitflags",
-        "@complex_sys__libc__0_2_98//:libc",
-        "@complex_sys__libgit2_sys__0_12_21_1_1_0//:libgit2_sys",
-        "@complex_sys__log__0_4_14//:log",
-        "@complex_sys__url__2_2_2//:url",
-    ] + selects.with_or({
-        # cfg(all(unix, not(target_os = "macos")))
-        (
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@complex_sys__openssl_probe__0_1_4//:openssl_probe",
-            "@complex_sys__openssl_sys__0_9_60//:openssl_sys",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.idna-0.2.3.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.idna-0.2.3.bazel
deleted file mode 100644
index b558dba..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.idna-0.2.3.bazel
+++ /dev/null
@@ -1,62 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "all" with type "bench" omitted
-
-rust_library(
-    name = "idna",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.3",
-    # buildifier: leave-alone
-    deps = [
-        "@complex_sys__matches__0_1_8//:matches",
-        "@complex_sys__unicode_bidi__0_3_5//:unicode_bidi",
-        "@complex_sys__unicode_normalization__0_1_19//:unicode_normalization",
-    ],
-)
-
-# Unsupported target "tests" with type "test" omitted
-
-# Unsupported target "unit" with type "test" omitted
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.jobserver-0.1.23.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.jobserver-0.1.23.bazel
deleted file mode 100644
index bc6f007..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.jobserver-0.1.23.bazel
+++ /dev/null
@@ -1,88 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "jobserver",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.23",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@complex_sys__libc__0_2_98//:libc",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-# Unsupported target "client" with type "test" omitted
-
-# Unsupported target "client-of-myself" with type "test" omitted
-
-# Unsupported target "helper" with type "test" omitted
-
-# Unsupported target "make-as-a-client" with type "test" omitted
-
-# Unsupported target "server" with type "test" omitted
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.lazy_static-1.4.0.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.lazy_static-1.4.0.bazel
deleted file mode 100644
index 440c1c9..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.lazy_static-1.4.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "lazy_static",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.4.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "no_std" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.libc-0.2.98.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.libc-0.2.98.bazel
deleted file mode 100644
index b3a4526..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.libc-0.2.98.bazel
+++ /dev/null
@@ -1,89 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "libc_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.98",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "libc",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.98",
-    # buildifier: leave-alone
-    deps = [
-        ":libc_build_script",
-    ],
-)
-
-# Unsupported target "const_fn" with type "test" omitted
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.libgit2-sys-0.12.21+1.1.0.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.libgit2-sys-0.12.21+1.1.0.bazel
deleted file mode 100644
index 63c87f1..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.libgit2-sys-0.12.21+1.1.0.bazel
+++ /dev/null
@@ -1,149 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "libgit2_sys_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "https",
-        "libssh2-sys",
-        "openssl-sys",
-        "ssh",
-        "ssh_key_from_memory",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    links = "git2",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.12.21+1.1.0",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@complex_sys__cc__1_0_69//:cc",
-        "@complex_sys__libssh2_sys__0_2_21//:libssh2_sys",
-        "@complex_sys__libz_sys__1_1_3//:libz_sys",
-        "@complex_sys__pkg_config__0_3_19//:pkg_config",
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@complex_sys__openssl_sys__0_9_60//:openssl_sys",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-rust_library(
-    name = "libgit2_sys",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-        "https",
-        "libssh2-sys",
-        "openssl-sys",
-        "ssh",
-        "ssh_key_from_memory",
-    ],
-    crate_root = "lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.12.21+1.1.0",
-    # buildifier: leave-alone
-    deps = [
-        ":libgit2_sys_build_script",
-        "@complex_sys__libc__0_2_98//:libc",
-        "@complex_sys__libssh2_sys__0_2_21//:libssh2_sys",
-        "@complex_sys__libz_sys__1_1_3//:libz_sys",
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@complex_sys__openssl_sys__0_9_60//:openssl_sys",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.libssh2-sys-0.2.21.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.libssh2-sys-0.2.21.bazel
deleted file mode 100644
index dab53f1..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.libssh2-sys-0.2.21.bazel
+++ /dev/null
@@ -1,156 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "libssh2_sys_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]) + [
-        "@openssl",
-    ],
-    edition = "2015",
-    links = "ssh2",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.21",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@complex_sys__cc__1_0_69//:cc",
-        "@complex_sys__libz_sys__1_1_3//:libz_sys",
-        "@complex_sys__pkg_config__0_3_19//:pkg_config",
-    ] + selects.with_or({
-        # cfg(target_env = "msvc")
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@complex_sys__vcpkg__0_2_15//:vcpkg",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@complex_sys__openssl_sys__0_9_60//:openssl_sys",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-rust_library(
-    name = "libssh2_sys",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.21",
-    # buildifier: leave-alone
-    deps = [
-        ":libssh2_sys_build_script",
-        "@complex_sys__libc__0_2_98//:libc",
-        "@complex_sys__libz_sys__1_1_3//:libz_sys",
-    ] + selects.with_or({
-        # cfg(target_env = "msvc")
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@complex_sys__openssl_sys__0_9_60//:openssl_sys",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.libz-sys-1.1.3.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.libz-sys-1.1.3.bazel
deleted file mode 100644
index 88c2b13..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.libz-sys-1.1.3.bazel
+++ /dev/null
@@ -1,108 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "libz_sys_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "libc",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    links = "z",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.1.3",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@complex_sys__cc__1_0_69//:cc",
-        "@complex_sys__pkg_config__0_3_19//:pkg_config",
-    ] + selects.with_or({
-        # cfg(target_env = "msvc")
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@complex_sys__vcpkg__0_2_15//:vcpkg",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-rust_library(
-    name = "libz_sys",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-        "libc",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.1.3",
-    # buildifier: leave-alone
-    deps = [
-        ":libz_sys_build_script",
-        "@complex_sys__libc__0_2_98//:libc",
-    ] + selects.with_or({
-        # cfg(target_env = "msvc")
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.log-0.4.14.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.log-0.4.14.bazel
deleted file mode 100644
index dbea3b3..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.log-0.4.14.bazel
+++ /dev/null
@@ -1,90 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "log_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.14",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-# Unsupported target "value" with type "bench" omitted
-
-rust_library(
-    name = "log",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.14",
-    # buildifier: leave-alone
-    deps = [
-        ":log_build_script",
-        "@complex_sys__cfg_if__1_0_0//:cfg_if",
-    ],
-)
-
-# Unsupported target "filters" with type "test" omitted
-
-# Unsupported target "macros" with type "test" omitted
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.matches-0.1.8.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.matches-0.1.8.bazel
deleted file mode 100644
index 2b9a32d..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.matches-0.1.8.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "matches",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.8",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "macro_use_one" with type "test" omitted
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.openssl-0.10.32.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.openssl-0.10.32.bazel
deleted file mode 100644
index 5dda642..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.openssl-0.10.32.bazel
+++ /dev/null
@@ -1,92 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "openssl_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.10.32",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@complex_sys__openssl_sys__0_9_60//:openssl_sys",
-    ],
-)
-
-# Unsupported target "mk_certs" with type "example" omitted
-
-rust_library(
-    name = "openssl",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.10.32",
-    # buildifier: leave-alone
-    deps = [
-        ":openssl_build_script",
-        "@complex_sys__bitflags__1_2_1//:bitflags",
-        "@complex_sys__cfg_if__1_0_0//:cfg_if",
-        "@complex_sys__foreign_types__0_3_2//:foreign_types",
-        "@complex_sys__lazy_static__1_4_0//:lazy_static",
-        "@complex_sys__libc__0_2_98//:libc",
-        "@complex_sys__openssl_sys__0_9_60//:openssl_sys",
-    ],
-)
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.openssl-probe-0.1.4.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.openssl-probe-0.1.4.bazel
deleted file mode 100644
index e8c551b..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.openssl-probe-0.1.4.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "openssl_probe",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.4",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.openssl-sys-0.9.60.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.openssl-sys-0.9.60.bazel
deleted file mode 100644
index c033c83..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.openssl-sys-0.9.60.bazel
+++ /dev/null
@@ -1,113 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "openssl_sys_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-        "OPENSSL_DIR": "$(execpath @openssl//:gen_dir)",
-        "OPENSSL_STATIC": "1",
-    },
-    crate_features = [
-    ],
-    crate_root = "build/main.rs",
-    data = glob(["**"]) + [
-        "@openssl//:gen_dir",
-        "@openssl//:openssl",
-    ],
-    edition = "2015",
-    links = "openssl",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.9.60",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@complex_sys__autocfg__1_0_1//:autocfg",
-        "@complex_sys__cc__1_0_69//:cc",
-        "@complex_sys__pkg_config__0_3_19//:pkg_config",
-    ] + selects.with_or({
-        # cfg(target_env = "msvc")
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@complex_sys__vcpkg__0_2_15//:vcpkg",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-rust_library(
-    name = "openssl_sys",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [] + ["@openssl//:openssl"],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.9.60",
-    # buildifier: leave-alone
-    deps = [
-        ":openssl_sys_build_script",
-        "@complex_sys__libc__0_2_98//:libc",
-        "@openssl//:openssl",
-    ] + selects.with_or({
-        # cfg(target_env = "msvc")
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.percent-encoding-2.1.0.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.percent-encoding-2.1.0.bazel
deleted file mode 100644
index c6db1ca..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.percent-encoding-2.1.0.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "percent_encoding",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.1.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.pkg-config-0.3.19.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.pkg-config-0.3.19.bazel
deleted file mode 100644
index 579c9ba..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.pkg-config-0.3.19.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "pkg_config",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.19",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.tinyvec-1.3.1.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.tinyvec-1.3.1.bazel
deleted file mode 100644
index ec3dc78..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.tinyvec-1.3.1.bazel
+++ /dev/null
@@ -1,63 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Zlib from expression "Zlib OR (Apache-2.0 OR MIT)"
-])
-
-# Generated Targets
-
-# Unsupported target "macros" with type "bench" omitted
-
-rust_library(
-    name = "tinyvec",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "alloc",
-        "default",
-        "tinyvec_macros",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.3.1",
-    # buildifier: leave-alone
-    deps = [
-        "@complex_sys__tinyvec_macros__0_1_0//:tinyvec_macros",
-    ],
-)
-
-# Unsupported target "arrayvec" with type "test" omitted
-
-# Unsupported target "tinyvec" with type "test" omitted
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.tinyvec_macros-0.1.0.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.tinyvec_macros-0.1.0.bazel
deleted file mode 100644
index 898618b..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.tinyvec_macros-0.1.0.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR (Apache-2.0 OR Zlib)"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "tinyvec_macros",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.unicode-bidi-0.3.5.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.unicode-bidi-0.3.5.bazel
deleted file mode 100644
index eb6eaa4..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.unicode-bidi-0.3.5.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "unicode_bidi",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.5",
-    # buildifier: leave-alone
-    deps = [
-        "@complex_sys__matches__0_1_8//:matches",
-    ],
-)
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.unicode-normalization-0.1.19.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.unicode-normalization-0.1.19.bazel
deleted file mode 100644
index eacf38d..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.unicode-normalization-0.1.19.bazel
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "bench" with type "bench" omitted
-
-rust_library(
-    name = "unicode_normalization",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.19",
-    # buildifier: leave-alone
-    deps = [
-        "@complex_sys__tinyvec__1_3_1//:tinyvec",
-    ],
-)
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.url-2.2.2.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.url-2.2.2.bazel
deleted file mode 100644
index 37b82d9..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.url-2.2.2.bazel
+++ /dev/null
@@ -1,63 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "parse_url" with type "bench" omitted
-
-rust_library(
-    name = "url",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.2.2",
-    # buildifier: leave-alone
-    deps = [
-        "@complex_sys__form_urlencoded__1_0_1//:form_urlencoded",
-        "@complex_sys__idna__0_2_3//:idna",
-        "@complex_sys__matches__0_1_8//:matches",
-        "@complex_sys__percent_encoding__2_1_0//:percent_encoding",
-    ],
-)
-
-# Unsupported target "data" with type "test" omitted
-
-# Unsupported target "unit" with type "test" omitted
diff --git a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.vcpkg-0.2.15.bazel b/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.vcpkg-0.2.15.bazel
deleted file mode 100644
index 6a4c404..0000000
--- a/third_party/rules_rust/examples/sys/complex/raze/remote/BUILD.vcpkg-0.2.15.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//sys/complex/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "vcpkg",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.15",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/examples/sys/complex/repositories.bzl b/third_party/rules_rust/examples/sys/complex/repositories.bzl
deleted file mode 100644
index 1284191..0000000
--- a/third_party/rules_rust/examples/sys/complex/repositories.bzl
+++ /dev/null
@@ -1,10 +0,0 @@
-# buildifier: disable=module-docstring
-load("//sys/complex/raze:crates.bzl", "complex_sys_fetch_remote_crates")
-load("//third_party/openssl:openssl_repositories.bzl", "openssl_repositories")
-
-def complex_sys_repositories():
-    """Define repository dependencies for the `complex_sys` example"""
-
-    complex_sys_fetch_remote_crates()
-
-    openssl_repositories()
diff --git a/third_party/rules_rust/examples/sys/sys_deps.bzl b/third_party/rules_rust/examples/sys/sys_deps.bzl
index 31716e4..1825ad1 100644
--- a/third_party/rules_rust/examples/sys/sys_deps.bzl
+++ b/third_party/rules_rust/examples/sys/sys_deps.bzl
@@ -1,14 +1,20 @@
-# buildifier: disable=module-docstring
-load("//sys/basic/raze:crates.bzl", "basic_sys_fetch_remote_crates")
-load("//sys/complex:repositories.bzl", "complex_sys_repositories")
+"""Dependencies for the `@rules_rust_examples//sys` package"""
+
+load("//sys/basic/3rdparty/crates:defs.bzl", basic_crate_repositories = "crate_repositories")
+load("//sys/complex/3rdparty/crates:defs.bzl", complex_crate_repositories = "crate_repositories")
+load("//third_party/openssl:openssl_repositories.bzl", "openssl_repositories")
 
 def sys_deps():
     """This macro loads dependencies for the `sys` crate examples
 
     Commonly `*-sys` crates are built on top of some existing library and
     will have a number of dependencies. The examples here use
-    [cargo-raze](https://github.com/google/cargo-raze) to gather these
-    dependencies and make them avaialble in the workspace.
+    [crate_universe](https://bazelbuild.github.io/rules_rust/crate_universe.html)
+    to gather these dependencies and make them avaialble in the workspace.
     """
-    basic_sys_fetch_remote_crates()
-    complex_sys_repositories()
+
+    # Required by `//sys/complex`
+    openssl_repositories()
+
+    basic_crate_repositories()
+    complex_crate_repositories()
diff --git a/third_party/rules_rust/examples/wasm/BUILD.bazel b/third_party/rules_rust/examples/wasm/BUILD.bazel
index e499c31..8fe0654 100644
--- a/third_party/rules_rust/examples/wasm/BUILD.bazel
+++ b/third_party/rules_rust/examples/wasm/BUILD.bazel
@@ -12,7 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# buildifier: disable=module-docstring
 load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_test")
 load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_shared_library")
 load("@rules_rust//wasm_bindgen:wasm_bindgen.bzl", "rust_wasm_bindgen")
@@ -24,7 +23,7 @@
     srcs = ["main.rs"],
     edition = "2018",
     deps = [
-        "@rules_rust//wasm_bindgen/raze:wasm_bindgen",
+        "@rules_rust//wasm_bindgen/3rdparty:wasm_bindgen",
     ],
 )
 
@@ -33,7 +32,7 @@
     srcs = ["main.rs"],
     edition = "2018",
     deps = [
-        "@rules_rust//wasm_bindgen/raze:wasm_bindgen",
+        "@rules_rust//wasm_bindgen/3rdparty:wasm_bindgen",
     ],
 )
 
diff --git a/third_party/rules_rust/proto/3rdparty/BUILD.bazel b/third_party/rules_rust/proto/3rdparty/BUILD.bazel
new file mode 100644
index 0000000..cb1e2a7
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/BUILD.bazel
@@ -0,0 +1,67 @@
+load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
+load("//crate_universe:defs.bzl", "crate", "crates_vendor")
+
+crates_vendor(
+    name = "crates_vendor",
+    annotations = {
+        "lazy_static": [crate.annotation(
+            rustc_flags = [
+                "--cfg=lazy_static_heap_impl",
+            ],
+        )],
+        "protobuf": [crate.annotation(
+            patch_args = ["-p1"],
+            patches = ["@rules_rust//proto/3rdparty/patches:protobuf-2.8.2.patch"],
+        )],
+    },
+    cargo_lockfile = "Cargo.Bazel.lock",
+    mode = "remote",
+    packages = {
+        "grpc": crate.spec(
+            version = "0.6.2",
+        ),
+        "grpc-compiler": crate.spec(
+            version = "0.6.2",
+        ),
+        "log": crate.spec(
+            version = "0.4, 0.4.7",
+        ),
+        "protobuf": crate.spec(
+            features = ["with-bytes"],
+            version = "2.8.2",
+        ),
+        "protobuf-codegen": crate.spec(
+            version = "2.8.2",
+        ),
+        "tls-api": crate.spec(
+            version = "0.1.22",
+        ),
+        "tls-api-stub": crate.spec(
+            version = "0.1.22",
+        ),
+    },
+    repository_name = "rules_rust_proto",
+    tags = ["manual"],
+)
+
+alias(
+    name = "wasm_bindgen_cli",
+    actual = "@rules_rust_wasm_bindgen_cli",
+    tags = ["manual"],
+    visibility = ["//visibility:public"],
+)
+
+alias(
+    name = "wasm_bindgen",
+    actual = "//wasm_bindgen/3rdparty/crates:wasm-bindgen",
+    visibility = ["//visibility:public"],
+)
+
+bzl_library(
+    name = "bzl_lib",
+    srcs = glob(["**/*.bzl"]) + [
+        "//proto/3rdparty/crates:defs.bzl",
+        "//proto/3rdparty/crates:crates.bzl",
+    ],
+    visibility = ["//proto:__pkg__"],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/Cargo.Bazel.lock b/third_party/rules_rust/proto/3rdparty/Cargo.Bazel.lock
new file mode 100644
index 0000000..e2eaa42
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/Cargo.Bazel.lock
@@ -0,0 +1,792 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643"
+dependencies = [
+ "byteorder",
+ "safemem",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
+dependencies = [
+ "byteorder",
+ "iovec",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "maybe-uninit",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"
+dependencies = [
+ "autocfg",
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils",
+ "lazy_static",
+ "maybe-uninit",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570"
+dependencies = [
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils",
+ "maybe-uninit",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
+dependencies = [
+ "autocfg",
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static",
+]
+
+[[package]]
+name = "direct-cargo-bazel-deps"
+version = "0.0.1"
+dependencies = [
+ "grpc",
+ "grpc-compiler",
+ "log 0.4.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "protobuf",
+ "protobuf-codegen",
+ "tls-api",
+ "tls-api-stub",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags",
+ "fuchsia-zircon-sys",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+
+[[package]]
+name = "futures"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678"
+
+[[package]]
+name = "futures-cpupool"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4"
+dependencies = [
+ "futures",
+ "num_cpus",
+]
+
+[[package]]
+name = "grpc"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aaf1d741fe6f3413f1f9f71b99f5e4e26776d563475a8a53ce53a73a8534c1d"
+dependencies = [
+ "base64",
+ "bytes",
+ "futures",
+ "futures-cpupool",
+ "httpbis",
+ "log 0.4.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "protobuf",
+ "tls-api",
+ "tls-api-stub",
+ "tokio-core",
+ "tokio-io",
+ "tokio-tls-api",
+]
+
+[[package]]
+name = "grpc-compiler"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "907274ce8ee7b40a0d0b0db09022ea22846a47cfb1fc8ad2c983c70001b4ffb1"
+dependencies = [
+ "protobuf",
+ "protobuf-codegen",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "httpbis"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7689cfa896b2a71da4f16206af167542b75d242b6906313e53857972a92d5614"
+dependencies = [
+ "bytes",
+ "futures",
+ "futures-cpupool",
+ "log 0.4.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "net2",
+ "tls-api",
+ "tls-api-stub",
+ "tokio-core",
+ "tokio-io",
+ "tokio-timer 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-tls-api",
+ "tokio-uds 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unix_socket",
+ "void",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "lock_api"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
+dependencies = [
+ "log 0.4.17 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "maybe-uninit"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+
+[[package]]
+name = "memoffset"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mio"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+dependencies = [
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fuchsia-zircon",
+ "fuchsia-zircon-sys",
+ "iovec",
+ "kernel32-sys",
+ "libc",
+ "log 0.4.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "miow",
+ "net2",
+ "slab 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "mio-uds"
+version = "0.6.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0"
+dependencies = [
+ "iovec",
+ "libc",
+ "mio",
+]
+
+[[package]]
+name = "miow"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+dependencies = [
+ "kernel32-sys",
+ "net2",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ws2_32-sys",
+]
+
+[[package]]
+name = "net2"
+version = "0.2.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae"
+dependencies = [
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc",
+ "winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+ "rustc_version",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b"
+dependencies = [
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cloudabi",
+ "libc",
+ "redox_syscall",
+ "rustc_version",
+ "smallvec",
+ "winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "protobuf"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70731852eec72c56d11226c8a5f96ad5058a3dab73647ca5f7ee351e464f2571"
+dependencies = [
+ "bytes",
+]
+
+[[package]]
+name = "protobuf-codegen"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d74b9cbbf2ac9a7169c85a3714ec16c51ee9ec7cfd511549527e9a7df720795"
+dependencies = [
+ "protobuf",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "safemem"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
+
+[[package]]
+name = "scoped-tls"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "332ffa32bf586782a3efaeb58f127980944bbc8c4d6913a86107ac2a5ab24b28"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "slab"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23"
+
+[[package]]
+name = "slab"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
+dependencies = [
+ "maybe-uninit",
+]
+
+[[package]]
+name = "tls-api"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "049c03787a0595182357fbd487577947f4351b78ce20c3668f6d49f17feb13d1"
+dependencies = [
+ "log 0.4.17 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "tls-api-stub"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9a0cc8c149724db9de7d73a0e1bc80b1a74f5394f08c6f301e11f9c35fa061e"
+dependencies = [
+ "tls-api",
+ "void",
+]
+
+[[package]]
+name = "tokio"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6"
+dependencies = [
+ "bytes",
+ "futures",
+ "mio",
+ "num_cpus",
+ "tokio-codec",
+ "tokio-current-thread",
+ "tokio-executor",
+ "tokio-fs",
+ "tokio-io",
+ "tokio-reactor",
+ "tokio-sync",
+ "tokio-tcp",
+ "tokio-threadpool",
+ "tokio-timer 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-udp",
+ "tokio-uds 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "tokio-codec"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b"
+dependencies = [
+ "bytes",
+ "futures",
+ "tokio-io",
+]
+
+[[package]]
+name = "tokio-core"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87b1395334443abca552f63d4f61d0486f12377c2ba8b368e523f89e828cffd4"
+dependencies = [
+ "bytes",
+ "futures",
+ "iovec",
+ "log 0.4.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio",
+ "scoped-tls",
+ "tokio",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-reactor",
+ "tokio-timer 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "tokio-current-thread"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e"
+dependencies = [
+ "futures",
+ "tokio-executor",
+]
+
+[[package]]
+name = "tokio-executor"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671"
+dependencies = [
+ "crossbeam-utils",
+ "futures",
+]
+
+[[package]]
+name = "tokio-fs"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "297a1206e0ca6302a0eed35b700d292b275256f596e2f3fea7729d5e629b6ff4"
+dependencies = [
+ "futures",
+ "tokio-io",
+ "tokio-threadpool",
+]
+
+[[package]]
+name = "tokio-io"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674"
+dependencies = [
+ "bytes",
+ "futures",
+ "log 0.4.17 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "tokio-reactor"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351"
+dependencies = [
+ "crossbeam-utils",
+ "futures",
+ "lazy_static",
+ "log 0.4.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "slab 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-sync",
+]
+
+[[package]]
+name = "tokio-sync"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee"
+dependencies = [
+ "fnv",
+ "futures",
+]
+
+[[package]]
+name = "tokio-tcp"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72"
+dependencies = [
+ "bytes",
+ "futures",
+ "iovec",
+ "mio",
+ "tokio-io",
+ "tokio-reactor",
+]
+
+[[package]]
+name = "tokio-threadpool"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-queue",
+ "crossbeam-utils",
+ "futures",
+ "lazy_static",
+ "log 0.4.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num_cpus",
+ "slab 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-executor",
+]
+
+[[package]]
+name = "tokio-timer"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6131e780037787ff1b3f8aad9da83bca02438b72277850dd6ad0d455e0e20efc"
+dependencies = [
+ "futures",
+ "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "tokio-timer"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296"
+dependencies = [
+ "crossbeam-utils",
+ "futures",
+ "slab 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-executor",
+]
+
+[[package]]
+name = "tokio-tls-api"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68d0e040d5b1f4cfca70ec4f371229886a5de5bb554d272a4a8da73004a7b2c9"
+dependencies = [
+ "futures",
+ "tls-api",
+ "tokio-io",
+]
+
+[[package]]
+name = "tokio-udp"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82"
+dependencies = [
+ "bytes",
+ "futures",
+ "log 0.4.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio",
+ "tokio-codec",
+ "tokio-io",
+ "tokio-reactor",
+]
+
+[[package]]
+name = "tokio-uds"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65ae5d255ce739e8537221ed2942e0445f4b3b813daebac1c0050ddaaa3587f9"
+dependencies = [
+ "bytes",
+ "futures",
+ "iovec",
+ "libc",
+ "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio",
+ "mio-uds",
+ "tokio-core",
+ "tokio-io",
+]
+
+[[package]]
+name = "tokio-uds"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab57a4ac4111c8c9dbcf70779f6fc8bc35ae4b2454809febac840ad19bd7e4e0"
+dependencies = [
+ "bytes",
+ "futures",
+ "iovec",
+ "libc",
+ "log 0.4.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio",
+ "mio-uds",
+ "tokio-codec",
+ "tokio-io",
+ "tokio-reactor",
+]
+
+[[package]]
+name = "unix_socket"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6aa2700417c405c38f5e6902d699345241c28c0b7ade4abaad71e35a87eb1564"
+dependencies = [
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc",
+]
+
+[[package]]
+name = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build",
+]
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.autocfg-1.1.0.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.autocfg-1.1.0.bazel
new file mode 100644
index 0000000..de041c0
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.autocfg-1.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "autocfg",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.base64-0.9.3.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.base64-0.9.3.bazel
new file mode 100644
index 0000000..5a21a94
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.base64-0.9.3.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "base64",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.9.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__byteorder-1.4.3//:byteorder",
+            "@rules_rust_proto__safemem-0.3.3//:safemem",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.bazel
new file mode 100644
index 0000000..075d512
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.bazel
@@ -0,0 +1,89 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+package(default_visibility = ["//visibility:public"])
+
+exports_files(
+    [
+        "cargo-bazel.json",
+        "defs.bzl",
+        "crates.bzl",
+    ] + glob([
+        "*.bazel",
+    ]),
+)
+
+filegroup(
+    name = "srcs",
+    srcs = glob([
+        "*.bazel",
+        "*.bzl",
+    ]),
+)
+
+# Workspace Member Dependencies
+alias(
+    name = "grpc",
+    actual = "@rules_rust_proto__grpc-0.6.2//:grpc",
+    tags = ["manual"],
+)
+
+alias(
+    name = "grpc-compiler",
+    actual = "@rules_rust_proto__grpc-compiler-0.6.2//:grpc_compiler",
+    tags = ["manual"],
+)
+
+alias(
+    name = "log",
+    actual = "@rules_rust_proto__log-0.4.17//:log",
+    tags = ["manual"],
+)
+
+alias(
+    name = "protobuf",
+    actual = "@rules_rust_proto__protobuf-2.8.2//:protobuf",
+    tags = ["manual"],
+)
+
+alias(
+    name = "protobuf-codegen",
+    actual = "@rules_rust_proto__protobuf-codegen-2.8.2//:protobuf_codegen",
+    tags = ["manual"],
+)
+
+alias(
+    name = "tls-api",
+    actual = "@rules_rust_proto__tls-api-0.1.22//:tls_api",
+    tags = ["manual"],
+)
+
+alias(
+    name = "tls-api-stub",
+    actual = "@rules_rust_proto__tls-api-stub-0.1.22//:tls_api_stub",
+    tags = ["manual"],
+)
+
+# Binaries
+alias(
+    name = "grpc-compiler__protoc-gen-rust-grpc",
+    actual = "@rules_rust_proto__grpc-compiler-0.6.2//:protoc-gen-rust-grpc__bin",
+    tags = ["manual"],
+)
+
+alias(
+    name = "protobuf-codegen__protoc-gen-rust",
+    actual = "@rules_rust_proto__protobuf-codegen-2.8.2//:protoc-gen-rust__bin",
+    tags = ["manual"],
+)
+
+alias(
+    name = "protobuf-codegen__protobuf-bin-gen-rust-do-not-use",
+    actual = "@rules_rust_proto__protobuf-codegen-2.8.2//:protobuf-bin-gen-rust-do-not-use__bin",
+    tags = ["manual"],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.bitflags-1.3.2.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.bitflags-1.3.2.bazel
new file mode 100644
index 0000000..376a421
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.bitflags-1.3.2.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "bitflags",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.3.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.byteorder-1.4.3.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.byteorder-1.4.3.bazel
new file mode 100644
index 0000000..fac5324
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.byteorder-1.4.3.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense OR MIT
+# ])
+
+rust_library(
+    name = "byteorder",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.4.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.bytes-0.4.12.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.bytes-0.4.12.bazel
new file mode 100644
index 0000000..67d4a2d
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.bytes-0.4.12.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "bytes",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.12",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__byteorder-1.4.3//:byteorder",
+            "@rules_rust_proto__iovec-0.1.4//:iovec",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.cfg-if-0.1.10.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.cfg-if-0.1.10.bazel
new file mode 100644
index 0000000..74edf2a
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.cfg-if-0.1.10.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "cfg_if",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.10",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
new file mode 100644
index 0000000..ac048f6
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "cfg_if",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.cloudabi-0.0.3.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.cloudabi-0.0.3.bazel
new file mode 100644
index 0000000..5fc5e2c
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.cloudabi-0.0.3.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # BSD-2-Clause
+# ])
+
+rust_library(
+    name = "cloudabi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "bitflags",
+        "default",
+    ],
+    crate_root = "cloudabi.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.0.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__bitflags-1.3.2//:bitflags",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.crossbeam-deque-0.7.4.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.crossbeam-deque-0.7.4.bazel
new file mode 100644
index 0000000..6e074d5
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.crossbeam-deque-0.7.4.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "crossbeam_deque",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.7.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__crossbeam-epoch-0.8.2//:crossbeam_epoch",
+            "@rules_rust_proto__crossbeam-utils-0.7.2//:crossbeam_utils",
+            "@rules_rust_proto__maybe-uninit-2.0.0//:maybe_uninit",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.crossbeam-epoch-0.8.2.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.crossbeam-epoch-0.8.2.bazel
new file mode 100644
index 0000000..fade294
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.crossbeam-epoch-0.8.2.bazel
@@ -0,0 +1,187 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "crossbeam_epoch",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "lazy_static",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.8.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__cfg-if-0.1.10//:cfg_if",
+            "@rules_rust_proto__crossbeam-epoch-0.8.2//:build_script_build",
+            "@rules_rust_proto__crossbeam-utils-0.7.2//:crossbeam_utils",
+            "@rules_rust_proto__lazy_static-1.4.0//:lazy_static",
+            "@rules_rust_proto__maybe-uninit-2.0.0//:maybe_uninit",
+            "@rules_rust_proto__memoffset-0.5.6//:memoffset",
+            "@rules_rust_proto__scopeguard-1.1.0//:scopeguard",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "crossbeam-epoch_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "lazy_static",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.8.2",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "crossbeam-epoch_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.crossbeam-queue-0.2.3.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.crossbeam-queue-0.2.3.bazel
new file mode 100644
index 0000000..54b721f
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.crossbeam-queue-0.2.3.bazel
@@ -0,0 +1,95 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0 AND BSD-2-Clause
+# ])
+
+rust_library(
+    name = "crossbeam_queue",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__cfg-if-0.1.10//:cfg_if",
+            "@rules_rust_proto__crossbeam-utils-0.7.2//:crossbeam_utils",
+            "@rules_rust_proto__maybe-uninit-2.0.0//:maybe_uninit",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.crossbeam-utils-0.7.2.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.crossbeam-utils-0.7.2.bazel
new file mode 100644
index 0000000..c43a991
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.crossbeam-utils-0.7.2.bazel
@@ -0,0 +1,183 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "crossbeam_utils",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "lazy_static",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.7.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__cfg-if-0.1.10//:cfg_if",
+            "@rules_rust_proto__crossbeam-utils-0.7.2//:build_script_build",
+            "@rules_rust_proto__lazy_static-1.4.0//:lazy_static",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "crossbeam-utils_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "lazy_static",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.7.2",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "crossbeam-utils_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.fnv-1.0.7.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.fnv-1.0.7.bazel
new file mode 100644
index 0000000..e6e2d1e
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.fnv-1.0.7.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 / MIT
+# ])
+
+rust_library(
+    name = "fnv",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.7",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.fuchsia-zircon-0.3.3.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.fuchsia-zircon-0.3.3.bazel
new file mode 100644
index 0000000..2081666
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.fuchsia-zircon-0.3.3.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # BSD-3-Clause
+# ])
+
+rust_library(
+    name = "fuchsia_zircon",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__bitflags-1.3.2//:bitflags",
+            "@rules_rust_proto__fuchsia-zircon-sys-0.3.3//:fuchsia_zircon_sys",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.fuchsia-zircon-sys-0.3.3.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.fuchsia-zircon-sys-0.3.3.bazel
new file mode 100644
index 0000000..94be648
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.fuchsia-zircon-sys-0.3.3.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # BSD-3-Clause
+# ])
+
+rust_library(
+    name = "fuchsia_zircon_sys",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.futures-0.1.31.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.futures-0.1.31.bazel
new file mode 100644
index 0000000..baf3817
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.futures-0.1.31.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "futures",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "use_std",
+        "with-deprecated",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.31",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.futures-cpupool-0.1.8.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.futures-cpupool-0.1.8.bazel
new file mode 100644
index 0000000..74399d4
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.futures-cpupool-0.1.8.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "futures_cpupool",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "with-deprecated",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__num_cpus-1.13.1//:num_cpus",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.grpc-0.6.2.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.grpc-0.6.2.bazel
new file mode 100644
index 0000000..fe04e70
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.grpc-0.6.2.bazel
@@ -0,0 +1,102 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "grpc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__base64-0.9.3//:base64",
+            "@rules_rust_proto__bytes-0.4.12//:bytes",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__futures-cpupool-0.1.8//:futures_cpupool",
+            "@rules_rust_proto__httpbis-0.7.0//:httpbis",
+            "@rules_rust_proto__log-0.4.17//:log",
+            "@rules_rust_proto__protobuf-2.8.2//:protobuf",
+            "@rules_rust_proto__tls-api-0.1.22//:tls_api",
+            "@rules_rust_proto__tls-api-stub-0.1.22//:tls_api_stub",
+            "@rules_rust_proto__tokio-core-0.1.18//:tokio_core",
+            "@rules_rust_proto__tokio-io-0.1.13//:tokio_io",
+            "@rules_rust_proto__tokio-tls-api-0.1.22//:tokio_tls_api",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.grpc-compiler-0.6.2.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.grpc-compiler-0.6.2.bazel
new file mode 100644
index 0000000..33e256e
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.grpc-compiler-0.6.2.bazel
@@ -0,0 +1,161 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "grpc_compiler",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__protobuf-2.8.2//:protobuf",
+            "@rules_rust_proto__protobuf-codegen-2.8.2//:protobuf_codegen",
+        ],
+    }),
+)
+
+rust_binary(
+    name = "protoc-gen-rust-grpc__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/bin/protoc-gen-rust-grpc.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.2",
+    deps = [
+        ":grpc_compiler",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__protobuf-2.8.2//:protobuf",
+            "@rules_rust_proto__protobuf-codegen-2.8.2//:protobuf_codegen",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel
new file mode 100644
index 0000000..c0640ca
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "hermit_abi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.19",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__libc-0.2.126//:libc",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.httpbis-0.7.0.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.httpbis-0.7.0.bazel
new file mode 100644
index 0000000..53f14d4
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.httpbis-0.7.0.bazel
@@ -0,0 +1,227 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "httpbis",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.7.0",
+    deps = [
+    ] + select_with_or({
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_proto__tokio-uds-0.1.7//:tokio_uds",
+            "@rules_rust_proto__unix_socket-0.5.0//:unix_socket",
+
+            # Common Deps
+            "@rules_rust_proto__bytes-0.4.12//:bytes",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__futures-cpupool-0.1.8//:futures_cpupool",
+            "@rules_rust_proto__httpbis-0.7.0//:build_script_build",
+            "@rules_rust_proto__log-0.4.17//:log",
+            "@rules_rust_proto__net2-0.2.37//:net2",
+            "@rules_rust_proto__tls-api-0.1.22//:tls_api",
+            "@rules_rust_proto__tls-api-stub-0.1.22//:tls_api_stub",
+            "@rules_rust_proto__tokio-core-0.1.18//:tokio_core",
+            "@rules_rust_proto__tokio-io-0.1.13//:tokio_io",
+            "@rules_rust_proto__tokio-timer-0.1.2//:tokio_timer",
+            "@rules_rust_proto__tokio-tls-api-0.1.22//:tokio_tls_api",
+            "@rules_rust_proto__void-1.0.2//:void",
+        ],
+        "//conditions:default": [
+            "@rules_rust_proto__bytes-0.4.12//:bytes",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__futures-cpupool-0.1.8//:futures_cpupool",
+            "@rules_rust_proto__httpbis-0.7.0//:build_script_build",
+            "@rules_rust_proto__log-0.4.17//:log",
+            "@rules_rust_proto__net2-0.2.37//:net2",
+            "@rules_rust_proto__tls-api-0.1.22//:tls_api",
+            "@rules_rust_proto__tls-api-stub-0.1.22//:tls_api_stub",
+            "@rules_rust_proto__tokio-core-0.1.18//:tokio_core",
+            "@rules_rust_proto__tokio-io-0.1.13//:tokio_io",
+            "@rules_rust_proto__tokio-timer-0.1.2//:tokio_timer",
+            "@rules_rust_proto__tokio-tls-api-0.1.22//:tokio_tls_api",
+            "@rules_rust_proto__void-1.0.2//:void",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "httpbis_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.7.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "httpbis_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.iovec-0.1.4.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.iovec-0.1.4.bazel
new file mode 100644
index 0000000..bdebbff
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.iovec-0.1.4.bazel
@@ -0,0 +1,117 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "iovec",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.4",
+    deps = [
+    ] + select_with_or({
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_proto__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.kernel32-sys-0.2.2.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.kernel32-sys-0.2.2.bazel
new file mode 100644
index 0000000..5e79eb1
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.kernel32-sys-0.2.2.bazel
@@ -0,0 +1,176 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "kernel32",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__kernel32-sys-0.2.2//:build_script_build",
+            "@rules_rust_proto__winapi-0.2.8//:winapi",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "kernel32-sys_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.2",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__winapi-build-0.1.1//:build",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "kernel32-sys_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel
new file mode 100644
index 0000000..d05a5bd
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "lazy_static",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+
+        # User provided rustc_flags
+        "--cfg=lazy_static_heap_impl",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.libc-0.2.126.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.libc-0.2.126.bazel
new file mode 100644
index 0000000..e720b0c
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.libc-0.2.126.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.126",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__libc-0.2.126//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "libc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.126",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "libc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.lock_api-0.3.4.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.lock_api-0.3.4.bazel
new file mode 100644
index 0000000..eeee52f
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.lock_api-0.3.4.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0/MIT
+# ])
+
+rust_library(
+    name = "lock_api",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__scopeguard-1.1.0//:scopeguard",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.log-0.3.9.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.log-0.3.9.bazel
new file mode 100644
index 0000000..600cf71
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.log-0.3.9.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "log",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "use_std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.9",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__log-0.4.17//:log",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.log-0.4.17.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.log-0.4.17.bazel
new file mode 100644
index 0000000..ca62ec0
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.log-0.4.17.bazel
@@ -0,0 +1,177 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "log",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.17",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__cfg-if-1.0.0//:cfg_if",
+            "@rules_rust_proto__log-0.4.17//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "log_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.17",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "log_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.maybe-uninit-2.0.0.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.maybe-uninit-2.0.0.bazel
new file mode 100644
index 0000000..239aa81
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.maybe-uninit-2.0.0.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "maybe_uninit",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.0.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__maybe-uninit-2.0.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "maybe-uninit_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "2.0.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "maybe-uninit_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.memoffset-0.5.6.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.memoffset-0.5.6.bazel
new file mode 100644
index 0000000..ecb0a43
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.memoffset-0.5.6.bazel
@@ -0,0 +1,177 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "memoffset",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.5.6",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__memoffset-0.5.6//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "memoffset_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.5.6",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "memoffset_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.mio-0.6.23.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.mio-0.6.23.bazel
new file mode 100644
index 0000000..c3ed309
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.mio-0.6.23.bazel
@@ -0,0 +1,151 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "mio",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "with-deprecated",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.23",
+    deps = [
+    ] + select_with_or({
+        # cfg(target_os = "fuchsia")
+        #
+        # No supported platform triples for cfg: 'cfg(target_os = "fuchsia")'
+        # Skipped dependencies: [{"id":"fuchsia-zircon 0.3.3","target":"fuchsia_zircon"},{"id":"fuchsia-zircon-sys 0.3.3","target":"fuchsia_zircon_sys"}]
+        #
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_proto__libc-0.2.126//:libc",
+
+            # Common Deps
+            "@rules_rust_proto__cfg-if-0.1.10//:cfg_if",
+            "@rules_rust_proto__iovec-0.1.4//:iovec",
+            "@rules_rust_proto__log-0.4.17//:log",
+            "@rules_rust_proto__net2-0.2.37//:net2",
+            "@rules_rust_proto__slab-0.4.7//:slab",
+        ],
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_proto__kernel32-sys-0.2.2//:kernel32",
+            "@rules_rust_proto__miow-0.2.2//:miow",
+            "@rules_rust_proto__winapi-0.2.8//:winapi",
+
+            # Common Deps
+            "@rules_rust_proto__cfg-if-0.1.10//:cfg_if",
+            "@rules_rust_proto__iovec-0.1.4//:iovec",
+            "@rules_rust_proto__log-0.4.17//:log",
+            "@rules_rust_proto__net2-0.2.37//:net2",
+            "@rules_rust_proto__slab-0.4.7//:slab",
+        ],
+        "//conditions:default": [
+            "@rules_rust_proto__cfg-if-0.1.10//:cfg_if",
+            "@rules_rust_proto__iovec-0.1.4//:iovec",
+            "@rules_rust_proto__log-0.4.17//:log",
+            "@rules_rust_proto__net2-0.2.37//:net2",
+            "@rules_rust_proto__slab-0.4.7//:slab",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.mio-uds-0.6.8.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.mio-uds-0.6.8.bazel
new file mode 100644
index 0000000..3593e95
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.mio-uds-0.6.8.bazel
@@ -0,0 +1,119 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "mio_uds",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.8",
+    deps = [
+    ] + select_with_or({
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_proto__iovec-0.1.4//:iovec",
+            "@rules_rust_proto__libc-0.2.126//:libc",
+            "@rules_rust_proto__mio-0.6.23//:mio",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.miow-0.2.2.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.miow-0.2.2.bazel
new file mode 100644
index 0000000..3305a39
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.miow-0.2.2.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "miow",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__kernel32-sys-0.2.2//:kernel32",
+            "@rules_rust_proto__net2-0.2.37//:net2",
+            "@rules_rust_proto__winapi-0.2.8//:winapi",
+            "@rules_rust_proto__ws2_32-sys-0.2.1//:ws2_32",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.net2-0.2.37.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.net2-0.2.37.bazel
new file mode 100644
index 0000000..5062966
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.net2-0.2.37.bazel
@@ -0,0 +1,133 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "net2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "duration",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.37",
+    deps = [
+    ] + select_with_or({
+        # cfg(any(target_os = "redox", unix, target_os = "wasi"))
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:wasm32-wasi",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_proto__libc-0.2.126//:libc",
+
+            # Common Deps
+            "@rules_rust_proto__cfg-if-0.1.10//:cfg_if",
+        ],
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_proto__winapi-0.3.9//:winapi",
+
+            # Common Deps
+            "@rules_rust_proto__cfg-if-0.1.10//:cfg_if",
+        ],
+        "//conditions:default": [
+            "@rules_rust_proto__cfg-if-0.1.10//:cfg_if",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.num_cpus-1.13.1.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.num_cpus-1.13.1.bazel
new file mode 100644
index 0000000..eb66e90
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.num_cpus-1.13.1.bazel
@@ -0,0 +1,125 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "num_cpus",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.13.1",
+    deps = [
+    ] + select_with_or({
+        # cfg(all(any(target_arch = "x86_64", target_arch = "aarch64"), target_os = "hermit"))
+        #
+        # No supported platform triples for cfg: 'cfg(all(any(target_arch = "x86_64", target_arch = "aarch64"), target_os = "hermit"))'
+        # Skipped dependencies: [{"id":"hermit-abi 0.1.19","target":"hermit_abi"}]
+        #
+        # cfg(not(windows))
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:riscv32imc-unknown-none-elf",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:wasm32-unknown-unknown",
+            "@rules_rust//rust/platform:wasm32-wasi",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_proto__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.parking_lot-0.9.0.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.parking_lot-0.9.0.bazel
new file mode 100644
index 0000000..2563828
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.parking_lot-0.9.0.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0/MIT
+# ])
+
+rust_library(
+    name = "parking_lot",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.9.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__lock_api-0.3.4//:lock_api",
+            "@rules_rust_proto__parking_lot-0.9.0//:build_script_build",
+            "@rules_rust_proto__parking_lot_core-0.6.2//:parking_lot_core",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "parking_lot_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.9.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__rustc_version-0.2.3//:rustc_version",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "parking_lot_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.parking_lot_core-0.6.2.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.parking_lot_core-0.6.2.bazel
new file mode 100644
index 0000000..32d0707
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.parking_lot_core-0.6.2.bazel
@@ -0,0 +1,230 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0/MIT
+# ])
+
+rust_library(
+    name = "parking_lot_core",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.2",
+    deps = [
+    ] + select_with_or({
+        # cfg(target_os = "cloudabi")
+        #
+        # No supported platform triples for cfg: 'cfg(target_os = "cloudabi")'
+        # Skipped dependencies: [{"id":"cloudabi 0.0.3","target":"cloudabi"}]
+        #
+        # cfg(target_os = "redox")
+        #
+        # No supported platform triples for cfg: 'cfg(target_os = "redox")'
+        # Skipped dependencies: [{"id":"redox_syscall 0.1.57","target":"syscall"}]
+        #
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_proto__libc-0.2.126//:libc",
+
+            # Common Deps
+            "@rules_rust_proto__cfg-if-0.1.10//:cfg_if",
+            "@rules_rust_proto__parking_lot_core-0.6.2//:build_script_build",
+            "@rules_rust_proto__smallvec-0.6.14//:smallvec",
+        ],
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_proto__winapi-0.3.9//:winapi",
+
+            # Common Deps
+            "@rules_rust_proto__cfg-if-0.1.10//:cfg_if",
+            "@rules_rust_proto__parking_lot_core-0.6.2//:build_script_build",
+            "@rules_rust_proto__smallvec-0.6.14//:smallvec",
+        ],
+        "//conditions:default": [
+            "@rules_rust_proto__cfg-if-0.1.10//:cfg_if",
+            "@rules_rust_proto__parking_lot_core-0.6.2//:build_script_build",
+            "@rules_rust_proto__smallvec-0.6.14//:smallvec",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "parking_lot_core_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.6.2",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__rustc_version-0.2.3//:rustc_version",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "parking_lot_core_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.protobuf-2.8.2.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.protobuf-2.8.2.bazel
new file mode 100644
index 0000000..aa85d0b
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.protobuf-2.8.2.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "protobuf",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "bytes",
+        "with-bytes",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.8.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__bytes-0.4.12//:bytes",
+            "@rules_rust_proto__protobuf-2.8.2//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "protobuf_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "bytes",
+        "with-bytes",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "2.8.2",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "protobuf_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.protobuf-codegen-2.8.2.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.protobuf-codegen-2.8.2.bazel
new file mode 100644
index 0000000..5a63331
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.protobuf-codegen-2.8.2.bazel
@@ -0,0 +1,226 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "protobuf_codegen",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.8.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__protobuf-2.8.2//:protobuf",
+        ],
+    }),
+)
+
+rust_binary(
+    name = "protoc-gen-rust__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/bin/protoc-gen-rust.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.8.2",
+    deps = [
+        ":protobuf_codegen",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__protobuf-2.8.2//:protobuf",
+        ],
+    }),
+)
+
+rust_binary(
+    name = "protobuf-bin-gen-rust-do-not-use__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/bin/protobuf-bin-gen-rust-do-not-use.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.8.2",
+    deps = [
+        ":protobuf_codegen",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__protobuf-2.8.2//:protobuf",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.redox_syscall-0.1.57.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.redox_syscall-0.1.57.bazel
new file mode 100644
index 0000000..7a078cb
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.redox_syscall-0.1.57.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "syscall",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.57",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.rustc_version-0.2.3.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.rustc_version-0.2.3.bazel
new file mode 100644
index 0000000..9780f59
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.rustc_version-0.2.3.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "rustc_version",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__semver-0.9.0//:semver",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.safemem-0.3.3.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.safemem-0.3.3.bazel
new file mode 100644
index 0000000..02ef8a6
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.safemem-0.3.3.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "safemem",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.scoped-tls-0.1.2.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.scoped-tls-0.1.2.bazel
new file mode 100644
index 0000000..e764fae
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.scoped-tls-0.1.2.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "scoped_tls",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.scopeguard-1.1.0.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.scopeguard-1.1.0.bazel
new file mode 100644
index 0000000..53c44b7
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.scopeguard-1.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "scopeguard",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.semver-0.9.0.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.semver-0.9.0.bazel
new file mode 100644
index 0000000..ae3d4a0
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.semver-0.9.0.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "semver",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.9.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__semver-parser-0.7.0//:semver_parser",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.semver-parser-0.7.0.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.semver-parser-0.7.0.bazel
new file mode 100644
index 0000000..de4e9d4
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.semver-parser-0.7.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "semver_parser",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.7.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.slab-0.3.0.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.slab-0.3.0.bazel
new file mode 100644
index 0000000..d4998ed
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.slab-0.3.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "slab",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.slab-0.4.7.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.slab-0.4.7.bazel
new file mode 100644
index 0000000..feb5d93
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.slab-0.4.7.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "slab",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.7",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__slab-0.4.7//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "slab_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.7",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "slab_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.smallvec-0.6.14.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.smallvec-0.6.14.bazel
new file mode 100644
index 0000000..a350125
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.smallvec-0.6.14.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "smallvec",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.14",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__maybe-uninit-2.0.0//:maybe_uninit",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tls-api-0.1.22.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tls-api-0.1.22.bazel
new file mode 100644
index 0000000..0dd4b51
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tls-api-0.1.22.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "tls_api",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.22",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__log-0.4.17//:log",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tls-api-stub-0.1.22.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tls-api-stub-0.1.22.bazel
new file mode 100644
index 0000000..3189886
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tls-api-stub-0.1.22.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "tls_api_stub",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.22",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__tls-api-0.1.22//:tls_api",
+            "@rules_rust_proto__void-1.0.2//:void",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-0.1.22.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-0.1.22.bazel
new file mode 100644
index 0000000..c33ef7b
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-0.1.22.bazel
@@ -0,0 +1,173 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "bytes",
+        "codec",
+        "default",
+        "fs",
+        "io",
+        "mio",
+        "num_cpus",
+        "reactor",
+        "rt-full",
+        "sync",
+        "tcp",
+        "timer",
+        "tokio-codec",
+        "tokio-current-thread",
+        "tokio-executor",
+        "tokio-fs",
+        "tokio-io",
+        "tokio-reactor",
+        "tokio-sync",
+        "tokio-tcp",
+        "tokio-threadpool",
+        "tokio-timer",
+        "tokio-udp",
+        "tokio-uds",
+        "udp",
+        "uds",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.22",
+    deps = [
+    ] + select_with_or({
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_proto__tokio-uds-0.2.7//:tokio_uds",
+
+            # Common Deps
+            "@rules_rust_proto__bytes-0.4.12//:bytes",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__mio-0.6.23//:mio",
+            "@rules_rust_proto__num_cpus-1.13.1//:num_cpus",
+            "@rules_rust_proto__tokio-codec-0.1.2//:tokio_codec",
+            "@rules_rust_proto__tokio-current-thread-0.1.7//:tokio_current_thread",
+            "@rules_rust_proto__tokio-executor-0.1.10//:tokio_executor",
+            "@rules_rust_proto__tokio-fs-0.1.7//:tokio_fs",
+            "@rules_rust_proto__tokio-io-0.1.13//:tokio_io",
+            "@rules_rust_proto__tokio-reactor-0.1.12//:tokio_reactor",
+            "@rules_rust_proto__tokio-sync-0.1.8//:tokio_sync",
+            "@rules_rust_proto__tokio-tcp-0.1.4//:tokio_tcp",
+            "@rules_rust_proto__tokio-threadpool-0.1.18//:tokio_threadpool",
+            "@rules_rust_proto__tokio-timer-0.2.13//:tokio_timer",
+            "@rules_rust_proto__tokio-udp-0.1.6//:tokio_udp",
+        ],
+        "//conditions:default": [
+            "@rules_rust_proto__bytes-0.4.12//:bytes",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__mio-0.6.23//:mio",
+            "@rules_rust_proto__num_cpus-1.13.1//:num_cpus",
+            "@rules_rust_proto__tokio-codec-0.1.2//:tokio_codec",
+            "@rules_rust_proto__tokio-current-thread-0.1.7//:tokio_current_thread",
+            "@rules_rust_proto__tokio-executor-0.1.10//:tokio_executor",
+            "@rules_rust_proto__tokio-fs-0.1.7//:tokio_fs",
+            "@rules_rust_proto__tokio-io-0.1.13//:tokio_io",
+            "@rules_rust_proto__tokio-reactor-0.1.12//:tokio_reactor",
+            "@rules_rust_proto__tokio-sync-0.1.8//:tokio_sync",
+            "@rules_rust_proto__tokio-tcp-0.1.4//:tokio_tcp",
+            "@rules_rust_proto__tokio-threadpool-0.1.18//:tokio_threadpool",
+            "@rules_rust_proto__tokio-timer-0.2.13//:tokio_timer",
+            "@rules_rust_proto__tokio-udp-0.1.6//:tokio_udp",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-codec-0.1.2.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-codec-0.1.2.bazel
new file mode 100644
index 0000000..26a586c
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-codec-0.1.2.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio_codec",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__bytes-0.4.12//:bytes",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__tokio-io-0.1.13//:tokio_io",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-core-0.1.18.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-core-0.1.18.bazel
new file mode 100644
index 0000000..a7532c8
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-core-0.1.18.bazel
@@ -0,0 +1,101 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "tokio_core",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.18",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__bytes-0.4.12//:bytes",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__iovec-0.1.4//:iovec",
+            "@rules_rust_proto__log-0.4.17//:log",
+            "@rules_rust_proto__mio-0.6.23//:mio",
+            "@rules_rust_proto__scoped-tls-0.1.2//:scoped_tls",
+            "@rules_rust_proto__tokio-0.1.22//:tokio",
+            "@rules_rust_proto__tokio-executor-0.1.10//:tokio_executor",
+            "@rules_rust_proto__tokio-io-0.1.13//:tokio_io",
+            "@rules_rust_proto__tokio-reactor-0.1.12//:tokio_reactor",
+            "@rules_rust_proto__tokio-timer-0.2.13//:tokio_timer",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-current-thread-0.1.7.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-current-thread-0.1.7.bazel
new file mode 100644
index 0000000..91dc929
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-current-thread-0.1.7.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio_current_thread",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.7",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__tokio-executor-0.1.10//:tokio_executor",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-executor-0.1.10.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-executor-0.1.10.bazel
new file mode 100644
index 0000000..7a0f588
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-executor-0.1.10.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio_executor",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.10",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__crossbeam-utils-0.7.2//:crossbeam_utils",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-fs-0.1.7.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-fs-0.1.7.bazel
new file mode 100644
index 0000000..42b51dc
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-fs-0.1.7.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio_fs",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.7",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__tokio-io-0.1.13//:tokio_io",
+            "@rules_rust_proto__tokio-threadpool-0.1.18//:tokio_threadpool",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-io-0.1.13.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-io-0.1.13.bazel
new file mode 100644
index 0000000..36fb632
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-io-0.1.13.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio_io",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.13",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__bytes-0.4.12//:bytes",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__log-0.4.17//:log",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-reactor-0.1.12.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-reactor-0.1.12.bazel
new file mode 100644
index 0000000..f2eec69
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-reactor-0.1.12.bazel
@@ -0,0 +1,101 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio_reactor",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.12",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__crossbeam-utils-0.7.2//:crossbeam_utils",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__lazy_static-1.4.0//:lazy_static",
+            "@rules_rust_proto__log-0.4.17//:log",
+            "@rules_rust_proto__mio-0.6.23//:mio",
+            "@rules_rust_proto__num_cpus-1.13.1//:num_cpus",
+            "@rules_rust_proto__parking_lot-0.9.0//:parking_lot",
+            "@rules_rust_proto__slab-0.4.7//:slab",
+            "@rules_rust_proto__tokio-executor-0.1.10//:tokio_executor",
+            "@rules_rust_proto__tokio-io-0.1.13//:tokio_io",
+            "@rules_rust_proto__tokio-sync-0.1.8//:tokio_sync",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-sync-0.1.8.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-sync-0.1.8.bazel
new file mode 100644
index 0000000..34566c0
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-sync-0.1.8.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio_sync",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__fnv-1.0.7//:fnv",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-tcp-0.1.4.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-tcp-0.1.4.bazel
new file mode 100644
index 0000000..743f8b0
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-tcp-0.1.4.bazel
@@ -0,0 +1,96 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio_tcp",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__bytes-0.4.12//:bytes",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__iovec-0.1.4//:iovec",
+            "@rules_rust_proto__mio-0.6.23//:mio",
+            "@rules_rust_proto__tokio-io-0.1.13//:tokio_io",
+            "@rules_rust_proto__tokio-reactor-0.1.12//:tokio_reactor",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-threadpool-0.1.18.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-threadpool-0.1.18.bazel
new file mode 100644
index 0000000..cafb9cb
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-threadpool-0.1.18.bazel
@@ -0,0 +1,99 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio_threadpool",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.18",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__crossbeam-deque-0.7.4//:crossbeam_deque",
+            "@rules_rust_proto__crossbeam-queue-0.2.3//:crossbeam_queue",
+            "@rules_rust_proto__crossbeam-utils-0.7.2//:crossbeam_utils",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__lazy_static-1.4.0//:lazy_static",
+            "@rules_rust_proto__log-0.4.17//:log",
+            "@rules_rust_proto__num_cpus-1.13.1//:num_cpus",
+            "@rules_rust_proto__slab-0.4.7//:slab",
+            "@rules_rust_proto__tokio-executor-0.1.10//:tokio_executor",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-timer-0.1.2.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-timer-0.1.2.bazel
new file mode 100644
index 0000000..79c91e9
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-timer-0.1.2.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "tokio_timer",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__slab-0.3.0//:slab",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-timer-0.2.13.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-timer-0.2.13.bazel
new file mode 100644
index 0000000..6c2f050
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-timer-0.2.13.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio_timer",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.13",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__crossbeam-utils-0.7.2//:crossbeam_utils",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__slab-0.4.7//:slab",
+            "@rules_rust_proto__tokio-executor-0.1.10//:tokio_executor",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-tls-api-0.1.22.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-tls-api-0.1.22.bazel
new file mode 100644
index 0000000..b4a36f2
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-tls-api-0.1.22.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "tokio_tls_api",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.22",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__tls-api-0.1.22//:tls_api",
+            "@rules_rust_proto__tokio-io-0.1.13//:tokio_io",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-udp-0.1.6.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-udp-0.1.6.bazel
new file mode 100644
index 0000000..ae02c80
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-udp-0.1.6.bazel
@@ -0,0 +1,97 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio_udp",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.6",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__bytes-0.4.12//:bytes",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__log-0.4.17//:log",
+            "@rules_rust_proto__mio-0.6.23//:mio",
+            "@rules_rust_proto__tokio-codec-0.1.2//:tokio_codec",
+            "@rules_rust_proto__tokio-io-0.1.13//:tokio_io",
+            "@rules_rust_proto__tokio-reactor-0.1.12//:tokio_reactor",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-uds-0.1.7.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-uds-0.1.7.bazel
new file mode 100644
index 0000000..c27f778
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-uds-0.1.7.bazel
@@ -0,0 +1,99 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "tokio_uds",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.7",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__bytes-0.4.12//:bytes",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__iovec-0.1.4//:iovec",
+            "@rules_rust_proto__libc-0.2.126//:libc",
+            "@rules_rust_proto__log-0.3.9//:log",
+            "@rules_rust_proto__mio-0.6.23//:mio",
+            "@rules_rust_proto__mio-uds-0.6.8//:mio_uds",
+            "@rules_rust_proto__tokio-core-0.1.18//:tokio_core",
+            "@rules_rust_proto__tokio-io-0.1.13//:tokio_io",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-uds-0.2.7.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-uds-0.2.7.bazel
new file mode 100644
index 0000000..8d0235f
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.tokio-uds-0.2.7.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "tokio_uds",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.7",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__bytes-0.4.12//:bytes",
+            "@rules_rust_proto__futures-0.1.31//:futures",
+            "@rules_rust_proto__iovec-0.1.4//:iovec",
+            "@rules_rust_proto__libc-0.2.126//:libc",
+            "@rules_rust_proto__log-0.4.17//:log",
+            "@rules_rust_proto__mio-0.6.23//:mio",
+            "@rules_rust_proto__mio-uds-0.6.8//:mio_uds",
+            "@rules_rust_proto__tokio-codec-0.1.2//:tokio_codec",
+            "@rules_rust_proto__tokio-io-0.1.13//:tokio_io",
+            "@rules_rust_proto__tokio-reactor-0.1.12//:tokio_reactor",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.unix_socket-0.5.0.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.unix_socket-0.5.0.bazel
new file mode 100644
index 0000000..f78fb1f
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.unix_socket-0.5.0.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "unix_socket",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.5.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__cfg-if-0.1.10//:cfg_if",
+            "@rules_rust_proto__libc-0.2.126//:libc",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.void-1.0.2.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.void-1.0.2.bazel
new file mode 100644
index 0000000..cd0e4bc
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.void-1.0.2.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "void",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.winapi-0.2.8.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.winapi-0.2.8.bazel
new file mode 100644
index 0000000..ff2af66
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.winapi-0.2.8.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "winapi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.winapi-0.3.9.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.winapi-0.3.9.bazel
new file mode 100644
index 0000000..70452ae
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.winapi-0.3.9.bazel
@@ -0,0 +1,206 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "winapi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "errhandlingapi",
+        "handleapi",
+        "minwindef",
+        "ntstatus",
+        "winbase",
+        "winerror",
+        "winnt",
+        "winsock2",
+        "ws2def",
+        "ws2ipdef",
+        "ws2tcpip",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.9",
+    deps = [
+    ] + select_with_or({
+        # i686-pc-windows-gnu
+        #
+        # No supported platform triples for cfg: 'i686-pc-windows-gnu'
+        # Skipped dependencies: [{"id":"winapi-i686-pc-windows-gnu 0.4.0","target":"winapi_i686_pc_windows_gnu"}]
+        #
+        # x86_64-pc-windows-gnu
+        #
+        # No supported platform triples for cfg: 'x86_64-pc-windows-gnu'
+        # Skipped dependencies: [{"id":"winapi-x86_64-pc-windows-gnu 0.4.0","target":"winapi_x86_64_pc_windows_gnu"}]
+        #
+        "//conditions:default": [
+            "@rules_rust_proto__winapi-0.3.9//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "winapi_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "errhandlingapi",
+        "handleapi",
+        "minwindef",
+        "ntstatus",
+        "winbase",
+        "winerror",
+        "winnt",
+        "winsock2",
+        "ws2def",
+        "ws2ipdef",
+        "ws2tcpip",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.3.9",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "winapi_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.winapi-build-0.1.1.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.winapi-build-0.1.1.bazel
new file mode 100644
index 0000000..90d09f2
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.winapi-build-0.1.1.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "build",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
new file mode 100644
index 0000000..0ff44fd
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "winapi_i686_pc_windows_gnu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__winapi-i686-pc-windows-gnu-0.4.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "winapi-i686-pc-windows-gnu_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "winapi-i686-pc-windows-gnu_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
new file mode 100644
index 0000000..a4fb59f
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "winapi_x86_64_pc_windows_gnu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__winapi-x86_64-pc-windows-gnu-0.4.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "winapi-x86_64-pc-windows-gnu_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "winapi-x86_64-pc-windows-gnu_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/BUILD.ws2_32-sys-0.2.1.bazel b/third_party/rules_rust/proto/3rdparty/crates/BUILD.ws2_32-sys-0.2.1.bazel
new file mode 100644
index 0000000..591c218
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/BUILD.ws2_32-sys-0.2.1.bazel
@@ -0,0 +1,176 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "ws2_32",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__winapi-0.2.8//:winapi",
+            "@rules_rust_proto__ws2_32-sys-0.2.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "ws2_32-sys_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_proto__winapi-build-0.1.1//:build",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "ws2_32-sys_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/proto/3rdparty/crates/crates.bzl b/third_party/rules_rust/proto/3rdparty/crates/crates.bzl
new file mode 100644
index 0000000..5a694ea
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/crates.bzl
@@ -0,0 +1,25 @@
+###############################################################################
+# @generated
+# This file is auto-generated by the cargo-bazel tool.
+#
+# DO NOT MODIFY: Local changes may be replaced in future executions.
+###############################################################################
+"""Rules for defining repositories for remote `crates_vendor` repositories"""
+
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:crates_vendor.bzl", "crates_vendor_remote_repository")
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//proto/3rdparty/crates:defs.bzl", _crate_repositories = "crate_repositories")
+
+def crate_repositories():
+    maybe(
+        crates_vendor_remote_repository,
+        name = "rules_rust_proto",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.bazel"),
+        defs_module = Label("@rules_rust//proto/3rdparty/crates:defs.bzl"),
+    )
+
+    _crate_repositories()
diff --git a/third_party/rules_rust/proto/3rdparty/crates/defs.bzl b/third_party/rules_rust/proto/3rdparty/crates/defs.bzl
new file mode 100644
index 0000000..b19e46e
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/crates/defs.bzl
@@ -0,0 +1,1143 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //proto/3rdparty:crates_vendor
+###############################################################################
+"""
+# `crates_repository` API
+
+- [aliases](#aliases)
+- [crate_deps](#crate_deps)
+- [all_crate_deps](#all_crate_deps)
+- [crate_repositories](#crate_repositories)
+
+"""
+
+load("@bazel_skylib//lib:selects.bzl", "selects")
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+###############################################################################
+# MACROS API
+###############################################################################
+
+# An identifier that represent common dependencies (unconditional).
+_COMMON_CONDITION = ""
+
+def _flatten_dependency_maps(all_dependency_maps):
+    """Flatten a list of dependency maps into one dictionary.
+
+    Dependency maps have the following structure:
+
+    ```python
+    DEPENDENCIES_MAP = {
+        # The first key in the map is a Bazel package
+        # name of the workspace this file is defined in.
+        "workspace_member_package": {
+
+            # Not all dependnecies are supported for all platforms.
+            # the condition key is the condition required to be true
+            # on the host platform.
+            "condition": {
+
+                # An alias to a crate target.     # The label of the crate target the
+                # Aliases are only crate names.   # package name refers to.
+                "package_name":                   "@full//:label",
+            }
+        }
+    }
+    ```
+
+    Args:
+        all_dependency_maps (list): A list of dicts as described above
+
+    Returns:
+        dict: A dictionary as described above
+    """
+    dependencies = {}
+
+    for workspace_deps_map in all_dependency_maps:
+        for pkg_name, conditional_deps_map in workspace_deps_map.items():
+            if pkg_name not in dependencies:
+                non_frozen_map = dict()
+                for key, values in conditional_deps_map.items():
+                    non_frozen_map.update({key: dict(values.items())})
+                dependencies.setdefault(pkg_name, non_frozen_map)
+                continue
+
+            for condition, deps_map in conditional_deps_map.items():
+                # If the condition has not been recorded, do so and continue
+                if condition not in dependencies[pkg_name]:
+                    dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))
+                    continue
+
+                # Alert on any miss-matched dependencies
+                inconsistent_entries = []
+                for crate_name, crate_label in deps_map.items():
+                    existing = dependencies[pkg_name][condition].get(crate_name)
+                    if existing and existing != crate_label:
+                        inconsistent_entries.append((crate_name, existing, crate_label))
+                    dependencies[pkg_name][condition].update({crate_name: crate_label})
+
+    return dependencies
+
+def crate_deps(deps, package_name = None):
+    """Finds the fully qualified label of the requested crates for the package where this macro is called.
+
+    Args:
+        deps (list): The desired list of crate targets.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()`.
+
+    Returns:
+        list: A list of labels to generated rust targets (str)
+    """
+
+    if not deps:
+        return []
+
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Join both sets of dependencies
+    dependencies = _flatten_dependency_maps([
+        _NORMAL_DEPENDENCIES,
+        _NORMAL_DEV_DEPENDENCIES,
+        _PROC_MACRO_DEPENDENCIES,
+        _PROC_MACRO_DEV_DEPENDENCIES,
+        _BUILD_DEPENDENCIES,
+        _BUILD_PROC_MACRO_DEPENDENCIES,
+    ]).pop(package_name, {})
+
+    # Combine all conditional packages so we can easily index over a flat list
+    # TODO: Perhaps this should actually return select statements and maintain
+    # the conditionals of the dependencies
+    flat_deps = {}
+    for deps_set in dependencies.values():
+        for crate_name, crate_label in deps_set.items():
+            flat_deps.update({crate_name: crate_label})
+
+    missing_crates = []
+    crate_targets = []
+    for crate_target in deps:
+        if crate_target not in flat_deps:
+            missing_crates.append(crate_target)
+        else:
+            crate_targets.append(flat_deps[crate_target])
+
+    if missing_crates:
+        fail("Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`".format(
+            missing_crates,
+            package_name,
+            dependencies,
+        ))
+
+    return crate_targets
+
+def all_crate_deps(
+        normal = False,
+        normal_dev = False,
+        proc_macro = False,
+        proc_macro_dev = False,
+        build = False,
+        build_proc_macro = False,
+        package_name = None):
+    """Finds the fully qualified label of all requested direct crate dependencies \
+    for the package where this macro is called.
+
+    If no parameters are set, all normal dependencies are returned. Setting any one flag will
+    otherwise impact the contents of the returned list.
+
+    Args:
+        normal (bool, optional): If True, normal dependencies are included in the
+            output list.
+        normal_dev (bool, optional): If True, normla dev dependencies will be
+            included in the output list..
+        proc_macro (bool, optional): If True, proc_macro dependencies are included
+            in the output list.
+        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
+            included in the output list.
+        build (bool, optional): If True, build dependencies are included
+            in the output list.
+        build_proc_macro (bool, optional): If True, build proc_macro dependencies are
+            included in the output list.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()` when unset.
+
+    Returns:
+        list: A list of labels to generated rust targets (str)
+    """
+
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Determine the relevant maps to use
+    all_dependency_maps = []
+    if normal:
+        all_dependency_maps.append(_NORMAL_DEPENDENCIES)
+    if normal_dev:
+        all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)
+    if proc_macro:
+        all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)
+    if proc_macro_dev:
+        all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)
+    if build:
+        all_dependency_maps.append(_BUILD_DEPENDENCIES)
+    if build_proc_macro:
+        all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)
+
+    # Default to always using normal dependencies
+    if not all_dependency_maps:
+        all_dependency_maps.append(_NORMAL_DEPENDENCIES)
+
+    dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
+
+    if not dependencies:
+        if dependencies == None:
+            fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
+        else:
+            return []
+
+    crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
+    for condition, deps in dependencies.items():
+        crate_deps += selects.with_or({_CONDITIONS[condition]: deps.values()})
+
+    return crate_deps
+
+def aliases(
+        normal = False,
+        normal_dev = False,
+        proc_macro = False,
+        proc_macro_dev = False,
+        build = False,
+        build_proc_macro = False,
+        package_name = None):
+    """Produces a map of Crate alias names to their original label
+
+    If no dependency kinds are specified, `normal` and `proc_macro` are used by default.
+    Setting any one flag will otherwise determine the contents of the returned dict.
+
+    Args:
+        normal (bool, optional): If True, normal dependencies are included in the
+            output list.
+        normal_dev (bool, optional): If True, normla dev dependencies will be
+            included in the output list..
+        proc_macro (bool, optional): If True, proc_macro dependencies are included
+            in the output list.
+        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
+            included in the output list.
+        build (bool, optional): If True, build dependencies are included
+            in the output list.
+        build_proc_macro (bool, optional): If True, build proc_macro dependencies are
+            included in the output list.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()` when unset.
+
+    Returns:
+        dict: The aliases of all associated packages
+    """
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Determine the relevant maps to use
+    all_aliases_maps = []
+    if normal:
+        all_aliases_maps.append(_NORMAL_ALIASES)
+    if normal_dev:
+        all_aliases_maps.append(_NORMAL_DEV_ALIASES)
+    if proc_macro:
+        all_aliases_maps.append(_PROC_MACRO_ALIASES)
+    if proc_macro_dev:
+        all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)
+    if build:
+        all_aliases_maps.append(_BUILD_ALIASES)
+    if build_proc_macro:
+        all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)
+
+    # Default to always using normal aliases
+    if not all_aliases_maps:
+        all_aliases_maps.append(_NORMAL_ALIASES)
+        all_aliases_maps.append(_PROC_MACRO_ALIASES)
+
+    aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)
+
+    if not aliases:
+        return dict()
+
+    common_items = aliases.pop(_COMMON_CONDITION, {}).items()
+
+    # If there are only common items in the dictionary, immediately return them
+    if not len(aliases.keys()) == 1:
+        return dict(common_items)
+
+    # Build a single select statement where each conditional has accounted for the
+    # common set of aliases.
+    crate_aliases = {"//conditions:default": common_items}
+    for condition, deps in aliases.items():
+        condition_triples = _CONDITIONS[condition]
+        if condition_triples in crate_aliases:
+            crate_aliases[condition_triples].update(deps)
+        else:
+            crate_aliases.update({_CONDITIONS[condition]: dict(deps.items() + common_items)})
+
+    return selects.with_or(crate_aliases)
+
+###############################################################################
+# WORKSPACE MEMBER DEPS AND ALIASES
+###############################################################################
+
+_NORMAL_DEPENDENCIES = {
+    "": {
+        _COMMON_CONDITION: {
+            "grpc": "@rules_rust_proto__grpc-0.6.2//:grpc",
+            "grpc-compiler": "@rules_rust_proto__grpc-compiler-0.6.2//:grpc_compiler",
+            "log": "@rules_rust_proto__log-0.4.17//:log",
+            "protobuf": "@rules_rust_proto__protobuf-2.8.2//:protobuf",
+            "protobuf-codegen": "@rules_rust_proto__protobuf-codegen-2.8.2//:protobuf_codegen",
+            "tls-api": "@rules_rust_proto__tls-api-0.1.22//:tls_api",
+            "tls-api-stub": "@rules_rust_proto__tls-api-stub-0.1.22//:tls_api_stub",
+        },
+    },
+}
+
+_NORMAL_ALIASES = {
+    "": {
+        _COMMON_CONDITION: {
+        },
+    },
+}
+
+_NORMAL_DEV_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_NORMAL_DEV_ALIASES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_ALIASES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEV_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEV_ALIASES = {
+    "": {
+    },
+}
+
+_BUILD_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_BUILD_ALIASES = {
+    "": {
+    },
+}
+
+_BUILD_PROC_MACRO_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_BUILD_PROC_MACRO_ALIASES = {
+    "": {
+    },
+}
+
+_CONDITIONS = {
+    "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [],
+    "cfg(any(target_os = \"redox\", unix, target_os = \"wasi\"))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(not(windows))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "riscv32imc-unknown-none-elf", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(target_os = \"cloudabi\")": [],
+    "cfg(target_os = \"fuchsia\")": [],
+    "cfg(target_os = \"redox\")": [],
+    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(windows)": ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc"],
+    "i686-pc-windows-gnu": [],
+    "x86_64-pc-windows-gnu": [],
+}
+
+###############################################################################
+
+def crate_repositories():
+    """A macro for defining repositories for all generated crates"""
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__autocfg-1.1.0",
+        sha256 = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/autocfg/1.1.0/download"],
+        strip_prefix = "autocfg-1.1.0",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.autocfg-1.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__base64-0.9.3",
+        sha256 = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/base64/0.9.3/download"],
+        strip_prefix = "base64-0.9.3",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.base64-0.9.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__bitflags-1.3.2",
+        sha256 = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/bitflags/1.3.2/download"],
+        strip_prefix = "bitflags-1.3.2",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.bitflags-1.3.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__byteorder-1.4.3",
+        sha256 = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/byteorder/1.4.3/download"],
+        strip_prefix = "byteorder-1.4.3",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.byteorder-1.4.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__bytes-0.4.12",
+        sha256 = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/bytes/0.4.12/download"],
+        strip_prefix = "bytes-0.4.12",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.bytes-0.4.12.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__cfg-if-0.1.10",
+        sha256 = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/cfg-if/0.1.10/download"],
+        strip_prefix = "cfg-if-0.1.10",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.cfg-if-0.1.10.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__cfg-if-1.0.0",
+        sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/cfg-if/1.0.0/download"],
+        strip_prefix = "cfg-if-1.0.0",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.cfg-if-1.0.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__cloudabi-0.0.3",
+        sha256 = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/cloudabi/0.0.3/download"],
+        strip_prefix = "cloudabi-0.0.3",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.cloudabi-0.0.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__crossbeam-deque-0.7.4",
+        sha256 = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/crossbeam-deque/0.7.4/download"],
+        strip_prefix = "crossbeam-deque-0.7.4",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.crossbeam-deque-0.7.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__crossbeam-epoch-0.8.2",
+        sha256 = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/crossbeam-epoch/0.8.2/download"],
+        strip_prefix = "crossbeam-epoch-0.8.2",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.crossbeam-epoch-0.8.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__crossbeam-queue-0.2.3",
+        sha256 = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/crossbeam-queue/0.2.3/download"],
+        strip_prefix = "crossbeam-queue-0.2.3",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.crossbeam-queue-0.2.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__crossbeam-utils-0.7.2",
+        sha256 = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/crossbeam-utils/0.7.2/download"],
+        strip_prefix = "crossbeam-utils-0.7.2",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.crossbeam-utils-0.7.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__fnv-1.0.7",
+        sha256 = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/fnv/1.0.7/download"],
+        strip_prefix = "fnv-1.0.7",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.fnv-1.0.7.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__fuchsia-zircon-0.3.3",
+        sha256 = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/fuchsia-zircon/0.3.3/download"],
+        strip_prefix = "fuchsia-zircon-0.3.3",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.fuchsia-zircon-0.3.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__fuchsia-zircon-sys-0.3.3",
+        sha256 = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/fuchsia-zircon-sys/0.3.3/download"],
+        strip_prefix = "fuchsia-zircon-sys-0.3.3",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.fuchsia-zircon-sys-0.3.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__futures-0.1.31",
+        sha256 = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/futures/0.1.31/download"],
+        strip_prefix = "futures-0.1.31",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.futures-0.1.31.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__futures-cpupool-0.1.8",
+        sha256 = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/futures-cpupool/0.1.8/download"],
+        strip_prefix = "futures-cpupool-0.1.8",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.futures-cpupool-0.1.8.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__grpc-0.6.2",
+        sha256 = "2aaf1d741fe6f3413f1f9f71b99f5e4e26776d563475a8a53ce53a73a8534c1d",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/grpc/0.6.2/download"],
+        strip_prefix = "grpc-0.6.2",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.grpc-0.6.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__grpc-compiler-0.6.2",
+        sha256 = "907274ce8ee7b40a0d0b0db09022ea22846a47cfb1fc8ad2c983c70001b4ffb1",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/grpc-compiler/0.6.2/download"],
+        strip_prefix = "grpc-compiler-0.6.2",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.grpc-compiler-0.6.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__hermit-abi-0.1.19",
+        sha256 = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/hermit-abi/0.1.19/download"],
+        strip_prefix = "hermit-abi-0.1.19",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.hermit-abi-0.1.19.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__httpbis-0.7.0",
+        sha256 = "7689cfa896b2a71da4f16206af167542b75d242b6906313e53857972a92d5614",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/httpbis/0.7.0/download"],
+        strip_prefix = "httpbis-0.7.0",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.httpbis-0.7.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__iovec-0.1.4",
+        sha256 = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/iovec/0.1.4/download"],
+        strip_prefix = "iovec-0.1.4",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.iovec-0.1.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__kernel32-sys-0.2.2",
+        sha256 = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/kernel32-sys/0.2.2/download"],
+        strip_prefix = "kernel32-sys-0.2.2",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.kernel32-sys-0.2.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__lazy_static-1.4.0",
+        sha256 = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/lazy_static/1.4.0/download"],
+        strip_prefix = "lazy_static-1.4.0",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.lazy_static-1.4.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__libc-0.2.126",
+        sha256 = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/libc/0.2.126/download"],
+        strip_prefix = "libc-0.2.126",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.libc-0.2.126.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__lock_api-0.3.4",
+        sha256 = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/lock_api/0.3.4/download"],
+        strip_prefix = "lock_api-0.3.4",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.lock_api-0.3.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__log-0.3.9",
+        sha256 = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/log/0.3.9/download"],
+        strip_prefix = "log-0.3.9",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.log-0.3.9.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__log-0.4.17",
+        sha256 = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/log/0.4.17/download"],
+        strip_prefix = "log-0.4.17",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.log-0.4.17.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__maybe-uninit-2.0.0",
+        sha256 = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/maybe-uninit/2.0.0/download"],
+        strip_prefix = "maybe-uninit-2.0.0",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.maybe-uninit-2.0.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__memoffset-0.5.6",
+        sha256 = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/memoffset/0.5.6/download"],
+        strip_prefix = "memoffset-0.5.6",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.memoffset-0.5.6.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__mio-0.6.23",
+        sha256 = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/mio/0.6.23/download"],
+        strip_prefix = "mio-0.6.23",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.mio-0.6.23.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__mio-uds-0.6.8",
+        sha256 = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/mio-uds/0.6.8/download"],
+        strip_prefix = "mio-uds-0.6.8",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.mio-uds-0.6.8.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__miow-0.2.2",
+        sha256 = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/miow/0.2.2/download"],
+        strip_prefix = "miow-0.2.2",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.miow-0.2.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__net2-0.2.37",
+        sha256 = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/net2/0.2.37/download"],
+        strip_prefix = "net2-0.2.37",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.net2-0.2.37.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__num_cpus-1.13.1",
+        sha256 = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/num_cpus/1.13.1/download"],
+        strip_prefix = "num_cpus-1.13.1",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.num_cpus-1.13.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__parking_lot-0.9.0",
+        sha256 = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/parking_lot/0.9.0/download"],
+        strip_prefix = "parking_lot-0.9.0",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.parking_lot-0.9.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__parking_lot_core-0.6.2",
+        sha256 = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/parking_lot_core/0.6.2/download"],
+        strip_prefix = "parking_lot_core-0.6.2",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.parking_lot_core-0.6.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__protobuf-2.8.2",
+        patch_args = [
+            "-p1",
+        ],
+        patches = [
+            "@rules_rust//proto/3rdparty/patches:protobuf-2.8.2.patch",
+        ],
+        sha256 = "70731852eec72c56d11226c8a5f96ad5058a3dab73647ca5f7ee351e464f2571",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/protobuf/2.8.2/download"],
+        strip_prefix = "protobuf-2.8.2",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.protobuf-2.8.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__protobuf-codegen-2.8.2",
+        sha256 = "3d74b9cbbf2ac9a7169c85a3714ec16c51ee9ec7cfd511549527e9a7df720795",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/protobuf-codegen/2.8.2/download"],
+        strip_prefix = "protobuf-codegen-2.8.2",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.protobuf-codegen-2.8.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__redox_syscall-0.1.57",
+        sha256 = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/redox_syscall/0.1.57/download"],
+        strip_prefix = "redox_syscall-0.1.57",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.redox_syscall-0.1.57.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__rustc_version-0.2.3",
+        sha256 = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/rustc_version/0.2.3/download"],
+        strip_prefix = "rustc_version-0.2.3",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.rustc_version-0.2.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__safemem-0.3.3",
+        sha256 = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/safemem/0.3.3/download"],
+        strip_prefix = "safemem-0.3.3",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.safemem-0.3.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__scoped-tls-0.1.2",
+        sha256 = "332ffa32bf586782a3efaeb58f127980944bbc8c4d6913a86107ac2a5ab24b28",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/scoped-tls/0.1.2/download"],
+        strip_prefix = "scoped-tls-0.1.2",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.scoped-tls-0.1.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__scopeguard-1.1.0",
+        sha256 = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/scopeguard/1.1.0/download"],
+        strip_prefix = "scopeguard-1.1.0",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.scopeguard-1.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__semver-0.9.0",
+        sha256 = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/semver/0.9.0/download"],
+        strip_prefix = "semver-0.9.0",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.semver-0.9.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__semver-parser-0.7.0",
+        sha256 = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/semver-parser/0.7.0/download"],
+        strip_prefix = "semver-parser-0.7.0",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.semver-parser-0.7.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__slab-0.3.0",
+        sha256 = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/slab/0.3.0/download"],
+        strip_prefix = "slab-0.3.0",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.slab-0.3.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__slab-0.4.7",
+        sha256 = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/slab/0.4.7/download"],
+        strip_prefix = "slab-0.4.7",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.slab-0.4.7.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__smallvec-0.6.14",
+        sha256 = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/smallvec/0.6.14/download"],
+        strip_prefix = "smallvec-0.6.14",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.smallvec-0.6.14.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tls-api-0.1.22",
+        sha256 = "049c03787a0595182357fbd487577947f4351b78ce20c3668f6d49f17feb13d1",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tls-api/0.1.22/download"],
+        strip_prefix = "tls-api-0.1.22",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tls-api-0.1.22.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tls-api-stub-0.1.22",
+        sha256 = "c9a0cc8c149724db9de7d73a0e1bc80b1a74f5394f08c6f301e11f9c35fa061e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tls-api-stub/0.1.22/download"],
+        strip_prefix = "tls-api-stub-0.1.22",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tls-api-stub-0.1.22.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-0.1.22",
+        sha256 = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio/0.1.22/download"],
+        strip_prefix = "tokio-0.1.22",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-0.1.22.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-codec-0.1.2",
+        sha256 = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio-codec/0.1.2/download"],
+        strip_prefix = "tokio-codec-0.1.2",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-codec-0.1.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-core-0.1.18",
+        sha256 = "87b1395334443abca552f63d4f61d0486f12377c2ba8b368e523f89e828cffd4",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio-core/0.1.18/download"],
+        strip_prefix = "tokio-core-0.1.18",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-core-0.1.18.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-current-thread-0.1.7",
+        sha256 = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio-current-thread/0.1.7/download"],
+        strip_prefix = "tokio-current-thread-0.1.7",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-current-thread-0.1.7.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-executor-0.1.10",
+        sha256 = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio-executor/0.1.10/download"],
+        strip_prefix = "tokio-executor-0.1.10",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-executor-0.1.10.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-fs-0.1.7",
+        sha256 = "297a1206e0ca6302a0eed35b700d292b275256f596e2f3fea7729d5e629b6ff4",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio-fs/0.1.7/download"],
+        strip_prefix = "tokio-fs-0.1.7",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-fs-0.1.7.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-io-0.1.13",
+        sha256 = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio-io/0.1.13/download"],
+        strip_prefix = "tokio-io-0.1.13",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-io-0.1.13.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-reactor-0.1.12",
+        sha256 = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio-reactor/0.1.12/download"],
+        strip_prefix = "tokio-reactor-0.1.12",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-reactor-0.1.12.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-sync-0.1.8",
+        sha256 = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio-sync/0.1.8/download"],
+        strip_prefix = "tokio-sync-0.1.8",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-sync-0.1.8.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-tcp-0.1.4",
+        sha256 = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio-tcp/0.1.4/download"],
+        strip_prefix = "tokio-tcp-0.1.4",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-tcp-0.1.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-threadpool-0.1.18",
+        sha256 = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio-threadpool/0.1.18/download"],
+        strip_prefix = "tokio-threadpool-0.1.18",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-threadpool-0.1.18.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-timer-0.1.2",
+        sha256 = "6131e780037787ff1b3f8aad9da83bca02438b72277850dd6ad0d455e0e20efc",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio-timer/0.1.2/download"],
+        strip_prefix = "tokio-timer-0.1.2",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-timer-0.1.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-timer-0.2.13",
+        sha256 = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio-timer/0.2.13/download"],
+        strip_prefix = "tokio-timer-0.2.13",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-timer-0.2.13.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-tls-api-0.1.22",
+        sha256 = "68d0e040d5b1f4cfca70ec4f371229886a5de5bb554d272a4a8da73004a7b2c9",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio-tls-api/0.1.22/download"],
+        strip_prefix = "tokio-tls-api-0.1.22",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-tls-api-0.1.22.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-udp-0.1.6",
+        sha256 = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio-udp/0.1.6/download"],
+        strip_prefix = "tokio-udp-0.1.6",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-udp-0.1.6.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-uds-0.1.7",
+        sha256 = "65ae5d255ce739e8537221ed2942e0445f4b3b813daebac1c0050ddaaa3587f9",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio-uds/0.1.7/download"],
+        strip_prefix = "tokio-uds-0.1.7",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-uds-0.1.7.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__tokio-uds-0.2.7",
+        sha256 = "ab57a4ac4111c8c9dbcf70779f6fc8bc35ae4b2454809febac840ad19bd7e4e0",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tokio-uds/0.2.7/download"],
+        strip_prefix = "tokio-uds-0.2.7",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.tokio-uds-0.2.7.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__unix_socket-0.5.0",
+        sha256 = "6aa2700417c405c38f5e6902d699345241c28c0b7ade4abaad71e35a87eb1564",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unix_socket/0.5.0/download"],
+        strip_prefix = "unix_socket-0.5.0",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.unix_socket-0.5.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__void-1.0.2",
+        sha256 = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/void/1.0.2/download"],
+        strip_prefix = "void-1.0.2",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.void-1.0.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__winapi-0.2.8",
+        sha256 = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi/0.2.8/download"],
+        strip_prefix = "winapi-0.2.8",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.winapi-0.2.8.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__winapi-0.3.9",
+        sha256 = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi/0.3.9/download"],
+        strip_prefix = "winapi-0.3.9",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.winapi-0.3.9.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__winapi-build-0.1.1",
+        sha256 = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi-build/0.1.1/download"],
+        strip_prefix = "winapi-build-0.1.1",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.winapi-build-0.1.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__winapi-i686-pc-windows-gnu-0.4.0",
+        sha256 = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download"],
+        strip_prefix = "winapi-i686-pc-windows-gnu-0.4.0",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__winapi-x86_64-pc-windows-gnu-0.4.0",
+        sha256 = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download"],
+        strip_prefix = "winapi-x86_64-pc-windows-gnu-0.4.0",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_proto__ws2_32-sys-0.2.1",
+        sha256 = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/ws2_32-sys/0.2.1/download"],
+        strip_prefix = "ws2_32-sys-0.2.1",
+        build_file = Label("@rules_rust//proto/3rdparty/crates:BUILD.ws2_32-sys-0.2.1.bazel"),
+    )
diff --git a/third_party/rules_rust/proto/patches/BUILD.bazel b/third_party/rules_rust/proto/3rdparty/patches/BUILD.bazel
similarity index 100%
rename from third_party/rules_rust/proto/patches/BUILD.bazel
rename to third_party/rules_rust/proto/3rdparty/patches/BUILD.bazel
diff --git a/third_party/rules_rust/proto/3rdparty/patches/README.md b/third_party/rules_rust/proto/3rdparty/patches/README.md
new file mode 100644
index 0000000..56e910b
--- /dev/null
+++ b/third_party/rules_rust/proto/3rdparty/patches/README.md
@@ -0,0 +1,27 @@
+# Patches
+
+Details related to patches required for the rules_rust protobuf rules.
+
+## protobuf-2.8.2
+
+The protobuf crate from the rust-protobuf repository introduced a build.rs
+script in the 2.x.x series. This generates a small version.rs file that would be
+[included into lib.rs](https://github.com/stepancheg/rust-protobuf/blob/v2.8/protobuf/src/lib.rs#L122).
+However, the build.rs file requires a number of environment variables, normally
+provided by cargo to the build file. Cargo raze does not provide these
+variables. The resulting code includes a version string and version identifier.
+The version string is then used by protobuf-codegen to generate code refering to
+the identifier in the protobuf library. The use can be seen
+[here](https://github.com/stepancheg/rust-protobuf/blob/v2.8/protobuf-codegen/src/lib.rs#L160).
+This is to enforce at compile time that the version of protobuf-codegen matches
+the version of the protobuf crate.
+
+For this crate, the patch that is applied is replacing the include! macro with
+what would be generated by the build.rs file. This lets us avoid running the
+build file altogether, at the expense of having to update the patch for every
+version.
+
+
+## com_google_protobuf-v3.10.0-bzl_visibility
+
+The patches here provide the required visibility to `*.bzl` files used by the rules defined in `com_google_protobuf`.
diff --git a/third_party/rules_rust/proto/patches/com_google_protobuf-v3.10.0-bzl_visibility.patch b/third_party/rules_rust/proto/3rdparty/patches/com_google_protobuf-v3.10.0-bzl_visibility.patch
similarity index 100%
rename from third_party/rules_rust/proto/patches/com_google_protobuf-v3.10.0-bzl_visibility.patch
rename to third_party/rules_rust/proto/3rdparty/patches/com_google_protobuf-v3.10.0-bzl_visibility.patch
diff --git a/third_party/rules_rust/proto/raze/patch/protobuf-2.8.2.patch b/third_party/rules_rust/proto/3rdparty/patches/protobuf-2.8.2.patch
similarity index 100%
rename from third_party/rules_rust/proto/raze/patch/protobuf-2.8.2.patch
rename to third_party/rules_rust/proto/3rdparty/patches/protobuf-2.8.2.patch
diff --git a/third_party/rules_rust/proto/BUILD.bazel b/third_party/rules_rust/proto/BUILD.bazel
index 1b7fa26..298c615 100644
--- a/third_party/rules_rust/proto/BUILD.bazel
+++ b/third_party/rules_rust/proto/BUILD.bazel
@@ -6,37 +6,47 @@
 
 alias(
     name = "protoc_gen_rust",
-    actual = "//proto/raze:cargo_bin_protoc_gen_rust",
+    actual = "//proto/3rdparty/crates:protobuf-codegen__protoc-gen-rust",
 )
 
 alias(
     name = "protoc_gen_rust_grpc",
-    actual = "//proto/raze:cargo_bin_protoc_gen_rust_grpc",
+    actual = "//proto/3rdparty/crates:grpc-compiler__protoc-gen-rust-grpc",
 )
 
-toolchain_type(name = "toolchain")
+toolchain_type(
+    name = "toolchain_type",
+)
+
+alias(
+    name = "toolchain",
+    actual = "toolchain_type",
+    deprecation = "instead use `@rules_rust//proto:toolchain_type`",
+    tags = ["manual"],
+)
 
 rust_binary(
     name = "optional_output_wrapper",
     srcs = ["optional_output_wrapper.rs"],
+    edition = "2018",
     visibility = ["//visibility:public"],
 )
 
 toolchain(
     name = "default-proto-toolchain",
     toolchain = ":default-proto-toolchain-impl",
-    toolchain_type = "@rules_rust//proto:toolchain",
+    toolchain_type = "@rules_rust//proto:toolchain_type",
 )
 
-rust_proto_toolchain(name = "default-proto-toolchain-impl")
+rust_proto_toolchain(
+    name = "default-proto-toolchain-impl",
+    edition = "2018",
+)
 
 bzl_library(
     name = "bzl_lib",
-    srcs = glob(["**/*.bzl"]) + ["//proto/raze:crates.bzl"],
-)
-
-alias(
-    name = "rules",
-    actual = ":bzl_lib",
-    deprecation = "Please use the `@rules_rust//proto:bzl_lib` target instead",
+    srcs = glob(["**/*.bzl"]),
+    deps = [
+        "//proto/3rdparty:bzl_lib",
+    ],
 )
diff --git a/third_party/rules_rust/proto/patches/README.md b/third_party/rules_rust/proto/patches/README.md
deleted file mode 100644
index 7d4ca11..0000000
--- a/third_party/rules_rust/proto/patches/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# @rules_rust//proto patches
-
-The patches here provide the required visibility to `*.bzl` files used by the rules defined in `com_google_protobuf`.
diff --git a/third_party/rules_rust/proto/proto.bzl b/third_party/rules_rust/proto/proto.bzl
index ea239b0..b5e65a3 100644
--- a/third_party/rules_rust/proto/proto.bzl
+++ b/third_party/rules_rust/proto/proto.bzl
@@ -44,7 +44,7 @@
 load("//rust/private:rustc.bzl", "rustc_compile_action")
 
 # buildifier: disable=bzl-visibility
-load("//rust/private:utils.bzl", "compute_crate_name", "determine_output_hash", "find_toolchain", "transform_deps")
+load("//rust/private:utils.bzl", "can_build_metadata", "compute_crate_name", "determine_output_hash", "find_toolchain", "transform_deps")
 
 RustProtoInfo = provider(
     doc = "Rust protobuf provider info",
@@ -186,7 +186,7 @@
     """
 
     # Create all the source in a specific folder
-    proto_toolchain = ctx.toolchains[Label("//proto:toolchain")]
+    proto_toolchain = ctx.toolchains[Label("//proto:toolchain_type")]
     output_dir = "%s.%s.rust" % (crate_name, "grpc" if is_grpc else "proto")
 
     # Generate the proto stubs
@@ -212,6 +212,13 @@
         crate_name,
         output_hash,
     ))
+    rust_metadata = None
+    if can_build_metadata(toolchain, ctx, "rlib"):
+        rust_metadata = ctx.actions.declare_file("%s/lib%s-%s.rmeta" % (
+            output_dir,
+            crate_name,
+            output_hash,
+        ))
 
     # Gather all dependencies for compilation
     compile_action_deps = depset(
@@ -234,6 +241,7 @@
             proc_macro_deps = depset([]),
             aliases = {},
             output = rust_lib,
+            metadata = rust_metadata,
             edition = proto_toolchain.edition,
             rustc_env = {},
             is_test = False,
@@ -319,8 +327,8 @@
     fragments = ["cpp"],
     host_fragments = ["cpp"],
     toolchains = [
-        str(Label("//proto:toolchain")),
-        str(Label("//rust:toolchain")),
+        str(Label("//proto:toolchain_type")),
+        str(Label("//rust:toolchain_type")),
         "@bazel_tools//tools/cpp:toolchain_type",
     ],
     # TODO: Remove once (bazelbuild/bazel#11584) is closed and the rules use
@@ -397,8 +405,8 @@
     fragments = ["cpp"],
     host_fragments = ["cpp"],
     toolchains = [
-        str(Label("//proto:toolchain")),
-        str(Label("//rust:toolchain")),
+        str(Label("//proto:toolchain_type")),
+        str(Label("//rust:toolchain_type")),
         "@bazel_tools//tools/cpp:toolchain_type",
     ],
     # TODO: Remove once (bazelbuild/bazel#11584) is closed and the rules use
diff --git a/third_party/rules_rust/proto/raze/BUILD.bazel b/third_party/rules_rust/proto/raze/BUILD.bazel
index d23e6cb..42a33d1 100644
--- a/third_party/rules_rust/proto/raze/BUILD.bazel
+++ b/third_party/rules_rust/proto/raze/BUILD.bazel
@@ -1,76 +1,56 @@
-"""
-@generated
-cargo-raze generated Bazel file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
 package(default_visibility = ["//visibility:public"])
 
-licenses([
-    "notice",  # See individual crates for specific licenses
-])
-
 # Aliased targets
 alias(
     name = "grpc",
-    actual = "@rules_rust_proto__grpc__0_6_2//:grpc",
+    actual = "//proto/3rdparty/crates:grpc",
+    deprecation = "Instead, use @rules_rust//proto/3rdparty/crates:grpc",
     tags = [
-        "cargo-raze",
         "manual",
     ],
 )
 
 alias(
     name = "cargo_bin_protoc_gen_rust_grpc",
-    actual = "@rules_rust_proto__grpc_compiler__0_6_2//:cargo_bin_protoc_gen_rust_grpc",
+    actual = "//proto/3rdparty/crates:grpc-compiler__protoc-gen-rust-grpc",
+    deprecation = "Instead, use @rules_rust//proto/3rdparty/crates:grpc-compiler__protoc-gen-rust-grpc",
     tags = [
-        "cargo-raze",
         "manual",
     ],
 )
 
 alias(
     name = "grpc_compiler",
-    actual = "@rules_rust_proto__grpc_compiler__0_6_2//:grpc_compiler",
+    actual = "//proto/3rdparty/crates:grpc_compiler",
+    deprecation = "Instead, use @rules_rust//proto/3rdparty/crates:grpc_compiler",
     tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "log",
-    actual = "@rules_rust_proto__log__0_4_6//:log",
-    tags = [
-        "cargo-raze",
         "manual",
     ],
 )
 
 alias(
     name = "protobuf",
-    actual = "@rules_rust_proto__protobuf__2_8_2//:protobuf",
+    actual = "//proto/3rdparty/crates:protobuf",
+    deprecation = "Instead, use @rules_rust//proto/3rdparty/crates:protobuf",
     tags = [
-        "cargo-raze",
         "manual",
     ],
 )
 
 alias(
     name = "cargo_bin_protoc_gen_rust",
-    actual = "@rules_rust_proto__protobuf_codegen__2_8_2//:cargo_bin_protoc_gen_rust",
+    actual = "//proto/3rdparty/crates:protobuf-codegen__protoc-gen-rust",
+    deprecation = "Instead, use @rules_rust//proto/3rdparty/crates:protobuf-codegen__protoc-gen-rust",
     tags = [
-        "cargo-raze",
         "manual",
     ],
 )
 
 alias(
     name = "protobuf_codegen",
-    actual = "@rules_rust_proto__protobuf_codegen__2_8_2//:protobuf_codegen",
+    actual = "//proto/3rdparty/crates:protobuf-codegen",
+    deprecation = "Instead, use @rules_rust//proto/3rdparty/crates:protobuf-codegen",
     tags = [
-        "cargo-raze",
         "manual",
     ],
 )
@@ -78,25 +58,8 @@
 alias(
     name = "tls_api",
     actual = "@rules_rust_proto__tls_api__0_1_22//:tls_api",
+    deprecation = "Instead, use @rules_rust//proto/3rdparty/crates:tls_api",
     tags = [
-        "cargo-raze",
         "manual",
     ],
 )
-
-alias(
-    name = "tls_api_stub",
-    actual = "@rules_rust_proto__tls_api_stub__0_1_22//:tls_api_stub",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-# Export file for Stardoc support
-exports_files(
-    [
-        "crates.bzl",
-    ],
-    visibility = ["//visibility:public"],
-)
diff --git a/third_party/rules_rust/proto/raze/Cargo.lock b/third_party/rules_rust/proto/raze/Cargo.lock
deleted file mode 100644
index 2c6b3d0..0000000
--- a/third_party/rules_rust/proto/raze/Cargo.lock
+++ /dev/null
@@ -1,782 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-[[package]]
-name = "autocfg"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "base64"
-version = "0.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "bitflags"
-version = "1.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "byteorder"
-version = "1.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "bytes"
-version = "0.4.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "cfg-if"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "cloudabi"
-version = "0.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "crossbeam-deque"
-version = "0.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "crossbeam-epoch 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "crossbeam-epoch"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "memoffset 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "crossbeam-queue"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "crossbeam-utils"
-version = "0.7.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "fake_lib"
-version = "0.0.1"
-dependencies = [
- "grpc 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "grpc-compiler 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "protobuf 2.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "protobuf-codegen 2.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "tls-api 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
- "tls-api-stub 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "fnv"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "fuchsia-zircon"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "fuchsia-zircon-sys"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "futures"
-version = "0.1.29"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "futures-cpupool"
-version = "0.1.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "grpc"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "httpbis 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "protobuf 2.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "tls-api 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
- "tls-api-stub 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-tls-api 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "grpc-compiler"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "protobuf 2.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "protobuf-codegen 2.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "hermit-abi"
-version = "0.1.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "httpbis"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
- "tls-api 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
- "tls-api-stub 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-timer 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-tls-api 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-uds 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "unix_socket 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "iovec"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "kernel32-sys"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "lazy_static"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "libc"
-version = "0.2.69"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "lock_api"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "log"
-version = "0.3.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "log"
-version = "0.4.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "maybe-uninit"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "memoffset"
-version = "0.5.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "mio"
-version = "0.6.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
- "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "mio-uds"
-version = "0.6.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "miow"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "net2"
-version = "0.2.33"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "num_cpus"
-version = "1.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "hermit-abi 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "parking_lot"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "lock_api 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "parking_lot_core"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "protobuf"
-version = "2.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "protobuf-codegen"
-version = "2.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "protobuf 2.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "redox_syscall"
-version = "0.1.56"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "rustc_version"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "safemem"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "scoped-tls"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "scopeguard"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "semver"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "semver-parser"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "slab"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "slab"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "smallvec"
-version = "0.6.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tls-api"
-version = "0.1.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tls-api-stub"
-version = "0.1.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "tls-api 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
- "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio"
-version = "0.1.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
- "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-current-thread 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-executor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-fs 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-reactor 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-sync 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-tcp 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-threadpool 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-timer 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-udp 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-uds 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio-codec"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio-core"
-version = "0.1.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
- "scoped-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-executor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-reactor 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-timer 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio-current-thread"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-executor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio-executor"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio-fs"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-threadpool 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio-io"
-version = "0.1.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio-reactor"
-version = "0.1.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
- "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-executor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-sync 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio-sync"
-version = "0.1.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio-tcp"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-reactor 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio-threadpool"
-version = "0.1.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-executor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio-timer"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio-timer"
-version = "0.2.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-executor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio-tls-api"
-version = "0.1.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "tls-api 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio-udp"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-reactor 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio-uds"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tokio-uds"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-reactor 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "unix_socket"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "void"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "winapi"
-version = "0.2.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "winapi"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "winapi-build"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "winapi-i686-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "winapi-x86_64-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "ws2_32-sys"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[metadata]
-"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
-"checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643"
-"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
-"checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
-"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
-"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
-"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
-"checksum crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285"
-"checksum crossbeam-epoch 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"
-"checksum crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db"
-"checksum crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
-"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
-"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
-"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
-"checksum futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)" = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef"
-"checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4"
-"checksum grpc 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2aaf1d741fe6f3413f1f9f71b99f5e4e26776d563475a8a53ce53a73a8534c1d"
-"checksum grpc-compiler 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "907274ce8ee7b40a0d0b0db09022ea22846a47cfb1fc8ad2c983c70001b4ffb1"
-"checksum hermit-abi 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8a0d737e0f947a1864e93d33fdef4af8445a00d1ed8dc0c8ddb73139ea6abf15"
-"checksum httpbis 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7689cfa896b2a71da4f16206af167542b75d242b6906313e53857972a92d5614"
-"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
-"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
-"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-"checksum libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)" = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005"
-"checksum lock_api 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"
-"checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
-"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6"
-"checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
-"checksum memoffset 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b4fc2c02a7e374099d4ee95a193111f72d2110197fe200272371758f6c3643d8"
-"checksum mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)" = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f"
-"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125"
-"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
-"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
-"checksum num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
-"checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
-"checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b"
-"checksum protobuf 2.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "70731852eec72c56d11226c8a5f96ad5058a3dab73647ca5f7ee351e464f2571"
-"checksum protobuf-codegen 2.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3d74b9cbbf2ac9a7169c85a3714ec16c51ee9ec7cfd511549527e9a7df720795"
-"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
-"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
-"checksum safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
-"checksum scoped-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "332ffa32bf586782a3efaeb58f127980944bbc8c4d6913a86107ac2a5ab24b28"
-"checksum scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
-"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
-"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
-"checksum slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23"
-"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
-"checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6"
-"checksum tls-api 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)" = "049c03787a0595182357fbd487577947f4351b78ce20c3668f6d49f17feb13d1"
-"checksum tls-api-stub 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)" = "c9a0cc8c149724db9de7d73a0e1bc80b1a74f5394f08c6f301e11f9c35fa061e"
-"checksum tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)" = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6"
-"checksum tokio-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b"
-"checksum tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "aeeffbbb94209023feaef3c196a41cbcdafa06b4a6f893f68779bb5e53796f71"
-"checksum tokio-current-thread 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e"
-"checksum tokio-executor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671"
-"checksum tokio-fs 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "297a1206e0ca6302a0eed35b700d292b275256f596e2f3fea7729d5e629b6ff4"
-"checksum tokio-io 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674"
-"checksum tokio-reactor 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351"
-"checksum tokio-sync 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee"
-"checksum tokio-tcp 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72"
-"checksum tokio-threadpool 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89"
-"checksum tokio-timer 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6131e780037787ff1b3f8aad9da83bca02438b72277850dd6ad0d455e0e20efc"
-"checksum tokio-timer 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296"
-"checksum tokio-tls-api 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)" = "68d0e040d5b1f4cfca70ec4f371229886a5de5bb554d272a4a8da73004a7b2c9"
-"checksum tokio-udp 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82"
-"checksum tokio-uds 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "65ae5d255ce739e8537221ed2942e0445f4b3b813daebac1c0050ddaaa3587f9"
-"checksum tokio-uds 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "5076db410d6fdc6523df7595447629099a1fdc47b3d9f896220780fa48faf798"
-"checksum unix_socket 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6aa2700417c405c38f5e6902d699345241c28c0b7ade4abaad71e35a87eb1564"
-"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
-"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
-"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
-"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
-"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
diff --git a/third_party/rules_rust/proto/raze/Cargo.toml b/third_party/rules_rust/proto/raze/Cargo.toml
deleted file mode 100644
index 773554d..0000000
--- a/third_party/rules_rust/proto/raze/Cargo.toml
+++ /dev/null
@@ -1,47 +0,0 @@
-
-[package]
-name = "fake_rules_rust_proto"
-version = "0.0.1"
-
-[lib]
-path = "fake_rules_rust_proto.rs"
-
-[dependencies]
-# Newer version of protobuf have been released, but the 0.6.2 release of
-# grpc-rust doesn't work with 2.10 or above, and the 2.9 release pulled.
-protobuf = { version = "2.8.2", features = ["with-bytes"] }
-protobuf-codegen = "2.8.2"
-grpc = "0.6.2"
-grpc-compiler = "0.6.2"
-# Newer version of tls-api have been released, but the 0.1 release is still
-# required by grpc 0.6.2, so continue to use 0.1 of tls-api here.
-tls-api = "0.1.22"
-tls-api-stub = "0.1.22"
-# This needs to be specified, as log 0.3 depends on log 0.4, and log 0.4.7 and
-# up break log 0.3, which is needed by tokio-uds-0.1.7 (which is required by
-# httpbis 0.7.0, which hasn't had a version released in a while).  grpc
-# requires httpbis.
-log = "0.4, <0.4.7"
-
-[package.metadata.raze]
-genmode = "Remote"
-workspace_path = "//proto/raze"
-gen_workspace_prefix = "rules_rust_proto"
-rust_rules_workspace_name = "rules_rust"
-package_aliases_dir = "."
-default_gen_buildrs = false
-
-[package.metadata.raze.crates.lazy_static.'1.4.0']
-additional_flags = [
-  "--cfg=lazy_static_heap_impl",
-]
-
-[package.metadata.raze.crates.protobuf.'2.8.2']
-patches = ["@rules_rust//proto/raze/patch:protobuf-2.8.2.patch"]
-patch_args = ["-p1"]
-
-[package.metadata.raze.crates.protobuf-codegen.'2.8.2']
-extra_aliased_targets = ["cargo_bin_protoc_gen_rust"]
-
-[package.metadata.raze.crates.grpc-compiler.'0.6.2']
-extra_aliased_targets = ["cargo_bin_protoc_gen_rust_grpc"]
diff --git a/third_party/rules_rust/proto/raze/crates.bzl b/third_party/rules_rust/proto/raze/crates.bzl
deleted file mode 100644
index 3ec2de1..0000000
--- a/third_party/rules_rust/proto/raze/crates.bzl
+++ /dev/null
@@ -1,768 +0,0 @@
-"""
-@generated
-cargo-raze generated Bazel file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-load("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository")  # buildifier: disable=load
-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")  # buildifier: disable=load
-load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")  # buildifier: disable=load
-
-def rules_rust_proto_fetch_remote_crates():
-    """This function defines a collection of repos and should be called in a WORKSPACE file"""
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__autocfg__1_0_0",
-        url = "https://crates.io/api/v1/crates/autocfg/1.0.0/download",
-        type = "tar.gz",
-        sha256 = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d",
-        strip_prefix = "autocfg-1.0.0",
-        build_file = Label("//proto/raze/remote:BUILD.autocfg-1.0.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__base64__0_9_3",
-        url = "https://crates.io/api/v1/crates/base64/0.9.3/download",
-        type = "tar.gz",
-        sha256 = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643",
-        strip_prefix = "base64-0.9.3",
-        build_file = Label("//proto/raze/remote:BUILD.base64-0.9.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__bitflags__1_2_1",
-        url = "https://crates.io/api/v1/crates/bitflags/1.2.1/download",
-        type = "tar.gz",
-        sha256 = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693",
-        strip_prefix = "bitflags-1.2.1",
-        build_file = Label("//proto/raze/remote:BUILD.bitflags-1.2.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__byteorder__1_3_4",
-        url = "https://crates.io/api/v1/crates/byteorder/1.3.4/download",
-        type = "tar.gz",
-        sha256 = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de",
-        strip_prefix = "byteorder-1.3.4",
-        build_file = Label("//proto/raze/remote:BUILD.byteorder-1.3.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__bytes__0_4_12",
-        url = "https://crates.io/api/v1/crates/bytes/0.4.12/download",
-        type = "tar.gz",
-        sha256 = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c",
-        strip_prefix = "bytes-0.4.12",
-        build_file = Label("//proto/raze/remote:BUILD.bytes-0.4.12.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__cfg_if__0_1_10",
-        url = "https://crates.io/api/v1/crates/cfg-if/0.1.10/download",
-        type = "tar.gz",
-        sha256 = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822",
-        strip_prefix = "cfg-if-0.1.10",
-        build_file = Label("//proto/raze/remote:BUILD.cfg-if-0.1.10.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__cloudabi__0_0_3",
-        url = "https://crates.io/api/v1/crates/cloudabi/0.0.3/download",
-        type = "tar.gz",
-        sha256 = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f",
-        strip_prefix = "cloudabi-0.0.3",
-        build_file = Label("//proto/raze/remote:BUILD.cloudabi-0.0.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__crossbeam_deque__0_7_3",
-        url = "https://crates.io/api/v1/crates/crossbeam-deque/0.7.3/download",
-        type = "tar.gz",
-        sha256 = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285",
-        strip_prefix = "crossbeam-deque-0.7.3",
-        build_file = Label("//proto/raze/remote:BUILD.crossbeam-deque-0.7.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__crossbeam_epoch__0_8_2",
-        url = "https://crates.io/api/v1/crates/crossbeam-epoch/0.8.2/download",
-        type = "tar.gz",
-        sha256 = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace",
-        strip_prefix = "crossbeam-epoch-0.8.2",
-        build_file = Label("//proto/raze/remote:BUILD.crossbeam-epoch-0.8.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__crossbeam_queue__0_2_1",
-        url = "https://crates.io/api/v1/crates/crossbeam-queue/0.2.1/download",
-        type = "tar.gz",
-        sha256 = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db",
-        strip_prefix = "crossbeam-queue-0.2.1",
-        build_file = Label("//proto/raze/remote:BUILD.crossbeam-queue-0.2.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__crossbeam_utils__0_7_2",
-        url = "https://crates.io/api/v1/crates/crossbeam-utils/0.7.2/download",
-        type = "tar.gz",
-        sha256 = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8",
-        strip_prefix = "crossbeam-utils-0.7.2",
-        build_file = Label("//proto/raze/remote:BUILD.crossbeam-utils-0.7.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__fnv__1_0_6",
-        url = "https://crates.io/api/v1/crates/fnv/1.0.6/download",
-        type = "tar.gz",
-        sha256 = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3",
-        strip_prefix = "fnv-1.0.6",
-        build_file = Label("//proto/raze/remote:BUILD.fnv-1.0.6.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__fuchsia_zircon__0_3_3",
-        url = "https://crates.io/api/v1/crates/fuchsia-zircon/0.3.3/download",
-        type = "tar.gz",
-        sha256 = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82",
-        strip_prefix = "fuchsia-zircon-0.3.3",
-        build_file = Label("//proto/raze/remote:BUILD.fuchsia-zircon-0.3.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__fuchsia_zircon_sys__0_3_3",
-        url = "https://crates.io/api/v1/crates/fuchsia-zircon-sys/0.3.3/download",
-        type = "tar.gz",
-        sha256 = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7",
-        strip_prefix = "fuchsia-zircon-sys-0.3.3",
-        build_file = Label("//proto/raze/remote:BUILD.fuchsia-zircon-sys-0.3.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__futures__0_1_29",
-        url = "https://crates.io/api/v1/crates/futures/0.1.29/download",
-        type = "tar.gz",
-        sha256 = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef",
-        strip_prefix = "futures-0.1.29",
-        build_file = Label("//proto/raze/remote:BUILD.futures-0.1.29.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__futures_cpupool__0_1_8",
-        url = "https://crates.io/api/v1/crates/futures-cpupool/0.1.8/download",
-        type = "tar.gz",
-        sha256 = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4",
-        strip_prefix = "futures-cpupool-0.1.8",
-        build_file = Label("//proto/raze/remote:BUILD.futures-cpupool-0.1.8.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__grpc__0_6_2",
-        url = "https://crates.io/api/v1/crates/grpc/0.6.2/download",
-        type = "tar.gz",
-        sha256 = "2aaf1d741fe6f3413f1f9f71b99f5e4e26776d563475a8a53ce53a73a8534c1d",
-        strip_prefix = "grpc-0.6.2",
-        build_file = Label("//proto/raze/remote:BUILD.grpc-0.6.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__grpc_compiler__0_6_2",
-        url = "https://crates.io/api/v1/crates/grpc-compiler/0.6.2/download",
-        type = "tar.gz",
-        sha256 = "907274ce8ee7b40a0d0b0db09022ea22846a47cfb1fc8ad2c983c70001b4ffb1",
-        strip_prefix = "grpc-compiler-0.6.2",
-        build_file = Label("//proto/raze/remote:BUILD.grpc-compiler-0.6.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__hermit_abi__0_1_11",
-        url = "https://crates.io/api/v1/crates/hermit-abi/0.1.11/download",
-        type = "tar.gz",
-        sha256 = "8a0d737e0f947a1864e93d33fdef4af8445a00d1ed8dc0c8ddb73139ea6abf15",
-        strip_prefix = "hermit-abi-0.1.11",
-        build_file = Label("//proto/raze/remote:BUILD.hermit-abi-0.1.11.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__httpbis__0_7_0",
-        url = "https://crates.io/api/v1/crates/httpbis/0.7.0/download",
-        type = "tar.gz",
-        sha256 = "7689cfa896b2a71da4f16206af167542b75d242b6906313e53857972a92d5614",
-        strip_prefix = "httpbis-0.7.0",
-        build_file = Label("//proto/raze/remote:BUILD.httpbis-0.7.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__iovec__0_1_4",
-        url = "https://crates.io/api/v1/crates/iovec/0.1.4/download",
-        type = "tar.gz",
-        sha256 = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e",
-        strip_prefix = "iovec-0.1.4",
-        build_file = Label("//proto/raze/remote:BUILD.iovec-0.1.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__kernel32_sys__0_2_2",
-        url = "https://crates.io/api/v1/crates/kernel32-sys/0.2.2/download",
-        type = "tar.gz",
-        sha256 = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d",
-        strip_prefix = "kernel32-sys-0.2.2",
-        build_file = Label("//proto/raze/remote:BUILD.kernel32-sys-0.2.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__lazy_static__1_4_0",
-        url = "https://crates.io/api/v1/crates/lazy_static/1.4.0/download",
-        type = "tar.gz",
-        sha256 = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646",
-        strip_prefix = "lazy_static-1.4.0",
-        build_file = Label("//proto/raze/remote:BUILD.lazy_static-1.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__libc__0_2_69",
-        url = "https://crates.io/api/v1/crates/libc/0.2.69/download",
-        type = "tar.gz",
-        sha256 = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005",
-        strip_prefix = "libc-0.2.69",
-        build_file = Label("//proto/raze/remote:BUILD.libc-0.2.69.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__lock_api__0_3_4",
-        url = "https://crates.io/api/v1/crates/lock_api/0.3.4/download",
-        type = "tar.gz",
-        sha256 = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75",
-        strip_prefix = "lock_api-0.3.4",
-        build_file = Label("//proto/raze/remote:BUILD.lock_api-0.3.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__log__0_3_9",
-        url = "https://crates.io/api/v1/crates/log/0.3.9/download",
-        type = "tar.gz",
-        sha256 = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b",
-        strip_prefix = "log-0.3.9",
-        build_file = Label("//proto/raze/remote:BUILD.log-0.3.9.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__log__0_4_6",
-        url = "https://crates.io/api/v1/crates/log/0.4.6/download",
-        type = "tar.gz",
-        sha256 = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6",
-        strip_prefix = "log-0.4.6",
-        build_file = Label("//proto/raze/remote:BUILD.log-0.4.6.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__maybe_uninit__2_0_0",
-        url = "https://crates.io/api/v1/crates/maybe-uninit/2.0.0/download",
-        type = "tar.gz",
-        sha256 = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00",
-        strip_prefix = "maybe-uninit-2.0.0",
-        build_file = Label("//proto/raze/remote:BUILD.maybe-uninit-2.0.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__memoffset__0_5_4",
-        url = "https://crates.io/api/v1/crates/memoffset/0.5.4/download",
-        type = "tar.gz",
-        sha256 = "b4fc2c02a7e374099d4ee95a193111f72d2110197fe200272371758f6c3643d8",
-        strip_prefix = "memoffset-0.5.4",
-        build_file = Label("//proto/raze/remote:BUILD.memoffset-0.5.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__mio__0_6_21",
-        url = "https://crates.io/api/v1/crates/mio/0.6.21/download",
-        type = "tar.gz",
-        sha256 = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f",
-        strip_prefix = "mio-0.6.21",
-        build_file = Label("//proto/raze/remote:BUILD.mio-0.6.21.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__mio_uds__0_6_7",
-        url = "https://crates.io/api/v1/crates/mio-uds/0.6.7/download",
-        type = "tar.gz",
-        sha256 = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125",
-        strip_prefix = "mio-uds-0.6.7",
-        build_file = Label("//proto/raze/remote:BUILD.mio-uds-0.6.7.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__miow__0_2_1",
-        url = "https://crates.io/api/v1/crates/miow/0.2.1/download",
-        type = "tar.gz",
-        sha256 = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919",
-        strip_prefix = "miow-0.2.1",
-        build_file = Label("//proto/raze/remote:BUILD.miow-0.2.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__net2__0_2_33",
-        url = "https://crates.io/api/v1/crates/net2/0.2.33/download",
-        type = "tar.gz",
-        sha256 = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88",
-        strip_prefix = "net2-0.2.33",
-        build_file = Label("//proto/raze/remote:BUILD.net2-0.2.33.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__num_cpus__1_13_0",
-        url = "https://crates.io/api/v1/crates/num_cpus/1.13.0/download",
-        type = "tar.gz",
-        sha256 = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3",
-        strip_prefix = "num_cpus-1.13.0",
-        build_file = Label("//proto/raze/remote:BUILD.num_cpus-1.13.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__parking_lot__0_9_0",
-        url = "https://crates.io/api/v1/crates/parking_lot/0.9.0/download",
-        type = "tar.gz",
-        sha256 = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252",
-        strip_prefix = "parking_lot-0.9.0",
-        build_file = Label("//proto/raze/remote:BUILD.parking_lot-0.9.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__parking_lot_core__0_6_2",
-        url = "https://crates.io/api/v1/crates/parking_lot_core/0.6.2/download",
-        type = "tar.gz",
-        sha256 = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b",
-        strip_prefix = "parking_lot_core-0.6.2",
-        build_file = Label("//proto/raze/remote:BUILD.parking_lot_core-0.6.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__protobuf__2_8_2",
-        url = "https://crates.io/api/v1/crates/protobuf/2.8.2/download",
-        type = "tar.gz",
-        sha256 = "70731852eec72c56d11226c8a5f96ad5058a3dab73647ca5f7ee351e464f2571",
-        strip_prefix = "protobuf-2.8.2",
-        patches = [
-            "@rules_rust//proto/raze/patch:protobuf-2.8.2.patch",
-        ],
-        patch_args = [
-            "-p1",
-        ],
-        build_file = Label("//proto/raze/remote:BUILD.protobuf-2.8.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__protobuf_codegen__2_8_2",
-        url = "https://crates.io/api/v1/crates/protobuf-codegen/2.8.2/download",
-        type = "tar.gz",
-        sha256 = "3d74b9cbbf2ac9a7169c85a3714ec16c51ee9ec7cfd511549527e9a7df720795",
-        strip_prefix = "protobuf-codegen-2.8.2",
-        build_file = Label("//proto/raze/remote:BUILD.protobuf-codegen-2.8.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__redox_syscall__0_1_56",
-        url = "https://crates.io/api/v1/crates/redox_syscall/0.1.56/download",
-        type = "tar.gz",
-        sha256 = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84",
-        strip_prefix = "redox_syscall-0.1.56",
-        build_file = Label("//proto/raze/remote:BUILD.redox_syscall-0.1.56.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__rustc_version__0_2_3",
-        url = "https://crates.io/api/v1/crates/rustc_version/0.2.3/download",
-        type = "tar.gz",
-        sha256 = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a",
-        strip_prefix = "rustc_version-0.2.3",
-        build_file = Label("//proto/raze/remote:BUILD.rustc_version-0.2.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__safemem__0_3_3",
-        url = "https://crates.io/api/v1/crates/safemem/0.3.3/download",
-        type = "tar.gz",
-        sha256 = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072",
-        strip_prefix = "safemem-0.3.3",
-        build_file = Label("//proto/raze/remote:BUILD.safemem-0.3.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__scoped_tls__0_1_2",
-        url = "https://crates.io/api/v1/crates/scoped-tls/0.1.2/download",
-        type = "tar.gz",
-        sha256 = "332ffa32bf586782a3efaeb58f127980944bbc8c4d6913a86107ac2a5ab24b28",
-        strip_prefix = "scoped-tls-0.1.2",
-        build_file = Label("//proto/raze/remote:BUILD.scoped-tls-0.1.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__scopeguard__1_1_0",
-        url = "https://crates.io/api/v1/crates/scopeguard/1.1.0/download",
-        type = "tar.gz",
-        sha256 = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd",
-        strip_prefix = "scopeguard-1.1.0",
-        build_file = Label("//proto/raze/remote:BUILD.scopeguard-1.1.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__semver__0_9_0",
-        url = "https://crates.io/api/v1/crates/semver/0.9.0/download",
-        type = "tar.gz",
-        sha256 = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403",
-        strip_prefix = "semver-0.9.0",
-        build_file = Label("//proto/raze/remote:BUILD.semver-0.9.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__semver_parser__0_7_0",
-        url = "https://crates.io/api/v1/crates/semver-parser/0.7.0/download",
-        type = "tar.gz",
-        sha256 = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3",
-        strip_prefix = "semver-parser-0.7.0",
-        build_file = Label("//proto/raze/remote:BUILD.semver-parser-0.7.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__slab__0_3_0",
-        url = "https://crates.io/api/v1/crates/slab/0.3.0/download",
-        type = "tar.gz",
-        sha256 = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23",
-        strip_prefix = "slab-0.3.0",
-        build_file = Label("//proto/raze/remote:BUILD.slab-0.3.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__slab__0_4_2",
-        url = "https://crates.io/api/v1/crates/slab/0.4.2/download",
-        type = "tar.gz",
-        sha256 = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8",
-        strip_prefix = "slab-0.4.2",
-        build_file = Label("//proto/raze/remote:BUILD.slab-0.4.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__smallvec__0_6_13",
-        url = "https://crates.io/api/v1/crates/smallvec/0.6.13/download",
-        type = "tar.gz",
-        sha256 = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6",
-        strip_prefix = "smallvec-0.6.13",
-        build_file = Label("//proto/raze/remote:BUILD.smallvec-0.6.13.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tls_api__0_1_22",
-        url = "https://crates.io/api/v1/crates/tls-api/0.1.22/download",
-        type = "tar.gz",
-        sha256 = "049c03787a0595182357fbd487577947f4351b78ce20c3668f6d49f17feb13d1",
-        strip_prefix = "tls-api-0.1.22",
-        build_file = Label("//proto/raze/remote:BUILD.tls-api-0.1.22.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tls_api_stub__0_1_22",
-        url = "https://crates.io/api/v1/crates/tls-api-stub/0.1.22/download",
-        type = "tar.gz",
-        sha256 = "c9a0cc8c149724db9de7d73a0e1bc80b1a74f5394f08c6f301e11f9c35fa061e",
-        strip_prefix = "tls-api-stub-0.1.22",
-        build_file = Label("//proto/raze/remote:BUILD.tls-api-stub-0.1.22.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio__0_1_22",
-        url = "https://crates.io/api/v1/crates/tokio/0.1.22/download",
-        type = "tar.gz",
-        sha256 = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6",
-        strip_prefix = "tokio-0.1.22",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-0.1.22.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio_codec__0_1_2",
-        url = "https://crates.io/api/v1/crates/tokio-codec/0.1.2/download",
-        type = "tar.gz",
-        sha256 = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b",
-        strip_prefix = "tokio-codec-0.1.2",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-codec-0.1.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio_core__0_1_17",
-        url = "https://crates.io/api/v1/crates/tokio-core/0.1.17/download",
-        type = "tar.gz",
-        sha256 = "aeeffbbb94209023feaef3c196a41cbcdafa06b4a6f893f68779bb5e53796f71",
-        strip_prefix = "tokio-core-0.1.17",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-core-0.1.17.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio_current_thread__0_1_7",
-        url = "https://crates.io/api/v1/crates/tokio-current-thread/0.1.7/download",
-        type = "tar.gz",
-        sha256 = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e",
-        strip_prefix = "tokio-current-thread-0.1.7",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-current-thread-0.1.7.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio_executor__0_1_10",
-        url = "https://crates.io/api/v1/crates/tokio-executor/0.1.10/download",
-        type = "tar.gz",
-        sha256 = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671",
-        strip_prefix = "tokio-executor-0.1.10",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-executor-0.1.10.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio_fs__0_1_7",
-        url = "https://crates.io/api/v1/crates/tokio-fs/0.1.7/download",
-        type = "tar.gz",
-        sha256 = "297a1206e0ca6302a0eed35b700d292b275256f596e2f3fea7729d5e629b6ff4",
-        strip_prefix = "tokio-fs-0.1.7",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-fs-0.1.7.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio_io__0_1_13",
-        url = "https://crates.io/api/v1/crates/tokio-io/0.1.13/download",
-        type = "tar.gz",
-        sha256 = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674",
-        strip_prefix = "tokio-io-0.1.13",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-io-0.1.13.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio_reactor__0_1_12",
-        url = "https://crates.io/api/v1/crates/tokio-reactor/0.1.12/download",
-        type = "tar.gz",
-        sha256 = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351",
-        strip_prefix = "tokio-reactor-0.1.12",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-reactor-0.1.12.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio_sync__0_1_8",
-        url = "https://crates.io/api/v1/crates/tokio-sync/0.1.8/download",
-        type = "tar.gz",
-        sha256 = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee",
-        strip_prefix = "tokio-sync-0.1.8",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-sync-0.1.8.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio_tcp__0_1_4",
-        url = "https://crates.io/api/v1/crates/tokio-tcp/0.1.4/download",
-        type = "tar.gz",
-        sha256 = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72",
-        strip_prefix = "tokio-tcp-0.1.4",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-tcp-0.1.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio_threadpool__0_1_18",
-        url = "https://crates.io/api/v1/crates/tokio-threadpool/0.1.18/download",
-        type = "tar.gz",
-        sha256 = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89",
-        strip_prefix = "tokio-threadpool-0.1.18",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-threadpool-0.1.18.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio_timer__0_1_2",
-        url = "https://crates.io/api/v1/crates/tokio-timer/0.1.2/download",
-        type = "tar.gz",
-        sha256 = "6131e780037787ff1b3f8aad9da83bca02438b72277850dd6ad0d455e0e20efc",
-        strip_prefix = "tokio-timer-0.1.2",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-timer-0.1.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio_timer__0_2_13",
-        url = "https://crates.io/api/v1/crates/tokio-timer/0.2.13/download",
-        type = "tar.gz",
-        sha256 = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296",
-        strip_prefix = "tokio-timer-0.2.13",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-timer-0.2.13.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio_tls_api__0_1_22",
-        url = "https://crates.io/api/v1/crates/tokio-tls-api/0.1.22/download",
-        type = "tar.gz",
-        sha256 = "68d0e040d5b1f4cfca70ec4f371229886a5de5bb554d272a4a8da73004a7b2c9",
-        strip_prefix = "tokio-tls-api-0.1.22",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-tls-api-0.1.22.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio_udp__0_1_6",
-        url = "https://crates.io/api/v1/crates/tokio-udp/0.1.6/download",
-        type = "tar.gz",
-        sha256 = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82",
-        strip_prefix = "tokio-udp-0.1.6",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-udp-0.1.6.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio_uds__0_1_7",
-        url = "https://crates.io/api/v1/crates/tokio-uds/0.1.7/download",
-        type = "tar.gz",
-        sha256 = "65ae5d255ce739e8537221ed2942e0445f4b3b813daebac1c0050ddaaa3587f9",
-        strip_prefix = "tokio-uds-0.1.7",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-uds-0.1.7.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__tokio_uds__0_2_6",
-        url = "https://crates.io/api/v1/crates/tokio-uds/0.2.6/download",
-        type = "tar.gz",
-        sha256 = "5076db410d6fdc6523df7595447629099a1fdc47b3d9f896220780fa48faf798",
-        strip_prefix = "tokio-uds-0.2.6",
-        build_file = Label("//proto/raze/remote:BUILD.tokio-uds-0.2.6.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__unix_socket__0_5_0",
-        url = "https://crates.io/api/v1/crates/unix_socket/0.5.0/download",
-        type = "tar.gz",
-        sha256 = "6aa2700417c405c38f5e6902d699345241c28c0b7ade4abaad71e35a87eb1564",
-        strip_prefix = "unix_socket-0.5.0",
-        build_file = Label("//proto/raze/remote:BUILD.unix_socket-0.5.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__void__1_0_2",
-        url = "https://crates.io/api/v1/crates/void/1.0.2/download",
-        type = "tar.gz",
-        sha256 = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d",
-        strip_prefix = "void-1.0.2",
-        build_file = Label("//proto/raze/remote:BUILD.void-1.0.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__winapi__0_2_8",
-        url = "https://crates.io/api/v1/crates/winapi/0.2.8/download",
-        type = "tar.gz",
-        sha256 = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a",
-        strip_prefix = "winapi-0.2.8",
-        build_file = Label("//proto/raze/remote:BUILD.winapi-0.2.8.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__winapi__0_3_8",
-        url = "https://crates.io/api/v1/crates/winapi/0.3.8/download",
-        type = "tar.gz",
-        sha256 = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6",
-        strip_prefix = "winapi-0.3.8",
-        build_file = Label("//proto/raze/remote:BUILD.winapi-0.3.8.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__winapi_build__0_1_1",
-        url = "https://crates.io/api/v1/crates/winapi-build/0.1.1/download",
-        type = "tar.gz",
-        sha256 = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc",
-        strip_prefix = "winapi-build-0.1.1",
-        build_file = Label("//proto/raze/remote:BUILD.winapi-build-0.1.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__winapi_i686_pc_windows_gnu__0_4_0",
-        url = "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
-        type = "tar.gz",
-        sha256 = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6",
-        strip_prefix = "winapi-i686-pc-windows-gnu-0.4.0",
-        build_file = Label("//proto/raze/remote:BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__winapi_x86_64_pc_windows_gnu__0_4_0",
-        url = "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
-        type = "tar.gz",
-        sha256 = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f",
-        strip_prefix = "winapi-x86_64-pc-windows-gnu-0.4.0",
-        build_file = Label("//proto/raze/remote:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_proto__ws2_32_sys__0_2_1",
-        url = "https://crates.io/api/v1/crates/ws2_32-sys/0.2.1/download",
-        type = "tar.gz",
-        sha256 = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e",
-        strip_prefix = "ws2_32-sys-0.2.1",
-        build_file = Label("//proto/raze/remote:BUILD.ws2_32-sys-0.2.1.bazel"),
-    )
diff --git a/third_party/rules_rust/proto/raze/patch/BUILD.bazel b/third_party/rules_rust/proto/raze/patch/BUILD.bazel
deleted file mode 100644
index a5e9d2a..0000000
--- a/third_party/rules_rust/proto/raze/patch/BUILD.bazel
+++ /dev/null
@@ -1,8 +0,0 @@
-package(default_visibility = ["//proto/raze:__subpackages__"])
-
-filegroup(
-    name = "patches",
-    srcs = [
-        "protobuf-2.8.2.patch",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/patch/README.md b/third_party/rules_rust/proto/raze/patch/README.md
deleted file mode 100644
index 2cd05d7..0000000
--- a/third_party/rules_rust/proto/raze/patch/README.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Patches
-
-Cargo raze, in its remote mode allows for patches to be applied to a repository
-before building it with rustc. It is advisable to use this functionality
-sparingly, if at all. Also note that the patch is applied after all of the
-dependency resolution has been completed by cargo raze, and that patching the
-version of a dependency will not cause cargo raze to update that dependency in
-the BUILD file.
-
-The patch itself can be generated using git or another tool. The output of git
-diff requires the `-p1` option to remove the leading `/` from the git diff patch
-format.
-
-## protobuf-2.8.2
-
-The protobuf crate from the rust-protobuf repository introduced a build.rs
-script in the 2.x.x series. This generates a small version.rs file that would be
-[included into lib.rs](https://github.com/stepancheg/rust-protobuf/blob/v2.8/protobuf/src/lib.rs#L122).
-However, the build.rs file requires a number of environment variables, normally
-provided by cargo to the build file. Cargo raze does not provide these
-variables. The resulting code includes a version string and version identifier.
-The version string is then used by protobuf-codegen to generate code refering to
-the identifier in the protobuf library. The use can be seen
-[here](https://github.com/stepancheg/rust-protobuf/blob/v2.8/protobuf-codegen/src/lib.rs#L160).
-This is to enforce at compile time that the version of protobuf-codegen matches
-the version of the protobuf crate.
-
-For this crate, the patch that is applied is replacing the include! macro with
-what would be generated by the build.rs file. This lets us avoid running the
-build file altogether, at the expense of having to update the patch for every
-version.
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.autocfg-1.0.0.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.autocfg-1.0.0.bazel
deleted file mode 100644
index 9682987..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.autocfg-1.0.0.bazel
+++ /dev/null
@@ -1,63 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "integers" with type "example" omitted
-
-# Unsupported target "paths" with type "example" omitted
-
-# Unsupported target "traits" with type "example" omitted
-
-# Unsupported target "versions" with type "example" omitted
-
-rust_library(
-    name = "autocfg",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "rustflags" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.base64-0.9.3.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.base64-0.9.3.bazel
deleted file mode 100644
index 0ff1374..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.base64-0.9.3.bazel
+++ /dev/null
@@ -1,67 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "benchmarks" with type "bench" omitted
-
-# Unsupported target "make_tables" with type "example" omitted
-
-rust_library(
-    name = "base64",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.9.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__byteorder__1_3_4//:byteorder",
-        "@rules_rust_proto__safemem__0_3_3//:safemem",
-    ],
-)
-
-# Unsupported target "decode" with type "test" omitted
-
-# Unsupported target "encode" with type "test" omitted
-
-# Unsupported target "helpers" with type "test" omitted
-
-# Unsupported target "tests" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.bitflags-1.2.1.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.bitflags-1.2.1.bazel
deleted file mode 100644
index 7d99f2d..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.bitflags-1.2.1.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "bitflags",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.2.1",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.byteorder-1.3.4.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.byteorder-1.3.4.bazel
deleted file mode 100644
index 861495b..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.byteorder-1.3.4.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "bench" with type "bench" omitted
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "byteorder",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.3.4",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.bytes-0.4.12.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.bytes-0.4.12.bazel
deleted file mode 100644
index ca3b7ae..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.bytes-0.4.12.bazel
+++ /dev/null
@@ -1,77 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "bytes" with type "bench" omitted
-
-rust_library(
-    name = "bytes",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.12",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__byteorder__1_3_4//:byteorder",
-        "@rules_rust_proto__iovec__0_1_4//:iovec",
-    ],
-)
-
-# Unsupported target "test_buf" with type "test" omitted
-
-# Unsupported target "test_buf_mut" with type "test" omitted
-
-# Unsupported target "test_bytes" with type "test" omitted
-
-# Unsupported target "test_chain" with type "test" omitted
-
-# Unsupported target "test_debug" with type "test" omitted
-
-# Unsupported target "test_from_buf" with type "test" omitted
-
-# Unsupported target "test_iter" with type "test" omitted
-
-# Unsupported target "test_reader" with type "test" omitted
-
-# Unsupported target "test_serde" with type "test" omitted
-
-# Unsupported target "test_take" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.cfg-if-0.1.10.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.cfg-if-0.1.10.bazel
deleted file mode 100644
index 792b241..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.cfg-if-0.1.10.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "cfg_if",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.10",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "xcrate" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.cloudabi-0.0.3.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.cloudabi-0.0.3.bazel
deleted file mode 100644
index acf75d1..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.cloudabi-0.0.3.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "restricted",  # BSD-2-Clause from expression "BSD-2-Clause"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "cloudabi",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "bitflags",
-        "default",
-    ],
-    crate_root = "cloudabi.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.0.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__bitflags__1_2_1//:bitflags",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.crossbeam-deque-0.7.3.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.crossbeam-deque-0.7.3.bazel
deleted file mode 100644
index 4e517b6..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.crossbeam-deque-0.7.3.bazel
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "crossbeam_deque",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.7.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__crossbeam_epoch__0_8_2//:crossbeam_epoch",
-        "@rules_rust_proto__crossbeam_utils__0_7_2//:crossbeam_utils",
-        "@rules_rust_proto__maybe_uninit__2_0_0//:maybe_uninit",
-    ],
-)
-
-# Unsupported target "fifo" with type "test" omitted
-
-# Unsupported target "injector" with type "test" omitted
-
-# Unsupported target "lifo" with type "test" omitted
-
-# Unsupported target "steal" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.crossbeam-epoch-0.8.2.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.crossbeam-epoch-0.8.2.bazel
deleted file mode 100644
index 6749a99..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.crossbeam-epoch-0.8.2.bazel
+++ /dev/null
@@ -1,74 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "defer" with type "bench" omitted
-
-# Unsupported target "flush" with type "bench" omitted
-
-# Unsupported target "pin" with type "bench" omitted
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-# Unsupported target "sanitize" with type "example" omitted
-
-# Unsupported target "treiber_stack" with type "example" omitted
-
-rust_library(
-    name = "crossbeam_epoch",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "lazy_static",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.8.2",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__cfg_if__0_1_10//:cfg_if",
-        "@rules_rust_proto__crossbeam_utils__0_7_2//:crossbeam_utils",
-        "@rules_rust_proto__lazy_static__1_4_0//:lazy_static",
-        "@rules_rust_proto__maybe_uninit__2_0_0//:maybe_uninit",
-        "@rules_rust_proto__memoffset__0_5_4//:memoffset",
-        "@rules_rust_proto__scopeguard__1_1_0//:scopeguard",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.crossbeam-queue-0.2.1.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.crossbeam-queue-0.2.1.bazel
deleted file mode 100644
index fac28d3..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.crossbeam-queue-0.2.1.bazel
+++ /dev/null
@@ -1,61 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR (Apache-2.0 AND BSD-2-Clause)"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "crossbeam_queue",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.1",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__cfg_if__0_1_10//:cfg_if",
-        "@rules_rust_proto__crossbeam_utils__0_7_2//:crossbeam_utils",
-    ],
-)
-
-# Unsupported target "array_queue" with type "test" omitted
-
-# Unsupported target "seg_queue" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.crossbeam-utils-0.7.2.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.crossbeam-utils-0.7.2.bazel
deleted file mode 100644
index 61f09e2..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.crossbeam-utils-0.7.2.bazel
+++ /dev/null
@@ -1,74 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "atomic_cell" with type "bench" omitted
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "crossbeam_utils",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "lazy_static",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.7.2",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__cfg_if__0_1_10//:cfg_if",
-        "@rules_rust_proto__lazy_static__1_4_0//:lazy_static",
-    ],
-)
-
-# Unsupported target "atomic_cell" with type "test" omitted
-
-# Unsupported target "cache_padded" with type "test" omitted
-
-# Unsupported target "parker" with type "test" omitted
-
-# Unsupported target "sharded_lock" with type "test" omitted
-
-# Unsupported target "thread" with type "test" omitted
-
-# Unsupported target "wait_group" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.fnv-1.0.6.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.fnv-1.0.6.bazel
deleted file mode 100644
index ddac662..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.fnv-1.0.6.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "fnv",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.6",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.fuchsia-zircon-0.3.3.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.fuchsia-zircon-0.3.3.bazel
deleted file mode 100644
index 69c1ae7..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.fuchsia-zircon-0.3.3.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # BSD-3-Clause from expression "BSD-3-Clause"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "fuchsia_zircon",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__bitflags__1_2_1//:bitflags",
-        "@rules_rust_proto__fuchsia_zircon_sys__0_3_3//:fuchsia_zircon_sys",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.fuchsia-zircon-sys-0.3.3.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.fuchsia-zircon-sys-0.3.3.bazel
deleted file mode 100644
index ce34aa2..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.fuchsia-zircon-sys-0.3.3.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # BSD-3-Clause from expression "BSD-3-Clause"
-])
-
-# Generated Targets
-
-# Unsupported target "hello" with type "example" omitted
-
-rust_library(
-    name = "fuchsia_zircon_sys",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.3",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.futures-0.1.29.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.futures-0.1.29.bazel
deleted file mode 100644
index 8ae5d86..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.futures-0.1.29.bazel
+++ /dev/null
@@ -1,118 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "bilock" with type "bench" omitted
-
-# Unsupported target "futures_unordered" with type "bench" omitted
-
-# Unsupported target "poll" with type "bench" omitted
-
-# Unsupported target "sync_mpsc" with type "bench" omitted
-
-# Unsupported target "thread_notify" with type "bench" omitted
-
-rust_library(
-    name = "futures",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "use_std",
-        "with-deprecated",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.29",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "all" with type "test" omitted
-
-# Unsupported target "bilock" with type "test" omitted
-
-# Unsupported target "buffer_unordered" with type "test" omitted
-
-# Unsupported target "channel" with type "test" omitted
-
-# Unsupported target "eager_drop" with type "test" omitted
-
-# Unsupported target "eventual" with type "test" omitted
-
-# Unsupported target "fuse" with type "test" omitted
-
-# Unsupported target "future_flatten_stream" with type "test" omitted
-
-# Unsupported target "futures_ordered" with type "test" omitted
-
-# Unsupported target "futures_unordered" with type "test" omitted
-
-# Unsupported target "inspect" with type "test" omitted
-
-# Unsupported target "mpsc" with type "test" omitted
-
-# Unsupported target "mpsc-close" with type "test" omitted
-
-# Unsupported target "oneshot" with type "test" omitted
-
-# Unsupported target "ready_queue" with type "test" omitted
-
-# Unsupported target "recurse" with type "test" omitted
-
-# Unsupported target "select_all" with type "test" omitted
-
-# Unsupported target "select_ok" with type "test" omitted
-
-# Unsupported target "shared" with type "test" omitted
-
-# Unsupported target "sink" with type "test" omitted
-
-# Unsupported target "split" with type "test" omitted
-
-# Unsupported target "stream" with type "test" omitted
-
-# Unsupported target "stream_catch_unwind" with type "test" omitted
-
-# Unsupported target "unfold" with type "test" omitted
-
-# Unsupported target "unsync" with type "test" omitted
-
-# Unsupported target "unsync-oneshot" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.futures-cpupool-0.1.8.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.futures-cpupool-0.1.8.bazel
deleted file mode 100644
index 0543a19..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.futures-cpupool-0.1.8.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "futures_cpupool",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "with-deprecated",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.8",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__num_cpus__1_13_0//:num_cpus",
-    ],
-)
-
-# Unsupported target "smoke" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.grpc-0.6.2.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.grpc-0.6.2.bazel
deleted file mode 100644
index c844b62..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.grpc-0.6.2.bazel
+++ /dev/null
@@ -1,71 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "grpc",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.2",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__base64__0_9_3//:base64",
-        "@rules_rust_proto__bytes__0_4_12//:bytes",
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__futures_cpupool__0_1_8//:futures_cpupool",
-        "@rules_rust_proto__httpbis__0_7_0//:httpbis",
-        "@rules_rust_proto__log__0_4_6//:log",
-        "@rules_rust_proto__protobuf__2_8_2//:protobuf",
-        "@rules_rust_proto__tls_api__0_1_22//:tls_api",
-        "@rules_rust_proto__tls_api_stub__0_1_22//:tls_api_stub",
-        "@rules_rust_proto__tokio_core__0_1_17//:tokio_core",
-        "@rules_rust_proto__tokio_io__0_1_13//:tokio_io",
-        "@rules_rust_proto__tokio_tls_api__0_1_22//:tokio_tls_api",
-    ],
-)
-
-# Unsupported target "client" with type "test" omitted
-
-# Unsupported target "server" with type "test" omitted
-
-# Unsupported target "simple" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.grpc-compiler-0.6.2.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.grpc-compiler-0.6.2.bazel
deleted file mode 100644
index 8dab3a3..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.grpc-compiler-0.6.2.bazel
+++ /dev/null
@@ -1,81 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_protoc_gen_rust_grpc",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/bin/protoc-gen-rust-grpc.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.2",
-    # buildifier: leave-alone
-    deps = [
-        ":grpc_compiler",
-        "@rules_rust_proto__protobuf__2_8_2//:protobuf",
-        "@rules_rust_proto__protobuf_codegen__2_8_2//:protobuf_codegen",
-    ],
-)
-
-rust_library(
-    name = "grpc_compiler",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.2",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__protobuf__2_8_2//:protobuf",
-        "@rules_rust_proto__protobuf_codegen__2_8_2//:protobuf_codegen",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.hermit-abi-0.1.11.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.hermit-abi-0.1.11.bazel
deleted file mode 100644
index 6c5b997..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.hermit-abi-0.1.11.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "hermit_abi",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.11",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__libc__0_2_69//:libc",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.httpbis-0.7.0.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.httpbis-0.7.0.bazel
deleted file mode 100644
index f329e41..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.httpbis-0.7.0.bazel
+++ /dev/null
@@ -1,99 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "client_server" with type "bench" omitted
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-# Unsupported target "client" with type "example" omitted
-
-# Unsupported target "server" with type "example" omitted
-
-rust_library(
-    name = "httpbis",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.7.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__bytes__0_4_12//:bytes",
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__futures_cpupool__0_1_8//:futures_cpupool",
-        "@rules_rust_proto__log__0_4_6//:log",
-        "@rules_rust_proto__net2__0_2_33//:net2",
-        "@rules_rust_proto__tls_api__0_1_22//:tls_api",
-        "@rules_rust_proto__tls_api_stub__0_1_22//:tls_api_stub",
-        "@rules_rust_proto__tokio_core__0_1_17//:tokio_core",
-        "@rules_rust_proto__tokio_io__0_1_13//:tokio_io",
-        "@rules_rust_proto__tokio_timer__0_1_2//:tokio_timer",
-        "@rules_rust_proto__tokio_tls_api__0_1_22//:tokio_tls_api",
-        "@rules_rust_proto__void__1_0_2//:void",
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_proto__tokio_uds__0_1_7//:tokio_uds",
-            "@rules_rust_proto__unix_socket__0_5_0//:unix_socket",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.iovec-0.1.4.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.iovec-0.1.4.bazel
deleted file mode 100644
index 9fcb172..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.iovec-0.1.4.bazel
+++ /dev/null
@@ -1,78 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "iovec",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.4",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_proto__libc__0_2_69//:libc",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.kernel32-sys-0.2.2.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.kernel32-sys-0.2.2.bazel
deleted file mode 100644
index 4103c40..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.kernel32-sys-0.2.2.bazel
+++ /dev/null
@@ -1,65 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-alias(
-    name = "kernel32_sys",
-    actual = ":kernel32",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-rust_library(
-    name = "kernel32",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.2",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__winapi__0_2_8//:winapi",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.lazy_static-1.4.0.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.lazy_static-1.4.0.bazel
deleted file mode 100644
index 1cf4320..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.lazy_static-1.4.0.bazel
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "lazy_static",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-        "--cfg=lazy_static_heap_impl",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.4.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "no_std" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.libc-0.2.69.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.libc-0.2.69.bazel
deleted file mode 100644
index 1116822..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.libc-0.2.69.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "libc",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.69",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "const_fn" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.lock_api-0.3.4.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.lock_api-0.3.4.bazel
deleted file mode 100644
index c4fc23f..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.lock_api-0.3.4.bazel
+++ /dev/null
@@ -1,54 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "lock_api",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.4",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__scopeguard__1_1_0//:scopeguard",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.log-0.3.9.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.log-0.3.9.bazel
deleted file mode 100644
index 8a8aad4..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.log-0.3.9.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "log",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "use_std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.9",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__log__0_4_6//:log",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.log-0.4.6.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.log-0.4.6.bazel
deleted file mode 100644
index a3a7a10..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.log-0.4.6.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "log",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.6",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__cfg_if__0_1_10//:cfg_if",
-    ],
-)
-
-# Unsupported target "filters" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.maybe-uninit-2.0.0.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.maybe-uninit-2.0.0.bazel
deleted file mode 100644
index c991af2..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.maybe-uninit-2.0.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "maybe_uninit",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.0.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "doesnt_drop" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.memoffset-0.5.4.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.memoffset-0.5.4.bazel
deleted file mode 100644
index cd38911..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.memoffset-0.5.4.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "memoffset",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.5.4",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.mio-0.6.21.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.mio-0.6.21.bazel
deleted file mode 100644
index e8c6e95..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.mio-0.6.21.bazel
+++ /dev/null
@@ -1,100 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "bench_poll" with type "bench" omitted
-
-rust_library(
-    name = "mio",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-        "default",
-        "with-deprecated",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.21",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__cfg_if__0_1_10//:cfg_if",
-        "@rules_rust_proto__iovec__0_1_4//:iovec",
-        "@rules_rust_proto__log__0_4_6//:log",
-        "@rules_rust_proto__net2__0_2_33//:net2",
-        "@rules_rust_proto__slab__0_4_2//:slab",
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_proto__libc__0_2_69//:libc",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_proto__kernel32_sys__0_2_2//:kernel32_sys",
-            "@rules_rust_proto__miow__0_2_1//:miow",
-            "@rules_rust_proto__winapi__0_2_8//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.mio-uds-0.6.7.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.mio-uds-0.6.7.bazel
deleted file mode 100644
index 2fada07..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.mio-uds-0.6.7.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "mio_uds",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.7",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_proto__iovec__0_1_4//:iovec",
-            "@rules_rust_proto__libc__0_2_69//:libc",
-            "@rules_rust_proto__mio__0_6_21//:mio",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-# Unsupported target "echo" with type "test" omitted
-
-# Unsupported target "smoke" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.miow-0.2.1.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.miow-0.2.1.bazel
deleted file mode 100644
index 766f4cd..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.miow-0.2.1.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "miow",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.1",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__kernel32_sys__0_2_2//:kernel32_sys",
-        "@rules_rust_proto__net2__0_2_33//:net2",
-        "@rules_rust_proto__winapi__0_2_8//:winapi",
-        "@rules_rust_proto__ws2_32_sys__0_2_1//:ws2_32_sys",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.net2-0.2.33.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.net2-0.2.33.bazel
deleted file mode 100644
index 2d13ae7..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.net2-0.2.33.bazel
+++ /dev/null
@@ -1,92 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "net2",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-        "default",
-        "duration",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.33",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__cfg_if__0_1_10//:cfg_if",
-    ] + selects.with_or({
-        # cfg(any(target_os = "redox", unix))
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_proto__libc__0_2_69//:libc",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_proto__winapi__0_3_8//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-# Unsupported target "all" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.num_cpus-1.13.0.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.num_cpus-1.13.0.bazel
deleted file mode 100644
index 5aee7b9..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.num_cpus-1.13.0.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "values" with type "example" omitted
-
-rust_library(
-    name = "num_cpus",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.13.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__libc__0_2_69//:libc",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.parking_lot-0.9.0.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.parking_lot-0.9.0.bazel
deleted file mode 100644
index 2ce210f..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.parking_lot-0.9.0.bazel
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "parking_lot",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.9.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__lock_api__0_3_4//:lock_api",
-        "@rules_rust_proto__parking_lot_core__0_6_2//:parking_lot_core",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.parking_lot_core-0.6.2.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.parking_lot_core-0.6.2.bazel
deleted file mode 100644
index 843a86b..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.parking_lot_core-0.6.2.bazel
+++ /dev/null
@@ -1,91 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "parking_lot_core",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.2",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__cfg_if__0_1_10//:cfg_if",
-        "@rules_rust_proto__smallvec__0_6_13//:smallvec",
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_proto__libc__0_2_69//:libc",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_proto__winapi__0_3_8//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.protobuf-2.8.2.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.protobuf-2.8.2.bazel
deleted file mode 100644
index d27c2d6..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.protobuf-2.8.2.bazel
+++ /dev/null
@@ -1,62 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "coded_input_stream" with type "bench" omitted
-
-# Unsupported target "coded_output_stream" with type "bench" omitted
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "protobuf",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "bytes",
-        "with-bytes",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.8.2",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__bytes__0_4_12//:bytes",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.protobuf-codegen-2.8.2.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.protobuf-codegen-2.8.2.bazel
deleted file mode 100644
index eef555a..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.protobuf-codegen-2.8.2.bazel
+++ /dev/null
@@ -1,104 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_protobuf_bin_gen_rust_do_not_use",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/bin/protobuf-bin-gen-rust-do-not-use.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.8.2",
-    # buildifier: leave-alone
-    deps = [
-        ":protobuf_codegen",
-        "@rules_rust_proto__protobuf__2_8_2//:protobuf",
-    ],
-)
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_protoc_gen_rust",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/bin/protoc-gen-rust.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.8.2",
-    # buildifier: leave-alone
-    deps = [
-        ":protobuf_codegen",
-        "@rules_rust_proto__protobuf__2_8_2//:protobuf",
-    ],
-)
-
-rust_library(
-    name = "protobuf_codegen",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.8.2",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__protobuf__2_8_2//:protobuf",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.redox_syscall-0.1.56.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.redox_syscall-0.1.56.bazel
deleted file mode 100644
index 553dc6f..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.redox_syscall-0.1.56.bazel
+++ /dev/null
@@ -1,62 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-alias(
-    name = "redox_syscall",
-    actual = ":syscall",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-rust_library(
-    name = "syscall",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.56",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.rustc_version-0.2.3.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.rustc_version-0.2.3.bazel
deleted file mode 100644
index 671bffc..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.rustc_version-0.2.3.bazel
+++ /dev/null
@@ -1,54 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "rustc_version",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__semver__0_9_0//:semver",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.safemem-0.3.3.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.safemem-0.3.3.bazel
deleted file mode 100644
index a3cb953..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.safemem-0.3.3.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "safemem",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.3",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.scoped-tls-0.1.2.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.scoped-tls-0.1.2.bazel
deleted file mode 100644
index a6e593a..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.scoped-tls-0.1.2.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "scoped_tls",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.2",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.scopeguard-1.1.0.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.scopeguard-1.1.0.bazel
deleted file mode 100644
index 8d5533a..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.scopeguard-1.1.0.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "readme" with type "example" omitted
-
-rust_library(
-    name = "scopeguard",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.1.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.semver-0.9.0.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.semver-0.9.0.bazel
deleted file mode 100644
index 370211c..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.semver-0.9.0.bazel
+++ /dev/null
@@ -1,61 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "semver",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.9.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__semver_parser__0_7_0//:semver_parser",
-    ],
-)
-
-# Unsupported target "deprecation" with type "test" omitted
-
-# Unsupported target "regression" with type "test" omitted
-
-# Unsupported target "serde" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.semver-parser-0.7.0.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.semver-parser-0.7.0.bazel
deleted file mode 100644
index 9f91111..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.semver-parser-0.7.0.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "semver_parser",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.7.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.slab-0.3.0.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.slab-0.3.0.bazel
deleted file mode 100644
index 2af87d1..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.slab-0.3.0.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "slab",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.slab-0.4.2.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.slab-0.4.2.bazel
deleted file mode 100644
index 85e61e3..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.slab-0.4.2.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "slab",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.2",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "slab" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.smallvec-0.6.13.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.smallvec-0.6.13.bazel
deleted file mode 100644
index aeaedfd..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.smallvec-0.6.13.bazel
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "bench" with type "bench" omitted
-
-rust_library(
-    name = "smallvec",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.13",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__maybe_uninit__2_0_0//:maybe_uninit",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tls-api-0.1.22.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tls-api-0.1.22.bazel
deleted file mode 100644
index e75e72b..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tls-api-0.1.22.bazel
+++ /dev/null
@@ -1,54 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "tls_api",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.22",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__log__0_4_6//:log",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tls-api-stub-0.1.22.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tls-api-stub-0.1.22.bazel
deleted file mode 100644
index 71fe4cf..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tls-api-stub-0.1.22.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "tls_api_stub",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.22",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__tls_api__0_1_22//:tls_api",
-        "@rules_rust_proto__void__1_0_2//:void",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-0.1.22.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-0.1.22.bazel
deleted file mode 100644
index 8c46d0c..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-0.1.22.bazel
+++ /dev/null
@@ -1,171 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "blocking" with type "example" omitted
-
-# Unsupported target "chat" with type "example" omitted
-
-# Unsupported target "chat-combinator" with type "example" omitted
-
-# Unsupported target "chat-combinator-current-thread" with type "example" omitted
-
-# Unsupported target "connect" with type "example" omitted
-
-# Unsupported target "echo" with type "example" omitted
-
-# Unsupported target "echo-udp" with type "example" omitted
-
-# Unsupported target "hello_world" with type "example" omitted
-
-# Unsupported target "manual-runtime" with type "example" omitted
-
-# Unsupported target "print_each_packet" with type "example" omitted
-
-# Unsupported target "proxy" with type "example" omitted
-
-# Unsupported target "tinydb" with type "example" omitted
-
-# Unsupported target "tinyhttp" with type "example" omitted
-
-# Unsupported target "udp-client" with type "example" omitted
-
-# Unsupported target "udp-codec" with type "example" omitted
-
-rust_library(
-    name = "tokio",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-        "bytes",
-        "codec",
-        "default",
-        "fs",
-        "io",
-        "mio",
-        "num_cpus",
-        "reactor",
-        "rt-full",
-        "sync",
-        "tcp",
-        "timer",
-        "tokio-codec",
-        "tokio-current-thread",
-        "tokio-executor",
-        "tokio-fs",
-        "tokio-io",
-        "tokio-reactor",
-        "tokio-sync",
-        "tokio-tcp",
-        "tokio-threadpool",
-        "tokio-timer",
-        "tokio-udp",
-        "tokio-uds",
-        "udp",
-        "uds",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.22",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__bytes__0_4_12//:bytes",
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__mio__0_6_21//:mio",
-        "@rules_rust_proto__num_cpus__1_13_0//:num_cpus",
-        "@rules_rust_proto__tokio_codec__0_1_2//:tokio_codec",
-        "@rules_rust_proto__tokio_current_thread__0_1_7//:tokio_current_thread",
-        "@rules_rust_proto__tokio_executor__0_1_10//:tokio_executor",
-        "@rules_rust_proto__tokio_fs__0_1_7//:tokio_fs",
-        "@rules_rust_proto__tokio_io__0_1_13//:tokio_io",
-        "@rules_rust_proto__tokio_reactor__0_1_12//:tokio_reactor",
-        "@rules_rust_proto__tokio_sync__0_1_8//:tokio_sync",
-        "@rules_rust_proto__tokio_tcp__0_1_4//:tokio_tcp",
-        "@rules_rust_proto__tokio_threadpool__0_1_18//:tokio_threadpool",
-        "@rules_rust_proto__tokio_timer__0_2_13//:tokio_timer",
-        "@rules_rust_proto__tokio_udp__0_1_6//:tokio_udp",
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_proto__tokio_uds__0_2_6//:tokio_uds",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-# Unsupported target "buffered" with type "test" omitted
-
-# Unsupported target "clock" with type "test" omitted
-
-# Unsupported target "drop-core" with type "test" omitted
-
-# Unsupported target "enumerate" with type "test" omitted
-
-# Unsupported target "global" with type "test" omitted
-
-# Unsupported target "length_delimited" with type "test" omitted
-
-# Unsupported target "line-frames" with type "test" omitted
-
-# Unsupported target "pipe-hup" with type "test" omitted
-
-# Unsupported target "reactor" with type "test" omitted
-
-# Unsupported target "runtime" with type "test" omitted
-
-# Unsupported target "timer" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-codec-0.1.2.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-codec-0.1.2.bazel
deleted file mode 100644
index 4a6e746..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-codec-0.1.2.bazel
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "tokio_codec",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.2",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__bytes__0_4_12//:bytes",
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__tokio_io__0_1_13//:tokio_io",
-    ],
-)
-
-# Unsupported target "codecs" with type "test" omitted
-
-# Unsupported target "framed" with type "test" omitted
-
-# Unsupported target "framed_read" with type "test" omitted
-
-# Unsupported target "framed_write" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-core-0.1.17.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-core-0.1.17.bazel
deleted file mode 100644
index 77a8bc0..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-core-0.1.17.bazel
+++ /dev/null
@@ -1,118 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "latency" with type "bench" omitted
-
-# Unsupported target "mio-ops" with type "bench" omitted
-
-# Unsupported target "tcp" with type "bench" omitted
-
-# Unsupported target "chat" with type "example" omitted
-
-# Unsupported target "compress" with type "example" omitted
-
-# Unsupported target "connect" with type "example" omitted
-
-# Unsupported target "echo" with type "example" omitted
-
-# Unsupported target "echo-threads" with type "example" omitted
-
-# Unsupported target "echo-udp" with type "example" omitted
-
-# Unsupported target "hello" with type "example" omitted
-
-# Unsupported target "proxy" with type "example" omitted
-
-# Unsupported target "sink" with type "example" omitted
-
-# Unsupported target "tinydb" with type "example" omitted
-
-# Unsupported target "tinyhttp" with type "example" omitted
-
-# Unsupported target "udp-codec" with type "example" omitted
-
-rust_library(
-    name = "tokio_core",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.17",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__bytes__0_4_12//:bytes",
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__iovec__0_1_4//:iovec",
-        "@rules_rust_proto__log__0_4_6//:log",
-        "@rules_rust_proto__mio__0_6_21//:mio",
-        "@rules_rust_proto__scoped_tls__0_1_2//:scoped_tls",
-        "@rules_rust_proto__tokio__0_1_22//:tokio",
-        "@rules_rust_proto__tokio_executor__0_1_10//:tokio_executor",
-        "@rules_rust_proto__tokio_io__0_1_13//:tokio_io",
-        "@rules_rust_proto__tokio_reactor__0_1_12//:tokio_reactor",
-        "@rules_rust_proto__tokio_timer__0_2_13//:tokio_timer",
-    ],
-)
-
-# Unsupported target "buffered" with type "test" omitted
-
-# Unsupported target "chain" with type "test" omitted
-
-# Unsupported target "echo" with type "test" omitted
-
-# Unsupported target "interval" with type "test" omitted
-
-# Unsupported target "limit" with type "test" omitted
-
-# Unsupported target "line-frames" with type "test" omitted
-
-# Unsupported target "pipe-hup" with type "test" omitted
-
-# Unsupported target "spawn" with type "test" omitted
-
-# Unsupported target "stream-buffered" with type "test" omitted
-
-# Unsupported target "tcp" with type "test" omitted
-
-# Unsupported target "timeout" with type "test" omitted
-
-# Unsupported target "udp" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-current-thread-0.1.7.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-current-thread-0.1.7.bazel
deleted file mode 100644
index 2a34fe3..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-current-thread-0.1.7.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "tokio_current_thread",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.7",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__tokio_executor__0_1_10//:tokio_executor",
-    ],
-)
-
-# Unsupported target "current_thread" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-executor-0.1.10.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-executor-0.1.10.bazel
deleted file mode 100644
index 1e34e30..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-executor-0.1.10.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "tokio_executor",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.10",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__crossbeam_utils__0_7_2//:crossbeam_utils",
-        "@rules_rust_proto__futures__0_1_29//:futures",
-    ],
-)
-
-# Unsupported target "executor" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-fs-0.1.7.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-fs-0.1.7.bazel
deleted file mode 100644
index 1ade220..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-fs-0.1.7.bazel
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "std-echo" with type "example" omitted
-
-rust_library(
-    name = "tokio_fs",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.7",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__tokio_io__0_1_13//:tokio_io",
-        "@rules_rust_proto__tokio_threadpool__0_1_18//:tokio_threadpool",
-    ],
-)
-
-# Unsupported target "dir" with type "test" omitted
-
-# Unsupported target "file" with type "test" omitted
-
-# Unsupported target "link" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-io-0.1.13.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-io-0.1.13.bazel
deleted file mode 100644
index 725cef6..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-io-0.1.13.bazel
+++ /dev/null
@@ -1,60 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "tokio_io",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.13",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__bytes__0_4_12//:bytes",
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__log__0_4_6//:log",
-    ],
-)
-
-# Unsupported target "async_read" with type "test" omitted
-
-# Unsupported target "length_delimited" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-reactor-0.1.12.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-reactor-0.1.12.bazel
deleted file mode 100644
index 79c60af..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-reactor-0.1.12.bazel
+++ /dev/null
@@ -1,66 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "basic" with type "bench" omitted
-
-rust_library(
-    name = "tokio_reactor",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.12",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__crossbeam_utils__0_7_2//:crossbeam_utils",
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__lazy_static__1_4_0//:lazy_static",
-        "@rules_rust_proto__log__0_4_6//:log",
-        "@rules_rust_proto__mio__0_6_21//:mio",
-        "@rules_rust_proto__num_cpus__1_13_0//:num_cpus",
-        "@rules_rust_proto__parking_lot__0_9_0//:parking_lot",
-        "@rules_rust_proto__slab__0_4_2//:slab",
-        "@rules_rust_proto__tokio_executor__0_1_10//:tokio_executor",
-        "@rules_rust_proto__tokio_io__0_1_13//:tokio_io",
-        "@rules_rust_proto__tokio_sync__0_1_8//:tokio_sync",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-sync-0.1.8.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-sync-0.1.8.bazel
deleted file mode 100644
index ceddbdd..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-sync-0.1.8.bazel
+++ /dev/null
@@ -1,83 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "mpsc" with type "bench" omitted
-
-# Unsupported target "oneshot" with type "bench" omitted
-
-rust_library(
-    name = "tokio_sync",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.8",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__fnv__1_0_6//:fnv",
-        "@rules_rust_proto__futures__0_1_29//:futures",
-    ],
-)
-
-# Unsupported target "atomic_task" with type "test" omitted
-
-# Unsupported target "errors" with type "test" omitted
-
-# Unsupported target "fuzz_atomic_task" with type "test" omitted
-
-# Unsupported target "fuzz_list" with type "test" omitted
-
-# Unsupported target "fuzz_mpsc" with type "test" omitted
-
-# Unsupported target "fuzz_oneshot" with type "test" omitted
-
-# Unsupported target "fuzz_semaphore" with type "test" omitted
-
-# Unsupported target "lock" with type "test" omitted
-
-# Unsupported target "mpsc" with type "test" omitted
-
-# Unsupported target "oneshot" with type "test" omitted
-
-# Unsupported target "semaphore" with type "test" omitted
-
-# Unsupported target "watch" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-tcp-0.1.4.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-tcp-0.1.4.bazel
deleted file mode 100644
index 1092a65..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-tcp-0.1.4.bazel
+++ /dev/null
@@ -1,69 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "tokio_tcp",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.4",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__bytes__0_4_12//:bytes",
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__iovec__0_1_4//:iovec",
-        "@rules_rust_proto__mio__0_6_21//:mio",
-        "@rules_rust_proto__tokio_io__0_1_13//:tokio_io",
-        "@rules_rust_proto__tokio_reactor__0_1_12//:tokio_reactor",
-    ],
-)
-
-# Unsupported target "chain" with type "test" omitted
-
-# Unsupported target "echo" with type "test" omitted
-
-# Unsupported target "limit" with type "test" omitted
-
-# Unsupported target "stream-buffered" with type "test" omitted
-
-# Unsupported target "tcp" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-threadpool-0.1.18.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-threadpool-0.1.18.bazel
deleted file mode 100644
index 00dc624..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-threadpool-0.1.18.bazel
+++ /dev/null
@@ -1,78 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "basic" with type "bench" omitted
-
-# Unsupported target "blocking" with type "bench" omitted
-
-# Unsupported target "depth" with type "bench" omitted
-
-# Unsupported target "depth" with type "example" omitted
-
-# Unsupported target "hello" with type "example" omitted
-
-rust_library(
-    name = "tokio_threadpool",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.18",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__crossbeam_deque__0_7_3//:crossbeam_deque",
-        "@rules_rust_proto__crossbeam_queue__0_2_1//:crossbeam_queue",
-        "@rules_rust_proto__crossbeam_utils__0_7_2//:crossbeam_utils",
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__lazy_static__1_4_0//:lazy_static",
-        "@rules_rust_proto__log__0_4_6//:log",
-        "@rules_rust_proto__num_cpus__1_13_0//:num_cpus",
-        "@rules_rust_proto__slab__0_4_2//:slab",
-        "@rules_rust_proto__tokio_executor__0_1_10//:tokio_executor",
-    ],
-)
-
-# Unsupported target "blocking" with type "test" omitted
-
-# Unsupported target "hammer" with type "test" omitted
-
-# Unsupported target "threadpool" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-timer-0.1.2.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-timer-0.1.2.bazel
deleted file mode 100644
index 8b27857..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-timer-0.1.2.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "tokio_timer",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.2",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__slab__0_3_0//:slab",
-    ],
-)
-
-# Unsupported target "support" with type "test" omitted
-
-# Unsupported target "test_timer" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-timer-0.2.13.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-timer-0.2.13.bazel
deleted file mode 100644
index acabcae..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-timer-0.2.13.bazel
+++ /dev/null
@@ -1,73 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "tokio_timer",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.13",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__crossbeam_utils__0_7_2//:crossbeam_utils",
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__slab__0_4_2//:slab",
-        "@rules_rust_proto__tokio_executor__0_1_10//:tokio_executor",
-    ],
-)
-
-# Unsupported target "clock" with type "test" omitted
-
-# Unsupported target "deadline" with type "test" omitted
-
-# Unsupported target "delay" with type "test" omitted
-
-# Unsupported target "hammer" with type "test" omitted
-
-# Unsupported target "interval" with type "test" omitted
-
-# Unsupported target "queue" with type "test" omitted
-
-# Unsupported target "throttle" with type "test" omitted
-
-# Unsupported target "timeout" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-tls-api-0.1.22.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-tls-api-0.1.22.bazel
deleted file mode 100644
index 2332b94..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-tls-api-0.1.22.bazel
+++ /dev/null
@@ -1,60 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "tokio_tls_api",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.22",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__tls_api__0_1_22//:tls_api",
-        "@rules_rust_proto__tokio_io__0_1_13//:tokio_io",
-    ],
-)
-
-# Unsupported target "bad" with type "test" omitted
-
-# Unsupported target "smoke" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-udp-0.1.6.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-udp-0.1.6.bazel
deleted file mode 100644
index 1cc5c69..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-udp-0.1.6.bazel
+++ /dev/null
@@ -1,62 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "tokio_udp",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.6",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__bytes__0_4_12//:bytes",
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__log__0_4_6//:log",
-        "@rules_rust_proto__mio__0_6_21//:mio",
-        "@rules_rust_proto__tokio_codec__0_1_2//:tokio_codec",
-        "@rules_rust_proto__tokio_io__0_1_13//:tokio_io",
-        "@rules_rust_proto__tokio_reactor__0_1_12//:tokio_reactor",
-    ],
-)
-
-# Unsupported target "udp" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-uds-0.1.7.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-uds-0.1.7.bazel
deleted file mode 100644
index 335ae6e..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-uds-0.1.7.bazel
+++ /dev/null
@@ -1,62 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "tokio_uds",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.7",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__bytes__0_4_12//:bytes",
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__iovec__0_1_4//:iovec",
-        "@rules_rust_proto__libc__0_2_69//:libc",
-        "@rules_rust_proto__log__0_3_9//:log",
-        "@rules_rust_proto__mio__0_6_21//:mio",
-        "@rules_rust_proto__mio_uds__0_6_7//:mio_uds",
-        "@rules_rust_proto__tokio_core__0_1_17//:tokio_core",
-        "@rules_rust_proto__tokio_io__0_1_13//:tokio_io",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-uds-0.2.6.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.tokio-uds-0.2.6.bazel
deleted file mode 100644
index 1c45b1c..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.tokio-uds-0.2.6.bazel
+++ /dev/null
@@ -1,67 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "tokio_uds",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.6",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__bytes__0_4_12//:bytes",
-        "@rules_rust_proto__futures__0_1_29//:futures",
-        "@rules_rust_proto__iovec__0_1_4//:iovec",
-        "@rules_rust_proto__libc__0_2_69//:libc",
-        "@rules_rust_proto__log__0_4_6//:log",
-        "@rules_rust_proto__mio__0_6_21//:mio",
-        "@rules_rust_proto__mio_uds__0_6_7//:mio_uds",
-        "@rules_rust_proto__tokio_codec__0_1_2//:tokio_codec",
-        "@rules_rust_proto__tokio_io__0_1_13//:tokio_io",
-        "@rules_rust_proto__tokio_reactor__0_1_12//:tokio_reactor",
-    ],
-)
-
-# Unsupported target "datagram" with type "test" omitted
-
-# Unsupported target "stream" with type "test" omitted
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.unix_socket-0.5.0.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.unix_socket-0.5.0.bazel
deleted file mode 100644
index c80941f..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.unix_socket-0.5.0.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "unix_socket",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.5.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__cfg_if__0_1_10//:cfg_if",
-        "@rules_rust_proto__libc__0_2_69//:libc",
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.void-1.0.2.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.void-1.0.2.bazel
deleted file mode 100644
index c228271..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.void-1.0.2.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "void",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.2",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.winapi-0.2.8.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.winapi-0.2.8.bazel
deleted file mode 100644
index dc11f66..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.winapi-0.2.8.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "winapi",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.8",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.winapi-0.3.8.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.winapi-0.3.8.bazel
deleted file mode 100644
index a1bbaa2..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.winapi-0.3.8.bazel
+++ /dev/null
@@ -1,66 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "winapi",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "errhandlingapi",
-        "handleapi",
-        "minwindef",
-        "ntstatus",
-        "winbase",
-        "winerror",
-        "winnt",
-        "winsock2",
-        "ws2def",
-        "ws2ipdef",
-        "ws2tcpip",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.8",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.winapi-build-0.1.1.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.winapi-build-0.1.1.bazel
deleted file mode 100644
index 89fe026..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.winapi-build-0.1.1.bazel
+++ /dev/null
@@ -1,62 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-alias(
-    name = "winapi_build",
-    actual = ":build",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-rust_library(
-    name = "build",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.1",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
deleted file mode 100644
index fd204c2..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "winapi_i686_pc_windows_gnu",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
deleted file mode 100644
index b02d82a..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "winapi_x86_64_pc_windows_gnu",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.ws2_32-sys-0.2.1.bazel b/third_party/rules_rust/proto/raze/remote/BUILD.ws2_32-sys-0.2.1.bazel
deleted file mode 100644
index 382300d..0000000
--- a/third_party/rules_rust/proto/raze/remote/BUILD.ws2_32-sys-0.2.1.bazel
+++ /dev/null
@@ -1,65 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//proto/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-alias(
-    name = "ws2_32_sys",
-    actual = ":ws2_32",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-rust_library(
-    name = "ws2_32",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.1",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_proto__winapi__0_2_8//:winapi",
-    ],
-)
diff --git a/third_party/rules_rust/proto/repositories.bzl b/third_party/rules_rust/proto/repositories.bzl
index af23033..1591613 100644
--- a/third_party/rules_rust/proto/repositories.bzl
+++ b/third_party/rules_rust/proto/repositories.bzl
@@ -15,7 +15,7 @@
 # buildifier: disable=module-docstring
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
-load("//proto/raze:crates.bzl", "rules_rust_proto_fetch_remote_crates")
+load("//proto/3rdparty/crates:defs.bzl", "crate_repositories")
 
 # buildifier: disable=unnamed-macro
 def rust_proto_repositories(register_default_toolchain = True):
@@ -48,11 +48,11 @@
         ],
         patch_args = ["-p1"],
         patches = [
-            Label("//proto/patches:com_google_protobuf-v3.10.0-bzl_visibility.patch"),
+            Label("//proto/3rdparty/patches:com_google_protobuf-v3.10.0-bzl_visibility.patch"),
         ],
     )
 
-    rules_rust_proto_fetch_remote_crates()
+    crate_repositories()
 
     # Register toolchains
     if register_default_toolchain:
diff --git a/third_party/rules_rust/proto/toolchain.bzl b/third_party/rules_rust/proto/toolchain.bzl
index 5192436..7225d0d 100644
--- a/third_party/rules_rust/proto/toolchain.bzl
+++ b/third_party/rules_rust/proto/toolchain.bzl
@@ -14,8 +14,6 @@
 
 """Toolchain for compiling rust stubs from protobuf and gRPC."""
 
-load("//rust:defs.bzl", "rust_common")
-
 # buildifier: disable=bzl-visibility
 load("//rust/private:utils.bzl", "name_to_crate_name")
 
@@ -131,14 +129,14 @@
 
 # Default dependencies needed to compile protobuf stubs.
 PROTO_COMPILE_DEPS = [
-    Label("//proto/raze:protobuf"),
+    Label("//proto/3rdparty/crates:protobuf"),
 ]
 
 # Default dependencies needed to compile gRPC stubs.
 GRPC_COMPILE_DEPS = PROTO_COMPILE_DEPS + [
-    Label("//proto/raze:grpc"),
-    Label("//proto/raze:tls_api"),
-    Label("//proto/raze:tls_api_stub"),
+    Label("//proto/3rdparty/crates:grpc"),
+    Label("//proto/3rdparty/crates:tls-api"),
+    Label("//proto/3rdparty/crates:tls-api-stub"),
 ]
 
 rust_proto_toolchain = rule(
@@ -146,7 +144,6 @@
     attrs = {
         "edition": attr.string(
             doc = "The edition used by the generated rust source.",
-            default = rust_common.default_edition,
         ),
         "grpc_compile_deps": attr.label_list(
             doc = "The crates the generated grpc libraries depends on.",
diff --git a/third_party/rules_rust/rust/BUILD.bazel b/third_party/rules_rust/rust/BUILD.bazel
index 6fd4ced..f4edbd8 100644
--- a/third_party/rules_rust/rust/BUILD.bazel
+++ b/third_party/rules_rust/rust/BUILD.bazel
@@ -10,7 +10,14 @@
 ])
 
 toolchain_type(
+    name = "toolchain_type",
+)
+
+alias(
     name = "toolchain",
+    actual = "toolchain_type",
+    deprecation = "instead use `@rules_rust//rust:toolchain_type`",
+    tags = ["manual"],
 )
 
 bzl_library(
@@ -22,9 +29,3 @@
         "//rust/settings:bzl_lib",
     ],
 )
-
-alias(
-    name = "rules",
-    actual = ":bzl_lib",
-    deprecation = "Please use the `@rules_rust//rust:bzl_lib` target instead",
-)
diff --git a/third_party/rules_rust/rust/defs.bzl b/third_party/rules_rust/rust/defs.bzl
index dd1b445..92c8a77 100644
--- a/third_party/rules_rust/rust/defs.bzl
+++ b/third_party/rules_rust/rust/defs.bzl
@@ -21,6 +21,7 @@
 load(
     "//rust/private:clippy.bzl",
     _capture_clippy_output = "capture_clippy_output",
+    _clippy_flags = "clippy_flags",
     _rust_clippy = "rust_clippy",
     _rust_clippy_aspect = "rust_clippy_aspect",
 )
@@ -37,14 +38,17 @@
 )
 load(
     "//rust/private:rust_analyzer.bzl",
-    _rust_analyzer = "rust_analyzer",
     _rust_analyzer_aspect = "rust_analyzer_aspect",
 )
 load(
     "//rust/private:rustc.bzl",
     _error_format = "error_format",
+    _extra_exec_rustc_flag = "extra_exec_rustc_flag",
     _extra_exec_rustc_flags = "extra_exec_rustc_flags",
+    _extra_rustc_flag = "extra_rustc_flag",
     _extra_rustc_flags = "extra_rustc_flags",
+    _is_proc_macro_dep = "is_proc_macro_dep",
+    _is_proc_macro_dep_enabled = "is_proc_macro_dep_enabled",
 )
 load(
     "//rust/private:rustdoc.bzl",
@@ -87,6 +91,9 @@
 rust_doc_test = _rust_doc_test
 # See @rules_rust//rust/private:rustdoc_test.bzl for a complete description.
 
+clippy_flags = _clippy_flags
+# See @rules_rust//rust/private:clippy.bzl for a complete description.
+
 rust_clippy_aspect = _rust_clippy_aspect
 # See @rules_rust//rust/private:clippy.bzl for a complete description.
 
@@ -99,21 +106,30 @@
 error_format = _error_format
 # See @rules_rust//rust/private:rustc.bzl for a complete description.
 
+extra_rustc_flag = _extra_rustc_flag
+# See @rules_rust//rust/private:rustc.bzl for a complete description.
+
 extra_rustc_flags = _extra_rustc_flags
 # See @rules_rust//rust/private:rustc.bzl for a complete description.
 
+extra_exec_rustc_flag = _extra_exec_rustc_flag
+# See @rules_rust//rust/private:rustc.bzl for a complete description.
+
 extra_exec_rustc_flags = _extra_exec_rustc_flags
 # See @rules_rust//rust/private:rustc.bzl for a complete description.
 
+is_proc_macro_dep = _is_proc_macro_dep
+# See @rules_rust//rust/private:rustc.bzl for a complete description.
+
+is_proc_macro_dep_enabled = _is_proc_macro_dep_enabled
+# See @rules_rust//rust/private:rustc.bzl for a complete description.
+
 rust_common = _rust_common
 # See @rules_rust//rust/private:common.bzl for a complete description.
 
 rust_analyzer_aspect = _rust_analyzer_aspect
 # See @rules_rust//rust/private:rust_analyzer.bzl for a complete description.
 
-rust_analyzer = _rust_analyzer
-# See @rules_rust//rust/private:rust_analyzer.bzl for a complete description.
-
 rustfmt_aspect = _rustfmt_aspect
 # See @rules_rust//rust/private:rustfmt.bzl for a complete description.
 
diff --git a/third_party/rules_rust/rust/known_shas.bzl b/third_party/rules_rust/rust/known_shas.bzl
index a4b5762..d5a4a94 100644
--- a/third_party/rules_rust/rust/known_shas.bzl
+++ b/third_party/rules_rust/rust/known_shas.bzl
@@ -4,2467 +4,5866 @@
 """
 
 FILE_KEY_TO_SHA = {
-    "2018-10-30/cargo-beta-aarch64-unknown-linux-gnu": "9d91fb3ee868421fbf8f4ed62cb7ee843dc6a1e70241331a9441e3ff09f3296d",
-    "2018-10-30/cargo-beta-x86_64-apple-darwin": "920d7218ded8ebd69628f7a7a1043117bec1ed6574ea8babbda66ddb7d0ea5f8",
-    "2018-10-30/cargo-beta-x86_64-pc-windows-msvc": "4f76c6264d36f1b0e9e23548d069386ff1b60a85a412596fc122484a4ed942fc",
-    "2018-10-30/cargo-beta-x86_64-unknown-freebsd": "be7ac5c344ca6038a7bcfbeb20c5847ce910ec39cf9a63b8b3e07cb6105dabb2",
-    "2018-10-30/cargo-beta-x86_64-unknown-linux-gnu": "097711a227d157c12a322dbe57f75eb28c7934869ce8aecc48d9946706234994",
-    "2018-10-30/clippy-beta-x86_64-apple-darwin": "84331ae735c78cd1d335b8b5da3c9232d70123197c62f3d7fe32b3bd7a97d1e6",
-    "2018-10-30/clippy-beta-x86_64-pc-windows-msvc": "a59573b3b71c318a75214876c30de03327c4b0409a2e9fa0127ef0ac4eab555d",
-    "2018-10-30/clippy-beta-x86_64-unknown-freebsd": "1fcc9d117d5721f3f4c6afb109c626fec238376666f448f61ed5aeaaa6c5a1d8",
-    "2018-10-30/clippy-beta-x86_64-unknown-linux-gnu": "eee913773c93ec0443aea1629d936b5a4e114e977318d4ef77b6bedf42cd4129",
-    "2018-10-30/llvm-tools-beta-aarch64-unknown-linux-gnu": "9417a07c501e173fe3848c815b8536cf70c6518c8040d45b19260ca3ab720760",
-    "2018-10-30/llvm-tools-beta-x86_64-apple-darwin": "b86d22bc723936f23186acaa94cd0738ff1c7b703d67712be62d99845a6ccc80",
-    "2018-10-30/llvm-tools-beta-x86_64-pc-windows-msvc": "cf74e15df51033370d4225fd9141f4cfc5c37145070d2296915fbecab9275b03",
-    "2018-10-30/llvm-tools-beta-x86_64-unknown-freebsd": "38ba85ec56c374b606a586221185ac351d04871892055f8936f28958e5e7a5cb",
-    "2018-10-30/llvm-tools-beta-x86_64-unknown-linux-gnu": "8d96f1475fc27f21d80bda80496783aa3181a4b33a138b7a89edcef2ddb6cf58",
-    "2018-10-30/rust-beta-aarch64-unknown-linux-gnu": "e9bc9d4a89299595ef42cde7303b50a7921e20a5ee4d131c4e1770a391611303",
-    "2018-10-30/rust-beta-x86_64-apple-darwin": "51acc0077d6abae5beed0e7b99c39ae9b8a0ff0f66daec227caef653046144e6",
-    "2018-10-30/rust-beta-x86_64-pc-windows-msvc": "07f3e42ba299b3b5341b410c4317161eba4b40bbc9fc449a9c187193fe49250c",
-    "2018-10-30/rust-beta-x86_64-unknown-freebsd": "49f1efe5bf10319446a298096dea73e478a466daca20a5b93d5263925e4ba9be",
-    "2018-10-30/rust-beta-x86_64-unknown-linux-gnu": "07963c2d6d56d077856f17e786414cf965832e7942f4ec72dec2eb51452e74b7",
-    "2018-10-30/rust-std-beta-aarch64-unknown-linux-gnu": "bf0895ccf65a86c1f51dbbebd0980bd07dcdc3919407fc84f5838cbbcb29e309",
-    "2018-10-30/rust-std-beta-aarch64-unknown-linux-musl": "53c07a1bdae00c0ad587349006e4080c50d511c0368f848fc98bf678dd3f6470",
-    "2018-10-30/rust-std-beta-wasm32-unknown-unknown": "5453e05993aaa90c8ac361086dd888a29a48f1b90b2c2184202c4b44b2e5569d",
-    "2018-10-30/rust-std-beta-x86_64-apple-darwin": "96fc1daea8868e176a14706333590b13a41193bd8ed5a711f23a15eceb5c6ce0",
-    "2018-10-30/rust-std-beta-x86_64-pc-windows-msvc": "6af758524d77288cb5c548d26467680d57aeb778063787662b1e00ef3887866a",
-    "2018-10-30/rust-std-beta-x86_64-unknown-freebsd": "5aef62464a5580ab6b38c9e54203db12f90ad42de538b7a5eefc7778b55b6497",
-    "2018-10-30/rust-std-beta-x86_64-unknown-linux-gnu": "34996a688d6a4c3587f873b0a8c86fe1d2fee2a269b6e669b1cb8c6908fb77b8",
-    "2018-10-30/rust-std-beta-x86_64-unknown-linux-musl": "6e9474546838c061288e8464d28a843814bc2ff4c9d06a5fba065c1b03650be4",
-    "2018-10-30/rustc-beta-aarch64-unknown-linux-gnu": "e6bb89261baa494ef98239bde9821b66671de5cd78352a9c100abce3a18ca250",
-    "2018-10-30/rustc-beta-x86_64-apple-darwin": "22153f359b8b98341aa0349233112fff2b9f092988f9d678626207ba29666b5b",
-    "2018-10-30/rustc-beta-x86_64-pc-windows-msvc": "9cd8225f1307aab95b439dbecd70aaa35e03c913ba0897dc7fe3a04755fc15b1",
-    "2018-10-30/rustc-beta-x86_64-unknown-freebsd": "e207562cd5e3a17497e029bcb1cab56d9fa474d788906f13e389a3cb804ea4d6",
-    "2018-10-30/rustc-beta-x86_64-unknown-linux-gnu": "63b69b000cda551f2499ffba6e3f1700acb2b22a47ca9ec9edcc3e578ed086e6",
-    "2018-10-30/rustfmt-beta-aarch64-unknown-linux-gnu": "bd97e8012277d49beececdf4125610c2d0112cd22f8add53f86fd7c6dac5dc0d",
-    "2018-10-30/rustfmt-beta-x86_64-apple-darwin": "2c213f43902104ebefe9eee6fa49aa36e16af972cb7aa1c63d772e5d05f74b59",
-    "2018-10-30/rustfmt-beta-x86_64-pc-windows-msvc": "316331e7aed82251ab3b701845e8b1e707947670498ce4fc364ce1d6813e1340",
-    "2018-10-30/rustfmt-beta-x86_64-unknown-freebsd": "17826e710d5912d23cd981b46b598733cf8833c20dc7d03d150c5e53ad0a38d3",
-    "2018-10-30/rustfmt-beta-x86_64-unknown-linux-gnu": "4af3f9faacd78deef2e8a06e2971ebc7540de07525ac805fcf334818a6ee0e97",
-    "2018-11-01/cargo-beta-aarch64-unknown-linux-gnu": "44802e459a0bc1677b52593d413959982c30786524412e9e1c61d67c8230d4f6",
-    "2018-11-01/cargo-beta-x86_64-apple-darwin": "e5130c79154056a451d95a3b213622d0e7e3dd3625735fa5ae725fa50849facb",
-    "2018-11-01/cargo-beta-x86_64-pc-windows-msvc": "481f845f171e4566c59d9a2df802c678b6102d2d661b731e2a71a50c597cbeca",
-    "2018-11-01/cargo-beta-x86_64-unknown-freebsd": "0b596632c675a277fac894b644ecdb86d6f44036dd089ce8d410fdd04354b8f1",
-    "2018-11-01/cargo-beta-x86_64-unknown-linux-gnu": "8519d3fca6aca45ed94daeecbd8d25c9bd1c75f1acc5078b64b771bce6986b44",
-    "2018-11-01/clippy-beta-x86_64-apple-darwin": "8672df2c6b8a18bbf9b654188de22bc8ce4c8bc407d2b3fe3ef208add4e27cdd",
-    "2018-11-01/clippy-beta-x86_64-pc-windows-msvc": "4cea4a9cbbc0b56efe11078711d244ab87de3397873c437f3f70614ef896ff83",
-    "2018-11-01/clippy-beta-x86_64-unknown-freebsd": "03fabba8670a06faeee0a944ca8e911e717a739c2bae0262c2257db69a7014f5",
-    "2018-11-01/clippy-beta-x86_64-unknown-linux-gnu": "0ad5f06495177901addb72d8eec3926986e10290969493eba0e8b465962985e7",
-    "2018-11-01/llvm-tools-beta-aarch64-unknown-linux-gnu": "7b3f5bb7f45052310efe275ed665b54b55e19b9020b04cec9240318c13c62c0d",
-    "2018-11-01/llvm-tools-beta-x86_64-apple-darwin": "b45ae0fb0b49385b555772a3faa9a5a85aa10f4bd24ba40c55048076d8cda314",
-    "2018-11-01/llvm-tools-beta-x86_64-pc-windows-msvc": "462668f55b85fa1224df30449eb67e8fe0d208caeea39d9339b44ac30867f452",
-    "2018-11-01/llvm-tools-beta-x86_64-unknown-freebsd": "acd86ceedad9f10b2cb3443df032d0b5a9b4eb6c4b30364bd3cb014449607577",
-    "2018-11-01/llvm-tools-beta-x86_64-unknown-linux-gnu": "4b4363c2d03d319e84a7f09fba5b58d188d9fdd62c9486cc4b66e9e63030ab27",
-    "2018-11-01/rust-beta-aarch64-unknown-linux-gnu": "f802784788c2e751d59d035363fb6be2b0450d650ec523115a51fea05fc8589b",
-    "2018-11-01/rust-beta-x86_64-apple-darwin": "0be8d634d17b2f92c86515a38e36f66a9f3d72bad226db58ff8cd09924092f53",
-    "2018-11-01/rust-beta-x86_64-pc-windows-msvc": "d86d633b67e6c0fba28963f5c991738575fee56c755570e505f702eed54150e9",
-    "2018-11-01/rust-beta-x86_64-unknown-freebsd": "869f1d01077a318ff0ac664a498354b079c2fc16cbec294161a56cabe6f3e194",
-    "2018-11-01/rust-beta-x86_64-unknown-linux-gnu": "7da7bd24c2f2dafa9d4baa6e7eba1547f62681fbd1dd89910d386b2260e65ca6",
-    "2018-11-01/rust-std-beta-aarch64-unknown-linux-gnu": "137d39872981d343829a8f3eecf0f33fe2f0d81ed18865004b52359d309a6b95",
-    "2018-11-01/rust-std-beta-aarch64-unknown-linux-musl": "5eb228ae2a53abfdfbfaa471a2afda29cc2b923adb82322a0c20af4592c226e5",
-    "2018-11-01/rust-std-beta-wasm32-unknown-unknown": "4f7fa7f3adafc2ec5de80cddfd3fc3072da43442cd15be9169b261f76a0a684b",
-    "2018-11-01/rust-std-beta-x86_64-apple-darwin": "bee742244d72ea7289d5d2dea519102994dbee97a5c296b2a8c6853e5450a7ab",
-    "2018-11-01/rust-std-beta-x86_64-pc-windows-msvc": "455ecff7f11499cd3822b82ecf0ab8ab34d866c4b5e17b0de84af815a782f226",
-    "2018-11-01/rust-std-beta-x86_64-unknown-freebsd": "eed13a5c36c0731b01b8926f26be5b054c341a0487628fca688e8e99f33b200b",
-    "2018-11-01/rust-std-beta-x86_64-unknown-linux-gnu": "f38a224bccfc89bd0d598764363271985d0b2696123ea10de6399c4cc7dd8adb",
-    "2018-11-01/rust-std-beta-x86_64-unknown-linux-musl": "b4f8c208a50e2640fc3761675bef31c9960e74976a1537c2fd8c9dc8a9d5fdd8",
-    "2018-11-01/rustc-beta-aarch64-unknown-linux-gnu": "acf359a4cecfc827f5ca4255c0492d46223d09d535444f0b303678918944c87c",
-    "2018-11-01/rustc-beta-x86_64-apple-darwin": "64b5a5fc8b3dc348395137df2c422adbf483168c58af5cd9acc8522dd9b4392b",
-    "2018-11-01/rustc-beta-x86_64-pc-windows-msvc": "71cbfd2793f6b55653f5ef4bdf0350dfe6d9b0952d518a3a355044ec7caa03c2",
-    "2018-11-01/rustc-beta-x86_64-unknown-freebsd": "51a5370f1776229bede506e5ab05da7cfeb5bd21a5374561acb4b7138c75d508",
-    "2018-11-01/rustc-beta-x86_64-unknown-linux-gnu": "01609bedca249906ba8e07fb681daffe094cdbf41b91e2221195474271d8e6d7",
-    "2018-11-01/rustfmt-beta-aarch64-unknown-linux-gnu": "0969e37628a3d5e56cfc0636db4d1aac7d0b01ab9df6bdeb3453adc1e2ae786e",
-    "2018-11-01/rustfmt-beta-x86_64-apple-darwin": "bbb45d6beddf8da270ab1ec6ea3b9dc2ffc03f5ba1ef3e99e87d004f652f2581",
-    "2018-11-01/rustfmt-beta-x86_64-pc-windows-msvc": "2d34424353e248173828898107e331acfbaa29a3686bb8121fdc72fbab7a37e8",
-    "2018-11-01/rustfmt-beta-x86_64-unknown-freebsd": "101a0903c5421df363420d73ebbdb52b3cb8b2bb5ecee9e383b271aa22446f95",
-    "2018-11-01/rustfmt-beta-x86_64-unknown-linux-gnu": "12d49bf16a8e5964163d12a58e8caa5bf81fedd106dc37bbd757aa4116f0d7b3",
-    "2018-11-02/cargo-beta-aarch64-unknown-linux-gnu": "808e7129f0f414e05def68ac72bb8f59871a0d21eaa9a6b9a59afa87502858bc",
-    "2018-11-02/cargo-beta-x86_64-apple-darwin": "72fce301579b799b392407c49e162285ba24ca17ad1d96ca701c7d03c83d69d0",
-    "2018-11-02/cargo-beta-x86_64-pc-windows-msvc": "f2a98c4c8928d7d3070c86c02ab93e6d78c85312e1eee2867efabf00ae235692",
-    "2018-11-02/cargo-beta-x86_64-unknown-freebsd": "8069c2b1657b3dc747912775b1569426bccf35fe6c23073408847ef232174419",
-    "2018-11-02/cargo-beta-x86_64-unknown-linux-gnu": "2e9418c06ea6dc3f869ebd12e31da2affe9568871e65f013b3695a92bdfa4c31",
-    "2018-11-02/clippy-beta-x86_64-apple-darwin": "921f5d07e73a5651173187012c476a7999f5cd78f52eafad4e8c15f2bab25b42",
-    "2018-11-02/clippy-beta-x86_64-pc-windows-msvc": "eee0ff30ede35ab957061b579836de5f9b91c36d57e71c22344c76d421abd4dc",
-    "2018-11-02/clippy-beta-x86_64-unknown-freebsd": "440576edb7ac7775d5511780662b8c820da8cfdcf71dfe7a169758547d5f94e4",
-    "2018-11-02/clippy-beta-x86_64-unknown-linux-gnu": "3ce406e0c2bb246c96940e4054b5fa9b049580ae4b61e170da2008ff945af970",
-    "2018-11-02/llvm-tools-beta-aarch64-unknown-linux-gnu": "f8021a8a0d302eb4774d31789932488e0897ec72b0d8c16cb746a2d72b749238",
-    "2018-11-02/llvm-tools-beta-x86_64-apple-darwin": "88693cabad55f568ca0c21276e76eb237215abdc9771f224ab807f8edd3aad08",
-    "2018-11-02/llvm-tools-beta-x86_64-pc-windows-msvc": "4b2f2c707bbd3506c55d48d1ff3cadd290445b227c868d596a535faa798f06cf",
-    "2018-11-02/llvm-tools-beta-x86_64-unknown-freebsd": "c8c48f8805b794ac63cbd60bb28d77c575d754c6c97af006bcf6b466adb5ecab",
-    "2018-11-02/llvm-tools-beta-x86_64-unknown-linux-gnu": "92472b453b0a6dbc38cef53cba6d38b5dbc79e3637743b77239543b33084d121",
-    "2018-11-02/rust-beta-aarch64-unknown-linux-gnu": "6e28b053d8ebcef7a19875089db13931ce89bb045d06b4bf834334df3fa43962",
-    "2018-11-02/rust-beta-x86_64-apple-darwin": "78e9fd57d2070cbe2a073758839d54b5535e14918c11260fb244bade3c1971a3",
-    "2018-11-02/rust-beta-x86_64-pc-windows-msvc": "68c0fcbd1f9887eff41c42b703fb2c34b99b2490f4e366efeee4a6bf0c1044c2",
-    "2018-11-02/rust-beta-x86_64-unknown-freebsd": "8313e8655fca87519c469c5699cf803fb0c1bd159ee335aac199ae76753f359d",
-    "2018-11-02/rust-beta-x86_64-unknown-linux-gnu": "76b2d14dc01a922b448019df7a24221f91c7eaa3e2034fcbd6189d5bac7836e4",
-    "2018-11-02/rust-std-beta-aarch64-unknown-linux-gnu": "0d57f4837af1443208abce604d74dcf6880d0cdf4e74eaf2368016f064dbc7ab",
-    "2018-11-02/rust-std-beta-aarch64-unknown-linux-musl": "0d5e585506b4cde724040d340e8e2d4a3ebe04950ca863adb238c83f9462e696",
-    "2018-11-02/rust-std-beta-wasm32-unknown-unknown": "25c7e8dbf27dd19d3d4f91062d9cb9bc6ad9aed8afacbd47dab92eba3a3d2533",
-    "2018-11-02/rust-std-beta-x86_64-apple-darwin": "fdc26de5db0e66e0f516069690a0c86ca0e4b8b75973a33dee67ce306e4c9115",
-    "2018-11-02/rust-std-beta-x86_64-pc-windows-msvc": "8c7dfe0692e2c0b9de130b64e8ab09946eff2eb419a22bb7a15cd9522995f420",
-    "2018-11-02/rust-std-beta-x86_64-unknown-freebsd": "4661fdd15b5cee0fafd4c9cb085d0614abab0b2b1d62a55540b3d4d2634c4ba7",
-    "2018-11-02/rust-std-beta-x86_64-unknown-linux-gnu": "3e2f68697620e501a9439bb7923f5676c82f7a4b4aaf822a141188c92619fe13",
-    "2018-11-02/rust-std-beta-x86_64-unknown-linux-musl": "88662ac89a6c9df7a5a77db8624777cb9ccf0ecdd9a0ced1ef9bc47e7c9e8eed",
-    "2018-11-02/rustc-beta-aarch64-unknown-linux-gnu": "d703f1cdecd77aba85024db5e94f13e50c74e66af21091107c7cd67a3179da15",
-    "2018-11-02/rustc-beta-x86_64-apple-darwin": "199a0776ad4f1406b8b6f477d12c58858816f07246d52842384e1084d8c9000e",
-    "2018-11-02/rustc-beta-x86_64-pc-windows-msvc": "a4fd3838f4459a151e83d540784953cd80c5a1a68fe3bf965399c1f07f6476bb",
-    "2018-11-02/rustc-beta-x86_64-unknown-freebsd": "f931cb44b892dc3899c9379238d8f51d35c9503db9e93ce5700f3121712c9b62",
-    "2018-11-02/rustc-beta-x86_64-unknown-linux-gnu": "7ebd46c431b8d9e8d22aa141122eaf301d5facdc449e04872019372598b04b19",
-    "2018-11-02/rustfmt-beta-aarch64-unknown-linux-gnu": "c13f8024e37f7b2b6d97586569bdefca53e99514e4b76b200b71932f4a7ce298",
-    "2018-11-02/rustfmt-beta-x86_64-apple-darwin": "0164c2c57b3ee975c571103dbf7074e24c997cc43df23920660f12de688e8c23",
-    "2018-11-02/rustfmt-beta-x86_64-pc-windows-msvc": "c33b4fe885e21f51b08dfa29d04179d0f138e87122f4f4a3898fa002567f2259",
-    "2018-11-02/rustfmt-beta-x86_64-unknown-freebsd": "ad280d28d4e7054063942cd5a60cc35538af5096f29e159ba13419b82be5560c",
-    "2018-11-02/rustfmt-beta-x86_64-unknown-linux-gnu": "60ec376659a4ad5b129307ffef4dfe9b717fcee6f5d929b1e3e423e599258be2",
-    "2018-11-07/cargo-nightly-aarch64-unknown-linux-gnu": "45f1fe31b55aac2de8fa98c5738704481e27c3bf206ca7a65b165b301f473a1e",
-    "2018-11-07/cargo-nightly-x86_64-apple-darwin": "35ad1d24795b3fe97dc06fe3b1a45c2e75cc9e62bdf491d4964863920b311e0d",
-    "2018-11-07/cargo-nightly-x86_64-pc-windows-msvc": "7147bc0363fb84aa2feda337a6bf7e3f16f26aef893218cd0b59c31793c06253",
-    "2018-11-07/cargo-nightly-x86_64-unknown-freebsd": "d537821f8acf2a89d44bc534fbf5efc27785df372005046be927c0d1ae088a23",
-    "2018-11-07/cargo-nightly-x86_64-unknown-linux-gnu": "7968167992937ad8e7284c9ea00040ddd873b759b2595eb67eea68ce81abf627",
-    "2018-11-07/clippy-nightly-x86_64-apple-darwin": "7ee34bc4e2b1121ecb8ad01bbebc54f83bafd72acb8e4f81bb3cd1106fc29cdb",
-    "2018-11-07/clippy-nightly-x86_64-pc-windows-msvc": "a65fd2d2c7e53d3876808b41491d2556a55e399a470d747427f6ece40251ca89",
-    "2018-11-07/clippy-nightly-x86_64-unknown-freebsd": "664296ae2a0226abcb58d01067b3a614fa6c66afb821e36be17faa205ef14f70",
-    "2018-11-07/clippy-nightly-x86_64-unknown-linux-gnu": "62cf4c3f179e14b6b26485d85ebf17ff676b87938c14bb1ce19d93c02197d091",
-    "2018-11-07/llvm-tools-nightly-aarch64-unknown-linux-gnu": "c2dd30b73e5e0495d7d4c05cf98f50197c00f542cef7f3ef37e095d0d8686991",
-    "2018-11-07/llvm-tools-nightly-x86_64-apple-darwin": "2cd61d0f54d3753777b019d09a2e88cc9a2fb027e947a14eb1f509e014ff19e9",
-    "2018-11-07/llvm-tools-nightly-x86_64-pc-windows-msvc": "14c6387239ee0bd8d9d9ca0c21c808a542de4133e8477fc2f1fc958eaf6c4428",
-    "2018-11-07/llvm-tools-nightly-x86_64-unknown-freebsd": "52a726f57b80cc7d29c15b93ad35e3a7ab62fcfbd7d89f91021a783be6ffbd18",
-    "2018-11-07/llvm-tools-nightly-x86_64-unknown-linux-gnu": "ddd007ee68b7468a12d240d0f08939efa262e8d96ad7f903cbef62b461a61417",
-    "2018-11-07/rust-nightly-aarch64-unknown-linux-gnu": "f4725077e948b6eda7d4cd482a8985037a2f8ddaecc964908a490deb9ac46e21",
-    "2018-11-07/rust-nightly-x86_64-apple-darwin": "b9aaefca51aa2d7e89f5d790e865d00ec4142c79cebee43ba0d575f9f52ee65b",
-    "2018-11-07/rust-nightly-x86_64-pc-windows-msvc": "5826f958e4826b0bd0069918185afc6db0802e6d3fe72a9be075f3408b707521",
-    "2018-11-07/rust-nightly-x86_64-unknown-freebsd": "38860320b7e97193493e45d362f34d311d7aa8fface77c93fadfa15e8361df3d",
-    "2018-11-07/rust-nightly-x86_64-unknown-linux-gnu": "c1d7542e90f76d074a7ea925b5ce40ec602c9e3e04822939623a98c4d020ea2e",
-    "2018-11-07/rust-std-nightly-aarch64-unknown-linux-gnu": "e7a4629ab15609fda17a9e16cb0f7538d4077f572ece200891726344e314295b",
-    "2018-11-07/rust-std-nightly-aarch64-unknown-linux-musl": "25b7b0cef1f802182ffd26e62defbc5f6fc79504739d14627bc74ca1db24bdaf",
-    "2018-11-07/rust-std-nightly-wasm32-unknown-unknown": "9d1bcbf50fdcd9912fd98901ec40c7fd5d73ef2262a70322b4ca52381363c34c",
-    "2018-11-07/rust-std-nightly-x86_64-apple-darwin": "0c988a60e72d545b19b5cef616ddd3411a278226abccceca622581871f2b5cce",
-    "2018-11-07/rust-std-nightly-x86_64-pc-windows-msvc": "0d04200b3bc5ad5f939d98f7af083c0576aae11876830492f9964de23dd33acd",
-    "2018-11-07/rust-std-nightly-x86_64-unknown-freebsd": "ca648e7eb243cec32dc5a1b4e2fe6d67c2a00be56326e4d7aec9f2bbeb4dc138",
-    "2018-11-07/rust-std-nightly-x86_64-unknown-linux-gnu": "bd8daba5c2d36e261da6f0ea8b5893e7fe94252eca7478d581c036fc1acb7c36",
-    "2018-11-07/rust-std-nightly-x86_64-unknown-linux-musl": "9d5bb908baa470e4da390f5b32f7db2c15fdc347d379b61522a33128bb486b12",
-    "2018-11-07/rustc-nightly-aarch64-unknown-linux-gnu": "11caf45fef229d85efb36cdbcf955d95fae648c27ca4ffd153bad316eb58793a",
-    "2018-11-07/rustc-nightly-x86_64-apple-darwin": "cddecdb0d595cb8b944bf70b2284f557743f5637536f2181ad0036806cf56217",
-    "2018-11-07/rustc-nightly-x86_64-pc-windows-msvc": "479f58f34616b83c003fa29e68ee84c91ee5521038f255a7cd3b597a2f5082d0",
-    "2018-11-07/rustc-nightly-x86_64-unknown-freebsd": "47f81ec8c4ebbcd4e948033b5db72c1e9bec6f284fdaa5bdf59bcc92b075333f",
-    "2018-11-07/rustc-nightly-x86_64-unknown-linux-gnu": "7f1aa11f8e503e6e9a03b6cd05ab12b46837bb7597167c72112abaf1481e46cd",
-    "2018-11-07/rustfmt-nightly-aarch64-unknown-linux-gnu": "9b64705de20633c73a39d47deacbacdce11181dc5e06fa632ef08b8a3a7136e0",
-    "2018-11-07/rustfmt-nightly-x86_64-apple-darwin": "bb86c58a5a12922ddd2d19a3cffe9cd8d87785e57f72cdc998e94926a68345a2",
-    "2018-11-07/rustfmt-nightly-x86_64-pc-windows-msvc": "4612d2961bc5d0b24863af21fd0764b8ec8d2a843f1a39b97b418bc283b8fa2b",
-    "2018-11-07/rustfmt-nightly-x86_64-unknown-freebsd": "b0677e91bb7c0645844f988e7f7b625768f0a72947536a27fce7f5a9a850c5e0",
-    "2018-11-07/rustfmt-nightly-x86_64-unknown-linux-gnu": "e1dbad0cb0afccdf5e05f97129f9d34bc62ce6475dd8f09fad2d31a8129acf64",
-    "2018-11-08/cargo-nightly-aarch64-unknown-linux-gnu": "df9cf735f2c0efc48356832b0a11ae3f6df0d78879fb93a3b9cfecb15e79010b",
-    "2018-11-08/cargo-nightly-x86_64-apple-darwin": "e0a585f21907bd78820c4fd0ac56625ba10053a9430e9fab014e90e42f4a1fab",
-    "2018-11-08/cargo-nightly-x86_64-pc-windows-msvc": "025741e19216a317d8c2bb27950fbd7c3eef6eae075c606fc4b0622d3a92b89c",
-    "2018-11-08/cargo-nightly-x86_64-unknown-freebsd": "7e9343a3885caa12c1fb7f3007e8c72ce0a11ea6696839e0882ef7e560aed6d8",
-    "2018-11-08/cargo-nightly-x86_64-unknown-linux-gnu": "b421dd73cac889804f9d3758f5ef32157885a043abfb21651182fc9f672b7491",
-    "2018-11-08/clippy-nightly-x86_64-apple-darwin": "a1b8fa097c8814ea239bc78f13df97a39d7361516b68ef340d9e42d0ee2905e3",
-    "2018-11-08/clippy-nightly-x86_64-pc-windows-msvc": "f863e10d8b82428771ac10a3219094f4252239df68f611a4dfa075a836f6be75",
-    "2018-11-08/clippy-nightly-x86_64-unknown-freebsd": "87cc3be056acb88e08d2dffbe7924aea58e39bb7380cda44e23748f790f15e95",
-    "2018-11-08/clippy-nightly-x86_64-unknown-linux-gnu": "b1f0ca2c7f5367dc044a3ca1702618e0e58f777369d470a8173355e2f4507127",
-    "2018-11-08/llvm-tools-nightly-aarch64-unknown-linux-gnu": "fe2283cabacf6b8dbcd8d11eddb11a2badb750091ec5b38926ad48d3577da601",
-    "2018-11-08/llvm-tools-nightly-x86_64-apple-darwin": "b173d662715ec4edacdb8e06570cd471a6f63d05b49c6867f95ec366f8a2e0db",
-    "2018-11-08/llvm-tools-nightly-x86_64-pc-windows-msvc": "558cd81ceb5e08766ade45cffc98a8d1a179d34f671f9b9518627e8358d65984",
-    "2018-11-08/llvm-tools-nightly-x86_64-unknown-freebsd": "7d77f85900b0aa276df746bc023b1211c4221e6183ef62663565b65b8fadd9f8",
-    "2018-11-08/llvm-tools-nightly-x86_64-unknown-linux-gnu": "c634eb65a3839b176563823d576b1f4705cfcb3e91b237f2c4f852ff5ba08d2a",
-    "2018-11-08/rust-nightly-aarch64-unknown-linux-gnu": "20ef5c5f59171df0335846c6c3315c5e3c495775e3c5b1060481d70421153412",
-    "2018-11-08/rust-nightly-x86_64-apple-darwin": "921f19787a155e5240e21fb2bc630e5907b964652b0f7553b64acf819a0a2d43",
-    "2018-11-08/rust-nightly-x86_64-pc-windows-msvc": "46d76bb12cedd53927cb35fb688540010b5152568467508fa92b0745f0e39463",
-    "2018-11-08/rust-nightly-x86_64-unknown-freebsd": "32c28d8e915086406a3493d59d0e3b4c4751f77a3b34d257a3341aa4e5f8ad4f",
-    "2018-11-08/rust-nightly-x86_64-unknown-linux-gnu": "5f33f1c01720e471b8293d304a01f354363418dc7ceebf206529a34f932c3a82",
-    "2018-11-08/rust-std-nightly-aarch64-unknown-linux-gnu": "e83ecf484a848053a8679c8164340f90bd6c5823d9340b4fc5318c6265e544f1",
-    "2018-11-08/rust-std-nightly-aarch64-unknown-linux-musl": "89e192bc7e9fad3eea6e24f967b9405b35c677b1fe3a6b8fb4ab4def4f6378d9",
-    "2018-11-08/rust-std-nightly-wasm32-unknown-unknown": "0e12ecd9a2bbff67b8d82c15200acdd32d1f91fc1761d0b72fbbb5d32ae629f9",
-    "2018-11-08/rust-std-nightly-x86_64-apple-darwin": "9d5e89e71f888247093b5615079da538a56c2758eac270173a4f85a57ef92967",
-    "2018-11-08/rust-std-nightly-x86_64-pc-windows-msvc": "e891a3ee103e65e8e337b3c9c9d1e410c4be97b1318f820b591565b5ae6340ff",
-    "2018-11-08/rust-std-nightly-x86_64-unknown-freebsd": "64aabfec15a2b773c27892e58514161cb05ab370e3291beb1cafc7d270772389",
-    "2018-11-08/rust-std-nightly-x86_64-unknown-linux-gnu": "efb8f6f6aa2c5a3f1c069e05b74fde6a85985837054faf3bc565d839902efedc",
-    "2018-11-08/rust-std-nightly-x86_64-unknown-linux-musl": "d2629d2ae1dae0b80bff33350f1bd469e145bfc4b935ff4bcb79240ff23ab279",
-    "2018-11-08/rustc-nightly-aarch64-unknown-linux-gnu": "494173aa705efeef4df2d88278608bd71b477183d85a670a577051c76c5ee99c",
-    "2018-11-08/rustc-nightly-x86_64-apple-darwin": "316e7727a136a82a20832a69b18f74add335e9b659fa7e0d8c7d12c0d11224b7",
-    "2018-11-08/rustc-nightly-x86_64-pc-windows-msvc": "489cb54446374eccc78eca18aa86b4159d47fdfa7bab0ea9a20cb68fa4d80071",
-    "2018-11-08/rustc-nightly-x86_64-unknown-freebsd": "874b7055e0cb609ce34d38456bda888865c63fcbc7abac5aad147f2a21a7d147",
-    "2018-11-08/rustc-nightly-x86_64-unknown-linux-gnu": "e50e43d71573e069503aa6157d1736d390345006965fa889842835ce80ae36e2",
-    "2018-11-08/rustfmt-nightly-aarch64-unknown-linux-gnu": "4f5f4077d0e1c888fa3366dad638b5e8c7aa032deab83334a170d8e4275d8e47",
-    "2018-11-08/rustfmt-nightly-x86_64-apple-darwin": "b6a0f812726134aea52e2b6ad708c0fb1052f80f1515a66cddeeef07052a67cb",
-    "2018-11-08/rustfmt-nightly-x86_64-pc-windows-msvc": "eb444b276ae5f6ed2c1e6dce994e17ebb94b130747a05c402e0c96b2623a554d",
-    "2018-11-08/rustfmt-nightly-x86_64-unknown-freebsd": "8b31f7677eb0e7bf6ab145a6347e0ff00e57ec3642db3269763d97020cad2ebb",
-    "2018-11-08/rustfmt-nightly-x86_64-unknown-linux-gnu": "bf4c5913c199a5cfeea53432c880a02ba1ec6b38eaa59f012a909a131cf11cf6",
-    "2018-11-09/cargo-nightly-aarch64-unknown-linux-gnu": "e2db9ce2b561d7fdc456431b661be0b68e0a97b932096595fad273a9dfaa8b05",
-    "2018-11-09/cargo-nightly-x86_64-apple-darwin": "696507e163c5ea342a3780da51efd51633dcfcc980b493479928b9a3e0894157",
-    "2018-11-09/cargo-nightly-x86_64-pc-windows-msvc": "0537061725164e1c344b73ec85a1983966537e7f0d4c231233bd6aa6a30428e0",
-    "2018-11-09/cargo-nightly-x86_64-unknown-freebsd": "07935c23f2f71e30092672010975ed16d34a9f50a9ab4deb86c9846d79a4729a",
-    "2018-11-09/cargo-nightly-x86_64-unknown-linux-gnu": "0f5448e37227d79689967658252a43d48c596ee875fff5d7a530b20cfd408bdc",
-    "2018-11-09/clippy-nightly-x86_64-apple-darwin": "42ee57c56b42dd837b9aaa4307cb9f57421cb430264048de9b291733438f6f85",
-    "2018-11-09/clippy-nightly-x86_64-pc-windows-msvc": "83b0f6b8423dd3061d5d9956371e6665f13bd857e711226f9684e29b88294593",
-    "2018-11-09/clippy-nightly-x86_64-unknown-freebsd": "0dc28f63ceea25edefb7b96bf5c8bf746b68505307ebd9c38a8aa7b6d3d2059e",
-    "2018-11-09/clippy-nightly-x86_64-unknown-linux-gnu": "f56e10ae1c09b0356514fdb411a9b38597d824e080e7cb050588fd627c4a544a",
-    "2018-11-09/llvm-tools-nightly-aarch64-unknown-linux-gnu": "83188eccc2b7067dcfc960492f91d23ad36ea6460005ac6b91c98d20694e60a6",
-    "2018-11-09/llvm-tools-nightly-x86_64-apple-darwin": "03e2e4ba7ffabe88b118f1207b820cc6c7ab0d79d478c1687ec5bb1c903b4045",
-    "2018-11-09/llvm-tools-nightly-x86_64-pc-windows-msvc": "63a4f2c85f3ef51efb0075944ad0249337cdd7c9593036995f79699393a458d7",
-    "2018-11-09/llvm-tools-nightly-x86_64-unknown-freebsd": "f9ddf5f1e02b800aaa0add32365d62e5dcf590cc130af5b209cdf8520f9262a1",
-    "2018-11-09/llvm-tools-nightly-x86_64-unknown-linux-gnu": "8b3e2e2bf77224e181a9b1987bd2ae940a0462f8b0af84b59de484f8fe96ffb8",
-    "2018-11-09/rust-nightly-aarch64-unknown-linux-gnu": "4d0f22349061a40a834ae6a40640c0f4e8a19f068a215af0fb0b9a7250942d3f",
-    "2018-11-09/rust-nightly-x86_64-apple-darwin": "934b83bbfcbca605875103293cf691a56429661e929e1c29fec2d3c5c1d65143",
-    "2018-11-09/rust-nightly-x86_64-pc-windows-msvc": "6659d7b9001a3613ca6b2bb64e5f6bd67cae51bf02e81b8b96dfe2299a180a21",
-    "2018-11-09/rust-nightly-x86_64-unknown-freebsd": "b50b1cf51e8bd138d55dc77f681904e1b431e7c956951ec603a3d94ff81a0783",
-    "2018-11-09/rust-nightly-x86_64-unknown-linux-gnu": "163e0666f2f7179caa9c5baa8b0280c618dc163007a73f5da0a0c917bd2b8902",
-    "2018-11-09/rust-std-nightly-aarch64-unknown-linux-gnu": "cb12c26ec032ede34f925ea7c57118c8694dee439f0e258f8655b83e08512a43",
-    "2018-11-09/rust-std-nightly-aarch64-unknown-linux-musl": "5e0d20f6f2b01bb661724cb5478fddd37c560f2848af9961da44d0ae75029b1c",
-    "2018-11-09/rust-std-nightly-wasm32-unknown-unknown": "a0084c768151b5cb7554085b77fdbbc014a1ba246335623a36b58e7f6bb95fb0",
-    "2018-11-09/rust-std-nightly-x86_64-apple-darwin": "dbc9ffa483484380e41b6514465523f6ef106be5708374b714458d14f76149c4",
-    "2018-11-09/rust-std-nightly-x86_64-pc-windows-msvc": "40e4194f3abd9c1eb97c3783009571f96d83e80018662c4ff6fd60e992b50ee4",
-    "2018-11-09/rust-std-nightly-x86_64-unknown-freebsd": "ab8a32d8efb0ab4686526c6cf1380161e87a89015464f5d5f5438c99723675c7",
-    "2018-11-09/rust-std-nightly-x86_64-unknown-linux-gnu": "1418ba09f97c6ba91e2df5ba0b11cf1c53498710bc6a147fe8f4be455a96c4d8",
-    "2018-11-09/rust-std-nightly-x86_64-unknown-linux-musl": "3262404dc8b0f509b3d47413340d825f99940f954ad4928fc0b39e2032c58230",
-    "2018-11-09/rustc-nightly-aarch64-unknown-linux-gnu": "167fec713804d8af1fa4f543e79ca5cee259f1b966b8e04c99efba75901f4c8e",
-    "2018-11-09/rustc-nightly-x86_64-apple-darwin": "55ca5ad85b0afd61a419e374f8e6320b4f4fe30f8092005cdec9e63103812ea7",
-    "2018-11-09/rustc-nightly-x86_64-pc-windows-msvc": "dd19c5a4b209a9f46dd2f99eb7ec0898bd00accf1c6e8a97222c580bcf62e32a",
-    "2018-11-09/rustc-nightly-x86_64-unknown-freebsd": "bd6bb0228aeab01f425cb2ad55b2e0409b43e79450c2830183a6878cc2d2bdc4",
-    "2018-11-09/rustc-nightly-x86_64-unknown-linux-gnu": "2c475f886123353c9388322da6e13a67b6ae902d8c249f8e95fde67429f7bf37",
-    "2018-11-09/rustfmt-nightly-aarch64-unknown-linux-gnu": "159353d0fc3b7d6aea127df348d7e824da79f995bf286df0bf03ed0615b7e875",
-    "2018-11-09/rustfmt-nightly-x86_64-apple-darwin": "940a39cc86d1cbb02535065d40993cc52acb223487c9efd4ce396950b6a72ed6",
-    "2018-11-09/rustfmt-nightly-x86_64-pc-windows-msvc": "896305dd7fb4975ccdf54c569faf05ce0ff9a13fb0b226904fb6594ed5e5c03a",
-    "2018-11-09/rustfmt-nightly-x86_64-unknown-freebsd": "7c313ee99e0bd3ac8ec13b576b07e6e64b0eed22505ddef1710bf2c7b1236378",
-    "2018-11-09/rustfmt-nightly-x86_64-unknown-linux-gnu": "4d1dbb88662353ea4bc353ec4d73600d72af0fc51f54dc3f0b8ee0b0aef05a15",
-    "2020-02-16/cargo-nightly-aarch64-unknown-linux-gnu": "2b9e7a1be3d4599e22e3070703e76643c12a60b16109f1bcba114d9453d41e48",
-    "2020-02-16/cargo-nightly-x86_64-apple-darwin": "c23632fbdc4a64b53bdc6a0c439a5b8a496e4450805b1ed421258822a4124175",
-    "2020-02-16/cargo-nightly-x86_64-pc-windows-msvc": "f81d3f8baecbe6b461836e667fc6035df50d645a84c58ba1d294a53a654323be",
-    "2020-02-16/cargo-nightly-x86_64-unknown-freebsd": "a2933a0e3092320705a0fa4a9dccf32e6a6566bd7c1440554a2285a98279ed50",
-    "2020-02-16/cargo-nightly-x86_64-unknown-linux-gnu": "658813da4742c713a7486e65d258c45492847c0a3508f041da187d03a50be8fd",
-    "2020-02-16/cargo-nightly-x86_64-unknown-linux-musl": "b197fce52a420f4d91c25794c4ffbc20d10a14918a299d1f8e8c93acb415c42c",
-    "2020-02-16/clippy-nightly-aarch64-unknown-linux-gnu": "47a8f75f95c105fa77fb2807224041801db639441608512be218c39acedf0001",
-    "2020-02-16/clippy-nightly-x86_64-apple-darwin": "d388e393a0cad72bdff876a99b2e5fe9f6c0d2c606a6184630aeda1ef4a06f76",
-    "2020-02-16/clippy-nightly-x86_64-pc-windows-msvc": "783fd1a17cf99c8193a3b884c80768175e7216b3e7c9a38a9fe4348e3bf66bd2",
-    "2020-02-16/clippy-nightly-x86_64-unknown-freebsd": "ff5e128ebd9fe15ae3cc4953f937f92338e332054c1deb3d42b967c2e2a345be",
-    "2020-02-16/clippy-nightly-x86_64-unknown-linux-gnu": "3e52e6fb619b84e3cb36cc42be3c21599c1e6b72fb8738a5c8703d401f69afcd",
-    "2020-02-16/clippy-nightly-x86_64-unknown-linux-musl": "1f1d448068a8bd58d8ace58ec201d5c55d492610ba74c4a8e0ed129060b290d6",
-    "2020-02-16/llvm-tools-nightly-aarch64-unknown-linux-gnu": "f0de4de8e364ee8e0aefc07500caca3917d79ceb4fd52a1602b5985b4c40ec71",
-    "2020-02-16/llvm-tools-nightly-x86_64-apple-darwin": "b9ec36e5c51f2dc1051e4b5831a49c096836f95c8bb87c19d6fa12bcacaaa914",
-    "2020-02-16/llvm-tools-nightly-x86_64-pc-windows-msvc": "4a2b966614e6bb7a1fc054ce42707c8a2b082b2f28c76c8954a19a65ea35476c",
-    "2020-02-16/llvm-tools-nightly-x86_64-unknown-freebsd": "235fa158239a4b498846eebff92639a87c708056e1a91215377f0d485e354c08",
-    "2020-02-16/llvm-tools-nightly-x86_64-unknown-linux-gnu": "f066cf2b315d0b6edc95d1b5b1b5b7a2275928045f4b2e4329144ca9cee85b6b",
-    "2020-02-16/llvm-tools-nightly-x86_64-unknown-linux-musl": "ad60578632fccc91b8503a1baa7f15629c07ffa0572c43a704cc1316ba138894",
-    "2020-02-16/rust-nightly-aarch64-unknown-linux-gnu": "9edd6c4c0d1b8626c905d91d36330fd9c2671d33f82d5bcd4413bb8696fb628f",
-    "2020-02-16/rust-nightly-x86_64-apple-darwin": "608d8747aa928b128b4da9565327fe791ebc787b96e80f09ef84676f3a0a3efc",
-    "2020-02-16/rust-nightly-x86_64-pc-windows-msvc": "735f5f2762ff94b04e70209e46a57202a13a65a8b12a403b620f0896c4fedaa2",
-    "2020-02-16/rust-nightly-x86_64-unknown-freebsd": "69dfcc2b029da84f68c5d543af8262a4735be574a29035d34e452932fcd66643",
-    "2020-02-16/rust-nightly-x86_64-unknown-linux-gnu": "b4f6ce68cc5fde78dc7ab06db6a6f30abde85ba6e5360ea3f75fb8c80232ad38",
-    "2020-02-16/rust-nightly-x86_64-unknown-linux-musl": "0e6b37f73853ac4cde22e883abf4251fc8af2c83565a949159c6c0c41177e8cd",
-    "2020-02-16/rust-std-nightly-aarch64-unknown-linux-gnu": "ef3c2edd450ef3ef214a5cc412de4527631f9324a28168997233a9ebea6f08c9",
-    "2020-02-16/rust-std-nightly-aarch64-unknown-linux-musl": "e1093f086fe07fb3bfb9e9a4c5298fa6eb505b9775f7667322de019b18296de8",
-    "2020-02-16/rust-std-nightly-wasm32-unknown-unknown": "dcc9ce64c62e2100b35194b6a9ed3d9a7572e1bbf28ca09da687af82ff1dbfc9",
-    "2020-02-16/rust-std-nightly-wasm32-wasi": "6e3c13f44ea6e997b5fb0a3818ee8cb850c9654857a438f6e8df42a6e1decf75",
-    "2020-02-16/rust-std-nightly-x86_64-apple-darwin": "d391be4bdb713356fb34cdc03475a830e6bd4476639c46ef19a8a4c05513bc4a",
-    "2020-02-16/rust-std-nightly-x86_64-pc-windows-msvc": "5881bc3954fe5c7a8080176aac4fae95bc079d020c9c68f9fc7d1064470c4493",
-    "2020-02-16/rust-std-nightly-x86_64-unknown-freebsd": "6575eabdfaed4b0490cdfffcbb5860036dcc36bebdabc58d839c088ff5556a6f",
-    "2020-02-16/rust-std-nightly-x86_64-unknown-linux-gnu": "28a169e9b0f0986a50254caf14be863cf6f1ed3aec8342a7fa756dc1af76f38b",
-    "2020-02-16/rust-std-nightly-x86_64-unknown-linux-musl": "fbcba5f59fc47157208a28786a9cafd4046359fc821c568afe798721f5bb4f68",
-    "2020-02-16/rustc-nightly-aarch64-unknown-linux-gnu": "e9cf265820f69331abc9a7c4da0c26febffd4017cf4e6d0840d4ed22b3dd332b",
-    "2020-02-16/rustc-nightly-x86_64-apple-darwin": "db0338b3e1934147dce0bf6420d9c147caa6aef2db1aca44ca8fef47b7247615",
-    "2020-02-16/rustc-nightly-x86_64-pc-windows-msvc": "d51440d4004e49670c5cf803f96aa222c68f09348bfca46f6e0d4c8728908065",
-    "2020-02-16/rustc-nightly-x86_64-unknown-freebsd": "c76fa125e6d17b16a96b01a875d826f20849b09970b49ed1183601a0e7803f6f",
-    "2020-02-16/rustc-nightly-x86_64-unknown-linux-gnu": "456af585ad4408ab5f0c7500264ebb4a5f6338c0aed642edb81224ec6146b546",
-    "2020-02-16/rustc-nightly-x86_64-unknown-linux-musl": "a98a07ecd9d291e3788d7e2d0dce82adb3777570afdfbe5707d05360d058fdb7",
-    "2020-02-16/rustfmt-nightly-aarch64-unknown-linux-gnu": "76b5fb48db5de274950f86a9b1cb69738311d2302da3e079ec772302aacfd999",
-    "2020-02-16/rustfmt-nightly-x86_64-apple-darwin": "77b467fec83ea6d8f2b4e4e186806d77ae7ecfab1de618f4a7d857aaa7f6823f",
-    "2020-02-16/rustfmt-nightly-x86_64-pc-windows-msvc": "eee4d08ac820d85491a9f13909f178dbdcc54edc5d98d2e433a073c6b1aa611a",
-    "2020-02-16/rustfmt-nightly-x86_64-unknown-freebsd": "a47062919f16888d2baa58a640299a5a9ece3f0d6537dea6e6241ac0d8877e7c",
-    "2020-02-16/rustfmt-nightly-x86_64-unknown-linux-gnu": "65513b8ca698f6859af19be665bead97271e7dbac3bc6058256ede1d7340aea5",
-    "2020-02-16/rustfmt-nightly-x86_64-unknown-linux-musl": "ac3275329a7f08749f8bbd08a9c183e24ad0a58c02e7cf70e81c41030a886900",
-    "2020-11-10/cargo-nightly-aarch64-apple-darwin": "cb4578ec077cfc56c3b23c59d4bf219aa05f0dbe5b431792d0860ed121e3619f",
-    "2020-11-10/cargo-nightly-aarch64-unknown-linux-gnu": "de75beda2e7c9501c88874e9769101204f1726eb7b26b79c4d8c162f4b2b7eec",
-    "2020-11-10/cargo-nightly-aarch64-unknown-linux-musl": "0292763ac22b539d4d17d7696fa649dccb8ba0f90c86f8ffeaac961add976c39",
-    "2020-11-10/cargo-nightly-x86_64-apple-darwin": "ad4add153d93e7db296560da01fe92c8c975d444e33bab4869ed10cdf2023e48",
-    "2020-11-10/cargo-nightly-x86_64-pc-windows-msvc": "ab5bd83e8fdb079f20c1f3623d334972d831bb5a339c8450f82a1034124ff72f",
-    "2020-11-10/cargo-nightly-x86_64-unknown-freebsd": "72ab8898aea8bf1f030da12ea3b4d1dbc18e5f7c2df28282fe915390f12d7939",
-    "2020-11-10/cargo-nightly-x86_64-unknown-linux-gnu": "82b6b0c0f20d4d23b769d79b6122cb7a074d9f222325b07503eddd73817452b5",
-    "2020-11-10/cargo-nightly-x86_64-unknown-linux-musl": "bae2a597c7c2ad907d49c6420bf85f91ea754cfb771d39d8b734c8d30563352d",
-    "2020-11-10/clippy-nightly-aarch64-apple-darwin": "c874202231fc418dc3fea539440d413c82d354957b25fb355e8afb01b8624d9a",
-    "2020-11-10/clippy-nightly-aarch64-unknown-linux-gnu": "f2730540761a100dcec0c36773411f69e74dc1ca96c67bc0ac61e6567f84a422",
-    "2020-11-10/clippy-nightly-aarch64-unknown-linux-musl": "be671660b1f8d347e69e7ae1e7d86f239b9d865245f97b790cd89738363f79b8",
-    "2020-11-10/clippy-nightly-x86_64-apple-darwin": "5ddbc1e21dbad3af73d8d0618439ec48b0432b392989f86b9e81d952badb4d16",
-    "2020-11-10/clippy-nightly-x86_64-pc-windows-msvc": "03232d753f7b5d5f384352bd4da99aa19d476e9d90fdb4975fed49f0fb4f1ba0",
-    "2020-11-10/clippy-nightly-x86_64-unknown-freebsd": "ba070cc03d05d50c00c106742fbd376ee770c0b81cdbdde549caba1535f290b5",
-    "2020-11-10/clippy-nightly-x86_64-unknown-linux-gnu": "02e23757d51c8fcedcedf02ca336a36bd13b45bdad5abb0931c9028e7228b406",
-    "2020-11-10/clippy-nightly-x86_64-unknown-linux-musl": "862dd065e8933b83c17902aaee3f20a48ff67e034f6b7c7ec05ea49e240d0ad3",
-    "2020-11-10/llvm-tools-nightly-aarch64-apple-darwin": "e2b1803548aeedb1e6b51724c9cbab123626fc88846eae53adf0a1c55d4a364e",
-    "2020-11-10/llvm-tools-nightly-aarch64-unknown-linux-gnu": "442255a2859c2e3345c8ceea7a28359fb02d42460ecf51d92395c1dd85c9a8af",
-    "2020-11-10/llvm-tools-nightly-aarch64-unknown-linux-musl": "85de8206f0ea17b51bf1ff3154d9afd6855c54e6b33babea22ec512cf837c283",
-    "2020-11-10/llvm-tools-nightly-x86_64-apple-darwin": "9ae35e98f8f930257bb103ae1cffda42476338838f490a62ba9d93638ce122ec",
-    "2020-11-10/llvm-tools-nightly-x86_64-pc-windows-msvc": "4106227bf29d1dbaa35ddc12f8a2c2f16ef27fe21971f6f7ed0d4356691a4055",
-    "2020-11-10/llvm-tools-nightly-x86_64-unknown-freebsd": "91dbd775c36f8b29bd688a1e75b10ab065928622985aee7e96848952ab6d85d9",
-    "2020-11-10/llvm-tools-nightly-x86_64-unknown-linux-gnu": "532a0883b16bbaa70bb2e9ba6c769594db35b1aaacbfa9ef06631a91bfe8048a",
-    "2020-11-10/llvm-tools-nightly-x86_64-unknown-linux-musl": "fc476f62ae3a917a634afaa3fba83ee756799de11b7bb0af38a9d85e75a1a66c",
-    "2020-11-10/rust-nightly-aarch64-apple-darwin": "bcb30524c7f4520bda573d31962ce5b058cd9b6d05db83431b182483071fb429",
-    "2020-11-10/rust-nightly-aarch64-unknown-linux-gnu": "7d6453eaf2640a9979707e6ef92b8dcfed33bd7bf5a7696d8efdab05bed182d0",
-    "2020-11-10/rust-nightly-aarch64-unknown-linux-musl": "b25c99b1b0f8aa36d17f86677b040bd73e2d2128938b0bfdf6cbcb1782783001",
-    "2020-11-10/rust-nightly-x86_64-apple-darwin": "106395f200ef0e6d08baad05d5da786dd17c612d25ba5d7c65a7031d52af9bd5",
-    "2020-11-10/rust-nightly-x86_64-pc-windows-msvc": "6a28970950157102e0ea6799da0235483cad141b2cf112718abcaa19ed81170e",
-    "2020-11-10/rust-nightly-x86_64-unknown-freebsd": "dce8b0971da6c265190d0c14cee3e4d82ad24ca224398ef3002a870f3db31fce",
-    "2020-11-10/rust-nightly-x86_64-unknown-linux-gnu": "29696ffa840261dec1a27018054599a93f49facfa6813f7ad1a875cfb1fc6fd7",
-    "2020-11-10/rust-nightly-x86_64-unknown-linux-musl": "a9f599adc294cbbd73e56efbec0d14306cb2da15f39fe0584969ffca4b00b86a",
-    "2020-11-10/rust-std-nightly-aarch64-apple-darwin": "80e57cd44992e0a9a29bb0233a4c7301369c7f00e9a63f89e944c5fd75931d40",
-    "2020-11-10/rust-std-nightly-aarch64-unknown-linux-gnu": "a4d0fa574f93e530f421651ec38f5374fdc8be20de717c435750bfcf0ae15f36",
-    "2020-11-10/rust-std-nightly-aarch64-unknown-linux-musl": "b1921c71b00cc8c8b665275ba4becaef16e860b88d4fcd2c6cae31cc6f929d14",
-    "2020-11-10/rust-std-nightly-wasm32-unknown-unknown": "636cb560095c23e12d629ea21dc85af954c2fcb2df57f25b40f11826d7547a46",
-    "2020-11-10/rust-std-nightly-wasm32-wasi": "baf705571736331dd5449e1473b590477e2a48ad0adc6a897516fb8f1a5780fd",
-    "2020-11-10/rust-std-nightly-x86_64-apple-darwin": "2b0d1758c20fea48e8afa5c9cc2844e9eb5c77376992f2af1e68261e1b0bd773",
-    "2020-11-10/rust-std-nightly-x86_64-pc-windows-msvc": "9e5f1089de87e9d54417038f7d5d30de5e604bf82f5be557361cd02b55abb018",
-    "2020-11-10/rust-std-nightly-x86_64-unknown-freebsd": "24a506f85e178be0799d12f9354c6129004068552c8f5321a519b033631b815d",
-    "2020-11-10/rust-std-nightly-x86_64-unknown-linux-gnu": "367c14b7fbe98e264b0e4b5a9ddaf3f78ce3ce09bbef4c7be33a3f2abade9ad9",
-    "2020-11-10/rust-std-nightly-x86_64-unknown-linux-musl": "b2e929d3821b104796dbc0521228cef25ce6f55e3494dfc7c3a852b6404c4acc",
-    "2020-11-10/rustc-nightly-aarch64-apple-darwin": "a461f2486013b5cec450c8f79230e83878689b803a38df7304adea27b025ef1b",
-    "2020-11-10/rustc-nightly-aarch64-unknown-linux-gnu": "900170006c4c2d88cadc0d915d410588cb80150817e53aa7fca41a459a5ec500",
-    "2020-11-10/rustc-nightly-aarch64-unknown-linux-musl": "bf8d81b551229263f52ecfdd561ba6698d7030832723e5c3721d5ada5d478e7a",
-    "2020-11-10/rustc-nightly-x86_64-apple-darwin": "7a443dfb068bb7e3854dd6475564da33a57d3f225ce03ad8bc973e8900960b69",
-    "2020-11-10/rustc-nightly-x86_64-pc-windows-msvc": "e7b325e55d372aaf4be400273673711fe78271b655c0b710d62a972b8044b9ef",
-    "2020-11-10/rustc-nightly-x86_64-unknown-freebsd": "3ef55f82aefad5eac4398977d34b1963feb05b1cd654005d385da26624cb2f7e",
-    "2020-11-10/rustc-nightly-x86_64-unknown-linux-gnu": "7498af27587f4ff235b0477199eec4128a65f54d4c05e4ddb9c632685ec526b4",
-    "2020-11-10/rustc-nightly-x86_64-unknown-linux-musl": "ecb5626e23ea84e1b14fe064b6fb1afc145ec280356a6f197ec410c23756f217",
-    "2020-11-10/rustfmt-nightly-aarch64-apple-darwin": "e4e992764d26792ba901fe4c9590cbb7a72a8a71b524f54ae7b1312d2824bca4",
-    "2020-11-10/rustfmt-nightly-aarch64-unknown-linux-gnu": "7ec62c4aaa8a89f94e037c39907caaea942c9fb44e5dbadd65be7b9c8650c594",
-    "2020-11-10/rustfmt-nightly-aarch64-unknown-linux-musl": "5324c21a1384ba88a2f2552386050b566a3c48673949218b65e26b6ecbe04c6a",
-    "2020-11-10/rustfmt-nightly-x86_64-apple-darwin": "c169fbd9b21ddff9e7558f8674755410d170aea6521cccadd06a14d1091870c3",
-    "2020-11-10/rustfmt-nightly-x86_64-pc-windows-msvc": "d3fa6a30d2be44c636478c0259337c6f449a55bd9f037cbe0600a18da143c2e5",
-    "2020-11-10/rustfmt-nightly-x86_64-unknown-freebsd": "3681fa62a68c50d0de839dfe424e30ae72d8635e15267042191bb10195d265fb",
-    "2020-11-10/rustfmt-nightly-x86_64-unknown-linux-gnu": "75e17c1e4bcfa70669aefda8ba34a7e8d6e0f5d842096b98135f3447b37d3538",
-    "2020-11-10/rustfmt-nightly-x86_64-unknown-linux-musl": "84bc7707f7ce989c1ed452817153c25fc7324d1795650787fde878ac862ecfda",
-    "2020-12-30/cargo-beta-aarch64-apple-darwin": "6c0f23ddbb4e75155d1dfc24fd9103651eea565626f8b4c292ae09b17ef287f5",
-    "2020-12-30/cargo-beta-aarch64-unknown-linux-gnu": "ae0c5595646ae7a532b5f14720b67a82875b6d4bfdc6c8a2982d7c40e0d9f318",
-    "2020-12-30/cargo-beta-aarch64-unknown-linux-musl": "e6d576a7690ec8f16c93899b3cf5daab1608c6e4bf18fdd8462a0a61180e13a9",
-    "2020-12-30/cargo-beta-x86_64-apple-darwin": "07b59728f4ac5f95ff8fec3813e8ae1afa4d00105e490866373ba99ff25bc142",
-    "2020-12-30/cargo-beta-x86_64-pc-windows-msvc": "cebcf3f6f2a502ac53be02cfc3522c9bb6ec4954ccf93cc12026028102706900",
-    "2020-12-30/cargo-beta-x86_64-unknown-freebsd": "9975b922979a74c48b8461d2c67086565fa84b4f2be8857b5027d9f1db9e7cb1",
-    "2020-12-30/cargo-beta-x86_64-unknown-linux-gnu": "cce34205c11ae5f6c1c2fe08aedf1448d0f7bd8e11d3a7e467c12e46595d5372",
-    "2020-12-30/cargo-beta-x86_64-unknown-linux-musl": "ba71eeb40ca9ccd8d8b356fad1b7d6cb7af4f982a00b5feffede345895104561",
-    "2020-12-30/cargo-nightly-aarch64-apple-darwin": "8ac787c50ad37ab398d504cb915987ca85d87372a224564935aa1203d4cb5477",
-    "2020-12-30/cargo-nightly-aarch64-unknown-linux-gnu": "81195f8efae71dd6f96bea9ba1881bb647d127a130570289d026ea55a43ce6e5",
-    "2020-12-30/cargo-nightly-aarch64-unknown-linux-musl": "220ef2d21821c6c358a1672d4895389e09b78d4ab7270453f48785b9974b1901",
-    "2020-12-30/cargo-nightly-x86_64-apple-darwin": "28cfbe0214e99e311c58ae2fbcd23ccf9d31d97fcae106adf174f8e697416d4f",
-    "2020-12-30/cargo-nightly-x86_64-pc-windows-msvc": "80678407f5b2bc1cd01b36fc06105b1035740b9002f728629f3555965d0a977f",
-    "2020-12-30/cargo-nightly-x86_64-unknown-freebsd": "812501b738c59027b61ef6ac2462f0be76d4a95b9c78a301ef6dd33b225ca5e8",
-    "2020-12-30/cargo-nightly-x86_64-unknown-linux-gnu": "3d16880431ec9a218808806d6b768c7e29cc9ee6298a4dfa796f0fd5bef9cac3",
-    "2020-12-30/cargo-nightly-x86_64-unknown-linux-musl": "c4798bc41dc9a65b23962b0250cff14c648fe6804d0b96df9f59460a0741e916",
-    "2020-12-30/clippy-beta-aarch64-apple-darwin": "b3535c7e1c72d5380518ab2568762f38c9a359310664b63ed14c15b9ff4b4528",
-    "2020-12-30/clippy-beta-aarch64-unknown-linux-gnu": "15330ccfd8462712546e34c07de4f921df74798204d1dcf325e1c2df9f741b00",
-    "2020-12-30/clippy-beta-aarch64-unknown-linux-musl": "61d7532e94d1837dda778e0140f42384696896ed7ff22a1922ace833a1cbf2c0",
-    "2020-12-30/clippy-beta-x86_64-apple-darwin": "70161007d54df7ee2cbd2f6fa115526f9a426c7f4dd9570c97577aafb33ff96b",
-    "2020-12-30/clippy-beta-x86_64-pc-windows-msvc": "9eef81fc0e6dddd105b871dc13834c99deaefc022a06844b191a6ebf3c266b4b",
-    "2020-12-30/clippy-beta-x86_64-unknown-freebsd": "519b646b3e23c38337e1a50275413580e697dea680a8ef40feb0fb1331ca5da2",
-    "2020-12-30/clippy-beta-x86_64-unknown-linux-gnu": "73aab1813c75c7efc14d957cbef40bd951e1b195ea2f025cec1fdd100acd3203",
-    "2020-12-30/clippy-beta-x86_64-unknown-linux-musl": "fd65821d39cf177493abf58063b2a2592403cadf4d319ed72ba99ff06b0503ab",
-    "2020-12-30/clippy-nightly-aarch64-apple-darwin": "15d33adcf937fddd4b27a86b0153d418fd1cfe148e901c11f69a7b62f9025363",
-    "2020-12-30/clippy-nightly-aarch64-unknown-linux-gnu": "09abbf8fa7d941ba4d815476b51ec96a3c138d4193971f1a765c7218da819e78",
-    "2020-12-30/clippy-nightly-aarch64-unknown-linux-musl": "e0e334fc4ffdce118cd2bcafea2cc49aef0bb9cf69e5775cee80c5950bc8f60a",
-    "2020-12-30/clippy-nightly-x86_64-apple-darwin": "1c18a16194a89a18ee727c18d655d613e05c3c115f6acb35ab4d2aa03ed047d1",
-    "2020-12-30/clippy-nightly-x86_64-pc-windows-msvc": "7a417a7e816a357ff09c711fda1c0f1c3b8dab10f81a9423e8e6ea63f1696030",
-    "2020-12-30/clippy-nightly-x86_64-unknown-freebsd": "71d41007415ea347dd347b34468cb307e88578bc095455d7d88e174a8546ae22",
-    "2020-12-30/clippy-nightly-x86_64-unknown-linux-gnu": "6dcc3aca82ff7830b89506386bd212724b265913d553c32c83ac534c500b7cf4",
-    "2020-12-30/clippy-nightly-x86_64-unknown-linux-musl": "ec2108da23dfb5f1799a1f42c2c8d6a5d72a92321b4000935d5ab29fcb9e67e2",
-    "2020-12-30/llvm-tools-beta-aarch64-apple-darwin": "d6e3e50a19aa45863ba5e37f316bf928f6eca96c3fa749b9ba87cddb3608a659",
-    "2020-12-30/llvm-tools-beta-aarch64-unknown-linux-gnu": "e1f3d55116386fbecdcaacb879dc19a62a9c9bb0d06581a366a53e84a5bc4d8e",
-    "2020-12-30/llvm-tools-beta-aarch64-unknown-linux-musl": "f0e7a5df202982f5ec91dd0d0bed875976906df8b64fe56702f452e7bda20654",
-    "2020-12-30/llvm-tools-beta-x86_64-apple-darwin": "b5a1a1b3d2d316e8d66876736462b6c8b08951e7fbfa3568da19caeb976e9fa9",
-    "2020-12-30/llvm-tools-beta-x86_64-pc-windows-msvc": "a10198ef08e9e58bb1a54ec23368d5df02c87b6618e16ab026afcc5c8f9cef6e",
-    "2020-12-30/llvm-tools-beta-x86_64-unknown-freebsd": "79df94c33935de84d0cd0e985c333c2516551a9fab3c8fb7c5b93cf3b0d0e22e",
-    "2020-12-30/llvm-tools-beta-x86_64-unknown-linux-gnu": "6e4d8501fc7c5c69b4a5b532021a0e39e125b6fedc12b1afe4ba22d07e0b995e",
-    "2020-12-30/llvm-tools-beta-x86_64-unknown-linux-musl": "19b0382c59426db81004a4386530fa4e8981dfc2feb5bc8224ad1924e092755f",
-    "2020-12-30/llvm-tools-nightly-aarch64-apple-darwin": "8e2f796ace0270fd2fde8bffe4db90fa1b09947032ee705bd99a1628a1138b95",
-    "2020-12-30/llvm-tools-nightly-aarch64-unknown-linux-gnu": "3f59253b666c05faef7a3b9b1b761ac6ae4f83833996495936629f41fc4c6959",
-    "2020-12-30/llvm-tools-nightly-aarch64-unknown-linux-musl": "e6a109c5d3c90969f37d7f0fbd43346616ba8322dca9046a0ea7d522230f71a3",
-    "2020-12-30/llvm-tools-nightly-x86_64-apple-darwin": "8aca7ddf73983bf2db4846721787547fed16c2ad4dc5c260f7f05f6b93cea8e7",
-    "2020-12-30/llvm-tools-nightly-x86_64-pc-windows-msvc": "f30202ade378ade7a1a4bf23381ae69525154ce009aa54b9d59d6507000bf301",
-    "2020-12-30/llvm-tools-nightly-x86_64-unknown-freebsd": "7f1837f6c8e26232cad456df8ce9104cbc6eea8a57e3290a8c72286c0e9fe803",
-    "2020-12-30/llvm-tools-nightly-x86_64-unknown-linux-gnu": "b1ee3b5cafd026432c74ab9eda4f797d1aa55d06a38438f84f29be528887e540",
-    "2020-12-30/llvm-tools-nightly-x86_64-unknown-linux-musl": "7f97270394c389db0feedc163c134518e1ec2f28910db22ed4fc50a61c2a9d4b",
-    "2020-12-30/rust-beta-aarch64-apple-darwin": "eb202137d6801bf50c3edc06b5bf16cd5215c66d24790a1168d22fb3a504adf9",
-    "2020-12-30/rust-beta-aarch64-unknown-linux-gnu": "c1d80d58cd0eb74f3db650285c808d18fb0a195fe7ad6461c38de098ff94fc77",
-    "2020-12-30/rust-beta-aarch64-unknown-linux-musl": "a7e852fa55fe8183d749196f72606c1541fb85de7bbd58a73df45454d5cb6e0c",
-    "2020-12-30/rust-beta-x86_64-apple-darwin": "ed1b3b8f5fe4e73ddef62a54ec41dada5fb2cd2519f5c5add06be6ea57c38d49",
-    "2020-12-30/rust-beta-x86_64-pc-windows-msvc": "0192de1b6cb415683e231caf3817127230828e6256150cf0a0c8f393cec50650",
-    "2020-12-30/rust-beta-x86_64-unknown-freebsd": "23515e664a0a87bd217bbcdec8785f52485ad8f74c7ff84b6949c0a16f09be1b",
-    "2020-12-30/rust-beta-x86_64-unknown-linux-gnu": "5ebe5cdf55eb79dad2c34fc770c5a35a6be2ef2a72865db291932ca193467b6d",
-    "2020-12-30/rust-beta-x86_64-unknown-linux-musl": "f33120cbe25113f956c035b3c2ca532eaf810ab6d85c6df69fff0eb69e1547f5",
-    "2020-12-30/rust-nightly-aarch64-apple-darwin": "4cc5ef6dc2e7524da659e416b68b353f61576aeefccc33c0f2564699d5d0cf91",
-    "2020-12-30/rust-nightly-aarch64-unknown-linux-gnu": "1539f5181c1993abb7a43b14dd1294d88453e48f8670c4574e0b5e98e6df28fe",
-    "2020-12-30/rust-nightly-aarch64-unknown-linux-musl": "7ef640112eb50bd77c7203d5fe56bcf3b2fba130e4acd5e707056686431a93a8",
-    "2020-12-30/rust-nightly-x86_64-apple-darwin": "2b5b885694d0d1a9bdd0473d9e2df1f2c6eac88986e3135e6573e1d71e7824dc",
-    "2020-12-30/rust-nightly-x86_64-pc-windows-msvc": "2c9086371cee98ce95cf10098cd655b2e33dd70e8e250759a1e8b0e8c42d659e",
-    "2020-12-30/rust-nightly-x86_64-unknown-freebsd": "79e5492d9a5f9f04ec5080be1fe305a3d7adde330f5c3fb9d7a3bae52720a027",
-    "2020-12-30/rust-nightly-x86_64-unknown-linux-gnu": "1a6b541f2d0ccda148a60d749e974cc545d9765b71d8dec59418b493f05209a2",
-    "2020-12-30/rust-nightly-x86_64-unknown-linux-musl": "fe9c7f0c0898b1f54d0a3492450580d2abb7682de74a9964e60eeabb7761a3b1",
-    "2020-12-30/rust-std-beta-aarch64-apple-darwin": "0065919e445e3eaa8d70561b949697b8e3af9beea62989c9ffc60856d46a9da3",
-    "2020-12-30/rust-std-beta-aarch64-unknown-linux-gnu": "426bd1cc7a0e94af5decd643d08c54fe9aab29e638cd79aca21ccb05ec00eaf8",
-    "2020-12-30/rust-std-beta-aarch64-unknown-linux-musl": "d9f779f46c182b37b185113f92e8a8a17ebf3b5ef4e11e137980fdf7139ab506",
-    "2020-12-30/rust-std-beta-wasm32-unknown-unknown": "3cf97eba1da6d14160e82de4c0302883fb2eb9c65151dd2a148c57cba430f5ec",
-    "2020-12-30/rust-std-beta-wasm32-wasi": "e86f3f58cc04bf4c4f9d94ac11e7244510a35f89795298658de2153a7fa60f86",
-    "2020-12-30/rust-std-beta-x86_64-apple-darwin": "12f5a181b6102f75e85b71259283d852777940cf82d1681fb19005b589076a83",
-    "2020-12-30/rust-std-beta-x86_64-pc-windows-msvc": "a02da2dbd7f3d14e4a2083a497aa7aa884b99e6ea941059102278dd2325c5b61",
-    "2020-12-30/rust-std-beta-x86_64-unknown-freebsd": "379f353e27b8218ed6bb54f1ef16314624705e9b28f5cd6047bc25259aeb0bf6",
-    "2020-12-30/rust-std-beta-x86_64-unknown-linux-gnu": "6929f00e1cb93b16bd2e3d76029b297f099818183ac2d7ff23eb532d4c31ebb6",
-    "2020-12-30/rust-std-beta-x86_64-unknown-linux-musl": "789ccd43b76e3f7af1675d24780281191be48991a2b2a217acd306b534bce4b9",
-    "2020-12-30/rust-std-nightly-aarch64-apple-darwin": "a01bcc6eb93b1883bc57739959d6f9e13fbb80e1867310272cdb1a1de496cf73",
-    "2020-12-30/rust-std-nightly-aarch64-unknown-linux-gnu": "3997bd9e5057851b9e49ebcba5886ca98bf736c062c122e677fcf40aa7ac5416",
-    "2020-12-30/rust-std-nightly-aarch64-unknown-linux-musl": "628f5ef4fd2e8b8d7e429a431127cb65321a69fbb69ed07b27df6ac4c8850784",
-    "2020-12-30/rust-std-nightly-wasm32-unknown-unknown": "b1669be863b7f419254382e9e3820e9ef0d69c60fa45f91d0625140229725484",
-    "2020-12-30/rust-std-nightly-wasm32-wasi": "8f2b0a30cdf50d748e57d23d94d54a4e175e864296c8048c8454bb6198b16fb0",
-    "2020-12-30/rust-std-nightly-x86_64-apple-darwin": "17912a6a5aa56daeb0aed5fca8698bacc54950351d9f91989a524588e37e41ca",
-    "2020-12-30/rust-std-nightly-x86_64-pc-windows-msvc": "4d2585cb12606f217150509971850330cc1b7f3e1a9c18ce03fd3b981021fa1f",
-    "2020-12-30/rust-std-nightly-x86_64-unknown-freebsd": "ac517f0ccc4b30f3a296a25a8b17f75f877052cd56ae5c5a043d88c0f5de972b",
-    "2020-12-30/rust-std-nightly-x86_64-unknown-linux-gnu": "5b1bd5fa31b9190c66b3446629c155d4896cffc8fb1f9f603a2e949162b7f791",
-    "2020-12-30/rust-std-nightly-x86_64-unknown-linux-musl": "3802d2c7271cdd3fc35921b0d9f999b9b34ac9d888b62085b976453a8b113700",
-    "2020-12-30/rustc-beta-aarch64-apple-darwin": "20107f4541be8822d428c402e010333f2f00aaf086d03b4e35ce8d1bd5c33d5a",
-    "2020-12-30/rustc-beta-aarch64-unknown-linux-gnu": "29e2808cadf8da481a0ace30bf107372dd108b0475706cbe2b9cdd4ff27e2315",
-    "2020-12-30/rustc-beta-aarch64-unknown-linux-musl": "035bd303601f588ebc23293e9c64050f7053eca1fb2f3266971bff71c4cc3a1e",
-    "2020-12-30/rustc-beta-x86_64-apple-darwin": "d65df5791d79e13037672d22055ec24583195554cdf7c3c2992cbcafa497e98f",
-    "2020-12-30/rustc-beta-x86_64-pc-windows-msvc": "7f934dd412207c0d776fb4e8ec4c5f4426e92b2a1854416a8ce7bbc2dc7f5908",
-    "2020-12-30/rustc-beta-x86_64-unknown-freebsd": "19818ab53bbd94c6d1723a52809bf1c3a271e258664ea2b3b7d00161965e058c",
-    "2020-12-30/rustc-beta-x86_64-unknown-linux-gnu": "4f5ac3311c913b79dca1a02cf42fd7326c63d53ee252447b61f113c043a82b5f",
-    "2020-12-30/rustc-beta-x86_64-unknown-linux-musl": "d688cfe617d18c132a051afe42ac0c759638b1d2b0003fe7970becd1cf30c8be",
-    "2020-12-30/rustc-nightly-aarch64-apple-darwin": "4610961ab77e1bb54bda95474b1c1f25f1fc5c1c103bc4f54758e5b2a5454d8b",
-    "2020-12-30/rustc-nightly-aarch64-unknown-linux-gnu": "c9997c01769a6371200e20639fcae99e6dec3d9062f65b2928429e04d4cb7930",
-    "2020-12-30/rustc-nightly-aarch64-unknown-linux-musl": "28a24668966faf46f0a79034446e54e2b86e4968e1a3a9381dbf5d9e916d8d9d",
-    "2020-12-30/rustc-nightly-x86_64-apple-darwin": "cf2f06d6c8d784a469561f6323b8b923fb6ad3a7c55c7ac90d5619b9d443ae9f",
-    "2020-12-30/rustc-nightly-x86_64-pc-windows-msvc": "8df3729f3b09cb39fc4b0ecfd90551625941d508f7e776ae4e16fcf02b0af4f3",
-    "2020-12-30/rustc-nightly-x86_64-unknown-freebsd": "f3818645265c3a08cb9fa04d1c2d42be72116974c9c34515feb7d5788e86ac41",
-    "2020-12-30/rustc-nightly-x86_64-unknown-linux-gnu": "79fc8d51bb6d298d292045eb77e1b2d0f7f97886604599a3e9dfc0c6956e49d7",
-    "2020-12-30/rustc-nightly-x86_64-unknown-linux-musl": "2627e995ff9d7e72ec46d9161d3b8f78d264671c507f10337f9ec714171dba5a",
-    "2020-12-30/rustfmt-beta-aarch64-apple-darwin": "75c957da65d459a02f29affd8fac867e14eb8eec98531fd2216ebcb54a5b6407",
-    "2020-12-30/rustfmt-beta-aarch64-unknown-linux-gnu": "b34fd3a8e80969df9ba71ef5b80f143b4e8f325a91d98b00db1ea86879074b22",
-    "2020-12-30/rustfmt-beta-aarch64-unknown-linux-musl": "10353a1a4c052509277625702e6f36a3561772760671728b406cd0d5c1f46e1a",
-    "2020-12-30/rustfmt-beta-x86_64-apple-darwin": "bfe5ef2349a226fe54d87658f55dad90b99ee6e36de4f5d1e381b1ca453e1919",
-    "2020-12-30/rustfmt-beta-x86_64-pc-windows-msvc": "ebac84095df62d8ed6b41454c07f043477479a1770cf156a5c9f351bebcbe6a4",
-    "2020-12-30/rustfmt-beta-x86_64-unknown-freebsd": "bfe8a34403fb19d88eb2b4528b3836a645239d239bf56cc9b916aefebd0199a1",
-    "2020-12-30/rustfmt-beta-x86_64-unknown-linux-gnu": "78ac7e3178068c6828765c295698cb79375266cec95b097c4603f8582bd24379",
-    "2020-12-30/rustfmt-beta-x86_64-unknown-linux-musl": "6d8f4685cc8bcee32c7e5e3b7524444d90c88486f81905e109fbe5cc47f99fc1",
-    "2020-12-30/rustfmt-nightly-aarch64-apple-darwin": "0c3cfa89787cc9fcdee39acc0b5c5cf3ef084d85fb0e2716926813852fb96a3f",
-    "2020-12-30/rustfmt-nightly-aarch64-unknown-linux-gnu": "5fb27d5f31411c242a8046de087b3dbd73e5829d7e07493858034139681c30c7",
-    "2020-12-30/rustfmt-nightly-aarch64-unknown-linux-musl": "19f6b831df8996666d9277396650909b06396fca3b37eeffbe0c763472cb076c",
-    "2020-12-30/rustfmt-nightly-x86_64-apple-darwin": "c7da578f3b70dbfa0ae1f06370c7c9f22a49127fed8a99b69dc9ac6e42491bb0",
-    "2020-12-30/rustfmt-nightly-x86_64-pc-windows-msvc": "ebae20dd198a36b657aa0486e6b557aba60c9b4fbff25c108246de312fd2963f",
-    "2020-12-30/rustfmt-nightly-x86_64-unknown-freebsd": "2e0f2e4adcc234d29859aa38088a02be2b2bb0a7e43863bca6d436a6712b8b3b",
-    "2020-12-30/rustfmt-nightly-x86_64-unknown-linux-gnu": "0fb77ae8a33fb83ea496654a52e55ab5245206322f09c1d396e0c5833a16b856",
-    "2020-12-30/rustfmt-nightly-x86_64-unknown-linux-musl": "a93e4b51ca3e87661edb62d8ceedf20446e7cb2fa700ab9f8cf765db6e5f9407",
-    "2021-06-16/cargo-nightly-aarch64-apple-darwin": "eaf4540191cbb0627b2f6bb4cb9fe94351bb7601d07cd2795b3f1386d32dca76",
-    "2021-06-16/cargo-nightly-aarch64-unknown-linux-gnu": "a46dd7f7d4532df2944056efab6b0f510224497be0993699ee59188b03b462a4",
-    "2021-06-16/cargo-nightly-aarch64-unknown-linux-musl": "11213aac3d92a05799892e94bcf632ea35418eb600bcf7ea71f9c8216c2cdb3b",
-    "2021-06-16/cargo-nightly-x86_64-apple-darwin": "09b55140b655ade515b4890c966e2f8b23e68d96a2deb557c23d520315dc72cb",
-    "2021-06-16/cargo-nightly-x86_64-pc-windows-msvc": "6180250887125396cb2dfae079bbe9a4e71e8432034f7d20428193cbbe4ccb4e",
-    "2021-06-16/cargo-nightly-x86_64-unknown-freebsd": "8d54457bb1d21dfe85889fa29c3fa8dc40d0a9a54b47ac853aaa2136efec8fca",
-    "2021-06-16/cargo-nightly-x86_64-unknown-linux-gnu": "4566ecb0c1b3131f44a14b1851702e6a6bdd06f80fbf0d5d768770a97b10cb3f",
-    "2021-06-16/cargo-nightly-x86_64-unknown-linux-musl": "9b491cb6472197db1f435e30c7b133f4da12e602d77e8ab82859c3181b214b90",
-    "2021-06-16/clippy-nightly-aarch64-apple-darwin": "4241a05e0a53c9385f83956241131c7c7ee4b75b5ce403f992dbd3512c8996e7",
-    "2021-06-16/clippy-nightly-aarch64-unknown-linux-gnu": "c942124cf5d48716e0cc85c8c328e6261b8903b4d86254233367de74036258a2",
-    "2021-06-16/clippy-nightly-aarch64-unknown-linux-musl": "87a5ccb283f5cc5a35271d0de17491e37c1694ab6b3015291a37c1b18cac3f49",
-    "2021-06-16/clippy-nightly-x86_64-apple-darwin": "fe4b7a3f596a118682d9b8fb58ddb1f9b222e679dfd8ad5072050aacc30280d0",
-    "2021-06-16/clippy-nightly-x86_64-pc-windows-msvc": "1605953eb558f6feccd13e13dba581c4336129f9714464148c0958b22cb12521",
-    "2021-06-16/clippy-nightly-x86_64-unknown-freebsd": "2248da8e036e410c124bc24564bb99679f05beff2ab1a6f866cdd111f43ca65e",
-    "2021-06-16/clippy-nightly-x86_64-unknown-linux-gnu": "3308e33e1ccbac22d03a279bb5112d5e089b482b096456e1cee550df651e558b",
-    "2021-06-16/clippy-nightly-x86_64-unknown-linux-musl": "928916f1e52107d92e40732bc8dc3162be1a445974249d5cc1be8c4be5f83dc1",
-    "2021-06-16/llvm-tools-nightly-aarch64-apple-darwin": "9ec6f8a300c7a5d49eecbce1f6a705edccb3b2197691334df4f7cb280e10c701",
-    "2021-06-16/llvm-tools-nightly-aarch64-unknown-linux-gnu": "66ce674917f40309033e8bb4316577679baad14929468c5f023d81b4225a6551",
-    "2021-06-16/llvm-tools-nightly-aarch64-unknown-linux-musl": "a8655b9e3726920a705081fee1add02c26fcbd4b3bdbca52642ad74b16be24ba",
-    "2021-06-16/llvm-tools-nightly-x86_64-apple-darwin": "e1aa13d71478684f83af6b3211b88cc2b370ac84a9f140a78af483c0aa235761",
-    "2021-06-16/llvm-tools-nightly-x86_64-pc-windows-msvc": "3cdd8e14fa4b31ba16aa6b330165babcca86082397c73262e060b19e4b84d871",
-    "2021-06-16/llvm-tools-nightly-x86_64-unknown-freebsd": "0bfe1a25041d7c74485691106b7ec72ba6c6178bc0fad780a57d8df1c21acd71",
-    "2021-06-16/llvm-tools-nightly-x86_64-unknown-linux-gnu": "7c42d2707ae20d8d8cd4a441c60bbb180ee7bd326fecb884220859dff1b26bc3",
-    "2021-06-16/llvm-tools-nightly-x86_64-unknown-linux-musl": "47728492d7d58cc125db0fe4bb8141e230404fab52fcf898178545de44b341fb",
-    "2021-06-16/rust-nightly-aarch64-apple-darwin": "9883ee9b5b5d4833ea6ad001b0205fecf536db3fc9b19931229922d3af8abf59",
-    "2021-06-16/rust-nightly-aarch64-unknown-linux-gnu": "6540dd65839da5af9106652c361b696b9ac1fe4a14f4ac5801d8d6186b6b031e",
-    "2021-06-16/rust-nightly-aarch64-unknown-linux-musl": "134134199171087947159c446e2c73ef2c5efee20b55cfbe20004c80479b5b29",
-    "2021-06-16/rust-nightly-x86_64-apple-darwin": "5cc5e38ee2ff4c8acc0e57a3bc6e19bbc679ca4f6d4737c137882af4184435d9",
-    "2021-06-16/rust-nightly-x86_64-pc-windows-msvc": "0de02a0fbf7621da7902cdc10a07781a8cebafc71d103ff7e2e3e6fe10c43d8c",
-    "2021-06-16/rust-nightly-x86_64-unknown-freebsd": "8a6245719a44080281713cad744bffd2a7e8ad4578028ffbe1c0999e782c8d66",
-    "2021-06-16/rust-nightly-x86_64-unknown-linux-gnu": "c3af6083060b123102a073028e0109e1585df6ee95003b70d8763f2aa470b3e4",
-    "2021-06-16/rust-nightly-x86_64-unknown-linux-musl": "19f50a5db4699a9dcb67a19cb6b1f559d3e39ce81446d42bad43fa02890cfdde",
-    "2021-06-16/rust-std-nightly-aarch64-apple-darwin": "978397a6ceba7117b89ce5a9822a2dc39b566084950c56954e0163e19afa3bb5",
-    "2021-06-16/rust-std-nightly-aarch64-unknown-linux-gnu": "d6369fa8ba1d649d08b38681234d6aec0f3871e71650ebcfcc59ea7c1bce2ee4",
-    "2021-06-16/rust-std-nightly-aarch64-unknown-linux-musl": "9fb786450e61f6e978efd2bcc238f2cc593b9057e8448feea032b435bf51d8b4",
-    "2021-06-16/rust-std-nightly-wasm32-unknown-unknown": "d53156cf7f97293ea0d2b3b08537b1b2c3b52cc91c5a8bf28e14f69a2bae73be",
-    "2021-06-16/rust-std-nightly-wasm32-wasi": "88dd233aa844d0fb9287576f35d628c617b54da7da04338a14f7abd5aa738a75",
-    "2021-06-16/rust-std-nightly-x86_64-apple-darwin": "60ecd0061a48198e2d890fb736c3059104ac4e88932f7f6b7e1cb59cde7de110",
-    "2021-06-16/rust-std-nightly-x86_64-pc-windows-msvc": "a9b5cd681e66a826fabe48f38630994710f43e3fbcf73c65c59b222a23fd1f4e",
-    "2021-06-16/rust-std-nightly-x86_64-unknown-freebsd": "e5758800722baeaaa0f1b61818564e8a21444dfcbe9602b142d0454218e68d82",
-    "2021-06-16/rust-std-nightly-x86_64-unknown-linux-gnu": "d863737b021c1ae1f1e0bafebf61088232a0c76d5665ce86a6fac8ca95c7bb22",
-    "2021-06-16/rust-std-nightly-x86_64-unknown-linux-musl": "7be512172a022f7011be352e90eb4106344af13e7a4d6b831961fd66f2f83581",
-    "2021-06-16/rustc-nightly-aarch64-apple-darwin": "e3dd00de0ec202c385c3c943dbec7157846314e04108c9496935ea4e273edda8",
-    "2021-06-16/rustc-nightly-aarch64-unknown-linux-gnu": "88b9470cc39c51f1869bcaea2738a71c32baa4f76099dec77d4ce343b486bf0d",
-    "2021-06-16/rustc-nightly-aarch64-unknown-linux-musl": "430e9c095cdba5341e3eb1d9bde03b90fd8dfc54a38c951a8e209b5013fc9e26",
-    "2021-06-16/rustc-nightly-x86_64-apple-darwin": "438e0615f993ddbf518848705c01fbae26f36139e7b48d9df5d1403586966f9d",
-    "2021-06-16/rustc-nightly-x86_64-pc-windows-msvc": "f54e69bf237c882c4d0ee730573e3ebef5eddc4a03730406cf082b43eb4cd008",
-    "2021-06-16/rustc-nightly-x86_64-unknown-freebsd": "6fda58af80d7c597d178b2137adecaf4e94c289f7f55464de0138ce76575987f",
-    "2021-06-16/rustc-nightly-x86_64-unknown-linux-gnu": "44a77db517c05e7b136c8f683e7a9c076fb7c5f15c2d2076a559398a4eeb33ae",
-    "2021-06-16/rustc-nightly-x86_64-unknown-linux-musl": "6eefe98ce50f897fbba0bee21efbc27c76adb108189872a384683bccb4b0aea9",
-    "2021-06-16/rustfmt-nightly-aarch64-apple-darwin": "ba8c2c5a171cb4361667584229fee13b1cfb5a901f00747f13c3b2af4fe72dd9",
-    "2021-06-16/rustfmt-nightly-aarch64-unknown-linux-gnu": "7e11932879ec3164e3042b1544259f93591cb36093f1f0e42324c480da8a58c9",
-    "2021-06-16/rustfmt-nightly-aarch64-unknown-linux-musl": "519e3efc3026780dc0ea3a3020b441a22ce7c497f0f9252aa6a748f2567f1e66",
-    "2021-06-16/rustfmt-nightly-x86_64-apple-darwin": "6e005433e4b5a46347b6ed28371fb97694087c4599447a04a7fe684fa22126a6",
-    "2021-06-16/rustfmt-nightly-x86_64-pc-windows-msvc": "a7606c5ddfca15e066bc844372e81912b256595b8bdbdd3ebea5622cf33bc6c0",
-    "2021-06-16/rustfmt-nightly-x86_64-unknown-freebsd": "239953675a43453195e7f6d7a106a3b65baf57230df0bb0ab19fb6839cf99d32",
-    "2021-06-16/rustfmt-nightly-x86_64-unknown-linux-gnu": "3edba45a2797a3361e575e7aca34284c5ed8154f8849e3da49b59e45317dc65d",
-    "2021-06-16/rustfmt-nightly-x86_64-unknown-linux-musl": "bdeca48139be92c824180e29b790cdb58a4d1e3c15b4c65e9ec93aaae46853aa",
-    "2021-09-08/cargo-nightly-aarch64-apple-darwin": "712aae52f55402ac17ca017dd337ca1aa13f063ecc666fc8c16448f42aa4519d",
-    "2021-09-08/cargo-nightly-aarch64-unknown-linux-gnu": "814ee506cce957c7371bff4961fcb97cc6ee7fc2da4189175be61a4990130824",
-    "2021-09-08/cargo-nightly-aarch64-unknown-linux-musl": "65edd1914dc1f7118f70a722cd7f555bd7e9afc8a1ebb447036ef8948d842742",
-    "2021-09-08/cargo-nightly-x86_64-apple-darwin": "2c539e3a02521842316202cabd37ac580e5d95ee48531435e49628d34217a8cb",
-    "2021-09-08/cargo-nightly-x86_64-pc-windows-msvc": "64c3ab2850c4039c58288cbc402243914eee40d35218665e6a02c8b45efe7704",
-    "2021-09-08/cargo-nightly-x86_64-unknown-freebsd": "c119dd05ee04dc1a0bb414f30036cce9dfb0456eb974bc991acc51122528dd7a",
-    "2021-09-08/cargo-nightly-x86_64-unknown-linux-gnu": "0382a83f1a93228e8fc2c68e396032f61bb431a73aecee75d461b2008c68a33f",
-    "2021-09-08/cargo-nightly-x86_64-unknown-linux-musl": "bfb2a9ea032c591f1c9c36cd2590427c684ebc95b573d919d477b6bd57d5bd37",
-    "2021-09-08/clippy-nightly-aarch64-apple-darwin": "7dade8377af304261199dadf7126afe0e5e50173a89e805567f9d833be59c37c",
-    "2021-09-08/clippy-nightly-aarch64-unknown-linux-gnu": "e36dce42b32982a550a0a575fe827e16e2ba6a53fc850a99f55d8319031625a5",
-    "2021-09-08/clippy-nightly-aarch64-unknown-linux-musl": "abce5645da1c5eeaa193d986f76531e5a3031210e3d94b66d32deba6f15943f6",
-    "2021-09-08/clippy-nightly-x86_64-apple-darwin": "5064e135a17afa8540b6073fda18f686c5bc6903e800ce2f508cf33f74b5b701",
-    "2021-09-08/clippy-nightly-x86_64-pc-windows-msvc": "b7a6dda0b9da65fd964c01ddf16a7b5a309673ad50095bd2c6efe4f62371a075",
-    "2021-09-08/clippy-nightly-x86_64-unknown-freebsd": "8846077e6bd3f96b87b0f341566d51108e4835f23c639e3d95fdb58d31d12033",
-    "2021-09-08/clippy-nightly-x86_64-unknown-linux-gnu": "577ba7ef53a84c296ef1244200af68523708e2ec0884f7e2f7978dae320cb661",
-    "2021-09-08/clippy-nightly-x86_64-unknown-linux-musl": "28365e89efffcd0cbbb7da8d922ebe5c07b2f991fef2c1d845f9f7cdbb014d45",
-    "2021-09-08/llvm-tools-nightly-aarch64-apple-darwin": "dbffc97784c96ba75d6da460d965bd705c7bee737f1d73a0bccf815cc046260a",
-    "2021-09-08/llvm-tools-nightly-aarch64-unknown-linux-gnu": "bc789aa0b012259baa8b5540aee96f1074d9ad6368a5031b556093da61fcd8d7",
-    "2021-09-08/llvm-tools-nightly-aarch64-unknown-linux-musl": "ed3019654dec2aa14233b9fe1a6c934d913acfd798725591ff02d97e10504be6",
-    "2021-09-08/llvm-tools-nightly-x86_64-apple-darwin": "b419d08a367fe4366202106161fa1ccc4dfead9639e582b36c71c3405dc58e8f",
-    "2021-09-08/llvm-tools-nightly-x86_64-pc-windows-msvc": "213cfa58059ba87e650acb240f6b1f9ed6948687fe12a236b16d0abe3e293fbe",
-    "2021-09-08/llvm-tools-nightly-x86_64-unknown-freebsd": "cef580a6e8efcea89bbf40de422e04c36546462ef9e90727da7e339bc9acb83c",
-    "2021-09-08/llvm-tools-nightly-x86_64-unknown-linux-gnu": "4a5ff52134c2dab1746c9d3d84bac92b5ea4fbbb4067c83ae20524eaf060e6db",
-    "2021-09-08/llvm-tools-nightly-x86_64-unknown-linux-musl": "f20f89d4f5c49e57c950770b9b83581534b9f64187f718b8392ff58559b72de0",
-    "2021-09-08/rust-nightly-aarch64-apple-darwin": "67f875cbaeb23dd0aabcedd0c80809cbe9d0799f6316a0b37353d16921f3319e",
-    "2021-09-08/rust-nightly-aarch64-unknown-linux-gnu": "e27d7a5cdb7076674d885ce034ae243fa77f7d1210c83d52c8f8e4c4be86d204",
-    "2021-09-08/rust-nightly-aarch64-unknown-linux-musl": "c4b9090ec6793d96443ba51b0e531d99e7dfe715e2a506e28aa8e070c4811050",
-    "2021-09-08/rust-nightly-x86_64-apple-darwin": "50e5552ae8c20b056b122d2bbc45030f10772498b3bf88b6c539c9bab9e4555c",
-    "2021-09-08/rust-nightly-x86_64-pc-windows-msvc": "2ba241a6982360ffabbc383f91a642dc42c59770253041d8634255543a84d5d3",
-    "2021-09-08/rust-nightly-x86_64-unknown-freebsd": "da6ceabe8dbbd1f92e0dc77a4a98ff1745bb21ea714d9f4eac090626d5a480d0",
-    "2021-09-08/rust-nightly-x86_64-unknown-linux-gnu": "ea4960a18a13815736fcfa33886fa9de8f07ee758339050ce676ef81e9cc0f0d",
-    "2021-09-08/rust-nightly-x86_64-unknown-linux-musl": "acdbb72ee7e579940df739755ac478e3a386431aa606a9ab08ad1c870a24794b",
-    "2021-09-08/rust-std-nightly-aarch64-apple-darwin": "8a08b1862d2e69d249d67fb5669983ae961bd07b9bfc80585ef84269380a317f",
-    "2021-09-08/rust-std-nightly-aarch64-unknown-linux-gnu": "0f2fafb6f4c4693380b3e8eaf4a08729b511cdb1f89c4976c2944b4f87e48b66",
-    "2021-09-08/rust-std-nightly-aarch64-unknown-linux-musl": "4b2c1b78637bb0ddb7f5e2ae16119f84e00f16e874955c34dd3684e67344ac99",
-    "2021-09-08/rust-std-nightly-wasm32-unknown-unknown": "ef19646fb38abfde637fbd619c4cc4b52826fce09074f427d3cdd7d5bbf89167",
-    "2021-09-08/rust-std-nightly-wasm32-wasi": "df7cf483b11358850a2f0f9d6816b8ebcf3813ff4c0cc75cc99171200b2f866a",
-    "2021-09-08/rust-std-nightly-x86_64-apple-darwin": "4d13a115d70efc84daa181bf7927b4531c5e40cfc1df8a99c04c9ebb4010b829",
-    "2021-09-08/rust-std-nightly-x86_64-pc-windows-msvc": "0c93f9734b776bf7c2e150fedc2811db108e732a4f3328aedb038969b435c071",
-    "2021-09-08/rust-std-nightly-x86_64-unknown-freebsd": "64ff9746ede66362f44aa5de62541a85a196e639a2cfb5d60be038579ddcd367",
-    "2021-09-08/rust-std-nightly-x86_64-unknown-linux-gnu": "b6d1ff428b1c0591ea7375f6ae3421630d4b6da7e8cb6bad071284b5d563abe8",
-    "2021-09-08/rust-std-nightly-x86_64-unknown-linux-musl": "1cb7c1f28e4fa5096aaea77e56006a1cee69b77c5fcb1fae993a961942ea16d0",
-    "2021-09-08/rustc-nightly-aarch64-apple-darwin": "4de0dde4a4499074c9c4ca3a9617c89376ccbc21429ce2af94147570844f5436",
-    "2021-09-08/rustc-nightly-aarch64-unknown-linux-gnu": "a34ca09afb230c0852b1765f4477ff1135f66cb4c41fe88ca79901c3adf30aca",
-    "2021-09-08/rustc-nightly-aarch64-unknown-linux-musl": "9594f62bd1e209725302318f372ea2c28cbd83ec2b29c60e5db933f60674b447",
-    "2021-09-08/rustc-nightly-x86_64-apple-darwin": "1a7eccf24dd1baecbe07c2999c917e54e7f213496a2ed542fc8ba5afbb43d1f2",
-    "2021-09-08/rustc-nightly-x86_64-pc-windows-msvc": "15667c4fe1d810b3b1979c19d1def41dc5484f7444517c4277aec2154404face",
-    "2021-09-08/rustc-nightly-x86_64-unknown-freebsd": "13b46879f9eb1a5c467458ab1eb3a65d295d9834f3fec42f0ad4a273d9fde926",
-    "2021-09-08/rustc-nightly-x86_64-unknown-linux-gnu": "73891cf0b7eb252b6b8486ddaad91f7ce4b18950befe7853bc3d20d38e5ae069",
-    "2021-09-08/rustc-nightly-x86_64-unknown-linux-musl": "ba94c257e93dab13beaf0a78168de64295ee0178fe76a8be10e18c5fb5d7c5fb",
-    "2021-09-08/rustfmt-nightly-aarch64-apple-darwin": "691922fb32f3da37532bb9be974ad1717af521ec2b71bca4bbb5e57f3c4cc3fa",
-    "2021-09-08/rustfmt-nightly-aarch64-unknown-linux-gnu": "98b2eaf259a1bfdc70e40a52e891920dec7fc6132ad8d2420f91655c793ea340",
-    "2021-09-08/rustfmt-nightly-aarch64-unknown-linux-musl": "a4df0726fba466a5180471d3e63735c2b5ee9794e9f42026b1e8ae404dd43ab6",
-    "2021-09-08/rustfmt-nightly-x86_64-apple-darwin": "20de8ad3aa7507dd9657c4a4b959c38cc7f732a87bb757183033f78a96288e45",
-    "2021-09-08/rustfmt-nightly-x86_64-pc-windows-msvc": "0cc0f10763b73c5e4c8bdcd15a563d7e9d705b192ed6e8edc50dd6a71b874761",
-    "2021-09-08/rustfmt-nightly-x86_64-unknown-freebsd": "e1c28472a81312560ca36719f0b61b7212a07d63e85d745f97cd8e3b9ea8f191",
-    "2021-09-08/rustfmt-nightly-x86_64-unknown-linux-gnu": "a7d579672b94978e8427584f7e9d2b6534f320719252db46fc6ee85082d646ff",
-    "2021-09-08/rustfmt-nightly-x86_64-unknown-linux-musl": "fba0e7bc1401b830223b5207b63808e28403f48d1591c7d47c1681519c1883f7",
-    "2021-10-21/cargo-nightly-aarch64-apple-darwin": "6eba28dffca35b3b8809c0f56e93931ecf75b539d3ca0f048607047b2f3a9588",
-    "2021-10-21/cargo-nightly-aarch64-unknown-linux-gnu": "c91ab0b98bdb80b9136a06e8d6fff33641fad1c9a005559c976db57a5939bb90",
-    "2021-10-21/cargo-nightly-aarch64-unknown-linux-musl": "f0705d665f0721e64673ea8f282980e968fa1186793b7d6530415e0bd05e1711",
-    "2021-10-21/cargo-nightly-x86_64-apple-darwin": "84d04dd97de2e288d7f449006fd81a930ab1d9fddc20299c9aa8f9bcf1b5cbcd",
-    "2021-10-21/cargo-nightly-x86_64-pc-windows-msvc": "2bdd1823caaf95e2bbf8942c35daeb9aed2bf69534bfdb18f2aa8d1e32a0741e",
-    "2021-10-21/cargo-nightly-x86_64-unknown-freebsd": "e578efd5bb719ef96435e2e24969f968ddc00ec1515c86a7fbd01a650976e028",
-    "2021-10-21/cargo-nightly-x86_64-unknown-linux-gnu": "7fc7f3649de6d8aea2304f286d2d1e5ef279b38d88d8fcbb8b81b1a355201273",
-    "2021-10-21/cargo-nightly-x86_64-unknown-linux-musl": "b022b8341aae8c7d698d44a9f69439569385fb6a3c6e5783cf68853513023c10",
-    "2021-10-21/clippy-nightly-aarch64-apple-darwin": "ee11bef6780c3c326ba39c4fb2de53c7b82f3461ad50131811919067bdbc6d21",
-    "2021-10-21/clippy-nightly-aarch64-unknown-linux-gnu": "3e5b3866242c1c3405ab102c205d07bb633fe1884a0b1ef72e1deada91143fa4",
-    "2021-10-21/clippy-nightly-aarch64-unknown-linux-musl": "8666c8dfd127d69531f723210e23675fd372bf72c2c4ea3f853f00e6784c17bc",
-    "2021-10-21/clippy-nightly-x86_64-apple-darwin": "0bfd130526f021f8ee9c003895af276c9978f9da7a03e50d0efe59a73bcda1e2",
-    "2021-10-21/clippy-nightly-x86_64-pc-windows-msvc": "713491e5f7d1a6bb8bfe5433706515fd639b359d5a589ff3ed98a23c187a875f",
-    "2021-10-21/clippy-nightly-x86_64-unknown-freebsd": "6db6b98be1093fdf97a11cec2a87f30c27a10c6e7e96652f7b758f2d7428832b",
-    "2021-10-21/clippy-nightly-x86_64-unknown-linux-gnu": "8deb9bc3831bb90cd49b9ec8763c5a98349b5b47b6622634e64d8d58a2bb33c0",
-    "2021-10-21/clippy-nightly-x86_64-unknown-linux-musl": "effdaf877422d4700dc2ebba543c4186a5e281336c8f415c20482e75abc7f602",
-    "2021-10-21/llvm-tools-nightly-aarch64-apple-darwin": "d6a2bb9d9c097fd3ff15477a95edb77aa6efdae12c5964398e232339b15a955e",
-    "2021-10-21/llvm-tools-nightly-aarch64-unknown-linux-gnu": "8c9d5b9fe646fb39448addf7ee370cbba2c2a229189d38443b17f369dac2f405",
-    "2021-10-21/llvm-tools-nightly-aarch64-unknown-linux-musl": "1dfa08db634e1276d48aa26e5dbc50bf2fde3f2f8ae52dbe5f8ec8fc80bacb76",
-    "2021-10-21/llvm-tools-nightly-x86_64-apple-darwin": "b2331bc949012a35da7c3caccf87dc41f176ffec3c2101f5f2dcc9f83d733483",
-    "2021-10-21/llvm-tools-nightly-x86_64-pc-windows-msvc": "d6aa710e9cb1a8c5913acf2addd40a261f68063e9983441d4396f4443657e467",
-    "2021-10-21/llvm-tools-nightly-x86_64-unknown-freebsd": "85a642dbccf6f8637a5a1ec63e92d61040a9c59319ac1f9e713f5b891b26793b",
-    "2021-10-21/llvm-tools-nightly-x86_64-unknown-linux-gnu": "fa9532d8bd4cfd19626c700601cb73011b00cdd4325c5f5417004a3124d277e1",
-    "2021-10-21/llvm-tools-nightly-x86_64-unknown-linux-musl": "ae10630bd5117da9f5fa5eea27b5624ad864d4d47a291a1f77ca5508c9691762",
-    "2021-10-21/rust-nightly-aarch64-apple-darwin": "5716c620dc210d2575b95f43e7dfe5100f2a8c21651fde66217a506bab96d640",
-    "2021-10-21/rust-nightly-aarch64-unknown-linux-gnu": "b375f0cc8e83dea3c8a32c843492930460736c8bdb6ca3db93e7fa563f312b20",
-    "2021-10-21/rust-nightly-aarch64-unknown-linux-musl": "ddc46ab912d69fe56cd68a74123a08404ce5f0f74551d4433e8632b45114b0dd",
-    "2021-10-21/rust-nightly-x86_64-apple-darwin": "75b66db55f4b0df4592651fc573e4251fa45b3b48b2fdff5a86186f138ff081b",
-    "2021-10-21/rust-nightly-x86_64-pc-windows-msvc": "b15a584bfb4a55719a91b33239664a8eeb55e7f7580e53d947c78bf95b8a034e",
-    "2021-10-21/rust-nightly-x86_64-unknown-freebsd": "74676a2604ca5032307b0dc7865d1833ffde41440d649fd8e083b39e291dbb24",
-    "2021-10-21/rust-nightly-x86_64-unknown-linux-gnu": "778d604ebb1407b59f3d331d986b2d5ead609b2cfe5db6f0ba098375eaee021f",
-    "2021-10-21/rust-nightly-x86_64-unknown-linux-musl": "e7b285da594860356b12d61a5cd6da54e3bffef52b1b5a4f8ffeb1fa86736343",
-    "2021-10-21/rust-std-nightly-aarch64-apple-darwin": "28e2aac0c80e4e62874fe4a97fbeea9dc4482e74964eb1f4e8a83d7531be1a58",
-    "2021-10-21/rust-std-nightly-aarch64-unknown-linux-gnu": "c810f89068c71626ba3326b26cc24d017a76f060eadcd84ad0152b66031bd9f6",
-    "2021-10-21/rust-std-nightly-aarch64-unknown-linux-musl": "212d4f2928e14280bd2ed7a5f35e1a731521da58823f186a685db53711d5db8b",
-    "2021-10-21/rust-std-nightly-wasm32-unknown-unknown": "3db3ab740447206c71e303a9098a0eac2fa14117e4d6e437308239e0d469cb3b",
-    "2021-10-21/rust-std-nightly-wasm32-wasi": "be3ccf5a00e7698b152df33d31406a533ef3fae545d4912e6c3c85b40afd4e25",
-    "2021-10-21/rust-std-nightly-x86_64-apple-darwin": "73a686b2577994bf641a6422338a0cddf4250058df74ccc7540bc6026c53bb3b",
-    "2021-10-21/rust-std-nightly-x86_64-pc-windows-msvc": "1d7f65a9b63a1756d5915c8305930eac747dce5da8583af00f9cff8b803a33ad",
-    "2021-10-21/rust-std-nightly-x86_64-unknown-freebsd": "2903783f094fb121a9171d999aa0d73a255fb5617e4cdad5d8470183758bbb23",
-    "2021-10-21/rust-std-nightly-x86_64-unknown-linux-gnu": "ea390777b60ccd6861e7d163cdf0c19be0b19944039f1b52283120b598f56258",
-    "2021-10-21/rust-std-nightly-x86_64-unknown-linux-musl": "182d763bc6e727f98673ab6ed9d707841e2ea8dd4571bab4f289afb5006b396a",
-    "2021-10-21/rustc-nightly-aarch64-apple-darwin": "1b6a6bf8652751f5123cb7741466cec2164302f3306da92241b2b64103398236",
-    "2021-10-21/rustc-nightly-aarch64-unknown-linux-gnu": "60510d5d77b2d55e3b676bc0e478455452133f3f5dc3c173ba3d251c6b780ec3",
-    "2021-10-21/rustc-nightly-aarch64-unknown-linux-musl": "eef17c07cd783c2a3556785245280b3e0a56290ae4620ce324dffd88caff9785",
-    "2021-10-21/rustc-nightly-x86_64-apple-darwin": "9218bbf8d37c9c6a015abade1129a3b5d37453f144b2999b2f6b569044982ac7",
-    "2021-10-21/rustc-nightly-x86_64-pc-windows-msvc": "62e82a4283298165a0a7d656494d9f6da83cf44e098c337cfd7032acf96d0ebb",
-    "2021-10-21/rustc-nightly-x86_64-unknown-freebsd": "af6c9b69129a4a81fd79481f16f9feb1d4f726859b8d888cffc6fa8231a67c10",
-    "2021-10-21/rustc-nightly-x86_64-unknown-linux-gnu": "0bf65939240f9acbdb08cc4d22b9fb14357d29ee36f4bfc11d4ecc87f07b01db",
-    "2021-10-21/rustc-nightly-x86_64-unknown-linux-musl": "1a9bb9f7cbb5465de5976e75a730dc88a4081ded1f9fb54af1fa514a15b88732",
-    "2021-10-21/rustfmt-nightly-aarch64-apple-darwin": "51d764ca7e1c60fed329b1cbbd2a6a56e5b41f7b728a170745f8a4b4bad10b52",
-    "2021-10-21/rustfmt-nightly-aarch64-unknown-linux-gnu": "2ff4e25789d019047ff451faaf44a67cd155b4c0ec6834487da6cea950bdc2db",
-    "2021-10-21/rustfmt-nightly-aarch64-unknown-linux-musl": "ad433ebb84627c18d4c8b13623f52c46b23f628ef9a3b12e712381c504324960",
-    "2021-10-21/rustfmt-nightly-x86_64-apple-darwin": "589c1412db27f90407147ce3acad3afdb1769d77c1f31156ad6101c317f28490",
-    "2021-10-21/rustfmt-nightly-x86_64-pc-windows-msvc": "49b0163001fd7dd7395f89b408c9909c5b33c4f3147902ec2f77e567bb9d6b9a",
-    "2021-10-21/rustfmt-nightly-x86_64-unknown-freebsd": "d76aca59bb56c6f2e01ab5da9461e058814ba2fed6ebc3abb6bf55ee44a241cf",
-    "2021-10-21/rustfmt-nightly-x86_64-unknown-linux-gnu": "d53c942dc0628ec0214f0eff51ebdd8c70f2bff1293909c908e063c9153144eb",
-    "2021-10-21/rustfmt-nightly-x86_64-unknown-linux-musl": "21b3db961750e8a6ff83d2773e0feb86292fd92fbcda9f3362976b04b9069254",
-    "2021-11-07/cargo-nightly-aarch64-apple-darwin": "1947ba0d6b97e097bad279bbbf891d7a65d3b1611280dd88e82fcdb9f832cb3f",
-    "2021-11-07/cargo-nightly-aarch64-unknown-linux-gnu": "fe70a3e01abd01738c51479a7bc834392005cce661969088dac220f1b5fce31e",
-    "2021-11-07/cargo-nightly-aarch64-unknown-linux-musl": "987df6c4597a26c1a9bc0f195312cc96dcf2fe1f3651e91bea72a34f6dbe4d82",
-    "2021-11-07/cargo-nightly-x86_64-apple-darwin": "968790a3027da539c57caf194b8feafc9b01d3482566d58f2e012e8d00c28265",
-    "2021-11-07/cargo-nightly-x86_64-pc-windows-msvc": "e56ce94434929c1a4eb2bdfdcfb19e4194ff177c1d5934403deadd3db4304f91",
-    "2021-11-07/cargo-nightly-x86_64-unknown-freebsd": "51b2935810f845a9c85c51344488fe403ce13d49196135318373888726752339",
-    "2021-11-07/cargo-nightly-x86_64-unknown-linux-gnu": "66f027e3245c2fb444a272c9429c6b6334da8afe1ed87ac5ecc68f357cd37c82",
-    "2021-11-07/cargo-nightly-x86_64-unknown-linux-musl": "f6b4e44c2abc28281da5e03c0a957b8b54e22de34f6cab94894efbace7343c02",
-    "2021-11-07/clippy-nightly-aarch64-apple-darwin": "f16cae78cd8cadb8389817489283a572021a5f944e80c5c328ee32a83fb869c7",
-    "2021-11-07/clippy-nightly-aarch64-unknown-linux-gnu": "b0cf7f65fb5a903e62551e49b9341690b4f800552b34a4709ab8630a5cbdb71b",
-    "2021-11-07/clippy-nightly-aarch64-unknown-linux-musl": "b320ed68f8af98cd4c857ab7e3b2e3bed38f580ed6b72cc0f71e90e8dbbfb72d",
-    "2021-11-07/clippy-nightly-x86_64-apple-darwin": "40f91067724c983bf6061a5db4ba90bd620718f564648287ec52b348d76d012c",
-    "2021-11-07/clippy-nightly-x86_64-pc-windows-msvc": "1279ba3f78951e5f2180f3f07fcdbf4eb561ba5cddf84afdf53ebdd4b8ca2e24",
-    "2021-11-07/clippy-nightly-x86_64-unknown-freebsd": "3aeedabc9dcf54048f59a8ba9e695495ea3f570b88df98ef03c8d1247fddeaf8",
-    "2021-11-07/clippy-nightly-x86_64-unknown-linux-gnu": "567b3a83390c893077b540cd07f4798d8d287e30025f437ff4e21609b1a773c1",
-    "2021-11-07/clippy-nightly-x86_64-unknown-linux-musl": "a97bddc05146f2c55016af4cc53cd06786a01eb111dfe139bc421eff1c54c645",
-    "2021-11-07/llvm-tools-nightly-aarch64-apple-darwin": "f3c5c93432ac2c7397ba5bf598f36a9e05ccec1ba8646e7127dde13741e91e78",
-    "2021-11-07/llvm-tools-nightly-aarch64-unknown-linux-gnu": "efc96c6a6d7cb0cbe254f1486c5b9678078aca950bdadfc36d8218fd0cd739fb",
-    "2021-11-07/llvm-tools-nightly-aarch64-unknown-linux-musl": "f760aeb71cab8abc582eed5766433a7851be2da80d20b75dbcae5df0d3c3be91",
-    "2021-11-07/llvm-tools-nightly-x86_64-apple-darwin": "3b95d04628e75c2ab43298db610e519fe4c00057757bce67461264e2479d265e",
-    "2021-11-07/llvm-tools-nightly-x86_64-pc-windows-msvc": "26a88a8d0e0b2fd9336b85e8a8cc7aa0aef72efca48c0acabf40a5f9f9b9902e",
-    "2021-11-07/llvm-tools-nightly-x86_64-unknown-freebsd": "064b8fef9689bb51cc6358e3239920117aa518e9d375be48d3d7e17ce4b7d2df",
-    "2021-11-07/llvm-tools-nightly-x86_64-unknown-linux-gnu": "a72f3f2034921baa4e8d2af412532df45d39d163ee6af77c1ed5da3be32efccd",
-    "2021-11-07/llvm-tools-nightly-x86_64-unknown-linux-musl": "da704644570b177093eb13486b3f34a6aa7c8b93fa565395eb15ad29bc75fb15",
-    "2021-11-07/rust-nightly-aarch64-apple-darwin": "ec27e6e751bf24916e53e3d601bf4e406e624f4ed894aeddef6b418622b41316",
-    "2021-11-07/rust-nightly-aarch64-unknown-linux-gnu": "cdafea25f36d618d754ddba007ffa0cc0e52df60c160187f68f7d41a91efaa12",
-    "2021-11-07/rust-nightly-aarch64-unknown-linux-musl": "b204d0979da8fa81a5be832868df4ccf9031e9582d2a9720bd17be5af845c055",
-    "2021-11-07/rust-nightly-x86_64-apple-darwin": "fca7b8c128fc2c0b8834d06f6ebf78e4d2030be83a87a08f2f9f5247d2be8470",
-    "2021-11-07/rust-nightly-x86_64-pc-windows-msvc": "bf441a201b48d61a5908952367f830fea0642993d518972fd3acff62b6c1e321",
-    "2021-11-07/rust-nightly-x86_64-unknown-freebsd": "bd0791a44cd3c8f2274b42b9206016ac948cac97b642f0303c0f19e0fffe6089",
-    "2021-11-07/rust-nightly-x86_64-unknown-linux-gnu": "ece5f02e4c1cbaf6801fab787d834166aee7676f7c3b2272ff9810d6d541af27",
-    "2021-11-07/rust-nightly-x86_64-unknown-linux-musl": "926a2b44e0c2f093e62e696b6e53e3b5a9d7882e8c426cfdb364a3e2a2541ebf",
-    "2021-11-07/rust-std-nightly-aarch64-apple-darwin": "478dd2f878e791185e565f9a6a2ae0e7a35c472cce873e50bd6b9cf56b364a38",
-    "2021-11-07/rust-std-nightly-aarch64-unknown-linux-gnu": "31e933401b920a16b797f8ebd3f7cdac43647db5b266f8e812a847f34f167b66",
-    "2021-11-07/rust-std-nightly-aarch64-unknown-linux-musl": "b27f126391825d7db36ccfb688ac3c1d3ded91b9b26446dd1da7ece05347f96d",
-    "2021-11-07/rust-std-nightly-wasm32-unknown-unknown": "da22f32ed22a44d1cf478b52e062494ae063cc3ccd06b12964d6000cbae54186",
-    "2021-11-07/rust-std-nightly-wasm32-wasi": "02fa9f517dea1f31eaa6366c3de5bea2a6c3c09f16758e7a70518727d77191d2",
-    "2021-11-07/rust-std-nightly-x86_64-apple-darwin": "983aa9ada64afb54453b39e572f5d622b2f390dcbeef1002aac1a5d11a50b3a8",
-    "2021-11-07/rust-std-nightly-x86_64-pc-windows-msvc": "408884156e55fe210880e7ee7612a5bbbb2300e4dc4d1ee0cd3726a1225343ca",
-    "2021-11-07/rust-std-nightly-x86_64-unknown-freebsd": "c42b5c495e216764f56e538f0cd54fb6cdf193cd3348a7f37b157f27f440ea43",
-    "2021-11-07/rust-std-nightly-x86_64-unknown-linux-gnu": "218743da51034586ed84ad43f95d95a38805403f0e31faaf247eedba883fa8b5",
-    "2021-11-07/rust-std-nightly-x86_64-unknown-linux-musl": "f5733b29a9c1102355cde885cebf5da42b738632e7dc5919e246c34551126c50",
-    "2021-11-07/rustc-nightly-aarch64-apple-darwin": "ccfd72ed6a189c490d22ea91e53ba7d217db123b6c4015de94ac88973a4f031c",
-    "2021-11-07/rustc-nightly-aarch64-unknown-linux-gnu": "3f5a445397f8a7dece4195b7c181398b6d7c06480bc59ce92058c97f68172353",
-    "2021-11-07/rustc-nightly-aarch64-unknown-linux-musl": "5588596a3ef4bd938802349faf64159fb661f04717fef2d08acfc50d35de4673",
-    "2021-11-07/rustc-nightly-x86_64-apple-darwin": "c3df9cac3419633ae1e9b6a41183a413a3a722a72124394d441d5c914aa9f91d",
-    "2021-11-07/rustc-nightly-x86_64-pc-windows-msvc": "e218ed52bcd57b25a0eeb8a9be4fe954ea226f785940409cc6fc378ad8f25876",
-    "2021-11-07/rustc-nightly-x86_64-unknown-freebsd": "c5f2cc78f5f59179e0fb3770e58eacc44eddcb0c3b2c143b8681776b4caead88",
-    "2021-11-07/rustc-nightly-x86_64-unknown-linux-gnu": "e7e6dbc8291d283a890c994ec9507dfce25aa93a47b2cc213f845b3bedcd2002",
-    "2021-11-07/rustc-nightly-x86_64-unknown-linux-musl": "95fcbd60d484725002c1d20134160201417cc6715ba4e320fa30f95afd95b4e0",
-    "2021-11-07/rustfmt-nightly-aarch64-apple-darwin": "3493f540161825feb81d022bfb6f84f2040f5ad014640e9bfd1a4b93902113c4",
-    "2021-11-07/rustfmt-nightly-aarch64-unknown-linux-gnu": "58291d3b3045b3c2f156d7547db3d5c117840663a6d10425580fe2936c1f7f9e",
-    "2021-11-07/rustfmt-nightly-aarch64-unknown-linux-musl": "85178f75658b69291bedfae0d7c27505f7b0aa0fe53de3922d2f3f671d601e13",
-    "2021-11-07/rustfmt-nightly-x86_64-apple-darwin": "71bcbd9b0e8417e8cbcece46701a3e023eaa596377bfa66507fad0ad383cfd46",
-    "2021-11-07/rustfmt-nightly-x86_64-pc-windows-msvc": "c082bc7eb8d04e4d7025e23b443b14aecc5d504e3de21c1c110c3e04d05d71f0",
-    "2021-11-07/rustfmt-nightly-x86_64-unknown-freebsd": "21815c052a39c5c5d361bbb473a2c36125eb657598359f6b343e352c278c0543",
-    "2021-11-07/rustfmt-nightly-x86_64-unknown-linux-gnu": "102e7e2300fd6dba8aaee468b887ea7fdc43f39f012db2815040586959f6aa36",
-    "2021-11-07/rustfmt-nightly-x86_64-unknown-linux-musl": "8ac20334b400e0a6e4b487e3536f7236f9238a45d63f490baeda7c47fac72504",
-    "2021-12-01/cargo-nightly-aarch64-apple-darwin": "424a002ad3d9b2974aebf3eea8400081e3aa66b1b4aea0e8b12534b0d6857bde",
-    "2021-12-01/cargo-nightly-aarch64-unknown-linux-gnu": "56ef3a6f98e063b7297f5a92ac9aa20fd8d1a235a4879a10c3b8a0ebe2e57245",
-    "2021-12-01/cargo-nightly-aarch64-unknown-linux-musl": "71d08d9ac3da4c628e91b0e9e0b34ad55d2f4904953003ea96d2b016837c5f1f",
-    "2021-12-01/cargo-nightly-x86_64-apple-darwin": "4d12c1d9034cf759c15d30d768a3010504621f5ccfc22026bf6591afc16bc780",
-    "2021-12-01/cargo-nightly-x86_64-pc-windows-msvc": "06b258fd6c10aa97bcfdfaa9e6d728b7024f1ca9bb4b69978ee433710e1235b6",
-    "2021-12-01/cargo-nightly-x86_64-unknown-freebsd": "924f3f0b15d8109261c4a28050e64eaed0d5f2dba9865920d7a3f94f613d2517",
-    "2021-12-01/cargo-nightly-x86_64-unknown-linux-gnu": "0757e9d7faa9b601b35294a44b6224087f6df384e157f8a80a8bd7f609532987",
-    "2021-12-01/cargo-nightly-x86_64-unknown-linux-musl": "bf5bcfbe47ccc49d830623a57b723a3c7436637c36d84b53f597d85ee1132cba",
-    "2021-12-01/clippy-nightly-aarch64-apple-darwin": "bcfd9191c6cc2b779ddb5c5bc5ceaf3fb8efa700123c175a0944662809357efa",
-    "2021-12-01/clippy-nightly-aarch64-unknown-linux-gnu": "4903c94d97700b9ad70689fbaaaa939a2f37d4736cf87bcf900ae5e909a6917a",
-    "2021-12-01/clippy-nightly-aarch64-unknown-linux-musl": "7453115f2b361db826c5a6def06bf9531876cdca77f9b3a8339c0446d0e88c8a",
-    "2021-12-01/clippy-nightly-x86_64-apple-darwin": "b9f69c5e50fda9d22d029f51e181971f9d7acdd81607fcbbec8da87ee2678acc",
-    "2021-12-01/clippy-nightly-x86_64-pc-windows-msvc": "fe56e5385392eb7109d2450eeea78a744a830f0df4bc08cef62ed70530c6f7ff",
-    "2021-12-01/clippy-nightly-x86_64-unknown-freebsd": "2fa59d32937de93d322a0c3458c6f732950bae75f7487ce10516b2a2299dba3a",
-    "2021-12-01/clippy-nightly-x86_64-unknown-linux-gnu": "238167df07be8b65f325d7409d3822c42832db3afa289fd303619acfa62ebd4d",
-    "2021-12-01/clippy-nightly-x86_64-unknown-linux-musl": "12cc9629b9fcb7760d38b38ddb19f6ab173994fa19bae9ea0ef10e560b36e9d6",
-    "2021-12-01/llvm-tools-nightly-aarch64-apple-darwin": "3889ad569be62d99cd0f1de0ccf404a7176c862ef6e001130438d86067aeb266",
-    "2021-12-01/llvm-tools-nightly-aarch64-unknown-linux-gnu": "d0e4f1e40c769376728fe5bbe1f3e254959c33513a18dea1e111cd2e2d2fe8c0",
-    "2021-12-01/llvm-tools-nightly-aarch64-unknown-linux-musl": "2960b9000f0c32deb12096e99ae26af4f85d2313c0227a95fae89637a10850b7",
-    "2021-12-01/llvm-tools-nightly-x86_64-apple-darwin": "1ac4f401421e7bc34a5c17aa5f8a0802f5e1bdb9341d4969ff058ae387e95eb4",
-    "2021-12-01/llvm-tools-nightly-x86_64-pc-windows-msvc": "f7bc73ef6cc909ad1a20a9c91386ebb67d0dd3b300698ed50a3fe314921f636c",
-    "2021-12-01/llvm-tools-nightly-x86_64-unknown-freebsd": "9755dd8b446a7fe327b28e699b43c64a8088e87b7f501869d8bc77c7bd17e80a",
-    "2021-12-01/llvm-tools-nightly-x86_64-unknown-linux-gnu": "845265609040d3a620e731a8d1f0f59f231ab6699ffd6132411437aa9b3c3060",
-    "2021-12-01/llvm-tools-nightly-x86_64-unknown-linux-musl": "68660d1226628edcbe80baeacc075d8d4f9c6ea87bb22fc55b6727e6807e5d6d",
-    "2021-12-01/rust-nightly-aarch64-apple-darwin": "c304a7a154b8bf44ff7a338996f1dd249678871bf1d24977e8763912197f89aa",
-    "2021-12-01/rust-nightly-aarch64-unknown-linux-gnu": "b0b3dbde13f8cea3086896efe8402b87cf281260ceb4bf8d3f1bfd1216a309d9",
-    "2021-12-01/rust-nightly-aarch64-unknown-linux-musl": "3e210d5da0384b90e90933683ac19ab1d2439c6b920db8c24e15faba484c86e9",
-    "2021-12-01/rust-nightly-x86_64-apple-darwin": "720d6058352322f1d59683236f0d5092d90ed64ed3f41cee80aa55d3d5a8c7ca",
-    "2021-12-01/rust-nightly-x86_64-pc-windows-msvc": "e4e42a29016982376a9e178cc83874480bd300e5fc6262ed3a1034ec0b80349f",
-    "2021-12-01/rust-nightly-x86_64-unknown-freebsd": "a85e08ec1a52a6bd496400de638bb2e57c7f1192c740e03a776a11e1e892620e",
-    "2021-12-01/rust-nightly-x86_64-unknown-linux-gnu": "ffcb8b45a95221f8d77bb93faf3fd0e2a7f18e6759e631a45295883f996a4d40",
-    "2021-12-01/rust-nightly-x86_64-unknown-linux-musl": "4d98286d2ca36cd348de7a78c8a127b6fec181e1b00fd045be0ad4fa2b466e83",
-    "2021-12-01/rust-std-nightly-aarch64-apple-darwin": "907bd677f494c0858803bcb3c00c1da60b9ec0ff25c71960a896dbf89a7a61a5",
-    "2021-12-01/rust-std-nightly-aarch64-unknown-linux-gnu": "3ae916ceef3364a49c3eb3e936af95aec043cad8cb293fa3f7703846728cd398",
-    "2021-12-01/rust-std-nightly-aarch64-unknown-linux-musl": "71421760124795171964945203719f7dec1924beacdb73b9658d01c8cab37b5c",
-    "2021-12-01/rust-std-nightly-wasm32-unknown-unknown": "e24999e365a8701b8466d2081ec61589b1c4a9333256779b60594688999d2334",
-    "2021-12-01/rust-std-nightly-wasm32-wasi": "5b31eb7ef9c580ebb751f4c41851ef3184261e2fc6c3481567cbb36a816681f1",
-    "2021-12-01/rust-std-nightly-x86_64-apple-darwin": "fc84ac87b089a198731e82a203d38a3a07b72e3f7399b0b47c1d0ec2be576e0d",
-    "2021-12-01/rust-std-nightly-x86_64-pc-windows-msvc": "9b6e945d5a42162b5f3ec792015084e4f349a338605478630b874e9388662300",
-    "2021-12-01/rust-std-nightly-x86_64-unknown-freebsd": "7a03e9faefc1f36d6b6c240371c7db539593cfbed47ca6dc141e3a0c2fc71bd5",
-    "2021-12-01/rust-std-nightly-x86_64-unknown-linux-gnu": "003b3e83e798d635206ca06c919696f2eea7277d9721c8623272fa33059ec2ab",
-    "2021-12-01/rust-std-nightly-x86_64-unknown-linux-musl": "f6c14b5df1fa6341a1b5f4dfd53c2795e2f7c43fc522aac57d055143ebe5e06c",
-    "2021-12-01/rustc-nightly-aarch64-apple-darwin": "ec3af041e4a8aa4bba5d8565502f983f358d9884cce61911e70bb2b12a63f9a5",
-    "2021-12-01/rustc-nightly-aarch64-unknown-linux-gnu": "0f863eb5a00810f140bd6a10ea74e9a2011e852958ac8f8ca50940325864afb4",
-    "2021-12-01/rustc-nightly-aarch64-unknown-linux-musl": "e0432ff13bdc00a36fa1fa20b736a385d6803795855214438d256f0678edbc94",
-    "2021-12-01/rustc-nightly-x86_64-apple-darwin": "6c1557e71cf3aeeb244855c32a7ec9b0297dc66ba57cf17af4e16fd1388f08a7",
-    "2021-12-01/rustc-nightly-x86_64-pc-windows-msvc": "41aebe787fb1a5699f0dd224e9e47270133fa4c971faa97cba2ac609c24828f6",
-    "2021-12-01/rustc-nightly-x86_64-unknown-freebsd": "33a34b95e7b541b51e5ca6f0c0096757c9afef0a0f71e0f7320352882937d240",
-    "2021-12-01/rustc-nightly-x86_64-unknown-linux-gnu": "3b83f5195aa3a73fc9b17acdffd67ff6198f26c075d8b1e6c82a8bd717c3a031",
-    "2021-12-01/rustc-nightly-x86_64-unknown-linux-musl": "a82281cca27567897b58b85a3dad0888b6ce13d7987fbff3397501469bca579e",
-    "2021-12-01/rustfmt-nightly-aarch64-apple-darwin": "42a7f5965d0af7df73c7629e701708ddd59f9a2a3fb4b8656c78d5b0dde0c0ef",
-    "2021-12-01/rustfmt-nightly-aarch64-unknown-linux-gnu": "e8cfd49797ac43557ee2eae7543d95c1f9ef5b2d651ae026152b0ee38748bc9e",
-    "2021-12-01/rustfmt-nightly-aarch64-unknown-linux-musl": "c4b392988b1e6330a9275248118a348ff029d83d37ad948c568de280c8fb016c",
-    "2021-12-01/rustfmt-nightly-x86_64-apple-darwin": "6993786d7fc1223be21f0b11cfedc7cdbc0cc951f52445e982445e38dc4a5f0d",
-    "2021-12-01/rustfmt-nightly-x86_64-pc-windows-msvc": "d96a8c2622b511179a6c1b4a00e9aeb015d9ce33de40788358a6ef7e4b50215e",
-    "2021-12-01/rustfmt-nightly-x86_64-unknown-freebsd": "5ac0969e1c2e3009f739ea5cb12b87808045f43a0635ee8ddec0b2b04be00814",
-    "2021-12-01/rustfmt-nightly-x86_64-unknown-linux-gnu": "51f23dd0f8e14cab67f8bbd3a4aa142988ca0ab1155ddd2f37a22576dda6089b",
-    "2021-12-01/rustfmt-nightly-x86_64-unknown-linux-musl": "a58f271f8859c79b33f8b30a33cf91879a85f740c3f8ec99c75f21933b220b8c",
-    "2022-01-12/cargo-nightly-aarch64-apple-darwin": "28b2465970234b721799d0d7893ba3bd82db60dbfe9fce3ee280ba31e0cc05d3",
-    "2022-01-12/cargo-nightly-aarch64-unknown-linux-gnu": "a48f67a2e9b3158579abe99218029f7add37927dd96b7ee297b19d898264c82c",
-    "2022-01-12/cargo-nightly-aarch64-unknown-linux-musl": "20ecedf9cd58870c315bb215529b70d5d7efcc3091cbcd933097dbe3de643395",
-    "2022-01-12/cargo-nightly-x86_64-apple-darwin": "2960a0f4ea742d6c1af1293f21d6b88e5d1d87fa5cf12950a44caf6f3efc31cc",
-    "2022-01-12/cargo-nightly-x86_64-pc-windows-msvc": "58b3c44263e2cfdddc6c71604c0a20f730363ac29e7d2f86570a7910f753ce6a",
-    "2022-01-12/cargo-nightly-x86_64-unknown-freebsd": "fc83fb1358e6fe796879077ac8b79168694a6ddd2d8a0b90ef8bcdb6fdaa6aa0",
-    "2022-01-12/cargo-nightly-x86_64-unknown-linux-gnu": "2dc110d1caca2829ccaaf51cf4e553a1f5954364b7087c881efce52d18580817",
-    "2022-01-12/cargo-nightly-x86_64-unknown-linux-musl": "36b1c88f08eb35048937ee29a681405852198cbfb17fb29117f27ed185d2aaa1",
-    "2022-01-12/clippy-nightly-aarch64-apple-darwin": "22518551453026be28657094dc4d364369357bdc59c1ac8c785bc67d59f24acc",
-    "2022-01-12/clippy-nightly-aarch64-unknown-linux-gnu": "f89ca2df2eacdc7466feb2d502f81d3640bf1295d590011385366e331bc862a1",
-    "2022-01-12/clippy-nightly-aarch64-unknown-linux-musl": "e310f7b854e365c63e9a9449802b428cd9f21af336fa763c311cf8a541977f8a",
-    "2022-01-12/clippy-nightly-x86_64-apple-darwin": "2daeed49f7e7e85b2187177fd1d18e14400a0d38a5a717620d4af92deb17b4d2",
-    "2022-01-12/clippy-nightly-x86_64-pc-windows-msvc": "86e92e3f785272c354c548cf5220dd355798b786e0e8630cadf7fff3b4aac3e3",
-    "2022-01-12/clippy-nightly-x86_64-unknown-freebsd": "7bc87fd4a2ea153342a6144849a7786398713255c0ffc94f17a62a1a5ea36387",
-    "2022-01-12/clippy-nightly-x86_64-unknown-linux-gnu": "1d244ea2f27d4fc7447d4126b965620e6f6cca916db15a8f1f5df0f8bcb6e4f3",
-    "2022-01-12/clippy-nightly-x86_64-unknown-linux-musl": "b6e157718df8219bfe0c2cc67182d451b644aa7f8e0a3060f7676c4a53af0df9",
-    "2022-01-12/llvm-tools-nightly-aarch64-apple-darwin": "4dea9eb7156cce2856f06ce58b76039edf5452dc2dcfe1dbf2ca3e4a2a4513ef",
-    "2022-01-12/llvm-tools-nightly-aarch64-unknown-linux-gnu": "c8a61bf792a6fe1a2e10ccdb1684059626cbf077b6d82883549e0a824ec00fb4",
-    "2022-01-12/llvm-tools-nightly-aarch64-unknown-linux-musl": "e49c63a89360598a1ccaa4b4d452d6fe4f4974b70c1774125b7d0864984af4d2",
-    "2022-01-12/llvm-tools-nightly-x86_64-apple-darwin": "efee2f08143fbff836e6517ea7457468da07380dcdf8a3a19cb9eb7b3b36da7a",
-    "2022-01-12/llvm-tools-nightly-x86_64-pc-windows-msvc": "d9748a16a855057201581ee1a3f6105ddd00511bd3129ca1175139f686b0a1da",
-    "2022-01-12/llvm-tools-nightly-x86_64-unknown-freebsd": "73dd634e5b9361c52fa1ad9b3ee1126b5ee5f988165eee6e47f7c80bb1d02f79",
-    "2022-01-12/llvm-tools-nightly-x86_64-unknown-linux-gnu": "dbea5a53828f590af592386d880ada84c55a072d5c2cf2148a0aec16c86afa45",
-    "2022-01-12/llvm-tools-nightly-x86_64-unknown-linux-musl": "f4fbe5809cfc6271297de76f78bdbe0591fad5daa747a78fe43019d088048f61",
-    "2022-01-12/rust-nightly-aarch64-apple-darwin": "2976b38351b6133dd20f940210a9d7a36da7a63b4991f3dd7a977629a4e30a19",
-    "2022-01-12/rust-nightly-aarch64-unknown-linux-gnu": "67f91c94ed84cdeeb5c3d09eea11a01056befe6f8f199974c779e4a7c5580f52",
-    "2022-01-12/rust-nightly-aarch64-unknown-linux-musl": "d976d6d7d102c6dad026680cabc4ed44e21405f6afa28879ec24a78ccf9232da",
-    "2022-01-12/rust-nightly-x86_64-apple-darwin": "49bed5d3078cfdd9c95184909f80da529edf83c4b256ef2191dada8a22ba2d03",
-    "2022-01-12/rust-nightly-x86_64-pc-windows-msvc": "b0ee56ad0245dee798bd4f268fde3bcee58b081c0ed16e212773f273e04e7b40",
-    "2022-01-12/rust-nightly-x86_64-unknown-freebsd": "7ba2e7f96735a9021de7f6817be33c8f9c269ef8666cc8267682b3dd3044e5f1",
-    "2022-01-12/rust-nightly-x86_64-unknown-linux-gnu": "414208e1f535d760faa1b8074e20b32f1b045f42efda741677bb718a80980b60",
-    "2022-01-12/rust-nightly-x86_64-unknown-linux-musl": "d9b2a94d67e6484a17b6f128cdc2ecc081068a7730b93cc480b9886dfbdaf523",
-    "2022-01-12/rust-std-nightly-aarch64-apple-darwin": "eead24d761bfa6ef0c926d59ed2cfeb51dc68fa4c13d59672289a6cc5795d990",
-    "2022-01-12/rust-std-nightly-aarch64-unknown-linux-gnu": "80ef127c8e0f8b2a9d4d6dd6c59e3b27c07ba7234e3fa2d8155227bdcaf18349",
-    "2022-01-12/rust-std-nightly-aarch64-unknown-linux-musl": "9716a07e0255737c1a5882cc8d053906bf82fc2cad0e86184d7dc12780811136",
-    "2022-01-12/rust-std-nightly-wasm32-unknown-unknown": "52f08158233d16c2b6b26b009f438ffbf2d60c4acbee4c8dba0718d363112637",
-    "2022-01-12/rust-std-nightly-wasm32-wasi": "318294f44e7dfe947445d03fe048465fce57a8acd4d39c45b04d64f8c5681950",
-    "2022-01-12/rust-std-nightly-x86_64-apple-darwin": "32a2f359a66e9257afb3166c3f3d03b46cccf15d081ff1962b6b6dc7589d16fa",
-    "2022-01-12/rust-std-nightly-x86_64-pc-windows-msvc": "fed0b46a7278a327827169f0dfc829ec3d11ca64c86b59b73e9a5164c6d4f865",
-    "2022-01-12/rust-std-nightly-x86_64-unknown-freebsd": "ad8c17b3a32d325a546bf22a6a5744e6dd448cdbb103c8687c9a7de622317474",
-    "2022-01-12/rust-std-nightly-x86_64-unknown-linux-gnu": "a0574b2ae49a860d69f66d8060ef42e764be73ccffe3ecbc1dbd5bbdbe9c06d4",
-    "2022-01-12/rust-std-nightly-x86_64-unknown-linux-musl": "ca442e0a9ca4c94ced9de08ece921be187ecc1b540518be76a7029fd7142eeb6",
-    "2022-01-12/rustc-nightly-aarch64-apple-darwin": "dc5fa145966daf5ec010e0b83f3b115866683ac418667e39663ea13a8e490d7c",
-    "2022-01-12/rustc-nightly-aarch64-unknown-linux-gnu": "d6183b88df1f868862bd3cf138f25179ba2fdab7f16e2d14577ddd56731ea18f",
-    "2022-01-12/rustc-nightly-aarch64-unknown-linux-musl": "1915a5b04ed3cde9f2566ca7f5205e37b706fc5cacc9ac64b7e6d818d882f39e",
-    "2022-01-12/rustc-nightly-x86_64-apple-darwin": "c51b1b7830d302fd352d4e105282da0c2aa01d98a7d8c0b0018db24539f2fb0c",
-    "2022-01-12/rustc-nightly-x86_64-pc-windows-msvc": "69edaeee958c53a2ae99813994f60b27198538e288217bc30862668975e01144",
-    "2022-01-12/rustc-nightly-x86_64-unknown-freebsd": "cca63c6998d9762616c74518dd870fe67432fe0442003211ba58f0f1e3953e46",
-    "2022-01-12/rustc-nightly-x86_64-unknown-linux-gnu": "4cc6346b16182c580c1fdee2ed35061d57140422d6e13f04b0f21db4ad9a9105",
-    "2022-01-12/rustc-nightly-x86_64-unknown-linux-musl": "1716aae4bf44c58ffa91121661e78fe112cfa5655dd2e98675e2dced7a4818cc",
-    "2022-01-12/rustfmt-nightly-aarch64-apple-darwin": "458b707f541a604cf4463a99e7c9f6dabb5222c815b7278735a8147ed6a6d8cd",
-    "2022-01-12/rustfmt-nightly-aarch64-unknown-linux-gnu": "edb9f32b1d8228362a17ffc83d47479bd247000d50f9cb4c0fbf4570557139c2",
-    "2022-01-12/rustfmt-nightly-aarch64-unknown-linux-musl": "34299938e1f5d06f048b992f5bc57f17b5d07d7417dceafdd67d64f893c609ab",
-    "2022-01-12/rustfmt-nightly-x86_64-apple-darwin": "eb6716d438d6923cb8b6cc1220fbfc30cca77548c19d1ec4656c4041dc680b73",
-    "2022-01-12/rustfmt-nightly-x86_64-pc-windows-msvc": "a29f9343d63ba3982eb3c783777430a864eee8bee0191c3899f7abcddfb0de0a",
-    "2022-01-12/rustfmt-nightly-x86_64-unknown-freebsd": "b53e01c1d038ce6ee92bbedd0d4c5ae9942521a36d937ec9cf43caaa73278eb8",
-    "2022-01-12/rustfmt-nightly-x86_64-unknown-linux-gnu": "edf5018504be0d79d77615a0c7e029a378446e2fd1a5360d86d97196519b510b",
-    "2022-01-12/rustfmt-nightly-x86_64-unknown-linux-musl": "237bef02a341db60e3af388feb7d7351d13da9728cc8fa10bda5631f812b2a58",
-    "2022-01-19/cargo-nightly-aarch64-apple-darwin": "e0bbae6fe4ea276773d426fb171fdca151c8877406476ef9200fbdc296d2f2ab",
-    "2022-01-19/cargo-nightly-aarch64-unknown-linux-gnu": "1fc5a3fe7ae76b2a332c95357f1b01c75341d022d66b918e8b2d9500fdbac74d",
-    "2022-01-19/cargo-nightly-aarch64-unknown-linux-musl": "06f0c843e0694a9fbd6f52d4257cea7a9ce7b0cfc519134cac03f85ac103839b",
-    "2022-01-19/cargo-nightly-x86_64-apple-darwin": "55e64aad2d07a7d1aecf3fe417039f20ef5b794e7597be0d5d0ab3098b439b39",
-    "2022-01-19/cargo-nightly-x86_64-pc-windows-msvc": "c8f22a3ce1edb3632148b0117198947f80f1173b5e034468d039db9734d727ca",
-    "2022-01-19/cargo-nightly-x86_64-unknown-freebsd": "f088c70c08c55564c11a10698881a7317d44e934fc4054e65f45c4e721c8c663",
-    "2022-01-19/cargo-nightly-x86_64-unknown-linux-gnu": "9dba5c80dc04089d3fffbd2bb066721a2ea3a4ef5772620d64083dec6fd7ba9e",
-    "2022-01-19/cargo-nightly-x86_64-unknown-linux-musl": "0019a2625020210edf0df9f77a805ee404d59c00bea1013020dfd9d1f63a428b",
-    "2022-01-19/clippy-nightly-aarch64-apple-darwin": "3e552735b0f7edad6333514da898a374f089045918916fc86ebd6d1b2f146813",
-    "2022-01-19/clippy-nightly-aarch64-unknown-linux-gnu": "261eaaf4cbe038fe99f437f41a6479f1c85178b68b86ba322363c3a988a41df5",
-    "2022-01-19/clippy-nightly-aarch64-unknown-linux-musl": "98ab9cbc764859416b199498cdaa29f3e0530b9fee37a00194575102d1d18614",
-    "2022-01-19/clippy-nightly-x86_64-apple-darwin": "57bbd4e12dfe619bb38ca51e0457c7a0458ead39a5f8b8009e82c3ff782ef534",
-    "2022-01-19/clippy-nightly-x86_64-pc-windows-msvc": "f9415462ee2982c546bf4cdebf513292dfe380366604b0da3533ffcb7b062f58",
-    "2022-01-19/clippy-nightly-x86_64-unknown-freebsd": "6732077fb8ae4cbf038c7d56ad2d73e08dc7fe214618c1b8048d5886a0e38782",
-    "2022-01-19/clippy-nightly-x86_64-unknown-linux-gnu": "8a84d8d4120ab3a9a1843fb4b343531ce2f66e472f2bd9b4adb6e825c336130b",
-    "2022-01-19/clippy-nightly-x86_64-unknown-linux-musl": "1472e5cd4b2950bd22a2e6feaafd01f7a2a8b726f12d6152b262474fa2cb57c3",
-    "2022-01-19/llvm-tools-nightly-aarch64-apple-darwin": "669057387a1515c3c4529786f60b9a25ac5c4eda911422fb023b73fa8a380a36",
-    "2022-01-19/llvm-tools-nightly-aarch64-unknown-linux-gnu": "7afb1e98626316cc1de6b62edb319b5f006da5c24601bb657c5cf567555b5730",
-    "2022-01-19/llvm-tools-nightly-aarch64-unknown-linux-musl": "e9bf498717ca2e8c7620957a5f7846b53dc09a7c720e8ec31e67c8da25fa59b0",
-    "2022-01-19/llvm-tools-nightly-x86_64-apple-darwin": "de72f572574a1238dbec6ee6b5c48e31b6770826cbcb6ecc61c568587c82ab66",
-    "2022-01-19/llvm-tools-nightly-x86_64-pc-windows-msvc": "97f9c947d726b72ab318705b539e11012a73a08dcb79e00c73d680d9a5166882",
-    "2022-01-19/llvm-tools-nightly-x86_64-unknown-freebsd": "2e42c56a825fa9bd640fbb3bafecb02cfe68877e09d1c0ddfdff794e4571a2a7",
-    "2022-01-19/llvm-tools-nightly-x86_64-unknown-linux-gnu": "bfd89e74330fc0f9d61b75852c96d644fe5ffd90636e8668f10480e27cb8593c",
-    "2022-01-19/llvm-tools-nightly-x86_64-unknown-linux-musl": "5dbbbbee7bc11793c320608b5c88398206b8803593e8906ac03b5651bb7b7a6c",
-    "2022-01-19/rust-nightly-aarch64-apple-darwin": "9a0a4323eba39da2c0ae9dd99eae994c90019b11e1020378781fb41521799b92",
-    "2022-01-19/rust-nightly-aarch64-unknown-linux-gnu": "c71d05f5ec4d1d118bab9b3155086328093b5b620b39de3e541294dbb64d4ace",
-    "2022-01-19/rust-nightly-aarch64-unknown-linux-musl": "9aca1ed8d3283403931991b4c46d5f57a0839bac3ac5283692ef67938d291470",
-    "2022-01-19/rust-nightly-x86_64-apple-darwin": "1102c26afe2de2c73079c30b038ac203e1b2d647383338f91782196b05a11116",
-    "2022-01-19/rust-nightly-x86_64-pc-windows-msvc": "bb63d762cac5570f98c4109c7d4cd86d5912b46d0779f44a27fd515e1b723961",
-    "2022-01-19/rust-nightly-x86_64-unknown-freebsd": "726dedec423c51031d5d481aa90f04cc68ed52f45cc33320a6932e02adaa8256",
-    "2022-01-19/rust-nightly-x86_64-unknown-linux-gnu": "db2ec42968696da58de511cb088ea0f879cc64551a8944e5673f73df0e252b7c",
-    "2022-01-19/rust-nightly-x86_64-unknown-linux-musl": "49e42ceb3358ee50863db105c680bbe35aae62b0c27d21db4124b29e82203137",
-    "2022-01-19/rust-std-nightly-aarch64-apple-darwin": "2640f188bda156f0c530c558e02b06dd1b362c7c0115ef8d9e585d451fd92c55",
-    "2022-01-19/rust-std-nightly-aarch64-unknown-linux-gnu": "500e3edb2fe3776ddbb85cbbfd3cea154f969d9b7b76df208dd39953a96d04db",
-    "2022-01-19/rust-std-nightly-aarch64-unknown-linux-musl": "1f93e986d03402e01d70bb443540049d641aa3bdc7376691ae4347addaf17642",
-    "2022-01-19/rust-std-nightly-wasm32-unknown-unknown": "419ecbb51cecc803299d3868b34e78cf08c589b9ce89edc58e9eb99a12140682",
-    "2022-01-19/rust-std-nightly-wasm32-wasi": "4a267c1c645e8269bdaf29b6edebe88bc2149217e9eaf0f9f87877c67540e9db",
-    "2022-01-19/rust-std-nightly-x86_64-apple-darwin": "b875843a7a5ec1b7f9a45672e44495b17972c0268a20d706610ee9c6ee12e408",
-    "2022-01-19/rust-std-nightly-x86_64-pc-windows-msvc": "316b1efb302c7f58f59aaa822fe07e809beafc4ab157d0dc53b92786292f7a4a",
-    "2022-01-19/rust-std-nightly-x86_64-unknown-freebsd": "632eba5d1ed2eed44fc61a1a69014e756426cad86accd2c372d44e07c764d1b8",
-    "2022-01-19/rust-std-nightly-x86_64-unknown-linux-gnu": "f1a26b04468f05a0239ff7d9bf4991ff6150650dfaf4d0a68b51d2146a1fe7e5",
-    "2022-01-19/rust-std-nightly-x86_64-unknown-linux-musl": "33f9b31abca43c27afe34800fcfa87fb66a059b4ed9a2ff6ba9767e0609ec2af",
-    "2022-01-19/rustc-nightly-aarch64-apple-darwin": "d1036828856da3195883e4c56b6596a08d3ed75ea5875cc26642e5b3b8caccd1",
-    "2022-01-19/rustc-nightly-aarch64-unknown-linux-gnu": "3f7edd43d97a6c63ad43db071989ed4114dff29c77b5b7ed7e1ea65339e170d0",
-    "2022-01-19/rustc-nightly-aarch64-unknown-linux-musl": "9d5d70aa8942786a61e4f7026abad946f5d965a99f44fcde54d5fde286461f52",
-    "2022-01-19/rustc-nightly-x86_64-apple-darwin": "0bb3422db5ebdbb36bd487ab6ec0b0bc89c960bf5b8bb1fadb9a7f3b827d0672",
-    "2022-01-19/rustc-nightly-x86_64-pc-windows-msvc": "2f15ce047f6c8ca20d4585ade8f66b7f296de7083da5636e5a09f04b02228435",
-    "2022-01-19/rustc-nightly-x86_64-unknown-freebsd": "1c8e731ee63cde0f5d6375590b234c5facf4070584494c24ae6d3c012e81b74e",
-    "2022-01-19/rustc-nightly-x86_64-unknown-linux-gnu": "8f96fbd32d86e0943a5d15c967c1e4d9832bd8682eeae1f333e9bcb77433acc8",
-    "2022-01-19/rustc-nightly-x86_64-unknown-linux-musl": "9ca8f7801aeea115aef2648313ed05f5755cb4fab2ca93e391dcc0b09f79528c",
-    "2022-01-19/rustfmt-nightly-aarch64-apple-darwin": "e1cd639473e54569e0282d68bd2270fa1f2e9713c8cdc95e1432097fabe3ab3d",
-    "2022-01-19/rustfmt-nightly-aarch64-unknown-linux-gnu": "f6e70a862dcdf24b035061602b1081163083ed022bf15366337fdf5af5b999b8",
-    "2022-01-19/rustfmt-nightly-aarch64-unknown-linux-musl": "eb028b9c1fda5730ad387312eb6fca48da94cb654edaa0a6a445092b1bd28af2",
-    "2022-01-19/rustfmt-nightly-x86_64-apple-darwin": "e205536ecdb2e15243a2436a41fc398b6a558be98d1ae8b281e9dd3748f3931f",
-    "2022-01-19/rustfmt-nightly-x86_64-pc-windows-msvc": "571d43d9091f87debf76102801a9d65842314532af34f08fec9de1b8346e532e",
-    "2022-01-19/rustfmt-nightly-x86_64-unknown-freebsd": "194f0c425d9188ceb69233069b162b25bb829c8fc155979433457d63b32df61d",
-    "2022-01-19/rustfmt-nightly-x86_64-unknown-linux-gnu": "3cab5f9cc9fb0681ce5c284b5ac98e92cbf73c2c9eb993d7d7d9faaf3363f01c",
-    "2022-01-19/rustfmt-nightly-x86_64-unknown-linux-musl": "41233d3f0fad709cc751def5342849564446cbc3a00045b39cb6a8c26d7dc436",
-    "2022-02-23/cargo-nightly-aarch64-apple-darwin": "16cc0baabdb131b3739d5db9d98a26db494a470afb15c29fb3f30a8a9701ffa7",
-    "2022-02-23/cargo-nightly-aarch64-unknown-linux-gnu": "c7b2643282f256f01224d93af31e722ff0ff64780fe391fdf1343aabe03b3a30",
-    "2022-02-23/cargo-nightly-aarch64-unknown-linux-musl": "3a4cda34180864cdf9505316e985460018756717878f8529c9141a982683c7aa",
-    "2022-02-23/cargo-nightly-x86_64-apple-darwin": "4952a58521c389ebbbf12d5c5f855d7ff63b6cbaa8b39f5d0410638ce18f91b5",
-    "2022-02-23/cargo-nightly-x86_64-pc-windows-msvc": "2909e511824b752f9137c1312076a3b570dcf9df19823c41b188db9859f44830",
-    "2022-02-23/cargo-nightly-x86_64-unknown-freebsd": "c5d47b6b075ff2bb881f1fe07f89e0927beb23cdb169c293e976853833421f96",
-    "2022-02-23/cargo-nightly-x86_64-unknown-linux-gnu": "ef101ce313d0d045ed121e312b12bb41c20bdc07963543ab77c5a5ab9802eb02",
-    "2022-02-23/cargo-nightly-x86_64-unknown-linux-musl": "dbb5a85a3d753473e5595b12c08b217aa8c13b01c64cffef5c702025d2557c38",
-    "2022-02-23/clippy-nightly-aarch64-apple-darwin": "59778a7fbd8a5fe3bade8b95d7ff7ec1419dfa95e2271afa6b32baa1d5c3710f",
-    "2022-02-23/clippy-nightly-aarch64-unknown-linux-gnu": "62d3027e541c8fc87acc076865469af0020b1ebff97ebf45dabf0fa3537ee7be",
-    "2022-02-23/clippy-nightly-aarch64-unknown-linux-musl": "dacaa625832e840e464ce5c0dc5bbefe5e15b1faa9fdf1fd29f4a5a9c6d955c6",
-    "2022-02-23/clippy-nightly-x86_64-apple-darwin": "7f98beae8363a2be260f2adaca025408abb092894138ae5a00cb43f8cffe5fab",
-    "2022-02-23/clippy-nightly-x86_64-pc-windows-msvc": "695c78fd375ca2e67d2b2dc679c242de32e7ec6366ac39c1060de9f4bb34c97e",
-    "2022-02-23/clippy-nightly-x86_64-unknown-freebsd": "674891a88d78046afb4da489ab47bf2994a7aab4c65eea42639611cc992114d0",
-    "2022-02-23/clippy-nightly-x86_64-unknown-linux-gnu": "b510582d9ea92fb059c89deff9a74a9725c8e935daedefef20443ce44e8d40d7",
-    "2022-02-23/clippy-nightly-x86_64-unknown-linux-musl": "f582add076fb61857c380258c0d854b7601381ba3dae7ae5b423978511159ed7",
-    "2022-02-23/llvm-tools-nightly-aarch64-apple-darwin": "b35cc47bd525e6664592f403905866c48bb9cb7b1b409bcf63c2b35d32993a79",
-    "2022-02-23/llvm-tools-nightly-aarch64-unknown-linux-gnu": "4c02f526bd993a9118ac0ac610b85e5cdfd42bc43d7ecf77d8c3067893c8a54d",
-    "2022-02-23/llvm-tools-nightly-aarch64-unknown-linux-musl": "b857b033803a4d6020c3425af9d4ea2b0462cc2db67f549e7dd426f81265d48c",
-    "2022-02-23/llvm-tools-nightly-x86_64-apple-darwin": "5e26961b8f803ca6d5be40622a8580164986bf54d8391b1a4524fcffbd1eeb10",
-    "2022-02-23/llvm-tools-nightly-x86_64-pc-windows-msvc": "dd5f7e54725d973423b3cb2ff3a0492da76491911591f6b34231af1dce332a7a",
-    "2022-02-23/llvm-tools-nightly-x86_64-unknown-freebsd": "dfb6f74016e677c28cf6eeb9e8430f5022e0c874619e2f5235728e82416e443c",
-    "2022-02-23/llvm-tools-nightly-x86_64-unknown-linux-gnu": "2746d97f126edf2045f012591c1262d725cf042c56c32caf7ecdcc0eb1ae001e",
-    "2022-02-23/llvm-tools-nightly-x86_64-unknown-linux-musl": "d307f34ba5fdfa7f4a4645e76a9bf8447c3baaf404017b0c698e516c3be5b56c",
-    "2022-02-23/rust-nightly-aarch64-apple-darwin": "e00ccb8acffe7450d78c5b2fc13cbc01a5210ad8edcaf27bf4a7961806942ae7",
-    "2022-02-23/rust-nightly-aarch64-unknown-linux-gnu": "f9b5613cb5ba524dfe8ba7325c2b8f8f112173d3e1a9bc5a75de49a604f4c379",
-    "2022-02-23/rust-nightly-aarch64-unknown-linux-musl": "a87bc336ca122847a998bcbfbcd9b1b7232c7cab7219a63948ec73bb2b9563bc",
-    "2022-02-23/rust-nightly-x86_64-apple-darwin": "a585cbad9e35c3a2da5d0037078501a01edaf66d9e52ac2e4394b733dd5ac81b",
-    "2022-02-23/rust-nightly-x86_64-pc-windows-msvc": "2df97bea4add36de47074a5d70d84f3f2cb29f038b6ca82af4e7986ef5bc9acf",
-    "2022-02-23/rust-nightly-x86_64-unknown-freebsd": "fa6b2300d71c7fab41a2c9a6b8a6b210eed8d3fe8263e8e17f2034072dd15c94",
-    "2022-02-23/rust-nightly-x86_64-unknown-linux-gnu": "d0fcb7b0e2b9b09ecca0954af53732c647859c3140b79fb2c1bd61af9846c3d3",
-    "2022-02-23/rust-nightly-x86_64-unknown-linux-musl": "00ed0db2ed84d6ab0347b663963b7ceba40483a9f40316e6f57872dbfc5ef395",
-    "2022-02-23/rust-std-nightly-aarch64-apple-darwin": "66623fbb88fb63ce610dfe1d5b3242620f1bd473386950b33c3383cc064f8743",
-    "2022-02-23/rust-std-nightly-aarch64-unknown-linux-gnu": "c6f82581224c8d968f0e747b07b6651f96ad8736aabe912ca9fadab7a82e7e5d",
-    "2022-02-23/rust-std-nightly-aarch64-unknown-linux-musl": "fda164074a8a6329835d99423a51a921948aaa67a2c6a3982940f73fe62b1a35",
-    "2022-02-23/rust-std-nightly-wasm32-unknown-unknown": "607a92b4e349601d6d7b4575b303324ec8af153fbfa19d6171eccd72388d6f63",
-    "2022-02-23/rust-std-nightly-wasm32-wasi": "4702cab8d82ae958c984686df053897ee53ae98650046016053261c922e848c4",
-    "2022-02-23/rust-std-nightly-x86_64-apple-darwin": "e6f2d3e182060387bba51540a6a8207f22cdf2f28f510143164bc755adf3d717",
-    "2022-02-23/rust-std-nightly-x86_64-pc-windows-msvc": "940c6687afd93a499e634fa31613d635f8f74ca6c16fb677a418f7288c8b80ad",
-    "2022-02-23/rust-std-nightly-x86_64-unknown-freebsd": "b685a785f022c76231c716d1ea305d03e46c7c785e5ce38be895d357e20b044f",
-    "2022-02-23/rust-std-nightly-x86_64-unknown-linux-gnu": "515506678fc829b3d418e124fa44ac29a5c485377d3fc753493e16aeed856f2d",
-    "2022-02-23/rust-std-nightly-x86_64-unknown-linux-musl": "5a9b8bf339631e33b45704a4f071991ba0694c7b00d94d35793a86ebdb5ad354",
-    "2022-02-23/rustc-nightly-aarch64-apple-darwin": "e967e5e396f7a931f53f7a9737591c4bbfdbeec869495b3cfbce8ccb18c54fa0",
-    "2022-02-23/rustc-nightly-aarch64-unknown-linux-gnu": "7a222bd902f3faa17b486027b357f461659a54f7ba81dc1b784a450d6b06f81a",
-    "2022-02-23/rustc-nightly-aarch64-unknown-linux-musl": "c898784e3e4e2fc0492c53148857ec7eff61bdda44b608a3d06e88b7e30372c9",
-    "2022-02-23/rustc-nightly-x86_64-apple-darwin": "4976dd96f04ef65f948deb988fa9ad7adfbfbd4873c0c78657830f18cd565d4b",
-    "2022-02-23/rustc-nightly-x86_64-pc-windows-msvc": "aa55308792edfdb41d1e7121e0343c05847b7e860ece9ff4c9534d64084b09bc",
-    "2022-02-23/rustc-nightly-x86_64-unknown-freebsd": "32b6dce6fabc18617d7b2295e45ff30221a68979b8302bde97c98596047f2a0e",
-    "2022-02-23/rustc-nightly-x86_64-unknown-linux-gnu": "d30ae66c6ad9f0292effe047d7977ecf1f2f6c5be783cfa110c54fdb5bd8396a",
-    "2022-02-23/rustc-nightly-x86_64-unknown-linux-musl": "355e30a7f4416a2db738d950b40d0eb57fc734f59871e1291349509e74f1be09",
-    "2022-02-23/rustfmt-nightly-aarch64-apple-darwin": "8f4bc35d8e2b03db96a5d9faedb5e25155082d96621c26b90734219468904c62",
-    "2022-02-23/rustfmt-nightly-aarch64-unknown-linux-gnu": "88691ff2cefa6880cb4bbe2d717b5419cd0440ee0d000ff8a70f9d86d714b866",
-    "2022-02-23/rustfmt-nightly-aarch64-unknown-linux-musl": "394ee236b37b687963a0c42e40b3c6863460c302429ad00ca37c7931ea896233",
-    "2022-02-23/rustfmt-nightly-x86_64-apple-darwin": "6e7ba1d83b61ce690c857bc197f3c0a1cf0cb2afd3c4c7f16fdb4079f460ce6f",
-    "2022-02-23/rustfmt-nightly-x86_64-pc-windows-msvc": "e1a81be6159fb9e28cb1f35ac4508a09a0be86edf6ab39db08988a5bbefa9e76",
-    "2022-02-23/rustfmt-nightly-x86_64-unknown-freebsd": "63a0018ed3b7bf94dca3db30be7a1d6940a7559cdd0ca408c366551e2f5e6863",
-    "2022-02-23/rustfmt-nightly-x86_64-unknown-linux-gnu": "7ab236ced294c39de4bb563e9ebaed04c906a4ccfd1932138d37d6d03f75cae7",
-    "2022-02-23/rustfmt-nightly-x86_64-unknown-linux-musl": "647da2183d93846ac5225b99117846a07a90975bdf1b5075e86601dcf97d1ecf",
-    "cargo-1.48.0-aarch64-unknown-linux-gnu": "71347016f0da96d4250225f7b52701274df958870b1a65482badb87d661035f9",
-    "cargo-1.48.0-aarch64-unknown-linux-musl": "873883a9f6eb2e0cae7dafdc6c4262157298b7bc6ac5c3ed899ed1f55cad7e82",
-    "cargo-1.48.0-x86_64-apple-darwin": "ce00d796cf5a9ac8d88d9df94c408e5d7ccd3541932a829eae833cc8e57efb15",
-    "cargo-1.48.0-x86_64-pc-windows-msvc": "c1287b03522828b527ba95a5bc9de0246efa4365a43d22a212f50a5ca2ea1487",
-    "cargo-1.48.0-x86_64-unknown-freebsd": "55fcdad2ac3a3f8066c323f75fb2b222822023f8b9961317d710f2f43771aa62",
-    "cargo-1.48.0-x86_64-unknown-linux-gnu": "52bf632e337a5e7464cb961766638e30dfa28edb3036428296678d1aaf7d8ede",
-    "cargo-1.48.0-x86_64-unknown-linux-musl": "0dd47d6342b17bc6c0fbf9ec007be0c90274e40e76d8e6a88cac73ecafc1583a",
-    "cargo-1.49.0-aarch64-apple-darwin": "2bd6eb276193b70b871c594ed74641235c8c4dcd77e9b8f193801c281b55478d",
-    "cargo-1.49.0-aarch64-unknown-linux-gnu": "fce2bd0eabf9a9958b02f5ede3c227c992ee7048ab34293cce57bc3d48e63fc0",
-    "cargo-1.49.0-aarch64-unknown-linux-musl": "18b4fa2d7a737754ae2d5ce3a2f8c8881fc4d9b5aae20109d7d3d622cf3ac145",
-    "cargo-1.49.0-x86_64-apple-darwin": "ab1bcd7840c715832dbe4a2c5cd64882908cc0d0e6686dd6aec43d2e4332a003",
-    "cargo-1.49.0-x86_64-pc-windows-msvc": "84b44835a3f275fef70cd86a527d086c537e59fb3209fe8bbef1eeb1da6edbb6",
-    "cargo-1.49.0-x86_64-unknown-freebsd": "320aac1e31eed2db657380bce2d8ff8b65fc8de59f4aadabf8219bcb6b4ce1a1",
-    "cargo-1.49.0-x86_64-unknown-linux-gnu": "900597323df24703a38f58e40ede5c3f70e105ddc296e2b90efe6fe2895278fe",
-    "cargo-1.49.0-x86_64-unknown-linux-musl": "c2a3d3b27ac105acf7bfc25d6e401b9ac369597f57220332377b98b2f8cb550b",
-    "cargo-1.50.0-aarch64-apple-darwin": "19d526ef3518fb0322f809deddbd4208a27d08efa41d2188348f1be8d3bcfe5e",
-    "cargo-1.50.0-aarch64-unknown-linux-gnu": "9b6fbfec7f6d14013387433f3a907b1f474027d7f32f626dc1c5ca83faefe573",
-    "cargo-1.50.0-aarch64-unknown-linux-musl": "7ec67e55fe541cfe32221e9b69349d2de83a24f7967f58eb4dc06e59f321babf",
-    "cargo-1.50.0-x86_64-apple-darwin": "45640bb1cef40f25ecb4bd2a3bb34fdf884c418e625d4f9c9595d2aca84fad78",
-    "cargo-1.50.0-x86_64-pc-windows-msvc": "dbd97ac5645668149d4a32b0b5f6274934d95f8b6d6e6926b7de13ee869aeedb",
-    "cargo-1.50.0-x86_64-unknown-freebsd": "97cbdc9b94123e940f7ed7304aba418a1a10ee1cca5acfe302e841ea39efa190",
-    "cargo-1.50.0-x86_64-unknown-linux-gnu": "3456cfd9be761907a4d3aae475bd79d93662b7aee4541f28df3d1f7c7d71a034",
-    "cargo-1.50.0-x86_64-unknown-linux-musl": "f1f99e1cfacaa69a12c4ee7ffd767bdcf80eb4d4b0e71af545e8e16b2b22d799",
-    "cargo-1.51.0-aarch64-apple-darwin": "3eb0eb6192635c4b844deb97004a7e38a631bb4507b1284c055df8533c00e77a",
-    "cargo-1.51.0-aarch64-unknown-linux-gnu": "eeeee860ec47ebe1c45f497ff99cfee9c869a592db573cd547a67681db695616",
-    "cargo-1.51.0-aarch64-unknown-linux-musl": "297a66f911298c55e7a494286769c045184e7b65fb3dc0a56d5a00d8655c6341",
-    "cargo-1.51.0-x86_64-apple-darwin": "37eb709e5ed8fe02d2c8d89bc0be3dc1d642cff223c25df311ff5a82eab53d4b",
-    "cargo-1.51.0-x86_64-pc-windows-msvc": "ee232ab24aa57f3c57218a5886af673725ecff38ad58e8d75257d4fd0c86b148",
-    "cargo-1.51.0-x86_64-unknown-freebsd": "fb2b8a5fd787944392adec0593f6921131069a5a95c1f53be75f98451d918300",
-    "cargo-1.51.0-x86_64-unknown-linux-gnu": "fe8abe2c2b467ac5f5021ff8020eda70de9e9f8f45b4a2e834afbd3b78323a31",
-    "cargo-1.51.0-x86_64-unknown-linux-musl": "3e3f1ca2aba2d7195bc447f4e446bbf6c8803f42ebaaf7a32e7f92268cf2f6ff",
-    "cargo-1.52.0-aarch64-apple-darwin": "86b3d0515e80515fd93612502049e630aeba3478e45c1d6ca765002b4c2e7fd8",
-    "cargo-1.52.0-aarch64-unknown-linux-gnu": "4a7f07bd9f30ed0409a21fad831afec0b9d0d10b5bca10cf826fdefe04a4f4f9",
-    "cargo-1.52.0-aarch64-unknown-linux-musl": "472cd83b79e173932ff436e77802c217599f73f672e88345bb61105dddf2a2eb",
-    "cargo-1.52.0-x86_64-apple-darwin": "02a4be4aae1c99ca1e325f9dbe4d65eba488fd11338d8620f8df46d010ffbf3a",
-    "cargo-1.52.0-x86_64-pc-windows-msvc": "866fc858fc422fa52afdabfb5feaf6e6aed41c575d6edfd4f343425faaf01023",
-    "cargo-1.52.0-x86_64-unknown-freebsd": "c732090f26a36211de084fba0ffcc8d1b49591d935d3b4ebd515a9570043aeb2",
-    "cargo-1.52.0-x86_64-unknown-linux-gnu": "85151d458672529692470eb85df30a46a4327e53a7e838ec65587f2c1680d559",
-    "cargo-1.52.0-x86_64-unknown-linux-musl": "ecb7b4968ca1b19c09ac3de9ea60420e8435c32e25f7412c19a0ac3f9dcb3363",
-    "cargo-1.52.1-aarch64-apple-darwin": "6787f8746cedd005b7abeabf6e2250ebc5fa767486c5bf23c597298e6965d576",
-    "cargo-1.52.1-aarch64-unknown-linux-gnu": "d2e15beebe22b6f6380d233f48599fc1b9228b064f0915eea02b2376f0bde1e1",
-    "cargo-1.52.1-aarch64-unknown-linux-musl": "dc8f6cf0c02f68b05b470087cd611cc4107060daae64f9d09677e97389c51281",
-    "cargo-1.52.1-x86_64-apple-darwin": "40d8fe950202763f633b6dd927f8e546e0a44b4b959945310c9eeb77f69e72d1",
-    "cargo-1.52.1-x86_64-pc-windows-msvc": "bb25d1ca297ac99a1dde7ce537880c1f5a37e392257b5aba589938b4f1bbf659",
-    "cargo-1.52.1-x86_64-unknown-freebsd": "67f858cf9e46fb7efe825adb854302e187ad194d05ded1e7b8ce165607869947",
-    "cargo-1.52.1-x86_64-unknown-linux-gnu": "f3225c27ce16296400389285358b61e138811c2e0eb1388593817688145ab64d",
-    "cargo-1.52.1-x86_64-unknown-linux-musl": "300c30d1ad47c84a8d806ef492db2478bc7c17793b92513533166bd9d9b51857",
-    "cargo-1.53.0-aarch64-apple-darwin": "5f0aea0cd507ff6e3b1e1ae54a8726172d055a8b6d8b1ba550ce9ebc96a8a891",
-    "cargo-1.53.0-aarch64-unknown-linux-gnu": "7c35c086e294af3ae82df5609c6833a36bd8e6634e8ecca18f863829cfe80ca7",
-    "cargo-1.53.0-aarch64-unknown-linux-musl": "9c0e9137aaf5c13f9d65487ec3216fe39280f387be4133da088355e263ce42da",
-    "cargo-1.53.0-x86_64-apple-darwin": "b42f4a7d054e219d8744af48cfab798473981455a050a320c46b164382726e50",
-    "cargo-1.53.0-x86_64-pc-windows-msvc": "7ab1bfdee65f19cb60671690566b89e3a0f210f04dd53078786f6c708b523223",
-    "cargo-1.53.0-x86_64-unknown-freebsd": "3e2c5681793c86f21133ac7b26aa5af4525b8471ec5df840d41d0e563fb675c8",
-    "cargo-1.53.0-x86_64-unknown-linux-gnu": "e79d9d0b03cb331428ef3cfc4cbe60ded9f90708a7dd1714d974dab9a03ee7b3",
-    "cargo-1.53.0-x86_64-unknown-linux-musl": "d8f632c0b2f8abafb1149446c695a8a7024134fa62faa37ac8922a41dd66c95a",
-    "cargo-1.54.0-aarch64-apple-darwin": "7bac3901d8eb6a4191ffeebe75b29c78bcb270158ec901addb31f588d965d35d",
-    "cargo-1.54.0-aarch64-unknown-linux-gnu": "d54d0bde0014e73a9c6943665bd236e5596c86d58869bc758aa6c24a9ad53061",
-    "cargo-1.54.0-aarch64-unknown-linux-musl": "2dd6ecd46b769efbb397794e5bad4249779be3e91738efd26a7673fa728a5ac0",
-    "cargo-1.54.0-x86_64-apple-darwin": "68564b771c94ed95705ef28ea30bfd917c4b225b476551c998a0b267152cd798",
-    "cargo-1.54.0-x86_64-pc-windows-msvc": "ad8808314e36af5de8e3e8e519c4e73d30b56a8020418aec2fd1f0f3d2d7a8f6",
-    "cargo-1.54.0-x86_64-unknown-freebsd": "3a2612b2073f5d3b45a4c88f359a8f5e2b86b85f7ef68bda518f532339f01227",
-    "cargo-1.54.0-x86_64-unknown-linux-gnu": "8c4f404e6fd3e26a535230d1d47d162d0e4a51a0ff82025ae526b5121bdbf6ad",
-    "cargo-1.54.0-x86_64-unknown-linux-musl": "d6e2d8e2075f433b3a607b95ef170a85fc0b44356905111004d23a9b72776b0a",
-    "cargo-1.55.0-aarch64-apple-darwin": "9e49c057f8020fa4f67e6530aa2929c175e5417d19fc9f3a14c9ffb168c2932d",
-    "cargo-1.55.0-aarch64-unknown-linux-gnu": "48bc8751f548b08643fbdea7756ccda35f0762492e95ea41ca41137290f56513",
-    "cargo-1.55.0-aarch64-unknown-linux-musl": "01ac6a21d74ac66a33e58d2d5766c4c90673be0e8385893da4e178a0ded56299",
-    "cargo-1.55.0-x86_64-apple-darwin": "4e004cb231c8efbd4241b012c6abeefc7d61e2b4357cfe69feb0d4a448d30f05",
-    "cargo-1.55.0-x86_64-pc-windows-msvc": "2bc59373437d25e5cb9d4f573fa187078c5a924a244366787ce04106d3972f6e",
-    "cargo-1.55.0-x86_64-unknown-freebsd": "f574b15dee6c52f25076bb657f3e3129b5828a2617c82f2e1c4101e0bd21a880",
-    "cargo-1.55.0-x86_64-unknown-linux-gnu": "bb18c74aea07fa29c7169ce78756dfd08c07da08c584874e09fa6929c8267ec1",
-    "cargo-1.55.0-x86_64-unknown-linux-musl": "d91efc8e7a71845dcec9ec7db1edb6765cba5ded69d3ab734f549d6875b52e97",
-    "cargo-1.56.0-aarch64-apple-darwin": "ced26df8edddcb7ebdedd2997b9005fc9a849e57b1b82f3aeba9241039f7b958",
-    "cargo-1.56.0-aarch64-unknown-linux-gnu": "3a3b0b74a18247db46badc1e94285fe5e60ad0e9c18fd2dbf15878aa56a5994a",
-    "cargo-1.56.0-aarch64-unknown-linux-musl": "bf24b7df97d93d61f6c1ed8382d99400c4197939502b14904c40ef96bb2abab5",
-    "cargo-1.56.0-x86_64-apple-darwin": "63b6558712050e7f8c57cac0b5b7cb2cafc125d157d9f4bd82f6f47b4648ed0d",
-    "cargo-1.56.0-x86_64-pc-windows-msvc": "319ae8cde721f611ddf673a4aad21b145aec6577ccb75d40ad0856cbab9a2cfe",
-    "cargo-1.56.0-x86_64-unknown-freebsd": "e1e7400a16c7cb1d2ac83e567c8c23f04fb6ccfcb7b6d1978d327da6edc879f6",
-    "cargo-1.56.0-x86_64-unknown-linux-gnu": "e74bd0038893e76393f67a58786ec33ef9251cdb65550b3a2a8117c7355ead71",
-    "cargo-1.56.0-x86_64-unknown-linux-musl": "efadb9f545b6ce49d4a861ae7e75f0ce02a6fedb9e5b30e7810dcb4854ca6799",
-    "cargo-1.56.1-aarch64-apple-darwin": "6ed30275214e956ee10b03db87b0b4297948fd102d39896cece01669555047ef",
-    "cargo-1.56.1-aarch64-unknown-linux-gnu": "9aa557436b0cf2a2f4f0d6c4aed5b95062c0637a4a94c000522402e59db1c93a",
-    "cargo-1.56.1-aarch64-unknown-linux-musl": "313f095df71bdd7cab5934641990cbcf325acdfefdcdf9d7a4a8aa950fc655d6",
-    "cargo-1.56.1-x86_64-apple-darwin": "cd60c32d0bb0ed59508df96bebb83cf6f85accb9908fb5d63ca95c983a190cf3",
-    "cargo-1.56.1-x86_64-pc-windows-msvc": "0606835d9c41137552ee63f339c5df1a2ed6f722c871f9fc5cb92b02c7372373",
-    "cargo-1.56.1-x86_64-unknown-freebsd": "a1656603049a4612cdf44179ac7ccdb3c342f0b152cb114f61a228d321b0f384",
-    "cargo-1.56.1-x86_64-unknown-linux-gnu": "c896c033bb1f430c4e200ae8af0f74d792e4909a458086b9597f076e1dcc2ab2",
-    "cargo-1.56.1-x86_64-unknown-linux-musl": "4ecdd39695d9e09c3f4efffff61d67451cd41f28f09155485ac7dcc8f7a65a26",
-    "cargo-1.57.0-aarch64-apple-darwin": "2171ecf2c18fadd90588252aa294272aeb740f065772076ef36d04b1b4bfcc4e",
-    "cargo-1.57.0-aarch64-unknown-linux-gnu": "8c046fc59feb1d670757b6de30990e346faa4b2ff49cd42f6d5f6a2b92a1ad6c",
-    "cargo-1.57.0-aarch64-unknown-linux-musl": "87f7b1fb2b1a270336fbeac0ed2ea2ceda1fde26467f133e059907b57ad2bdb6",
-    "cargo-1.57.0-x86_64-apple-darwin": "26129f0e3ecd42e730f62d9c693e1a89aedfe6b7c8108cf970b2f1ed51900fb8",
-    "cargo-1.57.0-x86_64-pc-windows-msvc": "23f4562605316f0c9002bb30d0e635f96577db9002052ef2f78b63e747b6b2cd",
-    "cargo-1.57.0-x86_64-unknown-freebsd": "c14839639299fce4e448629950c28de61fcfdd0393f9a751958c5c6d9c6d2ba7",
-    "cargo-1.57.0-x86_64-unknown-linux-gnu": "2b341034e4c30bede47a432751935549a28e40b566a1fd4b59c824ccd0a26ff6",
-    "cargo-1.57.0-x86_64-unknown-linux-musl": "0f14c6bb7c413c3be2db1917eb0109b7563bff0ba02a03d30089004811d87f2f",
-    "cargo-1.58.0-aarch64-apple-darwin": "9144ee0f614c8dcb5f34a774e47a24b676860fa442afda2a3c7f45abfe694e6a",
-    "cargo-1.58.0-aarch64-unknown-linux-gnu": "68e2e7493af55c5792636c2b2b0b497b1e43b12eb2e91da71e92426701884c24",
-    "cargo-1.58.0-aarch64-unknown-linux-musl": "269fd3730644890725b3affbf5ad97c3f1a186fcd22e7fc122b6b9b97388aaae",
-    "cargo-1.58.0-x86_64-apple-darwin": "60203fc7ec453f2a9eb93734c70a72f8ee88e349905edded04155c1646e283a6",
-    "cargo-1.58.0-x86_64-pc-windows-msvc": "ab0bdb95efa4084e19a706c14d826fa112306c25ec6304528dadff5f1017ab83",
-    "cargo-1.58.0-x86_64-unknown-freebsd": "8e280cfb6c7aa92d9c955fcfb80b6d09f067e779a5ca0b5799222f1a70ca4764",
-    "cargo-1.58.0-x86_64-unknown-linux-gnu": "940aa91ad2de39c18749e8d789d88846de2debbcf6207247225b42c6c3bf731a",
-    "cargo-1.58.0-x86_64-unknown-linux-musl": "926430f872e5a30b946bebe45df48ceb0d3dc8de04b35e295f33bb3b7dd394fe",
-    "cargo-1.58.1-aarch64-apple-darwin": "fe4507d345fea40e2157a6d7d69100c234a83b5904747ce976df577e63819134",
-    "cargo-1.58.1-aarch64-unknown-linux-gnu": "b4603fe8207c1ac2b5755a5f8da04c32a8a3d34ec1506df28de5dac9010350f1",
-    "cargo-1.58.1-aarch64-unknown-linux-musl": "1bf9187170e8cdaf52ddd45aa7c93248f4d8a6c730b20251cb182b57d6624bd0",
-    "cargo-1.58.1-x86_64-apple-darwin": "27087440329a7d3b0bd2b73870c76677e52c96390c3a7b76e151f8a86ce442be",
-    "cargo-1.58.1-x86_64-pc-windows-msvc": "4cbe75408c2745c72a27a37f77864745c7ce3e79c2d42708732c95fb3cbc9489",
-    "cargo-1.58.1-x86_64-unknown-freebsd": "f60d967c940400a92d142df1396a2031034374874a7575ad74bec2536e101fc4",
-    "cargo-1.58.1-x86_64-unknown-linux-gnu": "a6ca018e19eb25781b72e0ce9971be66c518adb6cebb0175ad88e6ff333f5118",
-    "cargo-1.58.1-x86_64-unknown-linux-musl": "45cca848155e2ef853de74329ee45948e4f6f28f797679d9070f4ffa767ef209",
-    "cargo-1.59.0-aarch64-apple-darwin": "4bdcb77ea084364b551a5cf969e263beb09afa39627f6dead262c8e2a7aed9c1",
-    "cargo-1.59.0-aarch64-unknown-linux-gnu": "857d0b4afa76773a68ebe616db01d1b97d24b6d02b55e7348c968aa48104793b",
-    "cargo-1.59.0-aarch64-unknown-linux-musl": "89ea1001d79ac7dc2158950c40a73aca6d1177d5e44562e9e5a8656b916e344c",
-    "cargo-1.59.0-x86_64-apple-darwin": "d0202b50b4f3d0e943a5d7e8d14420afeac8cf36e6136e8d5b7ddefb3538d62a",
-    "cargo-1.59.0-x86_64-pc-windows-msvc": "4cf585f1a3b295f6d51873c189c2b9d114861a4b41b44ad5245cbf119272a6f2",
-    "cargo-1.59.0-x86_64-unknown-freebsd": "a6732b18419efb4d246a35555f4ccbf904de261cde02f8e82fdbef67e70ddf80",
-    "cargo-1.59.0-x86_64-unknown-linux-gnu": "703c1c66f1d68549d1ee0b7a96f91935a3583af8ec13cc1722ff7a0f1c69ca70",
-    "cargo-1.59.0-x86_64-unknown-linux-musl": "ee2fa67e67395f9b8e1b52433ca281454c3e4f55db536414edfadfa2d649c8bf",
-    "clippy-1.48.0-aarch64-unknown-linux-gnu": "2cc894bf75d938c0f7b96c7711d93b6d5a0befed5c09232cdd8413a57942ed88",
-    "clippy-1.48.0-aarch64-unknown-linux-musl": "b3d740358470df6f4c1881a40db16c6fce4082bd251b012963147fdadab96879",
-    "clippy-1.48.0-x86_64-apple-darwin": "d70a5d224a90df3fc77d7bd38df931023a3966be755b888bf0888d6bfcbdc424",
-    "clippy-1.48.0-x86_64-pc-windows-msvc": "e52103f31fe8d4e067b28273ba0aed9ae352d88ad1c3b9860ec1e08b81241ebc",
-    "clippy-1.48.0-x86_64-unknown-freebsd": "14459e9629b09c83c38fe2366d996490c1691fb3ae9937f4a8de48219857e14a",
-    "clippy-1.48.0-x86_64-unknown-linux-gnu": "409c2e4a6b50f9a797379e687c2d0bcbda4a268e736fadd2be07f35a2fb9557f",
-    "clippy-1.48.0-x86_64-unknown-linux-musl": "cf6480cc206ef4b615f95de2f048e6bbf17072b39dd76246faf3440fccea3704",
-    "clippy-1.49.0-aarch64-apple-darwin": "d6f2782d600f1a25d1fb9fe828be0cf170fe5afad50184c30e8c32310f26fd8c",
-    "clippy-1.49.0-aarch64-unknown-linux-gnu": "ed805952ab975e9f395fa68544448ff7a6e823c4bf7e04952e4c1dae5a550be3",
-    "clippy-1.49.0-aarch64-unknown-linux-musl": "f4329c16a6f448abe7be50b2206ca7d8a21605d9d8e3f01303fbe737d0c3bf7a",
-    "clippy-1.49.0-x86_64-apple-darwin": "c4a7baeda3a558a65af3afe857aedb5f25e8dd0ba42ea02cdd1056d92e610b35",
-    "clippy-1.49.0-x86_64-pc-windows-msvc": "70eec30a80aebaa1f6f4dfc1a6fa681cdc833aa2281726319a06c9fb1af277fa",
-    "clippy-1.49.0-x86_64-unknown-freebsd": "835bb7c1d4f4d57453f69b35e758347ad02f22949cbce3265282d2059aea4166",
-    "clippy-1.49.0-x86_64-unknown-linux-gnu": "0be34ad7ddde82f54353d5322c6142b43d4dee54ea26b9428a3a34444aa4b9c4",
-    "clippy-1.49.0-x86_64-unknown-linux-musl": "c53a5e73e99ea9f3e14f2c1164f234eac4e60e428ed82502ffbfdd19be728f3f",
-    "clippy-1.50.0-aarch64-apple-darwin": "c0a335e4cc3b0775661c98937c767eb63f5cca4a8a224c164af2415158175025",
-    "clippy-1.50.0-aarch64-unknown-linux-gnu": "bfdd830f04b1dae6ffa71e750b391cdd43def5a9c266366eea8e6b8071509747",
-    "clippy-1.50.0-aarch64-unknown-linux-musl": "1fb4eaf6c2230ff138edb906ac55fbb47b638e412c83580a783749a38096cb98",
-    "clippy-1.50.0-x86_64-apple-darwin": "466be411c4eff28c006179ba5a45af5c37dc9a56395a24ad597fa54a475eb97e",
-    "clippy-1.50.0-x86_64-pc-windows-msvc": "65b3198dc0082d2ca77559047901dd102d100bf7fde513a0a3e81ab78c93d568",
-    "clippy-1.50.0-x86_64-unknown-freebsd": "f065a60cae99287eeed1ad479f159efeef7f79459b8b4369c451d966bc8b0bed",
-    "clippy-1.50.0-x86_64-unknown-linux-gnu": "ef4098fdb39d67366300a63370c513ca97fdce8f4d6ce9e2a5fbff32d3a8ea38",
-    "clippy-1.50.0-x86_64-unknown-linux-musl": "b921d64ab3a130240372c069f72b549ec5c0d566dd302c6b7593453536688ed9",
-    "clippy-1.51.0-aarch64-apple-darwin": "1d4769e522ec3275b6a1b6e63f0d48b6995cf3647df4d97fc1c20bf2969cac6d",
-    "clippy-1.51.0-aarch64-unknown-linux-gnu": "bbf4f53e8c9496524384cf8e3a9e56bd80b19aae12135c058ef113bec40fd30e",
-    "clippy-1.51.0-aarch64-unknown-linux-musl": "ede6e08307a91fb18feec8d4ea9e170dd3f522f79267ca39d258dd554af5eef0",
-    "clippy-1.51.0-x86_64-apple-darwin": "6c1d2c143720058a67da274b1579b4e7e955bd35de6d4714d884b55030ead225",
-    "clippy-1.51.0-x86_64-pc-windows-msvc": "9d7c25c031257ec62b0800e418252e4a53319a513deb9e682b438bef1abc4056",
-    "clippy-1.51.0-x86_64-unknown-freebsd": "db15a34b5d829338f63c436665c7106817b2577d9417615d75e4aa6b27633c3a",
-    "clippy-1.51.0-x86_64-unknown-linux-gnu": "61774912e775de826e4f9173c8f91a915d91319d353ecad46361775a035ed69f",
-    "clippy-1.51.0-x86_64-unknown-linux-musl": "4d3f51f4e1220e740e6d310c5f90652b8463e8897a9e4fe82d9c4b8e3315f9b5",
-    "clippy-1.52.0-aarch64-apple-darwin": "0e8a71e8567553ed625168f46e2253c04ef19f0ae7683b6500b3fc07cb81fefb",
-    "clippy-1.52.0-aarch64-unknown-linux-gnu": "06b0a9e579b93bcf5948f013c1e053f8ad6717b3349068b2dbe774215f4b0dd3",
-    "clippy-1.52.0-aarch64-unknown-linux-musl": "a2075592aeb37ad33ebcd93b228e79dabd8fb62eeee7aae531ac0d9682eb6abc",
-    "clippy-1.52.0-x86_64-apple-darwin": "baef3bd3c93872c67ddede8b657236f5f368a9e30b2ba9725c70881877c6db28",
-    "clippy-1.52.0-x86_64-pc-windows-msvc": "149418af4a93f3c4d8978eccf95a968d2fcef4cdd748b284c782d8efd06d38da",
-    "clippy-1.52.0-x86_64-unknown-freebsd": "db50b6ac0cfb3c8eca34e8059014bd5602dfd160246a51efef568165ff7bd4bc",
-    "clippy-1.52.0-x86_64-unknown-linux-gnu": "00a55613d1a47c12c08f6b101ca791052b07650b624c102acdda4569ba2652a9",
-    "clippy-1.52.0-x86_64-unknown-linux-musl": "95950b2455e706d500a2c2f02904e5d48394b998f5f486fe376a144edcd7f85b",
-    "clippy-1.52.1-aarch64-apple-darwin": "fa19b0115201c9462f36eb8f51db07cf58af02ba2c997f1431719f78bea30904",
-    "clippy-1.52.1-aarch64-unknown-linux-gnu": "91d914a83b5c6d1b551a4acfa96c9cd4365b674438fdd3d2114ee86f11f53849",
-    "clippy-1.52.1-aarch64-unknown-linux-musl": "0910ba13838bf80b5ae86c219078340fc02ba5e0b570c54a510aedf78cc6837d",
-    "clippy-1.52.1-x86_64-apple-darwin": "39264348d1246a9cff623eb511979b71831ff331e16be6bf3371ccefa19a23f5",
-    "clippy-1.52.1-x86_64-pc-windows-msvc": "2470d52eda90cd6f7a02901bb2144c40957b0decf2af8f6cf115265acc64c956",
-    "clippy-1.52.1-x86_64-unknown-freebsd": "d9b4aeb263668e95b3fff8d4125ce28905695c1c8ed3d9d5bf949d47d386d13c",
-    "clippy-1.52.1-x86_64-unknown-linux-gnu": "33d6d2446ec4d381057f404c7081686856a001bd91409d81c96aeeb6c452d289",
-    "clippy-1.52.1-x86_64-unknown-linux-musl": "f37ccdaf359f1ae4aa31324490a9ab2ebfe56e5f11245dfea04930eaa0b5c5c3",
-    "clippy-1.53.0-aarch64-apple-darwin": "311247f7aabd4d846d1220f26a6ea6478219d6549a9abc546ad69092dde2e1a7",
-    "clippy-1.53.0-aarch64-unknown-linux-gnu": "56842a410a38293a09cf4d880a5d237c10eaf8344a080bb1ea0d3e069ce12112",
-    "clippy-1.53.0-aarch64-unknown-linux-musl": "26db11ca69b33b3ac8e3379573f7e3bbc352f7920f98c4434465636c34d386dc",
-    "clippy-1.53.0-x86_64-apple-darwin": "ede5bceff1be27a21b12a3be4034d254925d3d58d39713fa4af9fa561f1ea671",
-    "clippy-1.53.0-x86_64-pc-windows-msvc": "dcff1fcdae5ca816a71c9f080246860e8e1d90022576d28d74d033f940ed8aa5",
-    "clippy-1.53.0-x86_64-unknown-freebsd": "4de1e957c3999a130ef3cb0362a28746ffaf79197cbb1ebabf7be6be115b2f29",
-    "clippy-1.53.0-x86_64-unknown-linux-gnu": "bf065f9c7710a5e7305fb511bd1e21bd248ab216230ec0c71d8bdd2383e0b088",
-    "clippy-1.53.0-x86_64-unknown-linux-musl": "ae84cd0677a5446dd07384d4006f52fc6e2d290728edabb5a169a56ca9bb388b",
-    "clippy-1.54.0-aarch64-apple-darwin": "086e52350792a8b4e3f3f40753948e7d067c38c9c0f22492f2c7d88ba7c94e95",
-    "clippy-1.54.0-aarch64-unknown-linux-gnu": "e25bdd281f3fa9cb194eaefe75cea7f4f0cd70c615ac7077a015764360d45953",
-    "clippy-1.54.0-aarch64-unknown-linux-musl": "8de3e94808e40540402aafed1343ce6cd058c86fa7ac174c6ec591e4a03d6c09",
-    "clippy-1.54.0-x86_64-apple-darwin": "b1548c2d6d524aad02865e98a367dc665cd5b1847a20d29b142cc13adfea43b8",
-    "clippy-1.54.0-x86_64-pc-windows-msvc": "36e03f67f45d83d66187df2380b4acaaa2cfe5924c53c724a83a2780f78212a1",
-    "clippy-1.54.0-x86_64-unknown-freebsd": "92569c0f9faab4501d47ab6958d6535d2039490e763cc65c1700b0c5436106b0",
-    "clippy-1.54.0-x86_64-unknown-linux-gnu": "4896d754064c781611901c459d326dfcc10d9916cad5c1dd6a0898bca7e6428e",
-    "clippy-1.54.0-x86_64-unknown-linux-musl": "8184892daa7b652af96c9634ad15f33e97b022c7aad16e1e95bb95bf3fa96972",
-    "clippy-1.55.0-aarch64-apple-darwin": "470c8c99050a7785c4b261ab95575141bb48f19dc135dec96b8424e175898670",
-    "clippy-1.55.0-aarch64-unknown-linux-gnu": "ace2cface85e199c5d1773a88ca5ba4d1527cf3936bc844113e4defb54fc13b8",
-    "clippy-1.55.0-aarch64-unknown-linux-musl": "f1dead08b21cc8a67a3d27c785e107d2aa5363e60dcfd74c7fb81fd663d288b8",
-    "clippy-1.55.0-x86_64-apple-darwin": "fff5969a2a6795e28e040eda2ab59d29a48ff5aad0f15bea194b61befbffec77",
-    "clippy-1.55.0-x86_64-pc-windows-msvc": "d7dfa77cc50348023d973311bf378181bdf18d5aff7c2fde69cf8031564667da",
-    "clippy-1.55.0-x86_64-unknown-freebsd": "ba035cd7f62468fc75a56f604ac3579adce4f90ba2e6df219299f21668def51f",
-    "clippy-1.55.0-x86_64-unknown-linux-gnu": "108ebbc6b311fc0cafc125f1fd7f35a82935000c60cad49a565958e47f63193f",
-    "clippy-1.55.0-x86_64-unknown-linux-musl": "e248a8b3987c2750439966ed5df385a089147079105d85041a8147b1044b4f3c",
-    "clippy-1.56.0-aarch64-apple-darwin": "70eb9ec3d9ab79c20030bd0df903ff972dea451dd2a4b55c7eaa8837c1782071",
-    "clippy-1.56.0-aarch64-unknown-linux-gnu": "fb62502c82cf35fecc55761fb3f7a816d2d355cb31ad89fa844be4a1368853de",
-    "clippy-1.56.0-aarch64-unknown-linux-musl": "fb1852dbeff93f1518ae3d0f7adfeb95596aa55069ad24dbcda14e59bd9ec9a2",
-    "clippy-1.56.0-x86_64-apple-darwin": "9410b2f7096ecc3f495fc8a36e14bd566fdd3e6fda2923b4732c3055da81fcf7",
-    "clippy-1.56.0-x86_64-pc-windows-msvc": "cdca7f40793889dca4eb19b846c7ca7bc60ffd8f5cc2fa20c6c71b66c26e9449",
-    "clippy-1.56.0-x86_64-unknown-freebsd": "c5751a4a7043c7a29755459193cde2a1468b4a0726fb3b188853afc6d6870510",
-    "clippy-1.56.0-x86_64-unknown-linux-gnu": "52b49ecc5d44d7f83983ad1aaa37ed9d0ac86a72395cef9e31d06f4ba2343c03",
-    "clippy-1.56.0-x86_64-unknown-linux-musl": "32b7b596225dedf38f9228edd1fde9211f6bd1969f924c3de7cc0d5150577487",
-    "clippy-1.56.1-aarch64-apple-darwin": "a3ea45a2c569bbfabe556c6d3c3ca6caa3aa84cd1c4897027a7ae17856ad9c9c",
-    "clippy-1.56.1-aarch64-unknown-linux-gnu": "2b9bea99c887b07b960325f51989600c120278ba658ada17ca9b9f8c75270265",
-    "clippy-1.56.1-aarch64-unknown-linux-musl": "578aeb964a07730e8f92b360e7e96c89728ff35d9d2bd21b1e7436b06960b0a6",
-    "clippy-1.56.1-x86_64-apple-darwin": "00690eb127e30b75992256481e75d4f3dd6afcedd0d00495eee88137cdbfc6a9",
-    "clippy-1.56.1-x86_64-pc-windows-msvc": "932cb41989bb9f72c1a8c37a306a663d311fba26e34f3759e3fe533c963c1571",
-    "clippy-1.56.1-x86_64-unknown-freebsd": "2e25fdf46fb4144115583cc2ee9a43d9d8a5ee8806a00ed676c89ab3f26ff799",
-    "clippy-1.56.1-x86_64-unknown-linux-gnu": "07bfe461a7da0631917a1c2ff0f319af85d1083ada911a089a76e792cf673d16",
-    "clippy-1.56.1-x86_64-unknown-linux-musl": "031f5118516ee442d9489ac32922cfa322b76629ba2dbcbd10047891651e8955",
-    "clippy-1.57.0-aarch64-apple-darwin": "1e29be461daed9196ffeabca4855501de118a503863f54873cb24b18ffb785ce",
-    "clippy-1.57.0-aarch64-unknown-linux-gnu": "c6f082eeb70580e293feb68a0bf415d8e490675a50e66c67384cbbf2c38539e2",
-    "clippy-1.57.0-aarch64-unknown-linux-musl": "f8ec644a01ef3f69db2b90e91640334de4b5b557ff2a085053e937f12d428f14",
-    "clippy-1.57.0-x86_64-apple-darwin": "f232a98a50cc0cb6237a09e59e12bf0ed67051e369d5371519085f91f7bd9411",
-    "clippy-1.57.0-x86_64-pc-windows-msvc": "e24ba652942e85bba965b61045f0515f4c7f3537eeea6ae7023c2110179545d5",
-    "clippy-1.57.0-x86_64-unknown-freebsd": "664d64fa5557717b7ea14fb3dfa8c7a32fc03296ff6ea38243e42dbb371776b7",
-    "clippy-1.57.0-x86_64-unknown-linux-gnu": "650a417e4adb00c29795110fb07d671e8fe79ef54a682a357defe7b402d09838",
-    "clippy-1.57.0-x86_64-unknown-linux-musl": "ba8eb172cc6435e396312509925058af6bc16ddd6da8abca7a89b8dbf4dd32d3",
-    "clippy-1.58.0-aarch64-apple-darwin": "8370af0cb5e274de23adab83eb62ce32bf117dfe4681a731719d2b3d1a9758b9",
-    "clippy-1.58.0-aarch64-unknown-linux-gnu": "d228ee69d7552d66f637d0afed4d43098fe0b87fc4cd15ff670f06aec642e171",
-    "clippy-1.58.0-aarch64-unknown-linux-musl": "5dd6ae5262d0b02f417d37698e9ed72a44880cf389e6ca4c2ad6fdcddbc87e3d",
-    "clippy-1.58.0-x86_64-apple-darwin": "98489c63d307db213c66d18f375c4feca49eaca1a48967d0b13e5395a1564924",
-    "clippy-1.58.0-x86_64-pc-windows-msvc": "52ca3e4cf88a39ed02aa573de29a88868b5bf326c4d148b12b791071d004c79a",
-    "clippy-1.58.0-x86_64-unknown-freebsd": "801695120c015e84980408fce40ce0797c7720c291a7d8b56ca0a642d133d336",
-    "clippy-1.58.0-x86_64-unknown-linux-gnu": "747524e25f22659447bef677083625657caa2138a945d44998eb375b4262f9c7",
-    "clippy-1.58.0-x86_64-unknown-linux-musl": "dd4bb678e1f48e6013b46e350355a4911dbef865d23613cb950cfe3691cae88c",
-    "clippy-1.58.1-aarch64-apple-darwin": "89e881ec4e8e2a54cef8999fc85bfec72fc749f4bf3eb292d0b6b7318652992b",
-    "clippy-1.58.1-aarch64-unknown-linux-gnu": "efc65bf92fc1011dc34805d6b2ae18ecebd85f9593fc4dffd9dd1e59daf6eb6a",
-    "clippy-1.58.1-aarch64-unknown-linux-musl": "d28e4e64aa8b96dea036165481ba0b3df118edad7cead3902b1bfe5becf0dd33",
-    "clippy-1.58.1-x86_64-apple-darwin": "e5a67b36bec6c0ba128f134fd08621a6a72b08db64020592b171ea66a1af300d",
-    "clippy-1.58.1-x86_64-pc-windows-msvc": "ee3186a2fe0dd68cfc4d63771d5cb67fd7c34bffcf8bc60fc7f0e70e0c37e94e",
-    "clippy-1.58.1-x86_64-unknown-freebsd": "e52bdea9a882c610b4510011f36b359df5dd0c6b33e3e6c7c1ea1336b59774e9",
-    "clippy-1.58.1-x86_64-unknown-linux-gnu": "8a750e67626799c6d7c2424f5ba47c9d9d4aa128bc2f7b78f9bedb8e4e8c46a3",
-    "clippy-1.58.1-x86_64-unknown-linux-musl": "74ee750364731d8a1f67a7dda33381e64f07adb8af782a5fd00f1b8b5f09b083",
-    "clippy-1.59.0-aarch64-apple-darwin": "37e2589cb182da7c7878eac4386973ee0539e11de6cea047d500247e57214573",
-    "clippy-1.59.0-aarch64-unknown-linux-gnu": "d4278d73c317d487ea4cdfbaf43ffe048744c0ce887c584eb396016b9cc007af",
-    "clippy-1.59.0-aarch64-unknown-linux-musl": "9f8e96d61a23c83cc59c44bac7b42b997f173974ee8b6cd4a9c3b4a54caa0107",
-    "clippy-1.59.0-x86_64-apple-darwin": "932e843d538f3775d7996ad2f9a4e412f431d413c6585521fc95dba85aca2bad",
-    "clippy-1.59.0-x86_64-pc-windows-msvc": "786751cdc3b1937c19e555255092c888509e81ab6295887da0e92f1de7f5900d",
-    "clippy-1.59.0-x86_64-unknown-freebsd": "d1c2ab40e6be423d4d4e29af85b56dec090cc49afb82684c07b0cb19317d043b",
-    "clippy-1.59.0-x86_64-unknown-linux-gnu": "aad54aae93bd8cad8fa1ae77a0e4f79b8439d471b1478a0fb67294497a782edb",
-    "clippy-1.59.0-x86_64-unknown-linux-musl": "23b57a9b3b30b6724df278860d9700e50e88b5dff5afd8b8ddaf0bf235695762",
-    "llvm-tools-1.36.0-aarch64-unknown-linux-gnu": "942856e49837a1c3b9c7d48b52cf0ac0fcb2bb31bb691fe53bfb934afb561c7f",
-    "llvm-tools-1.36.0-x86_64-apple-darwin": "ed702a4174a27fcf118f301e79835c3da205d3d98adb4acc294b72293a2ec790",
-    "llvm-tools-1.36.0-x86_64-pc-windows-msvc": "cf72242bcf873227c026505f56f3ffdaa2febde828d67ad7fc04c4a2e72d7587",
-    "llvm-tools-1.36.0-x86_64-unknown-freebsd": "37c19db740acbe462d878fe193b59653a5073b23a840c6a2e2924772c0642b56",
-    "llvm-tools-1.36.0-x86_64-unknown-linux-gnu": "beae1690418b4adffac166fbfde525be8f5e2b2ce220ffd19b420edb1efa4477",
-    "llvm-tools-1.36.0-x86_64-unknown-linux-musl": "6f2754a2305792e3160fe3d1710e8609b242fbe753b8b18867acf6f3d326dc95",
-    "llvm-tools-1.37.0-aarch64-unknown-linux-gnu": "fb7cea148816422466aee656d81b08f9cb819cff8c431574f08c281b58547413",
-    "llvm-tools-1.37.0-x86_64-apple-darwin": "b882607b0f181d3942eb00a13cb375d820d000ced456a0cfd626ad79f597f8ac",
-    "llvm-tools-1.37.0-x86_64-pc-windows-msvc": "804a1455879b72f9439e9f2d6469f328847ccb432f69b41ccbad2ecc0e124fb2",
-    "llvm-tools-1.37.0-x86_64-unknown-freebsd": "206bf31dc2851a27b697acd5ad978d2b0d1cfdf26e01b7798388030591fa7899",
-    "llvm-tools-1.37.0-x86_64-unknown-linux-gnu": "da54ade6c7e2776edab1b6f1216477168cadf30fe40e503cca8b4bce20d89bc6",
-    "llvm-tools-1.37.0-x86_64-unknown-linux-musl": "737f6f903340700c7953c46f3143418d90f8bc1f879cd940ce0bcc479109b7d4",
-    "llvm-tools-1.38.0-aarch64-unknown-linux-gnu": "dbbfdc0dd802feb94e8e0f0eb0dad2c2f3e6bf69bb58d371622c94e8c7e82e25",
-    "llvm-tools-1.38.0-x86_64-apple-darwin": "7a4f8502b93e6fc3a4d89ab94230a90c94778d17badcdde25ebb545f4e37a7c0",
-    "llvm-tools-1.38.0-x86_64-pc-windows-msvc": "da005a040ee70728c224eb23d1374420422ac64e2b4ba328ac6d7b5934389061",
-    "llvm-tools-1.38.0-x86_64-unknown-freebsd": "f4da25e84e31a78b6f761b3f597c98391bd6873298c7708dc886b2c72f56f874",
-    "llvm-tools-1.38.0-x86_64-unknown-linux-gnu": "0fff5bc69ebf49fec0372aa73f9b6757b8a6bb506f14f48d153e6f14de2fd19a",
-    "llvm-tools-1.38.0-x86_64-unknown-linux-musl": "5877d995125b6d17f25f23f9eaccb5775dc2bde5f3b7062fff8cad23221e80e8",
-    "llvm-tools-1.39.0-aarch64-unknown-linux-gnu": "9c7eae2e5770d20872f6012b273d2ca5dab09f97f497a0cc82ea5af8e2b08527",
-    "llvm-tools-1.39.0-x86_64-apple-darwin": "52c15480345a18d55a2141a9f440fe874a8686d3d94e4637b2c4884df7c88a43",
-    "llvm-tools-1.39.0-x86_64-pc-windows-msvc": "87b7cf10ebab53bb7fab625d603f80e35111afaeacd915df63c19ad68382f31f",
-    "llvm-tools-1.39.0-x86_64-unknown-freebsd": "f451ffb87b00a277264c5acf5267f8df61300089a9798607b4cdfebc88fabee1",
-    "llvm-tools-1.39.0-x86_64-unknown-linux-gnu": "0a87b543e3841d415887a4543587b783fce678a7097a774a56a2032cee842991",
-    "llvm-tools-1.39.0-x86_64-unknown-linux-musl": "da87e08670b7dad359f3d0b3f132d212713dcb21cf1c5e308acf257632de0075",
-    "llvm-tools-1.40.0-aarch64-unknown-linux-gnu": "caf36148d0f5a885cad05605d80cc2c805ce8456837b6dbb34b47420a4d52475",
-    "llvm-tools-1.40.0-x86_64-apple-darwin": "d4c4abb2a7b2800500ef4e0a46493c5340bb7b0be84d38897573281e93b8577f",
-    "llvm-tools-1.40.0-x86_64-pc-windows-msvc": "0fe4cfa0e4ce99e45c810b8301edcdfa694db75e291b497ce8c52ec5b89e4861",
-    "llvm-tools-1.40.0-x86_64-unknown-freebsd": "aa11c881fa728fa8df233c220fecd6b25cb27cbb673569cbd9a90865ae464d9f",
-    "llvm-tools-1.40.0-x86_64-unknown-linux-gnu": "40c5ad2c53802b8b722ebd5a06b9f51f32644d8a6d6fdc32aacc60a33bed5839",
-    "llvm-tools-1.40.0-x86_64-unknown-linux-musl": "8e98e884442ade699f951bdab603a012c683de5809cae6bcb25bdc81abc3c4db",
-    "llvm-tools-1.41.0-aarch64-unknown-linux-gnu": "279aedca8c3c12a0608de9a51fa38a33b910600e4f980487c1706cec29270c63",
-    "llvm-tools-1.41.0-x86_64-apple-darwin": "621676b4ae3d75662463876315a58bd188ceb4b22ff249ad033e0181fe30df74",
-    "llvm-tools-1.41.0-x86_64-pc-windows-msvc": "6d1b3a2a74497b0a4e9420d87a6fa462dc608a3b41d4dae9f164cf66c290a00d",
-    "llvm-tools-1.41.0-x86_64-unknown-freebsd": "311a056371edbad2194b5714f3e8d17e7a897f27b67bdbe2d827ed437d06d050",
-    "llvm-tools-1.41.0-x86_64-unknown-linux-gnu": "d2cfa10a162cd9b63c5b8eb3db49560532c11823bb15f836abc5e42cca1a1170",
-    "llvm-tools-1.41.0-x86_64-unknown-linux-musl": "dd176d66f6f04d2e1c0deeb11d07d5882937af6c72121cad4bc7e63bba3fa0ff",
-    "llvm-tools-1.42.0-aarch64-unknown-linux-gnu": "7601ef92b42a321fee08f6adce3ca0eb612ca8703fda1db63e30bd4952f7fcc9",
-    "llvm-tools-1.42.0-x86_64-apple-darwin": "c4c0319e8be687b104162ce3654249ed76040229a77d77016e32570fbfbd3439",
-    "llvm-tools-1.42.0-x86_64-pc-windows-msvc": "721b14d159d6df877991db62a0f5fcd11d8d9cd642d8f51311a2d2c99c0f9e43",
-    "llvm-tools-1.42.0-x86_64-unknown-freebsd": "4fc2bb1ab454b21750c78f9ce19d7138e4929a804770202319a3f457b1e5c2f9",
-    "llvm-tools-1.42.0-x86_64-unknown-linux-gnu": "d306ee9009eeab2062b813123628cc440f58c71c0e1d53afe1563f4eb1a5e0e4",
-    "llvm-tools-1.42.0-x86_64-unknown-linux-musl": "7fc21cc7f2a8879b052fed92fedff55df5afd528912c8405ec67640f663d716e",
-    "llvm-tools-1.43.0-aarch64-unknown-linux-gnu": "647dc36be8dc5130a703f6ba151bc79936503d0251481ba40bfacc5bfa251947",
-    "llvm-tools-1.43.0-x86_64-apple-darwin": "890bf12d80b72fc0c58966e1d229cfb24764eabe356762dcaf126afbd63fd47d",
-    "llvm-tools-1.43.0-x86_64-pc-windows-msvc": "e299dea627f89f6b14897d45f39dba3036298b2c94f35ba4dfea276996682977",
-    "llvm-tools-1.43.0-x86_64-unknown-freebsd": "6a64cc4b3dd0b8218b350b4fad36197edf2da33e5ab43c4670737e4d392ba586",
-    "llvm-tools-1.43.0-x86_64-unknown-linux-gnu": "4f62cab67e89d78d886cb03379d71f6722f8c5e5c069b3c243e334381c5948cf",
-    "llvm-tools-1.43.0-x86_64-unknown-linux-musl": "ea90e9540b5618698088171793dc571614d434571d6c81a80259a597d536a265",
-    "llvm-tools-1.44.0-aarch64-unknown-linux-gnu": "e25ee71a187d6c8969b17788fb678c9b358034ad2a2fb7557b755534eaf9cfa6",
-    "llvm-tools-1.44.0-x86_64-apple-darwin": "d684de7783ee15537f78231acacb9079f821c8c8b85b889e54c40b095ae6b0a1",
-    "llvm-tools-1.44.0-x86_64-pc-windows-msvc": "ac84fcc25d5d8d20592d6491576df7a72059fe9317889692badac2fc9028bd8a",
-    "llvm-tools-1.44.0-x86_64-unknown-freebsd": "3f4a17239b9dc9e84d98922ea4725f741249ba597ac1345b09c818b54b7a0765",
-    "llvm-tools-1.44.0-x86_64-unknown-linux-gnu": "1755b589718c652071e354c3629f41a9a90a84a3649078ed697e630ba19b3592",
-    "llvm-tools-1.44.0-x86_64-unknown-linux-musl": "c3abf2adba70a8cce16e4a6962b6868238858e54c9822cec64c5f981e43489b8",
-    "llvm-tools-1.45.0-aarch64-unknown-linux-gnu": "1432bf52b301e16a5a57398a7f59bcee43358913627c7caf7b1568cd8824c5c4",
-    "llvm-tools-1.45.0-x86_64-apple-darwin": "9c4e5488be910b8b5ded830ea4c8844090801d3f35e7d9cb1f272e3e7df90a0d",
-    "llvm-tools-1.45.0-x86_64-pc-windows-msvc": "5a2b5f49e04def6bc6bdb148412bf62ca7fd01d0e8ed61d07fe6716003425350",
-    "llvm-tools-1.45.0-x86_64-unknown-freebsd": "dbeaa09b90aab06a8450afaa9018a859a440be48d98e9437a7d827a138d3ae7a",
-    "llvm-tools-1.45.0-x86_64-unknown-linux-gnu": "54a2ac31ad53d3d346c571fa1d25b730b614a8214b5484c511f21f7dd0bdbd5f",
-    "llvm-tools-1.45.0-x86_64-unknown-linux-musl": "5e610db342edfb61ac702b36eebb4cfa1a4d2c0b89ca400b2ca89055167e07fc",
-    "llvm-tools-1.46.0-aarch64-unknown-linux-gnu": "1d8107ff0682d20c37a0d42f54fa1e2e96e70f7c4694fc71a84f7b32e3793247",
-    "llvm-tools-1.46.0-x86_64-apple-darwin": "1045f55a6e59326e0f5b46616e8c945f0cc04c4519f21aa095f87b3e35420422",
-    "llvm-tools-1.46.0-x86_64-pc-windows-msvc": "037719e7774bae1e3084949123a8a10d4d2c89134849333a53c7dcad00fe412e",
-    "llvm-tools-1.46.0-x86_64-unknown-freebsd": "55d9194cd9ac3f26f95f4f94db899c86b140753ef57aa2996dd8be528eaf8ae0",
-    "llvm-tools-1.46.0-x86_64-unknown-linux-gnu": "2a98e7290148575cdc6230610fca3ce68d1bd7b7dd105124f8a1673859ecc9ad",
-    "llvm-tools-1.46.0-x86_64-unknown-linux-musl": "431339bdd829224c0d3a3c835d65de95e52f042c1e0c3a286718055af4b2b977",
-    "llvm-tools-1.47.0-aarch64-unknown-linux-gnu": "6f9cc27ea4d33ef81be176392d169a2ca2ba6d3e6e8c037917133823cc4979c1",
-    "llvm-tools-1.47.0-x86_64-apple-darwin": "75a8381f7f521ad8afc8480e2bda27d3d3730b9ee154022deb26db3ca6216505",
-    "llvm-tools-1.47.0-x86_64-pc-windows-msvc": "e9a5d9db6f899904f094cc745a1b5cc47f7d7bbcb708217ad68933316e814880",
-    "llvm-tools-1.47.0-x86_64-unknown-freebsd": "47592da88536cf5c44085907c7e5d57bf695d5ac8add76d2c7d1c0518e6e05e6",
-    "llvm-tools-1.47.0-x86_64-unknown-linux-gnu": "a52c3cd18a6895c91a49d0a00f2cb4b12d64dd5b1ef6607fade1fed88fc36dac",
-    "llvm-tools-1.47.0-x86_64-unknown-linux-musl": "08ec337e44c1d83438d84e79dfacf6f123a8ed1af90c8130da784ded74966187",
-    "llvm-tools-1.48.0-aarch64-unknown-linux-gnu": "133e6b94d3c34d91ea9689c9288c66acf169d59877c0c924fc99b1fee283f4f4",
-    "llvm-tools-1.48.0-aarch64-unknown-linux-musl": "5a643eb72e06c4baa68ab38481b0e24ad40468e07dced9dfade04f469cce3b26",
-    "llvm-tools-1.48.0-x86_64-apple-darwin": "de0715d6cb0456da647750605ea1a3e3832278a4fa500d9c13bd148e7b278afe",
-    "llvm-tools-1.48.0-x86_64-pc-windows-msvc": "a0506c1619708e2bdf6bc198db5d130965613ec0609a9fe75556ce5effdf4f78",
-    "llvm-tools-1.48.0-x86_64-unknown-freebsd": "61a56f1436c7e4bfe68be160abb61989a8b4b4fef5e939764d488587484d6da3",
-    "llvm-tools-1.48.0-x86_64-unknown-linux-gnu": "a4932dafdc84a2c2f4f67a9aa207ce306c36a4ed8e682e6d79764d438ebd00b8",
-    "llvm-tools-1.48.0-x86_64-unknown-linux-musl": "904e1a0009819b626bd643cfe7f82d8de7e277e69aa0791de26fb3754d897046",
-    "llvm-tools-1.49.0-aarch64-apple-darwin": "78f666e9608c6b38f704447ef270170154c55dcda033e4fab00c42bebc3319a5",
-    "llvm-tools-1.49.0-aarch64-unknown-linux-gnu": "50228dd0c1ea9f483cac055fd1ff82f202427ef970266e904be01133c40f0c91",
-    "llvm-tools-1.49.0-aarch64-unknown-linux-musl": "0992328492832f96f4ee35661d8706e8e5f630bb92de117398f0b27556bc98cd",
-    "llvm-tools-1.49.0-x86_64-apple-darwin": "39c294fb87e6dc8c29975469a0566d4f8a47e50c1defe9f3dabbf1d598772bea",
-    "llvm-tools-1.49.0-x86_64-pc-windows-msvc": "3e57ff66c2a0091e3373e479fec699d3012e9249b7e0da36500fa0071308114f",
-    "llvm-tools-1.49.0-x86_64-unknown-freebsd": "c2b3c06bf4b2f6010f9927391c8e72f96642a528c486ec98f66c16066298e015",
-    "llvm-tools-1.49.0-x86_64-unknown-linux-gnu": "aecf6c322dc4064dcedf2315d443a69e099fc52e617711306fa1269cb180aa68",
-    "llvm-tools-1.49.0-x86_64-unknown-linux-musl": "c53b602056f48c38624942c1f6b6cc1a5a542cb56249a3a90c67355da531bd40",
-    "llvm-tools-1.50.0-aarch64-apple-darwin": "4a03b09dc15644fd5a10ac8aa1dc3ec32bc832f0c27bce4fa6128f18ac22a90d",
-    "llvm-tools-1.50.0-aarch64-unknown-linux-gnu": "25256ce02516667890abf82fa4d49a86f16dcea448d63c9a03782c0a3bbe05c1",
-    "llvm-tools-1.50.0-aarch64-unknown-linux-musl": "cfe980fe89486c78a5c88701e8ce6a9c7914030c703d2b3ee841b84c1ccdf31d",
-    "llvm-tools-1.50.0-x86_64-apple-darwin": "d8b018570e8ff163c4ab37a36ce16128b39c2ea55efd1be3caf14bdd85d03394",
-    "llvm-tools-1.50.0-x86_64-pc-windows-msvc": "728f7a656f27eb6361847d245d23b56b7109c7ef5f47117044e83aaf49fcc536",
-    "llvm-tools-1.50.0-x86_64-unknown-freebsd": "4300261729751c6a7353cc4a4bb3d6c448fcc24e90a82e3d626af037fb6aae4c",
-    "llvm-tools-1.50.0-x86_64-unknown-linux-gnu": "86871fb83afba38ba818286c20bc863798b64a7a403ecb0454535bf1a09df482",
-    "llvm-tools-1.50.0-x86_64-unknown-linux-musl": "98f2266ffbcf1d94e2d6961341ef6488ef3f49a81ae4c857c4b817cc9528535b",
-    "llvm-tools-1.51.0-aarch64-apple-darwin": "1a12dd5bd2c354a89737640ac105600f59fc038809ad4611b29eb0d225bd783d",
-    "llvm-tools-1.51.0-aarch64-unknown-linux-gnu": "5295ca2bbaa8d37942ed95f801107900d40f326f543edf4c80a1c2adf48fb077",
-    "llvm-tools-1.51.0-aarch64-unknown-linux-musl": "2dfbe582660bac4a674186a475a5a3d118aa2369dc70eb9d8e93cd13a66cb50f",
-    "llvm-tools-1.51.0-x86_64-apple-darwin": "1c52b39cae8fb17e64c311eb9ab66e475b6ae8190b35c6513344271b7e172d3e",
-    "llvm-tools-1.51.0-x86_64-pc-windows-msvc": "cb2dd2a21deb3228ce3e7e2495b95d34b5c985eae39126170d823ff1b585a240",
-    "llvm-tools-1.51.0-x86_64-unknown-freebsd": "a2f698841b8f860bf5a841f5f53dea8fd9df53c19c3b6d15cbe43a327696ffea",
-    "llvm-tools-1.51.0-x86_64-unknown-linux-gnu": "398a587c088ac159322bf47d1736409ab88d3a45eb9e09bfb7bacbbf20627e49",
-    "llvm-tools-1.51.0-x86_64-unknown-linux-musl": "0b7a9e46dd64fdef3ce22bd5a69d4599a17c120ae645fadadd7371b03f2dacd8",
-    "llvm-tools-1.52.0-aarch64-apple-darwin": "f3b3a9dbef7a00fe26a38d143585d3ca79b85c6dc6326c31ea3de178715d2456",
-    "llvm-tools-1.52.0-aarch64-unknown-linux-gnu": "9550b39d38ffdb32231fbc3893a362dc325448aa05b4197845d7fb799ec556e6",
-    "llvm-tools-1.52.0-aarch64-unknown-linux-musl": "7dd8f795ec2d9f2eeb67e98e08341ab46416bf8f307a8395d6c7d289f4f6a641",
-    "llvm-tools-1.52.0-x86_64-apple-darwin": "0160eca2c73cd54b47c226c6f0f6ae4841300bbf8384426bbfb03a814b30cf84",
-    "llvm-tools-1.52.0-x86_64-pc-windows-msvc": "baf0810ece6694ed431010a24d9c81386f150567b48f79fac952e411927d3058",
-    "llvm-tools-1.52.0-x86_64-unknown-freebsd": "cdb385cc036a9f354639050384584e64e6464a8ccfd422db17b3a2df82b88eb8",
-    "llvm-tools-1.52.0-x86_64-unknown-linux-gnu": "bd5056c50b92e48787d164d4d93db332c3f02e2913b3d86edabddfa248c3aeba",
-    "llvm-tools-1.52.0-x86_64-unknown-linux-musl": "2f5905d5b3198311d2b335ad59d6e14bde9e5eae201df5d723b8b07de37740eb",
-    "llvm-tools-1.52.1-aarch64-apple-darwin": "749d77f5877395081ccbdde25183a4934fa9f771191f1994ef67ab6b845b380f",
-    "llvm-tools-1.52.1-aarch64-unknown-linux-gnu": "94fad9186731f9428ec8a73165294810d63583a04798377298d1569ddf373503",
-    "llvm-tools-1.52.1-aarch64-unknown-linux-musl": "afd4fd18b981bda0a351bf5fff8f6cf76be877aa8840e5e5b159aaffa6979f69",
-    "llvm-tools-1.52.1-x86_64-apple-darwin": "ef5e0713fee477262bff9a8cb2212bd775050ea768a5ba50ceb33e13b58ede17",
-    "llvm-tools-1.52.1-x86_64-pc-windows-msvc": "6823c114ae05ebf515401e44d1ca6fb8d108cbaa495ace60c5fdbd7e81f2b32f",
-    "llvm-tools-1.52.1-x86_64-unknown-freebsd": "470789210cd51acab85662ea5d80f3275d0766f98f59399b6aa3741bde86e773",
-    "llvm-tools-1.52.1-x86_64-unknown-linux-gnu": "db70724d4010273644c4e0ef4739299940b47e307f3dbee094050703147b60f8",
-    "llvm-tools-1.52.1-x86_64-unknown-linux-musl": "ad0755ed04d3e17d11e99aab793a5752e6ef0943a92822874277a13f5b91373f",
-    "llvm-tools-1.53.0-aarch64-apple-darwin": "cd700c4ae2c6fe2a568f477a9db7d7c9cd1079456cd777aa04954fbb3bc64e37",
-    "llvm-tools-1.53.0-aarch64-unknown-linux-gnu": "916307648b13cd403e5d89e26dc0057a3d6517033b04199b905af7b216ff191b",
-    "llvm-tools-1.53.0-aarch64-unknown-linux-musl": "f19e5396e69a12c854294c61c2ba647e8d06a67750b4bc741c1ec8b44e27ad76",
-    "llvm-tools-1.53.0-x86_64-apple-darwin": "5a693b933e6755fc42983912c0a9197107b61c5ded051526aa0eed60cbb038cf",
-    "llvm-tools-1.53.0-x86_64-pc-windows-msvc": "8d2800c3460935386c0ea368460d0b4cadb152403d3125b9616a1b4fa856cfc4",
-    "llvm-tools-1.53.0-x86_64-unknown-freebsd": "221f677502c4d648e5578cf75224fb017dc4df486bbb15408100f6dc63fb72e9",
-    "llvm-tools-1.53.0-x86_64-unknown-linux-gnu": "4aa6e3c9ef91efc082a6741013fc7886dc669b1532c0c3b23f922e4307200800",
-    "llvm-tools-1.53.0-x86_64-unknown-linux-musl": "b5054bcd14e5a5361f29fe5efa970ab8340c75feebc3c6b7719ee4cf1cf1027a",
-    "llvm-tools-1.54.0-aarch64-apple-darwin": "61bb98566e77f998f59c2399c5db3b488cd88e4a7bcce74061bbbb6de5c85c62",
-    "llvm-tools-1.54.0-aarch64-unknown-linux-gnu": "95dd016daee815e6511ed09becba913e5aa1fc6b9ef42bc27d1a509f660dec99",
-    "llvm-tools-1.54.0-aarch64-unknown-linux-musl": "8cac2dd2d1ef582c77b37b6810122426369028351a66a355c38ff72efb8f6ec4",
-    "llvm-tools-1.54.0-x86_64-apple-darwin": "a287d049bf7beb3a3cddf62974e0450d21bb09da72ab453222dffc3f5ef72fef",
-    "llvm-tools-1.54.0-x86_64-pc-windows-msvc": "e1437993d0088f93871e2563c570fb62aec6109087227df7da8779ef226abbc3",
-    "llvm-tools-1.54.0-x86_64-unknown-freebsd": "024fcaabada32629381b5d1ec856d595eacf5cf506c43619d2ab454aeac7da4c",
-    "llvm-tools-1.54.0-x86_64-unknown-linux-gnu": "aa4000bccc5e463c9cc3aecb6b400813a0f122b5f14a747710f23b838b4fbcc8",
-    "llvm-tools-1.54.0-x86_64-unknown-linux-musl": "b0e2a74c6e1fb0c9fa888887996cb168c0d119ee4596736a4785b1200b79021b",
-    "llvm-tools-1.55.0-aarch64-apple-darwin": "00a0a90cd743480a192d3f1c905d57b98986d75c88fc738effcbc50c43b0ab85",
-    "llvm-tools-1.55.0-aarch64-unknown-linux-gnu": "259a183333a4f19eded8a2b6fa4382b7f36a9a23605d0f0a7b59a28d794c77d1",
-    "llvm-tools-1.55.0-aarch64-unknown-linux-musl": "a6a6756bb3091d15b772e57189c4279d17e218193b7d795b307effb88d269ef5",
-    "llvm-tools-1.55.0-x86_64-apple-darwin": "fce7354b071f2da56a100f89846e0c5bb3848f2e85e8583102f1d8b409214a95",
-    "llvm-tools-1.55.0-x86_64-pc-windows-msvc": "03307e359512652648b296cecf1e446befbeaf4a3a73db5cec1e6dfbc03f6376",
-    "llvm-tools-1.55.0-x86_64-unknown-freebsd": "f186caf30fadf738275f4daf077815445b4c3496cc7d3e85fbf53b5f8f57eb21",
-    "llvm-tools-1.55.0-x86_64-unknown-linux-gnu": "ebad576075c4dd039444ca7335ff244d6c0c566a7ee1532ac80d36a2de1217a5",
-    "llvm-tools-1.55.0-x86_64-unknown-linux-musl": "28de296a08d173bf5bad236935ccc547c8eb741fb91900cb10499e80e2472ec5",
-    "llvm-tools-1.56.0-aarch64-apple-darwin": "4ad514255a87b0aba52bf995cb999bc7b34d42419b675fd757664d6682a45210",
-    "llvm-tools-1.56.0-aarch64-unknown-linux-gnu": "9518804888281bd1b0c8d8467d7c3e312342649ce3660248728a8d4faa193564",
-    "llvm-tools-1.56.0-aarch64-unknown-linux-musl": "095acf10efb3a4561758da9f9374488ab73c88a2f78b6d1ee97147ac8f039fe9",
-    "llvm-tools-1.56.0-x86_64-apple-darwin": "e40341be6619513f50bf89d445e3b30696853f3553bbe98fa9aa3527cd7c49cd",
-    "llvm-tools-1.56.0-x86_64-pc-windows-msvc": "838bf630fdaa404f9899a92e58c1b5646f4f4b6d54729e4f1c3aade5585a74f7",
-    "llvm-tools-1.56.0-x86_64-unknown-freebsd": "05225a9aeb481757b470ee604a129bfc7707d85dc487fffcc2585f4124e012d9",
-    "llvm-tools-1.56.0-x86_64-unknown-linux-gnu": "ac54b5c1bae0955945cd779291bc443b3e6d52f217ce1078a3505bae1c0e2ff2",
-    "llvm-tools-1.56.0-x86_64-unknown-linux-musl": "9512db06f3090028b0ba26aeea21c3a80e6676177c92cfa1e60d13acd6871f0e",
-    "llvm-tools-1.56.1-aarch64-apple-darwin": "8feb4429f37d2c59a97a657052a8518492ea3e0c43b37af1e44407bb04d5fd8c",
-    "llvm-tools-1.56.1-aarch64-unknown-linux-gnu": "3c831ad4ee247ae29a5acecba1609d70b02777ba8181d40a945d2efedebc8126",
-    "llvm-tools-1.56.1-aarch64-unknown-linux-musl": "bf62fb69c222c41c83cb5e647dbce207519724c92de8e05015e7fe62396ad33e",
-    "llvm-tools-1.56.1-x86_64-apple-darwin": "75dc2fb8105e33e3f86753eb2f97615f62bc3433591c31f63fa7c4c12b643321",
-    "llvm-tools-1.56.1-x86_64-pc-windows-msvc": "34ff6e95ce6397b954691f5ae59068bf33f8ecf71fe8aa8b1ac2db6eaff81720",
-    "llvm-tools-1.56.1-x86_64-unknown-freebsd": "b8d281cdae768bdd87409e69c916612e1fed29334d861fd07b0d44dd8b6d086d",
-    "llvm-tools-1.56.1-x86_64-unknown-linux-gnu": "61e322fc405540fae66790a0317d3fe4bb500da20879ef53c14eb32e93590ee6",
-    "llvm-tools-1.56.1-x86_64-unknown-linux-musl": "880e2eae8998ee390c3cd325b1806adb627c7491a252af99fc87f43380e1f11a",
-    "llvm-tools-1.57.0-aarch64-apple-darwin": "712e59804a2dc7c0f0a91680c3ccd7463bfe75784e508b4a47b7eebff258867f",
-    "llvm-tools-1.57.0-aarch64-unknown-linux-gnu": "340fcbf4555cc56232225284b500679f33601689bde3122cd54af7648c9d0ce1",
-    "llvm-tools-1.57.0-aarch64-unknown-linux-musl": "5de4f546695db024c74ad8c4ffbd03f549ce6476bdad8d40bd8fce59e4c3d4ce",
-    "llvm-tools-1.57.0-x86_64-apple-darwin": "4ee2065bf9ca04894c6ea700f5fe13f222843dc34b1bf92fc94f37c03e47f6b3",
-    "llvm-tools-1.57.0-x86_64-pc-windows-msvc": "dd042fd62e75ff14c1638b9a63072eac42530d29deca2c0277964091f974d3b7",
-    "llvm-tools-1.57.0-x86_64-unknown-freebsd": "0d23df22a31816f5545b5af083dde75a74060889b42ebc8231795bd478f803ce",
-    "llvm-tools-1.57.0-x86_64-unknown-linux-gnu": "bb2f45e0efe77886da2b8b9d3519b6a2929d1654258158d847996867d5b4ab40",
-    "llvm-tools-1.57.0-x86_64-unknown-linux-musl": "7c53a882379938b319c859f41d1f5569b66f1b4f03e745dec2bb3dc8eb11f2b4",
-    "llvm-tools-1.58.0-aarch64-apple-darwin": "55b8ac5d42e3910d7f77f2022a964ec54e4c8082cc6624070d8664c4449b5161",
-    "llvm-tools-1.58.0-aarch64-unknown-linux-gnu": "765d797cc11d746616d71015a52e564220e4e10b8f10efa2fd5fb74ba308ce30",
-    "llvm-tools-1.58.0-aarch64-unknown-linux-musl": "e4b221ea279f698eab0bfebfd2dabca8e2b02c0423c48fb5d0ef281920771b99",
-    "llvm-tools-1.58.0-x86_64-apple-darwin": "7e3f807c85d8b6ff00747d20e88c115bb56a52ac1964593b5ff6bff84bf05647",
-    "llvm-tools-1.58.0-x86_64-pc-windows-msvc": "11aa6d93678766ea8a4625146de43290418f3b9076a69bb183b12613fafc7e5a",
-    "llvm-tools-1.58.0-x86_64-unknown-freebsd": "5950fe6c5a9c27ce0e85d07fd54cfa0ae0687a797e4cc957e91d2deb07451ad1",
-    "llvm-tools-1.58.0-x86_64-unknown-linux-gnu": "26cee659335a999d1c9dd47ac2bd2a8c94c2d42f7cda27b96b419f0c0c785bc7",
-    "llvm-tools-1.58.0-x86_64-unknown-linux-musl": "b20c27a6cfef891f4ac9bfcd06c38dd17f9f4021a7876599092da84c318b8b6b",
-    "llvm-tools-1.58.1-aarch64-apple-darwin": "c43a9166c2cbcc1858afe2de696ee3e6233316603e9f5963bedaaf200a531d29",
-    "llvm-tools-1.58.1-aarch64-unknown-linux-gnu": "bec9207417c9bafa311119565e2a38f36d3aca5f642b8f0e19eb6fa0898fca5c",
-    "llvm-tools-1.58.1-aarch64-unknown-linux-musl": "0faff43fbfc9806355861b906fa0a32dca786843874fcaa7cf911f3899fe9313",
-    "llvm-tools-1.58.1-x86_64-apple-darwin": "0810cbbe2c590ed03128075aaccc77fffb16ceb41bb92490dca2c018117040da",
-    "llvm-tools-1.58.1-x86_64-pc-windows-msvc": "8c5887ebb551ba392cbe915474b4c2494c4b36ece102683240cf4150c5dc1718",
-    "llvm-tools-1.58.1-x86_64-unknown-freebsd": "b33b2ffa80bb8e3f116b15532acafe56bfb799973ccd97fbe35cb5c8eaeeb8bb",
-    "llvm-tools-1.58.1-x86_64-unknown-linux-gnu": "3d003e6b2a38a6364667ce033ba3fe8029320acbb5b34f9bb103001ffcfef044",
-    "llvm-tools-1.58.1-x86_64-unknown-linux-musl": "a3206ec957f0e8728ad79203f700e4a7d64acccf8b83d11209ac5e459eadab2d",
-    "llvm-tools-1.59.0-aarch64-apple-darwin": "474ba73365de82fa00940887d945931dde56efeb28789c036ab62b90c2e528d1",
-    "llvm-tools-1.59.0-aarch64-unknown-linux-gnu": "e3bc96a602e8cb7768f279c020a3830417e767095dc784b1549510de42c37f5b",
-    "llvm-tools-1.59.0-aarch64-unknown-linux-musl": "5b28d1c6a73b99346dc9f29b4fb0b475814d8bcc3fd9661a2b53bedf606f1bc3",
-    "llvm-tools-1.59.0-x86_64-apple-darwin": "988593882b294423fbd88895b88887da8b47bf28946ae78263b0169a2b2b4597",
-    "llvm-tools-1.59.0-x86_64-pc-windows-msvc": "45f393a71799392ff73cfb17ee071b7304b304c8375db6cdd86f3025b4ba56b0",
-    "llvm-tools-1.59.0-x86_64-unknown-freebsd": "dbb0a7ad6c0e7a87e55a8e3fad05c1ed9ee5944e41e841267d0dfbb748060135",
-    "llvm-tools-1.59.0-x86_64-unknown-linux-gnu": "3bea89788f101b7ea1aca5dad94c3d2bd5f5133999ba78cea878ecad00c8c602",
-    "llvm-tools-1.59.0-x86_64-unknown-linux-musl": "db090aa8093efe163f54e1b211846b9061f835ba21e55cca2e37a5af7ad40e80",
-    "rust-1.26.0-aarch64-unknown-linux-gnu": "e12dc84bdb569cdb382268a5fe6ae6a8e2e53810cb890ec3a7133c20ba8451ac",
-    "rust-1.26.0-x86_64-apple-darwin": "38708803c3096b8f101d1919ee2d7e723b0adf1bc1bb986b060973b57d8c7c28",
-    "rust-1.26.0-x86_64-pc-windows-msvc": "20631bf942242d4be82363030839851bf18a2199b74a661bdc334f830e9e1d5a",
-    "rust-1.26.0-x86_64-unknown-freebsd": "a03cbe097670042c90d18654fbc852c9d473261d61c03d0f745bbaee759780ed",
-    "rust-1.26.0-x86_64-unknown-linux-gnu": "13691d7782577fc9f110924b26603ade1990de0b691a3ce2dc324b4a72a64a68",
-    "rust-1.26.1-aarch64-unknown-linux-gnu": "d4a369053c2dfd5f457de6853557dab563944579fa4bb55bc919bacf259bff6d",
-    "rust-1.26.1-x86_64-apple-darwin": "ebf898b9fa7e2aafc53682a41f18af5ca6660ebe82dd78f28cd9799fe4dc189a",
-    "rust-1.26.1-x86_64-pc-windows-msvc": "56c2398de358094606afba419c1e1a9e499cbe6f894315e99cfebda9f765c52f",
-    "rust-1.26.1-x86_64-unknown-freebsd": "910128f60c680e175ae93722272f491c6835f27652f9f3fe415dc0d9c482e204",
-    "rust-1.26.1-x86_64-unknown-linux-gnu": "b7e964bace1286696d511c287b945f3ece476ba77a231f0c31f1867dfa5080e0",
-    "rust-1.26.2-aarch64-unknown-linux-gnu": "3dfad0dc9c795f7ee54c2099c9b7edf06b942adbbf02e9ed9e5d4b5e3f1f3759",
-    "rust-1.26.2-x86_64-apple-darwin": "f193705d4c0572a358670dbacbf0ffadcd04b3989728b442f4680fa1e065fa72",
-    "rust-1.26.2-x86_64-pc-windows-msvc": "c4195cc0541db7cb08d503cc38917f6f40f53826001e86d613a48bd7387ac6a0",
-    "rust-1.26.2-x86_64-unknown-freebsd": "0ad985cf36b3946f086fd3c3c6eb97b0c94b24285147a04da22c00d4d522727a",
-    "rust-1.26.2-x86_64-unknown-linux-gnu": "d2b4fb0c544874a73c463993bde122f031c34897bb1eeb653d2ba2b336db83e6",
-    "rust-1.27.0-aarch64-unknown-linux-gnu": "e74ebc33dc3fc19e501a677a87b619746efdba2901949a0319176352f556673a",
-    "rust-1.27.0-x86_64-apple-darwin": "a1d48190992e01aac1a181bce490c80cb2c1421724b4ff0e2fb7e224a958ce0f",
-    "rust-1.27.0-x86_64-pc-windows-msvc": "795585a4f49dfcfd719dd6678713d0e84979b265ae9265dcb26b45c67b3a883a",
-    "rust-1.27.0-x86_64-unknown-freebsd": "f0754434f76f261ecdfd7ea3645b251b0188e263c0c7a7466aafac1b034d20ec",
-    "rust-1.27.0-x86_64-unknown-linux-gnu": "235ad78e220b10a2d0267aea1e2c0f19ef5eaaff53ad6ff8b12c1d4370dec9a3",
-    "rust-1.27.1-aarch64-unknown-linux-gnu": "d1146b240e6f628224c3a67e3aae2a57e6c25d544115e5ece9ce91861ec92b3a",
-    "rust-1.27.1-x86_64-apple-darwin": "475be237962d6aef1038a2faada26fda1e0eaea5d71d6950229a027a9c2bfe08",
-    "rust-1.27.1-x86_64-pc-windows-msvc": "24fb59a42277487ab1aaf8ac8b7a988843ae851ffe4a3386d9339e99e42d08d0",
-    "rust-1.27.1-x86_64-unknown-freebsd": "739d38036c9f08c13bc7425cc5cccd3dd37860fa6e9dfc7bcd9081c8d3c5ccdd",
-    "rust-1.27.1-x86_64-unknown-linux-gnu": "435778a837af764da2a7a7fb4d386b7b78516c7dfc732d892858e9a8a539989b",
-    "rust-1.27.2-aarch64-unknown-linux-gnu": "cf84da70269c0e50bb3cc3d248bae1ffcd70ee69dc5a4e3513b54fefc6685fb4",
-    "rust-1.27.2-x86_64-apple-darwin": "30c5cc58759caa4efdf2ea7d8438633139c98bee3408beb29ceb26985f3f5f70",
-    "rust-1.27.2-x86_64-pc-windows-msvc": "be1cccbd4cc00d473cb19fee4402d0ffde3b1e3ca3701926d47590878bc88508",
-    "rust-1.27.2-x86_64-unknown-freebsd": "b114c5eebc120b360d4d3c4360421ff181cc47bb311e161d3af6971b6d3e6244",
-    "rust-1.27.2-x86_64-unknown-linux-gnu": "5028a18e913ef3eb53e8d8119d2cc0594442725e055a9361012f8e26f754f2bf",
-    "rust-1.28.0-aarch64-unknown-linux-gnu": "9b6fbcee73070332c811c0ddff399fa31965bec62ef258656c0c90354f6231c1",
-    "rust-1.28.0-x86_64-apple-darwin": "5d7a70ed4701fe9410041c1eea025c95cad97e5b3d8acc46426f9ac4f9f02393",
-    "rust-1.28.0-x86_64-pc-windows-msvc": "5990e79259967a6a176aa5e4c55c6395f0c9262eed61ea858cfb909bac477542",
-    "rust-1.28.0-x86_64-unknown-freebsd": "cac701973239cbec802780855b172a3cc85ce15602e72873fe966d9d7d807e07",
-    "rust-1.28.0-x86_64-unknown-linux-gnu": "2a1390340db1d24a9498036884e6b2748e9b4b057fc5219694e298bdaa37b810",
-    "rust-1.29.0-aarch64-unknown-linux-gnu": "0ed3be0fd9f847afeb4e587fff61f6769ea61b53719d3ea999326284e8975b36",
-    "rust-1.29.0-x86_64-apple-darwin": "28a0473637585742f6d80ccd8afd88b6b400e65d623c33cb892412759444da93",
-    "rust-1.29.0-x86_64-pc-windows-msvc": "64f8c85540520c82d579d7eac5e2a524b42a6083cc46c7e80181512651a66fef",
-    "rust-1.29.0-x86_64-unknown-freebsd": "3500b1683849cbe526bb79f460147aa387b79a4f9a6a4760e276f73ddbffafd5",
-    "rust-1.29.0-x86_64-unknown-linux-gnu": "09f99986c17b1b6b1bfbc9dd8785e0e4693007c5feb67915395d115c1a3aea9d",
-    "rust-1.29.1-aarch64-unknown-linux-gnu": "2685224f67b2ef951e0e8b48829f786cbfed95e19448ba292ac33af719843dbe",
-    "rust-1.29.1-x86_64-apple-darwin": "07b07fbd6fab2390e19550beb8008745a8626cc5e97b72dc659061c1c3b3d008",
-    "rust-1.29.1-x86_64-pc-windows-msvc": "ec15b45be27b4406122518b2949f6186f0d9d422f23a946ab4de43716cc8e492",
-    "rust-1.29.1-x86_64-unknown-freebsd": "4055a9e9990f83f6c0d4f2040b2704edb8dbdaf82933f8598ab4ee31c541bbb9",
-    "rust-1.29.1-x86_64-unknown-linux-gnu": "b36998aea6d58525f25d89f1813b6bfd4cad6ff467e27bd11e761a20dde43745",
-    "rust-1.29.2-aarch64-unknown-linux-gnu": "e11461015ca7106ef8ebf00859842bf4be518ee170226cb8eedaaa666946509f",
-    "rust-1.29.2-x86_64-apple-darwin": "63f54e3013406b39fcb5b84bcf5e8ce85860d0b97a1e156700e467bf5fb5d5f2",
-    "rust-1.29.2-x86_64-pc-windows-msvc": "7813396fb99021e9a8bccb2fc7e71b1b730d5f3aebbb09ffcc2ecb838a1073b4",
-    "rust-1.29.2-x86_64-unknown-freebsd": "2e209d505c730df6e68575424eec03ed924e12114ad60595602cb2513c6a382a",
-    "rust-1.29.2-x86_64-unknown-linux-gnu": "e9809825c546969a9609ff94b2793c9107d7d9bed67d557ed9969e673137e8d8",
-    "rust-1.30.0-aarch64-unknown-linux-gnu": "9690c7c50eba5a8461184ee4138b4c284bad31ccc4aa1f2ddeec58b253e6363e",
-    "rust-1.30.0-x86_64-apple-darwin": "07008d90932712282bc599f1e9a226e97879c758dc1f935e6e2675e45694cc1b",
-    "rust-1.30.0-x86_64-pc-windows-msvc": "960ca17c0c62ee250647c20b617e75912badb67ca8ade08c3224410a7c320ade",
-    "rust-1.30.0-x86_64-unknown-freebsd": "b4e5d00b318d56edb7ba9182af4210fca9d7f44b64bc1380456ff3c17584af52",
-    "rust-1.30.0-x86_64-unknown-linux-gnu": "f620e3125cc505c842150bd873c0603432b6cee984cdae8b226cf92c8aa1a80f",
-    "rust-1.30.1-aarch64-unknown-linux-gnu": "6d87d81561285abd6c1987e07b60b2d723936f037c4b46eedcc12e8566fd3874",
-    "rust-1.30.1-x86_64-apple-darwin": "3ba1704a7defe3d9a6f0c1f68792c084da83bcba85e936d597bac0c019914b94",
-    "rust-1.30.1-x86_64-pc-windows-msvc": "b0110a5ad461532b2cce59bc04346af739b4660e7241f92dde6442a11a5391c2",
-    "rust-1.30.1-x86_64-unknown-freebsd": "480db9003f8e8c4ad12f2868af2c1489a05b18a8dcc62985c52310a7a15201ce",
-    "rust-1.30.1-x86_64-unknown-linux-gnu": "a01a493ed8946fc1c15f63e74fc53299b26ebf705938b4d04a388a746dfdbf9e",
-    "rust-1.31.0-aarch64-unknown-linux-gnu": "4e68c70aba58004d9e86c2b4463e88466affee51242349a038b456cf6f4be5c9",
-    "rust-1.31.0-x86_64-apple-darwin": "5d4035e3cecb7df13e728bcff125b52b43b126e91f8311c66b143f353362606f",
-    "rust-1.31.0-x86_64-pc-windows-msvc": "9288248f1821ab53557cbc5728ade7d221b1670547b0c0ec35099e0b2993dcf4",
-    "rust-1.31.0-x86_64-unknown-freebsd": "936ca1503ab1f18d9a4a1cc27fbc655f2c532ba819e1109bb03f5c52c5fb4fdd",
-    "rust-1.31.0-x86_64-unknown-linux-gnu": "c8a2016109ffdc12a488660edc5f30c1643729efc15abe311ebb187437e506bf",
-    "rust-1.31.1-aarch64-unknown-linux-gnu": "29a7c6eb536fefd0ca459e48dfaea006aa8bff8a87aa82a9b7d483487033632a",
-    "rust-1.31.1-x86_64-apple-darwin": "8398b1b303bdf0e7605d08b87070a514a4f588797c6fb3593718cb9cec233ad6",
-    "rust-1.31.1-x86_64-pc-windows-msvc": "4d2aa25c9d79dca5aba67b7b1df1c1f0ad40fcfb25a4c1d364fd64dd17a63cf3",
-    "rust-1.31.1-x86_64-unknown-freebsd": "5cbb465a0843b31da217c51c4f9ebbb2508aa2ece41e9b98303101e12571de42",
-    "rust-1.31.1-x86_64-unknown-linux-gnu": "a64685535d0c457f49a8712a096a5c21564cd66fd2f7da739487f028192ebe3c",
-    "rust-1.32.0-aarch64-unknown-linux-gnu": "60def40961728212da4b3a9767d5a2ddb748400e150a5f8a6d5aa0e1b8ba1cee",
-    "rust-1.32.0-x86_64-apple-darwin": "f0dfba507192f9b5c330b5984ba71d57d434475f3d62bd44a39201e36fa76304",
-    "rust-1.32.0-x86_64-pc-windows-msvc": "51b0b64cc843d6e443bf19f89b61addb532ea61e02777c7e80a185a9a263776b",
-    "rust-1.32.0-x86_64-unknown-freebsd": "20d062493d01f1816014fe9dbe883bda06f1828a6ddbfb7ee5e4f1df20eb1c3a",
-    "rust-1.32.0-x86_64-unknown-linux-gnu": "e024698320d76b74daf0e6e71be3681a1e7923122e3ebd03673fcac3ecc23810",
-    "rust-1.33.0-aarch64-unknown-linux-gnu": "a308044e4076b62f637313ea803fa0a8f340b0f1b53136856f2c43afcabe5387",
-    "rust-1.33.0-x86_64-apple-darwin": "864e7c074a0b88e38883c87c169513d072300bb52e1d320a067bd34cf14f66bd",
-    "rust-1.33.0-x86_64-pc-windows-msvc": "b477be7a27799397cf90f09ef5efe21b1af02f48ec9bc1be3306ad298aaf8841",
-    "rust-1.33.0-x86_64-unknown-freebsd": "31ab015c1807a7c231ee74b4fb367f3fa43551d6c49cd2f7b63541f1fef0cc72",
-    "rust-1.33.0-x86_64-unknown-linux-gnu": "6623168b9ee9de79deb0d9274c577d741ea92003768660aca184e04fe774393f",
-    "rust-1.34.0-aarch64-unknown-linux-gnu": "370c3a8fb9a69df36d645a95e622fb59ac5b513baecddde706cedaf20defa269",
-    "rust-1.34.0-x86_64-apple-darwin": "e6bea8d865cc7341c17fa3b8f25f7989e6b04f53e9da24878addc524f3a32664",
-    "rust-1.34.0-x86_64-pc-windows-msvc": "471325ceb9492239f7bb399cb88df230791966c0f76f01020aa9d2868bafcfb5",
-    "rust-1.34.0-x86_64-unknown-freebsd": "bc9048312bee935ae1e7417e2f6840ea76fe370752915ca605ec7dc5b606dba9",
-    "rust-1.34.0-x86_64-unknown-linux-gnu": "170647ed41b497dc937a6b2556700210bc4be187b1735029ef9ccf52e2cb5ab8",
-    "rust-1.35.0-aarch64-unknown-linux-gnu": "31e6da56e67838fd2874211ae896a433badf67c13a7b68481f1d5f7dedcc5952",
-    "rust-1.35.0-x86_64-apple-darwin": "ac14b1c7dc330dcb53d8641d74ebf9b32aa8b03b9d650bcb9258030d8b10dbd6",
-    "rust-1.35.0-x86_64-pc-windows-msvc": "4f8935cea6b68c447b5fcb5974e0df3fefc77d15ab4f7d535779f06c3e4adc84",
-    "rust-1.35.0-x86_64-unknown-freebsd": "a6a3c7983a880d8e9bf475735b725c47de68831abc22da980e44a3aca5c5bd89",
-    "rust-1.35.0-x86_64-unknown-linux-gnu": "cf600e2273644d8629ed57559c70ca8db4023fd0156346facca9ab3ad3e8f86c",
-    "rust-1.35.0-x86_64-unknown-linux-musl": "3704219a4d16e4e9df22051877274c7b246d12658b447a85efa0b16037e98093",
-    "rust-1.36.0-aarch64-unknown-linux-gnu": "db78c24d93756f9fe232f081dbc4a46d38f8eec98353a9e78b9b164f9628042d",
-    "rust-1.36.0-x86_64-apple-darwin": "91f151ec7e24f5b0645948d439fc25172ec4012f0584dd16c3fb1acb709aa325",
-    "rust-1.36.0-x86_64-pc-windows-msvc": "c7c9f7f996d195f464b84eaf0b6a068b41d1480e088b12e5134f85a5a144bd30",
-    "rust-1.36.0-x86_64-unknown-freebsd": "eeeb1e9d0d7823c55f00f434789696e7249f465ba5966a5ab479040e3912c0e7",
-    "rust-1.36.0-x86_64-unknown-linux-gnu": "15e592ec52f14a0586dcebc87a957e472c4544e07359314f6354e2b8bd284c55",
-    "rust-1.36.0-x86_64-unknown-linux-musl": "74931a19a4854642cd1593a3bdcf8a832ab5b134a3cfacea9003f9ea387ca88d",
-    "rust-1.37.0-aarch64-unknown-linux-gnu": "263ef98fa3a6b2911b56f89c06615cdebf6ef676eb9b2493ad1539602f79b6ba",
-    "rust-1.37.0-x86_64-apple-darwin": "b2310c97ffb964f253c4088c8d29865f876a49da2a45305493af5b5c7a3ca73d",
-    "rust-1.37.0-x86_64-pc-windows-msvc": "4e42652e7bf7ef13b7fdf8c64d0adf4e18c6a765e482e4c62a4dded36d4d08e1",
-    "rust-1.37.0-x86_64-unknown-freebsd": "58a794fa9da9c14cefda55e7d4d13276517265a05a49f3a048033aee8870388f",
-    "rust-1.37.0-x86_64-unknown-linux-gnu": "cb573229bfd32928177c3835fdeb62d52da64806b844bc1095c6225b0665a1cb",
-    "rust-1.37.0-x86_64-unknown-linux-musl": "d97da4f1c1f89142b6885b006f8686c4035d25e95cfb988f961ce844e5b80dbf",
-    "rust-1.38.0-aarch64-unknown-linux-gnu": "06afd6d525326cea95c3aa658aaa8542eab26f44235565bb16913ac9d12b7bda",
-    "rust-1.38.0-x86_64-apple-darwin": "bd301b78ddcd5d4553962b115e1dca5436dd3755ed323f86f4485769286a8a5a",
-    "rust-1.38.0-x86_64-pc-windows-msvc": "99e2e22084a7c6a114f5353800677e1f7eb4b8cecf1b8841e21ac9579fe8da8c",
-    "rust-1.38.0-x86_64-unknown-freebsd": "a765b1f01a387b15b576b67c77e02609a6d9a6769584742f66f0cac1944c0f7f",
-    "rust-1.38.0-x86_64-unknown-linux-gnu": "adda26b3f0609dbfbdc2019da4a20101879b9db2134fae322a4e863a069ec221",
-    "rust-1.38.0-x86_64-unknown-linux-musl": "14f064fbd34b332866d96db12329ddd6d40525d69d7b8532d3d5387da1217e79",
-    "rust-1.39.0-aarch64-unknown-linux-gnu": "e27dc8112fe577012bd88f30e7c92dffd8c796478ce386c49465c03b6db8209f",
-    "rust-1.39.0-x86_64-apple-darwin": "3736d49c5e9592844e1a5d5452883aeaf8f1e25d671c1bc8f01e81c1766603b5",
-    "rust-1.39.0-x86_64-pc-windows-msvc": "3c96b221af3343c04bf81e621a0b97a2452ae1803ecc2841a162690d8ebfe46f",
-    "rust-1.39.0-x86_64-unknown-freebsd": "9cb25742e727bab0da5feb957ef61f7ffc836b4d5d0e6cabfdf28fb68caf5fdd",
-    "rust-1.39.0-x86_64-unknown-linux-gnu": "b10a73e5ba90034fe51f0f02cb78f297ed3880deb7d3738aa09dc5a4d9704a25",
-    "rust-1.39.0-x86_64-unknown-linux-musl": "f6610742ad223cdd9420707454e4814baf14ab79d73dc033ef190eed28e05cbc",
-    "rust-1.40.0-aarch64-unknown-linux-gnu": "639271f59766d291ebdade6050e7d05d61cb5c822a3ef9a1e2ab185fed68d729",
-    "rust-1.40.0-x86_64-apple-darwin": "749ca5e0b94550369cc998416b8854c13157f5d11d35e9b3276064b6766bcb83",
-    "rust-1.40.0-x86_64-pc-windows-msvc": "64d98af9b9114a3aaea096ba74c43cad75a2502fb682e941b4701f5d2a2b9272",
-    "rust-1.40.0-x86_64-unknown-freebsd": "d1a58e9f743f4a55513f74e41c90ab7b291413ce46336c138762fd9aa6605b32",
-    "rust-1.40.0-x86_64-unknown-linux-gnu": "fc91f8b4bd18314e83a617f2389189fc7959146b7177b773370d62592d4b07d0",
-    "rust-1.40.0-x86_64-unknown-linux-musl": "4fbc6a60c31d89d922cb8c3630a92d7d959a8ec8fa48b51bed9eb67eb0d30b33",
-    "rust-1.41.0-aarch64-unknown-linux-gnu": "79ddfb5e2563d0ee09a567fbbe121a2aed3c3bc61255b2787f2dd42183a10f27",
-    "rust-1.41.0-x86_64-apple-darwin": "b6504003ab70b11f278e0243a43ba9d6bf75e8ad6819b4058a2b6e3991cc8d7a",
-    "rust-1.41.0-x86_64-pc-windows-msvc": "4c43a64e83c28bfb788782b01d95034ecc59bf9846006aa1deb6986c139b9f9d",
-    "rust-1.41.0-x86_64-unknown-freebsd": "ae1093a1e476f5c7b1c1f59f986d64b5f82a76b865c9823bcc3d5061bb93ff9f",
-    "rust-1.41.0-x86_64-unknown-linux-gnu": "343ba8ef7397eab7b3bb2382e5e4cb08835a87bff5c8074382c0b6930a41948b",
-    "rust-1.41.0-x86_64-unknown-linux-musl": "ff7345dde2f5bc295ed8ae50f0eee54b8dd697e712f86095a3378bb4dcfeea70",
-    "rust-1.42.0-aarch64-unknown-linux-gnu": "fdd39f856a062af265012861949ff6654e2b7103be034d046bec84ebe46e8d2d",
-    "rust-1.42.0-x86_64-apple-darwin": "db1055c46e0d54b99da05e88c71fea21b3897e74a4f5ff9390e934f3f050c0a8",
-    "rust-1.42.0-x86_64-pc-windows-msvc": "4a3131ff6d2b04d120069e0ba494a6418db1c691fc8e4627cf1aaf2ffbaf5ad9",
-    "rust-1.42.0-x86_64-unknown-freebsd": "230bcf17e4383fba85d3c87fe25d17737459fe561a5f4668fe70dcac2da4e17c",
-    "rust-1.42.0-x86_64-unknown-linux-gnu": "7d1e07ad9c8a33d8d039def7c0a131c5917aa3ea0af3d0cc399c6faf7b789052",
-    "rust-1.42.0-x86_64-unknown-linux-musl": "1c6bcdf5dfb51c52e7afd33fddd799a0814cd80b443137a8e9eec5563de6849d",
-    "rust-1.43.0-aarch64-unknown-linux-gnu": "e5fa55f333c10cdae43d147438a80ffb435d6c7b9681cd2e2f0857c024556856",
-    "rust-1.43.0-x86_64-apple-darwin": "504e8efb2cbb36f5a3db7bb36f339a1e5216082c910ad19039c370505cfbde99",
-    "rust-1.43.0-x86_64-pc-windows-msvc": "78dea49969addb3ef7a3a3816482534828a5140c866a828be69ccfeb44972a3b",
-    "rust-1.43.0-x86_64-unknown-freebsd": "2555aa83d1559af19054befdaea3ae560374376f9973aa3dad2c41fcd2eb84d4",
-    "rust-1.43.0-x86_64-unknown-linux-gnu": "069f34fa5cef92551724c83c36360df1ac66fe3942bc1d0e4d341ce79611a029",
-    "rust-1.43.0-x86_64-unknown-linux-musl": "dcb022649bc1998d8e103f42cb0847afc57fcd303bc9fdfde057b2b53436605a",
-    "rust-1.44.0-aarch64-unknown-linux-gnu": "bcc916003cb9c7ff44f5f9af348020b422dbc5bd4fe49bdbda2de6ce0a1bb745",
-    "rust-1.44.0-x86_64-apple-darwin": "f20388b80b2b0a8b122d89058f785a2cf3b14e93bcac53471d60fdb4106ffa35",
-    "rust-1.44.0-x86_64-pc-windows-msvc": "127cf6569c4958e362f06f850eec6cba0ad69474ab15fef2dee740aee45a3169",
-    "rust-1.44.0-x86_64-unknown-freebsd": "e2ad3224790d2283d7ef66d5e1f08cec688f1c29cf53326c9a6c28fb4914b6a1",
-    "rust-1.44.0-x86_64-unknown-linux-gnu": "eaa34271b4ac4d2c281831117d4d335eed0b37fe7a34477d9855a6f1d930a624",
-    "rust-1.44.0-x86_64-unknown-linux-musl": "dabcba42caeba91874cf10640f70fb580bdab136ce56211ac341f10d311f6ebc",
-    "rust-1.45.0-aarch64-unknown-linux-gnu": "b727be0ecdee5fb88775b784758a09ab696293048a80288999b8a6f78b160212",
-    "rust-1.45.0-x86_64-apple-darwin": "8e91f99ffbf5ae86d659d3515315a8e92ef44210102672c1536a9902cc182401",
-    "rust-1.45.0-x86_64-pc-windows-msvc": "7d1118568b83fd1da5312de95ca6f30d4f21dae57073c00a216437e4c02733cc",
-    "rust-1.45.0-x86_64-unknown-freebsd": "3d09db6a127558cfdb4fc44106e7d478bb8f6cc6148d536b90d30610181fc656",
-    "rust-1.45.0-x86_64-unknown-linux-gnu": "c34ed8722759fd60c94dbc9069833da5b3b873dcd19afaa9b34c1ce2c2cfa229",
-    "rust-1.45.0-x86_64-unknown-linux-musl": "ca5c4670f511ff225d097b5602d4a2ce984b4cd02c6aedc3be1279570c6475cb",
-    "rust-1.46.0-aarch64-unknown-linux-gnu": "f0c6d630f3dedb3db69d69ed9f833aa6b472363096f5164f1068c7001ca42aeb",
-    "rust-1.46.0-x86_64-apple-darwin": "82d61582a3772932432a99789c3b3bd4abe6baca339e355048ca9efb9ea5b4db",
-    "rust-1.46.0-x86_64-pc-windows-msvc": "3545eb66ed7c6222ca4eb9e990d4bef63edbac9b580387bf7035501ee35d453f",
-    "rust-1.46.0-x86_64-unknown-freebsd": "30d8b05073b23f0621ed00276208589dcd7669776b752a67c66c9c928ebbe258",
-    "rust-1.46.0-x86_64-unknown-linux-gnu": "e3b98bc3440fe92817881933f9564389eccb396f5f431f33d48b979fa2fbdcf5",
-    "rust-1.46.0-x86_64-unknown-linux-musl": "57aa5ca25bbd3da4eea6fc411b0fe7e1dbc683230a3f58ec84b9f70c5606909b",
-    "rust-1.47.0-aarch64-unknown-linux-gnu": "753c905e89a714ab9bce6fe1397b721f29c0760c32f09d2f328af3d39919c8e6",
-    "rust-1.47.0-x86_64-apple-darwin": "84e5be6c5c78734deba911dcf80316be1e4c7da2c59413124d039ad96620612f",
-    "rust-1.47.0-x86_64-pc-windows-msvc": "c9f93f8c821090e1c96384bef564e9c9d86bd13ef8d1116b3f17e124f07f55cc",
-    "rust-1.47.0-x86_64-unknown-freebsd": "650af0288d099c9debef7258a27caf15dd8aaf033ee1a099b4c5216c95ecfeaa",
-    "rust-1.47.0-x86_64-unknown-linux-gnu": "d0e11e1756a072e8e246b05d54593402813d047d12e44df281fbabda91035d96",
-    "rust-1.47.0-x86_64-unknown-linux-musl": "63be7601a9ecc552e3cb7a7b8f781bc122f756e8c61e4da4b76f995af039e53f",
-    "rust-1.48.0-aarch64-unknown-linux-gnu": "c4769418d8d89f432e4a3a21ad60f99629e4b13bbfc29aef7d9d51c4e8ee8a8a",
-    "rust-1.48.0-aarch64-unknown-linux-musl": "ac4de580a28e45a9773b389b296d13bfeeb08263cb1f8343859577a54940dae9",
-    "rust-1.48.0-x86_64-apple-darwin": "20e727cad10f43e3abcedb2a80979ae26923038e0e8a855e8a783da255054113",
-    "rust-1.48.0-x86_64-pc-windows-msvc": "0fdf41bb9b45e923000205b08329e15124f01b9b32986d73cd36625f3c7d883b",
-    "rust-1.48.0-x86_64-unknown-freebsd": "21e24489ffaabe517e5e87572707784d5b471646164109b248957a2d32e7a8b9",
-    "rust-1.48.0-x86_64-unknown-linux-gnu": "950420a35b2dd9091f1b93a9ccd5abc026ca7112e667f246b1deb79204e2038b",
-    "rust-1.48.0-x86_64-unknown-linux-musl": "4ed9627f57b4e0b9807fc5e7513d9731f4791668b7f875b9e44e65e21072c56f",
-    "rust-1.49.0-aarch64-apple-darwin": "ce7d689e6f73dd9c07b672ba23dabe5159fa8c194dce71b4f3f95baeaf564082",
-    "rust-1.49.0-aarch64-unknown-linux-gnu": "b551bd482041307fa3373a687d6d6a2c4c0931c2e0a68b8b75dc80bc5cf5f002",
-    "rust-1.49.0-aarch64-unknown-linux-musl": "0a43d96a508c720520328112d609916d062f866a5c35f1db8f906284035d6d98",
-    "rust-1.49.0-x86_64-apple-darwin": "fe3e248bc4b0ee0a2595693687ad845c8a8bda824a56c9321520bcca02433716",
-    "rust-1.49.0-x86_64-pc-windows-msvc": "5340831dcf98344de4a6888b50237f82568a97a46d9814f1400720dde0c7b6e5",
-    "rust-1.49.0-x86_64-unknown-freebsd": "dced98577e834f511cae8e58290539ad6b8dd40ae512e90d1371f650961bd930",
-    "rust-1.49.0-x86_64-unknown-linux-gnu": "8b14446df82f3707d69cf58fed92f18e0bff91621c62baf89288ef70e3e92981",
-    "rust-1.49.0-x86_64-unknown-linux-musl": "f92a5a4adcfac4206a223d089a364a8375d1b6f112f3f2efa3f6d53d08a61904",
-    "rust-1.50.0-aarch64-apple-darwin": "1ed91a867e7b86cc4bc84c0838240f1c25acd007100ec9f7a14c4873e4b56561",
-    "rust-1.50.0-aarch64-unknown-linux-gnu": "1db7a4fbddc68cd29eb9bca9fa7d0d2d9e3d59ede7ddaad66222fb4336a6bacf",
-    "rust-1.50.0-aarch64-unknown-linux-musl": "adcc6c76a8967bacb6687b565d3cf739e35fde066b03edb745b05b52fa8b5b36",
-    "rust-1.50.0-x86_64-apple-darwin": "1bf5a7ecf6468ce1bf9fe49c8083b3f648b40c16fbfb7539d106fe28eb0e792e",
-    "rust-1.50.0-x86_64-pc-windows-msvc": "e8857c30b43b7d92371f824303d18e90e67e1053497366ad3496fa7ba0e0de6e",
-    "rust-1.50.0-x86_64-unknown-freebsd": "83f9d093ab7f0f5abac15e0fcea6f22daef217a2b6240342b71ae52f99a7f31d",
-    "rust-1.50.0-x86_64-unknown-linux-gnu": "fa889b53918980aea2dea42bfae4e858dcb2104c6fdca6e4fe359f3a49767701",
-    "rust-1.50.0-x86_64-unknown-linux-musl": "867cbfb35f5dc9b43e230132ea9e7bfa98d471a9248e41b08ced2266e5ccd00f",
-    "rust-1.51.0-aarch64-apple-darwin": "95d0410bbd20b05f8b7d5adf70e8737873995bc86611a90e643d7081ca35147f",
-    "rust-1.51.0-aarch64-unknown-linux-gnu": "fd31c78fffad52c03cac5a7c1ee5db3f34b2a77d7bc862707c0f71e209180a84",
-    "rust-1.51.0-aarch64-unknown-linux-musl": "06cdaa1117dcdd392ede938b655b9bc45cf2a76bd42870ca223189e6eb29d435",
-    "rust-1.51.0-x86_64-apple-darwin": "765212098a415996b767d1e372ce266caf94027402b269fec33291fffc085ca4",
-    "rust-1.51.0-x86_64-pc-windows-msvc": "aa0a7c78c68a2f23b72a95976f74aa5b883feb20812698b8ee0b07a86314ebc5",
-    "rust-1.51.0-x86_64-unknown-freebsd": "d764ab80889460caca86cda7b7ca2ced80544bb477634adc8cade0e27f4f663b",
-    "rust-1.51.0-x86_64-unknown-linux-gnu": "9e125977aa13f012a68fdc6663629c685745091ae244f0587dd55ea4e3a3e42f",
-    "rust-1.51.0-x86_64-unknown-linux-musl": "cb65c3a19ba0e09a94ccfd8551e648efaa1db52b0db19ae475d35a46f8750871",
-    "rust-1.52.0-aarch64-apple-darwin": "3aa15896dd85d1746a23af1b9764b55edb3659823ec20f306a5f30271c6bac5d",
-    "rust-1.52.0-aarch64-unknown-linux-gnu": "d37152f9da1074cfa84407ff183ce0dfb298f2e474d5b0ae3a3065d44c442770",
-    "rust-1.52.0-aarch64-unknown-linux-musl": "af73b6e9a99151f60569411fedcf5dfefb89bbec61548a2b4a8157874da77816",
-    "rust-1.52.0-x86_64-apple-darwin": "18906ea9ef6d7afc493f0c4403ece9fb466b0971db8d37d837864676ef9b077b",
-    "rust-1.52.0-x86_64-pc-windows-msvc": "53ad54808b1320aff5cc772f007a7f6570afceeb9c5b70b4b09fec9363610d59",
-    "rust-1.52.0-x86_64-unknown-freebsd": "f0610d69f18f861b72240cd6d42dae43adf932eadc24619a48e5a9363f719cdb",
-    "rust-1.52.0-x86_64-unknown-linux-gnu": "c082b5eea81206ff207407b41a10348282362dd972e93c86b054952b66ca0e2b",
-    "rust-1.52.0-x86_64-unknown-linux-musl": "56e36a3e626dca9eb65a07109ecd65e0454d9882124a6cda66ad21e78b82f627",
-    "rust-1.52.1-aarch64-apple-darwin": "217e9723f828c5359467d69b363a342d702bdcbbcc4107be907e6bc4531f4912",
-    "rust-1.52.1-aarch64-unknown-linux-gnu": "17d9aa7bb73b819ef70d81013498727b7218533ee6cf3bd802c4eac29137fbcb",
-    "rust-1.52.1-aarch64-unknown-linux-musl": "f2bae2b32f05a90eec041352d9329deb3e907f5560b9fda525788df3b8008b6b",
-    "rust-1.52.1-x86_64-apple-darwin": "cfa73228ea54e2c94f75d1b142ea41444c463f4ee8562a3eca1b11b2fe8af95a",
-    "rust-1.52.1-x86_64-pc-windows-msvc": "c03fb39f39519abd65ce792cc3d2c038b6c4179089d21f9e26933b93cde402d9",
-    "rust-1.52.1-x86_64-unknown-freebsd": "74e8386d2a9b1363ac8f5b0637e4c38a305d4706babda5222801c5ec9d5a2e6d",
-    "rust-1.52.1-x86_64-unknown-linux-gnu": "617ae06e212cb65bc4abbf52b158b0328b9f1a6c2f822c27c95b274d6fbc0627",
-    "rust-1.52.1-x86_64-unknown-linux-musl": "c3eae6e78ee29e03416897f89b54448b2a03d063f07a78cde41757ad2e02c2f0",
-    "rust-1.53.0-aarch64-apple-darwin": "c519da905514c05240a8fe39e459de2c4ef5943535e3655502e8fb756070aee1",
-    "rust-1.53.0-aarch64-unknown-linux-gnu": "cba81d5c3d16deee04098ea18af8636bc7415315a44c9e44734fd669aa778040",
-    "rust-1.53.0-aarch64-unknown-linux-musl": "a0065a6313bf370f2844af6f3b47fe292360e9cca3da31b5f6cb32db311ba686",
-    "rust-1.53.0-x86_64-apple-darwin": "940a4488f907b871f9fb1be309086509e4a48efb19303f8b5fe115c6f12abf43",
-    "rust-1.53.0-x86_64-pc-windows-msvc": "4690fb3ff390eef30eca4b3b9193a74e0e00ef18f2d89b7981753aaa9b36d787",
-    "rust-1.53.0-x86_64-unknown-freebsd": "f87eee8fabffc5800d5285ce2116e9c0f39340fed4a3c77eeb9fbbf7659b25c4",
-    "rust-1.53.0-x86_64-unknown-linux-gnu": "5e9e556d2ccce27aa8f01a528f1348bf8cdd34496c35ec2abf131660b9792fed",
-    "rust-1.53.0-x86_64-unknown-linux-musl": "908b6163b62660f289bcd1eda1a0eb6d849b4b29da12546d24a033e5718e93ff",
-    "rust-1.54.0-aarch64-apple-darwin": "801b3b15b992b0321261de8b8ea2728e9a74822c6cb99bf978b34e217c7825ba",
-    "rust-1.54.0-aarch64-unknown-linux-gnu": "33a50c5366a57aaab43c1c19e4a49ab7d8ffcd99a72925c315fb1f9389139e6f",
-    "rust-1.54.0-aarch64-unknown-linux-musl": "49d94116a357ea13f5a3231de2472f59210028c3cf81f158b8a367c3155ac544",
-    "rust-1.54.0-x86_64-apple-darwin": "5eb27a4f5f7a4699bc70cf1848e340ddd74e151488bfcb26853fd584958e3d33",
-    "rust-1.54.0-x86_64-pc-windows-msvc": "1c01182f8d9ef1295eacf58e5b7ba2e3183d768b91f7f650a7421808779068a0",
-    "rust-1.54.0-x86_64-unknown-freebsd": "026a40470b9fddfbb4abff3546e620eceaa2812ffc13e180bbb9360c01501a16",
-    "rust-1.54.0-x86_64-unknown-linux-gnu": "350354495b1d4b6dd2ec7cf96aa9bc61d031951cf667a31e8cf401dc508639e6",
-    "rust-1.54.0-x86_64-unknown-linux-musl": "3571db0018fcd32f3b579a32b2301826dbd1cce44b373aed8e8a31c2a6f52fe8",
-    "rust-1.55.0-aarch64-apple-darwin": "70c71d30d0de76912fcd88d503a6cb4323cfe6250c1a255be7e0d4e644b3d40a",
-    "rust-1.55.0-aarch64-unknown-linux-gnu": "eebdb2e659ed14884a49f0457d44e5e8c9f89fca3414533752c6dbb96232c156",
-    "rust-1.55.0-aarch64-unknown-linux-musl": "2ce36a7d34f1f2aa43b4cbc0b437d96eefb45743828bf9ae699ff581ae257f28",
-    "rust-1.55.0-x86_64-apple-darwin": "2e345ac7724c192c9487a2c6bd4f6c52c884d791981510288830d27d9a0bf2f3",
-    "rust-1.55.0-x86_64-pc-windows-msvc": "c7f21e819d883306c3a06115b4d46a92c7310aed655a2f19b40c457a6f06ba62",
-    "rust-1.55.0-x86_64-unknown-freebsd": "7ddb8ec4d431f64dd6428df93d46f726516970b0ca83c71c3efbfe34a42d3113",
-    "rust-1.55.0-x86_64-unknown-linux-gnu": "2080253a2ec36ac8ed6e060d30802d888533124b8d16545cfd4af898b365eaac",
-    "rust-1.55.0-x86_64-unknown-linux-musl": "f24f68587253c4bfbe59d3d10fe4897068d9130538de6b2d02097a25718030c2",
-    "rust-1.56.0-aarch64-apple-darwin": "31b7e9c8b4ac3133b1952d1278077fa45250e26758625f972f9b2f4e2426709d",
-    "rust-1.56.0-aarch64-unknown-linux-gnu": "f3e9a9c8af7d17a2fbe0ce561a7dc42f65c5444025783f1f63cd47960a534a9e",
-    "rust-1.56.0-aarch64-unknown-linux-musl": "a97c8f305c0dd07925a00f90e135152769f1c97442874691ffc865602209066d",
-    "rust-1.56.0-x86_64-apple-darwin": "577faef3f118a4a259e5e61a415b06434081baeceeff7bbf2357456cfc5b8735",
-    "rust-1.56.0-x86_64-pc-windows-msvc": "7ebee9ae583d0723d945fe89244fbc6f51f8723d318a2be9bcbe1e4ffc33606f",
-    "rust-1.56.0-x86_64-unknown-freebsd": "e31a47ecdd223ef7c84fc50d2c51343f8a3e54d419b04e17d143bd81ed587a7f",
-    "rust-1.56.0-x86_64-unknown-linux-gnu": "5189cd56447f9d56fcd7a1966efe5a8efd19843fdfd6bf9a23a9acbc57b5e3f9",
-    "rust-1.56.0-x86_64-unknown-linux-musl": "6ad1c6fa11e3bce86368385d0b0512d723a426fa55bcaeafdab08d03f127275d",
-    "rust-1.56.1-aarch64-apple-darwin": "e71c14c1368048a22e4d1851f301872ac2e6f4c574f04d2a7ae4d64b0e7c7235",
-    "rust-1.56.1-aarch64-unknown-linux-gnu": "69792887357c8dd78c5424f0b4a624578296796d99edf6c30ebe2acc2b939aa3",
-    "rust-1.56.1-aarch64-unknown-linux-musl": "971d13d41657e50e3ac54f17f52b4198c3d8bc25ec489a6a9e6d12c18226dda5",
-    "rust-1.56.1-x86_64-apple-darwin": "8d65ef02a123c23be00101fb204d28b60498b9145dd2ee8edabf0afde6e01e55",
-    "rust-1.56.1-x86_64-pc-windows-msvc": "b39acf48e5d73279ca9485f50e6ec16c16fcef922eb17f2921ce807df11d3e5b",
-    "rust-1.56.1-x86_64-unknown-freebsd": "94e2c8b44af125ca8ba1a1ded7e7b9c5acb27e52acec4ab483d5ed9a8528c5a9",
-    "rust-1.56.1-x86_64-unknown-linux-gnu": "a6be5d045183a0b12dddf0d81633e2a64e63e4c2dfa44eb7593970c1ef93a98f",
-    "rust-1.56.1-x86_64-unknown-linux-musl": "3c09058d104d9a88943fb343af1fb70422f9c4a987e6703666ee8a8051211190",
-    "rust-1.57.0-aarch64-apple-darwin": "7511075e28b715e2d9c7ee74221779f8444681a4bb60ac3a0270a5fdf08bdd5a",
-    "rust-1.57.0-aarch64-unknown-linux-gnu": "d66847f7cf7b548ecb328c400ac4f691ee2aea6ff5cd9286ad8733239569556c",
-    "rust-1.57.0-aarch64-unknown-linux-musl": "91c8e5171e5715261f7f635142a10a9415a4e5ba55374daf76f0b713c8b08132",
-    "rust-1.57.0-x86_64-apple-darwin": "15ceffc4743434c19d08f73fb4edd6642b7fd8162ed7101d3e6ca2c691fcb699",
-    "rust-1.57.0-x86_64-pc-windows-msvc": "566374ae6c9f487726932f4d4ef3c9000147574f30365cfda265cbfd0c4ea5c6",
-    "rust-1.57.0-x86_64-unknown-freebsd": "ebe96fa1f15e8d70c91e81aab7e0c341717b909225029f37d52fbdfa506e3fab",
-    "rust-1.57.0-x86_64-unknown-linux-gnu": "ea0253784b2e5c22659ff148d492a68d2e11da734491714ebc61cc93896efcda",
-    "rust-1.57.0-x86_64-unknown-linux-musl": "56876ebca0e46236208c8bd3c3425dba553abe49639e1040ee8b95bc66a45d33",
-    "rust-1.58.0-aarch64-apple-darwin": "6fb564f03dc09fd0ede8cdc35803b9efdd0ee3b3769c392c63167f863e9512ce",
-    "rust-1.58.0-aarch64-unknown-linux-gnu": "38fafc97700dcb1d205d3db7d86e9eb404577ccc4054333f41ec52d508394043",
-    "rust-1.58.0-aarch64-unknown-linux-musl": "787655adcaf004cc1f6a438881a3964ec20fffa682b46418a2a87b564548d80b",
-    "rust-1.58.0-x86_64-apple-darwin": "1f35e32a70ced5019fef45d1073d8ac25c0c2f91537b2b3592e041542f582b84",
-    "rust-1.58.0-x86_64-pc-windows-msvc": "c15f4ac3ef3a3833b6394f3f102cc7896a82107d68c2f398aab2bfd70fbb096a",
-    "rust-1.58.0-x86_64-unknown-freebsd": "ce69d9e2b7f60d7805d7759f112a9a3d2c608715242041e7fecea033d557bab1",
-    "rust-1.58.0-x86_64-unknown-linux-gnu": "1d7ec4bceb0d31f163540fe7ebebed68ca8853e7982821108770eaec5d66f871",
-    "rust-1.58.0-x86_64-unknown-linux-musl": "d1d04e4c5a3299c1d4b3eac8785f7b77c23d4ed32da3c3f77a1e39d90264b386",
-    "rust-1.58.1-aarch64-apple-darwin": "00b44985bc87e53c53d92622fb10226f09e9f25c79db48a77c0a769a36f83b1e",
-    "rust-1.58.1-aarch64-unknown-linux-gnu": "ce557516593e4526709b0f33c2e1d7c932b3ddf76af94c2417d8d667921ce90c",
-    "rust-1.58.1-aarch64-unknown-linux-musl": "b1533fdeeda483a3633617fd18a79d8fad7821331614b8dc13efd8b22acc30f5",
-    "rust-1.58.1-x86_64-apple-darwin": "d0044680fc132a721481b130a0a4282a444867f423efdb890fe13e447966412f",
-    "rust-1.58.1-x86_64-pc-windows-msvc": "93cebf7a895420b3763dbc808c0772ef814add757eb689abe1da3690e876447f",
-    "rust-1.58.1-x86_64-unknown-freebsd": "124d056c3af35bd9a42c6ef3529c73a6b29b1d927f5498cec499e16ca4defe63",
-    "rust-1.58.1-x86_64-unknown-linux-gnu": "4fac6df9ea49447682c333e57945bebf4f9f45ec7b08849e507a64b2ccd5f8fb",
-    "rust-1.58.1-x86_64-unknown-linux-musl": "7036e34eadc8ce22d16b0625919d9f2244ca49a5441d6599f4822116c181d272",
-    "rust-1.59.0-aarch64-apple-darwin": "5449ae915982967bae97746ce8bea30844f9ab40b4ee4da392b9997e0e7b2926",
-    "rust-1.59.0-aarch64-unknown-linux-gnu": "ab5da30a3de5433e26cbc74c56b9d97b569769fc2e456fc54378adc8baaee4f0",
-    "rust-1.59.0-aarch64-unknown-linux-musl": "a3f8afdf23c98e6d25bf3b4bfcf5e9a4712f4c425f3754500931232d946204a9",
-    "rust-1.59.0-x86_64-apple-darwin": "d82204f536af0c7bfd2ea2213dc46b99911860cfc5517f7321244412ae96f159",
-    "rust-1.59.0-x86_64-pc-windows-msvc": "d781bfed7e3e5dc4959ce39df101fc476a3a70ab75e2fa1bbc3e59281f6e9e00",
-    "rust-1.59.0-x86_64-unknown-freebsd": "83f9c49b6e9025b712fc5d65e49f1b6ad959966534cd39c8dc2ce2c85a6ca484",
-    "rust-1.59.0-x86_64-unknown-linux-gnu": "0c1c2da3fa26372e5178123aa5bb0fdcd4933fbad9bfb268ffbd71807182ecae",
-    "rust-1.59.0-x86_64-unknown-linux-musl": "c0ae76fa4bb0f1c85b86b9f7637db0fddf5084ce4c8f86c4d4acc3c41813201f",
-    "rust-src-1.26.0": "d02fe6fd5c0f330656e9ff0a290ebf23cab7c909f96ce1838247fadc117eb1dd",
-    "rust-src-1.26.1": "19ef8113ae53ec7ea8f6772a5c9ce5a3dfc28b1bddd800841fb5bbec33fa3619",
-    "rust-src-1.26.2": "d63cb7ca67f1bb2101898b7ca33105eeb6d9d9cc3e7ff566b90b0321ec448e73",
-    "rust-src-1.27.0": "9a60d9f0c586a537129a741576370b90d9cce1999b4aa2623d5c1d9c3fdf5a73",
-    "rust-src-1.27.1": "8736577a84bf7263d333996b21ec49697a4a942ab1b5f6d1327241866481cdc0",
-    "rust-src-1.27.2": "03b4b09d855b2c393508f1e5d11c2cba147112a534193e62d6cb54e2b5a631f1",
-    "rust-src-1.28.0": "99ee2a227f27bf0136e7bc53790ef5e02ad9744a56f488b77579403b281b1d63",
-    "rust-src-1.29.0": "6f1a4457d2e75d2b3d3dda1f05e6ff5f37c4c416d25733cb3b008cad99247a42",
-    "rust-src-1.29.1": "89bddeeb0b38ec2715e287a4827179fc975d69bd6d223b05199321e9c0de8313",
-    "rust-src-1.29.2": "47b1ed6d19d5a14f20c1723218fcf073c3f790aceb780ffae9209c1a480f5b81",
-    "rust-src-1.30.0": "27e806396aa5ce2466929e06106a23b456a63f9dee2e9c378da326f1f88e6570",
-    "rust-src-1.30.1": "16dc694d49b22a58e766dfa5812d84000a6197cc6b1f1f7b4e553be8d9427d85",
-    "rust-src-1.31.0": "121909b2428487a31d6bef4ff92f6d63967b225310632fc60570874ba392feb1",
-    "rust-src-1.31.1": "097550782be7f201a44b842b74c6c2ec6851495454ada2d9ee693a8af4cdbc6a",
-    "rust-src-1.32.0": "6ece16e38b969606a5da8def53cae55d0c67d8502261086afbd5e303013ce92b",
-    "rust-src-1.33.0": "48b28b0cd9badcef24f1525b6a225db9018924567d6a998ae891996dc843fb22",
-    "rust-src-1.34.0": "6fe16aae312d3be5e0fec93e52918b7b03e0920e7d6d3e552a4fdd740556c4e9",
-    "rust-src-1.35.0": "7547d1e9a7ed236860e0a1ed7b9e428941fad7ff9bd3888e19db7e7a5fd53e38",
-    "rust-src-1.36.0": "c0099d763779ef095fcd32531a88a2af714670ec0b64f7b27aa027b2f51057b0",
-    "rust-src-1.37.0": "30e7bb28725b86b53b7dfe23ba4f3119889c30e38930f7c2dfdc74b1f62704a5",
-    "rust-src-1.38.0": "082891ceb8547c4a0fbadcd1309fb0219b935f3dc5a38d2b3b77f40a670a0a54",
-    "rust-src-1.39.0": "068186f866703ffeae804a0642588a78a492f03b62c0113e6cdfcb4eeca56df6",
-    "rust-src-1.40.0": "2a9be624ba682f1331cc4d764e161a1b18e007ded34ffcb1494804bc24e0fd62",
-    "rust-src-1.41.0": "6597a1f217c6a9cfcf41e34bba91d8d98b6736ab6a18b54ed2db1ce5634e176a",
-    "rust-src-1.42.0": "56d809eb9efb70e9444be88bd8e3ff54d94ab5fef24b13d5b17a75309190d84e",
-    "rust-src-1.43.0": "7999fad1e60609f76ebe589cab48451e35ecd54d5336bf70dfb0eb57c78e8bb7",
-    "rust-src-1.44.0": "6f748c303431126827fc3f262ba05ece2456e274eafeb9bd0b40bdf27c5f99da",
-    "rust-src-1.45.0": "96590b0a987098da05d38f8e3bb5e049a77c20f03689ffb7144f23136fd488b4",
-    "rust-src-1.46.0": "7478839072096041220c6ca9cc9031028cdf65fa8cb5bcf87178ea1351442bdc",
-    "rust-src-1.47.0": "64b27ba31f8956342e8ace0f949d06524d7013bf73bfbe6f9d18ec19e5a0c793",
-    "rust-src-1.48.0": "e8f15bdfcb5ced76ae40dd9aa6b387d5f9cece82b7a340cdcaa353fbc94f53da",
-    "rust-src-1.49.0": "474a0fd0c1da720eb9fa701c73ced702a7599eb265333a18c1b25feeb9566f8e",
-    "rust-src-1.50.0": "678e140e88656f19a49aa802eb6e1ea117a520c6f3eb0da265a7dc6e0c012a9c",
-    "rust-src-1.51.0": "18904ca04c5bc09fa1a88d32391c611bc60bc3a739551496cad0829e34301563",
-    "rust-src-1.52.0": "861dcbf1faf2faca5b5e3afea5bbcf453cbda4ae00bd34ae67bfc36463f9e227",
-    "rust-src-1.52.1": "34fb417e94aadbace368e934e1f079dd09f2423ccd6cc0cc519cdd55ef3fa8bf",
-    "rust-src-1.53.0": "26b1464bd313ae99de27a162ca96b4fb321e4414448ea8ce8abd715ef8c7ba2b",
-    "rust-src-1.54.0": "56d14ee97c59c543291154ab427cf96a1a82ef5cf32b89f14886dcfc01f5310b",
-    "rust-src-1.55.0": "3be79e301246b413e9e1cc4b5b4f53bcbc964482005381a899ab6c597bef7996",
-    "rust-src-1.56.0": "00c2225d0e1d430b1632373c46448b1b69839032b8384684091bb9cce19b2ce6",
-    "rust-src-1.56.1": "be4757c283f94a37cf38b9897f5513ebe3e2f4ef15f013630cdb845987324503",
-    "rust-src-1.57.0": "cc1fa22e939b14a6952deb7547fcfafa6670e727f942fb4ef77075d8e58e45a6",
-    "rust-src-1.58.0": "c91bb6df4ebbfea42a1c3940e38bc1c2c4768efbdada8205b12f6d9d383ee219",
-    "rust-src-1.58.1": "e7bb7325e5e71411aabfbd251acfd131d1ad6d9aee2b65d04b081702915cfe4f",
-    "rust-src-1.59.0": "127658a5237cce6dd43ce9d9113fc104ea6902cc8c850272fba07d92140fab12",
-    "rust-std-1.26.0-aarch64-unknown-linux-gnu": "a583ddc2d4b5f9516bf136f781268ae0e813295d1d145fab4b46a4220f448923",
-    "rust-std-1.26.0-aarch64-unknown-linux-musl": "6a112ecd4cdefee2688bf69fdceb785a4d08cea33ba32296539abe3cb7f5eae1",
-    "rust-std-1.26.0-wasm32-unknown-unknown": "0f8bb8bdb523cd05acd11006d47b14d7589e64fe25a43d1aec5df692988b400f",
-    "rust-std-1.26.0-x86_64-apple-darwin": "cb5a0114e9e383aa93267868482db84f791124ee4faafdaed08ec6782d000fc2",
-    "rust-std-1.26.0-x86_64-pc-windows-msvc": "88ae8697a84cfddc72429fb0880e6d8663d99ab98a69d27c06d21b4e668b13d9",
-    "rust-std-1.26.0-x86_64-unknown-freebsd": "38cd138eba2ccaff59513d154fec580b6663ca6ef38cd620c348364aa1e11a40",
-    "rust-std-1.26.0-x86_64-unknown-linux-gnu": "e27cb5c21541a500c8df919e15c8d3b002456ebbe573122e7b058cf5b4c3c13a",
-    "rust-std-1.26.0-x86_64-unknown-linux-musl": "943886ce013589b6dd9c9392c807881631cab4a8e04acc83e3a047134a9294f5",
-    "rust-std-1.26.1-aarch64-unknown-linux-gnu": "34077f14d1e8c9ce96a9c72e95599326187bd460b88f877794a8c19f9e1b56b4",
-    "rust-std-1.26.1-aarch64-unknown-linux-musl": "d4435fa89ff7575d8d70114a5841bf70d699294db707512d6f4f4d0a073b237d",
-    "rust-std-1.26.1-wasm32-unknown-unknown": "98af245301a921042997a433a618f58ae27b52340ad71c5502ecde7f29db79f9",
-    "rust-std-1.26.1-x86_64-apple-darwin": "d43e06674e645e120af6716e6d0db5771fa8818b5a48fbee9791360086cdec4a",
-    "rust-std-1.26.1-x86_64-pc-windows-msvc": "5223b7dde5b96d278072b4541fdffb7d33c64950af643eba385928763aca32bf",
-    "rust-std-1.26.1-x86_64-unknown-freebsd": "1d63cc1f6dc6dfa2644619cd8c264c3d1be0fe5c44c5454e8ea04bd7beb036fb",
-    "rust-std-1.26.1-x86_64-unknown-linux-gnu": "cc7cec9a121a97e8e23c350305a0e4cd4e3b475fd5a36fa6335a585d3c511f0d",
-    "rust-std-1.26.1-x86_64-unknown-linux-musl": "9d6a4191ad8ddfae10a05882cd0e867ecc2b64d26da2f38fbdcbdcbcf94139cf",
-    "rust-std-1.26.2-aarch64-unknown-linux-gnu": "6f629b8c3ef8aa4a6c9439a5c1d8719905853f321a1080bb9f8a8356a1b06364",
-    "rust-std-1.26.2-aarch64-unknown-linux-musl": "d70817352ebe34fab475ef3cd79ccbd56cf20e3b9ae0b34a285dd1c966bf2bde",
-    "rust-std-1.26.2-wasm32-unknown-unknown": "260e3267451c8098ac069376e2f4320e129ccec79602086a77f0798499cb5b3b",
-    "rust-std-1.26.2-x86_64-apple-darwin": "712a79cd10b96c7119980e535a36595e03c69a360f1541f690c09de858d92723",
-    "rust-std-1.26.2-x86_64-pc-windows-msvc": "41036c06e00ba038c5ec3940608370e93c6b9a731019d0349841fa78bc8ea125",
-    "rust-std-1.26.2-x86_64-unknown-freebsd": "f54b58bf941d794ee10ab7ee9e1c94a70012073b0ee633ec2be585b1be2e31de",
-    "rust-std-1.26.2-x86_64-unknown-linux-gnu": "91634f05bf2d0a20e627aed08a8450673acecb963869273221de17130540fb26",
-    "rust-std-1.26.2-x86_64-unknown-linux-musl": "5ba536ccc53bf550d7ae3f032cc743b2f13c1ac92e3be45f0843762ed8aa4ca0",
-    "rust-std-1.27.0-aarch64-unknown-linux-gnu": "a32ff8d2ab75a229b73076182978e8b97ac1c5447b9446b1d253685ef31652ec",
-    "rust-std-1.27.0-aarch64-unknown-linux-musl": "e64ee59e3c113483714c563a567532eba46c96ff7e7f3982e88fecf03d0c1cae",
-    "rust-std-1.27.0-wasm32-unknown-unknown": "aa1afca259ecbee3cf65368e8f9d5e9a0d8ea86be30edf4ecfedecc1db110380",
-    "rust-std-1.27.0-x86_64-apple-darwin": "15ee6418f9b564618e9c81a6dcd7706a2f8ae5ca24fd1b6d7527c97563a47e57",
-    "rust-std-1.27.0-x86_64-pc-windows-msvc": "77c9102d192ed2dda7128dea4e60992d1135c50b85f0ef8e989f0fda3ed3b73c",
-    "rust-std-1.27.0-x86_64-unknown-freebsd": "6e307cc3798b50b37beb9ff43e88b12fb565ddaf051925fffa35bfbeb091d660",
-    "rust-std-1.27.0-x86_64-unknown-linux-gnu": "b8cf36922315ca792929d515327c74b873358a64be4929b2ecfbe23af21e8043",
-    "rust-std-1.27.0-x86_64-unknown-linux-musl": "166b5286de202feebfbbfea18f2cc06b0a945dd7687985d6a14b3c811b18b202",
-    "rust-std-1.27.1-aarch64-unknown-linux-gnu": "00a553c4b5869db1acc4f5fb1f6f954893db507ae01ed754bb8654f8916588e9",
-    "rust-std-1.27.1-aarch64-unknown-linux-musl": "aabf69e0ed8a0a45a1dd7c52bf532cff37ab00c1aa5cd1555ca57e4fee9dc64d",
-    "rust-std-1.27.1-wasm32-unknown-unknown": "e16cfda8a8eb29c81d34ea3ca7b4c0815b46ddb85814cbf68320f2666ef44d78",
-    "rust-std-1.27.1-x86_64-apple-darwin": "a521599355e564984e43a63042b1de93dd7cf96730930501f86611dd766384e8",
-    "rust-std-1.27.1-x86_64-pc-windows-msvc": "4745f31711f18e06859946b932909a26d4593552c6631c5710e72d3da26f06ab",
-    "rust-std-1.27.1-x86_64-unknown-freebsd": "12902b61a4897ade258217f045dfac3fe83d49dd52d1e2250bd94c3a10642b08",
-    "rust-std-1.27.1-x86_64-unknown-linux-gnu": "9a1830b522117d68eeec703b50692093352212e035a46baceea666bb37739c2d",
-    "rust-std-1.27.1-x86_64-unknown-linux-musl": "c387d462fc07d4bace1355cfca70b68ff263432614cbe7c66d53ac25e1a47161",
-    "rust-std-1.27.2-aarch64-unknown-linux-gnu": "39bafd1db4f1e881cdbd8d81b757bfef1cad6c06f6aa4514f8b693d997764e2a",
-    "rust-std-1.27.2-aarch64-unknown-linux-musl": "5e8e6d5368ece8c822991c8b4437e83d0537f253cb70b39d627d17f012813122",
-    "rust-std-1.27.2-wasm32-unknown-unknown": "59ad2323afe090c43e41dce482a4abed1473a7997db5db2ee236d49eac208b70",
-    "rust-std-1.27.2-x86_64-apple-darwin": "eed3688d9f551066593b34f07e4d28846caa99624c2168387993acc6bddd003d",
-    "rust-std-1.27.2-x86_64-pc-windows-msvc": "f5dbee42f3fde455d79e759a4854da78a650df3bcf27f194da78670feb11e10a",
-    "rust-std-1.27.2-x86_64-unknown-freebsd": "6051f8bacbfbd2c3dceeddab8c66274bed7ef260cf346d367c53495cd1567572",
-    "rust-std-1.27.2-x86_64-unknown-linux-gnu": "68984f2233853d3e9c7c56edd72a91b5822157f28fdb42023fb311af68f842dd",
-    "rust-std-1.27.2-x86_64-unknown-linux-musl": "2ef23cad3779c8ee7abf7cbe7d93b0faa1ffd87e1ef5a378aa9ce566cd1b7644",
-    "rust-std-1.28.0-aarch64-unknown-linux-gnu": "9ba698f68c5643f53934e1085af40c79c6d1b3bfa01ca6dcdffdc5eec8f44cc0",
-    "rust-std-1.28.0-aarch64-unknown-linux-musl": "b1acdf055d534f4ce295271fe6101833c65261aeb52ffb619911a4db3de35663",
-    "rust-std-1.28.0-wasm32-unknown-unknown": "33f9b2d3f568859db28ab32ec4dd388390d408f6204ab44886eec04cc08af843",
-    "rust-std-1.28.0-x86_64-apple-darwin": "bd1b5110d35383349aafad904431d55656b13a3c02ed3b2020d2038557735ab9",
-    "rust-std-1.28.0-x86_64-pc-windows-msvc": "876d68628e6e91113117516621ae4773cdbebdaab1e899d3ec83c612683947b8",
-    "rust-std-1.28.0-x86_64-unknown-freebsd": "1fabaf71d21c1cdcddfb564950152ef862b519a175f7ee88d7e22bab31c4733e",
-    "rust-std-1.28.0-x86_64-unknown-linux-gnu": "c5aed4c7ef362b5754526d26acaccdc9300942fd12e5cc67cc56fc89576a9dab",
-    "rust-std-1.28.0-x86_64-unknown-linux-musl": "caea8f24197232c25de0e387567af452e0d57b9103ef8acef167814f9acda08c",
-    "rust-std-1.29.0-aarch64-unknown-linux-gnu": "72c0ab49bbdbf819da5018b620aeed22d34af558f4db9598059cb253fc6adec3",
-    "rust-std-1.29.0-aarch64-unknown-linux-musl": "63f9cef857800feae763ba5356f1aa67b6d2d5c8c13e03378d79014e41eacf17",
-    "rust-std-1.29.0-wasm32-unknown-unknown": "83449101356a3ae4abf8597913602b1c79dd76cc52bca7a6a3a9f4fdabc565d5",
-    "rust-std-1.29.0-x86_64-apple-darwin": "7fca06854f7c63d1d0da7c46c816af5dd23eb8010603b8cf3f07a61b162f02ae",
-    "rust-std-1.29.0-x86_64-pc-windows-msvc": "b05d04c684e070a820a0a3dc1128a24795895aecf25f6ffa0d68150e6209e424",
-    "rust-std-1.29.0-x86_64-unknown-freebsd": "a59a50a60b033c00cf36c3b8039f300b2997245c21f2d02074f9d3157b54b353",
-    "rust-std-1.29.0-x86_64-unknown-linux-gnu": "0bed2fcba596e1af6f56ed3f5d481b89b28a4ac26aea07128c6630c00c6a136b",
-    "rust-std-1.29.0-x86_64-unknown-linux-musl": "f45012af49d05990b0917c465a7986be466d2dcf6fb82100903ba0dc7f63469c",
-    "rust-std-1.29.1-aarch64-unknown-linux-gnu": "cf192e05192f79961b9f9e834e19c8b71654ac98b239408a6815d07ff2a96f19",
-    "rust-std-1.29.1-aarch64-unknown-linux-musl": "fa2f496ee03bff273eb88726e1faa2cbd6156b33ca19acb5e3b2f4c687a5594b",
-    "rust-std-1.29.1-wasm32-unknown-unknown": "48f31123614b5e0799200e0db640ff05c7236d0b6940bedf4043d5d19a2b22df",
-    "rust-std-1.29.1-x86_64-apple-darwin": "9c31fba3bfb816cf6aa8d9d4c3e7f235233035ada95417e130de8487faa507d3",
-    "rust-std-1.29.1-x86_64-pc-windows-msvc": "cb7825c2a1fa46696a429fc7e6afd3f2b396d1467a6e4b5f850ff8dedd73ac1b",
-    "rust-std-1.29.1-x86_64-unknown-freebsd": "aad9e36766284656449dad75cc1c77c7b86da99abfb0ec424689101679aa8a43",
-    "rust-std-1.29.1-x86_64-unknown-linux-gnu": "d05ddae0f05d721de00bf6e40f85f1ccdec902f864b9647e2e1cb08a8202d513",
-    "rust-std-1.29.1-x86_64-unknown-linux-musl": "7ef498c2c817afc7843d301431015931323af1759d325f46b4379bf4dccec331",
-    "rust-std-1.29.2-aarch64-unknown-linux-gnu": "f64b051f0b293ee66d7556231dcd70d143525bf6d0b2afc6fae945bf1ffd8073",
-    "rust-std-1.29.2-aarch64-unknown-linux-musl": "660dcc5252db28a3d46712606a299001fd9a0fe1f27333a88269ab4502315c43",
-    "rust-std-1.29.2-wasm32-unknown-unknown": "e8317f0677a3d4ee3b4e5f2dffdf0cdb930c77da20676a32099fde477b439d5e",
-    "rust-std-1.29.2-x86_64-apple-darwin": "72cd953cb8ea05667f5d58f5c4ba615a564611a86303c0f8f9235e7a53852692",
-    "rust-std-1.29.2-x86_64-pc-windows-msvc": "5f2320e89946208b14a34d96a2bfc652bf1debe2bbf139fda19f7dc3a5f91694",
-    "rust-std-1.29.2-x86_64-unknown-freebsd": "ddde8a33ddd902471c51f273087d90e9f7f184b7f09f5d14cab454c8c4965ec2",
-    "rust-std-1.29.2-x86_64-unknown-linux-gnu": "1fe9a0f354256483a354ee1b51c60bf9f3f48868581f7cb36d0cc51a82400605",
-    "rust-std-1.29.2-x86_64-unknown-linux-musl": "7588af2d23b4e2d342476acfd5fb95dc399777142cf1fb39a6ef0a40d70437bc",
-    "rust-std-1.30.0-aarch64-unknown-linux-gnu": "0166650de5072545c3945416638dec9beec5ae1f3c72069e314b7c50e18b4819",
-    "rust-std-1.30.0-aarch64-unknown-linux-musl": "03ea73844f2963e1716661142a15fc39b8dc026b2654ababe009d31df4e78363",
-    "rust-std-1.30.0-wasm32-unknown-unknown": "e85afbc075e162e9af71795e1dc81fa0d2cf657dd10b74751f1769585321a20f",
-    "rust-std-1.30.0-x86_64-apple-darwin": "33f4a7574c82db1b1bc3f829d0fecf9047bbac073c305500ada4aeaa08272ca9",
-    "rust-std-1.30.0-x86_64-pc-windows-msvc": "7b493d21ac115dc4a1ef85cf0d8e73f688bda065c3abbdf68ff3674c122fb9e4",
-    "rust-std-1.30.0-x86_64-unknown-freebsd": "4040fe677524e2ead69a2fcab4c16acaad3d4c4f1210ae36f400f82463bdfbc7",
-    "rust-std-1.30.0-x86_64-unknown-linux-gnu": "8514eedc0ed99ab75c61be3137c3e57c4115063ddc07aec842f687ebfc7ceda3",
-    "rust-std-1.30.0-x86_64-unknown-linux-musl": "c2fbdb20b81992220002d1c8a4b76b9363711370cc62a42811d2980f9b5c8401",
-    "rust-std-1.30.1-aarch64-unknown-linux-gnu": "64410910d73628a77dfe94dbcd0cd49709b518b5f641fbe4a2476b9af097d47b",
-    "rust-std-1.30.1-aarch64-unknown-linux-musl": "0bdcb6fcf904d0b047d75e0368caf1d29380c62ba5c54254ca8ad777e1e7b5ba",
-    "rust-std-1.30.1-wasm32-unknown-unknown": "0892ab95cdfb0bee3c9981e4a5c69a88c0fc5fb7e0c206638291e91a4c794ee0",
-    "rust-std-1.30.1-x86_64-apple-darwin": "a13d4a748914056f34c2e8691b4ca8ab6d16bb04e6e5fafc22ca594789f4e8b1",
-    "rust-std-1.30.1-x86_64-pc-windows-msvc": "177d887593e29847a1bb7afeb7924c3958248a9ec8604e66671d8036e8fbf9b1",
-    "rust-std-1.30.1-x86_64-unknown-freebsd": "66c91d14d8d3c1523f9b5c52b81e4293ba5378fcf8b3e5d0ed52e96afe6bdd31",
-    "rust-std-1.30.1-x86_64-unknown-linux-gnu": "12c4b164efed44c28096fcd141225ee9bf74e7e3395bc6a60c11c9115a0536c6",
-    "rust-std-1.30.1-x86_64-unknown-linux-musl": "1965d586f74bacb3b7332621c1040aa51efd65393da86da6c5296dafbe57602c",
-    "rust-std-1.31.0-aarch64-unknown-linux-gnu": "02e5b48d8fff293a95b591646e707a8c61399ab6c244508ed842f3d736ded641",
-    "rust-std-1.31.0-aarch64-unknown-linux-musl": "3cedc72a9754219f1684e7037ed10866f0cd756d6ecfaffcd2ef8d57374f85b0",
-    "rust-std-1.31.0-wasm32-unknown-unknown": "ff284b10844cdddca786d85fc3be48796f7286a14350e807fa9912e7748634f0",
-    "rust-std-1.31.0-x86_64-apple-darwin": "7dd4bea941cde8a5ece3286ed43733503c092a8edb50c8c31223a738a526c246",
-    "rust-std-1.31.0-x86_64-pc-windows-msvc": "625e1dbb5996cb9845cb6c779e4a6353faa1e05535471fc00aff6a6f84efeab5",
-    "rust-std-1.31.0-x86_64-unknown-freebsd": "3779f0732ee8fdc1d81663172a72219d59b716e8cc5a6b07bf1d5dd744f74b13",
-    "rust-std-1.31.0-x86_64-unknown-linux-gnu": "fe67a62c7a63acbf2458a36d7689ef41903187a472f0c28850f1fca7ea478da8",
-    "rust-std-1.31.0-x86_64-unknown-linux-musl": "f3bdef5a9e4974296965b36ced9fa3375eb9e3c3d51a305d64b9be47fa2ae55c",
-    "rust-std-1.31.1-aarch64-unknown-linux-gnu": "cc32d23cc2995c4838ab2ed4e709ca9748f13f912e9fbbb7cc78c41dbc4de268",
-    "rust-std-1.31.1-aarch64-unknown-linux-musl": "3d48648a2dad8fb6e7d4eed2d7df14eb20c79e654bc1fe666ab408cebc6e8b72",
-    "rust-std-1.31.1-wasm32-unknown-unknown": "a9b1774a6aed9387b12244d2ac0ea047506ffffee67cd834148f01c66ed24e98",
-    "rust-std-1.31.1-x86_64-apple-darwin": "91c3b12614f9795ef2e0092010f247a38d09c95d4089f75b44fad14679bd1cfb",
-    "rust-std-1.31.1-x86_64-pc-windows-msvc": "e84c961261fe70da68dc56effbb277eadeac51fb5bdd2287a168cbe2ba2b1a2e",
-    "rust-std-1.31.1-x86_64-unknown-freebsd": "89e551403f70eed976ac1dd91c3effc9434ef450da4c347d24a141529f83a101",
-    "rust-std-1.31.1-x86_64-unknown-linux-gnu": "699664b3a64959a2d75e486e19e7cc9934cbcbf2c57a977dd2a2b33cff367da1",
-    "rust-std-1.31.1-x86_64-unknown-linux-musl": "ea622d3bc171a23f704440ea99e96023888425d0c3d90bc6fcc592c17e9f8f54",
-    "rust-std-1.32.0-aarch64-unknown-linux-gnu": "346efe3aef2aff7b71a611bf7661bcec5f9bc4025a599c2866ec5fd330247cb9",
-    "rust-std-1.32.0-aarch64-unknown-linux-musl": "ca67a0ae151de83e077b95dfca459ca2445db461c7e6428c11a32e23e8ea9525",
-    "rust-std-1.32.0-wasm32-unknown-unknown": "5da2824a9404204ce2a72b44961e2dd8854fe2232f65851c1a8ff5c59ef537d5",
-    "rust-std-1.32.0-x86_64-apple-darwin": "b736d035a97f830585360e54e3f8877b68c942211cf0a75e805f34bfb36103a6",
-    "rust-std-1.32.0-x86_64-pc-windows-msvc": "cd9693213bcc2ca0ff1490861d3b52703b65df6f678c3f2ae9ad3f3717e08871",
-    "rust-std-1.32.0-x86_64-unknown-freebsd": "d50f674379791a93764d383153ed6533cea165ede7f233df4e17563bfdab273c",
-    "rust-std-1.32.0-x86_64-unknown-linux-gnu": "9f2705a3ed3217c13fd55569406c52f590030752f57520312e135223ae930caf",
-    "rust-std-1.32.0-x86_64-unknown-linux-musl": "d69a44623be904b48c72adbe0141401c4c1068b4a45502328f9e219e0f833c75",
-    "rust-std-1.33.0-aarch64-unknown-linux-gnu": "26f13cd80c95d484ccffecf517f1e05ce521072a00f1adea43d02b3f9d37f82a",
-    "rust-std-1.33.0-aarch64-unknown-linux-musl": "47c7ed55b77e161c9489ca903be32be80dd0efdf88d55f472bb54cce832629de",
-    "rust-std-1.33.0-wasm32-unknown-unknown": "ea1662a05f89f9fb725cba851f6636316cd80052fed610e4912432e4ee523db1",
-    "rust-std-1.33.0-x86_64-apple-darwin": "94247d4d11c631c9d4256f4b0aedd7fd0379fdb55174405c4c1c0dd0c40097ca",
-    "rust-std-1.33.0-x86_64-pc-windows-msvc": "36d94915b8aa9d3207d31ce77bbb790685cb8263920f0873875ae433fcb8709a",
-    "rust-std-1.33.0-x86_64-unknown-freebsd": "8eec7a21a3368890fdf0b826e7bc1928775724c0a4bd14d86304cc7e48309237",
-    "rust-std-1.33.0-x86_64-unknown-linux-gnu": "661c2ba717ae1502f002b4c6e7aeb8941685c7ea8fe7ac26ed9ede26f615b7af",
-    "rust-std-1.33.0-x86_64-unknown-linux-musl": "c3c0bf38140f7108705bbeeeaebd3dd9e23f556d36796779100c8ecf9142da7f",
-    "rust-std-1.34.0-aarch64-unknown-linux-gnu": "d175e91206aba9e2056a9c5af50f700502e70b2f8eb609854d660ac2f3bf1fff",
-    "rust-std-1.34.0-aarch64-unknown-linux-musl": "2b08cf5b0fdd2cd71e7aece36587fb4869e53faace966eaddb2e2c5fb908eb74",
-    "rust-std-1.34.0-wasm32-unknown-unknown": "4add0e23d048309cd284096c36342a6c2307a293072ced9fceeb6a2a48f3797f",
-    "rust-std-1.34.0-x86_64-apple-darwin": "f5a4fa8e86e1d4483bbe80d0adb08a7f5e466d8173bb5ea596ee698c75d0fd19",
-    "rust-std-1.34.0-x86_64-pc-windows-msvc": "3037d196ac175595de3ddb3c8d26e9795e1765bb083a33da30d2b6afb5b03e17",
-    "rust-std-1.34.0-x86_64-unknown-freebsd": "c012bcf9ee417308fb53b97e58d753f90699bd516bcafd6cc83d6f0a54423f3e",
-    "rust-std-1.34.0-x86_64-unknown-linux-gnu": "6565dbe18ee9fa972058b17744ec1129c4fcbf797443f2e16b999df3870d6281",
-    "rust-std-1.34.0-x86_64-unknown-linux-musl": "57e65e5679e7bc00a5bad52de0375f81f91f2f2c3fb1d25af626e4aa4510d80d",
-    "rust-std-1.35.0-aarch64-unknown-linux-gnu": "eee3c6a5c7ef5bc21b626ce350b0e1b02310e0463b6686683262f3fef400746d",
-    "rust-std-1.35.0-aarch64-unknown-linux-musl": "518ba1fb0c0020856eb06ecf3d4d11b94b2ffb0b5f318aac9e086be9b0be2ccd",
-    "rust-std-1.35.0-wasm32-unknown-unknown": "14f1640b35fe351dccd54fc459dea6b7ea199324a723e6d3efc42d519adca99b",
-    "rust-std-1.35.0-x86_64-apple-darwin": "93a640d065d761b85b0f770dfa865b2f86a671a7fac0d5079e4cdc9e4e031011",
-    "rust-std-1.35.0-x86_64-pc-windows-msvc": "2d9091b4a78d7f86b9db5d086b0eebbc2afad4bf828cfbc4b2cc44af86f52210",
-    "rust-std-1.35.0-x86_64-unknown-freebsd": "22e8a2deb83dac920237f810b612b7ea555b03f5830f413a94d007ec683de519",
-    "rust-std-1.35.0-x86_64-unknown-linux-gnu": "5dfa92661ff1a22680785bd6999b6117ae66841e2bd9e5318eb97002956131e4",
-    "rust-std-1.35.0-x86_64-unknown-linux-musl": "c9ac131020d4a422191f1e55c66ca5b1bf1b768180cbc2e717eefefec049bd37",
-    "rust-std-1.36.0-aarch64-unknown-linux-gnu": "22bfc32b5003c3d5259babb202f3f66be16fa6f3c75c20f429a16d7ef5eb1928",
-    "rust-std-1.36.0-aarch64-unknown-linux-musl": "42778ab5f87d2dbfc6849fcf0c6e0a3760b18e8c89385130da0a1953d5fed147",
-    "rust-std-1.36.0-wasm32-unknown-unknown": "7fc1d9f19f6674f73fb89c24aeb741adc59896da6d7ce2e16317aa1fb084bea4",
-    "rust-std-1.36.0-wasm32-wasi": "382dd29fa294ef53272984b9121e07d2b50cc131c561bb7ab72bdebda3abc031",
-    "rust-std-1.36.0-x86_64-apple-darwin": "7c6806809e010e5fba1780007ecff5c31f0ad2fcac1b414b98ca3baa0fb41b36",
-    "rust-std-1.36.0-x86_64-pc-windows-msvc": "2ef035a156b7f20a06677f3873631833afdf9cf755af3fc9466c02d9725755eb",
-    "rust-std-1.36.0-x86_64-unknown-freebsd": "a2a923cbfa3481af66c22673cac38e7cb70e26333318ad59c27b8b6ac16a84fe",
-    "rust-std-1.36.0-x86_64-unknown-linux-gnu": "f92425592c02d4681a5c5ae43ac3ad7ddcc218da50fc651ddc5c2240843a7f31",
-    "rust-std-1.36.0-x86_64-unknown-linux-musl": "4d36e7b52839cff72481b2b1858417f382be36ffa5f084f72f35c1a9117c94ea",
-    "rust-std-1.37.0-aarch64-unknown-linux-gnu": "60d64dde9178fdb698b44315b182375916116e30f5fe7f0d8278dd62eb15e7b3",
-    "rust-std-1.37.0-aarch64-unknown-linux-musl": "68db64972c1af5d4d0c4b3d62b644d158df149eed4197e1c26e93ae4a81e4860",
-    "rust-std-1.37.0-wasm32-unknown-unknown": "b55f82540aa900d2d1d1f6879c9374a8efc78d9eeb20af181ee30182b7f9688c",
-    "rust-std-1.37.0-wasm32-wasi": "551ee5f9adbf24c637e914148c0f161e9e2175aa7d39e5b486d1dd817fb47dec",
-    "rust-std-1.37.0-x86_64-apple-darwin": "0b3fe2575b55a739f409a9d76d05c4bb32494691bde5043d77ba4d39ac182f20",
-    "rust-std-1.37.0-x86_64-pc-windows-msvc": "e03f363296cd60e93110db517f3804631e49fd91de7c0d77b229e31b1135dff2",
-    "rust-std-1.37.0-x86_64-unknown-freebsd": "8783a667ea9c46f27027d494098c51563faa734c5ddb23c6b9b3eda804eb9742",
-    "rust-std-1.37.0-x86_64-unknown-linux-gnu": "09a531a97a16701eb794ecbeeded5d8f8da33da7f1bd372661ad385e3f31c048",
-    "rust-std-1.37.0-x86_64-unknown-linux-musl": "fa1d98bf18fb49ff58a70d51ff7924e4d1975f7812dc5217ea31652bf8b7bca4",
-    "rust-std-1.38.0-aarch64-unknown-linux-gnu": "0725ae9f55639c648fdaba06129de395ed839a7d1aab6aebfd21f26cbe1ce7ca",
-    "rust-std-1.38.0-aarch64-unknown-linux-musl": "56268f0c7c93a4f3436aa20af75e80e29e7d651c754b076c64f13219f2e6be8a",
-    "rust-std-1.38.0-wasm32-unknown-unknown": "9634130c797e8c1fd1d7bbdfd48a32e85e2dd3512ffb2b51974374308cf581cf",
-    "rust-std-1.38.0-wasm32-wasi": "becb178cecc2d2137e006c24e6988d79390f96dcd65cc2e8b2f475a8fdab4bfc",
-    "rust-std-1.38.0-x86_64-apple-darwin": "b1a986e8676aaed25959e9f6dd7c8c5aa67fb829d0d694edea34d8169658a125",
-    "rust-std-1.38.0-x86_64-pc-windows-msvc": "3f5b3c9a4f9015c9e1e12eed94752129d80448ea53f9d5ec1e332c2ffa2c4807",
-    "rust-std-1.38.0-x86_64-unknown-freebsd": "9f1d88449ef56c31ebc514873ba4d5889fa12697c4c2ea1071f15127f301ac4d",
-    "rust-std-1.38.0-x86_64-unknown-linux-gnu": "cd50ec3384d79aae89ffdacf09715b68b1b5562657e993f26f67b9458e92dfdd",
-    "rust-std-1.38.0-x86_64-unknown-linux-musl": "56b87fdca1f41b634285593cae42fdbd5fe9632ef502336679362b283ed53c22",
-    "rust-std-1.39.0-aarch64-unknown-linux-gnu": "adbecacf6cf0ed19df2496cc648b16192c0bd085d7e6f670edcea4dd28ab37df",
-    "rust-std-1.39.0-aarch64-unknown-linux-musl": "1d4a3640fa6e696180848ac2eb10ccc7904acac58784b27e5fcd8a79b2cdf0fa",
-    "rust-std-1.39.0-wasm32-unknown-unknown": "654905b39eae031282a9db9bfa47504c23aa4bbc7d22b769b9bd2f6ca8b61cee",
-    "rust-std-1.39.0-wasm32-wasi": "e7f008fd1f7c902f5ba7777d8a4346783392bd40813c79381bd7497fbcf19be0",
-    "rust-std-1.39.0-x86_64-apple-darwin": "ebd058b16590e2c1a73f5de59d169c8c11be6014934cb083afc84accdccd40d9",
-    "rust-std-1.39.0-x86_64-pc-windows-msvc": "cc704f4c26d5e215a8d98d0797a766fad959101776db69bb392317becd7472ea",
-    "rust-std-1.39.0-x86_64-unknown-freebsd": "94a71addd6983ae844be1cd403926c947766b72f032a083fd1be73f18cf329d9",
-    "rust-std-1.39.0-x86_64-unknown-linux-gnu": "2ddad802f048acaa5cd48f1105c18c7f4de32dc9569ac4d64bfcbb3d8c155cb7",
-    "rust-std-1.39.0-x86_64-unknown-linux-musl": "9c6b49e161e53c174b4fd46825a96b78854cfbcd0971ce846d4edd33c2b5f275",
-    "rust-std-1.40.0-aarch64-unknown-linux-gnu": "e1a1bc577d51556c53e39d4f11fb4918f0ebf27e166ff63321b2991754706d16",
-    "rust-std-1.40.0-aarch64-unknown-linux-musl": "5a269c83446da52c824b3c2047d66540f524e79901ac09b2ac80900a692849dc",
-    "rust-std-1.40.0-wasm32-unknown-unknown": "e3f68aa04c97fb8f5f595d47f417221afb4b0c49d177a2cde7935e3afdd45947",
-    "rust-std-1.40.0-wasm32-wasi": "814d780d7296cc8a8969536f99e8b591fc68d9290e399f01c59cf86d32303718",
-    "rust-std-1.40.0-x86_64-apple-darwin": "1eff41b353403cc284a09debb00cfd41d663447eabf5ad2d4cf736c8c8db0458",
-    "rust-std-1.40.0-x86_64-pc-windows-msvc": "10685476cf7d68e56564730a7d553bacd924717b9272875219da7b9f5ad6704d",
-    "rust-std-1.40.0-x86_64-unknown-freebsd": "90a41f80e2501ac2b036b7cdf269db19a5204aeec257bd585074508f1a6ba2c9",
-    "rust-std-1.40.0-x86_64-unknown-linux-gnu": "735affaca1370699f9bc3fd7b1320694afd250923d283d88c842b7913a97d083",
-    "rust-std-1.40.0-x86_64-unknown-linux-musl": "1183b1f698716409be6b48c8f98109723b5e9f5f2cab6c20f73d0b281c63aa80",
-    "rust-std-1.41.0-aarch64-unknown-linux-gnu": "59b8dab431af29dcd28c6e92e82a488ebb20dbb5dff93ca14119ba8e2fabd9c8",
-    "rust-std-1.41.0-aarch64-unknown-linux-musl": "775a256864417d93d20ae106b775564051be888a78e77a6a88c67ac86e401059",
-    "rust-std-1.41.0-wasm32-unknown-unknown": "0974d40a9f54bd9dda88c20ffa1778fa90ee77a549a8f30ed13477b55e142a63",
-    "rust-std-1.41.0-wasm32-wasi": "e50c63deae8a8bc81d438f73bc885e5de7fa282784171b53e3eebf8f41d8f7d1",
-    "rust-std-1.41.0-x86_64-apple-darwin": "c917af985d879376d8906e7c81ceacb06e65ea7b229ccf81505f8bd6cf5abf64",
-    "rust-std-1.41.0-x86_64-pc-windows-msvc": "aee5b98f0ac533471dc3d9ffdf6fcb22565c44d80c03c1c4df0c8b714931d1a9",
-    "rust-std-1.41.0-x86_64-unknown-freebsd": "4436e80598592398724daf0efc33b2a6505bebde59c021d3e894d605ae5255dd",
-    "rust-std-1.41.0-x86_64-unknown-linux-gnu": "b563fc979eea8372f5b371e10f0857e79cdffc34b124c7a7b0d89014d1b351b7",
-    "rust-std-1.41.0-x86_64-unknown-linux-musl": "6df5f52b7acb58d2123f2a6596741ae1857921ec747087bbd0b0cdf4cec5e369",
-    "rust-std-1.42.0-aarch64-unknown-linux-gnu": "1343f51fc87049327233cee8941629c3d7dfdc425d359385f93665de3d46711b",
-    "rust-std-1.42.0-aarch64-unknown-linux-musl": "77dd67761c8e2e17aaa837b714ddb9dd4433272b6b2980fa327faf23a6fc5bc1",
-    "rust-std-1.42.0-wasm32-unknown-unknown": "695439ef4099f2a1da7c9932e556b3985f4ede5b27e6ef260d670bfe4bc3894b",
-    "rust-std-1.42.0-wasm32-wasi": "077bb250b6df47f1350ea875645fd388d3e6df69830ab49627fe6f6bea5887ad",
-    "rust-std-1.42.0-x86_64-apple-darwin": "1d61e9ed5d29e1bb4c18e13d551c6d856c73fb8b410053245dc6e0d3b3a0e92c",
-    "rust-std-1.42.0-x86_64-pc-windows-msvc": "192d8e1277280df261bc917d1dcc8225b5fb507f281d05bbcf85f859679e1429",
-    "rust-std-1.42.0-x86_64-unknown-freebsd": "76e0f0f7275e114908b0ce2bf39813eaa580af92cc1fab31496ca37ba9d5703e",
-    "rust-std-1.42.0-x86_64-unknown-linux-gnu": "e6bf5495a8b1cfb849fce2753404b3b7ce7fba0c5d743d940fac3ee4558fda26",
-    "rust-std-1.42.0-x86_64-unknown-linux-musl": "c426957a3f2e3d51ee91b996c2c6b21a10d4ade7fb6b7c64d6e2f7100b6b994a",
-    "rust-std-1.43.0-aarch64-unknown-linux-gnu": "f4b80b12ecf14e97937cd24573e82f306f147db6266dc5a2cb27aaeaf49398a7",
-    "rust-std-1.43.0-aarch64-unknown-linux-musl": "5cc80aa5b5cf6dd40a5252de6c2d2cceebd930b80b02bdda7442f93ed6539a55",
-    "rust-std-1.43.0-wasm32-unknown-unknown": "efe2061e7b9711f51b560c7770ebe372003beb9beddb363f27c3960ee12135cd",
-    "rust-std-1.43.0-wasm32-wasi": "6ece090d05853a54bb7f6e4985840cf01dc4857eda0f375bc8e35846d1d533e9",
-    "rust-std-1.43.0-x86_64-apple-darwin": "c75d37579b9e143ebd98ae2fe42c818fd47e0a2763b2a9bdd7e6b9954509d735",
-    "rust-std-1.43.0-x86_64-pc-windows-msvc": "008ca995f429410248558cbfb0e77ebd062ca709a9e3a7d58d9f81c491395280",
-    "rust-std-1.43.0-x86_64-unknown-freebsd": "3c9b450b826874be5c3f35f7cb923f02d4769b81f763fef21c9c0d3a80532c2c",
-    "rust-std-1.43.0-x86_64-unknown-linux-gnu": "84fd8ddaaa217b82c563d4a32a690da2c399388258a3d2baf180992c21938af5",
-    "rust-std-1.43.0-x86_64-unknown-linux-musl": "496efe781a68c1ad75bb16e72b383fdcb9bf28ce448019dbf1ab4742fd4d4299",
-    "rust-std-1.44.0-aarch64-unknown-linux-gnu": "fafb49cc7264a8621c17e8954ec2e0a78e097395b285edb5c1639c61ffb8142c",
-    "rust-std-1.44.0-aarch64-unknown-linux-musl": "b32ccb5a8bf7c3ba9e7295e2986acad87c0eab9eff98a98f4dd3eaa4c8b74405",
-    "rust-std-1.44.0-wasm32-unknown-unknown": "8e12796a0c2fb083953042218f832bdeb78da1bfaf67b9dfe3d719920084d755",
-    "rust-std-1.44.0-wasm32-wasi": "ac0ffeb48bd4be6dd460c5665fc52bb4da2be15e5ecdefa4bf73c6db7392759a",
-    "rust-std-1.44.0-x86_64-apple-darwin": "af58f742764949765e09bb60bd1c16025a79a1be8152996fd5b3a44e5df90311",
-    "rust-std-1.44.0-x86_64-pc-windows-msvc": "1f52376c9a48ce76b24c7aad7a9817b0b4b2cf11a8581001c8d76285d9593340",
-    "rust-std-1.44.0-x86_64-unknown-freebsd": "a0315d028e72e221291dba257e8212e564574d87362cb07e06dc15950d1e6788",
-    "rust-std-1.44.0-x86_64-unknown-linux-gnu": "3b7a4eede0ca550c256ca6721877de0154c27e71196d8b9a980a480682ead0aa",
-    "rust-std-1.44.0-x86_64-unknown-linux-musl": "220877112bc1dafdaa1760c3d1c5b3529766faaa1e969d1a99d27648d3bf927d",
-    "rust-std-1.45.0-aarch64-unknown-linux-gnu": "816f6cc132db84617bfde6ad47336bfb020552a45bd0a10250c4e420d512d5ad",
-    "rust-std-1.45.0-aarch64-unknown-linux-musl": "c37bb023f496161ef3238f37b44606a93e15af225d70d3083bfd52e7f8fdd36a",
-    "rust-std-1.45.0-wasm32-unknown-unknown": "1b4f40be1d0f18a5a04f9f706fef74db0e299046557a706a4dc31a2b36d8de21",
-    "rust-std-1.45.0-wasm32-wasi": "1ef0e8e09ad39275a188bc88d4969c4d1e150cd728d9ff5955b42d6a643ac10c",
-    "rust-std-1.45.0-x86_64-apple-darwin": "e3ac5a3efc106ea13687aa1231609a5d61b1874f4b3a2f68b0e0ad70c89a2364",
-    "rust-std-1.45.0-x86_64-pc-windows-msvc": "f638c04f6709382ded2e78aebff03ae5e40e074d003786f083e6e3ccc438e0b5",
-    "rust-std-1.45.0-x86_64-unknown-freebsd": "68b28ad5488bfb051589c7079bdfa396aa42c29d463a5622fb5eb9d6ecc4a8e6",
-    "rust-std-1.45.0-x86_64-unknown-linux-gnu": "7ab1dbcdeab16dfea1ed024675e60429db9719f03648e6a09662de72b4ff730f",
-    "rust-std-1.45.0-x86_64-unknown-linux-musl": "f54b23b39308b6049644d0c8ac625724911ab423d09ed43dcbc52489b7636ea7",
-    "rust-std-1.46.0-aarch64-unknown-linux-gnu": "eaa7cfd73e96b6ce03498398f4bd9ded73870fe3c5db980038a4863c37157597",
-    "rust-std-1.46.0-aarch64-unknown-linux-musl": "5ad254082e3af2d301d3dd2c9af90942cb91eecb293f86778d163a75cd6bafd1",
-    "rust-std-1.46.0-wasm32-unknown-unknown": "0ef3344aff8ae3f2065ed8f15daa73514a26f934e160cb6974d43a8231fcc090",
-    "rust-std-1.46.0-wasm32-wasi": "44a37dfe4398e1c120a199b2ebbe86838171c38a29a0f76e10ede00bf1aeb16f",
-    "rust-std-1.46.0-x86_64-apple-darwin": "8c897982bc38c9528b448fe551f089fee7716e692dece98052f4459ccc6e591c",
-    "rust-std-1.46.0-x86_64-pc-windows-msvc": "06d92b12e2f4e6024971e99a7716423d4738c3e379fc82aa54de2a812de268b2",
-    "rust-std-1.46.0-x86_64-unknown-freebsd": "e37c06bbe2bf2501675101787388ab87d510ef80f2e091be3f50fc5d019add1e",
-    "rust-std-1.46.0-x86_64-unknown-linux-gnu": "ac04aef80423f612c0079829b504902de27a6997214eb58ab0765d02f7ec1dbc",
-    "rust-std-1.46.0-x86_64-unknown-linux-musl": "cc28b7807ceeb5a7f162edb933d825ed5f5880a45a2e920e1f1a846bfdc1b1a0",
-    "rust-std-1.47.0-aarch64-unknown-linux-gnu": "0019c302a0a02d8a9e40c3bcdd5a31b9b2704161563d72df3572521989182b0c",
-    "rust-std-1.47.0-aarch64-unknown-linux-musl": "69e27f17038a4eb99fe43781f0ca6432f64802bb24fd08fd4f2b90dc73987396",
-    "rust-std-1.47.0-wasm32-unknown-unknown": "b0d19ceb2b56105ee3407bdecaa779747abb1574990632e53a2aba681e964187",
-    "rust-std-1.47.0-wasm32-wasi": "0eab479faac83b9352af04ba4dea376fdeade3101f5e912f40ee3c93e32d1317",
-    "rust-std-1.47.0-x86_64-apple-darwin": "6b86bcdad5a6eff87a67b6387051d7f10a48e088b8f92d76869d201500b9ce13",
-    "rust-std-1.47.0-x86_64-pc-windows-msvc": "896614728a21128c335f632f2f45217320974f71cb4c7c23184610f0b587b7b5",
-    "rust-std-1.47.0-x86_64-unknown-freebsd": "80f5dee782bd74b41c55a676c624ce2260ab54c834102c90ea54e0c5e7e513c6",
-    "rust-std-1.47.0-x86_64-unknown-linux-gnu": "17ecad27d96b331608e4a96dfa3cad05ccb2ccecb888894ed35054e0d1f5207f",
-    "rust-std-1.47.0-x86_64-unknown-linux-musl": "fe4d2ee953979abd09aedaab25fa2ab646089caa6fd4ea9c78486a819729d777",
-    "rust-std-1.48.0-aarch64-unknown-linux-gnu": "3b0e5c4d03ddb97cd462947c539005427813f5ba91be81888db77e7d4bf36e45",
-    "rust-std-1.48.0-aarch64-unknown-linux-musl": "29be0b241bd14651bf9d470a9766000b424a112a0b4a6160f422b075e4668c4c",
-    "rust-std-1.48.0-wasm32-unknown-unknown": "6f981b353e096b8a54c86e6812c82db3b5fd45335b575396e3bfc29b03ffe959",
-    "rust-std-1.48.0-wasm32-wasi": "ed57645e5fe429ef99018759e1a89e090220a3197f30ea544070610ef73c19aa",
-    "rust-std-1.48.0-x86_64-apple-darwin": "430d0ca7c04b0e1140f39f2274e0072a3ba2373a99a230d14ab16361e19b6129",
-    "rust-std-1.48.0-x86_64-pc-windows-msvc": "a526c6f6c00d6a0cd4b6e3348e6329d204099983672862249593ba932b5ddf28",
-    "rust-std-1.48.0-x86_64-unknown-freebsd": "a5ea4ec9664f38a2464216031eeea01f723b4e0691f7d473d8f7ab663551f979",
-    "rust-std-1.48.0-x86_64-unknown-linux-gnu": "2e7152e5d24cea7e44e6645ebbc0387cbe1c7059b54d95d8ea3afe298ac8b2fc",
-    "rust-std-1.48.0-x86_64-unknown-linux-musl": "1bf2a0cfaa3e0cf8f743a48802c91d641a3289dffa1c44d7dc5365b68c8739c4",
-    "rust-std-1.49.0-aarch64-apple-darwin": "cf3308806fc3b6fe00ce49f1e63b1cb1d1443cc812eff7947257f31f590465d3",
-    "rust-std-1.49.0-aarch64-unknown-linux-gnu": "c58bd4f0738ff662f70e35c19bfa6b8eb12ad54b0fbdce32ee3e50186c04a969",
-    "rust-std-1.49.0-aarch64-unknown-linux-musl": "bc5501347598f48f55ba23011602a8fc1fe156c23c1c7b4d449c84eddd64d4ba",
-    "rust-std-1.49.0-wasm32-unknown-unknown": "803b4bd43c711753e3e73c210b88a30c4cfe6f3955902d76e2a15a70ad191ffd",
-    "rust-std-1.49.0-wasm32-wasi": "0c97a1f8470719b741186cbb89c4be6a61057fa013d815b2b97fc1043e269d22",
-    "rust-std-1.49.0-x86_64-apple-darwin": "c4389a8534b8da3ae3570646d68fea9a25268b17ed138867e31d4517312759af",
-    "rust-std-1.49.0-x86_64-pc-windows-msvc": "bb55ad626b9d304c0e080fc8731c7978a937c98e873a84834925c525acdbb5e3",
-    "rust-std-1.49.0-x86_64-unknown-freebsd": "ba97f1d751d6656d5efba4b0278a6571e6a56a489670f279bd2c647a90f1679c",
-    "rust-std-1.49.0-x86_64-unknown-linux-gnu": "f0d2c2d509c29ea9f7c24bb5a885321030281631e0bde0714e5cf881184d57e2",
-    "rust-std-1.49.0-x86_64-unknown-linux-musl": "07d5ebdb6c391631c168deea21c7f4d538ea93c86c2e5e1968508e90835c14e9",
-    "rust-std-1.50.0-aarch64-apple-darwin": "8a1cda91afd3a732d3737b6f933b0b6065949dd8fbc820245a7e2a97ae9a7711",
-    "rust-std-1.50.0-aarch64-unknown-linux-gnu": "83aeff923faa528e2ff5b582e4c3bdaefeda34078345e48878eba6ef95d41040",
-    "rust-std-1.50.0-aarch64-unknown-linux-musl": "fbfa90f58d9c96f91937666ff2495345f564955442109833189ab7dbb0facd89",
-    "rust-std-1.50.0-wasm32-unknown-unknown": "6b639eb5b07e1fee82e58e4fb74b2f40f5c76b02384d27f9675692a7e9656bf6",
-    "rust-std-1.50.0-wasm32-wasi": "205216840a1c286523342adc5c085819e8a4fc6de55efbfb70dc691a463fd8fb",
-    "rust-std-1.50.0-x86_64-apple-darwin": "a291354e78e8147b22e92c817a0dfee8d3342e07bfafa73a2904a1c99d22c5b8",
-    "rust-std-1.50.0-x86_64-pc-windows-msvc": "48e562e1de58bd45aa0d8a95173e159c588ee76b0164affdc0140c928b1994c1",
-    "rust-std-1.50.0-x86_64-unknown-freebsd": "b9b543a310adef1e8432f7edea63b684369b30dad1c30aa12a57ccdaf8ae0224",
-    "rust-std-1.50.0-x86_64-unknown-linux-gnu": "2aaf284a204d605f6685d2000cf83c25d0e1c789093009801ca16e1c659ae8c6",
-    "rust-std-1.50.0-x86_64-unknown-linux-musl": "f8924ff7378552c2f16faba6aea178c1b098f4cfcb07247c7c58533543980594",
-    "rust-std-1.51.0-aarch64-apple-darwin": "b9ed9468652417b375d24152eed9b87436f1ca0ad0311d8a1a802fdde263bdad",
-    "rust-std-1.51.0-aarch64-unknown-linux-gnu": "a6ed4abe59dfaf2119e2803f67fd8aef757a622ae3ac9a040946af2b02f4c269",
-    "rust-std-1.51.0-aarch64-unknown-linux-musl": "9c0dcae82c10d52d202052fa0fa912cd7a21dd286de01717f70e24dfa20a5b03",
-    "rust-std-1.51.0-wasm32-unknown-unknown": "27f4455f01911c2fa1a58cd2fdb3bf5699bf1521cbd462a457c4a1ccb8650e38",
-    "rust-std-1.51.0-wasm32-wasi": "6e96fef8f132934a37169296e7bd13e64ee73679014b47e7bdc399add9b10007",
-    "rust-std-1.51.0-x86_64-apple-darwin": "2856bc46d3624ae2658897c15388c0c353bea916963a2fc5991c23b920d5678c",
-    "rust-std-1.51.0-x86_64-pc-windows-msvc": "0e9300e21b61ec1adde0b48772a76f1c881015cf1e7885b641dcfa1dd8289e55",
-    "rust-std-1.51.0-x86_64-unknown-freebsd": "4d03de5911c533cd0ac2ab5ea9b9105e853ac0ee0f6aea22b6714a7dbe008f01",
-    "rust-std-1.51.0-x86_64-unknown-linux-gnu": "5e7738090baf6dc12c3ed62fb02cf51f80af2403f6df85feae0ebf157e2d8d35",
-    "rust-std-1.51.0-x86_64-unknown-linux-musl": "8e23cf075b514633226e73786bbcc0907853a2e9cba98ec208ca16ba3847b834",
-    "rust-std-1.52.0-aarch64-apple-darwin": "2bf799c9846c9e6308d777d30f38a54acde53b690bd12324dbba3e3b12c44822",
-    "rust-std-1.52.0-aarch64-unknown-linux-gnu": "f16adbfc562875aad7f6a4c9111519ee27eeca804fa575f8d274bd2dc1efa41a",
-    "rust-std-1.52.0-aarch64-unknown-linux-musl": "54d9f39a8a2ebcdec83b0102eac209439f846248cd6b9919421a51448b757bf0",
-    "rust-std-1.52.0-wasm32-unknown-unknown": "d4b059dd880b7c2418c454f6ff9b87f075f8634364d86ade1f4131083951592d",
-    "rust-std-1.52.0-wasm32-wasi": "37a48c39b8a5c41906b003dd803d5d4679a1321c0dd36c222e74b3384592a2d5",
-    "rust-std-1.52.0-x86_64-apple-darwin": "dfab59a96112512f8b3f6550ea932bdc4f09b0c0659545a938dbc334e96b9515",
-    "rust-std-1.52.0-x86_64-pc-windows-msvc": "28adfe2d59d37f179d82fa0ad9b2d0308607abd6c05de0f17458625d83997930",
-    "rust-std-1.52.0-x86_64-unknown-freebsd": "e721b2acb871722a0c36ae2e9d8d97a2ee8175c9c2e3cb80238c662be401b3e2",
-    "rust-std-1.52.0-x86_64-unknown-linux-gnu": "dcea50e20596a698bf534d37f28cabbe6ca6fa31bee9c4c186b0874d1d67d4ed",
-    "rust-std-1.52.0-x86_64-unknown-linux-musl": "6d9883520f6d3cc540114a0246849234a6f801bdfb0346340426b02f4c677063",
-    "rust-std-1.52.1-aarch64-apple-darwin": "3b8914c1e9a51407690661032b059fb87482e93f10f2160f3b042ecc4cb97c38",
-    "rust-std-1.52.1-aarch64-unknown-linux-gnu": "b87ef86a241626cc86bf98fa0e70483f96d1bb9bbb4da7d9c589ac2094393a8d",
-    "rust-std-1.52.1-aarch64-unknown-linux-musl": "fe8091e71cde5e3a344d204a6627765ab79ccf19321348dbfa27768ac5f2abf9",
-    "rust-std-1.52.1-wasm32-unknown-unknown": "83953390e0d1e99cd6572e825888020f91d095b07eb744539a59891837b6fe9b",
-    "rust-std-1.52.1-wasm32-wasi": "7f90fb6336d679ddcce034201645f254d8b97c6352926f5122e38329fd6e1aa6",
-    "rust-std-1.52.1-x86_64-apple-darwin": "3567ec015a498b8d5c6e8f47aaa3ec469a418ea0e0f163249e825ef24457e38b",
-    "rust-std-1.52.1-x86_64-pc-windows-msvc": "ca95b1ddeae98af71439574fdd9fd9b233ffaea7792c1b654c212a1821d33986",
-    "rust-std-1.52.1-x86_64-unknown-freebsd": "5ac8a9dc61421dc4f39380a5d4380130fa176047eef48b3aba205103363b9774",
-    "rust-std-1.52.1-x86_64-unknown-linux-gnu": "ba9cf6570d509b3e4c4d821db4caf304f2ffacf5377b7ca55dc1ef9788ae5b58",
-    "rust-std-1.52.1-x86_64-unknown-linux-musl": "1f3155180a1a143119fd7b1eae3eeed0a0758ca095fd6533918d87cefeb93fe0",
-    "rust-std-1.53.0-aarch64-apple-darwin": "a6191c9b5adab64832c0e0c0ea24f64b32db07ac5f56faf21239055ce38041ed",
-    "rust-std-1.53.0-aarch64-unknown-linux-gnu": "9e5c09d14fec5609bfd042299900f20a44c52d53c64e76e184faadf67d07590d",
-    "rust-std-1.53.0-aarch64-unknown-linux-musl": "7501cc0787a63e550f9918dc5d23ee9fa9f3f3162088b33213694be2d6e2aa32",
-    "rust-std-1.53.0-wasm32-unknown-unknown": "d9539af508a484d7da6b9683aaeb9b50ca63730a14c90837100d668c2591a697",
-    "rust-std-1.53.0-wasm32-wasi": "e75188931308e2dbd6cf85c802d28bbd175a0696cec241b134c17f2ffdfcf10d",
-    "rust-std-1.53.0-x86_64-apple-darwin": "ef9b2d8b467a29c8d5621ca804dfd6b9eb38ceae6ed86c763ddece0a38714697",
-    "rust-std-1.53.0-x86_64-pc-windows-msvc": "b5dc9771dd9b8c2a9fb10769e64c962cea01cc3e0b0057b78ce8a9ba0477a4d0",
-    "rust-std-1.53.0-x86_64-unknown-freebsd": "238bf461d866b5ef4614609462356304eb0225b0c61668d51a7b1844561df845",
-    "rust-std-1.53.0-x86_64-unknown-linux-gnu": "b3428b9ffd5a8f8f13506eedf2fc865665a53894408f0b64314686e8a08d06b2",
-    "rust-std-1.53.0-x86_64-unknown-linux-musl": "e91abd171f35951f1fc56b10af817c9e83833eec5c3712dae8bc1e5e63cb7100",
-    "rust-std-1.54.0-aarch64-apple-darwin": "469b832c7d33c1edfefe705a2ad27172f6906a73b56be789fcc30629792f75b4",
-    "rust-std-1.54.0-aarch64-unknown-linux-gnu": "2d90cd90734a2d057b2a4eeee36a72d96569fb5fff0ac1e22eeb5fab93e66848",
-    "rust-std-1.54.0-aarch64-unknown-linux-musl": "4c689f32444afa8faef2f7eb896b59f76827e9950f795988d626c9e4552e3d4b",
-    "rust-std-1.54.0-wasm32-unknown-unknown": "6e454b700234a0b33df15e6936c1c27c643101a3c4253f5e41b8e8a48a9f7ab2",
-    "rust-std-1.54.0-wasm32-wasi": "052220fdf7ea1988b6cc6445f8ea58d2c29335feb442842014f161e618534331",
-    "rust-std-1.54.0-x86_64-apple-darwin": "3908ff438cdf39c3f46a103f3a0fa04a0d8add996c87e4290c80f1a766df6a04",
-    "rust-std-1.54.0-x86_64-pc-windows-msvc": "13f7595449308c4ffe79a6111d5fd2e7a4c6a56174d6c295437676e29951ce90",
-    "rust-std-1.54.0-x86_64-unknown-freebsd": "f504cad489fe606dd1a7d064253d6e0d0e5450674cfd941b8f848953efce99e5",
-    "rust-std-1.54.0-x86_64-unknown-linux-gnu": "487c51ac97e7f7deceae904b70e9bb031574dbeefe07b39b24e3fb00740962eb",
-    "rust-std-1.54.0-x86_64-unknown-linux-musl": "7cbe73472390e0e63d1812dd86d5024350e0e8dae36a6bf52585ad0136148818",
-    "rust-std-1.55.0-aarch64-apple-darwin": "bd364710331b34f454258b73e5cfc0583d3c0763ecce0994d8a990c1847604a4",
-    "rust-std-1.55.0-aarch64-unknown-linux-gnu": "e30063a259e32cd0e31baadcee82112ef840e0f654d5128dd79fc715ede92058",
-    "rust-std-1.55.0-aarch64-unknown-linux-musl": "f540bf8238b46cefc5490eb6e626f8712ff5a49d8fdb7e75e838a5c1e1b3046d",
-    "rust-std-1.55.0-wasm32-unknown-unknown": "275d7a1032f709d186bb8bd66a96f17f5c8d6c1a4c3b51b7ce60a4f3dccefdf4",
-    "rust-std-1.55.0-wasm32-wasi": "69696faaa29bdffc58a71707a4547a85a09199218411302afa7554073357f576",
-    "rust-std-1.55.0-x86_64-apple-darwin": "8888fb0a1cbc645f86e1551d27cc127697361fecab9cd414691e434976412733",
-    "rust-std-1.55.0-x86_64-pc-windows-msvc": "8507fe0f2059d68bc0cfabae1cc96cfc3d0357f04522942c5d4fdcdc1cbc23a8",
-    "rust-std-1.55.0-x86_64-unknown-freebsd": "522f4f75c50a0fde08d6235ed80c7cac30c922943954aad1e7c154cd8762ddd3",
-    "rust-std-1.55.0-x86_64-unknown-linux-gnu": "c07c5ce96b86364601c0c471bb85105e80a5e345b3e4b3e2674e541cc2fdefcf",
-    "rust-std-1.55.0-x86_64-unknown-linux-musl": "357b8f56ffa3858e2f32be837bd84e3d89403f17c55bf0c105f34a0b796bceed",
-    "rust-std-1.56.0-aarch64-apple-darwin": "88ae1a2da1c7bbabeab3bce392ed9cdf1403c1f6cef5a8bc9a6813e480127fc6",
-    "rust-std-1.56.0-aarch64-unknown-linux-gnu": "061c8a855696b3e23fb48ad69aa90e70ead825825e4cc02374d3cb1df4486258",
-    "rust-std-1.56.0-aarch64-unknown-linux-musl": "2a83ec23e14e0b578b636c3c95283c92fd034e8b56a564c043db3f8b746eeb2e",
-    "rust-std-1.56.0-wasm32-unknown-unknown": "3e0f1282549f09f9f9062f8fa8ca197eba5407c4422378688d78075bdfaf3358",
-    "rust-std-1.56.0-wasm32-wasi": "f819c096dcfc3fd0466eff346ea4291fe0ef86a08529b9be6843017c79256237",
-    "rust-std-1.56.0-x86_64-apple-darwin": "58c6fad6f09706f2940cd501a1d0dbd984ce4926000009aed313dd2cd3c1a7ad",
-    "rust-std-1.56.0-x86_64-pc-windows-msvc": "7d3961a5115f29738061d9c22e2472082a5e2de7bfe550a04a22180c3caa472c",
-    "rust-std-1.56.0-x86_64-unknown-freebsd": "e059d39f15cea58fd89d860a06504f48234ae2aff2c1eb5e4463b50367827ff7",
-    "rust-std-1.56.0-x86_64-unknown-linux-gnu": "3c314efa230f95f5d9e3357e5f915a4f40d2a21b10ba7b92fcc9036cbcd9fbac",
-    "rust-std-1.56.0-x86_64-unknown-linux-musl": "03b7a319a3d3e5f86278753f2780c7b3fa3f1b60bc2b8ddf6fd18a36540b8601",
-    "rust-std-1.56.1-aarch64-apple-darwin": "59fcdb16c264fce206a1a59261fc576f547fa0a807d3370b542ab25261ae5158",
-    "rust-std-1.56.1-aarch64-unknown-linux-gnu": "d577c25879cf160ec1a04d5101971dd684f9b4f87b3cb463a7521b676dc3df89",
-    "rust-std-1.56.1-aarch64-unknown-linux-musl": "444d5cb43bb82322562afe54c249c3d85b5b1cf215fcd0cfdabd2e657fcda687",
-    "rust-std-1.56.1-wasm32-unknown-unknown": "4e62beca963a5b8c98913dd10abc493126675a0a35c2817afdf6975a49cc1bce",
-    "rust-std-1.56.1-wasm32-wasi": "a7eaf9bf238671f7a54afe00cd76dbb354933e525ab5bceb10d156a2bc414dd7",
-    "rust-std-1.56.1-x86_64-apple-darwin": "a1cedfaea1508bf3bfc8a77d82d15c693b41e70e56fad930d24f21f0bce5052a",
-    "rust-std-1.56.1-x86_64-pc-windows-msvc": "ace5ea90e70b9d035b28b405175d52e1796fb1bb36cfbdead1048ff00e9ec1fe",
-    "rust-std-1.56.1-x86_64-unknown-freebsd": "1382799af56e1ec48cf3971f84122c9d445996422055b822d9d6226a31a20737",
-    "rust-std-1.56.1-x86_64-unknown-linux-gnu": "afd959b295e17640d1e94648278a944dc5f349ebdd9e59e2404729db0810c531",
-    "rust-std-1.56.1-x86_64-unknown-linux-musl": "88bfd0dce45d4321b0781550a300f90da5344dda20744219b6b23072b6cb03af",
-    "rust-std-1.57.0-aarch64-apple-darwin": "3b442d3f546524aef4fe8483c5ddcec1c5dbd52216d98aabc066883db31088d8",
-    "rust-std-1.57.0-aarch64-unknown-linux-gnu": "4c70901d1cbddec9ea99fbd62b20f454d30e1ffbb48a21169ac823b3f02a1fbc",
-    "rust-std-1.57.0-aarch64-unknown-linux-musl": "4f0c6533186b8fb596ee11b49bd6c9ffb76be59eb8bbdf26f25a47d297666c02",
-    "rust-std-1.57.0-wasm32-unknown-unknown": "3e0525d9e16f1a58e847080f2d3c02e275c2d5563b7980311e39382bb6c8441d",
-    "rust-std-1.57.0-wasm32-wasi": "391d814379cf117e927e5deb17bf44e964adee4f5f7208eaee1ddc8927da1fbc",
-    "rust-std-1.57.0-x86_64-apple-darwin": "c1eb892ddb50ebeed288b7aa8171ad46d62362bb26b2d82d2b463dfd45606dc2",
-    "rust-std-1.57.0-x86_64-pc-windows-msvc": "c3984148c561297f804238f6f1e4dd06302c6b3465d3744074016bc23a9f078b",
-    "rust-std-1.57.0-x86_64-unknown-freebsd": "1528a4bc7e3ba42da164bcc7b952dfa73048333c5b9254ce2d03db6bab6081e8",
-    "rust-std-1.57.0-x86_64-unknown-linux-gnu": "9140ad6f46a903345d4297a987ccaf37b9c5ca594cd6fd5a27d0be482116fe7f",
-    "rust-std-1.57.0-x86_64-unknown-linux-musl": "e59345c7ba6bde5e1d2950b846c097511998d5897c63a7cea078ece4b8507f5b",
-    "rust-std-1.58.0-aarch64-apple-darwin": "7c1d58bdc87b79f439b1083348a0e492305f8737ad1931755c26b2834a854f42",
-    "rust-std-1.58.0-aarch64-unknown-linux-gnu": "3a1283a2dce7abf2816dc70d622215f5769c416abf3e94dd94dd6a5d1109f506",
-    "rust-std-1.58.0-aarch64-unknown-linux-musl": "2e0589157f7f5055f4f295886f9161cdd239d845b7e021a0a59bf338facf9dba",
-    "rust-std-1.58.0-wasm32-unknown-unknown": "cb668772798a811de6e6d5823398abf888f29319bd3803621b0f4ff8c1693de0",
-    "rust-std-1.58.0-wasm32-wasi": "4d86cf175ebeb3002fa940447b52ff6fdad99f9fb2ba6a56e42ef961e685c3f5",
-    "rust-std-1.58.0-x86_64-apple-darwin": "fa89e9ab2e3645d6732811dae3828c86fbd65cb7447ec33c84137e61b168396a",
-    "rust-std-1.58.0-x86_64-pc-windows-msvc": "20738c0c92fbb59800926ab2fda5191b03537a3d6574ba4b6534de3ebc12d043",
-    "rust-std-1.58.0-x86_64-unknown-freebsd": "99016932b881df2a579d52761d4851ed538e34c39b47e882505892bb50d930bd",
-    "rust-std-1.58.0-x86_64-unknown-linux-gnu": "0517b0cb57a311bbe1997e9b87fc6bae1f9e1eadec4f7d97374740f17f890842",
-    "rust-std-1.58.0-x86_64-unknown-linux-musl": "10d911a65381b624cd1d33a913c9a2270355dbcd6db66b847e63f0f9b0f85f35",
-    "rust-std-1.58.1-aarch64-apple-darwin": "307f4d430f3491098b7d73db618408eadc22b0e290d2e22fbcf2909c5ec96c2b",
-    "rust-std-1.58.1-aarch64-unknown-linux-gnu": "1f81a91f29d1a5dd4bbedbb76be74582553bb363103bc390c2f8f1f26c2a24bf",
-    "rust-std-1.58.1-aarch64-unknown-linux-musl": "feeb863de2688b70b98eafaf7e707b2192373b649ad147aa07d1e95d8cde825d",
-    "rust-std-1.58.1-wasm32-unknown-unknown": "ef92a50952a03111c59745b8732f55f209da12e5dd8cd15072ad4ed96ad048e7",
-    "rust-std-1.58.1-wasm32-wasi": "09e3b15ebff0a68e83b36913e4711db5ffb4c8dd3d7fa827988c1bdde6b9ee32",
-    "rust-std-1.58.1-x86_64-apple-darwin": "aaa1e34c45394abaa943499e56047f6e678e42e7fcf5fe065000fb33559961cf",
-    "rust-std-1.58.1-x86_64-pc-windows-msvc": "b8c335eb2ac500f59f2259b3ac9095647566725ad133509732d3f4a5a7d53139",
-    "rust-std-1.58.1-x86_64-unknown-freebsd": "946c4bc834a89b30deb82664b04b67aee0fa65c232447b3adb4c29e89a559b4d",
-    "rust-std-1.58.1-x86_64-unknown-linux-gnu": "649bda48542f211d77afab4b71505572a4712b6b5c5bdee94533e2e7a9a832f1",
-    "rust-std-1.58.1-x86_64-unknown-linux-musl": "c4e56dfcf9d3d8466eb7d065af44763369df6e641a812a0a6974f94c98ef9a12",
-    "rust-std-1.59.0-aarch64-apple-darwin": "e70bd0c56f8f716238a1395c54dd9d993a3168e2764e404dc65553babf7aa127",
-    "rust-std-1.59.0-aarch64-unknown-linux-gnu": "81dbd37919f631f962ac0798111803eb8f06ffde608f0e5dd3682d701cf5566d",
-    "rust-std-1.59.0-aarch64-unknown-linux-musl": "e4f73617db73df7cb3b97984e38184f57292cc527654b52451293cd70f36f5a4",
-    "rust-std-1.59.0-wasm32-unknown-unknown": "d79f31c54eab23c24e245e8988efa2f73451dc8537d386c52dcc1d7a6db246dc",
-    "rust-std-1.59.0-wasm32-wasi": "b62d02df72e2129c64b35a5d531525d4f51f96eb550cc6705f618968218a7ed6",
-    "rust-std-1.59.0-x86_64-apple-darwin": "959af8bafbc9f3916a1d1111d7378fdd7aa459410cdd2d3bbfc2d9d9a6db0683",
-    "rust-std-1.59.0-x86_64-pc-windows-msvc": "fae30c5c9ac491380b556377fb0e804b35707118c5e69f8190debf828c9ad863",
-    "rust-std-1.59.0-x86_64-unknown-freebsd": "cf5e4303dd7c3b70a738a2336097c9f2189c8b702a89a8c453d83ac0dee4602c",
-    "rust-std-1.59.0-x86_64-unknown-linux-gnu": "3927fd7a094ba063daaf3163fa1b3b0b196968356845fe31c901a23ecc5048d4",
-    "rust-std-1.59.0-x86_64-unknown-linux-musl": "dfad080e9d86d97929f040a3e2a113a17d4906809c47e9ab6410418b492116af",
-    "rustc-1.26.0-aarch64-unknown-linux-gnu": "ddddaddb585b95d81854171ac4e02d07790505853cee3034f199c8b7897f32e2",
-    "rustc-1.26.0-x86_64-apple-darwin": "5cb67314656d16cf2a1bdc84213aaaf6afdb5811825c7afba916e2d42d3d641f",
-    "rustc-1.26.0-x86_64-pc-windows-msvc": "427ae4a43a901be288ff3a4dc85d3a14f7e95108cfdaae63e8dbb4a227e07cdd",
-    "rustc-1.26.0-x86_64-unknown-freebsd": "9499ce5b68d631f8345c387e1f59b21892d97e0acb5650deb61a34719310bd38",
-    "rustc-1.26.0-x86_64-unknown-linux-gnu": "7ca9a30010602aaf2244c376a3cc5baa89429d54da17b8ba1cb0cdfdc846cc61",
-    "rustc-1.26.1-aarch64-unknown-linux-gnu": "7a06bd5312cbe8bb19e526b4c9ab04de1628019815a566ce0ff9401515bc2c04",
-    "rustc-1.26.1-x86_64-apple-darwin": "e5f4291c3709b170fbeb17fab7fae50fe0c626dbdc5c42ddb1f342ea03acbad4",
-    "rustc-1.26.1-x86_64-pc-windows-msvc": "e84dca395837aa24b4ea87d46d06a333c2e87d0be5fc5259476a95fbcb05accc",
-    "rustc-1.26.1-x86_64-unknown-freebsd": "dc3dc36010d73349152e6158522e82830fda173007b9299b0a947c90769c54ff",
-    "rustc-1.26.1-x86_64-unknown-linux-gnu": "45bc1c30e0c473c42889f22b182ec6f0b0fc3be0825e1607c64933592486eb2a",
-    "rustc-1.26.2-aarch64-unknown-linux-gnu": "b09fea72e259811fcbc6aade942329bc4588356470765987ee37d6108a82f7b6",
-    "rustc-1.26.2-x86_64-apple-darwin": "5b0a3d94a4fa76ed28859123e35c09a91d7eb8ff65f40ec4c50dfa56ffed8ae5",
-    "rustc-1.26.2-x86_64-pc-windows-msvc": "15eb657747a86a4481501bb21e2dbcf56a06c0beea00e8677c86ef74b8812576",
-    "rustc-1.26.2-x86_64-unknown-freebsd": "48f20a8dc6bc54c90aae685d0c3fa2caf3677f1c4a4d0c53aee9d15588bd0735",
-    "rustc-1.26.2-x86_64-unknown-linux-gnu": "1ebdafe52b581a63cea217a036fd6e77706d2715ae9cfe10a8c715d753326004",
-    "rustc-1.27.0-aarch64-unknown-linux-gnu": "b58c0373df43623adcc990d36190ee157f46f6fba650d0242632f3df2dfbc425",
-    "rustc-1.27.0-x86_64-apple-darwin": "0b00c6971ef524f68b911f621d199e60c339c390b18e12700d55e012b62aa90c",
-    "rustc-1.27.0-x86_64-pc-windows-msvc": "22eeac4f4b4d91c28cf18c6a4a8b477091e6661e3e827c0b32355d52e634a517",
-    "rustc-1.27.0-x86_64-unknown-freebsd": "24c193213450ffacffebdd1413d77fc3c1ed00049cf1ede2d0f3f370dd86b462",
-    "rustc-1.27.0-x86_64-unknown-linux-gnu": "29f399a1a208ea3f27f21e57f2d832e9d801c397a986aaea17e3a2ddeded6c3c",
-    "rustc-1.27.1-aarch64-unknown-linux-gnu": "c48d19ff5474ce75ebbb97e1b26ca8dc23d38f635ae7a3e21b8a4139df5cfb8e",
-    "rustc-1.27.1-x86_64-apple-darwin": "747f616e07e5da9323a21c1cf9d76b53bb46094a68223d461a7333f26c714f19",
-    "rustc-1.27.1-x86_64-pc-windows-msvc": "76abfd523f876516e589f62a83eaaa6e55496745e32f2e9f3f87aca55da3e8b8",
-    "rustc-1.27.1-x86_64-unknown-freebsd": "9b199c21094f996fd9d4b620a5ff2c4bc5b8dab13e96bdf7c113291f601ec944",
-    "rustc-1.27.1-x86_64-unknown-linux-gnu": "a6bf6205b345b854d705d0028a4e7161a0f5b209e464130e7d135fa01a296dc1",
-    "rustc-1.27.2-aarch64-unknown-linux-gnu": "c1a5ddc6e40be5eef7afad8c126c6f426d07eb1a297902c7ef871279fdbeea49",
-    "rustc-1.27.2-x86_64-apple-darwin": "b5c5edd2094afd0a92ad776dbd12cb6ee37800b940437dece10229ccacd1f561",
-    "rustc-1.27.2-x86_64-pc-windows-msvc": "c00dde7df7475340f5574b09c86d0e19f6707f838bf95d2ff463a8f4d4d76d33",
-    "rustc-1.27.2-x86_64-unknown-freebsd": "66d739632574fa52e82b40aca0eb4cef7a38047ed67cd6a240d8798a3cf9b6a6",
-    "rustc-1.27.2-x86_64-unknown-linux-gnu": "ec3efc17ddbe6625840957049e15ebae960f447c8e8feb7da40c28dd6adf655f",
-    "rustc-1.28.0-aarch64-unknown-linux-gnu": "09d1fa08d7403495ca07565eaabfcbe6703e842b765a68d5110cf4e64e988476",
-    "rustc-1.28.0-x86_64-apple-darwin": "10a5bf35177508c72050149663ff679a770eafa8557c6be0052603ca1267ae4d",
-    "rustc-1.28.0-x86_64-pc-windows-msvc": "39871017768fe779dbffaaff8696baf0788bb9c4d6c4caa3d2564e1153ab2199",
-    "rustc-1.28.0-x86_64-unknown-freebsd": "5eeaa17844f87e59aab821dc98dd15a920df0d1d7da3ef5808d2c586331c92a7",
-    "rustc-1.28.0-x86_64-unknown-linux-gnu": "008bb3d714544bc991594b29a98a154441914c4771007130361bbadfb54143d0",
-    "rustc-1.29.0-aarch64-unknown-linux-gnu": "c7480c0b98ae84151ffa8cadcb06d1ed2a11a755b6619ac1b89e7c886e98b7ff",
-    "rustc-1.29.0-x86_64-apple-darwin": "3462ba7e841485f93251762ce0b36a3922830a1249e5d79d6d010ceb43e4ee3f",
-    "rustc-1.29.0-x86_64-pc-windows-msvc": "b27c38cb60092e9cac8afc4ad760349821e6b068d986e13ad46233b9676ab35e",
-    "rustc-1.29.0-x86_64-unknown-freebsd": "38f30c96f0fa7ebfe94cd2db57e9b99961feca0a09045dbc1e955404b5d7f40a",
-    "rustc-1.29.0-x86_64-unknown-linux-gnu": "229c51d51efc239e6eb9b428795bb7f57309f11287705dcba4877d5e220102a0",
-    "rustc-1.29.1-aarch64-unknown-linux-gnu": "784ea61ff852225be622141600c79621456f1ad9f9becdf7070eb0217b8635aa",
-    "rustc-1.29.1-x86_64-apple-darwin": "64b86c923786dfafe8bbb5fcbef0d854132f29f0bf635830cd2d95ff225d2317",
-    "rustc-1.29.1-x86_64-pc-windows-msvc": "2675bf444df8fe900b84098917db3e765c87ad3c812ef2a818c7e622d77db457",
-    "rustc-1.29.1-x86_64-unknown-freebsd": "ed9b2ccbfc6028ce2c73105cebebdb9f2e2332018c687951639176358bfed9a2",
-    "rustc-1.29.1-x86_64-unknown-linux-gnu": "b99324394ba20bd12efa9d30dad72b10747bd075f97c7a9fd0ce3f9394383fa7",
-    "rustc-1.29.2-aarch64-unknown-linux-gnu": "54a8c54f04dec72d7f8655ce1c3037dc23ded2f9ada26e7ea77aa45fc8b0d0c5",
-    "rustc-1.29.2-x86_64-apple-darwin": "d9c0dd8127ed632e27d751f051bca933578317ffe891e39155ae721bc1d3ec05",
-    "rustc-1.29.2-x86_64-pc-windows-msvc": "53dcf97ed9461784d713c5a413df7e8e5aa4c9158a4d5921a038b77b17120a17",
-    "rustc-1.29.2-x86_64-unknown-freebsd": "94fba7a7b88ca86c037a48376b7e09bb4ca66e1268fc8d664796cdbdee97c0fa",
-    "rustc-1.29.2-x86_64-unknown-linux-gnu": "b04146b09edc4bad0de7c8fa1a5a2aa4416d365c03c5962b8a5b26c7047b7cc9",
-    "rustc-1.30.0-aarch64-unknown-linux-gnu": "ccff6c6d8386655955265f586862314dd3b646bbeccd1369877f4343b1960a53",
-    "rustc-1.30.0-x86_64-apple-darwin": "d4fcbc61c7323e6fa1001ae268c5db1693ff07e5ef1ac25907138a2ee7bd8faf",
-    "rustc-1.30.0-x86_64-pc-windows-msvc": "2d2d1a51bb15794920a2f0cccf7fd2c8bfb037d00975e799ff4a4ac3b83032ce",
-    "rustc-1.30.0-x86_64-unknown-freebsd": "68a74949e34118406673cf8cc0098b011907c840890e0640aa3b145ce91c521d",
-    "rustc-1.30.0-x86_64-unknown-linux-gnu": "cc45058e9963d33ca28220e752d9e360b7e05f17e34284f5f8197738c3a88444",
-    "rustc-1.30.1-aarch64-unknown-linux-gnu": "f3569c0a74f07aa2e56bf93c9f2aaddf7434ce17f85d6d6ff854fb9245888bcf",
-    "rustc-1.30.1-x86_64-apple-darwin": "fd8ca09595e9d686aef9e3b94259500b482cf7a01de167a8c72a4f8d19a604f3",
-    "rustc-1.30.1-x86_64-pc-windows-msvc": "8ad1551132de8c766d2d7c66d9bb93a959ebbfa7d86c47f196227fea914583dd",
-    "rustc-1.30.1-x86_64-unknown-freebsd": "2f79e386bed201eb9b6ffa58240742617ec6006accb559dab7b6424f33b65b5f",
-    "rustc-1.30.1-x86_64-unknown-linux-gnu": "d84de208499b59e4a3c074f9f3f2fcbb26fb20d6bfd19262e6d5f4181ddbe34d",
-    "rustc-1.31.0-aarch64-unknown-linux-gnu": "1e480d8cadceff39ad39d30fe874bfd485386c98842f16423310cb2ada1923c0",
-    "rustc-1.31.0-x86_64-apple-darwin": "250fd3f3aba7d38c4af9682a12a37c733dbd6dde127665b0f493551e6c4aea8b",
-    "rustc-1.31.0-x86_64-pc-windows-msvc": "418abc285870ab4d85d53769eac229cd66b7fc7cdaa6e73699530e88ee5dfaf4",
-    "rustc-1.31.0-x86_64-unknown-freebsd": "9ec40454e22e3494b9859c03e37e8851077f897845bcf838d69d4393900e7b33",
-    "rustc-1.31.0-x86_64-unknown-linux-gnu": "5c4581f0fc05f0f5076db6231b0c1a4d27eb61c0b36bfb42d97243ad8f4e43a0",
-    "rustc-1.31.1-aarch64-unknown-linux-gnu": "315ea9c981e4320a557f6c75b58242c0598a90316f610b4dfef5d06e82b927f2",
-    "rustc-1.31.1-x86_64-apple-darwin": "e3f9c5ccd0e6e09da8012f30ee9a1880efebc0c039cc1f3866cf50c984be16a7",
-    "rustc-1.31.1-x86_64-pc-windows-msvc": "0320b7544de463d4444c6445fd2e23044e28fde1173f614145a72a4bcfc6ccd9",
-    "rustc-1.31.1-x86_64-unknown-freebsd": "fb38ad94976c273c0fb95d0b5ba2d1ce90684e58fa06fafc9f8050ba00559f50",
-    "rustc-1.31.1-x86_64-unknown-linux-gnu": "77d47ce7e27a146e4301f11befd43f3fc5ac195ace0dfc07ac8154f130b057ea",
-    "rustc-1.32.0-aarch64-unknown-linux-gnu": "193cbe67161e20a0bf4eeb8bafeb302f3e61a59ca939a0454fc3fbc76e9524cc",
-    "rustc-1.32.0-x86_64-apple-darwin": "0334c4568f09cae984e53e4a3f4ff207e2bcc50fce13ad32b8eca89f014e5e61",
-    "rustc-1.32.0-x86_64-pc-windows-msvc": "a7799495d3032c5ad6b5f712f7d7a9538f695c6d8d2e5258c0f7aadac8cea1d4",
-    "rustc-1.32.0-x86_64-unknown-freebsd": "a14a0e288be8ce894a85810151a2eb70fc86afa36e4a5fae4e903c744b888687",
-    "rustc-1.32.0-x86_64-unknown-linux-gnu": "75c31f32e19548c1608611d08b82b87560e02f15caac7b2663a8189a4609977c",
-    "rustc-1.33.0-aarch64-unknown-linux-gnu": "e23141cc65d1d8e3957a96f3a601bdb7a9d09026ac20396aeaebd2613ea0d08e",
-    "rustc-1.33.0-x86_64-apple-darwin": "ea1f0a95015bbefba9eac5890b12ee2887f464822ab579c8bbc2db3023c6dd08",
-    "rustc-1.33.0-x86_64-pc-windows-msvc": "b935a78d072b9ae91ff8ddf9155df95d77fd8a1c6293e39df3c65b18d860320e",
-    "rustc-1.33.0-x86_64-unknown-freebsd": "8bfc7fc50c50294cf4ded35360b41b590180401a0d2e84256f5931c7c1ff35cd",
-    "rustc-1.33.0-x86_64-unknown-linux-gnu": "54a342f718b712d8a17fd7878ebd37d22a82ebc70b59c421168cd4153fd04c2b",
-    "rustc-1.34.0-aarch64-unknown-linux-gnu": "364328a40c7aa5749be80b13a14466149a559205e34aef3d8823dc2580f55921",
-    "rustc-1.34.0-x86_64-apple-darwin": "2044d44f01a8aa7fb3382f35fc839facfde4fc1eb6f951ead42aef954e317088",
-    "rustc-1.34.0-x86_64-pc-windows-msvc": "371f9abd2bc615b339dfd606d93e6b4892594fd86084d513e07a9f80ff21a828",
-    "rustc-1.34.0-x86_64-unknown-freebsd": "522662f147d0550e4f4f49026b4ebcc5e05a0935fa88acc9b99da5d7435755aa",
-    "rustc-1.34.0-x86_64-unknown-linux-gnu": "5852e84dd30e4a552a7cd4d7c0172648d7ffb4d9ac7078871adbb902c183ffc2",
-    "rustc-1.35.0-aarch64-unknown-linux-gnu": "dc06d77e6cdc06693d3b87ce473f151c96bda2c1e5dbba8c0354c54990c64fc2",
-    "rustc-1.35.0-x86_64-apple-darwin": "5b2fb7581332f349c041860479ffdbfec0eebf87fc3016146836b8868afc3ae5",
-    "rustc-1.35.0-x86_64-pc-windows-msvc": "df4f94d29d10fde2486d9fac3247a566d99a2b7f97fa6ebd416f308b804f7693",
-    "rustc-1.35.0-x86_64-unknown-freebsd": "d3b5a6cfa41264e1873287bdb89892a7edc40333d581f468890c68336f50a601",
-    "rustc-1.35.0-x86_64-unknown-linux-gnu": "bb3a07a1f2fdc3eeeee25fc40131d3f05494e3838dfd4e9275475ffc500d7a9e",
-    "rustc-1.35.0-x86_64-unknown-linux-musl": "a975395127a2abf727a7c6b6ed2656e90368b46c5e6ccdc53fd50acca3cd3f94",
-    "rustc-1.36.0-aarch64-unknown-linux-gnu": "62e40e0677032ae0cd91a7f8b4450dbaaf5223050a05b28a9174802d09691da6",
-    "rustc-1.36.0-x86_64-apple-darwin": "97568272717ffa62dbf4459dff6086e69c808df252a912146e28468412667013",
-    "rustc-1.36.0-x86_64-pc-windows-msvc": "4c131f68eac74bc20315eda097578c43de2b695445739462a4b273f90a131ffc",
-    "rustc-1.36.0-x86_64-unknown-freebsd": "c2dd0cec49b054ed9439762fb31555b8df9a3d81747b194f7d3afbc6d8adb8de",
-    "rustc-1.36.0-x86_64-unknown-linux-gnu": "7c149fa1695b41e8e1edcb95dca199522889f119be99f922741084d50470a9e5",
-    "rustc-1.36.0-x86_64-unknown-linux-musl": "913b7097e13c4e616edb8f83a3a976908c8c12295472f65a5682465145ced552",
-    "rustc-1.37.0-aarch64-unknown-linux-gnu": "721ba21dbe9b350a8c50a4c783c76ba3f6926525480518851dd6ba92ecdb042c",
-    "rustc-1.37.0-x86_64-apple-darwin": "00d4d15b4d9a4d188e0db8bbc17cd5f0c3c3a87ad681e80ef15580c0d5bd4ff3",
-    "rustc-1.37.0-x86_64-pc-windows-msvc": "790bdb5b57f397d7481151ad8715f7ac3f32b343efaf2922650f4fc6e374d7d7",
-    "rustc-1.37.0-x86_64-unknown-freebsd": "a4dd357a0b39abf1ebbe8a0f64973c3b0c5bc527e374c12afe51266279fc1ca6",
-    "rustc-1.37.0-x86_64-unknown-linux-gnu": "c759b318f333639a45f29c1551ca7ce55b1bf64e0fc3a3357d6b9356885d1626",
-    "rustc-1.37.0-x86_64-unknown-linux-musl": "1981b67c0cbcaf37f40ee9576d6d1b9a554019e571fc4c49ee9457cf011e0f75",
-    "rustc-1.38.0-aarch64-unknown-linux-gnu": "0c787eaf01b5779b5a0c12bd0573901cf1b58e5e484ad44c3530b7ed51754d15",
-    "rustc-1.38.0-x86_64-apple-darwin": "ac34aee5a5f67003b8f7f857ddb1fa68f89a32680a591ab77561282721b75256",
-    "rustc-1.38.0-x86_64-pc-windows-msvc": "6e00ee5f34c552c1b9fafec3b7a1330140c820a2ae4bd4213d2c4f135341a88d",
-    "rustc-1.38.0-x86_64-unknown-freebsd": "1d99318bbdc947c6dc375215f0eddcd767348c309811cd141e5d18e17d5aaaa4",
-    "rustc-1.38.0-x86_64-unknown-linux-gnu": "790a611695fabd12c3a141efa58b3dc5913d749947c1a95d3f5b6eb5476ee612",
-    "rustc-1.38.0-x86_64-unknown-linux-musl": "bb0166cbb1d31bcb09d79224e7ac43a80d9448b7199b5392a3852b3ec71840aa",
-    "rustc-1.39.0-aarch64-unknown-linux-gnu": "c64fc482404277fdb160a4b593b0be5a1b0c32d985464595015295321d111621",
-    "rustc-1.39.0-x86_64-apple-darwin": "9347ffb47e936fb44666ada525f8bfb86758a719e7c0330e93e17bbd5f3623be",
-    "rustc-1.39.0-x86_64-pc-windows-msvc": "9a94785fdb473079d02f32bded6691322688001dcc16f5bfb582c1d181d3ef67",
-    "rustc-1.39.0-x86_64-unknown-freebsd": "3714bf7bd4163a3bfe18291d49acaeda02f4bf2beb9fe36c520d2ecdc29ca031",
-    "rustc-1.39.0-x86_64-unknown-linux-gnu": "333399dbf96dd6b8a9dc9cc56b1cb5d8aac2296b4e4aa857bd59d906d6df6fa1",
-    "rustc-1.39.0-x86_64-unknown-linux-musl": "07a9705dd77c6859ef921389dc6a958a297030e53571fe015163c79aa93d1e43",
-    "rustc-1.40.0-aarch64-unknown-linux-gnu": "8981d500261ecfec93c4b52e8f96a81c705b56ff9317d63e0363d11a72ee09a0",
-    "rustc-1.40.0-x86_64-apple-darwin": "f45bb00a9a59ca819a8266e9de77f7232f4b704d64f1c45d3870e2db4f646a77",
-    "rustc-1.40.0-x86_64-pc-windows-msvc": "16299638792b7bffb63ca20674a7196a33d1fb25e91083b90f8015be010eec19",
-    "rustc-1.40.0-x86_64-unknown-freebsd": "65810804d3e4cf8f845978c6226f8e23d77a7ccf35ebafdd5f8dac027627f396",
-    "rustc-1.40.0-x86_64-unknown-linux-gnu": "5085a26abdc932fd9339aab2078084f9ab654f8298ad9f301611ac41ba8eca19",
-    "rustc-1.40.0-x86_64-unknown-linux-musl": "acd01559a875b57f6fc7e27beafd8d011f8295c627ab276d814700082088f2ed",
-    "rustc-1.41.0-aarch64-unknown-linux-gnu": "9d994935f92088c968f520f558a88b140bb7d60e917fc4ad69019e2b830b1db7",
-    "rustc-1.41.0-x86_64-apple-darwin": "25ee8865e21007c282cd1f3457c3bf932591337c3044e55ba574fc988bead3ad",
-    "rustc-1.41.0-x86_64-pc-windows-msvc": "b338afb534be113f179252f8de29195e201dcd8bf4053b1d5e8eef928c457ca3",
-    "rustc-1.41.0-x86_64-unknown-freebsd": "de3386f79a0e261b8f6133dc0d5a7d51b70ad73dba5a14dd30204ac285d04f3a",
-    "rustc-1.41.0-x86_64-unknown-linux-gnu": "531b4cc77cc25e960aafa2ebaee073c137fceb0004447c6b7274557281c62a6d",
-    "rustc-1.41.0-x86_64-unknown-linux-musl": "18c0f6d263d3a54a6842e2feab7c90ce5d8e5136b67cedabb98756f029122c8a",
-    "rustc-1.42.0-aarch64-unknown-linux-gnu": "612c10793852fd0c2e52b30f3d50dd6aef6f8181032b820eddefc93e3bf4d97b",
-    "rustc-1.42.0-x86_64-apple-darwin": "778dea93d7e46261e2c06cadec35b68f9857604f279ce6fbd1b37c1a89634625",
-    "rustc-1.42.0-x86_64-pc-windows-msvc": "d132f99df49cb0d421f6d8948a268d4eddb1ae23e0af2641272438998503708b",
-    "rustc-1.42.0-x86_64-unknown-freebsd": "e6e36a7df9886b18cce32752f5ac7a8da6977c6a1878fae696340f3843176fe5",
-    "rustc-1.42.0-x86_64-unknown-linux-gnu": "4242a728b850bf6e74db9a95c68e8ed316fa4813b38e6b8bc296396b5f47ea5a",
-    "rustc-1.42.0-x86_64-unknown-linux-musl": "60945b79fdf8be51c87967368245380a64d0d331ef1aefa778712f3695028c39",
-    "rustc-1.43.0-aarch64-unknown-linux-gnu": "99f26a2b4376fc08203d129d65e15f01b2630db40dd2d4d6a7b917df8d512e72",
-    "rustc-1.43.0-x86_64-apple-darwin": "3723b8194e38d7238262b4cc49762a22037f53f58ab1df199c1d710dad5728a5",
-    "rustc-1.43.0-x86_64-pc-windows-msvc": "c6d1aa60cf2056c4fb35a5a197fb4e1a42887eb4ad1615b00398524ff78ce74c",
-    "rustc-1.43.0-x86_64-unknown-freebsd": "69d572e80e13da85599557f662ce71909823194c874eea0fe91f82da0958fa68",
-    "rustc-1.43.0-x86_64-unknown-linux-gnu": "950b323044ae9a7932b697a2e4f4f62b59248f58faa320e22dc20f8ad9521f6b",
-    "rustc-1.43.0-x86_64-unknown-linux-musl": "7b9ff3fdc2024d044f19bfd5353441fa5fe7409c9ca4883726b5c8fdece3a7a6",
-    "rustc-1.44.0-aarch64-unknown-linux-gnu": "b0fc4cee7119c10f79fe2701ca0d19ab738bd20954352ae5b1dcc4c6f432779a",
-    "rustc-1.44.0-x86_64-apple-darwin": "4fd09afcae85f656d4a545ee415e19546e03e34f1ca23be5eaa68c489e3186ab",
-    "rustc-1.44.0-x86_64-pc-windows-msvc": "0b3aec27d86034cbadf4adbaf36308bcf98d97c0979d162ffccf4328fb4f96cd",
-    "rustc-1.44.0-x86_64-unknown-freebsd": "6f3c4e16bbda8719e5c07dc687e84a7236e097da55c4fabea13ef1cbd6a30c40",
-    "rustc-1.44.0-x86_64-unknown-linux-gnu": "52671652e7045df0702d8f2e8af60bf6f20da3e3a5db1aa6022bf9545e914449",
-    "rustc-1.44.0-x86_64-unknown-linux-musl": "71440388e5e4affe11fddf3c3a706ac6f129d9ea47717894b586290e553223fa",
-    "rustc-1.45.0-aarch64-unknown-linux-gnu": "b1ef2ea19142d851f2ee6936cd46a30ec8f157ba53048bc2748279d1e9e0ad17",
-    "rustc-1.45.0-x86_64-apple-darwin": "fd17d99c3e827f0b4f01b9122d4bf2fca0f1144827300a1eda93718d8642b39f",
-    "rustc-1.45.0-x86_64-pc-windows-msvc": "f65fb383f2c6f979a19acbd4e099e6eea8addc0e76f1fd988582dfc0daa4a121",
-    "rustc-1.45.0-x86_64-unknown-freebsd": "b5d263c53320f8a5dd5daceac1e60da172fd21614ada67f584565430d9d1c9c6",
-    "rustc-1.45.0-x86_64-unknown-linux-gnu": "3ef2fcf818c133c3e9957441917b23ea536805efd0ff9ac6ee0bea349d703a90",
-    "rustc-1.45.0-x86_64-unknown-linux-musl": "596f04e0774225ca85b5c99575854dd66973854ebcdd0b7a60d3c2cff4d415db",
-    "rustc-1.46.0-aarch64-unknown-linux-gnu": "41239ece19c79250a205e5b2fae60b242bba4bf72b687bccc88f011e66a872b6",
-    "rustc-1.46.0-x86_64-apple-darwin": "f690b375df7b1399e5baa69b64932e3e4a3f2b651e5ef2ebc85509bee777a9d9",
-    "rustc-1.46.0-x86_64-pc-windows-msvc": "56badce580b65f59d676b20b4e5f138969e5039182b7f6052ac7da9d38bd0aca",
-    "rustc-1.46.0-x86_64-unknown-freebsd": "e76d3e18d1826753395d881bc37be3d43e9ff8d2d34d49d7ed6105f228d56284",
-    "rustc-1.46.0-x86_64-unknown-linux-gnu": "4c0c740cfb86047ae8131019597f26382a9b8c289eab2f21069f74a5a4976a26",
-    "rustc-1.46.0-x86_64-unknown-linux-musl": "6ab2664edc93122b7a93a1b72025e869d088445af65d3df286258c3860090114",
-    "rustc-1.47.0-aarch64-unknown-linux-gnu": "2e143bfa59eca5c3f3e995c5997ae55c7defe824fb4dbe7e77896e132f42c24b",
-    "rustc-1.47.0-x86_64-apple-darwin": "4773ad46b912c859984f1e4466e506dd8102603d1ffcd8b63cfe7522f49e5987",
-    "rustc-1.47.0-x86_64-pc-windows-msvc": "f2010e4500602d0efc431c0853692733415bedb58652376023d7d6ac204f8c7c",
-    "rustc-1.47.0-x86_64-unknown-freebsd": "811f298c07fb32a6a01f9960f2d7dc403f6f288a3f475ed9806648e2cc5938ca",
-    "rustc-1.47.0-x86_64-unknown-linux-gnu": "d96be0ae1deada01f41372ab2c2f485a9f8625069aeaff33c5b513061e9706d4",
-    "rustc-1.47.0-x86_64-unknown-linux-musl": "4c6979e2b01fc8da0f83b30e9ccf869f692ad84cf517e300362624d9eaac8635",
-    "rustc-1.48.0-aarch64-unknown-linux-gnu": "9c83a5d18f6ca913eeffd78c53913da288b171ff245137b646a8fd280fe72340",
-    "rustc-1.48.0-aarch64-unknown-linux-musl": "eba49211f2e0aae157e18258edacb3031dc8b4bb6db0bca142c919d9042c7ba4",
-    "rustc-1.48.0-x86_64-apple-darwin": "846f45f9bd6676e9d1f6758279b48e32564ba23773e69aa89692dbc123dbea5a",
-    "rustc-1.48.0-x86_64-pc-windows-msvc": "395b2a8e6824b3e56a8a9b4598273be5410b4ea64e92c8aeaf900d9ff21f470f",
-    "rustc-1.48.0-x86_64-unknown-freebsd": "fbaff313c2423f1ababc9792332560ca0e3749abf3749e7eb5289bc6515d9424",
-    "rustc-1.48.0-x86_64-unknown-linux-gnu": "aa4a96b010e0d4573e6a1fec230beaadaae6cdce2bb4befeee7b1c081ee9ef8c",
-    "rustc-1.48.0-x86_64-unknown-linux-musl": "5513813bdbd1aa5e4c4a0a0e680953b72d24829595920fec4e69da3682abdc0b",
-    "rustc-1.49.0-aarch64-apple-darwin": "3e8c0c9101f27623f7607f2d8acef5f28dcb2bdfcded56f210d9d370cf9a9c06",
-    "rustc-1.49.0-aarch64-unknown-linux-gnu": "b72699cdf74c03ccc0aabab937a69807f2ceb5861f3508593e1c222190c4efc7",
-    "rustc-1.49.0-aarch64-unknown-linux-musl": "b76b7f687ffceed03a86e69dafd251e8e069c31c31dbe70c0fcad1ace5398956",
-    "rustc-1.49.0-x86_64-apple-darwin": "09333f9aacb9c5959e2a2798d7e283cae674255f063a35ea28f91595caa0a78b",
-    "rustc-1.49.0-x86_64-pc-windows-msvc": "800b7571438850074aeb0fb9a0e7d890c6785f9f4823b3052b9b0b098bb9ddd4",
-    "rustc-1.49.0-x86_64-unknown-freebsd": "66427837606aba2cda99d4f52161bee1086e98b226a5cb99be8e9a7bf896495f",
-    "rustc-1.49.0-x86_64-unknown-linux-gnu": "42300556b987934e5e4677972c1dfc57eb07731dc62fa9f4f561935a1c84ed0e",
-    "rustc-1.49.0-x86_64-unknown-linux-musl": "4c56ed1fcee28a6f35c98d14edd34a33a60f52ac583c98313623760de093bf7d",
-    "rustc-1.50.0-aarch64-apple-darwin": "3abc090591fb7fd0a292eeff4cc6a029841d39b0a768eaf1f0b9e4e06cba8ed7",
-    "rustc-1.50.0-aarch64-unknown-linux-gnu": "9afe0e968da845981b463beb75f91d6da0d4de5443d1abb6002b75a8cf066ea7",
-    "rustc-1.50.0-aarch64-unknown-linux-musl": "abafb6bb1d2f065b72b43331e6cb00f3c98c78af00f261e1c53828c26528a078",
-    "rustc-1.50.0-x86_64-apple-darwin": "3637ee8d8bc0f8e922b1f9ec7b6fc00b6efcceae97c337d205a3bc472be7b936",
-    "rustc-1.50.0-x86_64-pc-windows-msvc": "d7f7607c9cd3e137a335904e1186345f4328a971588ee8a54838e32a35a38e3a",
-    "rustc-1.50.0-x86_64-unknown-freebsd": "916e616188638738ff217a047b3fbe372d9ad3734bb466d0e56d2fcefd1da5c6",
-    "rustc-1.50.0-x86_64-unknown-linux-gnu": "160a91a3f545f96b2b955cf48811080d8e0accbd9d9a9732b080e1ffa72113bf",
-    "rustc-1.50.0-x86_64-unknown-linux-musl": "528d02fa77fc0da26904ff10da2d6f94c6da618c323b37247b49fe28fd950240",
-    "rustc-1.51.0-aarch64-apple-darwin": "110db4985d7cb18ce6879f34fc02422f5f074b3a2b40b62e6bfd54ceaaa56d33",
-    "rustc-1.51.0-aarch64-unknown-linux-gnu": "b63b21d56cab87133c9cd149f7c8ca3b3399a877cb16496a86f7a87d8b15c784",
-    "rustc-1.51.0-aarch64-unknown-linux-musl": "58305d3fffa1662114587a6144afff9a872496aef6073b23dc5da9676d315d5a",
-    "rustc-1.51.0-x86_64-apple-darwin": "abca027d4e45870ac97f220e5f60f4e849dd53f575f902046952a127da739aa2",
-    "rustc-1.51.0-x86_64-pc-windows-msvc": "a6fee78393f3ee78bc81b5437122f7fd220d8d6686c9cfd41848bd699c9758f4",
-    "rustc-1.51.0-x86_64-unknown-freebsd": "572e7c13bb5951a12a9f6f422e636da8468747d29ab6901ef3b5b03932482e1a",
-    "rustc-1.51.0-x86_64-unknown-linux-gnu": "6b1298ef220302a33cad21fad7c8e1535264872b18e2ece733ac37ed31571dda",
-    "rustc-1.51.0-x86_64-unknown-linux-musl": "77614b115eac2ec975f29a8e2d60d8a77834f11689ff6b0d94eb74d4999df285",
-    "rustc-1.52.0-aarch64-apple-darwin": "9e17debb80c85695aef2b76f1b4ff3a10ab40947b386b2590fe168c4ba77ea42",
-    "rustc-1.52.0-aarch64-unknown-linux-gnu": "cbfec2d4cfd38a04e1945beb4736a6ad2eb22f3a18743865158c4e0a4da43450",
-    "rustc-1.52.0-aarch64-unknown-linux-musl": "fdf8be2fd4c4505155f81099e171fca5300f14cd1a343b4e11753bea99f2764f",
-    "rustc-1.52.0-x86_64-apple-darwin": "abed71e08d05a47f7a54495212ef67e020cc61edd6c90cb1589bb4c7f771a821",
-    "rustc-1.52.0-x86_64-pc-windows-msvc": "bcad3eaaac6f8bc117346047b3efa088977927ca668477b6e51cd037428ceed2",
-    "rustc-1.52.0-x86_64-unknown-freebsd": "5883388f0d1abc7e187d03bb213a4f34b8487ae4b665d9a76acd80c86fa5d3de",
-    "rustc-1.52.0-x86_64-unknown-linux-gnu": "76f16908c37c719abc1cd28e9cb4cd484aa88ba00152b2de3188b6ce86eea848",
-    "rustc-1.52.0-x86_64-unknown-linux-musl": "13e1ef7a3db7a90a2756e423cda10ae0b95510f041d543d8c00a91a2ffbb68dc",
-    "rustc-1.52.1-aarch64-apple-darwin": "d9f76477db98aebcbfd5ebbe4ce5c3aff30d7ac0185b25cec27e4ecc376ef4b8",
-    "rustc-1.52.1-aarch64-unknown-linux-gnu": "5218780009126b391786280f76b98aea743fd7cead8d48befc03791c095f88d6",
-    "rustc-1.52.1-aarch64-unknown-linux-musl": "a1dea60ad703c424f99becef772b97ea3966974002427ad8baf3ff5473fd7ada",
-    "rustc-1.52.1-x86_64-apple-darwin": "bc896a1c701ca10328671710c4a06ec4774b398cdeb64cf55fcf247f31dd275f",
-    "rustc-1.52.1-x86_64-pc-windows-msvc": "1828ce5c7ca28e7cdc9cb75105dd3489ea1e3648f800d3db0e99c248292d816e",
-    "rustc-1.52.1-x86_64-unknown-freebsd": "2de1df845045a8c6dc3832e7d615c9124c52eb5626b1aff1219e66fd3116623b",
-    "rustc-1.52.1-x86_64-unknown-linux-gnu": "52002b050485674e87fdd72c7b49dac8783dfa36575be7e6265a69b4e66f8570",
-    "rustc-1.52.1-x86_64-unknown-linux-musl": "195711077d44392a13e57c6695489e71cf811538eba02758dbea7c4ca2a72047",
-    "rustc-1.53.0-aarch64-apple-darwin": "a7f9c48adb4062c43bfad8fe608551c98d538529cbd13cb979578532a91edbe2",
-    "rustc-1.53.0-aarch64-unknown-linux-gnu": "a54267708a1e80bab2c0a919284b9387f4b70ca61a96dce7544b2c8001adc5dd",
-    "rustc-1.53.0-aarch64-unknown-linux-musl": "b26c35cc651c9233c58d08c12c076413a9637875a7fceef3f6b582629e169282",
-    "rustc-1.53.0-x86_64-apple-darwin": "ad3d181deafb4bfeaf3d313828b258b89ad2fece3623bb4c4488e282db802e39",
-    "rustc-1.53.0-x86_64-pc-windows-msvc": "27b895346c458c141d1cd277b3e87380ad3e304c62c7240d778a0cd3dc245581",
-    "rustc-1.53.0-x86_64-unknown-freebsd": "304eb5d1b4a8a98fb67cc1a9599c1c0ef7553d939945a6a80d768e3b69ff8c75",
-    "rustc-1.53.0-x86_64-unknown-linux-gnu": "c2c24b41602a589886f87276d4d46e42efddbad820917dc4dcbf6625cdf9ff52",
-    "rustc-1.53.0-x86_64-unknown-linux-musl": "6ab5694ac8ed7ccb79b7689e5dcf9198ddb937e123d31289e7b385bb60b3848f",
-    "rustc-1.54.0-aarch64-apple-darwin": "f18bbe09d8e08be5753e5f536ddfe15d4141b3ce968a2809a9869c91d492292b",
-    "rustc-1.54.0-aarch64-unknown-linux-gnu": "595e8db56e68247ee3caf29f6a3d3c72d7955ed45f1291e7e596d63923427a86",
-    "rustc-1.54.0-aarch64-unknown-linux-musl": "02360abef6aebef211a3e6fccfbc81f27c83e930c3291f95e033c8c9eb6c07b1",
-    "rustc-1.54.0-x86_64-apple-darwin": "b3ac970d31893a192c8ec46fd6c9b8409751246cba029a212c4cd84115086a13",
-    "rustc-1.54.0-x86_64-pc-windows-msvc": "9fd8ed58b28cc6554dc7ae17e8b96770cc4736460c4a0047c78fb7ff54d53f10",
-    "rustc-1.54.0-x86_64-unknown-freebsd": "a2974a15b2b284c09eeac39396728544700fdb8689e8b662ee062e68daa0b554",
-    "rustc-1.54.0-x86_64-unknown-linux-gnu": "cd4c1c5db3b8ca3f76fac42d209e83640794eb8c2bbfb71b71e5f93b584d159c",
-    "rustc-1.54.0-x86_64-unknown-linux-musl": "896b4eb229259005410311a29587aaab4ed7d5d590d810b06abd7601a004a953",
-    "rustc-1.55.0-aarch64-apple-darwin": "4d782c947f1a35f5fb60799f019b4b82ad121a017746c935ab37fbd105c66c8f",
-    "rustc-1.55.0-aarch64-unknown-linux-gnu": "31dbbc1395f5a545c114e778552159713977dec423bca5705bd4c92ee3840cb1",
-    "rustc-1.55.0-aarch64-unknown-linux-musl": "a5170d72af554b1d39a0db46cb2bd55911132705e3cf8e38d16a382f3b9d4215",
-    "rustc-1.55.0-x86_64-apple-darwin": "7d1197687c72d4c72ae04905b96a7205ec4ad7c9da0231ea6f3bbbc8399adb84",
-    "rustc-1.55.0-x86_64-pc-windows-msvc": "2cb681fa074386af8dd2cc6c79b57e1a8048acb1dda18e04fedff1c2dd84d70b",
-    "rustc-1.55.0-x86_64-unknown-freebsd": "ad50ba2c87acb59020959df594aadc207f4fa527b2b2cd8849f3b1d3f666986f",
-    "rustc-1.55.0-x86_64-unknown-linux-gnu": "9da098b2df01124f2c4b9789767151521f4bab98f50befdc75a691cece0c0d00",
-    "rustc-1.55.0-x86_64-unknown-linux-musl": "f7c1fe2393db842630b23ecf6164fac471b11235fdb62a35a86e7cd3cf8d749c",
-    "rustc-1.56.0-aarch64-apple-darwin": "c588dc2cd352eaf27ae74ee593bd0aaa65ac2742416c714f5827f395bb7c19df",
-    "rustc-1.56.0-aarch64-unknown-linux-gnu": "eb7283729bc4c336aa23b020489e8feb78eed70831213ee2e4121ce7d6ac33f4",
-    "rustc-1.56.0-aarch64-unknown-linux-musl": "e312187386bfb39fde04ca007faf656179e8c2b1bb1a0d59007db7a247b54b4e",
-    "rustc-1.56.0-x86_64-apple-darwin": "a724945de2bb0ba78e56217ba02f67ad0cb07a01c2438b01b91f85fb94d273d2",
-    "rustc-1.56.0-x86_64-pc-windows-msvc": "1034b2f6150d892649c1eb8fb10dbb4228ca2010f88720795e6a12696cab369a",
-    "rustc-1.56.0-x86_64-unknown-freebsd": "4e7a2f62ef2873b3bd45749133c1690c4b0e037af5a586e9ea691e480f8d2d40",
-    "rustc-1.56.0-x86_64-unknown-linux-gnu": "aa66db89c3f89325e40ba0bfe481f4d631559884ae4812c3c3d091d80ba7c245",
-    "rustc-1.56.0-x86_64-unknown-linux-musl": "5f7ed6c289b56c129d6dbb407348f566caf39cfc5db35a4b6253cf514940482e",
-    "rustc-1.56.1-aarch64-apple-darwin": "fcb2c2e46e3cc7e7cba3abbb78ba87131aea56770145f8d97944b675a491312a",
-    "rustc-1.56.1-aarch64-unknown-linux-gnu": "9e7461908d0b3e6f4bbb158b71d85e536c186fe571c9960f8ef4300328b25a11",
-    "rustc-1.56.1-aarch64-unknown-linux-musl": "1e913b7f39d0f478c48ff9b9dd6a05dfe67a6ad58e478509cafb20e106512965",
-    "rustc-1.56.1-x86_64-apple-darwin": "876b9ed13a71ada3c00878c6006d837b852973cba84419753445c8a8a76efe00",
-    "rustc-1.56.1-x86_64-pc-windows-msvc": "709fa5ad9723e233025ab0cd142b628cd8a4bb8d11fcdbb97a779d78a60604e5",
-    "rustc-1.56.1-x86_64-unknown-freebsd": "b6a440bf5c3b1e4930effc07c6e50bf03cc44c0465f0c379d626b800f4971700",
-    "rustc-1.56.1-x86_64-unknown-linux-gnu": "d09557a497a4f3b0726cae4c8e193843e403c80615f25f6ef740c79d7e4c122b",
-    "rustc-1.56.1-x86_64-unknown-linux-musl": "b49ef5d9d8a2c49e48dda8bf08fc5a95ac87095a8895df9dbce0ecfb1a97c70a",
-    "rustc-1.57.0-aarch64-apple-darwin": "cfd28be33d8669c85dc177775de6c4aa94289bba7cc65b90cbd2d9cd5486c860",
-    "rustc-1.57.0-aarch64-unknown-linux-gnu": "91f1e29387fc53430592985b0620c8587e4aacc8ac582de4ef96c45c9ae930d4",
-    "rustc-1.57.0-aarch64-unknown-linux-musl": "e5289c930ed72c08310108f543deafc319c27389523c6c6905fa35283e9ab725",
-    "rustc-1.57.0-x86_64-apple-darwin": "4417eea141bb915f39305cf2d812579f503422fa2e712eddf11427ce91c48294",
-    "rustc-1.57.0-x86_64-pc-windows-msvc": "073bbc3f8f71fb20bf6c7bd2e4cf6e2758c8ee6f08d3eef51a615d5b5b8a516b",
-    "rustc-1.57.0-x86_64-unknown-freebsd": "ef9af581c88b5d52f3b91f8781fbea77426364ac035bb7cb274f41fa3bf60706",
-    "rustc-1.57.0-x86_64-unknown-linux-gnu": "92257646cd85b7c03520c838920851c879845ed8dfd2b339d2ebb4480ee4d4d3",
-    "rustc-1.57.0-x86_64-unknown-linux-musl": "49ff02cdc94bd8732c2969b06006773311c8e41c188a9cef627b37eefb0b73d7",
-    "rustc-1.58.0-aarch64-apple-darwin": "7b3291177d4f8a73c8e20185a04bbc88775fc85eeb271c19bc8f37fb5051ae0c",
-    "rustc-1.58.0-aarch64-unknown-linux-gnu": "34d8fdaec504efe6e9448ad5a118ac0e7ef3bd9a8f6c49ea68204f2f9a9dae4e",
-    "rustc-1.58.0-aarch64-unknown-linux-musl": "2c6ee3dfdd496a01f55f6b0ae683d3acdecbd42ee386c4000b336351e89b3cac",
-    "rustc-1.58.0-x86_64-apple-darwin": "3d3815385dda1c1d8617ee14b682ec3804307b0f5a0ac5604a7dc5efc783263f",
-    "rustc-1.58.0-x86_64-pc-windows-msvc": "2296e7bd3e4977917e1cfd021a618064e3bac955338193fba89e84705306aed9",
-    "rustc-1.58.0-x86_64-unknown-freebsd": "89969a81fd9c9cfb94e6554bf1a8884417b0d5dde5e7c45bd4e9b1887771f5d5",
-    "rustc-1.58.0-x86_64-unknown-linux-gnu": "94e3a5e6dca2ae2516d6496568b6791b9501ac500c3e5faf6f42baaead41d404",
-    "rustc-1.58.0-x86_64-unknown-linux-musl": "1134b85ce578ac017650d8e7c360d14a85a1d6185c164678f95440cac1f6786d",
-    "rustc-1.58.1-aarch64-apple-darwin": "cbcc922fa499131b4f9b0ff6c656792edd34452dc902552a0d0dfa8f4690b996",
-    "rustc-1.58.1-aarch64-unknown-linux-gnu": "ad97b6e3ed1e6701ceaa1bad7f2da391546d27b121d967b606bd48542f21c669",
-    "rustc-1.58.1-aarch64-unknown-linux-musl": "156c5909cb6c9b5d96662f2eec87edefcdf019783082745b9abaeb97d1d45307",
-    "rustc-1.58.1-x86_64-apple-darwin": "859ea96ca53ed6480333273ccd39c0f9a487d7f288a5fd2646c3907353402fce",
-    "rustc-1.58.1-x86_64-pc-windows-msvc": "31bc5359886854fccf16956a92c4205372df0ba1be19642879a0e9d6441a069c",
-    "rustc-1.58.1-x86_64-unknown-freebsd": "ccc043fbf337adda1dc66611f8b8eea3d2fd9e1cee9adc1a07d1a3c4c0b4711b",
-    "rustc-1.58.1-x86_64-unknown-linux-gnu": "1bab764b75bec5b83ec88f6cf7e6127f0bc5bf64307277d1f5ce8838a8b8a415",
-    "rustc-1.58.1-x86_64-unknown-linux-musl": "626cfaf717b3e05d2e20726ecbbd7026edf8a816de06ef0f499e5a27339c1310",
-    "rustc-1.59.0-aarch64-apple-darwin": "caac78491d8f0844bb9a512989a409c35ff681a131495e7ebfacb69ba006bbc1",
-    "rustc-1.59.0-aarch64-unknown-linux-gnu": "04d4add5530d247214ec8afd32f2c91d75b219035130b877e4769cebcd4174d8",
-    "rustc-1.59.0-aarch64-unknown-linux-musl": "a50567a08ec5a33bdb60b4a6c4572cb85c2e48429ed6d98a28580ca7ed82d8ed",
-    "rustc-1.59.0-x86_64-apple-darwin": "eb5b613800c75882bed9e3bb48c325aac0e5ce418ae2b19f51e4ccf7e4781e0b",
-    "rustc-1.59.0-x86_64-pc-windows-msvc": "e838ecdba060b4ad3d0becc08027c9598977db40ac1f4e5fa9231725110ea06b",
-    "rustc-1.59.0-x86_64-unknown-freebsd": "053fe53aa72e9400b3657049cb0352a26268bd5a81a2b09500ff2cb150c32767",
-    "rustc-1.59.0-x86_64-unknown-linux-gnu": "e7ed041c93b77a7d986aa198d28f63ab96493fdf164bd28c8785c5b31a9e62d9",
-    "rustc-1.59.0-x86_64-unknown-linux-musl": "34e7b33acbffd2012906249509a0d364692767a15a54d10e67122361703ee811",
-    "rustfmt-1.48.0-aarch64-unknown-linux-gnu": "28f7d1ef37c034033eb0e30a13e5f0ad5bbc506adb8a8a9c03adce2b0d4842d5",
-    "rustfmt-1.48.0-aarch64-unknown-linux-musl": "e6efa0fae347f97dca3b892565302d35b4cedfee7cb6e2b5fcdb2801074fe018",
-    "rustfmt-1.48.0-x86_64-apple-darwin": "cfe593a9446e7dfa52ded8a7cca174ba0c2d1cac6e865d04e0890282f25d22e2",
-    "rustfmt-1.48.0-x86_64-pc-windows-msvc": "96d779befe8bca88d3cb69723d401d290a4a637746e8cc119126cfe9d5c773ee",
-    "rustfmt-1.48.0-x86_64-unknown-freebsd": "ae84ca6d0841e6be0f140efd67693a1a50520e6610f26e5ee57a15b5a9947588",
-    "rustfmt-1.48.0-x86_64-unknown-linux-gnu": "12d185cfd6ce15e4df3590bf1b9b3233df75e7aa14b42a9269b4235347a14b2b",
-    "rustfmt-1.48.0-x86_64-unknown-linux-musl": "1a8674af3fbe9616426a02fa4115057e411e7dfcc0f7bb377ee27e3a3bec15f4",
-    "rustfmt-1.49.0-aarch64-apple-darwin": "4f03d2913ecff9b534bc6c2c7684d0884958a1c8f12668fea86c0aa4371231ae",
-    "rustfmt-1.49.0-aarch64-unknown-linux-gnu": "9ef9c477911b3718539defa18ef5838b6f479e646d82e410643e5e8cb21791dc",
-    "rustfmt-1.49.0-aarch64-unknown-linux-musl": "40dbcf80a23055cf2245a6bbf5e16c0fd0300076e279b8e29d66de8af1d5409a",
-    "rustfmt-1.49.0-x86_64-apple-darwin": "e505092d5525dca1012d57e9c9dfd048cbbe2890e02e1327c1a0af44cd3d7aa1",
-    "rustfmt-1.49.0-x86_64-pc-windows-msvc": "e094798983f77ef95e28db1c561915f992f3a190813162b33e2bc6942485a485",
-    "rustfmt-1.49.0-x86_64-unknown-freebsd": "ed7465ddcc654b32822e48a8e91cd58391c36210b332f054a9ab5c1e5733ae74",
-    "rustfmt-1.49.0-x86_64-unknown-linux-gnu": "a1b1a9c06b9958116c37e212c5e04d921f78967e9f9956f6249a16e033f67a03",
-    "rustfmt-1.49.0-x86_64-unknown-linux-musl": "cad26f7f7f9c67f32e03a07ad84f9dc9b7f755213cc0cc596d2971836bcc0cc1",
-    "rustfmt-1.50.0-aarch64-apple-darwin": "1dd932c23b3e70c1183dcb58c431ddd97df72c173b4e28d3a3b008132079a914",
-    "rustfmt-1.50.0-aarch64-unknown-linux-gnu": "0bddf9a1b55bcdae7cef3b37c56ba5816a2b2c932d57dbe7cfc73acce65f5aff",
-    "rustfmt-1.50.0-aarch64-unknown-linux-musl": "c885b27194ad8405d2c75ff134d81c5a51c24ffcab2ce5f3684e8de8b353f66b",
-    "rustfmt-1.50.0-x86_64-apple-darwin": "90108b9bf4b529d12096d7e7c3ef97e77d2304ea142cd0352d0b9814df80c7d2",
-    "rustfmt-1.50.0-x86_64-pc-windows-msvc": "4ee791749b1312091ecb66bee916b0f70fa71cfae1315de8d3351c6da913d5f2",
-    "rustfmt-1.50.0-x86_64-unknown-freebsd": "037c575d92f87ee372b2bfb3b802c8a86690133ee1c82a5a8402ef9e97780f77",
-    "rustfmt-1.50.0-x86_64-unknown-linux-gnu": "2537e788067e56f263ab52869a6efbbf6be9f57ad6b14fc33ddab7cff79a3768",
-    "rustfmt-1.50.0-x86_64-unknown-linux-musl": "6f412c518e078f8891578b174d884cddf992b5fb72b14952f71d5ee8c2a743d8",
-    "rustfmt-1.51.0-aarch64-apple-darwin": "2f6966b51abc33a76b497776f061d049dc9c928aa09ea773a3404396002b33d8",
-    "rustfmt-1.51.0-aarch64-unknown-linux-gnu": "5dfa947dfc221ecb282a082263d79c5faf0c586acfcf7e416357d3e5107675c8",
-    "rustfmt-1.51.0-aarch64-unknown-linux-musl": "0fbca6b470e8c888b03adb501d45db68a5c19dcc05b8f5a1d73d5f9a4d1b3c01",
-    "rustfmt-1.51.0-x86_64-apple-darwin": "b30448ce429f2920b5a4d1bf50b40f4d251188f29ffaa6af12bfb131d993c5e0",
-    "rustfmt-1.51.0-x86_64-pc-windows-msvc": "520e8eaa186acc4f978fd30a34566b11073ed3396628e3dc192aa2862be42edd",
-    "rustfmt-1.51.0-x86_64-unknown-freebsd": "3693bd333303984ce0854452c31b5720cf6d8fa02f69062dc28b7db3b677bec2",
-    "rustfmt-1.51.0-x86_64-unknown-linux-gnu": "e50c03cbf104de7788eed8d5d923b5dc7555f12a3c045275751633121ce74d43",
-    "rustfmt-1.51.0-x86_64-unknown-linux-musl": "6798ff8f805cf1ddc187c4567fa7f3e32b9f347477b0956869caf1f31a99c374",
-    "rustfmt-1.52.0-aarch64-apple-darwin": "263296e44decd784b468de22519f7a22fa3dce3358bd96aab627f60b1f9778db",
-    "rustfmt-1.52.0-aarch64-unknown-linux-gnu": "f70260c7f6e39e20b376389d75e8c3518608860a3ce7647abeff626204341ea7",
-    "rustfmt-1.52.0-aarch64-unknown-linux-musl": "97190a6c8b6044c0fb375c71d672204adcf62d1b6c5d747715cc94a0ae631e04",
-    "rustfmt-1.52.0-x86_64-apple-darwin": "c3841b8568c00068ce6d264688320466c95307971a64adbb2b6ca6d5e54e158f",
-    "rustfmt-1.52.0-x86_64-pc-windows-msvc": "eba78266b8a381c2fbb07c4b3a1571a6fc102e1b9fc298ae362ab8da0aca41e5",
-    "rustfmt-1.52.0-x86_64-unknown-freebsd": "e150cd81ac2e7036ed9ff55b93c62cbcbd6fa2025371fda568a32a071cf94020",
-    "rustfmt-1.52.0-x86_64-unknown-linux-gnu": "7563b04b2900e9bef6360fb445baf00a8584072142d4554eb54f8109ac7486c5",
-    "rustfmt-1.52.0-x86_64-unknown-linux-musl": "ba74b93b4a70a7070d516a332a589b10bd161ab8b36826052ffa0569b1d6b5e6",
-    "rustfmt-1.52.1-aarch64-apple-darwin": "b02cf93d230a4147f2551e012b314b93d2d448ebc4ee71896918c488d8e6e446",
-    "rustfmt-1.52.1-aarch64-unknown-linux-gnu": "727d227f5e1e0ab3bcaa4f4adfe6b5e21fb70279b4d5825cb95fc6983c3cd9ae",
-    "rustfmt-1.52.1-aarch64-unknown-linux-musl": "f707919fb5ad7d0db02fd2e63293153b20043c4511385840835d6a8ae7087d96",
-    "rustfmt-1.52.1-x86_64-apple-darwin": "fc2d3cfd2742800745a97a3cb69a005166992c756dc9fd191add1f37842210e4",
-    "rustfmt-1.52.1-x86_64-pc-windows-msvc": "d5cf3e6be769dd266e66e0351062ff1317b537bf0f4e95def2a8f518f6e6571b",
-    "rustfmt-1.52.1-x86_64-unknown-freebsd": "ecfebd807b2addc80d102f4909f42c71104039e1f7d9b7bd7e6ebdb5072d8d6f",
-    "rustfmt-1.52.1-x86_64-unknown-linux-gnu": "1717c5eeae799b0ceee7f8b7180543713d08ad72e03af77b05dd1e69e32b06bc",
-    "rustfmt-1.52.1-x86_64-unknown-linux-musl": "5b19c462dc70b632e44189c1384aa753bdc20f9a9ad66d35dd34d321cfb19b1c",
-    "rustfmt-1.53.0-aarch64-apple-darwin": "4a29c3663a2c0f5133ca21e1c12223e9ef4fa3f8b1f29b98709ad588aa52c140",
-    "rustfmt-1.53.0-aarch64-unknown-linux-gnu": "d5157ddaf978a3619292a5b133390eea3a049b7903eeef25ded9f24c995a7c58",
-    "rustfmt-1.53.0-aarch64-unknown-linux-musl": "91006e773898a40af2f0e843e7f1111ce07320f1507e61d8c9a4ae216dfe245b",
-    "rustfmt-1.53.0-x86_64-apple-darwin": "b4db708e078615e1d21ad13acfc4b5943b3548d094d397c3b14e24dda3bd78ca",
-    "rustfmt-1.53.0-x86_64-pc-windows-msvc": "adead783882f055129268f11d137857bdcac5eb1ccc20ea8ff8edbb67026f6ff",
-    "rustfmt-1.53.0-x86_64-unknown-freebsd": "569c6185ad0868f855b1414a51f9e9eba52a0cbf270c0b674bcb4580eece668b",
-    "rustfmt-1.53.0-x86_64-unknown-linux-gnu": "e4e826c678f16c6a896e1226309c12c3677ff9c4bc8065ac6932fc616bb67572",
-    "rustfmt-1.53.0-x86_64-unknown-linux-musl": "6d2778b35149971308717e6f10c29f189f46003a1bb9490d495906c0ae6aad45",
-    "rustfmt-1.54.0-aarch64-apple-darwin": "1823b397d89bc23b1a8ec4df113c5f765a0e91cae655dc59fbf13be4616c0f3f",
-    "rustfmt-1.54.0-aarch64-unknown-linux-gnu": "82f45f13c8885663461f27ca7d590c341e41cdf2ea76f40d23b90d38d374cb46",
-    "rustfmt-1.54.0-aarch64-unknown-linux-musl": "fbdfde8d13d08718364a5dfd97f8b99898134a630a4ec13fe8405402688f746d",
-    "rustfmt-1.54.0-x86_64-apple-darwin": "e33122e00fa2ba319e229f3a92380e31b2b813398f3a681d0e1b2e6fbe3f135e",
-    "rustfmt-1.54.0-x86_64-pc-windows-msvc": "608da9f9cc59d24c14897febeb0983d0ace04264d91e3ff9dd8b57bb546a2965",
-    "rustfmt-1.54.0-x86_64-unknown-freebsd": "4b5098c749c547516ca2c81aabf87617d589ae674cdc48d7636b37cc5017d29b",
-    "rustfmt-1.54.0-x86_64-unknown-linux-gnu": "0205d6af87d381b93aa69bc75c0bd44ac5eb006832f0f505a851dc8d22aaf101",
-    "rustfmt-1.54.0-x86_64-unknown-linux-musl": "34a2321d2f7f57398b6f588f2e219639f0958d444ca283ff0c8d0144d8c09fc1",
-    "rustfmt-1.55.0-aarch64-apple-darwin": "dad1bcea851e509f289178c7bbd8fca5152efd1876450e353cc77fe5fccd2f46",
-    "rustfmt-1.55.0-aarch64-unknown-linux-gnu": "a0a24a0e5618997218cced0632dfe776315225ee394e8412ef5dcf9e21325b9c",
-    "rustfmt-1.55.0-aarch64-unknown-linux-musl": "736208df67d87b3ced05764d52de07470f44502c901c48ab6cc6dfe3cab6046f",
-    "rustfmt-1.55.0-x86_64-apple-darwin": "b38a096a59ecc6309bcbea67ed4e50de6d48cdc124ff5b721bf7e929ef4c4fa7",
-    "rustfmt-1.55.0-x86_64-pc-windows-msvc": "49f58043700b33578963faa22dcb993b5d604d7d8cc852ff53f11138f9a20f35",
-    "rustfmt-1.55.0-x86_64-unknown-freebsd": "5317af05afbcfde0fae7ba4ad5404901b0c611d826c7dd38926a8b08ade53c72",
-    "rustfmt-1.55.0-x86_64-unknown-linux-gnu": "ecb58add71d3f3cf8a213fe7b531bc230f8da5cecd835cee6429e76798b548cc",
-    "rustfmt-1.55.0-x86_64-unknown-linux-musl": "33bd862bbc9b54745c3e1d400440996fd0e6759c4d482f1a888ba8fafab29c3a",
-    "rustfmt-1.56.0-aarch64-apple-darwin": "0c1dcc80d2028748c38a4c3360048940a887ca899af577e9f3026c3d1a359469",
-    "rustfmt-1.56.0-aarch64-unknown-linux-gnu": "3dabc693866f74a956b99f8cac1f1beca6dbc38de6cc095ccdacbdccc18b4350",
-    "rustfmt-1.56.0-aarch64-unknown-linux-musl": "9d1b9405dc2cbeb7ff7f2ecb468a42d7a36429e642714de1605eb242947afc88",
-    "rustfmt-1.56.0-x86_64-apple-darwin": "f8fc28492af2fece8915db0959bb5af354706d63556854f4c149e6dbc9f3c11b",
-    "rustfmt-1.56.0-x86_64-pc-windows-msvc": "1080a5e5f3957eed2799ce65adf93b8bd8c0a9233c5149d8992c339fe7acab31",
-    "rustfmt-1.56.0-x86_64-unknown-freebsd": "a5e58bbf9407ac7da18df4d385f0988d299b1a71d18ce39fb7d1de15c007f5a6",
-    "rustfmt-1.56.0-x86_64-unknown-linux-gnu": "ce14465427e5919e407af9e58fea0a638aa02515f182a1a1c0b740cbd52a5e5a",
-    "rustfmt-1.56.0-x86_64-unknown-linux-musl": "98dbc11edb80de0c1303823f890434406c36501d89ee45ba2137d4ef4220db8a",
-    "rustfmt-1.56.1-aarch64-apple-darwin": "25e64095594e6aa4c25b2dfb8830108ba32af2917c1b1a4a1a966114d85199d2",
-    "rustfmt-1.56.1-aarch64-unknown-linux-gnu": "b6d1479d66c16eabcd708246521539a60eee31b1b3b492c20676ebbbcbca23fd",
-    "rustfmt-1.56.1-aarch64-unknown-linux-musl": "441f9df760f65a79ce15d79938cf984961cb712639d85e91765abadfc616002f",
-    "rustfmt-1.56.1-x86_64-apple-darwin": "fa4e086107b5219228cdd928fd4671f5ab7a1165c39ca79874fd99a0f865b12b",
-    "rustfmt-1.56.1-x86_64-pc-windows-msvc": "a18c253e6d29ea8575e9b25a1fe43c913082c0036e2532f372e376b8d0c0e15a",
-    "rustfmt-1.56.1-x86_64-unknown-freebsd": "b3f184b3cbe2139407e977838e98a843d90409cdebe86d64338841fb919281c9",
-    "rustfmt-1.56.1-x86_64-unknown-linux-gnu": "6dce6eced612048180892fa9016a06a901c9fc275da046d8e229986f4dd97115",
-    "rustfmt-1.56.1-x86_64-unknown-linux-musl": "0a307bd9a4b08a91f1fee0e90e412d92c9b55b75084c2e9b24ed99dd9469f4fb",
-    "rustfmt-1.57.0-aarch64-apple-darwin": "85fc5eedb0bb4d6ac599e567ae84debc05a3a5d2c162f73c59df5bf0d5d3fb19",
-    "rustfmt-1.57.0-aarch64-unknown-linux-gnu": "f8f4c4c16a24aaf4e0b9752395bf8b20154832ef6d0b9e98687de44b699ff5ff",
-    "rustfmt-1.57.0-aarch64-unknown-linux-musl": "093bda1fc0c087dffbdddafb9a2fe9f67e49cfc7794aaca22a92aab5d0f0c789",
-    "rustfmt-1.57.0-x86_64-apple-darwin": "83a928a03d484121531852a591b76a13c631e275ef376d57b9b23cf6e855f6b1",
-    "rustfmt-1.57.0-x86_64-pc-windows-msvc": "7c61a46df59d6c9386a5647df54a1a725d81dc924fb24fa7f7e1b51ad7ced047",
-    "rustfmt-1.57.0-x86_64-unknown-freebsd": "0d0bd640445e1e45a93ca0d0f5b0f03c464f6a91c9b5353c3ac136ba366bbf36",
-    "rustfmt-1.57.0-x86_64-unknown-linux-gnu": "48b09dbf1c7fc16e31123e8c83eede18c3577811762f574a5b24a2f759a172bb",
-    "rustfmt-1.57.0-x86_64-unknown-linux-musl": "6ed302cafc1363c8ba0bb789467a80be8558b3ed712331a0da2477f8d53f0794",
-    "rustfmt-1.58.0-aarch64-apple-darwin": "79f391f725e598163407df09570c3c2bfffc89250a08b3143c7f72db8ec0c632",
-    "rustfmt-1.58.0-aarch64-unknown-linux-gnu": "ddb03ea92c4274b2eccb43d0f25bb6ccd8beab53123715c3c51de7220b60b21e",
-    "rustfmt-1.58.0-aarch64-unknown-linux-musl": "8749c82a655e2f99bfc7b8c3d1f12c384edb8cee7b26078a7ddf87da57a31429",
-    "rustfmt-1.58.0-x86_64-apple-darwin": "83fb3514eec03049daadb2623f27b92d029b292c0ed6102c06f1a4a39f81b1f8",
-    "rustfmt-1.58.0-x86_64-pc-windows-msvc": "661a53930cfd8b74f9a66df0871a0bd8534829d845d5253292f7f223d17f0aa8",
-    "rustfmt-1.58.0-x86_64-unknown-freebsd": "a91b4561ca1cb756da40e17a2d270c464bb177289c2cc8352e2b5fcd26c0c63a",
-    "rustfmt-1.58.0-x86_64-unknown-linux-gnu": "4c4f0972406bf4a0a83be4cf2ee0a3556db1aa6aefedab4851ed19a3dd2e88bc",
-    "rustfmt-1.58.0-x86_64-unknown-linux-musl": "7075b11ab68bbdebce0884e42432d7599680fe023ea2ab4e81c2629d25fd32e7",
-    "rustfmt-1.58.1-aarch64-apple-darwin": "ede8f0bb46047e3e106b20bdd4e181fc81f810eed26d5f1816b0b0b4a9a5458a",
-    "rustfmt-1.58.1-aarch64-unknown-linux-gnu": "71dec8f396d87ec57e353000331e62c7ab0e431e26c42644d43d78fd8d6df3f5",
-    "rustfmt-1.58.1-aarch64-unknown-linux-musl": "f605d5cf81369a51cacb6ce17d57dd553096b6843c249c37f996d0c768476429",
-    "rustfmt-1.58.1-x86_64-apple-darwin": "6ec7ef5c492531714f42936f7e03ffa9b428953692c64575b45da1dfaa3905b4",
-    "rustfmt-1.58.1-x86_64-pc-windows-msvc": "c2d30d3791e612f2f2a6e9eef52707ce79e7bf2ff5c6150bdf91039686988eda",
-    "rustfmt-1.58.1-x86_64-unknown-freebsd": "d2a32f7479dcb5bb71ec8151912cfa315bfaeb7c3b45ad10afcb6bb7b9652d75",
-    "rustfmt-1.58.1-x86_64-unknown-linux-gnu": "09328241bd46a21793a5a76ba6a1a5b862c6bfa29afdabdc9c889b08c81ee8ba",
-    "rustfmt-1.58.1-x86_64-unknown-linux-musl": "8189d38bdd1225241ecbd75b0869c1945450a5c28b675713892ae32cf0b77750",
-    "rustfmt-1.59.0-aarch64-apple-darwin": "70a677515845f9b22b464d022958a2d0ba7c927a4979f3631b1f851ea2e9b2a8",
-    "rustfmt-1.59.0-aarch64-unknown-linux-gnu": "e79b98a6bb51ed225436375fd095610b88093f287404836949d394a5d315e834",
-    "rustfmt-1.59.0-aarch64-unknown-linux-musl": "dc977d6459b1d4d9e761dc20a60f1f734e6081b1b17670eb4bbe9d2fc292b9de",
-    "rustfmt-1.59.0-x86_64-apple-darwin": "52d5579999e146e999426d57be78a8b26ace6ab7810aefb968f69e6b2c9ecf53",
-    "rustfmt-1.59.0-x86_64-pc-windows-msvc": "cd923eae91c5652fa983abbc07ceb67d6f5b8f98664f86cfc1bff7ec1374e0c1",
-    "rustfmt-1.59.0-x86_64-unknown-freebsd": "026abe662bf0ca734796e93224bed7ad9015a3e2613ca7db59c9b89e3d6088bb",
-    "rustfmt-1.59.0-x86_64-unknown-linux-gnu": "2932efec54b152e094e557c351aa5844b87e61bbcb4d4b7bf0a2dd7ad457df39",
-    "rustfmt-1.59.0-x86_64-unknown-linux-musl": "868aebea8792baa964b5300e6c34b5006660abd4d7aeb93f2d7104de1cfad134",
+    "2018-10-30/cargo-beta-aarch64-unknown-linux-gnu.tar.gz": "9d91fb3ee868421fbf8f4ed62cb7ee843dc6a1e70241331a9441e3ff09f3296d",
+    "2018-10-30/cargo-beta-aarch64-unknown-linux-gnu.tar.xz": "344ff43655bb61a31eb7b13c4120b2676b95bda94a833553932a58e8226f4b27",
+    "2018-10-30/cargo-beta-x86_64-apple-darwin.tar.gz": "920d7218ded8ebd69628f7a7a1043117bec1ed6574ea8babbda66ddb7d0ea5f8",
+    "2018-10-30/cargo-beta-x86_64-apple-darwin.tar.xz": "f59833aa153d549a26d30192505add47f04124301bc15f116acdb0e2aa5fe8c3",
+    "2018-10-30/cargo-beta-x86_64-pc-windows-msvc.tar.gz": "4f76c6264d36f1b0e9e23548d069386ff1b60a85a412596fc122484a4ed942fc",
+    "2018-10-30/cargo-beta-x86_64-pc-windows-msvc.tar.xz": "9510e3c84e668d9bb2aabc832011091ea61e6505d8f64f0f4d986e6b12f9084a",
+    "2018-10-30/cargo-beta-x86_64-unknown-freebsd.tar.gz": "be7ac5c344ca6038a7bcfbeb20c5847ce910ec39cf9a63b8b3e07cb6105dabb2",
+    "2018-10-30/cargo-beta-x86_64-unknown-freebsd.tar.xz": "6fe73519e3a978d81f691cb6b1f578468e575b4404f0f472bc836aa8f49b807d",
+    "2018-10-30/cargo-beta-x86_64-unknown-linux-gnu.tar.gz": "097711a227d157c12a322dbe57f75eb28c7934869ce8aecc48d9946706234994",
+    "2018-10-30/cargo-beta-x86_64-unknown-linux-gnu.tar.xz": "0658b043719884feae2f1d243a20fa7f0bf2ccc79bffaf498a1022e3da0afc71",
+    "2018-10-30/clippy-beta-x86_64-apple-darwin.tar.gz": "84331ae735c78cd1d335b8b5da3c9232d70123197c62f3d7fe32b3bd7a97d1e6",
+    "2018-10-30/clippy-beta-x86_64-apple-darwin.tar.xz": "92230e7b6eff2aa2d9b77ce6824f15a6fded5615428ed8fb26d3082ff54673da",
+    "2018-10-30/clippy-beta-x86_64-pc-windows-msvc.tar.gz": "a59573b3b71c318a75214876c30de03327c4b0409a2e9fa0127ef0ac4eab555d",
+    "2018-10-30/clippy-beta-x86_64-pc-windows-msvc.tar.xz": "1802fa19767e3fa5935e0d5527a00e66893acd8bc4e0c18d37268a4aaff81594",
+    "2018-10-30/clippy-beta-x86_64-unknown-freebsd.tar.gz": "1fcc9d117d5721f3f4c6afb109c626fec238376666f448f61ed5aeaaa6c5a1d8",
+    "2018-10-30/clippy-beta-x86_64-unknown-freebsd.tar.xz": "b2f1980ac582802d53049badba747b6305b6ca8949d97f3eb5c0e01a2ccefca8",
+    "2018-10-30/clippy-beta-x86_64-unknown-linux-gnu.tar.gz": "eee913773c93ec0443aea1629d936b5a4e114e977318d4ef77b6bedf42cd4129",
+    "2018-10-30/clippy-beta-x86_64-unknown-linux-gnu.tar.xz": "b32e78107948ee75aeedfd73bc417c15ac39df2c0df374a7665e1ea81f148b97",
+    "2018-10-30/llvm-tools-beta-aarch64-unknown-linux-gnu.tar.gz": "9417a07c501e173fe3848c815b8536cf70c6518c8040d45b19260ca3ab720760",
+    "2018-10-30/llvm-tools-beta-aarch64-unknown-linux-gnu.tar.xz": "d8178b895e1f892205e09158a4203e2e3739fb6642f560c0a8362f4f84e5fb84",
+    "2018-10-30/llvm-tools-beta-x86_64-apple-darwin.tar.gz": "b86d22bc723936f23186acaa94cd0738ff1c7b703d67712be62d99845a6ccc80",
+    "2018-10-30/llvm-tools-beta-x86_64-apple-darwin.tar.xz": "85193c1b68d8369121226f941667ae1e4f2717ff50678c54b4580124f761db54",
+    "2018-10-30/llvm-tools-beta-x86_64-pc-windows-msvc.tar.gz": "cf74e15df51033370d4225fd9141f4cfc5c37145070d2296915fbecab9275b03",
+    "2018-10-30/llvm-tools-beta-x86_64-pc-windows-msvc.tar.xz": "928e35e5637a4575c29c2ad2185b09128f35fc56ebe14dbbfe52d0f45eec92c5",
+    "2018-10-30/llvm-tools-beta-x86_64-unknown-freebsd.tar.gz": "38ba85ec56c374b606a586221185ac351d04871892055f8936f28958e5e7a5cb",
+    "2018-10-30/llvm-tools-beta-x86_64-unknown-freebsd.tar.xz": "db906d9d7e7c6d994d8973bce46738021e7ec0f38ff708eadff6e76c5cb22551",
+    "2018-10-30/llvm-tools-beta-x86_64-unknown-linux-gnu.tar.gz": "8d96f1475fc27f21d80bda80496783aa3181a4b33a138b7a89edcef2ddb6cf58",
+    "2018-10-30/llvm-tools-beta-x86_64-unknown-linux-gnu.tar.xz": "fea0af08a6461ed815be5fdf99e3f115b0aa0ed4c4daf99b53a964127fcbc8d0",
+    "2018-10-30/rust-beta-aarch64-unknown-linux-gnu.tar.gz": "e9bc9d4a89299595ef42cde7303b50a7921e20a5ee4d131c4e1770a391611303",
+    "2018-10-30/rust-beta-aarch64-unknown-linux-gnu.tar.xz": "8d87dc7da282fbe31e1c9cf74940464e25d6722b2830f954a0a0f53fe4e607cc",
+    "2018-10-30/rust-beta-x86_64-apple-darwin.tar.gz": "51acc0077d6abae5beed0e7b99c39ae9b8a0ff0f66daec227caef653046144e6",
+    "2018-10-30/rust-beta-x86_64-apple-darwin.tar.xz": "bb0d883f4f022ece2f10299a1509f87bbce4d4ce09b49f54be25ceb68e1a7279",
+    "2018-10-30/rust-beta-x86_64-pc-windows-msvc.tar.gz": "07f3e42ba299b3b5341b410c4317161eba4b40bbc9fc449a9c187193fe49250c",
+    "2018-10-30/rust-beta-x86_64-pc-windows-msvc.tar.xz": "7f2e12279534921294458a638693d8a5b31766630f982d83cf59d6f75a85654d",
+    "2018-10-30/rust-beta-x86_64-unknown-freebsd.tar.gz": "49f1efe5bf10319446a298096dea73e478a466daca20a5b93d5263925e4ba9be",
+    "2018-10-30/rust-beta-x86_64-unknown-freebsd.tar.xz": "40c42d3995b6470edbd6e9f3dfbc999a2bc905001c1941c233dbd902ccfa62c4",
+    "2018-10-30/rust-beta-x86_64-unknown-linux-gnu.tar.gz": "07963c2d6d56d077856f17e786414cf965832e7942f4ec72dec2eb51452e74b7",
+    "2018-10-30/rust-beta-x86_64-unknown-linux-gnu.tar.xz": "1c565fa6abdf2043d19092da4eaf2d2413de98ae573761093c55f9f572484084",
+    "2018-10-30/rust-std-beta-aarch64-unknown-linux-gnu.tar.gz": "bf0895ccf65a86c1f51dbbebd0980bd07dcdc3919407fc84f5838cbbcb29e309",
+    "2018-10-30/rust-std-beta-aarch64-unknown-linux-gnu.tar.xz": "1a0e7da414ce42a25fa2d1cd874d5bd58d5ef6db8ad23100d3a418dcfabdf61a",
+    "2018-10-30/rust-std-beta-aarch64-unknown-linux-musl.tar.gz": "53c07a1bdae00c0ad587349006e4080c50d511c0368f848fc98bf678dd3f6470",
+    "2018-10-30/rust-std-beta-aarch64-unknown-linux-musl.tar.xz": "37b5787c366e2ed998f34f2d4462d2890cf1f5203dca43925ae65632fbb2a6eb",
+    "2018-10-30/rust-std-beta-wasm32-unknown-unknown.tar.gz": "5453e05993aaa90c8ac361086dd888a29a48f1b90b2c2184202c4b44b2e5569d",
+    "2018-10-30/rust-std-beta-wasm32-unknown-unknown.tar.xz": "013010a4f7403453c88802fbb91fbd3254a1f3723c6ff700ddc3742a85e7e768",
+    "2018-10-30/rust-std-beta-x86_64-apple-darwin.tar.gz": "96fc1daea8868e176a14706333590b13a41193bd8ed5a711f23a15eceb5c6ce0",
+    "2018-10-30/rust-std-beta-x86_64-apple-darwin.tar.xz": "1be15b33ca23ec3c9e94de2531e99a387b44a7efbba64e1832e0adc619655935",
+    "2018-10-30/rust-std-beta-x86_64-pc-windows-msvc.tar.gz": "6af758524d77288cb5c548d26467680d57aeb778063787662b1e00ef3887866a",
+    "2018-10-30/rust-std-beta-x86_64-pc-windows-msvc.tar.xz": "d207749b17fa2807c4c93d2421a260b2053737283cc7c808c9b116d87b6f373b",
+    "2018-10-30/rust-std-beta-x86_64-unknown-freebsd.tar.gz": "5aef62464a5580ab6b38c9e54203db12f90ad42de538b7a5eefc7778b55b6497",
+    "2018-10-30/rust-std-beta-x86_64-unknown-freebsd.tar.xz": "af04b55d11aa77c0a8577057b90727a1e80845347cb92a91a4a29b4116994426",
+    "2018-10-30/rust-std-beta-x86_64-unknown-linux-gnu.tar.gz": "34996a688d6a4c3587f873b0a8c86fe1d2fee2a269b6e669b1cb8c6908fb77b8",
+    "2018-10-30/rust-std-beta-x86_64-unknown-linux-gnu.tar.xz": "99bea875c631cd3b302446f7d4c863e85419607e436cb0480fc6f1e56e84e091",
+    "2018-10-30/rust-std-beta-x86_64-unknown-linux-musl.tar.gz": "6e9474546838c061288e8464d28a843814bc2ff4c9d06a5fba065c1b03650be4",
+    "2018-10-30/rust-std-beta-x86_64-unknown-linux-musl.tar.xz": "07271daf8f693f31535e33e0683271c19dfbcf1896cc64f3141d5371376db08c",
+    "2018-10-30/rustc-beta-aarch64-unknown-linux-gnu.tar.gz": "e6bb89261baa494ef98239bde9821b66671de5cd78352a9c100abce3a18ca250",
+    "2018-10-30/rustc-beta-aarch64-unknown-linux-gnu.tar.xz": "09f2f0bc7a35e1c0d069c7e23ccfebc909a407d566854ae4085dec182deb4696",
+    "2018-10-30/rustc-beta-x86_64-apple-darwin.tar.gz": "22153f359b8b98341aa0349233112fff2b9f092988f9d678626207ba29666b5b",
+    "2018-10-30/rustc-beta-x86_64-apple-darwin.tar.xz": "61fea5694f64ef7f82d2b0292fc4ca4808553defdf8b30fb32312f5d499992d3",
+    "2018-10-30/rustc-beta-x86_64-pc-windows-msvc.tar.gz": "9cd8225f1307aab95b439dbecd70aaa35e03c913ba0897dc7fe3a04755fc15b1",
+    "2018-10-30/rustc-beta-x86_64-pc-windows-msvc.tar.xz": "495d72fdb7b3c267bd5c5d6eb200592f97c89fe038aa364b28259bfe039eca4b",
+    "2018-10-30/rustc-beta-x86_64-unknown-freebsd.tar.gz": "e207562cd5e3a17497e029bcb1cab56d9fa474d788906f13e389a3cb804ea4d6",
+    "2018-10-30/rustc-beta-x86_64-unknown-freebsd.tar.xz": "cc688f0613995f0cc3dc494a34a49a103f5e00f5cf420deb41c1d5c21c824c37",
+    "2018-10-30/rustc-beta-x86_64-unknown-linux-gnu.tar.gz": "63b69b000cda551f2499ffba6e3f1700acb2b22a47ca9ec9edcc3e578ed086e6",
+    "2018-10-30/rustc-beta-x86_64-unknown-linux-gnu.tar.xz": "e368ec3bc3a6e96c4a9b22ad52ab29d4c027bec796e3e605f9f52d2ce3029663",
+    "2018-10-30/rustfmt-beta-aarch64-unknown-linux-gnu.tar.gz": "bd97e8012277d49beececdf4125610c2d0112cd22f8add53f86fd7c6dac5dc0d",
+    "2018-10-30/rustfmt-beta-aarch64-unknown-linux-gnu.tar.xz": "c870098e642b38b5524fd3e0fc6902450d9915da06019fd572ac4cc0c8d0aeed",
+    "2018-10-30/rustfmt-beta-x86_64-apple-darwin.tar.gz": "2c213f43902104ebefe9eee6fa49aa36e16af972cb7aa1c63d772e5d05f74b59",
+    "2018-10-30/rustfmt-beta-x86_64-apple-darwin.tar.xz": "d13856fe88d54ad775967e60077225294f3a0fee84a43194d0d35c463bedce2c",
+    "2018-10-30/rustfmt-beta-x86_64-pc-windows-msvc.tar.gz": "316331e7aed82251ab3b701845e8b1e707947670498ce4fc364ce1d6813e1340",
+    "2018-10-30/rustfmt-beta-x86_64-pc-windows-msvc.tar.xz": "db1483f8f3881cfa9b1f2363d23fb15e4af633e5fe2a6631bba3d55ac531c977",
+    "2018-10-30/rustfmt-beta-x86_64-unknown-freebsd.tar.gz": "17826e710d5912d23cd981b46b598733cf8833c20dc7d03d150c5e53ad0a38d3",
+    "2018-10-30/rustfmt-beta-x86_64-unknown-freebsd.tar.xz": "a40a40c283c09781282ac939966848025a7bfed3c45092f665679eec9e7e3919",
+    "2018-10-30/rustfmt-beta-x86_64-unknown-linux-gnu.tar.gz": "4af3f9faacd78deef2e8a06e2971ebc7540de07525ac805fcf334818a6ee0e97",
+    "2018-10-30/rustfmt-beta-x86_64-unknown-linux-gnu.tar.xz": "09b5c2501452b01170bfb3bdbd32655509e5ea28a998c3e9f569d9e100ced412",
+    "2018-11-01/cargo-beta-aarch64-unknown-linux-gnu.tar.gz": "44802e459a0bc1677b52593d413959982c30786524412e9e1c61d67c8230d4f6",
+    "2018-11-01/cargo-beta-aarch64-unknown-linux-gnu.tar.xz": "f6335dc9c9eb147c718622695375139c2612b89cb85f1898bd698e93adc281ee",
+    "2018-11-01/cargo-beta-x86_64-apple-darwin.tar.gz": "e5130c79154056a451d95a3b213622d0e7e3dd3625735fa5ae725fa50849facb",
+    "2018-11-01/cargo-beta-x86_64-apple-darwin.tar.xz": "9f1d8233f700dad6f6ad66ffadac6419c2dfcfb4e39c40729b86e72d0c186e4b",
+    "2018-11-01/cargo-beta-x86_64-pc-windows-msvc.tar.gz": "481f845f171e4566c59d9a2df802c678b6102d2d661b731e2a71a50c597cbeca",
+    "2018-11-01/cargo-beta-x86_64-pc-windows-msvc.tar.xz": "796ac40029201a2dd9242daf3142988f16d9283791e072384d3d038e298cc49a",
+    "2018-11-01/cargo-beta-x86_64-unknown-freebsd.tar.gz": "0b596632c675a277fac894b644ecdb86d6f44036dd089ce8d410fdd04354b8f1",
+    "2018-11-01/cargo-beta-x86_64-unknown-freebsd.tar.xz": "3b6d9d04ba8ef5934ce26dc4ca3e026fbe4975faf9dc2aa85c465d1c95ea5efa",
+    "2018-11-01/cargo-beta-x86_64-unknown-linux-gnu.tar.gz": "8519d3fca6aca45ed94daeecbd8d25c9bd1c75f1acc5078b64b771bce6986b44",
+    "2018-11-01/cargo-beta-x86_64-unknown-linux-gnu.tar.xz": "6eaf52d3da4a7c33407e9b9a17be96eab30cb7d050480f61bbc37672df649e13",
+    "2018-11-01/clippy-beta-x86_64-apple-darwin.tar.gz": "8672df2c6b8a18bbf9b654188de22bc8ce4c8bc407d2b3fe3ef208add4e27cdd",
+    "2018-11-01/clippy-beta-x86_64-apple-darwin.tar.xz": "27bbaf971ae1f4cb119ea5bd770e964893088e376c0b33c726eea58e88043211",
+    "2018-11-01/clippy-beta-x86_64-pc-windows-msvc.tar.gz": "4cea4a9cbbc0b56efe11078711d244ab87de3397873c437f3f70614ef896ff83",
+    "2018-11-01/clippy-beta-x86_64-pc-windows-msvc.tar.xz": "0022e1f9199f9285d970e205cd309925fa40b16c6de284ef0f71bd90952f319f",
+    "2018-11-01/clippy-beta-x86_64-unknown-freebsd.tar.gz": "03fabba8670a06faeee0a944ca8e911e717a739c2bae0262c2257db69a7014f5",
+    "2018-11-01/clippy-beta-x86_64-unknown-freebsd.tar.xz": "16fa89ae127521cf6f39fe0708c54efc0566dbb82e24dd2cc3396d7906192f0a",
+    "2018-11-01/clippy-beta-x86_64-unknown-linux-gnu.tar.gz": "0ad5f06495177901addb72d8eec3926986e10290969493eba0e8b465962985e7",
+    "2018-11-01/clippy-beta-x86_64-unknown-linux-gnu.tar.xz": "7647c493e679ee4b5e709c125aa90cd74209046ba855acddb192a32ae422928a",
+    "2018-11-01/llvm-tools-beta-aarch64-unknown-linux-gnu.tar.gz": "7b3f5bb7f45052310efe275ed665b54b55e19b9020b04cec9240318c13c62c0d",
+    "2018-11-01/llvm-tools-beta-aarch64-unknown-linux-gnu.tar.xz": "b19651f42127f108e6931fe7837daef45b7dfe7950e9972b8319b9a1c1620287",
+    "2018-11-01/llvm-tools-beta-x86_64-apple-darwin.tar.gz": "b45ae0fb0b49385b555772a3faa9a5a85aa10f4bd24ba40c55048076d8cda314",
+    "2018-11-01/llvm-tools-beta-x86_64-apple-darwin.tar.xz": "28a1bd8474f8af6cda13ec34b1bb5e9d6ed01e74b4b64825d0eb09a46739731b",
+    "2018-11-01/llvm-tools-beta-x86_64-pc-windows-msvc.tar.gz": "462668f55b85fa1224df30449eb67e8fe0d208caeea39d9339b44ac30867f452",
+    "2018-11-01/llvm-tools-beta-x86_64-pc-windows-msvc.tar.xz": "3fd163b9457bcb6611ad147307910072ebc9987d55128373e4c5427a570ccecc",
+    "2018-11-01/llvm-tools-beta-x86_64-unknown-freebsd.tar.gz": "acd86ceedad9f10b2cb3443df032d0b5a9b4eb6c4b30364bd3cb014449607577",
+    "2018-11-01/llvm-tools-beta-x86_64-unknown-freebsd.tar.xz": "0fb3544ec102b739f69b83dc72720a1b2b9a71a96604f5980d85b4764983734d",
+    "2018-11-01/llvm-tools-beta-x86_64-unknown-linux-gnu.tar.gz": "4b4363c2d03d319e84a7f09fba5b58d188d9fdd62c9486cc4b66e9e63030ab27",
+    "2018-11-01/llvm-tools-beta-x86_64-unknown-linux-gnu.tar.xz": "6a4ad347884ef3b8040c0e577fb80971b93931544c372a95ad7c6b9f434b4dc8",
+    "2018-11-01/rust-beta-aarch64-unknown-linux-gnu.tar.gz": "f802784788c2e751d59d035363fb6be2b0450d650ec523115a51fea05fc8589b",
+    "2018-11-01/rust-beta-aarch64-unknown-linux-gnu.tar.xz": "1542e4fbd6da3cf163b8834c13967b13493a335e2e650c1f9cd6dc6bf9d8f802",
+    "2018-11-01/rust-beta-x86_64-apple-darwin.tar.gz": "0be8d634d17b2f92c86515a38e36f66a9f3d72bad226db58ff8cd09924092f53",
+    "2018-11-01/rust-beta-x86_64-apple-darwin.tar.xz": "f3372aee003577739748fc23aa52b6ebbed337cc2e629367acc8b6d2a5663df9",
+    "2018-11-01/rust-beta-x86_64-pc-windows-msvc.tar.gz": "d86d633b67e6c0fba28963f5c991738575fee56c755570e505f702eed54150e9",
+    "2018-11-01/rust-beta-x86_64-pc-windows-msvc.tar.xz": "6aa02b7c2064e2082a3030c469dd8500ed5a15d6832bd446ea9ac9b2b345f300",
+    "2018-11-01/rust-beta-x86_64-unknown-freebsd.tar.gz": "869f1d01077a318ff0ac664a498354b079c2fc16cbec294161a56cabe6f3e194",
+    "2018-11-01/rust-beta-x86_64-unknown-freebsd.tar.xz": "04e09982338aeef49879868be8a41ce70dc855801b14475ce3cb8b1a5ee605ed",
+    "2018-11-01/rust-beta-x86_64-unknown-linux-gnu.tar.gz": "7da7bd24c2f2dafa9d4baa6e7eba1547f62681fbd1dd89910d386b2260e65ca6",
+    "2018-11-01/rust-beta-x86_64-unknown-linux-gnu.tar.xz": "3aacbc4c001b7aa53f4cf711f03e2f8cb813a7b708deeacfe49d43ab55ae3a1c",
+    "2018-11-01/rust-std-beta-aarch64-unknown-linux-gnu.tar.gz": "137d39872981d343829a8f3eecf0f33fe2f0d81ed18865004b52359d309a6b95",
+    "2018-11-01/rust-std-beta-aarch64-unknown-linux-gnu.tar.xz": "bf981aa615034b1cd84eee2781633a1963a1be5aa73247f93d16c072353eb404",
+    "2018-11-01/rust-std-beta-aarch64-unknown-linux-musl.tar.gz": "5eb228ae2a53abfdfbfaa471a2afda29cc2b923adb82322a0c20af4592c226e5",
+    "2018-11-01/rust-std-beta-aarch64-unknown-linux-musl.tar.xz": "40776fd0ad6ee7a4e669a9e409e1979d6d94a7c425840099146d1d948140c645",
+    "2018-11-01/rust-std-beta-wasm32-unknown-unknown.tar.gz": "4f7fa7f3adafc2ec5de80cddfd3fc3072da43442cd15be9169b261f76a0a684b",
+    "2018-11-01/rust-std-beta-wasm32-unknown-unknown.tar.xz": "1a42da86e8f1a2dbed960192ccd4d42fb1b2ed3737245018d7aac9b84837d5fe",
+    "2018-11-01/rust-std-beta-x86_64-apple-darwin.tar.gz": "bee742244d72ea7289d5d2dea519102994dbee97a5c296b2a8c6853e5450a7ab",
+    "2018-11-01/rust-std-beta-x86_64-apple-darwin.tar.xz": "992e1c74d2e0ad22865cc11b63f4acff4ca7b66b29ee0a39ca6a1be1fbf16042",
+    "2018-11-01/rust-std-beta-x86_64-pc-windows-msvc.tar.gz": "455ecff7f11499cd3822b82ecf0ab8ab34d866c4b5e17b0de84af815a782f226",
+    "2018-11-01/rust-std-beta-x86_64-pc-windows-msvc.tar.xz": "b8543ff49763afd5daa84d906ae308a975e5fc9607c9e1fde81ad2bce8563ec2",
+    "2018-11-01/rust-std-beta-x86_64-unknown-freebsd.tar.gz": "eed13a5c36c0731b01b8926f26be5b054c341a0487628fca688e8e99f33b200b",
+    "2018-11-01/rust-std-beta-x86_64-unknown-freebsd.tar.xz": "96b4d53db29d261dc652cdee845ab6710067ea57c23c2337844849099ed7c40d",
+    "2018-11-01/rust-std-beta-x86_64-unknown-linux-gnu.tar.gz": "f38a224bccfc89bd0d598764363271985d0b2696123ea10de6399c4cc7dd8adb",
+    "2018-11-01/rust-std-beta-x86_64-unknown-linux-gnu.tar.xz": "bd17d52ec298bffd00a7938dd1b427f02a586eb427e797b88b408f8d25e75ba3",
+    "2018-11-01/rust-std-beta-x86_64-unknown-linux-musl.tar.gz": "b4f8c208a50e2640fc3761675bef31c9960e74976a1537c2fd8c9dc8a9d5fdd8",
+    "2018-11-01/rust-std-beta-x86_64-unknown-linux-musl.tar.xz": "8f8a0d9363b728603d9c8e65d4075e65a1b6e2312cbee0759b3c816a12bd093d",
+    "2018-11-01/rustc-beta-aarch64-unknown-linux-gnu.tar.gz": "acf359a4cecfc827f5ca4255c0492d46223d09d535444f0b303678918944c87c",
+    "2018-11-01/rustc-beta-aarch64-unknown-linux-gnu.tar.xz": "bd5927f3035b27c63d6444a9ae55f1dfd198134ba5655f79b664ea878072363a",
+    "2018-11-01/rustc-beta-x86_64-apple-darwin.tar.gz": "64b5a5fc8b3dc348395137df2c422adbf483168c58af5cd9acc8522dd9b4392b",
+    "2018-11-01/rustc-beta-x86_64-apple-darwin.tar.xz": "ab642e2859bd647f0ea5c0aee4027725b11420a20b8331370eab236dc2532f07",
+    "2018-11-01/rustc-beta-x86_64-pc-windows-msvc.tar.gz": "71cbfd2793f6b55653f5ef4bdf0350dfe6d9b0952d518a3a355044ec7caa03c2",
+    "2018-11-01/rustc-beta-x86_64-pc-windows-msvc.tar.xz": "b31fd1a80d151435068ca5868d214c26e9805c90de53b757328f83ac319ebf33",
+    "2018-11-01/rustc-beta-x86_64-unknown-freebsd.tar.gz": "51a5370f1776229bede506e5ab05da7cfeb5bd21a5374561acb4b7138c75d508",
+    "2018-11-01/rustc-beta-x86_64-unknown-freebsd.tar.xz": "a0be726ccaf6e51b38cd9d3992fd419d77d088a39fc3a9def47e667a60e7f1c9",
+    "2018-11-01/rustc-beta-x86_64-unknown-linux-gnu.tar.gz": "01609bedca249906ba8e07fb681daffe094cdbf41b91e2221195474271d8e6d7",
+    "2018-11-01/rustc-beta-x86_64-unknown-linux-gnu.tar.xz": "7ac2d921aafc6afaf4b19f804d5a67418b0c4ddeedafeb2d141100d8c2a681e3",
+    "2018-11-01/rustfmt-beta-aarch64-unknown-linux-gnu.tar.gz": "0969e37628a3d5e56cfc0636db4d1aac7d0b01ab9df6bdeb3453adc1e2ae786e",
+    "2018-11-01/rustfmt-beta-aarch64-unknown-linux-gnu.tar.xz": "04ba0c394b41f65ed1dcab50b8a378dc5170341bf73fde271e5c8f25d9da9acf",
+    "2018-11-01/rustfmt-beta-x86_64-apple-darwin.tar.gz": "bbb45d6beddf8da270ab1ec6ea3b9dc2ffc03f5ba1ef3e99e87d004f652f2581",
+    "2018-11-01/rustfmt-beta-x86_64-apple-darwin.tar.xz": "287a64345e7fbe83b233ce9772947500c89a90b66530f38d186aae173e22b831",
+    "2018-11-01/rustfmt-beta-x86_64-pc-windows-msvc.tar.gz": "2d34424353e248173828898107e331acfbaa29a3686bb8121fdc72fbab7a37e8",
+    "2018-11-01/rustfmt-beta-x86_64-pc-windows-msvc.tar.xz": "c1e969fdcc0fd8babaa793bd335e568d83808273a43e3c644fc4ddaf00d57de9",
+    "2018-11-01/rustfmt-beta-x86_64-unknown-freebsd.tar.gz": "101a0903c5421df363420d73ebbdb52b3cb8b2bb5ecee9e383b271aa22446f95",
+    "2018-11-01/rustfmt-beta-x86_64-unknown-freebsd.tar.xz": "64ed7e47e33b1300a99185fe0496bd7971dc261c80ba2efa6d6b77ac64aacf31",
+    "2018-11-01/rustfmt-beta-x86_64-unknown-linux-gnu.tar.gz": "12d49bf16a8e5964163d12a58e8caa5bf81fedd106dc37bbd757aa4116f0d7b3",
+    "2018-11-01/rustfmt-beta-x86_64-unknown-linux-gnu.tar.xz": "a9519d75d9af31cc50d3a20b7fb54d21838ef4680c2a778a867117c5b72c236c",
+    "2018-11-02/cargo-beta-aarch64-unknown-linux-gnu.tar.gz": "808e7129f0f414e05def68ac72bb8f59871a0d21eaa9a6b9a59afa87502858bc",
+    "2018-11-02/cargo-beta-aarch64-unknown-linux-gnu.tar.xz": "2a1130f533a3ea53c89f7eae01575ee5715c4d34c311e456db20f7f28c058918",
+    "2018-11-02/cargo-beta-x86_64-apple-darwin.tar.gz": "72fce301579b799b392407c49e162285ba24ca17ad1d96ca701c7d03c83d69d0",
+    "2018-11-02/cargo-beta-x86_64-apple-darwin.tar.xz": "c06fef21016e18d13cca3069f16f0246bc3935420067ca397d70af0fbe4d7fe8",
+    "2018-11-02/cargo-beta-x86_64-pc-windows-msvc.tar.gz": "f2a98c4c8928d7d3070c86c02ab93e6d78c85312e1eee2867efabf00ae235692",
+    "2018-11-02/cargo-beta-x86_64-pc-windows-msvc.tar.xz": "177b901e5538501dfe7f3422cbd51158028e9d3a77e3b2e61e5a1f426375ac47",
+    "2018-11-02/cargo-beta-x86_64-unknown-freebsd.tar.gz": "8069c2b1657b3dc747912775b1569426bccf35fe6c23073408847ef232174419",
+    "2018-11-02/cargo-beta-x86_64-unknown-freebsd.tar.xz": "0989cb8f0e4e5e4dbb46bfb4d7209a7c3273b42f9535a25d05e17bb99b83eb03",
+    "2018-11-02/cargo-beta-x86_64-unknown-linux-gnu.tar.gz": "2e9418c06ea6dc3f869ebd12e31da2affe9568871e65f013b3695a92bdfa4c31",
+    "2018-11-02/cargo-beta-x86_64-unknown-linux-gnu.tar.xz": "53be654110dab287349d47a138340f08db7165e8a00c0ac7b7ece6a13f32146c",
+    "2018-11-02/clippy-beta-x86_64-apple-darwin.tar.gz": "921f5d07e73a5651173187012c476a7999f5cd78f52eafad4e8c15f2bab25b42",
+    "2018-11-02/clippy-beta-x86_64-apple-darwin.tar.xz": "6080e6717fb835daf0b4334cf4db2c54225ca437bf290c424fd4e592a510121d",
+    "2018-11-02/clippy-beta-x86_64-pc-windows-msvc.tar.gz": "eee0ff30ede35ab957061b579836de5f9b91c36d57e71c22344c76d421abd4dc",
+    "2018-11-02/clippy-beta-x86_64-pc-windows-msvc.tar.xz": "a21993f1e045b36ddad8a76508aab3dd1c96f6406b9a7ae118299d64082fa171",
+    "2018-11-02/clippy-beta-x86_64-unknown-freebsd.tar.gz": "440576edb7ac7775d5511780662b8c820da8cfdcf71dfe7a169758547d5f94e4",
+    "2018-11-02/clippy-beta-x86_64-unknown-freebsd.tar.xz": "a3c987a9035fc0bdac62f07729d9b4ab9752ba33f9c1aabbbf141d90b30427d9",
+    "2018-11-02/clippy-beta-x86_64-unknown-linux-gnu.tar.gz": "3ce406e0c2bb246c96940e4054b5fa9b049580ae4b61e170da2008ff945af970",
+    "2018-11-02/clippy-beta-x86_64-unknown-linux-gnu.tar.xz": "76671e64be3c10668285bfe611275be5cc5f85ce1de41991edb22b7fa8edb152",
+    "2018-11-02/llvm-tools-beta-aarch64-unknown-linux-gnu.tar.gz": "f8021a8a0d302eb4774d31789932488e0897ec72b0d8c16cb746a2d72b749238",
+    "2018-11-02/llvm-tools-beta-aarch64-unknown-linux-gnu.tar.xz": "8806037920e53616acb78ba4a110d26b3336797a22705b45463122622431e5d8",
+    "2018-11-02/llvm-tools-beta-x86_64-apple-darwin.tar.gz": "88693cabad55f568ca0c21276e76eb237215abdc9771f224ab807f8edd3aad08",
+    "2018-11-02/llvm-tools-beta-x86_64-apple-darwin.tar.xz": "c843c351ceed8a7b7764aee608d22ac20e4de9050a2d10036c069b2b15001053",
+    "2018-11-02/llvm-tools-beta-x86_64-pc-windows-msvc.tar.gz": "4b2f2c707bbd3506c55d48d1ff3cadd290445b227c868d596a535faa798f06cf",
+    "2018-11-02/llvm-tools-beta-x86_64-pc-windows-msvc.tar.xz": "7e8c1e3d794a4472ce01c69a701d34f64412ef1284a5a74f4dedc5ce2c5a3aba",
+    "2018-11-02/llvm-tools-beta-x86_64-unknown-freebsd.tar.gz": "c8c48f8805b794ac63cbd60bb28d77c575d754c6c97af006bcf6b466adb5ecab",
+    "2018-11-02/llvm-tools-beta-x86_64-unknown-freebsd.tar.xz": "f843788206f8836231a3a184fca593bba0b661f6b3e7b06d324fc9ce978d3b49",
+    "2018-11-02/llvm-tools-beta-x86_64-unknown-linux-gnu.tar.gz": "92472b453b0a6dbc38cef53cba6d38b5dbc79e3637743b77239543b33084d121",
+    "2018-11-02/llvm-tools-beta-x86_64-unknown-linux-gnu.tar.xz": "53744ff0002079c0899b0f38af4b32967c1c92371e2faa7a92c3ffaaff4a2776",
+    "2018-11-02/rust-beta-aarch64-unknown-linux-gnu.tar.gz": "6e28b053d8ebcef7a19875089db13931ce89bb045d06b4bf834334df3fa43962",
+    "2018-11-02/rust-beta-aarch64-unknown-linux-gnu.tar.xz": "c74e9594bc769d19616a4a926f40383ee639022094daee163b3cc7abe0a869a4",
+    "2018-11-02/rust-beta-x86_64-apple-darwin.tar.gz": "78e9fd57d2070cbe2a073758839d54b5535e14918c11260fb244bade3c1971a3",
+    "2018-11-02/rust-beta-x86_64-apple-darwin.tar.xz": "ac53d7dbc84a790791aaed64fe0ae866958eea6852521b146434913eb2c1b951",
+    "2018-11-02/rust-beta-x86_64-pc-windows-msvc.tar.gz": "68c0fcbd1f9887eff41c42b703fb2c34b99b2490f4e366efeee4a6bf0c1044c2",
+    "2018-11-02/rust-beta-x86_64-pc-windows-msvc.tar.xz": "251f88793dd573a2aa1218a6d15eb305ef4d429190cd675b4dfc8acecf33d568",
+    "2018-11-02/rust-beta-x86_64-unknown-freebsd.tar.gz": "8313e8655fca87519c469c5699cf803fb0c1bd159ee335aac199ae76753f359d",
+    "2018-11-02/rust-beta-x86_64-unknown-freebsd.tar.xz": "e87132f395a7a071ef688d2eb6d63b048eac0d6d50f22e1fae66cd72b3d1d245",
+    "2018-11-02/rust-beta-x86_64-unknown-linux-gnu.tar.gz": "76b2d14dc01a922b448019df7a24221f91c7eaa3e2034fcbd6189d5bac7836e4",
+    "2018-11-02/rust-beta-x86_64-unknown-linux-gnu.tar.xz": "833ca8e38765fa43826722f4cce77726c801f48571a41a1904dc99de40ce6c92",
+    "2018-11-02/rust-std-beta-aarch64-unknown-linux-gnu.tar.gz": "0d57f4837af1443208abce604d74dcf6880d0cdf4e74eaf2368016f064dbc7ab",
+    "2018-11-02/rust-std-beta-aarch64-unknown-linux-gnu.tar.xz": "6932fe7a1948c13bc11a36a983978ac4beb193981c6013edc099830257582323",
+    "2018-11-02/rust-std-beta-aarch64-unknown-linux-musl.tar.gz": "0d5e585506b4cde724040d340e8e2d4a3ebe04950ca863adb238c83f9462e696",
+    "2018-11-02/rust-std-beta-aarch64-unknown-linux-musl.tar.xz": "bafeac0d6f0357f9b207679ac5953d6462f376e18c97d45fec5895af412d8a1d",
+    "2018-11-02/rust-std-beta-wasm32-unknown-unknown.tar.gz": "25c7e8dbf27dd19d3d4f91062d9cb9bc6ad9aed8afacbd47dab92eba3a3d2533",
+    "2018-11-02/rust-std-beta-wasm32-unknown-unknown.tar.xz": "680747ef57407a1ea3da2b9974b336e00c75cc5af4e02fbbfeaadce57f0b012f",
+    "2018-11-02/rust-std-beta-x86_64-apple-darwin.tar.gz": "fdc26de5db0e66e0f516069690a0c86ca0e4b8b75973a33dee67ce306e4c9115",
+    "2018-11-02/rust-std-beta-x86_64-apple-darwin.tar.xz": "6521f99af1bf037f8ee1c8e6f0e9e8347dfd817cb1085c9819dde73482f888d3",
+    "2018-11-02/rust-std-beta-x86_64-pc-windows-msvc.tar.gz": "8c7dfe0692e2c0b9de130b64e8ab09946eff2eb419a22bb7a15cd9522995f420",
+    "2018-11-02/rust-std-beta-x86_64-pc-windows-msvc.tar.xz": "0cd6158f0f034afd48b63720728a7d5f48da7822b73f887567b385115db03912",
+    "2018-11-02/rust-std-beta-x86_64-unknown-freebsd.tar.gz": "4661fdd15b5cee0fafd4c9cb085d0614abab0b2b1d62a55540b3d4d2634c4ba7",
+    "2018-11-02/rust-std-beta-x86_64-unknown-freebsd.tar.xz": "7c8d6e18a1cd1e3e3b8b7dad19c90673ee55c1a1253a3d15dd9bc60057ba0810",
+    "2018-11-02/rust-std-beta-x86_64-unknown-linux-gnu.tar.gz": "3e2f68697620e501a9439bb7923f5676c82f7a4b4aaf822a141188c92619fe13",
+    "2018-11-02/rust-std-beta-x86_64-unknown-linux-gnu.tar.xz": "867792778cd48ad8e5f83944c8009cba95da550b746d895addb597b3270d6dee",
+    "2018-11-02/rust-std-beta-x86_64-unknown-linux-musl.tar.gz": "88662ac89a6c9df7a5a77db8624777cb9ccf0ecdd9a0ced1ef9bc47e7c9e8eed",
+    "2018-11-02/rust-std-beta-x86_64-unknown-linux-musl.tar.xz": "1fea0c9cf008ab15de5d8dd9b5067a247a6f7db71034efccbda3550118e8c585",
+    "2018-11-02/rustc-beta-aarch64-unknown-linux-gnu.tar.gz": "d703f1cdecd77aba85024db5e94f13e50c74e66af21091107c7cd67a3179da15",
+    "2018-11-02/rustc-beta-aarch64-unknown-linux-gnu.tar.xz": "0f67fe0784663212cb47e827e30bb0eb4d1a4a47cab87b16c3bfe290d5c93597",
+    "2018-11-02/rustc-beta-x86_64-apple-darwin.tar.gz": "199a0776ad4f1406b8b6f477d12c58858816f07246d52842384e1084d8c9000e",
+    "2018-11-02/rustc-beta-x86_64-apple-darwin.tar.xz": "e9c5c0241e267094574cecabecb700fffe1d91ee34d2084b7227936190d8a369",
+    "2018-11-02/rustc-beta-x86_64-pc-windows-msvc.tar.gz": "a4fd3838f4459a151e83d540784953cd80c5a1a68fe3bf965399c1f07f6476bb",
+    "2018-11-02/rustc-beta-x86_64-pc-windows-msvc.tar.xz": "3f9d783f47a6ef238bc76683a7fed9f4b1bdf2fa35d83dcc406dc0efb51abdae",
+    "2018-11-02/rustc-beta-x86_64-unknown-freebsd.tar.gz": "f931cb44b892dc3899c9379238d8f51d35c9503db9e93ce5700f3121712c9b62",
+    "2018-11-02/rustc-beta-x86_64-unknown-freebsd.tar.xz": "ae43615421a52ff546ea849eb243a80f556b2b4abc0bcba0dc248bb76a004a41",
+    "2018-11-02/rustc-beta-x86_64-unknown-linux-gnu.tar.gz": "7ebd46c431b8d9e8d22aa141122eaf301d5facdc449e04872019372598b04b19",
+    "2018-11-02/rustc-beta-x86_64-unknown-linux-gnu.tar.xz": "4c58a49536621ebe289cc1299da529ec4f87ee9b8c3d8068c80ce5b9a298b379",
+    "2018-11-02/rustfmt-beta-aarch64-unknown-linux-gnu.tar.gz": "c13f8024e37f7b2b6d97586569bdefca53e99514e4b76b200b71932f4a7ce298",
+    "2018-11-02/rustfmt-beta-aarch64-unknown-linux-gnu.tar.xz": "000b8fc5f3274d00c23b01faf57a5ed0a8083f9aa9cd26b16194682e89bb2861",
+    "2018-11-02/rustfmt-beta-x86_64-apple-darwin.tar.gz": "0164c2c57b3ee975c571103dbf7074e24c997cc43df23920660f12de688e8c23",
+    "2018-11-02/rustfmt-beta-x86_64-apple-darwin.tar.xz": "6418da9e756cd6b99927db547a4c21cd58c745567bae45ccb55a2f78691ce890",
+    "2018-11-02/rustfmt-beta-x86_64-pc-windows-msvc.tar.gz": "c33b4fe885e21f51b08dfa29d04179d0f138e87122f4f4a3898fa002567f2259",
+    "2018-11-02/rustfmt-beta-x86_64-pc-windows-msvc.tar.xz": "25488bce9131b727c83fac4204911c1306600128bcb9956ad0d29f14c737302a",
+    "2018-11-02/rustfmt-beta-x86_64-unknown-freebsd.tar.gz": "ad280d28d4e7054063942cd5a60cc35538af5096f29e159ba13419b82be5560c",
+    "2018-11-02/rustfmt-beta-x86_64-unknown-freebsd.tar.xz": "23705d195df0f58013311c91bb91e850d50f2d47130f819588c421bf14e83c9d",
+    "2018-11-02/rustfmt-beta-x86_64-unknown-linux-gnu.tar.gz": "60ec376659a4ad5b129307ffef4dfe9b717fcee6f5d929b1e3e423e599258be2",
+    "2018-11-02/rustfmt-beta-x86_64-unknown-linux-gnu.tar.xz": "8ee3f63976c0a7935385469991eec7854f3835a8fcaf3dd49a6ed1571387f7c2",
+    "2018-11-07/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "45f1fe31b55aac2de8fa98c5738704481e27c3bf206ca7a65b165b301f473a1e",
+    "2018-11-07/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "e12e05f3ce3096ce7b6d3866408d8cf4c93238db6c92cb5467c57447a2706f88",
+    "2018-11-07/cargo-nightly-x86_64-apple-darwin.tar.gz": "35ad1d24795b3fe97dc06fe3b1a45c2e75cc9e62bdf491d4964863920b311e0d",
+    "2018-11-07/cargo-nightly-x86_64-apple-darwin.tar.xz": "64c51010a82e0762087d51a5a6b32de76e8d7b149832c9dce2294479d13c27d5",
+    "2018-11-07/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "7147bc0363fb84aa2feda337a6bf7e3f16f26aef893218cd0b59c31793c06253",
+    "2018-11-07/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "b999566d6c6c4b662ee746cd21fe3d6ccfcba005c23e2f3573d469fb4f133604",
+    "2018-11-07/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "d537821f8acf2a89d44bc534fbf5efc27785df372005046be927c0d1ae088a23",
+    "2018-11-07/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "6b4f8fd559d3e4c2e63662aa234c97b99a939b0b6971adc1f5fd0a5f9eb4edfe",
+    "2018-11-07/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "7968167992937ad8e7284c9ea00040ddd873b759b2595eb67eea68ce81abf627",
+    "2018-11-07/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "d7e204467b9ea6939b246b06ce38b9b55cf2cbba4990bf35a504cdb827dd2f87",
+    "2018-11-07/clippy-nightly-x86_64-apple-darwin.tar.gz": "7ee34bc4e2b1121ecb8ad01bbebc54f83bafd72acb8e4f81bb3cd1106fc29cdb",
+    "2018-11-07/clippy-nightly-x86_64-apple-darwin.tar.xz": "59c32855ee183fa0079f3a525686f6c844e4401e27aff0a08cbafede6b809001",
+    "2018-11-07/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "a65fd2d2c7e53d3876808b41491d2556a55e399a470d747427f6ece40251ca89",
+    "2018-11-07/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "0eaacf0f4624f687de86c879e2c5177cce2522d52dd6f00df571296a5a403bdc",
+    "2018-11-07/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "664296ae2a0226abcb58d01067b3a614fa6c66afb821e36be17faa205ef14f70",
+    "2018-11-07/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "79db2c4db855bf761f5c678c375d0bb819ccaa7d163987c91451980e1dbe025a",
+    "2018-11-07/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "62cf4c3f179e14b6b26485d85ebf17ff676b87938c14bb1ce19d93c02197d091",
+    "2018-11-07/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "ed251b7e661825759a86bee6067be547c6f43e86495e4c136251e9de7f0d0f10",
+    "2018-11-07/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "c2dd30b73e5e0495d7d4c05cf98f50197c00f542cef7f3ef37e095d0d8686991",
+    "2018-11-07/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "c67bcb877aa4321d8d13f2a651b30dd719234cdf6f86bee8f44fed203ebc1500",
+    "2018-11-07/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "2cd61d0f54d3753777b019d09a2e88cc9a2fb027e947a14eb1f509e014ff19e9",
+    "2018-11-07/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "cb94b627ca7b214ad7f5d80c5c3b590ffc2464789a80e9bbd721ce073feb7692",
+    "2018-11-07/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "14c6387239ee0bd8d9d9ca0c21c808a542de4133e8477fc2f1fc958eaf6c4428",
+    "2018-11-07/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "b50beefeadae063330f91c31f8ac44dafc8d2290e207930c63d75f76309fdba9",
+    "2018-11-07/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "52a726f57b80cc7d29c15b93ad35e3a7ab62fcfbd7d89f91021a783be6ffbd18",
+    "2018-11-07/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "ccc61ababf98b391af255d8233ceba67696c78ef657ee7e30887f14352f5a933",
+    "2018-11-07/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "ddd007ee68b7468a12d240d0f08939efa262e8d96ad7f903cbef62b461a61417",
+    "2018-11-07/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "b1955a66efbedfb2e39ad778d6aeacc7ee30cdf420d52ca82933d0833bcacb10",
+    "2018-11-07/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "f4725077e948b6eda7d4cd482a8985037a2f8ddaecc964908a490deb9ac46e21",
+    "2018-11-07/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "00caa6365b9bfb9ee9c47fb7ff5f007c2b51374569abec3f7da0588e94bf0ae5",
+    "2018-11-07/rust-nightly-x86_64-apple-darwin.tar.gz": "b9aaefca51aa2d7e89f5d790e865d00ec4142c79cebee43ba0d575f9f52ee65b",
+    "2018-11-07/rust-nightly-x86_64-apple-darwin.tar.xz": "98b10adfa183eb78ee1d9bb17b29294e9e6c3d450b24d879e8cc1e06a040d516",
+    "2018-11-07/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "5826f958e4826b0bd0069918185afc6db0802e6d3fe72a9be075f3408b707521",
+    "2018-11-07/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "19d61dc9a24560884530da0878978c731fc5157cd3020ca86374a2443e204986",
+    "2018-11-07/rust-nightly-x86_64-unknown-freebsd.tar.gz": "38860320b7e97193493e45d362f34d311d7aa8fface77c93fadfa15e8361df3d",
+    "2018-11-07/rust-nightly-x86_64-unknown-freebsd.tar.xz": "f00d8fb4f09556ff2ab0491375c929e3055a00055d880c36cddfc0e6de7d0704",
+    "2018-11-07/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "c1d7542e90f76d074a7ea925b5ce40ec602c9e3e04822939623a98c4d020ea2e",
+    "2018-11-07/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "5d13203d384e08488bf0df89aff9ca60147f718fb1ec54e0b6d2087eb5d1a53e",
+    "2018-11-07/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "e7a4629ab15609fda17a9e16cb0f7538d4077f572ece200891726344e314295b",
+    "2018-11-07/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "e8bba088bdf0ad2d5cd041750ce1799952e79d77b50b0e98051eb87db05049b3",
+    "2018-11-07/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "25b7b0cef1f802182ffd26e62defbc5f6fc79504739d14627bc74ca1db24bdaf",
+    "2018-11-07/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "e30d4db2d70db25e134e74bec850c3dc92b47ad93e6f4456ea5444ad5be1a1fc",
+    "2018-11-07/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "9d1bcbf50fdcd9912fd98901ec40c7fd5d73ef2262a70322b4ca52381363c34c",
+    "2018-11-07/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "c829eba71823cde23dca085359af8620a7789589c49f0d2057971a255c828b44",
+    "2018-11-07/rust-std-nightly-x86_64-apple-darwin.tar.gz": "0c988a60e72d545b19b5cef616ddd3411a278226abccceca622581871f2b5cce",
+    "2018-11-07/rust-std-nightly-x86_64-apple-darwin.tar.xz": "eff3759e188b9918dd3557d60c0bc35547db4e29182e0ecea9d912627056cd2a",
+    "2018-11-07/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "0d04200b3bc5ad5f939d98f7af083c0576aae11876830492f9964de23dd33acd",
+    "2018-11-07/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "ab53ca9838a360c49cafbe7a87aa5ee0c6d53c3adcbe77f46a25a5c8515391a7",
+    "2018-11-07/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "ca648e7eb243cec32dc5a1b4e2fe6d67c2a00be56326e4d7aec9f2bbeb4dc138",
+    "2018-11-07/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "090112897a8b8d0858a4627987bb972d2a407034b3b10eac70dd444aefef806d",
+    "2018-11-07/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "bd8daba5c2d36e261da6f0ea8b5893e7fe94252eca7478d581c036fc1acb7c36",
+    "2018-11-07/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "f18e0da5e31157f3636b9a96c8eea02a38714e08ee732b205378ba23c8c13ee1",
+    "2018-11-07/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "9d5bb908baa470e4da390f5b32f7db2c15fdc347d379b61522a33128bb486b12",
+    "2018-11-07/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "75fffe1929f2aae90ef01efc5675e5b71d979cba347a1b784e405e3eb3a2dbb8",
+    "2018-11-07/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "11caf45fef229d85efb36cdbcf955d95fae648c27ca4ffd153bad316eb58793a",
+    "2018-11-07/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "2b922297ed7543e272ae27e8cca91891e6b65a601eaa072af33566b017a557b2",
+    "2018-11-07/rustc-nightly-x86_64-apple-darwin.tar.gz": "cddecdb0d595cb8b944bf70b2284f557743f5637536f2181ad0036806cf56217",
+    "2018-11-07/rustc-nightly-x86_64-apple-darwin.tar.xz": "86dfc1095a1e859bc4f292e8b198219a2cbb3cdc52a1583fe2b3d1ad8da4de76",
+    "2018-11-07/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "479f58f34616b83c003fa29e68ee84c91ee5521038f255a7cd3b597a2f5082d0",
+    "2018-11-07/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "d19955f9108b432b755ff1fef86a25ba42547cddf97b2b47cac103dc0fdd6524",
+    "2018-11-07/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "47f81ec8c4ebbcd4e948033b5db72c1e9bec6f284fdaa5bdf59bcc92b075333f",
+    "2018-11-07/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "54efaa8dec664914366b7844c1349da4f15a9616268643a4d1ac8c926237efc1",
+    "2018-11-07/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "7f1aa11f8e503e6e9a03b6cd05ab12b46837bb7597167c72112abaf1481e46cd",
+    "2018-11-07/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "87f0fa719f92cfd981c3312d4f4e498d9f271b96cf69259dea042a86144186e3",
+    "2018-11-07/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "9b64705de20633c73a39d47deacbacdce11181dc5e06fa632ef08b8a3a7136e0",
+    "2018-11-07/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "0f744589b0ffa79c2b80a54cf1e48cad68ff26be57a25cb1ce6ba308586681cf",
+    "2018-11-07/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "bb86c58a5a12922ddd2d19a3cffe9cd8d87785e57f72cdc998e94926a68345a2",
+    "2018-11-07/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "94b1db213ef3600337429747ddbade9a8ce53e5bca59722837ac565fe7d9389b",
+    "2018-11-07/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "4612d2961bc5d0b24863af21fd0764b8ec8d2a843f1a39b97b418bc283b8fa2b",
+    "2018-11-07/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "adf513b01697251a91fb60fd5364a583267e56f4cd5d5025fb41f8abd933812e",
+    "2018-11-07/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "b0677e91bb7c0645844f988e7f7b625768f0a72947536a27fce7f5a9a850c5e0",
+    "2018-11-07/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "c2bca595d19d6828477bb8ed059f60e46926a3cec75ab65f02ae30cc52bdc884",
+    "2018-11-07/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "e1dbad0cb0afccdf5e05f97129f9d34bc62ce6475dd8f09fad2d31a8129acf64",
+    "2018-11-07/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "2fb07d509d0389af205956833cc654011f92d5efbcf360e56a2eb67a063a219c",
+    "2018-11-08/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "df9cf735f2c0efc48356832b0a11ae3f6df0d78879fb93a3b9cfecb15e79010b",
+    "2018-11-08/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "f869f7e5a3ad30d7532da9eaa49e6b8d41a919e76264e1ab0f8625fcfdc39d2e",
+    "2018-11-08/cargo-nightly-x86_64-apple-darwin.tar.gz": "e0a585f21907bd78820c4fd0ac56625ba10053a9430e9fab014e90e42f4a1fab",
+    "2018-11-08/cargo-nightly-x86_64-apple-darwin.tar.xz": "3420a8aad13492edd5d6c008e2d262f3f7121b3be0f7581935161a81e3fbd8c9",
+    "2018-11-08/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "025741e19216a317d8c2bb27950fbd7c3eef6eae075c606fc4b0622d3a92b89c",
+    "2018-11-08/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "6eb1882493653d29c1f1c360ec078a0c96d6a6a5dc2e52dc0a535ba295f7f4d2",
+    "2018-11-08/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "7e9343a3885caa12c1fb7f3007e8c72ce0a11ea6696839e0882ef7e560aed6d8",
+    "2018-11-08/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "636f7295477283a5d273c804ea20cbe0b4498376f7e6ba2f9022681530662869",
+    "2018-11-08/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "b421dd73cac889804f9d3758f5ef32157885a043abfb21651182fc9f672b7491",
+    "2018-11-08/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "6dbae8174ad2c111f587b3f112c1615f9368b573935b2d96f9f255511aca4910",
+    "2018-11-08/clippy-nightly-x86_64-apple-darwin.tar.gz": "a1b8fa097c8814ea239bc78f13df97a39d7361516b68ef340d9e42d0ee2905e3",
+    "2018-11-08/clippy-nightly-x86_64-apple-darwin.tar.xz": "78aae26348b1240ee042a5257bf398e442136e2341e789fcf7c764654233a3b7",
+    "2018-11-08/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "f863e10d8b82428771ac10a3219094f4252239df68f611a4dfa075a836f6be75",
+    "2018-11-08/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "7c47199498350bfeddf31047e367eca573b2f318fdfe5a23a27795e71249537e",
+    "2018-11-08/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "87cc3be056acb88e08d2dffbe7924aea58e39bb7380cda44e23748f790f15e95",
+    "2018-11-08/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "5e82971cb8f1328edb1ebb9441e0efa83e2c97841fe90d90755f7d705828c3f5",
+    "2018-11-08/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "b1f0ca2c7f5367dc044a3ca1702618e0e58f777369d470a8173355e2f4507127",
+    "2018-11-08/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "25e33715c008164ac393343de2d2f453d6e3dea2b72c91d7855a63c6d2386412",
+    "2018-11-08/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "fe2283cabacf6b8dbcd8d11eddb11a2badb750091ec5b38926ad48d3577da601",
+    "2018-11-08/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "143216c36e89c9798cc06901a4e34c2a98a338b3afb69e1570486e807e33a003",
+    "2018-11-08/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "b173d662715ec4edacdb8e06570cd471a6f63d05b49c6867f95ec366f8a2e0db",
+    "2018-11-08/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "660a4c1fa0bb73737317520e08d7355dd729a0ecf8745eb6f31ecc8ba2ec63c4",
+    "2018-11-08/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "558cd81ceb5e08766ade45cffc98a8d1a179d34f671f9b9518627e8358d65984",
+    "2018-11-08/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "cf8e871e32875977f3e987251aadb6515f216700d2a28809a8d5aa23791e2230",
+    "2018-11-08/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "7d77f85900b0aa276df746bc023b1211c4221e6183ef62663565b65b8fadd9f8",
+    "2018-11-08/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "875abed53ba475492548a120a1386428c77fd6c4db68dc9f3e82ccbb2baad823",
+    "2018-11-08/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "c634eb65a3839b176563823d576b1f4705cfcb3e91b237f2c4f852ff5ba08d2a",
+    "2018-11-08/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "8f44e68438416d3b99c2496b5bdd12840ca19650d01085157f5c61dbd7871254",
+    "2018-11-08/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "20ef5c5f59171df0335846c6c3315c5e3c495775e3c5b1060481d70421153412",
+    "2018-11-08/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "db946b410b301c6a01dc39f8d5e322e48b708208a493f6553690d105d49885ca",
+    "2018-11-08/rust-nightly-x86_64-apple-darwin.tar.gz": "921f19787a155e5240e21fb2bc630e5907b964652b0f7553b64acf819a0a2d43",
+    "2018-11-08/rust-nightly-x86_64-apple-darwin.tar.xz": "aed9bbc3b57ec399da2cea716c65572e863fedc924ff28a94f1ec948ad205347",
+    "2018-11-08/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "46d76bb12cedd53927cb35fb688540010b5152568467508fa92b0745f0e39463",
+    "2018-11-08/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "eae80236d183038d84d18eca258c820348e61c4c9994184c20d74c565c63d0e0",
+    "2018-11-08/rust-nightly-x86_64-unknown-freebsd.tar.gz": "32c28d8e915086406a3493d59d0e3b4c4751f77a3b34d257a3341aa4e5f8ad4f",
+    "2018-11-08/rust-nightly-x86_64-unknown-freebsd.tar.xz": "63b338ef345d81ced00e15d2e1f8a0d844e31cbb498d07d8589af26cf74f7e33",
+    "2018-11-08/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "5f33f1c01720e471b8293d304a01f354363418dc7ceebf206529a34f932c3a82",
+    "2018-11-08/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "cb1f3c8f80922b1f3c537a4c5f6a197f98467dbb4a88dfd22859aa915d8e46eb",
+    "2018-11-08/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "e83ecf484a848053a8679c8164340f90bd6c5823d9340b4fc5318c6265e544f1",
+    "2018-11-08/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "4d4405b59a88897959e7c52fc55d8aee3dfe18629698082d213f66d6a8413032",
+    "2018-11-08/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "89e192bc7e9fad3eea6e24f967b9405b35c677b1fe3a6b8fb4ab4def4f6378d9",
+    "2018-11-08/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "a0336cdf12bf7861906f274b3c40a3ed39de2bcf4d60e528e0b6bd33fccc2755",
+    "2018-11-08/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "0e12ecd9a2bbff67b8d82c15200acdd32d1f91fc1761d0b72fbbb5d32ae629f9",
+    "2018-11-08/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "a9b3c86c766dd1bc12b556ac225d253718e2c78ac02aaaef80341f2441c23603",
+    "2018-11-08/rust-std-nightly-x86_64-apple-darwin.tar.gz": "9d5e89e71f888247093b5615079da538a56c2758eac270173a4f85a57ef92967",
+    "2018-11-08/rust-std-nightly-x86_64-apple-darwin.tar.xz": "997ccf77875d655ce84613167398f97c326c0db767cd5201135144bd4de58352",
+    "2018-11-08/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "e891a3ee103e65e8e337b3c9c9d1e410c4be97b1318f820b591565b5ae6340ff",
+    "2018-11-08/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "8c555f5c4e8372946c6467d9ca0f048a226525856478fec4bc9920ac1d0ce6c8",
+    "2018-11-08/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "64aabfec15a2b773c27892e58514161cb05ab370e3291beb1cafc7d270772389",
+    "2018-11-08/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "23d62d899b15f0e813e3aa7651a13836e9374692b58129586568c6e3cbc2e876",
+    "2018-11-08/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "efb8f6f6aa2c5a3f1c069e05b74fde6a85985837054faf3bc565d839902efedc",
+    "2018-11-08/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "46d54d13c5b64ece731b8596e4f568289a693831081be1315763799e027e99d3",
+    "2018-11-08/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "d2629d2ae1dae0b80bff33350f1bd469e145bfc4b935ff4bcb79240ff23ab279",
+    "2018-11-08/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "7649ece1c2d0a0f54c1b69bee6f00182a176cafbf0623e3f5fcf5669b5069806",
+    "2018-11-08/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "494173aa705efeef4df2d88278608bd71b477183d85a670a577051c76c5ee99c",
+    "2018-11-08/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "13512071b6b9ae49c4e6998d7964a3f8e9e3f989ce22769a8756442815a951b7",
+    "2018-11-08/rustc-nightly-x86_64-apple-darwin.tar.gz": "316e7727a136a82a20832a69b18f74add335e9b659fa7e0d8c7d12c0d11224b7",
+    "2018-11-08/rustc-nightly-x86_64-apple-darwin.tar.xz": "6db3ef4c3f4bc83f8eb87c61a67604affedda0ef5c1b21a7ba386155eb0d9d20",
+    "2018-11-08/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "489cb54446374eccc78eca18aa86b4159d47fdfa7bab0ea9a20cb68fa4d80071",
+    "2018-11-08/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "ee25e064f6bd62ecd82a4f725f40d0b1a9be95242ccd8296283c966d43e3eaab",
+    "2018-11-08/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "874b7055e0cb609ce34d38456bda888865c63fcbc7abac5aad147f2a21a7d147",
+    "2018-11-08/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "791bd56b771d30a9155ffb239f0ed9428e3d304571d380c2cc8ce73d5db71a71",
+    "2018-11-08/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "e50e43d71573e069503aa6157d1736d390345006965fa889842835ce80ae36e2",
+    "2018-11-08/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "7eefbdddc6b1096f72d3b0026df261d7a4ee8cfa3108d1b431299afc7de19fec",
+    "2018-11-08/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "4f5f4077d0e1c888fa3366dad638b5e8c7aa032deab83334a170d8e4275d8e47",
+    "2018-11-08/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "eb2dc7919c5b39a7594386ab3fc884a3e6a6ce1d3d9269b3f5e70d704e88ba11",
+    "2018-11-08/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "b6a0f812726134aea52e2b6ad708c0fb1052f80f1515a66cddeeef07052a67cb",
+    "2018-11-08/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "111531539eec807462d8800688e19c2eb869f8053c6c6741daac674da25cea96",
+    "2018-11-08/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "eb444b276ae5f6ed2c1e6dce994e17ebb94b130747a05c402e0c96b2623a554d",
+    "2018-11-08/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "8b52ec58edac917343c52c8d4a0ec755e35cd60a3568a4a1f8820bd3a30dec71",
+    "2018-11-08/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "8b31f7677eb0e7bf6ab145a6347e0ff00e57ec3642db3269763d97020cad2ebb",
+    "2018-11-08/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "e68dd8fa3c98428c49e5034f639a4f930a2df7b012a880cee4330e0536031dd9",
+    "2018-11-08/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "bf4c5913c199a5cfeea53432c880a02ba1ec6b38eaa59f012a909a131cf11cf6",
+    "2018-11-08/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "837ac947512efb18aba6153479ed8eb96530dd59afdf65c727f3fba0fda081b1",
+    "2018-11-09/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "e2db9ce2b561d7fdc456431b661be0b68e0a97b932096595fad273a9dfaa8b05",
+    "2018-11-09/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "431da97f8d3d21c85e3a52943fe0a59734941662dc1e4411e657e6b9a6355042",
+    "2018-11-09/cargo-nightly-x86_64-apple-darwin.tar.gz": "696507e163c5ea342a3780da51efd51633dcfcc980b493479928b9a3e0894157",
+    "2018-11-09/cargo-nightly-x86_64-apple-darwin.tar.xz": "32c7da5a22392e2d1432cc831daa1df45cfc5eca0c379f5e5fb3ddf2d046b42f",
+    "2018-11-09/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "0537061725164e1c344b73ec85a1983966537e7f0d4c231233bd6aa6a30428e0",
+    "2018-11-09/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "ace4326a97d860e2c7608837b5e9acbe267b2d846a99c20b91eac9f9360b243f",
+    "2018-11-09/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "07935c23f2f71e30092672010975ed16d34a9f50a9ab4deb86c9846d79a4729a",
+    "2018-11-09/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "9c4aef5a13551c67f28344761e4f4de1fd874a3be2bba4f1dd72d1e555708767",
+    "2018-11-09/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "0f5448e37227d79689967658252a43d48c596ee875fff5d7a530b20cfd408bdc",
+    "2018-11-09/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "60273c5eaf8ddfbd459605db0b1fc5cfe421342032fa57de9c25e653eb3c69cb",
+    "2018-11-09/clippy-nightly-x86_64-apple-darwin.tar.gz": "42ee57c56b42dd837b9aaa4307cb9f57421cb430264048de9b291733438f6f85",
+    "2018-11-09/clippy-nightly-x86_64-apple-darwin.tar.xz": "19926eb205c954df2a0617838d3f16104d493bd8b758f8c7d16f3beff5ffaa33",
+    "2018-11-09/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "83b0f6b8423dd3061d5d9956371e6665f13bd857e711226f9684e29b88294593",
+    "2018-11-09/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "17be74b9161b78521693c583fbe6c84f172af333e2c0c85ad494b1be47d6b6d2",
+    "2018-11-09/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "0dc28f63ceea25edefb7b96bf5c8bf746b68505307ebd9c38a8aa7b6d3d2059e",
+    "2018-11-09/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "50805bbcb71e6a47cb0ac97808558d0ea63272524599873d84bb440e07720510",
+    "2018-11-09/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "f56e10ae1c09b0356514fdb411a9b38597d824e080e7cb050588fd627c4a544a",
+    "2018-11-09/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "2499a12ed38cb4aeb7d39d26ff837422b961ffe5866a56ffd1417642bf479881",
+    "2018-11-09/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "83188eccc2b7067dcfc960492f91d23ad36ea6460005ac6b91c98d20694e60a6",
+    "2018-11-09/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "18752c4bd3d990f96b84fa96a331c73fd05abfc3f86f81a0909c21ea8d60fa0b",
+    "2018-11-09/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "03e2e4ba7ffabe88b118f1207b820cc6c7ab0d79d478c1687ec5bb1c903b4045",
+    "2018-11-09/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "4bab87803bfe4e409105ba80b8d7d594e224e5fd6e1586785cca5d5492aca9cd",
+    "2018-11-09/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "63a4f2c85f3ef51efb0075944ad0249337cdd7c9593036995f79699393a458d7",
+    "2018-11-09/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "7696c65b45fb61f33bd01520dcaad94a6106631e515aa62e9de538bd316b79f4",
+    "2018-11-09/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "f9ddf5f1e02b800aaa0add32365d62e5dcf590cc130af5b209cdf8520f9262a1",
+    "2018-11-09/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "6e28bbb7926562857555afa62afc280ab2a329b907c106aa6c17aad477e077c1",
+    "2018-11-09/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "8b3e2e2bf77224e181a9b1987bd2ae940a0462f8b0af84b59de484f8fe96ffb8",
+    "2018-11-09/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "af881203b6ba5ee053473e4e604e6c97979b9069c3e3d22002c75660d3378061",
+    "2018-11-09/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "4d0f22349061a40a834ae6a40640c0f4e8a19f068a215af0fb0b9a7250942d3f",
+    "2018-11-09/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "466e8acd2683411d39305bea89162de71f59081b3e3a47147116166d1f08f8dd",
+    "2018-11-09/rust-nightly-x86_64-apple-darwin.tar.gz": "934b83bbfcbca605875103293cf691a56429661e929e1c29fec2d3c5c1d65143",
+    "2018-11-09/rust-nightly-x86_64-apple-darwin.tar.xz": "288c0a24586686330904ee733bde15d9102428d392f42dc5e87b58008d719d17",
+    "2018-11-09/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "6659d7b9001a3613ca6b2bb64e5f6bd67cae51bf02e81b8b96dfe2299a180a21",
+    "2018-11-09/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "8a016c8e1b24cea27869fa8989c8bb1c0bfb1170f65d4f50eec3a200f89cafa3",
+    "2018-11-09/rust-nightly-x86_64-unknown-freebsd.tar.gz": "b50b1cf51e8bd138d55dc77f681904e1b431e7c956951ec603a3d94ff81a0783",
+    "2018-11-09/rust-nightly-x86_64-unknown-freebsd.tar.xz": "b94dbe2f968912dce9e68295f020e7cec79acef66266e5d29095a5b062005f12",
+    "2018-11-09/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "163e0666f2f7179caa9c5baa8b0280c618dc163007a73f5da0a0c917bd2b8902",
+    "2018-11-09/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "710d18eabf3b9498b91f8015aa9df70f6f8fea528f374ed183d6e3921c0b24c0",
+    "2018-11-09/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "cb12c26ec032ede34f925ea7c57118c8694dee439f0e258f8655b83e08512a43",
+    "2018-11-09/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "465e6f03f4a5b944ea3421603150f1cc770da85c91054c88ea65790300f67a0e",
+    "2018-11-09/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "5e0d20f6f2b01bb661724cb5478fddd37c560f2848af9961da44d0ae75029b1c",
+    "2018-11-09/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "dc905978e2bbf5bd7d5047d5fb69c2e6bf1d06c60d9b20a66d15ddd39a958b91",
+    "2018-11-09/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "a0084c768151b5cb7554085b77fdbbc014a1ba246335623a36b58e7f6bb95fb0",
+    "2018-11-09/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "1fed90a8fdfacfd6c7c4ab05204bdb68eb4b377aec3e6dfcc30d202bfe5ad8da",
+    "2018-11-09/rust-std-nightly-x86_64-apple-darwin.tar.gz": "dbc9ffa483484380e41b6514465523f6ef106be5708374b714458d14f76149c4",
+    "2018-11-09/rust-std-nightly-x86_64-apple-darwin.tar.xz": "6201c6faf97046b7287cb13924b2911cb89931dcba531d2fd818fccfc668ae2a",
+    "2018-11-09/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "40e4194f3abd9c1eb97c3783009571f96d83e80018662c4ff6fd60e992b50ee4",
+    "2018-11-09/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "862e3d32bf4e8b9bd862affc41248d76c8d238f0e74ed49d40e55b7b5fcbe000",
+    "2018-11-09/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "ab8a32d8efb0ab4686526c6cf1380161e87a89015464f5d5f5438c99723675c7",
+    "2018-11-09/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "290bbd85ff11a6827482a2c094f44948e88622ce25627d9f7344feabad165739",
+    "2018-11-09/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "1418ba09f97c6ba91e2df5ba0b11cf1c53498710bc6a147fe8f4be455a96c4d8",
+    "2018-11-09/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "e0a37f9566674131d7c69c37dac8a5ec7c099869151b2287cbf5268d695524cc",
+    "2018-11-09/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "3262404dc8b0f509b3d47413340d825f99940f954ad4928fc0b39e2032c58230",
+    "2018-11-09/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "02470634eb027e5e7c48f811b1071561e6c62c179b13cd70d89aed591492283b",
+    "2018-11-09/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "167fec713804d8af1fa4f543e79ca5cee259f1b966b8e04c99efba75901f4c8e",
+    "2018-11-09/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "330b5cb2eb0e4770efbbbcd280fb29602e305f86651589e040e7f8e93c80e359",
+    "2018-11-09/rustc-nightly-x86_64-apple-darwin.tar.gz": "55ca5ad85b0afd61a419e374f8e6320b4f4fe30f8092005cdec9e63103812ea7",
+    "2018-11-09/rustc-nightly-x86_64-apple-darwin.tar.xz": "62790bbcb81a283b85630acaf10b98ff1ddd77dc137946164c9fcf059a2237ff",
+    "2018-11-09/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "dd19c5a4b209a9f46dd2f99eb7ec0898bd00accf1c6e8a97222c580bcf62e32a",
+    "2018-11-09/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "bfc0af84374050455b4853fbb18b673715723d464a5f7a36f608f6e1aa83c4c1",
+    "2018-11-09/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "bd6bb0228aeab01f425cb2ad55b2e0409b43e79450c2830183a6878cc2d2bdc4",
+    "2018-11-09/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "1c153160ea4dbab5a2e8b0e8400e846e9876acf6302c130aef639a9f3a028a6a",
+    "2018-11-09/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "2c475f886123353c9388322da6e13a67b6ae902d8c249f8e95fde67429f7bf37",
+    "2018-11-09/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "fb76689bd05b7038de5d055c9f4618b86f347c31b174eea053f31447ef56b905",
+    "2018-11-09/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "159353d0fc3b7d6aea127df348d7e824da79f995bf286df0bf03ed0615b7e875",
+    "2018-11-09/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "bd101f434708042cc2ea20a3be6b031fe6b5be28e35f519485e01ea68001b273",
+    "2018-11-09/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "940a39cc86d1cbb02535065d40993cc52acb223487c9efd4ce396950b6a72ed6",
+    "2018-11-09/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "56ca13ad646d3ac55463594ce3ecab88c38dd29a8a52971bd527c49696d4d9fb",
+    "2018-11-09/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "896305dd7fb4975ccdf54c569faf05ce0ff9a13fb0b226904fb6594ed5e5c03a",
+    "2018-11-09/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "25ec784ac43d88352d0af9afd0792646e2a0c51a04411e7bc1d54b1552cca92a",
+    "2018-11-09/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "7c313ee99e0bd3ac8ec13b576b07e6e64b0eed22505ddef1710bf2c7b1236378",
+    "2018-11-09/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "ae282bd98c3cc3420bfe36513e3c89e6176b1be8a71725305354d9945fdbb413",
+    "2018-11-09/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "4d1dbb88662353ea4bc353ec4d73600d72af0fc51f54dc3f0b8ee0b0aef05a15",
+    "2018-11-09/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "eae75d54d3bf639ea9e0381e6452b956346a56245d39920eed755c7a0197f678",
+    "2020-02-16/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "2b9e7a1be3d4599e22e3070703e76643c12a60b16109f1bcba114d9453d41e48",
+    "2020-02-16/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "db270a9b789d404885f5b6daa3e840d6e42327533e43f83732c141041a29a745",
+    "2020-02-16/cargo-nightly-x86_64-apple-darwin.tar.gz": "c23632fbdc4a64b53bdc6a0c439a5b8a496e4450805b1ed421258822a4124175",
+    "2020-02-16/cargo-nightly-x86_64-apple-darwin.tar.xz": "e94f86bf49f3c8b29a0f5eada5b6d441270182c4b5f1fde9901b5fdda5558406",
+    "2020-02-16/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "f81d3f8baecbe6b461836e667fc6035df50d645a84c58ba1d294a53a654323be",
+    "2020-02-16/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "640180fdbbb48293dee9cf5aa5288525996c64ab5f493a4f823603dbcf773cee",
+    "2020-02-16/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "a2933a0e3092320705a0fa4a9dccf32e6a6566bd7c1440554a2285a98279ed50",
+    "2020-02-16/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "c1c26ce86a927828d56c0cc123b15aac9d362665f65571714d93554d692d19b6",
+    "2020-02-16/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "658813da4742c713a7486e65d258c45492847c0a3508f041da187d03a50be8fd",
+    "2020-02-16/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "4d3c8cdc9a0058e3d16f96b567c9aff78eeae8a92dc3538d1687d3f9dda0144d",
+    "2020-02-16/cargo-nightly-x86_64-unknown-linux-musl.tar.gz": "b197fce52a420f4d91c25794c4ffbc20d10a14918a299d1f8e8c93acb415c42c",
+    "2020-02-16/cargo-nightly-x86_64-unknown-linux-musl.tar.xz": "0913473ad3619a059db55a4ca26083712067d858ec217ddb3eaef3652e43ee66",
+    "2020-02-16/clippy-nightly-aarch64-unknown-linux-gnu.tar.gz": "47a8f75f95c105fa77fb2807224041801db639441608512be218c39acedf0001",
+    "2020-02-16/clippy-nightly-aarch64-unknown-linux-gnu.tar.xz": "5664929c9425ebe2d44045ed63f17f35d39fcaa35da5dec9afb7c29fc312517c",
+    "2020-02-16/clippy-nightly-x86_64-apple-darwin.tar.gz": "d388e393a0cad72bdff876a99b2e5fe9f6c0d2c606a6184630aeda1ef4a06f76",
+    "2020-02-16/clippy-nightly-x86_64-apple-darwin.tar.xz": "fc06e95b59ba8b256bb67baf7c3feae54147a0e9d82185ca9978e38cba6c794c",
+    "2020-02-16/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "783fd1a17cf99c8193a3b884c80768175e7216b3e7c9a38a9fe4348e3bf66bd2",
+    "2020-02-16/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "d80ae4491938dfc20a6350ab55e3063e057815061c4bcdcd3f921b61ea3a9471",
+    "2020-02-16/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "ff5e128ebd9fe15ae3cc4953f937f92338e332054c1deb3d42b967c2e2a345be",
+    "2020-02-16/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "f59cca5a81ddcf725288ef26aeb07fca4bd9f8f8590c24cbe830ebd7dfc4db51",
+    "2020-02-16/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "3e52e6fb619b84e3cb36cc42be3c21599c1e6b72fb8738a5c8703d401f69afcd",
+    "2020-02-16/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "a153668842dce2dcf6c93b0f7318fcccb30267416c1d18c9dab4d640dbada14f",
+    "2020-02-16/clippy-nightly-x86_64-unknown-linux-musl.tar.gz": "1f1d448068a8bd58d8ace58ec201d5c55d492610ba74c4a8e0ed129060b290d6",
+    "2020-02-16/clippy-nightly-x86_64-unknown-linux-musl.tar.xz": "071b48722c1f2e9c50a19a10a58e0440a5a0c34e163e6bb2f1ba24bb9def2e82",
+    "2020-02-16/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "f0de4de8e364ee8e0aefc07500caca3917d79ceb4fd52a1602b5985b4c40ec71",
+    "2020-02-16/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "cd37143bcdb4c3c4e113ecfbdf04a00f359a5a8024cd1844767971608db74f16",
+    "2020-02-16/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "b9ec36e5c51f2dc1051e4b5831a49c096836f95c8bb87c19d6fa12bcacaaa914",
+    "2020-02-16/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "396e49eb7516114c1b1c81b7bc5536d59ca1a103a8c25197f1d9b18e59cfd0be",
+    "2020-02-16/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "4a2b966614e6bb7a1fc054ce42707c8a2b082b2f28c76c8954a19a65ea35476c",
+    "2020-02-16/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "67ac55bb39960eac54ce94b00feeeb2cfce8aaed873db086e795c376ecd0a1db",
+    "2020-02-16/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "235fa158239a4b498846eebff92639a87c708056e1a91215377f0d485e354c08",
+    "2020-02-16/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "323034ed74b989340a927a68596cf010c66110e0bedfe177b7bf64dc275d0772",
+    "2020-02-16/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "f066cf2b315d0b6edc95d1b5b1b5b7a2275928045f4b2e4329144ca9cee85b6b",
+    "2020-02-16/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "12f8c28234868cfb2dd92ef2c713f2e98e17a6c979707179d12d7210cd195edb",
+    "2020-02-16/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.gz": "ad60578632fccc91b8503a1baa7f15629c07ffa0572c43a704cc1316ba138894",
+    "2020-02-16/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.xz": "4524b099ec9dc18df474b951971a6fd8fad23e772bc9faedd5940f27e1b12120",
+    "2020-02-16/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "9edd6c4c0d1b8626c905d91d36330fd9c2671d33f82d5bcd4413bb8696fb628f",
+    "2020-02-16/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "716773c9a88a67f050543409ddf648373833ba93b26aac188e5753b03125aeff",
+    "2020-02-16/rust-nightly-x86_64-apple-darwin.tar.gz": "608d8747aa928b128b4da9565327fe791ebc787b96e80f09ef84676f3a0a3efc",
+    "2020-02-16/rust-nightly-x86_64-apple-darwin.tar.xz": "4e9bd6e7bb4fc04b5681f41e2b663d2683861a8a958a4a9d46fb5963c3488fb6",
+    "2020-02-16/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "735f5f2762ff94b04e70209e46a57202a13a65a8b12a403b620f0896c4fedaa2",
+    "2020-02-16/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "c5d41b1b76c93de566cca6e6048db7248260dff28fce22d91f9a360c47043a42",
+    "2020-02-16/rust-nightly-x86_64-unknown-freebsd.tar.gz": "69dfcc2b029da84f68c5d543af8262a4735be574a29035d34e452932fcd66643",
+    "2020-02-16/rust-nightly-x86_64-unknown-freebsd.tar.xz": "3d3bf04d8fa3e27fdf38ab413bbf422d110646dafbcaedfef866eeb341048860",
+    "2020-02-16/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "b4f6ce68cc5fde78dc7ab06db6a6f30abde85ba6e5360ea3f75fb8c80232ad38",
+    "2020-02-16/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "e0a33e184257223b9f71c03aeaf14215f98722b8d220ac6bd5d745f7a9ae786b",
+    "2020-02-16/rust-nightly-x86_64-unknown-linux-musl.tar.gz": "0e6b37f73853ac4cde22e883abf4251fc8af2c83565a949159c6c0c41177e8cd",
+    "2020-02-16/rust-nightly-x86_64-unknown-linux-musl.tar.xz": "2c5ee4e061adf5b10899adebbaef109c1937907e47e440393fb30fcc18b77262",
+    "2020-02-16/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "ef3c2edd450ef3ef214a5cc412de4527631f9324a28168997233a9ebea6f08c9",
+    "2020-02-16/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "9449da76e8bf54f7d6e4155cfd5b9eab382ba438e97d1ef13ee1a7e09401309e",
+    "2020-02-16/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "e1093f086fe07fb3bfb9e9a4c5298fa6eb505b9775f7667322de019b18296de8",
+    "2020-02-16/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "edc4af68bd7ff54f392089a19f5c0d55c5145b6cb3c555a6b44df2b4cd71619a",
+    "2020-02-16/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "dcc9ce64c62e2100b35194b6a9ed3d9a7572e1bbf28ca09da687af82ff1dbfc9",
+    "2020-02-16/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "283cde11c274d39240a75e6fe9011bc1eb4512e36d80a7f1c8adfd5cefee4613",
+    "2020-02-16/rust-std-nightly-wasm32-wasi.tar.gz": "6e3c13f44ea6e997b5fb0a3818ee8cb850c9654857a438f6e8df42a6e1decf75",
+    "2020-02-16/rust-std-nightly-wasm32-wasi.tar.xz": "a6ddd9be1a5dc1a3e18a2f0b858b202ed1c4a23311ffbd826f66c668afdf9fe9",
+    "2020-02-16/rust-std-nightly-x86_64-apple-darwin.tar.gz": "d391be4bdb713356fb34cdc03475a830e6bd4476639c46ef19a8a4c05513bc4a",
+    "2020-02-16/rust-std-nightly-x86_64-apple-darwin.tar.xz": "93f70a4ac30bd15970478e735712e83b030288b8a8caa5a8bb4a0b9594fc82a1",
+    "2020-02-16/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "5881bc3954fe5c7a8080176aac4fae95bc079d020c9c68f9fc7d1064470c4493",
+    "2020-02-16/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "56fd2bfffbba897d6a1e74e3fc4924339db9f7a06386a9039e099b3933f5c35d",
+    "2020-02-16/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "6575eabdfaed4b0490cdfffcbb5860036dcc36bebdabc58d839c088ff5556a6f",
+    "2020-02-16/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "4beaa1676501300eac24e8890509c6c4e45117dbc26343c395d72efcd9d0ad09",
+    "2020-02-16/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "28a169e9b0f0986a50254caf14be863cf6f1ed3aec8342a7fa756dc1af76f38b",
+    "2020-02-16/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "c6a405f981bf5036c29d21d7b7fb037ed9757f32294419f84152f71edc2da8d5",
+    "2020-02-16/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "fbcba5f59fc47157208a28786a9cafd4046359fc821c568afe798721f5bb4f68",
+    "2020-02-16/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "65f3d1589fdcc0acaf2cb14793b8766c8d0c4b936567de51bf589abca9ef531a",
+    "2020-02-16/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "e9cf265820f69331abc9a7c4da0c26febffd4017cf4e6d0840d4ed22b3dd332b",
+    "2020-02-16/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "66cf7ac5cd7186a3385fa96a4e973ee85ec4e6ae0718f0e8815ba96720cd1558",
+    "2020-02-16/rustc-nightly-x86_64-apple-darwin.tar.gz": "db0338b3e1934147dce0bf6420d9c147caa6aef2db1aca44ca8fef47b7247615",
+    "2020-02-16/rustc-nightly-x86_64-apple-darwin.tar.xz": "f302dda56390b399021c2505ab5aa1397d0103ec4802e30eaf9012f957ba609f",
+    "2020-02-16/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "d51440d4004e49670c5cf803f96aa222c68f09348bfca46f6e0d4c8728908065",
+    "2020-02-16/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "ce69f142787866173c7645f3f8fdf342e402381c46b3c365081a9218fb8de3b6",
+    "2020-02-16/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "c76fa125e6d17b16a96b01a875d826f20849b09970b49ed1183601a0e7803f6f",
+    "2020-02-16/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "3bf24e91c7479684bb9b067f51e868386f114951d7166066d3f7590e8133c26e",
+    "2020-02-16/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "456af585ad4408ab5f0c7500264ebb4a5f6338c0aed642edb81224ec6146b546",
+    "2020-02-16/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "a87d7f154ce039365d0111f8cf1fec53263fc998fc088158eac525ae7d8eee38",
+    "2020-02-16/rustc-nightly-x86_64-unknown-linux-musl.tar.gz": "a98a07ecd9d291e3788d7e2d0dce82adb3777570afdfbe5707d05360d058fdb7",
+    "2020-02-16/rustc-nightly-x86_64-unknown-linux-musl.tar.xz": "07073b5adcfc9db37d3abee185b1871a22069089b460e23617f407e22895e44a",
+    "2020-02-16/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "76b5fb48db5de274950f86a9b1cb69738311d2302da3e079ec772302aacfd999",
+    "2020-02-16/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "31f740c5bbb871f9e8eb44831bee3f7295692f729295783377461914606772ad",
+    "2020-02-16/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "77b467fec83ea6d8f2b4e4e186806d77ae7ecfab1de618f4a7d857aaa7f6823f",
+    "2020-02-16/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "4fd183c819d408206c9da8ef94467eb886cfaf5afe4c1c37ba8f899eb0b31e54",
+    "2020-02-16/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "eee4d08ac820d85491a9f13909f178dbdcc54edc5d98d2e433a073c6b1aa611a",
+    "2020-02-16/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "9a608b7032c751f3b2956d0d0db94b65be2874969406403c68c24fff3fdd7749",
+    "2020-02-16/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "a47062919f16888d2baa58a640299a5a9ece3f0d6537dea6e6241ac0d8877e7c",
+    "2020-02-16/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "ea5c5aad8d20bbadbeab71ab3244ecd5fa6000f0bf2077d40c416f2f5db41b60",
+    "2020-02-16/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "65513b8ca698f6859af19be665bead97271e7dbac3bc6058256ede1d7340aea5",
+    "2020-02-16/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "e7cbdb2eca6f3c0d40fafd2b2eac5bb1fd86ba0e8926cbe07499e592c8cdcb05",
+    "2020-02-16/rustfmt-nightly-x86_64-unknown-linux-musl.tar.gz": "ac3275329a7f08749f8bbd08a9c183e24ad0a58c02e7cf70e81c41030a886900",
+    "2020-02-16/rustfmt-nightly-x86_64-unknown-linux-musl.tar.xz": "6fb5395774c2d8f8a15192e86ebcea0ac847a8ef7d9c9a97f12a8e2cac5737f3",
+    "2020-11-10/cargo-nightly-aarch64-apple-darwin.tar.gz": "cb4578ec077cfc56c3b23c59d4bf219aa05f0dbe5b431792d0860ed121e3619f",
+    "2020-11-10/cargo-nightly-aarch64-apple-darwin.tar.xz": "eebff7ed3267e21be5dea8acc625b50343ddb94b81b2e4413a2fbaf553a729d5",
+    "2020-11-10/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "de75beda2e7c9501c88874e9769101204f1726eb7b26b79c4d8c162f4b2b7eec",
+    "2020-11-10/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "60122a10a0b45b55fda0bf82fd4d94e031babbf49e339b2ab86bcc65d7c8b7c3",
+    "2020-11-10/cargo-nightly-aarch64-unknown-linux-musl.tar.gz": "0292763ac22b539d4d17d7696fa649dccb8ba0f90c86f8ffeaac961add976c39",
+    "2020-11-10/cargo-nightly-aarch64-unknown-linux-musl.tar.xz": "ae5a4c8eb966cf8a8383911aa8df4149d120507c8cb1c7fe76afee11ee2b78ad",
+    "2020-11-10/cargo-nightly-x86_64-apple-darwin.tar.gz": "ad4add153d93e7db296560da01fe92c8c975d444e33bab4869ed10cdf2023e48",
+    "2020-11-10/cargo-nightly-x86_64-apple-darwin.tar.xz": "7d7650b2e445ecbaba99eda1879273922d96c8ed4de52be4864f5210c2bfdbb7",
+    "2020-11-10/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "ab5bd83e8fdb079f20c1f3623d334972d831bb5a339c8450f82a1034124ff72f",
+    "2020-11-10/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "ccf8c6cfd56aa0893f959336e496f3f0adcc10cfe5ccce977b5b32b748d45d87",
+    "2020-11-10/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "72ab8898aea8bf1f030da12ea3b4d1dbc18e5f7c2df28282fe915390f12d7939",
+    "2020-11-10/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "e02a3d736c0ec9bb97a70eab8a3f77cb7282a0e98317a42ca1752dd6ee280449",
+    "2020-11-10/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "82b6b0c0f20d4d23b769d79b6122cb7a074d9f222325b07503eddd73817452b5",
+    "2020-11-10/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "d94a47dfc9dc38090d4817e8ccc4ff49905f57877223eab01157b623ec2931ae",
+    "2020-11-10/cargo-nightly-x86_64-unknown-linux-musl.tar.gz": "bae2a597c7c2ad907d49c6420bf85f91ea754cfb771d39d8b734c8d30563352d",
+    "2020-11-10/cargo-nightly-x86_64-unknown-linux-musl.tar.xz": "2dad054524854d159010a3dca47757a72cbbdf7af68ba33310641552c9691cc8",
+    "2020-11-10/clippy-nightly-aarch64-apple-darwin.tar.gz": "c874202231fc418dc3fea539440d413c82d354957b25fb355e8afb01b8624d9a",
+    "2020-11-10/clippy-nightly-aarch64-apple-darwin.tar.xz": "0b241eb0ca079915ccd8a31beee8f95b92088da4376993717092cccc8b4e32e2",
+    "2020-11-10/clippy-nightly-aarch64-unknown-linux-gnu.tar.gz": "f2730540761a100dcec0c36773411f69e74dc1ca96c67bc0ac61e6567f84a422",
+    "2020-11-10/clippy-nightly-aarch64-unknown-linux-gnu.tar.xz": "a232cc5cf69583d7705f6a889d7db36551343005ff5096560aafd91a57f4befb",
+    "2020-11-10/clippy-nightly-aarch64-unknown-linux-musl.tar.gz": "be671660b1f8d347e69e7ae1e7d86f239b9d865245f97b790cd89738363f79b8",
+    "2020-11-10/clippy-nightly-aarch64-unknown-linux-musl.tar.xz": "2d92c001edb6817fc26a33172d25e4378369759d64e34489e2c51f04acc44f76",
+    "2020-11-10/clippy-nightly-x86_64-apple-darwin.tar.gz": "5ddbc1e21dbad3af73d8d0618439ec48b0432b392989f86b9e81d952badb4d16",
+    "2020-11-10/clippy-nightly-x86_64-apple-darwin.tar.xz": "366a98aa25dab0860a8bffe609d1f22f21b8b94c8056c852e182bdb78abdbcb9",
+    "2020-11-10/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "03232d753f7b5d5f384352bd4da99aa19d476e9d90fdb4975fed49f0fb4f1ba0",
+    "2020-11-10/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "f6309f55b1d16366d2eea64e9e79ac8606dbc5732fa96bc4dcd5ff6df26533ed",
+    "2020-11-10/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "ba070cc03d05d50c00c106742fbd376ee770c0b81cdbdde549caba1535f290b5",
+    "2020-11-10/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "9922fffa586fd06889000b7601a4a2499d32f3a5aa293d862374a32946262c15",
+    "2020-11-10/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "02e23757d51c8fcedcedf02ca336a36bd13b45bdad5abb0931c9028e7228b406",
+    "2020-11-10/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "90965a6a35acebfe9128af15ebbe71a6b872d31a6830819ff83682090eaef36c",
+    "2020-11-10/clippy-nightly-x86_64-unknown-linux-musl.tar.gz": "862dd065e8933b83c17902aaee3f20a48ff67e034f6b7c7ec05ea49e240d0ad3",
+    "2020-11-10/clippy-nightly-x86_64-unknown-linux-musl.tar.xz": "9124a64e61f2a849b631a0625dd1e5e17ecbf4bfbd70c57428007a238c30511d",
+    "2020-11-10/llvm-tools-nightly-aarch64-apple-darwin.tar.gz": "e2b1803548aeedb1e6b51724c9cbab123626fc88846eae53adf0a1c55d4a364e",
+    "2020-11-10/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "f321e31ebd3aa8d05d7e61bb22fccac852b393f449dd5eae6a0d81999e16e5d2",
+    "2020-11-10/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "442255a2859c2e3345c8ceea7a28359fb02d42460ecf51d92395c1dd85c9a8af",
+    "2020-11-10/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "514df13976577afdc162a28e12ce82ef40927644d1e93345150688f0d198a3dc",
+    "2020-11-10/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.gz": "85de8206f0ea17b51bf1ff3154d9afd6855c54e6b33babea22ec512cf837c283",
+    "2020-11-10/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.xz": "6f48deb6c7cc51e4b3dae49981d57d131c7775e20c50e4bec13ac5d9646f0d5b",
+    "2020-11-10/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "9ae35e98f8f930257bb103ae1cffda42476338838f490a62ba9d93638ce122ec",
+    "2020-11-10/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "3f2c9aff147cb093bd09048d38d74e375dbee2b2b4ab877d0f59d6c8fcb7f8f3",
+    "2020-11-10/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "4106227bf29d1dbaa35ddc12f8a2c2f16ef27fe21971f6f7ed0d4356691a4055",
+    "2020-11-10/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "e073fccb87efb4daa410e8d9fedb7045612970d05a595238bc414787f21cd807",
+    "2020-11-10/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "91dbd775c36f8b29bd688a1e75b10ab065928622985aee7e96848952ab6d85d9",
+    "2020-11-10/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "ae4e0b647fb8fda82cc2a4079786c663a889d5bd6314e3dd4fc1d35808f20d6a",
+    "2020-11-10/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "532a0883b16bbaa70bb2e9ba6c769594db35b1aaacbfa9ef06631a91bfe8048a",
+    "2020-11-10/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "e5176b89ca93834972204d8079bea58a91180ef3c1333deadf7928f060d3ef36",
+    "2020-11-10/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.gz": "fc476f62ae3a917a634afaa3fba83ee756799de11b7bb0af38a9d85e75a1a66c",
+    "2020-11-10/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.xz": "0f9e40ddfd9767bd5ebea4af75b78cd8642810e83e6d186edebee74e839959a9",
+    "2020-11-10/rust-nightly-aarch64-apple-darwin.tar.gz": "bcb30524c7f4520bda573d31962ce5b058cd9b6d05db83431b182483071fb429",
+    "2020-11-10/rust-nightly-aarch64-apple-darwin.tar.xz": "980eac0288067d0b310eaf8c9885be267856a83e057d3b01e37eb1bac3183dff",
+    "2020-11-10/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "7d6453eaf2640a9979707e6ef92b8dcfed33bd7bf5a7696d8efdab05bed182d0",
+    "2020-11-10/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "495a6d215a6a8bb427646bd68469ac18ea96b1d5a7e8a9f89d34f739b278cb2b",
+    "2020-11-10/rust-nightly-aarch64-unknown-linux-musl.tar.gz": "b25c99b1b0f8aa36d17f86677b040bd73e2d2128938b0bfdf6cbcb1782783001",
+    "2020-11-10/rust-nightly-aarch64-unknown-linux-musl.tar.xz": "78054cae8383103f69fd10bdf767732fd54d447fdb206daa2c6a1f83465c8746",
+    "2020-11-10/rust-nightly-x86_64-apple-darwin.tar.gz": "106395f200ef0e6d08baad05d5da786dd17c612d25ba5d7c65a7031d52af9bd5",
+    "2020-11-10/rust-nightly-x86_64-apple-darwin.tar.xz": "ad36d6497bacbf1134bcd1bd89ae9070600511e717af4e8f6d82161e94ed9a37",
+    "2020-11-10/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "6a28970950157102e0ea6799da0235483cad141b2cf112718abcaa19ed81170e",
+    "2020-11-10/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "a35958da2fcb2523c34ca393a9596d5f861c02802ab24339d5ad2edf054ed931",
+    "2020-11-10/rust-nightly-x86_64-unknown-freebsd.tar.gz": "dce8b0971da6c265190d0c14cee3e4d82ad24ca224398ef3002a870f3db31fce",
+    "2020-11-10/rust-nightly-x86_64-unknown-freebsd.tar.xz": "6e6ae9b4f647ac559aa3adb4fb67b116a0e38f14b4e1a29ecf31e4338f804a82",
+    "2020-11-10/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "29696ffa840261dec1a27018054599a93f49facfa6813f7ad1a875cfb1fc6fd7",
+    "2020-11-10/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "95a53b52073fd45e3216d922409bbfe34803a05d1347b7da1a7bfbb11f4e5121",
+    "2020-11-10/rust-nightly-x86_64-unknown-linux-musl.tar.gz": "a9f599adc294cbbd73e56efbec0d14306cb2da15f39fe0584969ffca4b00b86a",
+    "2020-11-10/rust-nightly-x86_64-unknown-linux-musl.tar.xz": "869d939528de1d8aca1df278e81ffb64c475d8ac2e83c894df4640b82f63c745",
+    "2020-11-10/rust-std-nightly-aarch64-apple-darwin.tar.gz": "80e57cd44992e0a9a29bb0233a4c7301369c7f00e9a63f89e944c5fd75931d40",
+    "2020-11-10/rust-std-nightly-aarch64-apple-darwin.tar.xz": "0441a39b4843e82aa578ddabcf13e54b776e2ff156ac4f4549d19e3764640f33",
+    "2020-11-10/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "a4d0fa574f93e530f421651ec38f5374fdc8be20de717c435750bfcf0ae15f36",
+    "2020-11-10/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "c4acba861dafe976db8b86ebb8838f0daef606642e16cb3a3f1f004e5c7128e7",
+    "2020-11-10/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "b1921c71b00cc8c8b665275ba4becaef16e860b88d4fcd2c6cae31cc6f929d14",
+    "2020-11-10/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "d2e2cad8e16127751f2b11a907bc5b248a2b287985cd7fc9b108d0a8aefe1883",
+    "2020-11-10/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "636cb560095c23e12d629ea21dc85af954c2fcb2df57f25b40f11826d7547a46",
+    "2020-11-10/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "265f570baa4c0bf51a02b1afc692659550f38d570d9f4ab61d4225a450bc9d7d",
+    "2020-11-10/rust-std-nightly-wasm32-wasi.tar.gz": "baf705571736331dd5449e1473b590477e2a48ad0adc6a897516fb8f1a5780fd",
+    "2020-11-10/rust-std-nightly-wasm32-wasi.tar.xz": "50ce97882cbb5cdcbb204c0665466c44fb03b1b76f4e134b19286491c79cf956",
+    "2020-11-10/rust-std-nightly-x86_64-apple-darwin.tar.gz": "2b0d1758c20fea48e8afa5c9cc2844e9eb5c77376992f2af1e68261e1b0bd773",
+    "2020-11-10/rust-std-nightly-x86_64-apple-darwin.tar.xz": "2324c13ed9030d221bf43ec1b97c5b7a8123ee7fd5fadca72cdcf7c39d8ea7ee",
+    "2020-11-10/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "9e5f1089de87e9d54417038f7d5d30de5e604bf82f5be557361cd02b55abb018",
+    "2020-11-10/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "9d2ec299d0a1b9e123d547af4c80bcf099c6cda937b37d6614c4555582bfb2eb",
+    "2020-11-10/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "24a506f85e178be0799d12f9354c6129004068552c8f5321a519b033631b815d",
+    "2020-11-10/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "0ee648a878347b1df982ba3446ae71d07bbbdf3ee5b406f4caee981fe485f3cb",
+    "2020-11-10/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "367c14b7fbe98e264b0e4b5a9ddaf3f78ce3ce09bbef4c7be33a3f2abade9ad9",
+    "2020-11-10/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "fea442176c33a2b0c590467c94e43f777f634da632b38215c24ca6a68916f80f",
+    "2020-11-10/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "b2e929d3821b104796dbc0521228cef25ce6f55e3494dfc7c3a852b6404c4acc",
+    "2020-11-10/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "6842a292b3429b7c0aa998fdbe80c9937e0005fe0bb41ae5affe13810665f5f3",
+    "2020-11-10/rustc-nightly-aarch64-apple-darwin.tar.gz": "a461f2486013b5cec450c8f79230e83878689b803a38df7304adea27b025ef1b",
+    "2020-11-10/rustc-nightly-aarch64-apple-darwin.tar.xz": "423e820d392c1232ea4ad4b86c53a64ff9b7c6fb4eadb2bf49126f4971ac8170",
+    "2020-11-10/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "900170006c4c2d88cadc0d915d410588cb80150817e53aa7fca41a459a5ec500",
+    "2020-11-10/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "4e68e16a657832b62e529f19aba5cd21bb66e2b37d56b64e28e762a006e40f42",
+    "2020-11-10/rustc-nightly-aarch64-unknown-linux-musl.tar.gz": "bf8d81b551229263f52ecfdd561ba6698d7030832723e5c3721d5ada5d478e7a",
+    "2020-11-10/rustc-nightly-aarch64-unknown-linux-musl.tar.xz": "67823ecd7aee04025965e51262af5200211dd4840935901f75ef7b9f8a6466db",
+    "2020-11-10/rustc-nightly-x86_64-apple-darwin.tar.gz": "7a443dfb068bb7e3854dd6475564da33a57d3f225ce03ad8bc973e8900960b69",
+    "2020-11-10/rustc-nightly-x86_64-apple-darwin.tar.xz": "14a04111c9c1cc171340b601b5aa19bbadce917b3a2cc2429fb78963e00348ed",
+    "2020-11-10/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "e7b325e55d372aaf4be400273673711fe78271b655c0b710d62a972b8044b9ef",
+    "2020-11-10/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "9ed80a0b3992eb3877404ff22ffabdc568448da69607542a3aa946a615d5ca35",
+    "2020-11-10/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "3ef55f82aefad5eac4398977d34b1963feb05b1cd654005d385da26624cb2f7e",
+    "2020-11-10/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "6f7ba84d7452b4f6983ed41d99e3951e89c164e17e1a944b97cd04037454c458",
+    "2020-11-10/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "7498af27587f4ff235b0477199eec4128a65f54d4c05e4ddb9c632685ec526b4",
+    "2020-11-10/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "c6f587bdb58a87b920cf3578b3772be967f5f00a054e36eda4a3e614d82391f5",
+    "2020-11-10/rustc-nightly-x86_64-unknown-linux-musl.tar.gz": "ecb5626e23ea84e1b14fe064b6fb1afc145ec280356a6f197ec410c23756f217",
+    "2020-11-10/rustc-nightly-x86_64-unknown-linux-musl.tar.xz": "1e38c0733f43ce82541cf5e0dac989753489c5563b8bebff582b3ee8ef7edc59",
+    "2020-11-10/rustfmt-nightly-aarch64-apple-darwin.tar.gz": "e4e992764d26792ba901fe4c9590cbb7a72a8a71b524f54ae7b1312d2824bca4",
+    "2020-11-10/rustfmt-nightly-aarch64-apple-darwin.tar.xz": "cb34f784388dfdc55817583a320639a2a61a7892945cbb7fc8a042fab352c311",
+    "2020-11-10/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "7ec62c4aaa8a89f94e037c39907caaea942c9fb44e5dbadd65be7b9c8650c594",
+    "2020-11-10/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "08774f7fc9854dbf8bae282fffbe5b1a2902cf1b89fcae09a1d4fdb36e8c5ffc",
+    "2020-11-10/rustfmt-nightly-aarch64-unknown-linux-musl.tar.gz": "5324c21a1384ba88a2f2552386050b566a3c48673949218b65e26b6ecbe04c6a",
+    "2020-11-10/rustfmt-nightly-aarch64-unknown-linux-musl.tar.xz": "aa5ffb406e5ea755440d0b41ee4385710e3c252ac3a9d93a35374d0e6af4b0db",
+    "2020-11-10/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "c169fbd9b21ddff9e7558f8674755410d170aea6521cccadd06a14d1091870c3",
+    "2020-11-10/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "8f21ccf5a15e21eb4757cd464691920a8a2753b08872b30c1565110cdb293a42",
+    "2020-11-10/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "d3fa6a30d2be44c636478c0259337c6f449a55bd9f037cbe0600a18da143c2e5",
+    "2020-11-10/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "6acf5d609aa697dc72f36f1ae96abb7d6654d88f1d2d862c9e1cd1a7dec9df8c",
+    "2020-11-10/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "3681fa62a68c50d0de839dfe424e30ae72d8635e15267042191bb10195d265fb",
+    "2020-11-10/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "1974b868333ca4a4e3786d57ecc91f2a63a9c141323001a5649035c561c3b5b1",
+    "2020-11-10/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "75e17c1e4bcfa70669aefda8ba34a7e8d6e0f5d842096b98135f3447b37d3538",
+    "2020-11-10/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "1e4d24f965b563e836cd90bc0da1522887b6a293ef4d143e30883213cbb3fd86",
+    "2020-11-10/rustfmt-nightly-x86_64-unknown-linux-musl.tar.gz": "84bc7707f7ce989c1ed452817153c25fc7324d1795650787fde878ac862ecfda",
+    "2020-11-10/rustfmt-nightly-x86_64-unknown-linux-musl.tar.xz": "79e76b85c270ac805e2f252ec13e4376ef29dd80fa08bf3ada08eb17c23124a5",
+    "2020-12-30/cargo-beta-aarch64-apple-darwin.tar.gz": "6c0f23ddbb4e75155d1dfc24fd9103651eea565626f8b4c292ae09b17ef287f5",
+    "2020-12-30/cargo-beta-aarch64-apple-darwin.tar.xz": "d3cf562f39886436089c1a67b3fb3f3f30ec5b9cfb272ca91067143c870eb8ef",
+    "2020-12-30/cargo-beta-aarch64-unknown-linux-gnu.tar.gz": "ae0c5595646ae7a532b5f14720b67a82875b6d4bfdc6c8a2982d7c40e0d9f318",
+    "2020-12-30/cargo-beta-aarch64-unknown-linux-gnu.tar.xz": "0df196cd147e517ab3dcb673fed4dbc67add81048108cfeabee8bdf51ad2abce",
+    "2020-12-30/cargo-beta-aarch64-unknown-linux-musl.tar.gz": "e6d576a7690ec8f16c93899b3cf5daab1608c6e4bf18fdd8462a0a61180e13a9",
+    "2020-12-30/cargo-beta-aarch64-unknown-linux-musl.tar.xz": "b33957f5bf11c06657592e4c5a0957208c347bad7c7979bd6545b63684507f70",
+    "2020-12-30/cargo-beta-x86_64-apple-darwin.tar.gz": "07b59728f4ac5f95ff8fec3813e8ae1afa4d00105e490866373ba99ff25bc142",
+    "2020-12-30/cargo-beta-x86_64-apple-darwin.tar.xz": "cdaaa09367b04c4231b54c6c429129117335f7d91e1185cd57914dbf5c4152a2",
+    "2020-12-30/cargo-beta-x86_64-pc-windows-msvc.tar.gz": "cebcf3f6f2a502ac53be02cfc3522c9bb6ec4954ccf93cc12026028102706900",
+    "2020-12-30/cargo-beta-x86_64-pc-windows-msvc.tar.xz": "76981acf37e0400c6df515e0fc1ff6d759f8eb9caec44d2589614e6ad12d6085",
+    "2020-12-30/cargo-beta-x86_64-unknown-freebsd.tar.gz": "9975b922979a74c48b8461d2c67086565fa84b4f2be8857b5027d9f1db9e7cb1",
+    "2020-12-30/cargo-beta-x86_64-unknown-freebsd.tar.xz": "2e087d04a75bc55ccaa9fa6d2ff97aa79873c4bd2a718ef11ff14ebbc128749e",
+    "2020-12-30/cargo-beta-x86_64-unknown-linux-gnu.tar.gz": "cce34205c11ae5f6c1c2fe08aedf1448d0f7bd8e11d3a7e467c12e46595d5372",
+    "2020-12-30/cargo-beta-x86_64-unknown-linux-gnu.tar.xz": "50fa339626cb8f6b0e520284294dc09df6489d58cf6deb8dcc07cd5dc0072a7e",
+    "2020-12-30/cargo-beta-x86_64-unknown-linux-musl.tar.gz": "ba71eeb40ca9ccd8d8b356fad1b7d6cb7af4f982a00b5feffede345895104561",
+    "2020-12-30/cargo-beta-x86_64-unknown-linux-musl.tar.xz": "d08f36794ab99ef5b28eda908e138ff289ebbee91edc54ee554ee852bfdd7926",
+    "2020-12-30/cargo-nightly-aarch64-apple-darwin.tar.gz": "8ac787c50ad37ab398d504cb915987ca85d87372a224564935aa1203d4cb5477",
+    "2020-12-30/cargo-nightly-aarch64-apple-darwin.tar.xz": "a25dc5632581fe820aad5380b714cd133a6ce372b3e7961f14606c5c2b6e1e60",
+    "2020-12-30/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "81195f8efae71dd6f96bea9ba1881bb647d127a130570289d026ea55a43ce6e5",
+    "2020-12-30/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "781a56f379c25bc01ab7152433f872871cf3af1ac5c331a4430a1ececb6416e3",
+    "2020-12-30/cargo-nightly-aarch64-unknown-linux-musl.tar.gz": "220ef2d21821c6c358a1672d4895389e09b78d4ab7270453f48785b9974b1901",
+    "2020-12-30/cargo-nightly-aarch64-unknown-linux-musl.tar.xz": "f48fb4219eb2da18bc78e106143d3aa82e9af62b200f4b2ed9eeed8448095d54",
+    "2020-12-30/cargo-nightly-x86_64-apple-darwin.tar.gz": "28cfbe0214e99e311c58ae2fbcd23ccf9d31d97fcae106adf174f8e697416d4f",
+    "2020-12-30/cargo-nightly-x86_64-apple-darwin.tar.xz": "9bd63a967dcbdbbdf6bacf8431389ba27176d2ff98a840f8fc1bcb9921c6c4c0",
+    "2020-12-30/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "80678407f5b2bc1cd01b36fc06105b1035740b9002f728629f3555965d0a977f",
+    "2020-12-30/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "2d825fdbc9abb180cfa1849669189801e459ae82b15d8c588cc17d836e33aa6b",
+    "2020-12-30/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "812501b738c59027b61ef6ac2462f0be76d4a95b9c78a301ef6dd33b225ca5e8",
+    "2020-12-30/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "18745d39c94c05632b4bdf7d186763ff6b23f29cec645b2e7ff5a5c8b1f4f7ae",
+    "2020-12-30/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "3d16880431ec9a218808806d6b768c7e29cc9ee6298a4dfa796f0fd5bef9cac3",
+    "2020-12-30/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "670920e5b9aa15953168d8c1ba55529c07a3f7e7c3dcd3586fe3a0225a51121f",
+    "2020-12-30/cargo-nightly-x86_64-unknown-linux-musl.tar.gz": "c4798bc41dc9a65b23962b0250cff14c648fe6804d0b96df9f59460a0741e916",
+    "2020-12-30/cargo-nightly-x86_64-unknown-linux-musl.tar.xz": "d1f87f37efbf89e7bbd2657105cd2876d9f79525af50b3eee95e0d91d9bf0d36",
+    "2020-12-30/clippy-beta-aarch64-apple-darwin.tar.gz": "b3535c7e1c72d5380518ab2568762f38c9a359310664b63ed14c15b9ff4b4528",
+    "2020-12-30/clippy-beta-aarch64-apple-darwin.tar.xz": "67a7e2f52ecb01f8e5b8c77dc5f8b3f15debaf00d2a89cd4ae2dc13bfaa48217",
+    "2020-12-30/clippy-beta-aarch64-unknown-linux-gnu.tar.gz": "15330ccfd8462712546e34c07de4f921df74798204d1dcf325e1c2df9f741b00",
+    "2020-12-30/clippy-beta-aarch64-unknown-linux-gnu.tar.xz": "5913e49e47b88973939f24a8568b661bf338773ed5662bbd5829d394b58d1f66",
+    "2020-12-30/clippy-beta-aarch64-unknown-linux-musl.tar.gz": "61d7532e94d1837dda778e0140f42384696896ed7ff22a1922ace833a1cbf2c0",
+    "2020-12-30/clippy-beta-aarch64-unknown-linux-musl.tar.xz": "15045f2e4676c8daf901ed59e8d130806be3844a5a87d28262f3bca8a0d37a16",
+    "2020-12-30/clippy-beta-x86_64-apple-darwin.tar.gz": "70161007d54df7ee2cbd2f6fa115526f9a426c7f4dd9570c97577aafb33ff96b",
+    "2020-12-30/clippy-beta-x86_64-apple-darwin.tar.xz": "fe49f46edb80d956df160dcd2f890b859abe33e0a58f56816bb313c1ac13c05e",
+    "2020-12-30/clippy-beta-x86_64-pc-windows-msvc.tar.gz": "9eef81fc0e6dddd105b871dc13834c99deaefc022a06844b191a6ebf3c266b4b",
+    "2020-12-30/clippy-beta-x86_64-pc-windows-msvc.tar.xz": "edf2f8cff30b23a6246269e9c93c43b84565b003207776d8008fea8340804f07",
+    "2020-12-30/clippy-beta-x86_64-unknown-freebsd.tar.gz": "519b646b3e23c38337e1a50275413580e697dea680a8ef40feb0fb1331ca5da2",
+    "2020-12-30/clippy-beta-x86_64-unknown-freebsd.tar.xz": "392d5ade483dfa24eacbed70fe16bed15c3aef61b37df8e3001ac40266b6ce16",
+    "2020-12-30/clippy-beta-x86_64-unknown-linux-gnu.tar.gz": "73aab1813c75c7efc14d957cbef40bd951e1b195ea2f025cec1fdd100acd3203",
+    "2020-12-30/clippy-beta-x86_64-unknown-linux-gnu.tar.xz": "6e7f3fc574cb7505806cfc288eb76195f2abb04a7ef5b2df8a15da53b962eb38",
+    "2020-12-30/clippy-beta-x86_64-unknown-linux-musl.tar.gz": "fd65821d39cf177493abf58063b2a2592403cadf4d319ed72ba99ff06b0503ab",
+    "2020-12-30/clippy-beta-x86_64-unknown-linux-musl.tar.xz": "fbd25cacb075193a2cc6fe515e8fa066d75481e51a6ae13feb161435660835de",
+    "2020-12-30/clippy-nightly-aarch64-apple-darwin.tar.gz": "15d33adcf937fddd4b27a86b0153d418fd1cfe148e901c11f69a7b62f9025363",
+    "2020-12-30/clippy-nightly-aarch64-apple-darwin.tar.xz": "8dcf66e222d8b6aa9e8f42195ef87d7d9c1c90ac3f521c83f2fd875cab6fbfdb",
+    "2020-12-30/clippy-nightly-aarch64-unknown-linux-gnu.tar.gz": "09abbf8fa7d941ba4d815476b51ec96a3c138d4193971f1a765c7218da819e78",
+    "2020-12-30/clippy-nightly-aarch64-unknown-linux-gnu.tar.xz": "5f195f7e122d4f5b30733500be05875ec3df36fd7b7a706689b4c2b72b287f24",
+    "2020-12-30/clippy-nightly-aarch64-unknown-linux-musl.tar.gz": "e0e334fc4ffdce118cd2bcafea2cc49aef0bb9cf69e5775cee80c5950bc8f60a",
+    "2020-12-30/clippy-nightly-aarch64-unknown-linux-musl.tar.xz": "5f34a7c97f91d0fa3297ac694d5fd67a3792faf42b3b2fb3de414eb92fd08082",
+    "2020-12-30/clippy-nightly-x86_64-apple-darwin.tar.gz": "1c18a16194a89a18ee727c18d655d613e05c3c115f6acb35ab4d2aa03ed047d1",
+    "2020-12-30/clippy-nightly-x86_64-apple-darwin.tar.xz": "d8b5a639109c484f59bee2ab36e469b780f55263e3cf2ff3a551d62d48fb3cd0",
+    "2020-12-30/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "7a417a7e816a357ff09c711fda1c0f1c3b8dab10f81a9423e8e6ea63f1696030",
+    "2020-12-30/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "119874a4173971f5a59b8a5666efc746c01848c7066d8c3665e9a1df92a67b4b",
+    "2020-12-30/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "71d41007415ea347dd347b34468cb307e88578bc095455d7d88e174a8546ae22",
+    "2020-12-30/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "71289b123fdc39d66baaaf9471eca9f6f8227f5df986ed9b2068cc2fed5f1fd5",
+    "2020-12-30/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "6dcc3aca82ff7830b89506386bd212724b265913d553c32c83ac534c500b7cf4",
+    "2020-12-30/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "f7cae1a84824133b067f35bec92cb1daf5432138e2f4181fd8629a1ac4389067",
+    "2020-12-30/clippy-nightly-x86_64-unknown-linux-musl.tar.gz": "ec2108da23dfb5f1799a1f42c2c8d6a5d72a92321b4000935d5ab29fcb9e67e2",
+    "2020-12-30/clippy-nightly-x86_64-unknown-linux-musl.tar.xz": "df3782e3aac24b82894685f839a2b3e0f6e238762f9aa0a3b138d073dd7245b3",
+    "2020-12-30/llvm-tools-beta-aarch64-apple-darwin.tar.gz": "d6e3e50a19aa45863ba5e37f316bf928f6eca96c3fa749b9ba87cddb3608a659",
+    "2020-12-30/llvm-tools-beta-aarch64-apple-darwin.tar.xz": "08aa9320599dc4c9d1d310f95b2795a81e88c65aa134495f7848063065f7cd9a",
+    "2020-12-30/llvm-tools-beta-aarch64-unknown-linux-gnu.tar.gz": "e1f3d55116386fbecdcaacb879dc19a62a9c9bb0d06581a366a53e84a5bc4d8e",
+    "2020-12-30/llvm-tools-beta-aarch64-unknown-linux-gnu.tar.xz": "ff11938faf99afdb3f1dc9510ff7fbaefb70a6ce561afdd85cff390ecba810ad",
+    "2020-12-30/llvm-tools-beta-aarch64-unknown-linux-musl.tar.gz": "f0e7a5df202982f5ec91dd0d0bed875976906df8b64fe56702f452e7bda20654",
+    "2020-12-30/llvm-tools-beta-aarch64-unknown-linux-musl.tar.xz": "0016ab2594ac5df455f6b26596cfd721f15adb7f61b47bb65beac5075c2e9cc3",
+    "2020-12-30/llvm-tools-beta-x86_64-apple-darwin.tar.gz": "b5a1a1b3d2d316e8d66876736462b6c8b08951e7fbfa3568da19caeb976e9fa9",
+    "2020-12-30/llvm-tools-beta-x86_64-apple-darwin.tar.xz": "6d852a526c4a8d46b19c33cff0eb5145ed54474e5792c0c82ce2a7f3c96354de",
+    "2020-12-30/llvm-tools-beta-x86_64-pc-windows-msvc.tar.gz": "a10198ef08e9e58bb1a54ec23368d5df02c87b6618e16ab026afcc5c8f9cef6e",
+    "2020-12-30/llvm-tools-beta-x86_64-pc-windows-msvc.tar.xz": "ebd7b60a66a6172d09400d5ae7d7efe4fface2e7faf1578c7d2e62603de98421",
+    "2020-12-30/llvm-tools-beta-x86_64-unknown-freebsd.tar.gz": "79df94c33935de84d0cd0e985c333c2516551a9fab3c8fb7c5b93cf3b0d0e22e",
+    "2020-12-30/llvm-tools-beta-x86_64-unknown-freebsd.tar.xz": "1aa9b3ab779393b76a58bbdd4464b2ee3e801175f519d11942b74cb1639fda2c",
+    "2020-12-30/llvm-tools-beta-x86_64-unknown-linux-gnu.tar.gz": "6e4d8501fc7c5c69b4a5b532021a0e39e125b6fedc12b1afe4ba22d07e0b995e",
+    "2020-12-30/llvm-tools-beta-x86_64-unknown-linux-gnu.tar.xz": "90502c680eb959ddd5f20abaacd15e0032df881412fabc036f4a2d4478343b3c",
+    "2020-12-30/llvm-tools-beta-x86_64-unknown-linux-musl.tar.gz": "19b0382c59426db81004a4386530fa4e8981dfc2feb5bc8224ad1924e092755f",
+    "2020-12-30/llvm-tools-beta-x86_64-unknown-linux-musl.tar.xz": "bbaf7d95c48126c89330f87d4b2809486293102a6b661e1fc98b8eddd596072f",
+    "2020-12-30/llvm-tools-nightly-aarch64-apple-darwin.tar.gz": "8e2f796ace0270fd2fde8bffe4db90fa1b09947032ee705bd99a1628a1138b95",
+    "2020-12-30/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "35ae38e7b07ff235bec6302adab43afbc725e362726bb7bae414ec00fcd6bd2f",
+    "2020-12-30/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "3f59253b666c05faef7a3b9b1b761ac6ae4f83833996495936629f41fc4c6959",
+    "2020-12-30/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "58566116a5519664fe1bad18928bab2f08de9a2eb53a65ff5347e808cbaec288",
+    "2020-12-30/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.gz": "e6a109c5d3c90969f37d7f0fbd43346616ba8322dca9046a0ea7d522230f71a3",
+    "2020-12-30/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.xz": "812313388ec8a4bd294e38838a911c2ae4dfcfd60a14986caf54490361b963dd",
+    "2020-12-30/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "8aca7ddf73983bf2db4846721787547fed16c2ad4dc5c260f7f05f6b93cea8e7",
+    "2020-12-30/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "fbd720f53fc5baa98f1c3b85c39760ed4303eb0869a725f98b15d57deaf2373f",
+    "2020-12-30/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "f30202ade378ade7a1a4bf23381ae69525154ce009aa54b9d59d6507000bf301",
+    "2020-12-30/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "87a9daf1151e2d36eb3020ab06b5ab609530f03882b54a2b2c595e2dcf978288",
+    "2020-12-30/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "7f1837f6c8e26232cad456df8ce9104cbc6eea8a57e3290a8c72286c0e9fe803",
+    "2020-12-30/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "5b30749cf6147a2ae344fcdf7b978355cf8894220601a88e2a20bb73ecb43c54",
+    "2020-12-30/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "b1ee3b5cafd026432c74ab9eda4f797d1aa55d06a38438f84f29be528887e540",
+    "2020-12-30/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "6f07c061b369c9f9fe213f7712bfccaf4b43e851cbdc936d1cdb46a0c7084bd0",
+    "2020-12-30/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.gz": "7f97270394c389db0feedc163c134518e1ec2f28910db22ed4fc50a61c2a9d4b",
+    "2020-12-30/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.xz": "b31b74eb05dde9df738a9e42cb744a8633089414a17e3aac321190c14f0ef0c0",
+    "2020-12-30/rust-beta-aarch64-apple-darwin.tar.gz": "eb202137d6801bf50c3edc06b5bf16cd5215c66d24790a1168d22fb3a504adf9",
+    "2020-12-30/rust-beta-aarch64-apple-darwin.tar.xz": "614cbf96ea1404d37016e77477232c74905d80ef0338aaf998ba6473ff25cab7",
+    "2020-12-30/rust-beta-aarch64-unknown-linux-gnu.tar.gz": "c1d80d58cd0eb74f3db650285c808d18fb0a195fe7ad6461c38de098ff94fc77",
+    "2020-12-30/rust-beta-aarch64-unknown-linux-gnu.tar.xz": "69f6f3b9fdb02bba15843aa018bb9eca846915458785914427c3f5810835dd0f",
+    "2020-12-30/rust-beta-aarch64-unknown-linux-musl.tar.gz": "a7e852fa55fe8183d749196f72606c1541fb85de7bbd58a73df45454d5cb6e0c",
+    "2020-12-30/rust-beta-aarch64-unknown-linux-musl.tar.xz": "342d83c95ebd18b0474f950f09811209233d55b158c12d3ca5bc1b4bdb6d2149",
+    "2020-12-30/rust-beta-x86_64-apple-darwin.tar.gz": "ed1b3b8f5fe4e73ddef62a54ec41dada5fb2cd2519f5c5add06be6ea57c38d49",
+    "2020-12-30/rust-beta-x86_64-apple-darwin.tar.xz": "f3cd8c848869c90ceb1c8d7166e4aa25efbbf29f42392f5867ba46c8614370a7",
+    "2020-12-30/rust-beta-x86_64-pc-windows-msvc.tar.gz": "0192de1b6cb415683e231caf3817127230828e6256150cf0a0c8f393cec50650",
+    "2020-12-30/rust-beta-x86_64-pc-windows-msvc.tar.xz": "ca6cf89d6b6e488a83b30436e03d851a76e213cd9126cf1eaff04892e6a79387",
+    "2020-12-30/rust-beta-x86_64-unknown-freebsd.tar.gz": "23515e664a0a87bd217bbcdec8785f52485ad8f74c7ff84b6949c0a16f09be1b",
+    "2020-12-30/rust-beta-x86_64-unknown-freebsd.tar.xz": "9f9c64050742e8d140e769a30e21230cfdcd947d942320166a8d5cbaba20bbf1",
+    "2020-12-30/rust-beta-x86_64-unknown-linux-gnu.tar.gz": "5ebe5cdf55eb79dad2c34fc770c5a35a6be2ef2a72865db291932ca193467b6d",
+    "2020-12-30/rust-beta-x86_64-unknown-linux-gnu.tar.xz": "e1c7fe23790fe076f39e28d1158f47e0d7d25569fd9f796357b001f775be82f4",
+    "2020-12-30/rust-beta-x86_64-unknown-linux-musl.tar.gz": "f33120cbe25113f956c035b3c2ca532eaf810ab6d85c6df69fff0eb69e1547f5",
+    "2020-12-30/rust-beta-x86_64-unknown-linux-musl.tar.xz": "751921a5b8e9949123e20300200734d23363f08fa4863782be268ee22f0d73cc",
+    "2020-12-30/rust-nightly-aarch64-apple-darwin.tar.gz": "4cc5ef6dc2e7524da659e416b68b353f61576aeefccc33c0f2564699d5d0cf91",
+    "2020-12-30/rust-nightly-aarch64-apple-darwin.tar.xz": "168ec56fcfbd94dceb829816cf59b92b345d026e3bacd3168695a1fc014a56f6",
+    "2020-12-30/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "1539f5181c1993abb7a43b14dd1294d88453e48f8670c4574e0b5e98e6df28fe",
+    "2020-12-30/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "7d970f790187f651d01c45cd94ae67184609c625e26d382266de92efea659b40",
+    "2020-12-30/rust-nightly-aarch64-unknown-linux-musl.tar.gz": "7ef640112eb50bd77c7203d5fe56bcf3b2fba130e4acd5e707056686431a93a8",
+    "2020-12-30/rust-nightly-aarch64-unknown-linux-musl.tar.xz": "acd1ad1ae2dd768db3aaf6dabe265d04895166bfd6b123d7c7fa610d038a7599",
+    "2020-12-30/rust-nightly-x86_64-apple-darwin.tar.gz": "2b5b885694d0d1a9bdd0473d9e2df1f2c6eac88986e3135e6573e1d71e7824dc",
+    "2020-12-30/rust-nightly-x86_64-apple-darwin.tar.xz": "6a0442ea4b07dcf230a32ad398372ca6cab82152f3404a0a49b8d75e744626b8",
+    "2020-12-30/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "2c9086371cee98ce95cf10098cd655b2e33dd70e8e250759a1e8b0e8c42d659e",
+    "2020-12-30/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "dad1551f2cb12113424a82a6eb7cab1abaeabc4550a80bd5d918f7be6c3dc5a4",
+    "2020-12-30/rust-nightly-x86_64-unknown-freebsd.tar.gz": "79e5492d9a5f9f04ec5080be1fe305a3d7adde330f5c3fb9d7a3bae52720a027",
+    "2020-12-30/rust-nightly-x86_64-unknown-freebsd.tar.xz": "c53dc053e677f66aea4a00d2e826a9a607e300e8185259c56b6d72bdd040c781",
+    "2020-12-30/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "1a6b541f2d0ccda148a60d749e974cc545d9765b71d8dec59418b493f05209a2",
+    "2020-12-30/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "910e0be04862f41fe3f7a4c8dff2da8287029646d3fb25ce58caf38e22c285fe",
+    "2020-12-30/rust-nightly-x86_64-unknown-linux-musl.tar.gz": "fe9c7f0c0898b1f54d0a3492450580d2abb7682de74a9964e60eeabb7761a3b1",
+    "2020-12-30/rust-nightly-x86_64-unknown-linux-musl.tar.xz": "4ed386e2b01f3a672be3eb8aa1f8d1992d5a65a6347bbe5d3541d98b570344e4",
+    "2020-12-30/rust-std-beta-aarch64-apple-darwin.tar.gz": "0065919e445e3eaa8d70561b949697b8e3af9beea62989c9ffc60856d46a9da3",
+    "2020-12-30/rust-std-beta-aarch64-apple-darwin.tar.xz": "36a2d577855c6118ef646372c5ff31ce945a14048129fc388c88699cd0d88683",
+    "2020-12-30/rust-std-beta-aarch64-unknown-linux-gnu.tar.gz": "426bd1cc7a0e94af5decd643d08c54fe9aab29e638cd79aca21ccb05ec00eaf8",
+    "2020-12-30/rust-std-beta-aarch64-unknown-linux-gnu.tar.xz": "fac8fbb710ddfb2d7a4d43b4ec5cdc75aca7eda0269b3fe42c4ee2a3666edc20",
+    "2020-12-30/rust-std-beta-aarch64-unknown-linux-musl.tar.gz": "d9f779f46c182b37b185113f92e8a8a17ebf3b5ef4e11e137980fdf7139ab506",
+    "2020-12-30/rust-std-beta-aarch64-unknown-linux-musl.tar.xz": "924427304bf90d6b61aefa86418d9eaf16a3bc6097772c2873379fbd6603b41e",
+    "2020-12-30/rust-std-beta-wasm32-unknown-unknown.tar.gz": "3cf97eba1da6d14160e82de4c0302883fb2eb9c65151dd2a148c57cba430f5ec",
+    "2020-12-30/rust-std-beta-wasm32-unknown-unknown.tar.xz": "1e8392d05da4db07988fd1ba47f8abbd0ad120cbeaeeecf9a216f2db23ef0bd4",
+    "2020-12-30/rust-std-beta-wasm32-wasi.tar.gz": "e86f3f58cc04bf4c4f9d94ac11e7244510a35f89795298658de2153a7fa60f86",
+    "2020-12-30/rust-std-beta-wasm32-wasi.tar.xz": "8c5372f9249c9d6b24276c18f11e9ba4ed942b2f8a272624dd423230c9999a17",
+    "2020-12-30/rust-std-beta-x86_64-apple-darwin.tar.gz": "12f5a181b6102f75e85b71259283d852777940cf82d1681fb19005b589076a83",
+    "2020-12-30/rust-std-beta-x86_64-apple-darwin.tar.xz": "37efc372e40cdcaf55e1277c51e449e3463bdc6b0c7dcf8220c76233d0250b28",
+    "2020-12-30/rust-std-beta-x86_64-pc-windows-msvc.tar.gz": "a02da2dbd7f3d14e4a2083a497aa7aa884b99e6ea941059102278dd2325c5b61",
+    "2020-12-30/rust-std-beta-x86_64-pc-windows-msvc.tar.xz": "90ba8dd729d3b9966a30fbcfc851faddba1a602b7a480199dbb7fedbd9058a88",
+    "2020-12-30/rust-std-beta-x86_64-unknown-freebsd.tar.gz": "379f353e27b8218ed6bb54f1ef16314624705e9b28f5cd6047bc25259aeb0bf6",
+    "2020-12-30/rust-std-beta-x86_64-unknown-freebsd.tar.xz": "6bb842028d940676e68756c3391736e7b71da239fcdadc01f34042ad6a69463a",
+    "2020-12-30/rust-std-beta-x86_64-unknown-linux-gnu.tar.gz": "6929f00e1cb93b16bd2e3d76029b297f099818183ac2d7ff23eb532d4c31ebb6",
+    "2020-12-30/rust-std-beta-x86_64-unknown-linux-gnu.tar.xz": "a84ec15075f5d22c11369f0eac0e55d5c0bcd4e7f8a2e6686d20b7fc79681734",
+    "2020-12-30/rust-std-beta-x86_64-unknown-linux-musl.tar.gz": "789ccd43b76e3f7af1675d24780281191be48991a2b2a217acd306b534bce4b9",
+    "2020-12-30/rust-std-beta-x86_64-unknown-linux-musl.tar.xz": "a152c990bb6cee8c6de77f457edcd76db2616f5fb1c9e89074b48c0b338f2edb",
+    "2020-12-30/rust-std-nightly-aarch64-apple-darwin.tar.gz": "a01bcc6eb93b1883bc57739959d6f9e13fbb80e1867310272cdb1a1de496cf73",
+    "2020-12-30/rust-std-nightly-aarch64-apple-darwin.tar.xz": "d2d5a385c31ac792877269019e7690959822941dec2fda6728b99b766db70298",
+    "2020-12-30/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "3997bd9e5057851b9e49ebcba5886ca98bf736c062c122e677fcf40aa7ac5416",
+    "2020-12-30/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "c34db21ad2f1faf98490e4146ac542f52f6a8eb7ba301bff9f7adbb8477ceb3e",
+    "2020-12-30/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "628f5ef4fd2e8b8d7e429a431127cb65321a69fbb69ed07b27df6ac4c8850784",
+    "2020-12-30/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "535cfe62ed7491e008e5c08e2a5a1810fdb06be0989bf533f1214ac032b8fc04",
+    "2020-12-30/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "b1669be863b7f419254382e9e3820e9ef0d69c60fa45f91d0625140229725484",
+    "2020-12-30/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "b393bf6a4d0634b37a298d0df7a6844283320cb6ba104f64b16dd31c18e5f962",
+    "2020-12-30/rust-std-nightly-wasm32-wasi.tar.gz": "8f2b0a30cdf50d748e57d23d94d54a4e175e864296c8048c8454bb6198b16fb0",
+    "2020-12-30/rust-std-nightly-wasm32-wasi.tar.xz": "ab30d42b00ac47baa7b7791378a0cded339154c9275aeee6e69244c9dedf7eae",
+    "2020-12-30/rust-std-nightly-x86_64-apple-darwin.tar.gz": "17912a6a5aa56daeb0aed5fca8698bacc54950351d9f91989a524588e37e41ca",
+    "2020-12-30/rust-std-nightly-x86_64-apple-darwin.tar.xz": "ade2f312c0dc0526d50e5f7cd332b10c8ee6b31f6b60fbcbdc2b0b41baedba06",
+    "2020-12-30/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "4d2585cb12606f217150509971850330cc1b7f3e1a9c18ce03fd3b981021fa1f",
+    "2020-12-30/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "d21da30018b065a833c02ca06f7b1c5f01db02e0624d2a5dca78cf5875930d06",
+    "2020-12-30/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "ac517f0ccc4b30f3a296a25a8b17f75f877052cd56ae5c5a043d88c0f5de972b",
+    "2020-12-30/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "5d06bc96644f01863cf95acfcf369c5a0bdb91a4c7b7b67e2306b419418ac47e",
+    "2020-12-30/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "5b1bd5fa31b9190c66b3446629c155d4896cffc8fb1f9f603a2e949162b7f791",
+    "2020-12-30/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "51580acdef9186ad04068eadd4890ea788964705196a4db2e806413776568a00",
+    "2020-12-30/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "3802d2c7271cdd3fc35921b0d9f999b9b34ac9d888b62085b976453a8b113700",
+    "2020-12-30/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "178c2f559b78bfe496becad4b6d2c3ae60ddef1a582fece4f2e3212b246f20cc",
+    "2020-12-30/rustc-beta-aarch64-apple-darwin.tar.gz": "20107f4541be8822d428c402e010333f2f00aaf086d03b4e35ce8d1bd5c33d5a",
+    "2020-12-30/rustc-beta-aarch64-apple-darwin.tar.xz": "ce8fd903c567b0be9e573030eda5b25e6772e656cfa5c9c6e34050ee4af661de",
+    "2020-12-30/rustc-beta-aarch64-unknown-linux-gnu.tar.gz": "29e2808cadf8da481a0ace30bf107372dd108b0475706cbe2b9cdd4ff27e2315",
+    "2020-12-30/rustc-beta-aarch64-unknown-linux-gnu.tar.xz": "16253d17a0577996ff083db769ac8734f9ff52b2b250ecbfec2f11269df67fa6",
+    "2020-12-30/rustc-beta-aarch64-unknown-linux-musl.tar.gz": "035bd303601f588ebc23293e9c64050f7053eca1fb2f3266971bff71c4cc3a1e",
+    "2020-12-30/rustc-beta-aarch64-unknown-linux-musl.tar.xz": "98c12dac25af127000d67b4245d1f45bb00c96961e8e16ed30befe0bfef915d1",
+    "2020-12-30/rustc-beta-x86_64-apple-darwin.tar.gz": "d65df5791d79e13037672d22055ec24583195554cdf7c3c2992cbcafa497e98f",
+    "2020-12-30/rustc-beta-x86_64-apple-darwin.tar.xz": "aa0a275708d880698a842545f4d9836dcd1f7a8a71e45fe5d9933d64a9d0b094",
+    "2020-12-30/rustc-beta-x86_64-pc-windows-msvc.tar.gz": "7f934dd412207c0d776fb4e8ec4c5f4426e92b2a1854416a8ce7bbc2dc7f5908",
+    "2020-12-30/rustc-beta-x86_64-pc-windows-msvc.tar.xz": "0f396792ba0142b27bdef774226168ad5cf37e5ffc1e109065099bcb5cde8c77",
+    "2020-12-30/rustc-beta-x86_64-unknown-freebsd.tar.gz": "19818ab53bbd94c6d1723a52809bf1c3a271e258664ea2b3b7d00161965e058c",
+    "2020-12-30/rustc-beta-x86_64-unknown-freebsd.tar.xz": "1350d6ca6dfea5b87dec31fa980b26397f81c135c04b488766efc511845f74bd",
+    "2020-12-30/rustc-beta-x86_64-unknown-linux-gnu.tar.gz": "4f5ac3311c913b79dca1a02cf42fd7326c63d53ee252447b61f113c043a82b5f",
+    "2020-12-30/rustc-beta-x86_64-unknown-linux-gnu.tar.xz": "146c4451a2c90b5faa1f87ead68eb5c5cf57191bba20caff2795fefbfb39682e",
+    "2020-12-30/rustc-beta-x86_64-unknown-linux-musl.tar.gz": "d688cfe617d18c132a051afe42ac0c759638b1d2b0003fe7970becd1cf30c8be",
+    "2020-12-30/rustc-beta-x86_64-unknown-linux-musl.tar.xz": "97db6477f995c8e34bb8779c8e72d573c1452182f6c3df4a243bab0a593ee5a0",
+    "2020-12-30/rustc-nightly-aarch64-apple-darwin.tar.gz": "4610961ab77e1bb54bda95474b1c1f25f1fc5c1c103bc4f54758e5b2a5454d8b",
+    "2020-12-30/rustc-nightly-aarch64-apple-darwin.tar.xz": "dbd08d51af84b8ec15a7387196d96984df3a742ff55777674db08912946b9d58",
+    "2020-12-30/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "c9997c01769a6371200e20639fcae99e6dec3d9062f65b2928429e04d4cb7930",
+    "2020-12-30/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "e146070df907e8ce7411bf731fe82fc780053a0a6e89b6326a85e814523cfd69",
+    "2020-12-30/rustc-nightly-aarch64-unknown-linux-musl.tar.gz": "28a24668966faf46f0a79034446e54e2b86e4968e1a3a9381dbf5d9e916d8d9d",
+    "2020-12-30/rustc-nightly-aarch64-unknown-linux-musl.tar.xz": "ebd206c00dd21d69455779be03283c90a508af08a3ae4f2b97188c69329ff99e",
+    "2020-12-30/rustc-nightly-x86_64-apple-darwin.tar.gz": "cf2f06d6c8d784a469561f6323b8b923fb6ad3a7c55c7ac90d5619b9d443ae9f",
+    "2020-12-30/rustc-nightly-x86_64-apple-darwin.tar.xz": "0cf080bca9975b9d4adf603b8309f8b426e270332a302f7af5d2c3cf52dbb73f",
+    "2020-12-30/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "8df3729f3b09cb39fc4b0ecfd90551625941d508f7e776ae4e16fcf02b0af4f3",
+    "2020-12-30/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "fb0eaf0f81e832988bb9087db8110d66ff3a6250a07d20a802bbf864d08396cb",
+    "2020-12-30/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "f3818645265c3a08cb9fa04d1c2d42be72116974c9c34515feb7d5788e86ac41",
+    "2020-12-30/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "05449e1fee74c445be3c7dac2419f5647614a5bb6d91998156e590f3b3f19a84",
+    "2020-12-30/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "79fc8d51bb6d298d292045eb77e1b2d0f7f97886604599a3e9dfc0c6956e49d7",
+    "2020-12-30/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "e4247903600f291fbca34c8319bf7ca91c28fc51438b5d656d697a2a0d7ee06b",
+    "2020-12-30/rustc-nightly-x86_64-unknown-linux-musl.tar.gz": "2627e995ff9d7e72ec46d9161d3b8f78d264671c507f10337f9ec714171dba5a",
+    "2020-12-30/rustc-nightly-x86_64-unknown-linux-musl.tar.xz": "996acbdc1cbd5975b70a49ff34bbb3b28b88ccf1b7d4f5e99fb6d23d557ef228",
+    "2020-12-30/rustfmt-beta-aarch64-apple-darwin.tar.gz": "75c957da65d459a02f29affd8fac867e14eb8eec98531fd2216ebcb54a5b6407",
+    "2020-12-30/rustfmt-beta-aarch64-apple-darwin.tar.xz": "7bc5e10ba9cf388ba6a3153d07d806e144f807ddacdd0f5d3aed1c5f9fd804d1",
+    "2020-12-30/rustfmt-beta-aarch64-unknown-linux-gnu.tar.gz": "b34fd3a8e80969df9ba71ef5b80f143b4e8f325a91d98b00db1ea86879074b22",
+    "2020-12-30/rustfmt-beta-aarch64-unknown-linux-gnu.tar.xz": "e0265cc1aafed74d50024914e0bc4b6952bf9dcdc35a57fa9adb2b7dc0a6b1c3",
+    "2020-12-30/rustfmt-beta-aarch64-unknown-linux-musl.tar.gz": "10353a1a4c052509277625702e6f36a3561772760671728b406cd0d5c1f46e1a",
+    "2020-12-30/rustfmt-beta-aarch64-unknown-linux-musl.tar.xz": "d3d8cf68216f341ff0f14302d17a57d2ab1b54f4f73d2666aa6017008f184ae8",
+    "2020-12-30/rustfmt-beta-x86_64-apple-darwin.tar.gz": "bfe5ef2349a226fe54d87658f55dad90b99ee6e36de4f5d1e381b1ca453e1919",
+    "2020-12-30/rustfmt-beta-x86_64-apple-darwin.tar.xz": "2022217d3f94cefbf3081e1fafaccd78d85f99ba6e384e9c7a179bc40c6088e9",
+    "2020-12-30/rustfmt-beta-x86_64-pc-windows-msvc.tar.gz": "ebac84095df62d8ed6b41454c07f043477479a1770cf156a5c9f351bebcbe6a4",
+    "2020-12-30/rustfmt-beta-x86_64-pc-windows-msvc.tar.xz": "f3fd225b3c34be7e4faa3c7856f0f63a10d3bee775be8fc343d5f7e95ad7153c",
+    "2020-12-30/rustfmt-beta-x86_64-unknown-freebsd.tar.gz": "bfe8a34403fb19d88eb2b4528b3836a645239d239bf56cc9b916aefebd0199a1",
+    "2020-12-30/rustfmt-beta-x86_64-unknown-freebsd.tar.xz": "0b693f075167d6bf0d9eea7a626611abc3f61ebf340d84b2f9cfb62bfc29a4f9",
+    "2020-12-30/rustfmt-beta-x86_64-unknown-linux-gnu.tar.gz": "78ac7e3178068c6828765c295698cb79375266cec95b097c4603f8582bd24379",
+    "2020-12-30/rustfmt-beta-x86_64-unknown-linux-gnu.tar.xz": "dcd8dd0cf7c75b633729aafe4f975ee216616d7694dd28c2599e61874c3a53f9",
+    "2020-12-30/rustfmt-beta-x86_64-unknown-linux-musl.tar.gz": "6d8f4685cc8bcee32c7e5e3b7524444d90c88486f81905e109fbe5cc47f99fc1",
+    "2020-12-30/rustfmt-beta-x86_64-unknown-linux-musl.tar.xz": "e4c60907d1d1c94626433cf95282ca5868b5bdcae93e57aa2b5a66afb0b1f789",
+    "2020-12-30/rustfmt-nightly-aarch64-apple-darwin.tar.gz": "0c3cfa89787cc9fcdee39acc0b5c5cf3ef084d85fb0e2716926813852fb96a3f",
+    "2020-12-30/rustfmt-nightly-aarch64-apple-darwin.tar.xz": "d4c19e1b69ec129cd3bcd51d48ec87d592f4a0dbb46aabd2be18321ed435f44c",
+    "2020-12-30/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "5fb27d5f31411c242a8046de087b3dbd73e5829d7e07493858034139681c30c7",
+    "2020-12-30/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "6b66414c1b985efe043c205c0b61ed31dae8f719da44eb36ce3019e4312a54c6",
+    "2020-12-30/rustfmt-nightly-aarch64-unknown-linux-musl.tar.gz": "19f6b831df8996666d9277396650909b06396fca3b37eeffbe0c763472cb076c",
+    "2020-12-30/rustfmt-nightly-aarch64-unknown-linux-musl.tar.xz": "8e7aa0b434fdb6db7e90a0181e8aac274d56825f2d9e3715c85607429d8ccde4",
+    "2020-12-30/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "c7da578f3b70dbfa0ae1f06370c7c9f22a49127fed8a99b69dc9ac6e42491bb0",
+    "2020-12-30/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "271b4b360c58cb64ed37d4e42a0f324d27571fb8527a083eb799e139888c1ab7",
+    "2020-12-30/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "ebae20dd198a36b657aa0486e6b557aba60c9b4fbff25c108246de312fd2963f",
+    "2020-12-30/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "9d82799c981f7f3025ae9f481243e57e5830ccd01444b62815af1ea02c804d59",
+    "2020-12-30/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "2e0f2e4adcc234d29859aa38088a02be2b2bb0a7e43863bca6d436a6712b8b3b",
+    "2020-12-30/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "7579e233e4073ba4ef71e2122b3cc1d6f9f46569b3b93509b94e0c0485024f72",
+    "2020-12-30/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "0fb77ae8a33fb83ea496654a52e55ab5245206322f09c1d396e0c5833a16b856",
+    "2020-12-30/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "a1986dcf76763b04f546a28601f49a179e15e1eab056904f7cc08d93e8c7bfd1",
+    "2020-12-30/rustfmt-nightly-x86_64-unknown-linux-musl.tar.gz": "a93e4b51ca3e87661edb62d8ceedf20446e7cb2fa700ab9f8cf765db6e5f9407",
+    "2020-12-30/rustfmt-nightly-x86_64-unknown-linux-musl.tar.xz": "d8de00be6e6c7569b62b8feb70a523726d43d61e9c3dcc76abf4ff3c541d6938",
+    "2021-06-16/cargo-nightly-aarch64-apple-darwin.tar.gz": "eaf4540191cbb0627b2f6bb4cb9fe94351bb7601d07cd2795b3f1386d32dca76",
+    "2021-06-16/cargo-nightly-aarch64-apple-darwin.tar.xz": "7785d6bb6c8c084a118a095efe222371ef84902c298a762d7ab3096d2637b869",
+    "2021-06-16/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "a46dd7f7d4532df2944056efab6b0f510224497be0993699ee59188b03b462a4",
+    "2021-06-16/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "24b02f790067a19a264fb500b7143354b695c63700eb7bab263bbe9e864dce89",
+    "2021-06-16/cargo-nightly-aarch64-unknown-linux-musl.tar.gz": "11213aac3d92a05799892e94bcf632ea35418eb600bcf7ea71f9c8216c2cdb3b",
+    "2021-06-16/cargo-nightly-aarch64-unknown-linux-musl.tar.xz": "70f1ecd1fb88d08e39238a9765980bce2311d11dc95593e9869dc1f3e2e846ed",
+    "2021-06-16/cargo-nightly-x86_64-apple-darwin.tar.gz": "09b55140b655ade515b4890c966e2f8b23e68d96a2deb557c23d520315dc72cb",
+    "2021-06-16/cargo-nightly-x86_64-apple-darwin.tar.xz": "89bd47747559ac02e9ff1c6bd94ae64d3ee8b44cdc0ea3851ce0462518a278e0",
+    "2021-06-16/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "6180250887125396cb2dfae079bbe9a4e71e8432034f7d20428193cbbe4ccb4e",
+    "2021-06-16/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "fee2a72b77b331580f98ec4b0f0a68a9e525a4e53deb545efab6444cce347c5d",
+    "2021-06-16/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "8d54457bb1d21dfe85889fa29c3fa8dc40d0a9a54b47ac853aaa2136efec8fca",
+    "2021-06-16/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "57c3d844c877f1783aa444a09f0032da9493f79d1bae6730734300396a8e8581",
+    "2021-06-16/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "4566ecb0c1b3131f44a14b1851702e6a6bdd06f80fbf0d5d768770a97b10cb3f",
+    "2021-06-16/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "8b95214c04567b26bb572c4d4e5c3ea1841dd4384c4a1d187b321504c274e650",
+    "2021-06-16/cargo-nightly-x86_64-unknown-linux-musl.tar.gz": "9b491cb6472197db1f435e30c7b133f4da12e602d77e8ab82859c3181b214b90",
+    "2021-06-16/cargo-nightly-x86_64-unknown-linux-musl.tar.xz": "71686da1a6e61b6cc95444f543a4d69a66fb9ff76e554f83c09e88252de3a833",
+    "2021-06-16/clippy-nightly-aarch64-apple-darwin.tar.gz": "4241a05e0a53c9385f83956241131c7c7ee4b75b5ce403f992dbd3512c8996e7",
+    "2021-06-16/clippy-nightly-aarch64-apple-darwin.tar.xz": "f5e284efe33957fe3ecad4eedfda3787803bfc22a8e75013ae91cfc84e18f073",
+    "2021-06-16/clippy-nightly-aarch64-unknown-linux-gnu.tar.gz": "c942124cf5d48716e0cc85c8c328e6261b8903b4d86254233367de74036258a2",
+    "2021-06-16/clippy-nightly-aarch64-unknown-linux-gnu.tar.xz": "9302f53ccbcf333f15bc6d82c29613c7173a28d04ff9f79abaa36f9b32434cd7",
+    "2021-06-16/clippy-nightly-aarch64-unknown-linux-musl.tar.gz": "87a5ccb283f5cc5a35271d0de17491e37c1694ab6b3015291a37c1b18cac3f49",
+    "2021-06-16/clippy-nightly-aarch64-unknown-linux-musl.tar.xz": "9fad7583fede9a8ac7a823fd6af238b5b2e11676f6181a3df89d4c76e9e0b373",
+    "2021-06-16/clippy-nightly-x86_64-apple-darwin.tar.gz": "fe4b7a3f596a118682d9b8fb58ddb1f9b222e679dfd8ad5072050aacc30280d0",
+    "2021-06-16/clippy-nightly-x86_64-apple-darwin.tar.xz": "78fe36b9d768b3a9433e3654f1436eda10ee8909341114c9f7cdd8d7c8e2efa7",
+    "2021-06-16/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "1605953eb558f6feccd13e13dba581c4336129f9714464148c0958b22cb12521",
+    "2021-06-16/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "a5eaab6aee710a0d6214a36df7869b095bbc2356cfe894574bc363d822c18719",
+    "2021-06-16/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "2248da8e036e410c124bc24564bb99679f05beff2ab1a6f866cdd111f43ca65e",
+    "2021-06-16/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "6aa4e352b3128c4ed39a96ff7b6069ea0cdec0de4d66597a174d0dda53fa7c6c",
+    "2021-06-16/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "3308e33e1ccbac22d03a279bb5112d5e089b482b096456e1cee550df651e558b",
+    "2021-06-16/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "fc7724dad1892dce7ae1dbd566752d2743d91c6d3377044e8a7dc1c6d5825b97",
+    "2021-06-16/clippy-nightly-x86_64-unknown-linux-musl.tar.gz": "928916f1e52107d92e40732bc8dc3162be1a445974249d5cc1be8c4be5f83dc1",
+    "2021-06-16/clippy-nightly-x86_64-unknown-linux-musl.tar.xz": "dacfada0651d3e600cf84dee0541069ad316364d0d27ef49ab619216f769ae72",
+    "2021-06-16/llvm-tools-nightly-aarch64-apple-darwin.tar.gz": "9ec6f8a300c7a5d49eecbce1f6a705edccb3b2197691334df4f7cb280e10c701",
+    "2021-06-16/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "6f53d7ca8c65e064af001d4f203a5672e8ce2b1c6e455ab629989b0fbbdf23e0",
+    "2021-06-16/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "66ce674917f40309033e8bb4316577679baad14929468c5f023d81b4225a6551",
+    "2021-06-16/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "a9d69370de96e2227d48f6fd1cf1de946a8e59dfea09f3c7c07b9cb9501ef4b0",
+    "2021-06-16/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.gz": "a8655b9e3726920a705081fee1add02c26fcbd4b3bdbca52642ad74b16be24ba",
+    "2021-06-16/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.xz": "30914f5e855915c8728772aa87d7051f29816f3140a16e741628c65b7aee2c21",
+    "2021-06-16/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "e1aa13d71478684f83af6b3211b88cc2b370ac84a9f140a78af483c0aa235761",
+    "2021-06-16/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "207e2da62eb1249d40aec05a868176afcfe147d31c67b40f6ae4f5a32c18dfea",
+    "2021-06-16/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "3cdd8e14fa4b31ba16aa6b330165babcca86082397c73262e060b19e4b84d871",
+    "2021-06-16/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "dc08be077a48f9bdfb271e358f579393f9ed57ca813f4a580c7264a47006feab",
+    "2021-06-16/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "0bfe1a25041d7c74485691106b7ec72ba6c6178bc0fad780a57d8df1c21acd71",
+    "2021-06-16/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "258556fe3379e3de915aea82ba31947760e243ab9162c9d3db275b0f16199e00",
+    "2021-06-16/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "7c42d2707ae20d8d8cd4a441c60bbb180ee7bd326fecb884220859dff1b26bc3",
+    "2021-06-16/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "35ac58e194df494492b960798b98dbd5bbdf8ba2a58fe637c26ce3ef20c62038",
+    "2021-06-16/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.gz": "47728492d7d58cc125db0fe4bb8141e230404fab52fcf898178545de44b341fb",
+    "2021-06-16/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.xz": "eaccd37df3f687bbc1aeda634c75739b6a689495cd58977c808c8425a7ad93dd",
+    "2021-06-16/rust-nightly-aarch64-apple-darwin.tar.gz": "9883ee9b5b5d4833ea6ad001b0205fecf536db3fc9b19931229922d3af8abf59",
+    "2021-06-16/rust-nightly-aarch64-apple-darwin.tar.xz": "442cf985fff314fe0f2c5ae6f45c74de402d6e5753184a9afe1d728f4e331362",
+    "2021-06-16/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "6540dd65839da5af9106652c361b696b9ac1fe4a14f4ac5801d8d6186b6b031e",
+    "2021-06-16/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "f1f043b648474bf9b31a71532d88e0a4fcb5d05011a9a32a8a10a591adae1b59",
+    "2021-06-16/rust-nightly-aarch64-unknown-linux-musl.tar.gz": "134134199171087947159c446e2c73ef2c5efee20b55cfbe20004c80479b5b29",
+    "2021-06-16/rust-nightly-aarch64-unknown-linux-musl.tar.xz": "b67c4a8ddce620eb846baedc150eb446f0f1524eefc2a126fae435b39b131dba",
+    "2021-06-16/rust-nightly-x86_64-apple-darwin.tar.gz": "5cc5e38ee2ff4c8acc0e57a3bc6e19bbc679ca4f6d4737c137882af4184435d9",
+    "2021-06-16/rust-nightly-x86_64-apple-darwin.tar.xz": "7a0dc5b9de20908160032d8c5cd2b4baf4585549df20ddd28cf767cf8eeb70b2",
+    "2021-06-16/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "0de02a0fbf7621da7902cdc10a07781a8cebafc71d103ff7e2e3e6fe10c43d8c",
+    "2021-06-16/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "c14a4ad6b904a751595c82402ae11049f28a6f83cdfa43e8b1b5152d687e24db",
+    "2021-06-16/rust-nightly-x86_64-unknown-freebsd.tar.gz": "8a6245719a44080281713cad744bffd2a7e8ad4578028ffbe1c0999e782c8d66",
+    "2021-06-16/rust-nightly-x86_64-unknown-freebsd.tar.xz": "af5cf706c235d948cf0dec5b6130743680cd74eea1cdba0c49d76b21b819de69",
+    "2021-06-16/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "c3af6083060b123102a073028e0109e1585df6ee95003b70d8763f2aa470b3e4",
+    "2021-06-16/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "7ff69964751295ec29cce5262af1214f142c44bf097480f438a4778196733334",
+    "2021-06-16/rust-nightly-x86_64-unknown-linux-musl.tar.gz": "19f50a5db4699a9dcb67a19cb6b1f559d3e39ce81446d42bad43fa02890cfdde",
+    "2021-06-16/rust-nightly-x86_64-unknown-linux-musl.tar.xz": "3c747f89873dd452bef3b7120fdc596fc0cf3fe0292314974e586a81c5816243",
+    "2021-06-16/rust-std-nightly-aarch64-apple-darwin.tar.gz": "978397a6ceba7117b89ce5a9822a2dc39b566084950c56954e0163e19afa3bb5",
+    "2021-06-16/rust-std-nightly-aarch64-apple-darwin.tar.xz": "8a24b214d00eba0de8225901898a3bcfa24e5bcc1e543e7407feea170bd03950",
+    "2021-06-16/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "d6369fa8ba1d649d08b38681234d6aec0f3871e71650ebcfcc59ea7c1bce2ee4",
+    "2021-06-16/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "e76269ab5fc2c56f633d5fd1cf1d44013d803ad6a7a61ac0182b20456f9e54e2",
+    "2021-06-16/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "9fb786450e61f6e978efd2bcc238f2cc593b9057e8448feea032b435bf51d8b4",
+    "2021-06-16/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "75ee2f0c7412bcfa6ebf56c05eb79bce57c9a4688d039727efcf374d27371c36",
+    "2021-06-16/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "d53156cf7f97293ea0d2b3b08537b1b2c3b52cc91c5a8bf28e14f69a2bae73be",
+    "2021-06-16/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "acc188893f72413cfe0b6d30fd1e03242c70ec763d065e28ef7b2d2c5fdce66e",
+    "2021-06-16/rust-std-nightly-wasm32-wasi.tar.gz": "88dd233aa844d0fb9287576f35d628c617b54da7da04338a14f7abd5aa738a75",
+    "2021-06-16/rust-std-nightly-wasm32-wasi.tar.xz": "a0ece4f495ed213b20a8473dd6fc79a2f95d10ec9096b529b2b83dd6a4bf244c",
+    "2021-06-16/rust-std-nightly-x86_64-apple-darwin.tar.gz": "60ecd0061a48198e2d890fb736c3059104ac4e88932f7f6b7e1cb59cde7de110",
+    "2021-06-16/rust-std-nightly-x86_64-apple-darwin.tar.xz": "38739be9c43eecd52195b67e16e395fd613d0e4bf29575d225ec5394aec17e8a",
+    "2021-06-16/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "a9b5cd681e66a826fabe48f38630994710f43e3fbcf73c65c59b222a23fd1f4e",
+    "2021-06-16/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "a84a0759d43609fa807e42a39e112d503ed5809650d0656190081c7cfee5c1b7",
+    "2021-06-16/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "e5758800722baeaaa0f1b61818564e8a21444dfcbe9602b142d0454218e68d82",
+    "2021-06-16/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "ede9d14ae68502b0d63a88eb9a95e61ae2e1ff98362cc4fd81c0a138c7c3d986",
+    "2021-06-16/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "d863737b021c1ae1f1e0bafebf61088232a0c76d5665ce86a6fac8ca95c7bb22",
+    "2021-06-16/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "449c65fccdcff9366113ad406270551733b4b0413f49b07960d19f5ad443eed0",
+    "2021-06-16/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "7be512172a022f7011be352e90eb4106344af13e7a4d6b831961fd66f2f83581",
+    "2021-06-16/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "f9d955e7269f7f698c8a1443de6057e237ad66bfc31e89b6fa58734bbe0441da",
+    "2021-06-16/rustc-nightly-aarch64-apple-darwin.tar.gz": "e3dd00de0ec202c385c3c943dbec7157846314e04108c9496935ea4e273edda8",
+    "2021-06-16/rustc-nightly-aarch64-apple-darwin.tar.xz": "d43e08e98b9a84efb93b9edceaeb4a589abe0e047bf8cce8f740e346e63fdd2e",
+    "2021-06-16/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "88b9470cc39c51f1869bcaea2738a71c32baa4f76099dec77d4ce343b486bf0d",
+    "2021-06-16/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "00ee9000c966df94f7f4589c16a54222d2df601e8f0b16c47c0b81f0ae0a4436",
+    "2021-06-16/rustc-nightly-aarch64-unknown-linux-musl.tar.gz": "430e9c095cdba5341e3eb1d9bde03b90fd8dfc54a38c951a8e209b5013fc9e26",
+    "2021-06-16/rustc-nightly-aarch64-unknown-linux-musl.tar.xz": "03bb071754ec630b4062507c928bdc5c97f0ab0420c42e705ebd867d2cadc131",
+    "2021-06-16/rustc-nightly-x86_64-apple-darwin.tar.gz": "438e0615f993ddbf518848705c01fbae26f36139e7b48d9df5d1403586966f9d",
+    "2021-06-16/rustc-nightly-x86_64-apple-darwin.tar.xz": "d2fe00761258bd619f7e370bb12512c433a0bb76f6422721efed419751db93a6",
+    "2021-06-16/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "f54e69bf237c882c4d0ee730573e3ebef5eddc4a03730406cf082b43eb4cd008",
+    "2021-06-16/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "f6587f00dd989d3a7d0c2b24fd1e4de7ff9c3e8c0bea3a043822a3b89c429157",
+    "2021-06-16/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "6fda58af80d7c597d178b2137adecaf4e94c289f7f55464de0138ce76575987f",
+    "2021-06-16/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "7fb8a158cee7c85a7418ba1ba3d249a86e5030ed896430208ef34afbba191b76",
+    "2021-06-16/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "44a77db517c05e7b136c8f683e7a9c076fb7c5f15c2d2076a559398a4eeb33ae",
+    "2021-06-16/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "b0d02e5d6536f53e10d3e6bd8598b599ceac2a468bb09a4d18ac76f5299f5763",
+    "2021-06-16/rustc-nightly-x86_64-unknown-linux-musl.tar.gz": "6eefe98ce50f897fbba0bee21efbc27c76adb108189872a384683bccb4b0aea9",
+    "2021-06-16/rustc-nightly-x86_64-unknown-linux-musl.tar.xz": "804cc9f43afdb17f3a291463287a0828be59c4ed547b87f26481cfbb18596ac8",
+    "2021-06-16/rustfmt-nightly-aarch64-apple-darwin.tar.gz": "ba8c2c5a171cb4361667584229fee13b1cfb5a901f00747f13c3b2af4fe72dd9",
+    "2021-06-16/rustfmt-nightly-aarch64-apple-darwin.tar.xz": "dd8bf9c3066400484f4be57287517ed7cef0f95bc3c49576bd95536a41ef6a9a",
+    "2021-06-16/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "7e11932879ec3164e3042b1544259f93591cb36093f1f0e42324c480da8a58c9",
+    "2021-06-16/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "511e0b9518f775ec42fa7c87bc194ccb382defa58250ee427ff1f81d151be3e8",
+    "2021-06-16/rustfmt-nightly-aarch64-unknown-linux-musl.tar.gz": "519e3efc3026780dc0ea3a3020b441a22ce7c497f0f9252aa6a748f2567f1e66",
+    "2021-06-16/rustfmt-nightly-aarch64-unknown-linux-musl.tar.xz": "09661f5142ebdac0f29b7160cbd4b525157609d21984377261d24518fe2db121",
+    "2021-06-16/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "6e005433e4b5a46347b6ed28371fb97694087c4599447a04a7fe684fa22126a6",
+    "2021-06-16/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "9b14579833c0067ace06809e1eeb667135613f1b2823edade59f38ead95e9843",
+    "2021-06-16/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "a7606c5ddfca15e066bc844372e81912b256595b8bdbdd3ebea5622cf33bc6c0",
+    "2021-06-16/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "b2650235da2b6d8af4f0227a8d33f30fb44f2068e8c1f8c97eb06b71b8081068",
+    "2021-06-16/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "239953675a43453195e7f6d7a106a3b65baf57230df0bb0ab19fb6839cf99d32",
+    "2021-06-16/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "f4cabe7bf466cd3ebc72d3c1f6a419be34eee02f674e219e4f046d7ecde88294",
+    "2021-06-16/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "3edba45a2797a3361e575e7aca34284c5ed8154f8849e3da49b59e45317dc65d",
+    "2021-06-16/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "32d531ff4af4868deff5b999948b5a0c99875ecd38c11d07468e2af675916131",
+    "2021-06-16/rustfmt-nightly-x86_64-unknown-linux-musl.tar.gz": "bdeca48139be92c824180e29b790cdb58a4d1e3c15b4c65e9ec93aaae46853aa",
+    "2021-06-16/rustfmt-nightly-x86_64-unknown-linux-musl.tar.xz": "3aaac8838a7ecaf813713363586be98eccc0014effdcd6a1dfa3d21caa994fbc",
+    "2021-09-08/cargo-nightly-aarch64-apple-darwin.tar.gz": "712aae52f55402ac17ca017dd337ca1aa13f063ecc666fc8c16448f42aa4519d",
+    "2021-09-08/cargo-nightly-aarch64-apple-darwin.tar.xz": "6cbf2c7a63c6a1bf89aecdd3f49bb67e4ab283f11ac22e58e3b8136e46f12949",
+    "2021-09-08/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "814ee506cce957c7371bff4961fcb97cc6ee7fc2da4189175be61a4990130824",
+    "2021-09-08/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "3188a51d6757036da4cae86ffb4cdbbc7d0974715347b5f50390f526f319ddd0",
+    "2021-09-08/cargo-nightly-aarch64-unknown-linux-musl.tar.gz": "65edd1914dc1f7118f70a722cd7f555bd7e9afc8a1ebb447036ef8948d842742",
+    "2021-09-08/cargo-nightly-aarch64-unknown-linux-musl.tar.xz": "9e6148839d2be31a190d075afaf97f23b6c461ad799e9bc0c1527fb004c544a1",
+    "2021-09-08/cargo-nightly-x86_64-apple-darwin.tar.gz": "2c539e3a02521842316202cabd37ac580e5d95ee48531435e49628d34217a8cb",
+    "2021-09-08/cargo-nightly-x86_64-apple-darwin.tar.xz": "e82f1181512b8ff88e25a1e542bf95fff635ae87045d41a7c90fc7bf24740658",
+    "2021-09-08/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "64c3ab2850c4039c58288cbc402243914eee40d35218665e6a02c8b45efe7704",
+    "2021-09-08/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "f8af6072a909103cfdf6360a8a0f62a0b713192ff97e28edf3ed6c23c421b4f2",
+    "2021-09-08/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "c119dd05ee04dc1a0bb414f30036cce9dfb0456eb974bc991acc51122528dd7a",
+    "2021-09-08/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "ad401ac565705fc1019c27123f805db73b50520450bfeb5b0ff555fa58dab6d2",
+    "2021-09-08/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "0382a83f1a93228e8fc2c68e396032f61bb431a73aecee75d461b2008c68a33f",
+    "2021-09-08/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "9ff23d2cec0630f0c836ee5d9d621cdf8fe44a55e47a08ef5f57c34598b5ad96",
+    "2021-09-08/cargo-nightly-x86_64-unknown-linux-musl.tar.gz": "bfb2a9ea032c591f1c9c36cd2590427c684ebc95b573d919d477b6bd57d5bd37",
+    "2021-09-08/cargo-nightly-x86_64-unknown-linux-musl.tar.xz": "eb33a1d7e98ac9d4ad1cf9402a7e6c98ce6e3f6c58712f115894f633f1340095",
+    "2021-09-08/clippy-nightly-aarch64-apple-darwin.tar.gz": "7dade8377af304261199dadf7126afe0e5e50173a89e805567f9d833be59c37c",
+    "2021-09-08/clippy-nightly-aarch64-apple-darwin.tar.xz": "786aa3b9368a108bc574dd43574fd00dad68e1292ca2c9c631502317aed7e0e6",
+    "2021-09-08/clippy-nightly-aarch64-unknown-linux-gnu.tar.gz": "e36dce42b32982a550a0a575fe827e16e2ba6a53fc850a99f55d8319031625a5",
+    "2021-09-08/clippy-nightly-aarch64-unknown-linux-gnu.tar.xz": "e06853c1d8603970f6fe073a15ad8e67b85e06c70639b60b97d7052909948749",
+    "2021-09-08/clippy-nightly-aarch64-unknown-linux-musl.tar.gz": "abce5645da1c5eeaa193d986f76531e5a3031210e3d94b66d32deba6f15943f6",
+    "2021-09-08/clippy-nightly-aarch64-unknown-linux-musl.tar.xz": "fc80124cd059f4b421e4d66df51b9c1e828dfbd75c8a18d1377179a30a61ff02",
+    "2021-09-08/clippy-nightly-x86_64-apple-darwin.tar.gz": "5064e135a17afa8540b6073fda18f686c5bc6903e800ce2f508cf33f74b5b701",
+    "2021-09-08/clippy-nightly-x86_64-apple-darwin.tar.xz": "61fdf831abd3e82edf34063f4e2b7734b998bdd8f9fa026cfe314de0dacd0e4a",
+    "2021-09-08/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "b7a6dda0b9da65fd964c01ddf16a7b5a309673ad50095bd2c6efe4f62371a075",
+    "2021-09-08/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "883666f466cc538cc9cfacc79e685eb945f65949d988d0e2aae23ea6acc81927",
+    "2021-09-08/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "8846077e6bd3f96b87b0f341566d51108e4835f23c639e3d95fdb58d31d12033",
+    "2021-09-08/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "58f2c3e205a1d156f68952dae37ad33e34cebc609b2dcf31f049664b02959d53",
+    "2021-09-08/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "577ba7ef53a84c296ef1244200af68523708e2ec0884f7e2f7978dae320cb661",
+    "2021-09-08/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "098c795c431654b856038b5edb520e62d136e11bfaba00d057bdbcac33654968",
+    "2021-09-08/clippy-nightly-x86_64-unknown-linux-musl.tar.gz": "28365e89efffcd0cbbb7da8d922ebe5c07b2f991fef2c1d845f9f7cdbb014d45",
+    "2021-09-08/clippy-nightly-x86_64-unknown-linux-musl.tar.xz": "88eeb37e4e639e1c1e2eaab7794bd5f06441fa6185c1d6b4cf5f06d59035a7c0",
+    "2021-09-08/llvm-tools-nightly-aarch64-apple-darwin.tar.gz": "dbffc97784c96ba75d6da460d965bd705c7bee737f1d73a0bccf815cc046260a",
+    "2021-09-08/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "afc9f8b2e5c760a5315ff1b892b18c7af3ea7e5bc670abec3949605ff87e9dbd",
+    "2021-09-08/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "bc789aa0b012259baa8b5540aee96f1074d9ad6368a5031b556093da61fcd8d7",
+    "2021-09-08/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "1f6548686fe0364f2946f661083bf79d5e87557036f5b5b4fd6f820f95f73152",
+    "2021-09-08/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.gz": "ed3019654dec2aa14233b9fe1a6c934d913acfd798725591ff02d97e10504be6",
+    "2021-09-08/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.xz": "1d4aeac67367aa09ab8108041a80098541f24a7698564d14d7e84e3358264ba4",
+    "2021-09-08/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "b419d08a367fe4366202106161fa1ccc4dfead9639e582b36c71c3405dc58e8f",
+    "2021-09-08/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "c3eb4b616ee88644555a09d7a3cf7e9d13c36e2aa5736248f952b791229c7087",
+    "2021-09-08/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "213cfa58059ba87e650acb240f6b1f9ed6948687fe12a236b16d0abe3e293fbe",
+    "2021-09-08/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "75cbd54fc3a454d8416f18b20f2be8fa38dbabfe57f9b6fb9d90fb0fe2142f32",
+    "2021-09-08/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "cef580a6e8efcea89bbf40de422e04c36546462ef9e90727da7e339bc9acb83c",
+    "2021-09-08/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "070c86bf59ac938eccdebcf2b79a501dda88e3d1fed1e90be9d63e944018390e",
+    "2021-09-08/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "4a5ff52134c2dab1746c9d3d84bac92b5ea4fbbb4067c83ae20524eaf060e6db",
+    "2021-09-08/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "0032b82c76aef137fc09d2260c50273da744971be29288a8ce7586a7ad3a5163",
+    "2021-09-08/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.gz": "f20f89d4f5c49e57c950770b9b83581534b9f64187f718b8392ff58559b72de0",
+    "2021-09-08/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.xz": "ad20bad3f85717373e5a2fa53217a4590c74ee6ea4d13173710a82b30725d170",
+    "2021-09-08/rust-nightly-aarch64-apple-darwin.tar.gz": "67f875cbaeb23dd0aabcedd0c80809cbe9d0799f6316a0b37353d16921f3319e",
+    "2021-09-08/rust-nightly-aarch64-apple-darwin.tar.xz": "a8f225a51809a23d7fb626b47720953dcb1a06e2a09e159dcb0a52fe78501734",
+    "2021-09-08/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "e27d7a5cdb7076674d885ce034ae243fa77f7d1210c83d52c8f8e4c4be86d204",
+    "2021-09-08/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "5d7d6de53a32fe25e31745e6aacf50fdcb164133380656384a5e6506c137aaf0",
+    "2021-09-08/rust-nightly-aarch64-unknown-linux-musl.tar.gz": "c4b9090ec6793d96443ba51b0e531d99e7dfe715e2a506e28aa8e070c4811050",
+    "2021-09-08/rust-nightly-aarch64-unknown-linux-musl.tar.xz": "7baba459a0b079a4012da7c07e7e699726a9b2500a5b5fb322d279d34b6e323e",
+    "2021-09-08/rust-nightly-x86_64-apple-darwin.tar.gz": "50e5552ae8c20b056b122d2bbc45030f10772498b3bf88b6c539c9bab9e4555c",
+    "2021-09-08/rust-nightly-x86_64-apple-darwin.tar.xz": "ae23ec7f72c4900e6b96a1ede40388defd7714c5c8fba4177f73471d67ea9988",
+    "2021-09-08/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "2ba241a6982360ffabbc383f91a642dc42c59770253041d8634255543a84d5d3",
+    "2021-09-08/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "e43c8800e1f6bcbf7f885a32e8da394ec3af0651327d16dac84d1b0304db7cf6",
+    "2021-09-08/rust-nightly-x86_64-unknown-freebsd.tar.gz": "da6ceabe8dbbd1f92e0dc77a4a98ff1745bb21ea714d9f4eac090626d5a480d0",
+    "2021-09-08/rust-nightly-x86_64-unknown-freebsd.tar.xz": "c005aeee72af1e1021b404a0cad37690231a1c7473354c392b1dae234a0a6ed9",
+    "2021-09-08/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "ea4960a18a13815736fcfa33886fa9de8f07ee758339050ce676ef81e9cc0f0d",
+    "2021-09-08/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "fb5a8f267693ae1f0a3b8e6093d7774e96edc0d9b9c6b4ff7919684053088dcf",
+    "2021-09-08/rust-nightly-x86_64-unknown-linux-musl.tar.gz": "acdbb72ee7e579940df739755ac478e3a386431aa606a9ab08ad1c870a24794b",
+    "2021-09-08/rust-nightly-x86_64-unknown-linux-musl.tar.xz": "16812bab269c71ce3259c97d5dfce4ed54f317e9ec3d9f7e3660552308cea6e1",
+    "2021-09-08/rust-std-nightly-aarch64-apple-darwin.tar.gz": "8a08b1862d2e69d249d67fb5669983ae961bd07b9bfc80585ef84269380a317f",
+    "2021-09-08/rust-std-nightly-aarch64-apple-darwin.tar.xz": "26c8273e545eb8fc1a48a2828ba79767961c0d3941a64a17213cd2f92357782a",
+    "2021-09-08/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "0f2fafb6f4c4693380b3e8eaf4a08729b511cdb1f89c4976c2944b4f87e48b66",
+    "2021-09-08/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "2d4627169995f68b65d2649420edd565d3be40b395553613da41a5efc28edc96",
+    "2021-09-08/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "4b2c1b78637bb0ddb7f5e2ae16119f84e00f16e874955c34dd3684e67344ac99",
+    "2021-09-08/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "ec82506ae65e1b114104e5e6b49f3cd3c38f0098d83f07878cc0ec154335a0e0",
+    "2021-09-08/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "ef19646fb38abfde637fbd619c4cc4b52826fce09074f427d3cdd7d5bbf89167",
+    "2021-09-08/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "e6c277f45f1b653624884b67129d5bcd384ac58792200101b02d679b78b1102b",
+    "2021-09-08/rust-std-nightly-wasm32-wasi.tar.gz": "df7cf483b11358850a2f0f9d6816b8ebcf3813ff4c0cc75cc99171200b2f866a",
+    "2021-09-08/rust-std-nightly-wasm32-wasi.tar.xz": "84d159f234115265f4ce6ccf59f260518df3fe9efa20924cd4fc33e6c6e3ca78",
+    "2021-09-08/rust-std-nightly-x86_64-apple-darwin.tar.gz": "4d13a115d70efc84daa181bf7927b4531c5e40cfc1df8a99c04c9ebb4010b829",
+    "2021-09-08/rust-std-nightly-x86_64-apple-darwin.tar.xz": "31ce70969890db1ac958e203b53d4b6ddccd51dbc4197adf12f22f0d8c63e987",
+    "2021-09-08/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "0c93f9734b776bf7c2e150fedc2811db108e732a4f3328aedb038969b435c071",
+    "2021-09-08/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "05fadec9c3ada141b0bbd406e8460f47c297421cb387a59fc45231488f449f09",
+    "2021-09-08/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "64ff9746ede66362f44aa5de62541a85a196e639a2cfb5d60be038579ddcd367",
+    "2021-09-08/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "2708a34802685bc4fa3fecfa65efda726e05f1c6cfdbf3b6f7c29e85a1fe75bc",
+    "2021-09-08/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "b6d1ff428b1c0591ea7375f6ae3421630d4b6da7e8cb6bad071284b5d563abe8",
+    "2021-09-08/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "9a9150da9c5171d0f16395bed3de1e64f8da5befb42a658602155a3852257f7f",
+    "2021-09-08/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "1cb7c1f28e4fa5096aaea77e56006a1cee69b77c5fcb1fae993a961942ea16d0",
+    "2021-09-08/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "30d2594e2d4a997f21edad14a9c68221163514e323f70ecc05b56e1c906c17d0",
+    "2021-09-08/rustc-nightly-aarch64-apple-darwin.tar.gz": "4de0dde4a4499074c9c4ca3a9617c89376ccbc21429ce2af94147570844f5436",
+    "2021-09-08/rustc-nightly-aarch64-apple-darwin.tar.xz": "99ca6d26ca903d23a5620219734028d7a672956cad3707e58a5467282cc20721",
+    "2021-09-08/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "a34ca09afb230c0852b1765f4477ff1135f66cb4c41fe88ca79901c3adf30aca",
+    "2021-09-08/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "ac40f4e8bfaf1c47af164827f1002586ebd7db694e8668bff567a4fb4c786ca2",
+    "2021-09-08/rustc-nightly-aarch64-unknown-linux-musl.tar.gz": "9594f62bd1e209725302318f372ea2c28cbd83ec2b29c60e5db933f60674b447",
+    "2021-09-08/rustc-nightly-aarch64-unknown-linux-musl.tar.xz": "da3109baef5ee2f3534cdeb9e509e0ca0fa22f3c42d82268bd6c33b1ccf8c7f6",
+    "2021-09-08/rustc-nightly-x86_64-apple-darwin.tar.gz": "1a7eccf24dd1baecbe07c2999c917e54e7f213496a2ed542fc8ba5afbb43d1f2",
+    "2021-09-08/rustc-nightly-x86_64-apple-darwin.tar.xz": "860362cf2333b234980e26210f0748db474f8f1895b6c3e61f02df0418cccc9a",
+    "2021-09-08/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "15667c4fe1d810b3b1979c19d1def41dc5484f7444517c4277aec2154404face",
+    "2021-09-08/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "4b3f057209f28d06074f3f94e03fd333328fa0ea58624f4eb4b2957aa7811dbb",
+    "2021-09-08/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "13b46879f9eb1a5c467458ab1eb3a65d295d9834f3fec42f0ad4a273d9fde926",
+    "2021-09-08/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "c2e96034f324f3577634d1638aa41f952d0a6e4e8ee31c943dfee1a6e9b5e789",
+    "2021-09-08/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "73891cf0b7eb252b6b8486ddaad91f7ce4b18950befe7853bc3d20d38e5ae069",
+    "2021-09-08/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "e6d5b782aa5509fb7d5a45301af2d3d9ac24f70313769853afc17976d8bc40f3",
+    "2021-09-08/rustc-nightly-x86_64-unknown-linux-musl.tar.gz": "ba94c257e93dab13beaf0a78168de64295ee0178fe76a8be10e18c5fb5d7c5fb",
+    "2021-09-08/rustc-nightly-x86_64-unknown-linux-musl.tar.xz": "ad368ca102719d8327d334804fc89c79836f076bed75acc2faa0451507cb7c96",
+    "2021-09-08/rustfmt-nightly-aarch64-apple-darwin.tar.gz": "691922fb32f3da37532bb9be974ad1717af521ec2b71bca4bbb5e57f3c4cc3fa",
+    "2021-09-08/rustfmt-nightly-aarch64-apple-darwin.tar.xz": "2c9667209094b7a603d50d3dc684c505b2ab855c64dcd8b23fe09248a6e13cee",
+    "2021-09-08/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "98b2eaf259a1bfdc70e40a52e891920dec7fc6132ad8d2420f91655c793ea340",
+    "2021-09-08/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "a97c1c2646f9628fcc92818d21f4925568681976727686701116d0e6a71693a7",
+    "2021-09-08/rustfmt-nightly-aarch64-unknown-linux-musl.tar.gz": "a4df0726fba466a5180471d3e63735c2b5ee9794e9f42026b1e8ae404dd43ab6",
+    "2021-09-08/rustfmt-nightly-aarch64-unknown-linux-musl.tar.xz": "92846ab58a75bddc0270c9f42234a6585edc9a382e2018baa776aa74bb13e444",
+    "2021-09-08/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "20de8ad3aa7507dd9657c4a4b959c38cc7f732a87bb757183033f78a96288e45",
+    "2021-09-08/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "99561b207ba61b455d1522d95143ca4ccc6474187be2f38f1ebff2ed63d0092e",
+    "2021-09-08/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "0cc0f10763b73c5e4c8bdcd15a563d7e9d705b192ed6e8edc50dd6a71b874761",
+    "2021-09-08/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "d734aefabe95fa03710dc75e9851c8f2e654f19cec1381ecb18281837d19db38",
+    "2021-09-08/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "e1c28472a81312560ca36719f0b61b7212a07d63e85d745f97cd8e3b9ea8f191",
+    "2021-09-08/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "4d6a62738f842e54666c608a466c64f896097ffa65d10d30361704e4b8496eed",
+    "2021-09-08/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "a7d579672b94978e8427584f7e9d2b6534f320719252db46fc6ee85082d646ff",
+    "2021-09-08/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "6ffbdb558b9d25e9d923534413b25dc99bb5b9cc92b4774d5255cf70ec20b20d",
+    "2021-09-08/rustfmt-nightly-x86_64-unknown-linux-musl.tar.gz": "fba0e7bc1401b830223b5207b63808e28403f48d1591c7d47c1681519c1883f7",
+    "2021-09-08/rustfmt-nightly-x86_64-unknown-linux-musl.tar.xz": "644b3acc47cd7bbbb5405683ce94e7f32a8313ad265da753026bdb6c3687b608",
+    "2021-10-21/cargo-nightly-aarch64-apple-darwin.tar.gz": "6eba28dffca35b3b8809c0f56e93931ecf75b539d3ca0f048607047b2f3a9588",
+    "2021-10-21/cargo-nightly-aarch64-apple-darwin.tar.xz": "5bfc6bc7df0bc8fadd9a120347b0055a6aaf473b29ca4b3b783d1e7e78a1d5b6",
+    "2021-10-21/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "c91ab0b98bdb80b9136a06e8d6fff33641fad1c9a005559c976db57a5939bb90",
+    "2021-10-21/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "cf7f3d04d9ae0fdd0d195250207e3e6a969cb79501b6c94a84658be4074b02f8",
+    "2021-10-21/cargo-nightly-aarch64-unknown-linux-musl.tar.gz": "f0705d665f0721e64673ea8f282980e968fa1186793b7d6530415e0bd05e1711",
+    "2021-10-21/cargo-nightly-aarch64-unknown-linux-musl.tar.xz": "8099e5df6c3b4e1fb1f42b2a90bfa318e0a809c18d291a6ff78a6e91ba246a2c",
+    "2021-10-21/cargo-nightly-x86_64-apple-darwin.tar.gz": "84d04dd97de2e288d7f449006fd81a930ab1d9fddc20299c9aa8f9bcf1b5cbcd",
+    "2021-10-21/cargo-nightly-x86_64-apple-darwin.tar.xz": "48a187df00fe8eb3460c00dfc5927fe18028d5fed0250f1ee71b519f0d95ebaf",
+    "2021-10-21/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "2bdd1823caaf95e2bbf8942c35daeb9aed2bf69534bfdb18f2aa8d1e32a0741e",
+    "2021-10-21/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "34999ba4d9bc1845abacbc7e0dfe2a80add0b663de4529fcf62b92cbdae27db7",
+    "2021-10-21/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "e578efd5bb719ef96435e2e24969f968ddc00ec1515c86a7fbd01a650976e028",
+    "2021-10-21/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "6eabe2152593cbcfd771ee540412127fbf7d8bc822a6d71f8876ff220f718e0f",
+    "2021-10-21/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "7fc7f3649de6d8aea2304f286d2d1e5ef279b38d88d8fcbb8b81b1a355201273",
+    "2021-10-21/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "a4ec66b7d12b8e0c081692db92f3dcf8ed9601f2461e5e8431423655bab70a84",
+    "2021-10-21/cargo-nightly-x86_64-unknown-linux-musl.tar.gz": "b022b8341aae8c7d698d44a9f69439569385fb6a3c6e5783cf68853513023c10",
+    "2021-10-21/cargo-nightly-x86_64-unknown-linux-musl.tar.xz": "5c8d507eaee5c6c41dfde05a9a24d0157d0bcc93449a27ff10b29a7034c0ce77",
+    "2021-10-21/clippy-nightly-aarch64-apple-darwin.tar.gz": "ee11bef6780c3c326ba39c4fb2de53c7b82f3461ad50131811919067bdbc6d21",
+    "2021-10-21/clippy-nightly-aarch64-apple-darwin.tar.xz": "6b7b392dd7ffe48b67681780c81fd51bb545ca18e1d02a6cb9ebf54edbf76c96",
+    "2021-10-21/clippy-nightly-aarch64-unknown-linux-gnu.tar.gz": "3e5b3866242c1c3405ab102c205d07bb633fe1884a0b1ef72e1deada91143fa4",
+    "2021-10-21/clippy-nightly-aarch64-unknown-linux-gnu.tar.xz": "f0b80af6bdb8d68f9c783d383df6a31dcd69a448052fbfb6cd7423c708cc3523",
+    "2021-10-21/clippy-nightly-aarch64-unknown-linux-musl.tar.gz": "8666c8dfd127d69531f723210e23675fd372bf72c2c4ea3f853f00e6784c17bc",
+    "2021-10-21/clippy-nightly-aarch64-unknown-linux-musl.tar.xz": "5de9e7321d3d48ca8fb0bd185403f7173fd93df187c6f6e7f34c28fc946cac34",
+    "2021-10-21/clippy-nightly-x86_64-apple-darwin.tar.gz": "0bfd130526f021f8ee9c003895af276c9978f9da7a03e50d0efe59a73bcda1e2",
+    "2021-10-21/clippy-nightly-x86_64-apple-darwin.tar.xz": "2c1d313f8a3ecff32d1d231b6ab9fe509499a331c290f106a0a84dfcc50dcc0c",
+    "2021-10-21/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "713491e5f7d1a6bb8bfe5433706515fd639b359d5a589ff3ed98a23c187a875f",
+    "2021-10-21/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "972aa977f85c4f7bee6a2ca82dd8532faa5e27e5b29c40c9b4b797ea3cab5746",
+    "2021-10-21/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "6db6b98be1093fdf97a11cec2a87f30c27a10c6e7e96652f7b758f2d7428832b",
+    "2021-10-21/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "33137c0c0e9d53a69196f3de5504afae3e2b0d124ff32457ee3ed44c52166bae",
+    "2021-10-21/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "8deb9bc3831bb90cd49b9ec8763c5a98349b5b47b6622634e64d8d58a2bb33c0",
+    "2021-10-21/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "d4f8f8f241c037107636675273ad0a7215864d412d5bf85194db1fb8b07d6df9",
+    "2021-10-21/clippy-nightly-x86_64-unknown-linux-musl.tar.gz": "effdaf877422d4700dc2ebba543c4186a5e281336c8f415c20482e75abc7f602",
+    "2021-10-21/clippy-nightly-x86_64-unknown-linux-musl.tar.xz": "5bc19489142d592c4a7f3ca87d5414647e954f72b0fb232781784091884388ee",
+    "2021-10-21/llvm-tools-nightly-aarch64-apple-darwin.tar.gz": "d6a2bb9d9c097fd3ff15477a95edb77aa6efdae12c5964398e232339b15a955e",
+    "2021-10-21/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "05d4979e47fa72674203d9d582826d8cc634b203e54d855132f63cbaa91458c4",
+    "2021-10-21/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "8c9d5b9fe646fb39448addf7ee370cbba2c2a229189d38443b17f369dac2f405",
+    "2021-10-21/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "25463cd60f7158b87b728d714c805e908213554dfa5be59d62fcd3224a23c4de",
+    "2021-10-21/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.gz": "1dfa08db634e1276d48aa26e5dbc50bf2fde3f2f8ae52dbe5f8ec8fc80bacb76",
+    "2021-10-21/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.xz": "bf3a015636ddb2589e3312a76c19010f16945be2ca4fd8d900f6e58a421872fa",
+    "2021-10-21/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "b2331bc949012a35da7c3caccf87dc41f176ffec3c2101f5f2dcc9f83d733483",
+    "2021-10-21/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "363ea1b6553d92e41f852b78695981ada877d8810a9a1ff480dfc8e69d77391f",
+    "2021-10-21/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "d6aa710e9cb1a8c5913acf2addd40a261f68063e9983441d4396f4443657e467",
+    "2021-10-21/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "b0e0cf970157cbf14fb0c968bd7b3c3581c13987596469beafad5ec068aa2c87",
+    "2021-10-21/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "85a642dbccf6f8637a5a1ec63e92d61040a9c59319ac1f9e713f5b891b26793b",
+    "2021-10-21/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "c05ca2e37e6ce70845d6fc3584602a9cecabd9624f5721b68354667a13d7baf3",
+    "2021-10-21/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "fa9532d8bd4cfd19626c700601cb73011b00cdd4325c5f5417004a3124d277e1",
+    "2021-10-21/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "41932030f2e02cf456e2b381c3c44bc249c1134435db280dbf81e184f3af3ed7",
+    "2021-10-21/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.gz": "ae10630bd5117da9f5fa5eea27b5624ad864d4d47a291a1f77ca5508c9691762",
+    "2021-10-21/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.xz": "c4c5a3913ef8b94e90dc2fcce0e87072ee44ba5a84e304cffee475e391ea9815",
+    "2021-10-21/rust-nightly-aarch64-apple-darwin.tar.gz": "5716c620dc210d2575b95f43e7dfe5100f2a8c21651fde66217a506bab96d640",
+    "2021-10-21/rust-nightly-aarch64-apple-darwin.tar.xz": "58fc0b5ba996d7c45e07d9abf318426d5ecb8121b3e601dc79b8ce5ff62e8b66",
+    "2021-10-21/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "b375f0cc8e83dea3c8a32c843492930460736c8bdb6ca3db93e7fa563f312b20",
+    "2021-10-21/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "fa3e615ca9163fc79f524838dc06c3925a803c3e8de382b261f4ef51ee1bd4ee",
+    "2021-10-21/rust-nightly-aarch64-unknown-linux-musl.tar.gz": "ddc46ab912d69fe56cd68a74123a08404ce5f0f74551d4433e8632b45114b0dd",
+    "2021-10-21/rust-nightly-aarch64-unknown-linux-musl.tar.xz": "26a8e79e447f21fb5a52d824da6259694b1333efa730aaffba3ddf877733d9b3",
+    "2021-10-21/rust-nightly-x86_64-apple-darwin.tar.gz": "75b66db55f4b0df4592651fc573e4251fa45b3b48b2fdff5a86186f138ff081b",
+    "2021-10-21/rust-nightly-x86_64-apple-darwin.tar.xz": "0d99781e8a8a59a6a630c288cbfe7d55cc47f4b45a3d2f0223b1cadbab40d60f",
+    "2021-10-21/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "b15a584bfb4a55719a91b33239664a8eeb55e7f7580e53d947c78bf95b8a034e",
+    "2021-10-21/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "0fdf48db3d53c75f8e39a4ca355d66b7744314e1590637c196573cc7b64d06c5",
+    "2021-10-21/rust-nightly-x86_64-unknown-freebsd.tar.gz": "74676a2604ca5032307b0dc7865d1833ffde41440d649fd8e083b39e291dbb24",
+    "2021-10-21/rust-nightly-x86_64-unknown-freebsd.tar.xz": "5cd2e1f04f430b89ce0a7c81a5760297f44f99813773f0db9262f6a0130cdece",
+    "2021-10-21/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "778d604ebb1407b59f3d331d986b2d5ead609b2cfe5db6f0ba098375eaee021f",
+    "2021-10-21/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "9f62775702799ed4acde4c691ddced70d612636d8ac40e74dacc646468948be1",
+    "2021-10-21/rust-nightly-x86_64-unknown-linux-musl.tar.gz": "e7b285da594860356b12d61a5cd6da54e3bffef52b1b5a4f8ffeb1fa86736343",
+    "2021-10-21/rust-nightly-x86_64-unknown-linux-musl.tar.xz": "916956b5bda3ca3b45123933906a00a760627ac147d594be6a570ce4b4e22427",
+    "2021-10-21/rust-std-nightly-aarch64-apple-darwin.tar.gz": "28e2aac0c80e4e62874fe4a97fbeea9dc4482e74964eb1f4e8a83d7531be1a58",
+    "2021-10-21/rust-std-nightly-aarch64-apple-darwin.tar.xz": "ad6d1d75f14ca471e3b6194bf23d89e7cb56ca093976cb0052a171dd4221b4f7",
+    "2021-10-21/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "c810f89068c71626ba3326b26cc24d017a76f060eadcd84ad0152b66031bd9f6",
+    "2021-10-21/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "df7e1c09a9755c509163e4e6d161f3897178c4dd27be0ad6e5961d67812a6241",
+    "2021-10-21/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "212d4f2928e14280bd2ed7a5f35e1a731521da58823f186a685db53711d5db8b",
+    "2021-10-21/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "efa19fa28b735721f86cb62dfc802335e0e4ac734c0ecbe91de20ad2c1e52cb0",
+    "2021-10-21/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "3db3ab740447206c71e303a9098a0eac2fa14117e4d6e437308239e0d469cb3b",
+    "2021-10-21/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "859461de63982c2d277f815a32e4e8ee014e1fa5f8d4453bbf15ce06d112c952",
+    "2021-10-21/rust-std-nightly-wasm32-wasi.tar.gz": "be3ccf5a00e7698b152df33d31406a533ef3fae545d4912e6c3c85b40afd4e25",
+    "2021-10-21/rust-std-nightly-wasm32-wasi.tar.xz": "fc6cead2d784deda63f84414dee8fbf985181a1e35506675e79967cb2b8cd32e",
+    "2021-10-21/rust-std-nightly-x86_64-apple-darwin.tar.gz": "73a686b2577994bf641a6422338a0cddf4250058df74ccc7540bc6026c53bb3b",
+    "2021-10-21/rust-std-nightly-x86_64-apple-darwin.tar.xz": "b2c96ae168b661ae1ceb787ccd071ea1785121b9fc3eee483d31a86ef7953510",
+    "2021-10-21/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "1d7f65a9b63a1756d5915c8305930eac747dce5da8583af00f9cff8b803a33ad",
+    "2021-10-21/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "f1ef85ade7edab096872b5aad4ca9f8ac5ec675cdaf15817bf99df17d00ceeed",
+    "2021-10-21/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "2903783f094fb121a9171d999aa0d73a255fb5617e4cdad5d8470183758bbb23",
+    "2021-10-21/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "b909eff37a41bf997cad567c5e7836940f51afe54c6544ef77982db9eca5248b",
+    "2021-10-21/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "ea390777b60ccd6861e7d163cdf0c19be0b19944039f1b52283120b598f56258",
+    "2021-10-21/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "477209d05b59db09ce9e416979364c13dce26c346a2568e2104b4e9fa3e697fb",
+    "2021-10-21/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "182d763bc6e727f98673ab6ed9d707841e2ea8dd4571bab4f289afb5006b396a",
+    "2021-10-21/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "98a1c13ea54c69dca3f8c49e6919e964118b98b408d4af2b75120a0fd643be12",
+    "2021-10-21/rustc-nightly-aarch64-apple-darwin.tar.gz": "1b6a6bf8652751f5123cb7741466cec2164302f3306da92241b2b64103398236",
+    "2021-10-21/rustc-nightly-aarch64-apple-darwin.tar.xz": "550293a2b7de4d77071fea88b4f8bf6e6353e6a5e3bc106ff54cfcf62497e5d7",
+    "2021-10-21/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "60510d5d77b2d55e3b676bc0e478455452133f3f5dc3c173ba3d251c6b780ec3",
+    "2021-10-21/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "3929ceed3b627889a6335cac5d334c5d080ae6a76b1da373c79aad7c953c01ef",
+    "2021-10-21/rustc-nightly-aarch64-unknown-linux-musl.tar.gz": "eef17c07cd783c2a3556785245280b3e0a56290ae4620ce324dffd88caff9785",
+    "2021-10-21/rustc-nightly-aarch64-unknown-linux-musl.tar.xz": "c4c33663cca3e7fa562dff2b95a4cd0ba5730d0ad1165e4a9e076ec380b8bb8e",
+    "2021-10-21/rustc-nightly-x86_64-apple-darwin.tar.gz": "9218bbf8d37c9c6a015abade1129a3b5d37453f144b2999b2f6b569044982ac7",
+    "2021-10-21/rustc-nightly-x86_64-apple-darwin.tar.xz": "3f6e46afdb9e4892af6398eedb0481f126b0612ddd277c72f9b974d7e1d05e4a",
+    "2021-10-21/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "62e82a4283298165a0a7d656494d9f6da83cf44e098c337cfd7032acf96d0ebb",
+    "2021-10-21/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "efbe3e311e249a5f5a4166249cea0b26c413a9a46bc29dc7c8b35f9235573473",
+    "2021-10-21/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "af6c9b69129a4a81fd79481f16f9feb1d4f726859b8d888cffc6fa8231a67c10",
+    "2021-10-21/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "27766f5c9002b45bc014986f7d0b63db08a6329e34eabbcf34d619edad1543ce",
+    "2021-10-21/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "0bf65939240f9acbdb08cc4d22b9fb14357d29ee36f4bfc11d4ecc87f07b01db",
+    "2021-10-21/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "32e6a87d82b71e920099b7d2cbaf84f719fcbed0eb7263686a1d04506595ba11",
+    "2021-10-21/rustc-nightly-x86_64-unknown-linux-musl.tar.gz": "1a9bb9f7cbb5465de5976e75a730dc88a4081ded1f9fb54af1fa514a15b88732",
+    "2021-10-21/rustc-nightly-x86_64-unknown-linux-musl.tar.xz": "f3c755125254c81a4f7198e128efe5d216246d5c74192bc5a625be962b814155",
+    "2021-10-21/rustfmt-nightly-aarch64-apple-darwin.tar.gz": "51d764ca7e1c60fed329b1cbbd2a6a56e5b41f7b728a170745f8a4b4bad10b52",
+    "2021-10-21/rustfmt-nightly-aarch64-apple-darwin.tar.xz": "7842b3f13a0363b5ba251bdb97da21ed7909329f43efe0fed962c02f40740e2f",
+    "2021-10-21/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "2ff4e25789d019047ff451faaf44a67cd155b4c0ec6834487da6cea950bdc2db",
+    "2021-10-21/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "bd4b18f8b97d4bf4236f7226e60ee5eca88c9dfb67131926433e4316aac9a945",
+    "2021-10-21/rustfmt-nightly-aarch64-unknown-linux-musl.tar.gz": "ad433ebb84627c18d4c8b13623f52c46b23f628ef9a3b12e712381c504324960",
+    "2021-10-21/rustfmt-nightly-aarch64-unknown-linux-musl.tar.xz": "6c9b2a4380d4bc1915ac6c7cf949be20f51e08db22afd032b2898ebdcad1b258",
+    "2021-10-21/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "589c1412db27f90407147ce3acad3afdb1769d77c1f31156ad6101c317f28490",
+    "2021-10-21/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "55ae02b4d99eddd0286e8cc5b77522d868a86d4fc7fc2a92ea88cf75f79df47a",
+    "2021-10-21/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "49b0163001fd7dd7395f89b408c9909c5b33c4f3147902ec2f77e567bb9d6b9a",
+    "2021-10-21/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "27cb54b5580d8dacf88b6a5c94cacdfd9fd232e387712b62f35e9feb04e9d8e2",
+    "2021-10-21/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "d76aca59bb56c6f2e01ab5da9461e058814ba2fed6ebc3abb6bf55ee44a241cf",
+    "2021-10-21/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "52fdb604a22fab066609c48aba5e5857a3b99414cd376ad9cb5c1e56146018b1",
+    "2021-10-21/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "d53c942dc0628ec0214f0eff51ebdd8c70f2bff1293909c908e063c9153144eb",
+    "2021-10-21/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "9ae03aa60e3c415a0a1d4b198b19fb5528fcd302c8db012b784905ae6704d9de",
+    "2021-10-21/rustfmt-nightly-x86_64-unknown-linux-musl.tar.gz": "21b3db961750e8a6ff83d2773e0feb86292fd92fbcda9f3362976b04b9069254",
+    "2021-10-21/rustfmt-nightly-x86_64-unknown-linux-musl.tar.xz": "f60e7dc66b182be2f8b0d6c77364fa181932da51f45f3d8d3b95bce2d620d6b2",
+    "2021-11-07/cargo-nightly-aarch64-apple-darwin.tar.gz": "1947ba0d6b97e097bad279bbbf891d7a65d3b1611280dd88e82fcdb9f832cb3f",
+    "2021-11-07/cargo-nightly-aarch64-apple-darwin.tar.xz": "dc750f7222f7d6f6e3bac551588dcdd33ef020a97ca65c0b0fa3379592096967",
+    "2021-11-07/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "fe70a3e01abd01738c51479a7bc834392005cce661969088dac220f1b5fce31e",
+    "2021-11-07/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "3233ed7e3eeca9345c292c0bebb22341deff46d045efe539313e90b2f6311d82",
+    "2021-11-07/cargo-nightly-aarch64-unknown-linux-musl.tar.gz": "987df6c4597a26c1a9bc0f195312cc96dcf2fe1f3651e91bea72a34f6dbe4d82",
+    "2021-11-07/cargo-nightly-aarch64-unknown-linux-musl.tar.xz": "181f1bf57e1149f656208b23d54c145082c8a3a74916838e2b6ae695face6dca",
+    "2021-11-07/cargo-nightly-x86_64-apple-darwin.tar.gz": "968790a3027da539c57caf194b8feafc9b01d3482566d58f2e012e8d00c28265",
+    "2021-11-07/cargo-nightly-x86_64-apple-darwin.tar.xz": "2c0ab6620cdf8a1ab66d1cff5f4b22860ecf6b1cfe06bc5655cb624c8cb328c0",
+    "2021-11-07/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "e56ce94434929c1a4eb2bdfdcfb19e4194ff177c1d5934403deadd3db4304f91",
+    "2021-11-07/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "306ca2174c5f83200f8d1ebf71843515173c7bfe8d267825c3218aed6ae7287e",
+    "2021-11-07/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "51b2935810f845a9c85c51344488fe403ce13d49196135318373888726752339",
+    "2021-11-07/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "09efe1d378129951fbfb36254f88e0292626f3de9fd69feb4faa1f3834d7a241",
+    "2021-11-07/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "66f027e3245c2fb444a272c9429c6b6334da8afe1ed87ac5ecc68f357cd37c82",
+    "2021-11-07/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "1a011acd1a3f8145aec817808fa778cceec0c65a0ea8ce2bd492017507b5dd9f",
+    "2021-11-07/cargo-nightly-x86_64-unknown-linux-musl.tar.gz": "f6b4e44c2abc28281da5e03c0a957b8b54e22de34f6cab94894efbace7343c02",
+    "2021-11-07/cargo-nightly-x86_64-unknown-linux-musl.tar.xz": "ca2099b7d16b7df063c7cdf27f403caed00dd49108ad96153f3d4e0cae0cc668",
+    "2021-11-07/clippy-nightly-aarch64-apple-darwin.tar.gz": "f16cae78cd8cadb8389817489283a572021a5f944e80c5c328ee32a83fb869c7",
+    "2021-11-07/clippy-nightly-aarch64-apple-darwin.tar.xz": "4f71ff5a856ac16ad7ca6663198c58191b5517ea348aea84d82949ed2e4f1df0",
+    "2021-11-07/clippy-nightly-aarch64-unknown-linux-gnu.tar.gz": "b0cf7f65fb5a903e62551e49b9341690b4f800552b34a4709ab8630a5cbdb71b",
+    "2021-11-07/clippy-nightly-aarch64-unknown-linux-gnu.tar.xz": "20e2f0259b0bace5bbbbca9df41dfbbfe1a5764e8b561e3fa65e10f1497a1b34",
+    "2021-11-07/clippy-nightly-aarch64-unknown-linux-musl.tar.gz": "b320ed68f8af98cd4c857ab7e3b2e3bed38f580ed6b72cc0f71e90e8dbbfb72d",
+    "2021-11-07/clippy-nightly-aarch64-unknown-linux-musl.tar.xz": "a276c594879d167d9bf66882741e006db20e309905594112e45d473afcf7124b",
+    "2021-11-07/clippy-nightly-x86_64-apple-darwin.tar.gz": "40f91067724c983bf6061a5db4ba90bd620718f564648287ec52b348d76d012c",
+    "2021-11-07/clippy-nightly-x86_64-apple-darwin.tar.xz": "01649987b07e04109fa69150f45bcfff49a30c1b3fed3a5d6c964b696f2355c0",
+    "2021-11-07/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "1279ba3f78951e5f2180f3f07fcdbf4eb561ba5cddf84afdf53ebdd4b8ca2e24",
+    "2021-11-07/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "cbfc1294eb2b4a00d7c046a30f44746792de42349f2dd889daaff7e72397b35c",
+    "2021-11-07/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "3aeedabc9dcf54048f59a8ba9e695495ea3f570b88df98ef03c8d1247fddeaf8",
+    "2021-11-07/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "78193c8e37573e0122257c437b49f3b332d0db0d7679f4ef9364853d6c98b510",
+    "2021-11-07/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "567b3a83390c893077b540cd07f4798d8d287e30025f437ff4e21609b1a773c1",
+    "2021-11-07/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "d03d8be1ea01369684b0d8709606d3a9e504d87fad8b5122190cf6b6245dcbb2",
+    "2021-11-07/clippy-nightly-x86_64-unknown-linux-musl.tar.gz": "a97bddc05146f2c55016af4cc53cd06786a01eb111dfe139bc421eff1c54c645",
+    "2021-11-07/clippy-nightly-x86_64-unknown-linux-musl.tar.xz": "e96c665c6c08c25367db2effdc3e8c9d49ff67950cdb66c9b80c866ab74201b0",
+    "2021-11-07/llvm-tools-nightly-aarch64-apple-darwin.tar.gz": "f3c5c93432ac2c7397ba5bf598f36a9e05ccec1ba8646e7127dde13741e91e78",
+    "2021-11-07/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "20dc766f97f55f908f4275f4dcbec83a449ac79cee4882e08e5416acaae7f365",
+    "2021-11-07/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "efc96c6a6d7cb0cbe254f1486c5b9678078aca950bdadfc36d8218fd0cd739fb",
+    "2021-11-07/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "c9143e7f9bb8714e67dd0a2f094eb814be415aab387d7d621beaf94e6ae48439",
+    "2021-11-07/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.gz": "f760aeb71cab8abc582eed5766433a7851be2da80d20b75dbcae5df0d3c3be91",
+    "2021-11-07/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.xz": "b3cf46886613ee195355afd367b34e829f339cd0c2f8d1662a30d3d8ebfe83d4",
+    "2021-11-07/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "3b95d04628e75c2ab43298db610e519fe4c00057757bce67461264e2479d265e",
+    "2021-11-07/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "7fca2a5e48d295aeb6e7daa1138e9d95447297253864c344e79db0e31ebecc05",
+    "2021-11-07/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "26a88a8d0e0b2fd9336b85e8a8cc7aa0aef72efca48c0acabf40a5f9f9b9902e",
+    "2021-11-07/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "6d651e06199c61e8c91f0d06ebd52976886f59363e2ce377cd16af83f4ff6815",
+    "2021-11-07/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "064b8fef9689bb51cc6358e3239920117aa518e9d375be48d3d7e17ce4b7d2df",
+    "2021-11-07/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "d12f3196c8dccf0fa8d2b0f4cfe317abd0e2998d25d7061ed042a9ad5594563b",
+    "2021-11-07/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "a72f3f2034921baa4e8d2af412532df45d39d163ee6af77c1ed5da3be32efccd",
+    "2021-11-07/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "99628ca80ece129a713ac0b686ca0dc1115aafbfaf15bf45b1d867fe38ec5030",
+    "2021-11-07/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.gz": "da704644570b177093eb13486b3f34a6aa7c8b93fa565395eb15ad29bc75fb15",
+    "2021-11-07/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.xz": "119f7ec2673e8b51b87fa0cdca2df05d20981d65857a2174382491e7cad67eee",
+    "2021-11-07/rust-nightly-aarch64-apple-darwin.tar.gz": "ec27e6e751bf24916e53e3d601bf4e406e624f4ed894aeddef6b418622b41316",
+    "2021-11-07/rust-nightly-aarch64-apple-darwin.tar.xz": "1f96a8c3b72cf9fed3ac81831311a68ec669443ff19607d63116109d858014a6",
+    "2021-11-07/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "cdafea25f36d618d754ddba007ffa0cc0e52df60c160187f68f7d41a91efaa12",
+    "2021-11-07/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "22472088d378e4434b808c3c49686a04c856ff765c76981ca27b7eca163caef2",
+    "2021-11-07/rust-nightly-aarch64-unknown-linux-musl.tar.gz": "b204d0979da8fa81a5be832868df4ccf9031e9582d2a9720bd17be5af845c055",
+    "2021-11-07/rust-nightly-aarch64-unknown-linux-musl.tar.xz": "a29847f7da534ca68fc5473fe4575c883a1380858ee04f10ee76172718cb12ce",
+    "2021-11-07/rust-nightly-x86_64-apple-darwin.tar.gz": "fca7b8c128fc2c0b8834d06f6ebf78e4d2030be83a87a08f2f9f5247d2be8470",
+    "2021-11-07/rust-nightly-x86_64-apple-darwin.tar.xz": "865137f75cd6bf7a130e8e225df64afae424c2ac7ce9463c848cb7c00c355643",
+    "2021-11-07/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "bf441a201b48d61a5908952367f830fea0642993d518972fd3acff62b6c1e321",
+    "2021-11-07/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "d2ca09cc5c869f6d16ec04524db4619c94749f7c70125100bada236357d77849",
+    "2021-11-07/rust-nightly-x86_64-unknown-freebsd.tar.gz": "bd0791a44cd3c8f2274b42b9206016ac948cac97b642f0303c0f19e0fffe6089",
+    "2021-11-07/rust-nightly-x86_64-unknown-freebsd.tar.xz": "80de71f0db59d2c66fe9834d52e74335ddf55554d42263920460e9a5108e6bdb",
+    "2021-11-07/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "ece5f02e4c1cbaf6801fab787d834166aee7676f7c3b2272ff9810d6d541af27",
+    "2021-11-07/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "e10e609cb401f113c1c4efe3f4507c4e61ae1c11da4543e46a7421d314c24b73",
+    "2021-11-07/rust-nightly-x86_64-unknown-linux-musl.tar.gz": "926a2b44e0c2f093e62e696b6e53e3b5a9d7882e8c426cfdb364a3e2a2541ebf",
+    "2021-11-07/rust-nightly-x86_64-unknown-linux-musl.tar.xz": "807f69fcf8a1df7dbaccbfec5caabb06a0f0fb49ac3d290e6ed64bfce33e65d2",
+    "2021-11-07/rust-std-nightly-aarch64-apple-darwin.tar.gz": "478dd2f878e791185e565f9a6a2ae0e7a35c472cce873e50bd6b9cf56b364a38",
+    "2021-11-07/rust-std-nightly-aarch64-apple-darwin.tar.xz": "a1ce7197a34604172e3cbafcf22beae591774fb42978e6501c0071d78a4e3206",
+    "2021-11-07/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "31e933401b920a16b797f8ebd3f7cdac43647db5b266f8e812a847f34f167b66",
+    "2021-11-07/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "1ef6af35e4ce4c32f3c7fd30c5416dc4eff99bb2cbb156e3f0e305654325b6e2",
+    "2021-11-07/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "b27f126391825d7db36ccfb688ac3c1d3ded91b9b26446dd1da7ece05347f96d",
+    "2021-11-07/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "575008d1e9010710b935d6cc1864351bbd60927665e4bbf1a0390c434ff6b03d",
+    "2021-11-07/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "da22f32ed22a44d1cf478b52e062494ae063cc3ccd06b12964d6000cbae54186",
+    "2021-11-07/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "58abf39b0e663a03cdbbd55077bac4dee606eabecc1502e01dea24cd83d9197f",
+    "2021-11-07/rust-std-nightly-wasm32-wasi.tar.gz": "02fa9f517dea1f31eaa6366c3de5bea2a6c3c09f16758e7a70518727d77191d2",
+    "2021-11-07/rust-std-nightly-wasm32-wasi.tar.xz": "f6edb3a8d9cad814464ac9389144022607bfe9f547179d6e4ebe9c04302ca111",
+    "2021-11-07/rust-std-nightly-x86_64-apple-darwin.tar.gz": "983aa9ada64afb54453b39e572f5d622b2f390dcbeef1002aac1a5d11a50b3a8",
+    "2021-11-07/rust-std-nightly-x86_64-apple-darwin.tar.xz": "90fbbce64e0eda69dca0953beba37f28ac547292cd1ba5234ea2818092051059",
+    "2021-11-07/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "408884156e55fe210880e7ee7612a5bbbb2300e4dc4d1ee0cd3726a1225343ca",
+    "2021-11-07/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "8ebca7571b45ae6f40a469b6b1b3c7ae21e45f5692cfb3520fae16e82537bc92",
+    "2021-11-07/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "c42b5c495e216764f56e538f0cd54fb6cdf193cd3348a7f37b157f27f440ea43",
+    "2021-11-07/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "90b47a4e5947f4323c133bc848ac3adb7c16750a9e3c5b6bebbf05f7cebfe0e5",
+    "2021-11-07/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "218743da51034586ed84ad43f95d95a38805403f0e31faaf247eedba883fa8b5",
+    "2021-11-07/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "d130a1c12cbc9254eaf63afa1024ed1ce2d9d609cfb2ebc738bb07ac160cfe7c",
+    "2021-11-07/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "f5733b29a9c1102355cde885cebf5da42b738632e7dc5919e246c34551126c50",
+    "2021-11-07/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "ceea4c0232dea58635d697e496433ec571a342e3460e1ebcf57bfbf8609d24f6",
+    "2021-11-07/rustc-nightly-aarch64-apple-darwin.tar.gz": "ccfd72ed6a189c490d22ea91e53ba7d217db123b6c4015de94ac88973a4f031c",
+    "2021-11-07/rustc-nightly-aarch64-apple-darwin.tar.xz": "e85a44fe9ac7ed3f80e8fc0e5312e8ab132c389f910f1c754c17694b57edd451",
+    "2021-11-07/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "3f5a445397f8a7dece4195b7c181398b6d7c06480bc59ce92058c97f68172353",
+    "2021-11-07/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "a14836b4cce04635c5d6a1d3bd06cb37b07bdd430cefc241591280e3909c01b2",
+    "2021-11-07/rustc-nightly-aarch64-unknown-linux-musl.tar.gz": "5588596a3ef4bd938802349faf64159fb661f04717fef2d08acfc50d35de4673",
+    "2021-11-07/rustc-nightly-aarch64-unknown-linux-musl.tar.xz": "a4bfbe1fea7625b735804592326a29a09d74d6b269d122825df10e045f0e88de",
+    "2021-11-07/rustc-nightly-x86_64-apple-darwin.tar.gz": "c3df9cac3419633ae1e9b6a41183a413a3a722a72124394d441d5c914aa9f91d",
+    "2021-11-07/rustc-nightly-x86_64-apple-darwin.tar.xz": "e21556c0841684727cbb869ad25c4eff437713702f2cae5224584a847ba330ce",
+    "2021-11-07/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "e218ed52bcd57b25a0eeb8a9be4fe954ea226f785940409cc6fc378ad8f25876",
+    "2021-11-07/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "b66147223c441e564e792f4a52293977e005ff976f2c59df35b0c19bf833c45b",
+    "2021-11-07/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "c5f2cc78f5f59179e0fb3770e58eacc44eddcb0c3b2c143b8681776b4caead88",
+    "2021-11-07/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "9bdf8811e5e3b89f8c0dbf81e1967de4015c68338e01fdc20be7445146f86ebf",
+    "2021-11-07/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "e7e6dbc8291d283a890c994ec9507dfce25aa93a47b2cc213f845b3bedcd2002",
+    "2021-11-07/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "a769c89d60869e43aa686b35edde453bc9fa594f4f6defac11d8469f9592b496",
+    "2021-11-07/rustc-nightly-x86_64-unknown-linux-musl.tar.gz": "95fcbd60d484725002c1d20134160201417cc6715ba4e320fa30f95afd95b4e0",
+    "2021-11-07/rustc-nightly-x86_64-unknown-linux-musl.tar.xz": "a59296b0e9c2621e154725b23d96fbd842926f527bc1cef32a883cf0ec0a0465",
+    "2021-11-07/rustfmt-nightly-aarch64-apple-darwin.tar.gz": "3493f540161825feb81d022bfb6f84f2040f5ad014640e9bfd1a4b93902113c4",
+    "2021-11-07/rustfmt-nightly-aarch64-apple-darwin.tar.xz": "171cfffe916354dee2ea93338ab2d3b27250d5d80fc422a42f2f3519c63b803a",
+    "2021-11-07/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "58291d3b3045b3c2f156d7547db3d5c117840663a6d10425580fe2936c1f7f9e",
+    "2021-11-07/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "60d7ef1f0443923edc47b86b15b1d1437b50f961ea396342d656448723c99b17",
+    "2021-11-07/rustfmt-nightly-aarch64-unknown-linux-musl.tar.gz": "85178f75658b69291bedfae0d7c27505f7b0aa0fe53de3922d2f3f671d601e13",
+    "2021-11-07/rustfmt-nightly-aarch64-unknown-linux-musl.tar.xz": "4b7d0ced50df1da2e71055a8e6d90af8a2c32b266d81fffd31e2f9a603e07d46",
+    "2021-11-07/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "71bcbd9b0e8417e8cbcece46701a3e023eaa596377bfa66507fad0ad383cfd46",
+    "2021-11-07/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "94eb1cb81d0cb2b9d05a06f0a2cdcb5b26ca0065180447e282a35534e411d355",
+    "2021-11-07/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "c082bc7eb8d04e4d7025e23b443b14aecc5d504e3de21c1c110c3e04d05d71f0",
+    "2021-11-07/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "6f43ced0bdf1f74d8cf279d20cadbfa4c4784dd6cc28813f7ef853458f9f03aa",
+    "2021-11-07/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "21815c052a39c5c5d361bbb473a2c36125eb657598359f6b343e352c278c0543",
+    "2021-11-07/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "ff5a7e6d2996bdcd8963b99d9ed8c516c573be8881284e50697b093b667febb1",
+    "2021-11-07/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "102e7e2300fd6dba8aaee468b887ea7fdc43f39f012db2815040586959f6aa36",
+    "2021-11-07/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "7a01a68ef11ce353e32545853ac97eee77648e8aee1d26403108ddf68e3acc35",
+    "2021-11-07/rustfmt-nightly-x86_64-unknown-linux-musl.tar.gz": "8ac20334b400e0a6e4b487e3536f7236f9238a45d63f490baeda7c47fac72504",
+    "2021-11-07/rustfmt-nightly-x86_64-unknown-linux-musl.tar.xz": "2ae573004ad28697fedba75cdf65790199b8bb4bf9623093281802a604c711cf",
+    "2021-12-01/cargo-nightly-aarch64-apple-darwin.tar.gz": "424a002ad3d9b2974aebf3eea8400081e3aa66b1b4aea0e8b12534b0d6857bde",
+    "2021-12-01/cargo-nightly-aarch64-apple-darwin.tar.xz": "582a33b9f79e1786da7229652630d05d784e04fe82258c7930785d9c6d287a1a",
+    "2021-12-01/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "56ef3a6f98e063b7297f5a92ac9aa20fd8d1a235a4879a10c3b8a0ebe2e57245",
+    "2021-12-01/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "cdbefca2aab3e19508e887ed66783d704000832cc2b1d962a59d6ec3e5f26034",
+    "2021-12-01/cargo-nightly-aarch64-unknown-linux-musl.tar.gz": "71d08d9ac3da4c628e91b0e9e0b34ad55d2f4904953003ea96d2b016837c5f1f",
+    "2021-12-01/cargo-nightly-aarch64-unknown-linux-musl.tar.xz": "fa83f10582f909903e0bc0dcd67c1b547ee6f3df59053ffca13ff8b073e024b1",
+    "2021-12-01/cargo-nightly-x86_64-apple-darwin.tar.gz": "4d12c1d9034cf759c15d30d768a3010504621f5ccfc22026bf6591afc16bc780",
+    "2021-12-01/cargo-nightly-x86_64-apple-darwin.tar.xz": "bd82a0284921407245d01444e18436fad9f6836ff5a2ac1f1fb4f4437b28d80d",
+    "2021-12-01/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "06b258fd6c10aa97bcfdfaa9e6d728b7024f1ca9bb4b69978ee433710e1235b6",
+    "2021-12-01/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "da38553654363c868784f6e579dddfe21a34d7b5eab26f4dad5a7709eacdbac9",
+    "2021-12-01/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "924f3f0b15d8109261c4a28050e64eaed0d5f2dba9865920d7a3f94f613d2517",
+    "2021-12-01/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "a560b3c2e320061dc497463f880f503cda03dff77f4219c7c1ebf59435aeea2b",
+    "2021-12-01/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "0757e9d7faa9b601b35294a44b6224087f6df384e157f8a80a8bd7f609532987",
+    "2021-12-01/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "64b738b823e2fe91dba33eabc02c96871ddd309d56d4173d2caf7291a4e2cf6e",
+    "2021-12-01/cargo-nightly-x86_64-unknown-linux-musl.tar.gz": "bf5bcfbe47ccc49d830623a57b723a3c7436637c36d84b53f597d85ee1132cba",
+    "2021-12-01/cargo-nightly-x86_64-unknown-linux-musl.tar.xz": "2e86420bc605f227a4ea584539e62c338836d867e71e4003aaa3d2f895a85e3e",
+    "2021-12-01/clippy-nightly-aarch64-apple-darwin.tar.gz": "bcfd9191c6cc2b779ddb5c5bc5ceaf3fb8efa700123c175a0944662809357efa",
+    "2021-12-01/clippy-nightly-aarch64-apple-darwin.tar.xz": "cb6e9712dfc36065fe93f4baee85a78494c0fb4c37a9384fc26ba18376a70a23",
+    "2021-12-01/clippy-nightly-aarch64-unknown-linux-gnu.tar.gz": "4903c94d97700b9ad70689fbaaaa939a2f37d4736cf87bcf900ae5e909a6917a",
+    "2021-12-01/clippy-nightly-aarch64-unknown-linux-gnu.tar.xz": "b54dffcb1994cd999186402d38ff8d36b3fdfcb2c0a85928c8e31f8804fa4daf",
+    "2021-12-01/clippy-nightly-aarch64-unknown-linux-musl.tar.gz": "7453115f2b361db826c5a6def06bf9531876cdca77f9b3a8339c0446d0e88c8a",
+    "2021-12-01/clippy-nightly-aarch64-unknown-linux-musl.tar.xz": "0f6597d30bc5666057e738cef19717531b902dce69447fea460838434a9b1924",
+    "2021-12-01/clippy-nightly-x86_64-apple-darwin.tar.gz": "b9f69c5e50fda9d22d029f51e181971f9d7acdd81607fcbbec8da87ee2678acc",
+    "2021-12-01/clippy-nightly-x86_64-apple-darwin.tar.xz": "d6e1c670ff656902fbba794848aa48916a2a5c69b5cd6dc983694efddd0fac3e",
+    "2021-12-01/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "fe56e5385392eb7109d2450eeea78a744a830f0df4bc08cef62ed70530c6f7ff",
+    "2021-12-01/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "edf0e2e88df31ffd837a99b0b83fbc50ab674be8ab4e12b1ad9f01fd19dea20d",
+    "2021-12-01/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "2fa59d32937de93d322a0c3458c6f732950bae75f7487ce10516b2a2299dba3a",
+    "2021-12-01/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "1321b291b8c75aa804befcb283d7a0869e02361cec6eebe2bccde57f21ac07cf",
+    "2021-12-01/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "238167df07be8b65f325d7409d3822c42832db3afa289fd303619acfa62ebd4d",
+    "2021-12-01/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "5c594d8c4bc6e26fcb7e7ba29e5f07868285f83851dcab1320127ca46a6f7e1a",
+    "2021-12-01/clippy-nightly-x86_64-unknown-linux-musl.tar.gz": "12cc9629b9fcb7760d38b38ddb19f6ab173994fa19bae9ea0ef10e560b36e9d6",
+    "2021-12-01/clippy-nightly-x86_64-unknown-linux-musl.tar.xz": "fe84be1bb47b14342322eb7d5ad7ea4e6e131f8cf69bce2c2dcf1fd6045190cd",
+    "2021-12-01/llvm-tools-nightly-aarch64-apple-darwin.tar.gz": "3889ad569be62d99cd0f1de0ccf404a7176c862ef6e001130438d86067aeb266",
+    "2021-12-01/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "f9792a68cefc32dd5442b0db96dd2bd24aecce437a397109e2faf65f03e7247a",
+    "2021-12-01/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "d0e4f1e40c769376728fe5bbe1f3e254959c33513a18dea1e111cd2e2d2fe8c0",
+    "2021-12-01/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "fd9dc24f6fc626f8a68f08484accfa8e57eb34935db5d825a592a444ea139312",
+    "2021-12-01/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.gz": "2960b9000f0c32deb12096e99ae26af4f85d2313c0227a95fae89637a10850b7",
+    "2021-12-01/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.xz": "602909ee390ef1c6de67b58824b2e90715e99d2daa865195018a7914b7477b20",
+    "2021-12-01/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "1ac4f401421e7bc34a5c17aa5f8a0802f5e1bdb9341d4969ff058ae387e95eb4",
+    "2021-12-01/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "04da4118b86dc4745e44d6e3efabf574d9279a748283cf4338bc9357c996405e",
+    "2021-12-01/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "f7bc73ef6cc909ad1a20a9c91386ebb67d0dd3b300698ed50a3fe314921f636c",
+    "2021-12-01/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "505c3ca200b5be7266e4b4902886f158575e32e4709d9b5ea4de2a731b1a68fa",
+    "2021-12-01/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "9755dd8b446a7fe327b28e699b43c64a8088e87b7f501869d8bc77c7bd17e80a",
+    "2021-12-01/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "180f6a85122399fed6f3e863ea6d52e9d74611a1378e6f3e096fc6070301c6ec",
+    "2021-12-01/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "845265609040d3a620e731a8d1f0f59f231ab6699ffd6132411437aa9b3c3060",
+    "2021-12-01/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "12082ae503aec039c5b208e0c1904b6368bb836bebbf7849e5b60875c1260c71",
+    "2021-12-01/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.gz": "68660d1226628edcbe80baeacc075d8d4f9c6ea87bb22fc55b6727e6807e5d6d",
+    "2021-12-01/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.xz": "b0f20d9fe22eb8eb9d1243d2abb0ed9a470062766f883b9bd8458e2575ee5cc7",
+    "2021-12-01/rust-nightly-aarch64-apple-darwin.tar.gz": "c304a7a154b8bf44ff7a338996f1dd249678871bf1d24977e8763912197f89aa",
+    "2021-12-01/rust-nightly-aarch64-apple-darwin.tar.xz": "4757ecf06c42d347ae2c49fa263d9ffd3213455a77101088a7df76b35210c3a6",
+    "2021-12-01/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "b0b3dbde13f8cea3086896efe8402b87cf281260ceb4bf8d3f1bfd1216a309d9",
+    "2021-12-01/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "60543aebf87862b1c587000ea9bac574193cc8f48db5ac2a0499c0d62f9cf54b",
+    "2021-12-01/rust-nightly-aarch64-unknown-linux-musl.tar.gz": "3e210d5da0384b90e90933683ac19ab1d2439c6b920db8c24e15faba484c86e9",
+    "2021-12-01/rust-nightly-aarch64-unknown-linux-musl.tar.xz": "7f8defd22af5357a73bd43903581d8d784a5828a30c8839e45d02c587095fffb",
+    "2021-12-01/rust-nightly-x86_64-apple-darwin.tar.gz": "720d6058352322f1d59683236f0d5092d90ed64ed3f41cee80aa55d3d5a8c7ca",
+    "2021-12-01/rust-nightly-x86_64-apple-darwin.tar.xz": "70842d01281829a95910f9e2465da3df1ff8e479d824b9d38e1d09f124121561",
+    "2021-12-01/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "e4e42a29016982376a9e178cc83874480bd300e5fc6262ed3a1034ec0b80349f",
+    "2021-12-01/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "893645660902c826b7096eac6da05a16fbc64e5ada2136ea922c4ec1551ad4a8",
+    "2021-12-01/rust-nightly-x86_64-unknown-freebsd.tar.gz": "a85e08ec1a52a6bd496400de638bb2e57c7f1192c740e03a776a11e1e892620e",
+    "2021-12-01/rust-nightly-x86_64-unknown-freebsd.tar.xz": "c67382418dc32171183044fdec97e5eb7d18aa7c622215b691c3a3a4f2356725",
+    "2021-12-01/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "ffcb8b45a95221f8d77bb93faf3fd0e2a7f18e6759e631a45295883f996a4d40",
+    "2021-12-01/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "be63e8dcbe4541de0564ae0207dcf3206e6d23da72857153d0be3c8c6d7e5efb",
+    "2021-12-01/rust-nightly-x86_64-unknown-linux-musl.tar.gz": "4d98286d2ca36cd348de7a78c8a127b6fec181e1b00fd045be0ad4fa2b466e83",
+    "2021-12-01/rust-nightly-x86_64-unknown-linux-musl.tar.xz": "1941a71395b4afb527c01d70735db4598fc18b45da835685a7c00b5d46af481c",
+    "2021-12-01/rust-std-nightly-aarch64-apple-darwin.tar.gz": "907bd677f494c0858803bcb3c00c1da60b9ec0ff25c71960a896dbf89a7a61a5",
+    "2021-12-01/rust-std-nightly-aarch64-apple-darwin.tar.xz": "f33bdbca6ca44d8815c095295f33e3770c5070932a94421a4ac4bf9d8c4248a8",
+    "2021-12-01/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "3ae916ceef3364a49c3eb3e936af95aec043cad8cb293fa3f7703846728cd398",
+    "2021-12-01/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "0475980093c91049d06850781ff7ccd14537a51db21a1e21d4996388d16cc61b",
+    "2021-12-01/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "71421760124795171964945203719f7dec1924beacdb73b9658d01c8cab37b5c",
+    "2021-12-01/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "232ae5b96a3f3d0f3bafb400f4734d98e6e4804e4d3813a66326727ccf9aa8ad",
+    "2021-12-01/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "e24999e365a8701b8466d2081ec61589b1c4a9333256779b60594688999d2334",
+    "2021-12-01/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "b9dc27c0049c4d248604a72c5b02cb8e6184df731658be202c0b516f9b0d1a9a",
+    "2021-12-01/rust-std-nightly-wasm32-wasi.tar.gz": "5b31eb7ef9c580ebb751f4c41851ef3184261e2fc6c3481567cbb36a816681f1",
+    "2021-12-01/rust-std-nightly-wasm32-wasi.tar.xz": "d1cc6d3611e3ba66403fa5744cf75f768c2141335a0529873530f56e17ec2912",
+    "2021-12-01/rust-std-nightly-x86_64-apple-darwin.tar.gz": "fc84ac87b089a198731e82a203d38a3a07b72e3f7399b0b47c1d0ec2be576e0d",
+    "2021-12-01/rust-std-nightly-x86_64-apple-darwin.tar.xz": "df5dd77644ce2af8671cddc3ed3ad467582fce0c951c872e724fd2ee6d6a8de2",
+    "2021-12-01/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "9b6e945d5a42162b5f3ec792015084e4f349a338605478630b874e9388662300",
+    "2021-12-01/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "79c435b14c16a59d648965157c1898866025e8f53800496c36b41898b3e7247d",
+    "2021-12-01/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "7a03e9faefc1f36d6b6c240371c7db539593cfbed47ca6dc141e3a0c2fc71bd5",
+    "2021-12-01/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "58873401465af65dc965afb53a47dedf532af271fd7abc6791c4a541fdf9344f",
+    "2021-12-01/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "003b3e83e798d635206ca06c919696f2eea7277d9721c8623272fa33059ec2ab",
+    "2021-12-01/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "7f781fecc40e63f48ab323e70852ee4f4f2fa2d51385952ad9aa2b219408ffe8",
+    "2021-12-01/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "f6c14b5df1fa6341a1b5f4dfd53c2795e2f7c43fc522aac57d055143ebe5e06c",
+    "2021-12-01/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "0cc50546acf46cde19a55b556f404c13e1099d474b65fc003473fb048fd04997",
+    "2021-12-01/rustc-nightly-aarch64-apple-darwin.tar.gz": "ec3af041e4a8aa4bba5d8565502f983f358d9884cce61911e70bb2b12a63f9a5",
+    "2021-12-01/rustc-nightly-aarch64-apple-darwin.tar.xz": "b7cb70d88d71a130eca4e1ba9d2a2addac88c5b7234865d30f1a8e533c633e8c",
+    "2021-12-01/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "0f863eb5a00810f140bd6a10ea74e9a2011e852958ac8f8ca50940325864afb4",
+    "2021-12-01/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "9dc890ac42dea58dcdecd1a47f58ad4c78f1c63d9b11d22c05c430c853ca84d3",
+    "2021-12-01/rustc-nightly-aarch64-unknown-linux-musl.tar.gz": "e0432ff13bdc00a36fa1fa20b736a385d6803795855214438d256f0678edbc94",
+    "2021-12-01/rustc-nightly-aarch64-unknown-linux-musl.tar.xz": "934ea175723b8d092139c1021a0f7cb705ddd9efeaa1253537ecf89db9d41ba1",
+    "2021-12-01/rustc-nightly-x86_64-apple-darwin.tar.gz": "6c1557e71cf3aeeb244855c32a7ec9b0297dc66ba57cf17af4e16fd1388f08a7",
+    "2021-12-01/rustc-nightly-x86_64-apple-darwin.tar.xz": "c056c58f326b613ae38a215db12b3ea1c64ca9f92c9aa1ea6c56ccb341661b99",
+    "2021-12-01/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "41aebe787fb1a5699f0dd224e9e47270133fa4c971faa97cba2ac609c24828f6",
+    "2021-12-01/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "ff17a59dc8ddaebfecdf67dfbb74f7966ce217dd3ebcd4939e98652775244794",
+    "2021-12-01/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "33a34b95e7b541b51e5ca6f0c0096757c9afef0a0f71e0f7320352882937d240",
+    "2021-12-01/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "d09fda76e44c7c3a8f26572c078568a9c217c7b2577c20447182d55ddc29aa85",
+    "2021-12-01/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "3b83f5195aa3a73fc9b17acdffd67ff6198f26c075d8b1e6c82a8bd717c3a031",
+    "2021-12-01/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "28f5e0d0027575c05ace8f2c61e63543d3fe26d95056848417ad5f2d0d659ec1",
+    "2021-12-01/rustc-nightly-x86_64-unknown-linux-musl.tar.gz": "a82281cca27567897b58b85a3dad0888b6ce13d7987fbff3397501469bca579e",
+    "2021-12-01/rustc-nightly-x86_64-unknown-linux-musl.tar.xz": "887ba60af838ae4a750121b1dbbb626ef42178229085e029aaa497ff0706c161",
+    "2021-12-01/rustfmt-nightly-aarch64-apple-darwin.tar.gz": "42a7f5965d0af7df73c7629e701708ddd59f9a2a3fb4b8656c78d5b0dde0c0ef",
+    "2021-12-01/rustfmt-nightly-aarch64-apple-darwin.tar.xz": "bf6031c57bdf468dfb88c705411f610cbbddf1d74a2e8483ab95482530f9858c",
+    "2021-12-01/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "e8cfd49797ac43557ee2eae7543d95c1f9ef5b2d651ae026152b0ee38748bc9e",
+    "2021-12-01/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "1d188332ec78fddde736fdf54022d3199f9bf05894aba58553c40579918b0478",
+    "2021-12-01/rustfmt-nightly-aarch64-unknown-linux-musl.tar.gz": "c4b392988b1e6330a9275248118a348ff029d83d37ad948c568de280c8fb016c",
+    "2021-12-01/rustfmt-nightly-aarch64-unknown-linux-musl.tar.xz": "9ff9ddcdc6d6a1f0a8262c583cc3dda404013cd6a07b0dcc2083269ec601a839",
+    "2021-12-01/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "6993786d7fc1223be21f0b11cfedc7cdbc0cc951f52445e982445e38dc4a5f0d",
+    "2021-12-01/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "13ee165896154e979a3249a88024cafe17c20b1e259fed90bbbe57c11e697ff5",
+    "2021-12-01/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "d96a8c2622b511179a6c1b4a00e9aeb015d9ce33de40788358a6ef7e4b50215e",
+    "2021-12-01/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "7586cf2d1464285a20e43053bffcbd8b05165dec9c4ba6d56f1f73944a58e745",
+    "2021-12-01/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "5ac0969e1c2e3009f739ea5cb12b87808045f43a0635ee8ddec0b2b04be00814",
+    "2021-12-01/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "60b7407fa2e90fcfa346a4e5b5400a0b537266eba37c2df01943ec766f383953",
+    "2021-12-01/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "51f23dd0f8e14cab67f8bbd3a4aa142988ca0ab1155ddd2f37a22576dda6089b",
+    "2021-12-01/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "6f98060c92dbb1dfe502944dcc01da70b471aab9c7c6f77591c44009c65d9cc2",
+    "2021-12-01/rustfmt-nightly-x86_64-unknown-linux-musl.tar.gz": "a58f271f8859c79b33f8b30a33cf91879a85f740c3f8ec99c75f21933b220b8c",
+    "2021-12-01/rustfmt-nightly-x86_64-unknown-linux-musl.tar.xz": "785fd4c846b23acc198e2eb0fb956fda5bf6c662ab0e43b31271e7d459b0ce5b",
+    "2022-01-12/cargo-nightly-aarch64-apple-darwin.tar.gz": "28b2465970234b721799d0d7893ba3bd82db60dbfe9fce3ee280ba31e0cc05d3",
+    "2022-01-12/cargo-nightly-aarch64-apple-darwin.tar.xz": "f9eadf05af68f843eaabed2efc69097195af2b6c7f18047584457a9af4fb715e",
+    "2022-01-12/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "a48f67a2e9b3158579abe99218029f7add37927dd96b7ee297b19d898264c82c",
+    "2022-01-12/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "7074bab3186577f7381f3d392c7cadd6f13dbec8757431530f9c5df60a06030e",
+    "2022-01-12/cargo-nightly-aarch64-unknown-linux-musl.tar.gz": "20ecedf9cd58870c315bb215529b70d5d7efcc3091cbcd933097dbe3de643395",
+    "2022-01-12/cargo-nightly-aarch64-unknown-linux-musl.tar.xz": "f37701238855827578778f6f62acbb9afddda5358dcbbad82217b49b2e2ce8d8",
+    "2022-01-12/cargo-nightly-x86_64-apple-darwin.tar.gz": "2960a0f4ea742d6c1af1293f21d6b88e5d1d87fa5cf12950a44caf6f3efc31cc",
+    "2022-01-12/cargo-nightly-x86_64-apple-darwin.tar.xz": "1dd2921d993016a3fcd76b5eaf67bb0d880c68ee78b740b30a635cfbdf003486",
+    "2022-01-12/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "58b3c44263e2cfdddc6c71604c0a20f730363ac29e7d2f86570a7910f753ce6a",
+    "2022-01-12/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "2b3bc100ea7533aa7503ee68cd8920ac80fd0c6d9b34b1a858b8467f75d45cc6",
+    "2022-01-12/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "fc83fb1358e6fe796879077ac8b79168694a6ddd2d8a0b90ef8bcdb6fdaa6aa0",
+    "2022-01-12/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "6b4b15449230d7cc4b38826a12e1d741e14fd5ac9a27d933ff2b5756fb42b378",
+    "2022-01-12/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "2dc110d1caca2829ccaaf51cf4e553a1f5954364b7087c881efce52d18580817",
+    "2022-01-12/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "6c6fbdeeecad683bdba9bd0296921242d9924d81a873af586afdbad4dd530dad",
+    "2022-01-12/cargo-nightly-x86_64-unknown-linux-musl.tar.gz": "36b1c88f08eb35048937ee29a681405852198cbfb17fb29117f27ed185d2aaa1",
+    "2022-01-12/cargo-nightly-x86_64-unknown-linux-musl.tar.xz": "166f6243350570608e1f5b8bd1640cc7c6afc6fee2993e28de3f14f368c35f72",
+    "2022-01-12/clippy-nightly-aarch64-apple-darwin.tar.gz": "22518551453026be28657094dc4d364369357bdc59c1ac8c785bc67d59f24acc",
+    "2022-01-12/clippy-nightly-aarch64-apple-darwin.tar.xz": "5b1fb2d4df8742f0dcf42a7b4db376c1b724caa3667fc677d90d6dae9fdd9c48",
+    "2022-01-12/clippy-nightly-aarch64-unknown-linux-gnu.tar.gz": "f89ca2df2eacdc7466feb2d502f81d3640bf1295d590011385366e331bc862a1",
+    "2022-01-12/clippy-nightly-aarch64-unknown-linux-gnu.tar.xz": "3532234610c3253ccfa3e3ed9a534f5610c83342cd4938c7e072906c0a2ffd78",
+    "2022-01-12/clippy-nightly-aarch64-unknown-linux-musl.tar.gz": "e310f7b854e365c63e9a9449802b428cd9f21af336fa763c311cf8a541977f8a",
+    "2022-01-12/clippy-nightly-aarch64-unknown-linux-musl.tar.xz": "ad8f90785bf4aeb42a6cc4cd28fb729025ed19ca9586ca8e0392f8b3e310d7ad",
+    "2022-01-12/clippy-nightly-x86_64-apple-darwin.tar.gz": "2daeed49f7e7e85b2187177fd1d18e14400a0d38a5a717620d4af92deb17b4d2",
+    "2022-01-12/clippy-nightly-x86_64-apple-darwin.tar.xz": "66b38db76d50b5a1b8480298b62a83925bb4da2ed358c371c90660062de0952f",
+    "2022-01-12/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "86e92e3f785272c354c548cf5220dd355798b786e0e8630cadf7fff3b4aac3e3",
+    "2022-01-12/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "17f524c67bd794aa72be9474ef62fcd8f7b1be9cf4bbcdba9e79b4392b6b60a1",
+    "2022-01-12/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "7bc87fd4a2ea153342a6144849a7786398713255c0ffc94f17a62a1a5ea36387",
+    "2022-01-12/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "c7a776ba6f3f2d2fbf4b0824fc6f07dc2b79755f27e22073a7b65f368e29f7fa",
+    "2022-01-12/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "1d244ea2f27d4fc7447d4126b965620e6f6cca916db15a8f1f5df0f8bcb6e4f3",
+    "2022-01-12/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "6b44299d3a4201d7b39bb07a627321966747f7cbe747163a3fc65625ad27b110",
+    "2022-01-12/clippy-nightly-x86_64-unknown-linux-musl.tar.gz": "b6e157718df8219bfe0c2cc67182d451b644aa7f8e0a3060f7676c4a53af0df9",
+    "2022-01-12/clippy-nightly-x86_64-unknown-linux-musl.tar.xz": "bfab1555ab2f6a5f448d345a9e7d593be1234ab8b11588ddc7080ae2e646ff08",
+    "2022-01-12/llvm-tools-nightly-aarch64-apple-darwin.tar.gz": "4dea9eb7156cce2856f06ce58b76039edf5452dc2dcfe1dbf2ca3e4a2a4513ef",
+    "2022-01-12/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "eb60a819f5ae662c4743fcb8a30629355c5bfa7823381881d4ce3a01e80d2da2",
+    "2022-01-12/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "c8a61bf792a6fe1a2e10ccdb1684059626cbf077b6d82883549e0a824ec00fb4",
+    "2022-01-12/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "bff4b7b04067e7b8dd760bbc52298227f79f0f4821f474ff75a26d342b407a71",
+    "2022-01-12/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.gz": "e49c63a89360598a1ccaa4b4d452d6fe4f4974b70c1774125b7d0864984af4d2",
+    "2022-01-12/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.xz": "3477fa8a0556ed272ad7333fa01de1ee820857ac07abff843ee36cc16f3ddc34",
+    "2022-01-12/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "efee2f08143fbff836e6517ea7457468da07380dcdf8a3a19cb9eb7b3b36da7a",
+    "2022-01-12/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "57a37b6066e814248a4e82246236adcedc9bacd7d51e82e8abc4b5e686fd7f11",
+    "2022-01-12/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "d9748a16a855057201581ee1a3f6105ddd00511bd3129ca1175139f686b0a1da",
+    "2022-01-12/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "a0f7c23311e80eca3256f5ae5def2be4502d1941e64006fd4b830ebd40e052b2",
+    "2022-01-12/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "73dd634e5b9361c52fa1ad9b3ee1126b5ee5f988165eee6e47f7c80bb1d02f79",
+    "2022-01-12/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "e27beb0e6095e16791ee426d1383fd1d0fe536993387b49b89846eccac54785b",
+    "2022-01-12/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "dbea5a53828f590af592386d880ada84c55a072d5c2cf2148a0aec16c86afa45",
+    "2022-01-12/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "9f6fe3eb6c848688c09fdcceb3733895da17569c95515ea1016f759a83dd16bc",
+    "2022-01-12/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.gz": "f4fbe5809cfc6271297de76f78bdbe0591fad5daa747a78fe43019d088048f61",
+    "2022-01-12/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.xz": "b2ab74540feca55336d1ac7e9dd34b109ae316504034642e98f96d3a0c3a1fda",
+    "2022-01-12/rust-nightly-aarch64-apple-darwin.tar.gz": "2976b38351b6133dd20f940210a9d7a36da7a63b4991f3dd7a977629a4e30a19",
+    "2022-01-12/rust-nightly-aarch64-apple-darwin.tar.xz": "fc5041a029cee0829bd8e3e72fdef163dcf6944c8f164ba11c01c2e2fd7197cb",
+    "2022-01-12/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "67f91c94ed84cdeeb5c3d09eea11a01056befe6f8f199974c779e4a7c5580f52",
+    "2022-01-12/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "f34cacc6123bbc26972cb0577afb4220f036042a477902de73a4d00ead8daf16",
+    "2022-01-12/rust-nightly-aarch64-unknown-linux-musl.tar.gz": "d976d6d7d102c6dad026680cabc4ed44e21405f6afa28879ec24a78ccf9232da",
+    "2022-01-12/rust-nightly-aarch64-unknown-linux-musl.tar.xz": "1953ec73b732c00855b8d66f5eb534c2105ca54bff0d24c2903733f863b7bc38",
+    "2022-01-12/rust-nightly-x86_64-apple-darwin.tar.gz": "49bed5d3078cfdd9c95184909f80da529edf83c4b256ef2191dada8a22ba2d03",
+    "2022-01-12/rust-nightly-x86_64-apple-darwin.tar.xz": "5da9164649244fbfc23b16cc9e71ff478181c1ed7918a643987e405e99072c81",
+    "2022-01-12/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "b0ee56ad0245dee798bd4f268fde3bcee58b081c0ed16e212773f273e04e7b40",
+    "2022-01-12/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "f241130d5921a42ceea2fe978bd9d1adcedde15ebed40937d55343a1bca24eba",
+    "2022-01-12/rust-nightly-x86_64-unknown-freebsd.tar.gz": "7ba2e7f96735a9021de7f6817be33c8f9c269ef8666cc8267682b3dd3044e5f1",
+    "2022-01-12/rust-nightly-x86_64-unknown-freebsd.tar.xz": "65731e87db25e167bec62bb846335bc0bde4d2dfbfdb4719d9ced9b21b514c45",
+    "2022-01-12/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "414208e1f535d760faa1b8074e20b32f1b045f42efda741677bb718a80980b60",
+    "2022-01-12/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "4c6ccbfaf43be73455b4f80fcc476388fb91c478dfba497d8114b9f4a6beb9a5",
+    "2022-01-12/rust-nightly-x86_64-unknown-linux-musl.tar.gz": "d9b2a94d67e6484a17b6f128cdc2ecc081068a7730b93cc480b9886dfbdaf523",
+    "2022-01-12/rust-nightly-x86_64-unknown-linux-musl.tar.xz": "6dcc4ccbe545c68526507bd422eac210d53f0b41a3e89e783e1c3240e20cd832",
+    "2022-01-12/rust-std-nightly-aarch64-apple-darwin.tar.gz": "eead24d761bfa6ef0c926d59ed2cfeb51dc68fa4c13d59672289a6cc5795d990",
+    "2022-01-12/rust-std-nightly-aarch64-apple-darwin.tar.xz": "db6f78037643e7973b079daece66b7e7f03d39167e09ad85dd5637f6bf1c1076",
+    "2022-01-12/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "80ef127c8e0f8b2a9d4d6dd6c59e3b27c07ba7234e3fa2d8155227bdcaf18349",
+    "2022-01-12/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "f068009d8032c1a9c5636b9cf55efab94ba3d623fff3df047a9b6930b6718f69",
+    "2022-01-12/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "9716a07e0255737c1a5882cc8d053906bf82fc2cad0e86184d7dc12780811136",
+    "2022-01-12/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "0cff1023958352a5b17147a088cec60b79c246be43f7ab7977574a55d2a177b3",
+    "2022-01-12/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "52f08158233d16c2b6b26b009f438ffbf2d60c4acbee4c8dba0718d363112637",
+    "2022-01-12/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "950ef94153791c56eb7ea64ec21275d6308a3b365fe7a8f6573a3f3ad9afd6d7",
+    "2022-01-12/rust-std-nightly-wasm32-wasi.tar.gz": "318294f44e7dfe947445d03fe048465fce57a8acd4d39c45b04d64f8c5681950",
+    "2022-01-12/rust-std-nightly-wasm32-wasi.tar.xz": "2bbe79691b60be4fc976f6436ecee93d1dde4ed6d440028ea91e751e7369a422",
+    "2022-01-12/rust-std-nightly-x86_64-apple-darwin.tar.gz": "32a2f359a66e9257afb3166c3f3d03b46cccf15d081ff1962b6b6dc7589d16fa",
+    "2022-01-12/rust-std-nightly-x86_64-apple-darwin.tar.xz": "1d3b4e826dade5c02ede0e82324906d5b108c39fd46263f54bcdc38c3c90bc6d",
+    "2022-01-12/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "fed0b46a7278a327827169f0dfc829ec3d11ca64c86b59b73e9a5164c6d4f865",
+    "2022-01-12/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "ed64d40e1da5c8a9f9a0bea44c38e13076e3ea9944bd108f3758db4927f89e1d",
+    "2022-01-12/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "ad8c17b3a32d325a546bf22a6a5744e6dd448cdbb103c8687c9a7de622317474",
+    "2022-01-12/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "17317f7bf98e7eec4ab9a962d959fee3d4a91798f51585df9c9b0d32f76cad5e",
+    "2022-01-12/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "a0574b2ae49a860d69f66d8060ef42e764be73ccffe3ecbc1dbd5bbdbe9c06d4",
+    "2022-01-12/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "8be8d2ec2a3284f2a788e70b6b801da560acfe856579e7b1c8412635caf0f2dd",
+    "2022-01-12/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "ca442e0a9ca4c94ced9de08ece921be187ecc1b540518be76a7029fd7142eeb6",
+    "2022-01-12/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "1a3234cb2687bcefbc8602859fc281b32a5f65345f1b40739198aeb414659689",
+    "2022-01-12/rustc-nightly-aarch64-apple-darwin.tar.gz": "dc5fa145966daf5ec010e0b83f3b115866683ac418667e39663ea13a8e490d7c",
+    "2022-01-12/rustc-nightly-aarch64-apple-darwin.tar.xz": "ec11aeee47d0ccb3c2664b709f8ec871c9c1de981e06c1757da237c40dd4219b",
+    "2022-01-12/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "d6183b88df1f868862bd3cf138f25179ba2fdab7f16e2d14577ddd56731ea18f",
+    "2022-01-12/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "0cea5d65c3e1808161ba35892995de19832d08649bd6b5156508446d9ae83c8f",
+    "2022-01-12/rustc-nightly-aarch64-unknown-linux-musl.tar.gz": "1915a5b04ed3cde9f2566ca7f5205e37b706fc5cacc9ac64b7e6d818d882f39e",
+    "2022-01-12/rustc-nightly-aarch64-unknown-linux-musl.tar.xz": "34edea8def2b370104d6643d32de60d88f3b2c73ec03d9c46745232c8445a493",
+    "2022-01-12/rustc-nightly-x86_64-apple-darwin.tar.gz": "c51b1b7830d302fd352d4e105282da0c2aa01d98a7d8c0b0018db24539f2fb0c",
+    "2022-01-12/rustc-nightly-x86_64-apple-darwin.tar.xz": "10016947d399d6520bf0428b7438709bc9018607fc7bfe851c3ac4811a125dca",
+    "2022-01-12/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "69edaeee958c53a2ae99813994f60b27198538e288217bc30862668975e01144",
+    "2022-01-12/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "f91d46a0ee939caff451e95b40793b3c20c25e1a08d0adfee3f214a932a6e981",
+    "2022-01-12/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "cca63c6998d9762616c74518dd870fe67432fe0442003211ba58f0f1e3953e46",
+    "2022-01-12/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "40f7364c3e8db675b07ddee29985d90c86a46a194476212ffeb10401eef9ce1e",
+    "2022-01-12/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "4cc6346b16182c580c1fdee2ed35061d57140422d6e13f04b0f21db4ad9a9105",
+    "2022-01-12/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "f4525cee1f1f8e7807ed6d82ad3ab8d6d3e44c5f6e2231b89b246445216ea637",
+    "2022-01-12/rustc-nightly-x86_64-unknown-linux-musl.tar.gz": "1716aae4bf44c58ffa91121661e78fe112cfa5655dd2e98675e2dced7a4818cc",
+    "2022-01-12/rustc-nightly-x86_64-unknown-linux-musl.tar.xz": "7b9670560c74a9c7e9a465f70147e703028cb8674f8d8e36fbace3d0b9fbbd2e",
+    "2022-01-12/rustfmt-nightly-aarch64-apple-darwin.tar.gz": "458b707f541a604cf4463a99e7c9f6dabb5222c815b7278735a8147ed6a6d8cd",
+    "2022-01-12/rustfmt-nightly-aarch64-apple-darwin.tar.xz": "d84161815fe934bf53cd761c23b3f70653321c8678b7ddb34bf5f8f0b3c28422",
+    "2022-01-12/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "edb9f32b1d8228362a17ffc83d47479bd247000d50f9cb4c0fbf4570557139c2",
+    "2022-01-12/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "3564c7bbce8b1c1608fb8dbf0ba1ede74326f1015652770997338debb39445c9",
+    "2022-01-12/rustfmt-nightly-aarch64-unknown-linux-musl.tar.gz": "34299938e1f5d06f048b992f5bc57f17b5d07d7417dceafdd67d64f893c609ab",
+    "2022-01-12/rustfmt-nightly-aarch64-unknown-linux-musl.tar.xz": "56ada61db3232709d38b668bd631028959d583b1356ab53634628c598227598e",
+    "2022-01-12/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "eb6716d438d6923cb8b6cc1220fbfc30cca77548c19d1ec4656c4041dc680b73",
+    "2022-01-12/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "86b9148c84762a4eeaad20d016d80f3f09676dcef8c60105b48e5a24139186b8",
+    "2022-01-12/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "a29f9343d63ba3982eb3c783777430a864eee8bee0191c3899f7abcddfb0de0a",
+    "2022-01-12/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "f8459e21508d45e0ee892bf94450cf9adf29a94ca3f78ea22ef4c581ffeeeb6c",
+    "2022-01-12/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "b53e01c1d038ce6ee92bbedd0d4c5ae9942521a36d937ec9cf43caaa73278eb8",
+    "2022-01-12/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "298966702d8f19124ceaed36ae5a6498a6c0485e75b021471e48802f0c8e17c0",
+    "2022-01-12/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "edf5018504be0d79d77615a0c7e029a378446e2fd1a5360d86d97196519b510b",
+    "2022-01-12/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "05081809bec9dbb546faa6b80a261a14e281da1acaf1087d68cd38722591f1fb",
+    "2022-01-12/rustfmt-nightly-x86_64-unknown-linux-musl.tar.gz": "237bef02a341db60e3af388feb7d7351d13da9728cc8fa10bda5631f812b2a58",
+    "2022-01-12/rustfmt-nightly-x86_64-unknown-linux-musl.tar.xz": "8d8915649116549fe5777414ea35c68079dd2e009561910d2ec8abb99719a81b",
+    "2022-01-19/cargo-nightly-aarch64-apple-darwin.tar.gz": "e0bbae6fe4ea276773d426fb171fdca151c8877406476ef9200fbdc296d2f2ab",
+    "2022-01-19/cargo-nightly-aarch64-apple-darwin.tar.xz": "6fab4f0b37c52ca6bd40c0701363ee9b95a63651dc47c86c5b5b05e6da4c4294",
+    "2022-01-19/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "1fc5a3fe7ae76b2a332c95357f1b01c75341d022d66b918e8b2d9500fdbac74d",
+    "2022-01-19/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "c0940ee6dc82947d756ab0963609a587057fd499dbeaee1cc7ed87ffccec39c6",
+    "2022-01-19/cargo-nightly-aarch64-unknown-linux-musl.tar.gz": "06f0c843e0694a9fbd6f52d4257cea7a9ce7b0cfc519134cac03f85ac103839b",
+    "2022-01-19/cargo-nightly-aarch64-unknown-linux-musl.tar.xz": "b5b9bf2d638a3e6627cec0d9467b4e246bb6fc406a3a3520e42455341bf3488c",
+    "2022-01-19/cargo-nightly-x86_64-apple-darwin.tar.gz": "55e64aad2d07a7d1aecf3fe417039f20ef5b794e7597be0d5d0ab3098b439b39",
+    "2022-01-19/cargo-nightly-x86_64-apple-darwin.tar.xz": "424a87698837e8f4257b5125f2fa299e3b479816fc54cf2f8e25b25b70fda299",
+    "2022-01-19/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "c8f22a3ce1edb3632148b0117198947f80f1173b5e034468d039db9734d727ca",
+    "2022-01-19/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "091c9661baf43a0975cd20b130232747a49fb16d413004fb8a16e51722dc677d",
+    "2022-01-19/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "f088c70c08c55564c11a10698881a7317d44e934fc4054e65f45c4e721c8c663",
+    "2022-01-19/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "1b2143d0ac19c718d212c7777600bc237c525a86cc135d02e3507c8aff7e3848",
+    "2022-01-19/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "9dba5c80dc04089d3fffbd2bb066721a2ea3a4ef5772620d64083dec6fd7ba9e",
+    "2022-01-19/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "a11f0be1e0466815434c7a552e02f4da8ece77213372f05186effb9cef53f671",
+    "2022-01-19/cargo-nightly-x86_64-unknown-linux-musl.tar.gz": "0019a2625020210edf0df9f77a805ee404d59c00bea1013020dfd9d1f63a428b",
+    "2022-01-19/cargo-nightly-x86_64-unknown-linux-musl.tar.xz": "fabf20da69d66f42fb1fe3907e13b47f620b9d5c1531b242f717c8b24fc30153",
+    "2022-01-19/clippy-nightly-aarch64-apple-darwin.tar.gz": "3e552735b0f7edad6333514da898a374f089045918916fc86ebd6d1b2f146813",
+    "2022-01-19/clippy-nightly-aarch64-apple-darwin.tar.xz": "f2b39b0f334510b74a2831e0feb39e18236d237aee22c680c1514fab51d0470b",
+    "2022-01-19/clippy-nightly-aarch64-unknown-linux-gnu.tar.gz": "261eaaf4cbe038fe99f437f41a6479f1c85178b68b86ba322363c3a988a41df5",
+    "2022-01-19/clippy-nightly-aarch64-unknown-linux-gnu.tar.xz": "c4f0bd4266affac7a36f1323bacf933a230a772bc43d8425097f8e23a37c5cd4",
+    "2022-01-19/clippy-nightly-aarch64-unknown-linux-musl.tar.gz": "98ab9cbc764859416b199498cdaa29f3e0530b9fee37a00194575102d1d18614",
+    "2022-01-19/clippy-nightly-aarch64-unknown-linux-musl.tar.xz": "2c9a963834851e0a7b6306de2d8e6332dac71ee1e084d4cb54382ad265b3735c",
+    "2022-01-19/clippy-nightly-x86_64-apple-darwin.tar.gz": "57bbd4e12dfe619bb38ca51e0457c7a0458ead39a5f8b8009e82c3ff782ef534",
+    "2022-01-19/clippy-nightly-x86_64-apple-darwin.tar.xz": "f9e2107e19594e387ab1699a0d1b5824b8363d9b079365f7d8fd73244599cbac",
+    "2022-01-19/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "f9415462ee2982c546bf4cdebf513292dfe380366604b0da3533ffcb7b062f58",
+    "2022-01-19/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "65fafd833e8d30809dbca3936248a9c6ce1d3063facde75b348b981673c7608c",
+    "2022-01-19/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "6732077fb8ae4cbf038c7d56ad2d73e08dc7fe214618c1b8048d5886a0e38782",
+    "2022-01-19/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "08b6e90b9a695c06a45908fff73ac0b78ac211b3b19e92b5c817fd85b4b3c197",
+    "2022-01-19/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "8a84d8d4120ab3a9a1843fb4b343531ce2f66e472f2bd9b4adb6e825c336130b",
+    "2022-01-19/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "ffd8d86c89b46a727b506dae13a7844b35b7b90b9da80b39614f3323dbd13c1a",
+    "2022-01-19/clippy-nightly-x86_64-unknown-linux-musl.tar.gz": "1472e5cd4b2950bd22a2e6feaafd01f7a2a8b726f12d6152b262474fa2cb57c3",
+    "2022-01-19/clippy-nightly-x86_64-unknown-linux-musl.tar.xz": "524905ded80a0e23182c196942eee3ae1e869bb910fbf60df4dd379d587c6cc0",
+    "2022-01-19/llvm-tools-nightly-aarch64-apple-darwin.tar.gz": "669057387a1515c3c4529786f60b9a25ac5c4eda911422fb023b73fa8a380a36",
+    "2022-01-19/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "1ca39a6810482a580a6852e5618b6dde156207a06e8de5dd9940afdb071c5ef5",
+    "2022-01-19/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "7afb1e98626316cc1de6b62edb319b5f006da5c24601bb657c5cf567555b5730",
+    "2022-01-19/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "0bf7f3b38c5a4ea6885d3044bba22284873ccfb68e3b34022f1a746816f03ebb",
+    "2022-01-19/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.gz": "e9bf498717ca2e8c7620957a5f7846b53dc09a7c720e8ec31e67c8da25fa59b0",
+    "2022-01-19/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.xz": "3db7d9b91a89acc5bd233a16b5368782e9b7ce91542522638fa826ff9080cdc6",
+    "2022-01-19/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "de72f572574a1238dbec6ee6b5c48e31b6770826cbcb6ecc61c568587c82ab66",
+    "2022-01-19/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "54c650856bc4c9d7aee25a09ebb9cb7e49b946f1e518a3740d04330fd69f6b07",
+    "2022-01-19/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "97f9c947d726b72ab318705b539e11012a73a08dcb79e00c73d680d9a5166882",
+    "2022-01-19/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "d153abc1dcbb310df6dc63201d8dfeecf0b2ba84d2423e5bfc26ae91b60bed7f",
+    "2022-01-19/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "2e42c56a825fa9bd640fbb3bafecb02cfe68877e09d1c0ddfdff794e4571a2a7",
+    "2022-01-19/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "eadccc89f1fc6b6717f5297cd7000a98ad78f2397940ebfd9e3845dcc9d29510",
+    "2022-01-19/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "bfd89e74330fc0f9d61b75852c96d644fe5ffd90636e8668f10480e27cb8593c",
+    "2022-01-19/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "3352692edbb912f815a9787aad53e8dfcd3cb607b2fc3987712d6e2de184b925",
+    "2022-01-19/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.gz": "5dbbbbee7bc11793c320608b5c88398206b8803593e8906ac03b5651bb7b7a6c",
+    "2022-01-19/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.xz": "e5db6971b1da77ff6c8eb39ec6b44a0f3837a014be7c3d4efa493da6ed50cd03",
+    "2022-01-19/rust-nightly-aarch64-apple-darwin.tar.gz": "9a0a4323eba39da2c0ae9dd99eae994c90019b11e1020378781fb41521799b92",
+    "2022-01-19/rust-nightly-aarch64-apple-darwin.tar.xz": "d60d919e817c321a4aaf6486addbcad1ddafa9b80bb02a74972143b470f31431",
+    "2022-01-19/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "c71d05f5ec4d1d118bab9b3155086328093b5b620b39de3e541294dbb64d4ace",
+    "2022-01-19/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "3bf003e28ea542aae52d49a7274b7f6d94a9bca0aa68c8cda42fd54241035529",
+    "2022-01-19/rust-nightly-aarch64-unknown-linux-musl.tar.gz": "9aca1ed8d3283403931991b4c46d5f57a0839bac3ac5283692ef67938d291470",
+    "2022-01-19/rust-nightly-aarch64-unknown-linux-musl.tar.xz": "22a35fb2dddebce60ee2b65df3e18d18be329026a50b721e964141b283a3339a",
+    "2022-01-19/rust-nightly-x86_64-apple-darwin.tar.gz": "1102c26afe2de2c73079c30b038ac203e1b2d647383338f91782196b05a11116",
+    "2022-01-19/rust-nightly-x86_64-apple-darwin.tar.xz": "c6d22fee2d6dd0a045c45511b680fe08822f4fc2b8402299e27034cebff31dba",
+    "2022-01-19/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "bb63d762cac5570f98c4109c7d4cd86d5912b46d0779f44a27fd515e1b723961",
+    "2022-01-19/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "77e12e1c6c51565ccd40273178da6c79eda952136669789fd5e76e12e6496d8c",
+    "2022-01-19/rust-nightly-x86_64-unknown-freebsd.tar.gz": "726dedec423c51031d5d481aa90f04cc68ed52f45cc33320a6932e02adaa8256",
+    "2022-01-19/rust-nightly-x86_64-unknown-freebsd.tar.xz": "7bb23bea39b649afc6f9b0a4c2102dc36098fb300a526852b640dd83de80d7b0",
+    "2022-01-19/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "db2ec42968696da58de511cb088ea0f879cc64551a8944e5673f73df0e252b7c",
+    "2022-01-19/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "9cb7421a631b82cc8ef6d2a7aa2b7fc546245adb192bbe171131c6511095606c",
+    "2022-01-19/rust-nightly-x86_64-unknown-linux-musl.tar.gz": "49e42ceb3358ee50863db105c680bbe35aae62b0c27d21db4124b29e82203137",
+    "2022-01-19/rust-nightly-x86_64-unknown-linux-musl.tar.xz": "7c92e1fc713b4c7b9de4d4f93fcf277776a90a0f7ae5e5f6d3933c6037f9eb7b",
+    "2022-01-19/rust-std-nightly-aarch64-apple-darwin.tar.gz": "2640f188bda156f0c530c558e02b06dd1b362c7c0115ef8d9e585d451fd92c55",
+    "2022-01-19/rust-std-nightly-aarch64-apple-darwin.tar.xz": "e0f4d539455bf70afd36d014dc857673ff99121110e38059668a518719622020",
+    "2022-01-19/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "500e3edb2fe3776ddbb85cbbfd3cea154f969d9b7b76df208dd39953a96d04db",
+    "2022-01-19/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "63002d6aebac2564a395de0bc7d123a1776a4972052bea0f897b3f6ba13b997b",
+    "2022-01-19/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "1f93e986d03402e01d70bb443540049d641aa3bdc7376691ae4347addaf17642",
+    "2022-01-19/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "6d1ec629f71a40e34e723bbce41748467307cdd56b8de68f5fd385499b663667",
+    "2022-01-19/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "419ecbb51cecc803299d3868b34e78cf08c589b9ce89edc58e9eb99a12140682",
+    "2022-01-19/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "6c994df9b78071798b4374254778eb29db7d719531a3868d19ad954311af0d32",
+    "2022-01-19/rust-std-nightly-wasm32-wasi.tar.gz": "4a267c1c645e8269bdaf29b6edebe88bc2149217e9eaf0f9f87877c67540e9db",
+    "2022-01-19/rust-std-nightly-wasm32-wasi.tar.xz": "eccdaeb0c7ac3f9ee9da317bbc962da8351d7744de402a6863428b7f87215113",
+    "2022-01-19/rust-std-nightly-x86_64-apple-darwin.tar.gz": "b875843a7a5ec1b7f9a45672e44495b17972c0268a20d706610ee9c6ee12e408",
+    "2022-01-19/rust-std-nightly-x86_64-apple-darwin.tar.xz": "9173094c15a444f50d93399b9e502d58222fe6e9d644257ff921838b4cec6116",
+    "2022-01-19/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "316b1efb302c7f58f59aaa822fe07e809beafc4ab157d0dc53b92786292f7a4a",
+    "2022-01-19/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "8b69099b5f137a63d821a91499bc0460d4f4a19fd39489b412c111cf18e7adad",
+    "2022-01-19/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "632eba5d1ed2eed44fc61a1a69014e756426cad86accd2c372d44e07c764d1b8",
+    "2022-01-19/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "35e93b70630d1172fe8f5f947c060ee6beccab253a8d1345eebd87d15d4b6c3c",
+    "2022-01-19/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "f1a26b04468f05a0239ff7d9bf4991ff6150650dfaf4d0a68b51d2146a1fe7e5",
+    "2022-01-19/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "4d77623bb4d54b3355daa0b56ab3291b84eb75ec4bfaa740cd4b1a8baabd13ba",
+    "2022-01-19/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "33f9b31abca43c27afe34800fcfa87fb66a059b4ed9a2ff6ba9767e0609ec2af",
+    "2022-01-19/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "7c87c74c154d670a9e39cad55296881775ee43a46c7f63c31d63e475158a7d76",
+    "2022-01-19/rustc-nightly-aarch64-apple-darwin.tar.gz": "d1036828856da3195883e4c56b6596a08d3ed75ea5875cc26642e5b3b8caccd1",
+    "2022-01-19/rustc-nightly-aarch64-apple-darwin.tar.xz": "bb436eef8daaa2c7fa2042fbdd3f5918f3f4da0fe4494c231daa5162ab3bdd5c",
+    "2022-01-19/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "3f7edd43d97a6c63ad43db071989ed4114dff29c77b5b7ed7e1ea65339e170d0",
+    "2022-01-19/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "e8ef950e6fd7de66380e5b7b7ce25a0e753b77fc5e4807edabfde8fe836f5760",
+    "2022-01-19/rustc-nightly-aarch64-unknown-linux-musl.tar.gz": "9d5d70aa8942786a61e4f7026abad946f5d965a99f44fcde54d5fde286461f52",
+    "2022-01-19/rustc-nightly-aarch64-unknown-linux-musl.tar.xz": "5cceaeb17a5da7e8814bdd79c84d92bb8539368d56b7af65728abfbfcb23742f",
+    "2022-01-19/rustc-nightly-x86_64-apple-darwin.tar.gz": "0bb3422db5ebdbb36bd487ab6ec0b0bc89c960bf5b8bb1fadb9a7f3b827d0672",
+    "2022-01-19/rustc-nightly-x86_64-apple-darwin.tar.xz": "9d5319f40656ca63c5d920628b39dcb4701926928608efb47f4e2eb223bd2f04",
+    "2022-01-19/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "2f15ce047f6c8ca20d4585ade8f66b7f296de7083da5636e5a09f04b02228435",
+    "2022-01-19/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "b6edb1055e66b32eb3d559afb40eee0700d6b156b47fce7d5b9928630881df65",
+    "2022-01-19/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "1c8e731ee63cde0f5d6375590b234c5facf4070584494c24ae6d3c012e81b74e",
+    "2022-01-19/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "13a9423f743f59fe257809eb1be7552dbc12a5d70d6cc3ea5efac6bbb19adf67",
+    "2022-01-19/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "8f96fbd32d86e0943a5d15c967c1e4d9832bd8682eeae1f333e9bcb77433acc8",
+    "2022-01-19/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "3b8356651ca3e78b66239f9b20add92a9e20aa33cdf222a544417048086b22ec",
+    "2022-01-19/rustc-nightly-x86_64-unknown-linux-musl.tar.gz": "9ca8f7801aeea115aef2648313ed05f5755cb4fab2ca93e391dcc0b09f79528c",
+    "2022-01-19/rustc-nightly-x86_64-unknown-linux-musl.tar.xz": "00916a2888f22d21ca67c21e714ff042ece322fb2eebb8db1ebe1b642ef94945",
+    "2022-01-19/rustfmt-nightly-aarch64-apple-darwin.tar.gz": "e1cd639473e54569e0282d68bd2270fa1f2e9713c8cdc95e1432097fabe3ab3d",
+    "2022-01-19/rustfmt-nightly-aarch64-apple-darwin.tar.xz": "8833d08c9fcd4a0bb79108bdc33d52faba04473cc9ecd9ae4e4a2532cfdeeeea",
+    "2022-01-19/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "f6e70a862dcdf24b035061602b1081163083ed022bf15366337fdf5af5b999b8",
+    "2022-01-19/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "ea0f3b56b8454bcb2536e338ab12cfbffc8a4f1b7b056e976c7d072a28c1ed2c",
+    "2022-01-19/rustfmt-nightly-aarch64-unknown-linux-musl.tar.gz": "eb028b9c1fda5730ad387312eb6fca48da94cb654edaa0a6a445092b1bd28af2",
+    "2022-01-19/rustfmt-nightly-aarch64-unknown-linux-musl.tar.xz": "8c2467cc5425881723a4a8fdf1bb7c8a75881b0b1f0e4cba30c4e813e1c44743",
+    "2022-01-19/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "e205536ecdb2e15243a2436a41fc398b6a558be98d1ae8b281e9dd3748f3931f",
+    "2022-01-19/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "4e1cb1e694fbacd1bf2c08aa1794c62c190974d02347f984c5515933e98b3a49",
+    "2022-01-19/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "571d43d9091f87debf76102801a9d65842314532af34f08fec9de1b8346e532e",
+    "2022-01-19/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "c3ae8cde5f08e802d5700fa4ad32a564ac35852f7577a0c94efd355d380f17f1",
+    "2022-01-19/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "194f0c425d9188ceb69233069b162b25bb829c8fc155979433457d63b32df61d",
+    "2022-01-19/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "8f92e4b14bf92571a29011b1fa85d3bfd4648549b30cada8fe2320d5943096b7",
+    "2022-01-19/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "3cab5f9cc9fb0681ce5c284b5ac98e92cbf73c2c9eb993d7d7d9faaf3363f01c",
+    "2022-01-19/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "a09bd182394792f4f825ca991e195aeaba686806c88927ef294ef696254a4a43",
+    "2022-01-19/rustfmt-nightly-x86_64-unknown-linux-musl.tar.gz": "41233d3f0fad709cc751def5342849564446cbc3a00045b39cb6a8c26d7dc436",
+    "2022-01-19/rustfmt-nightly-x86_64-unknown-linux-musl.tar.xz": "3c90ab73c9c6282964458c27b66aebf29bdbbf7f3afe98b372454668b4a6298f",
+    "2022-02-23/cargo-nightly-aarch64-apple-darwin.tar.gz": "16cc0baabdb131b3739d5db9d98a26db494a470afb15c29fb3f30a8a9701ffa7",
+    "2022-02-23/cargo-nightly-aarch64-apple-darwin.tar.xz": "83b8e30103bb6afe3dddc4a7a9332529be753805ca4123d07d54995520cf802d",
+    "2022-02-23/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "c7b2643282f256f01224d93af31e722ff0ff64780fe391fdf1343aabe03b3a30",
+    "2022-02-23/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "2e2f5e424c20c89c151e0bfae43746725159b402414263beb6b85d539c9561d4",
+    "2022-02-23/cargo-nightly-aarch64-unknown-linux-musl.tar.gz": "3a4cda34180864cdf9505316e985460018756717878f8529c9141a982683c7aa",
+    "2022-02-23/cargo-nightly-aarch64-unknown-linux-musl.tar.xz": "460c1e7a81bdcb89da391cd55522382e6a8d3b240ca85c44d2df79e5a92be3af",
+    "2022-02-23/cargo-nightly-x86_64-apple-darwin.tar.gz": "4952a58521c389ebbbf12d5c5f855d7ff63b6cbaa8b39f5d0410638ce18f91b5",
+    "2022-02-23/cargo-nightly-x86_64-apple-darwin.tar.xz": "a212fd24b128e29623dfde1a4c68b8a6abef30c186033b21e509652fb74f7fcd",
+    "2022-02-23/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "2909e511824b752f9137c1312076a3b570dcf9df19823c41b188db9859f44830",
+    "2022-02-23/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "8b42596944f628014057d703e7ccaa2f965a26d6f2127d9ba86bd811d46186a5",
+    "2022-02-23/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "c5d47b6b075ff2bb881f1fe07f89e0927beb23cdb169c293e976853833421f96",
+    "2022-02-23/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "8594e7d9a8d549c290410422ddc7da28f5baacca1336251ac144500639356add",
+    "2022-02-23/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "ef101ce313d0d045ed121e312b12bb41c20bdc07963543ab77c5a5ab9802eb02",
+    "2022-02-23/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "db1df22ad475637cba2959e498bb220f356d00e159f1cb9808513715e16ba158",
+    "2022-02-23/cargo-nightly-x86_64-unknown-linux-musl.tar.gz": "dbb5a85a3d753473e5595b12c08b217aa8c13b01c64cffef5c702025d2557c38",
+    "2022-02-23/cargo-nightly-x86_64-unknown-linux-musl.tar.xz": "031857296010a414008d22568cc3420dbbb3f9b4a7559dab8fed799ded53d727",
+    "2022-02-23/clippy-nightly-aarch64-apple-darwin.tar.gz": "59778a7fbd8a5fe3bade8b95d7ff7ec1419dfa95e2271afa6b32baa1d5c3710f",
+    "2022-02-23/clippy-nightly-aarch64-apple-darwin.tar.xz": "96fcdc252d156ca54e6587dade2f26ac578afe8a8e25f9ca7cd6f7653c224479",
+    "2022-02-23/clippy-nightly-aarch64-unknown-linux-gnu.tar.gz": "62d3027e541c8fc87acc076865469af0020b1ebff97ebf45dabf0fa3537ee7be",
+    "2022-02-23/clippy-nightly-aarch64-unknown-linux-gnu.tar.xz": "d15f2ef9ac5a4ec29962284a196ad70019627af3805b283a07d8478dbb1cc977",
+    "2022-02-23/clippy-nightly-aarch64-unknown-linux-musl.tar.gz": "dacaa625832e840e464ce5c0dc5bbefe5e15b1faa9fdf1fd29f4a5a9c6d955c6",
+    "2022-02-23/clippy-nightly-aarch64-unknown-linux-musl.tar.xz": "66d2171906180857575ee6fd700191630c65089d4c6460665609175de5882ab4",
+    "2022-02-23/clippy-nightly-x86_64-apple-darwin.tar.gz": "7f98beae8363a2be260f2adaca025408abb092894138ae5a00cb43f8cffe5fab",
+    "2022-02-23/clippy-nightly-x86_64-apple-darwin.tar.xz": "ac416b7799807dff868933d96b9315a05f42261410d61d95a21df9cf1620df5d",
+    "2022-02-23/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "695c78fd375ca2e67d2b2dc679c242de32e7ec6366ac39c1060de9f4bb34c97e",
+    "2022-02-23/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "72c469f1f462fd46a74b95261c643d0d6122463e2ee5659fcdd18601d3a51446",
+    "2022-02-23/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "674891a88d78046afb4da489ab47bf2994a7aab4c65eea42639611cc992114d0",
+    "2022-02-23/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "f98ab01d294a12914a79dd718b92cfeeadeb1c49389651fb8ade3ee1234706d8",
+    "2022-02-23/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "b510582d9ea92fb059c89deff9a74a9725c8e935daedefef20443ce44e8d40d7",
+    "2022-02-23/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "0414d760c269830ca21f8255fc52744eee08ffc9471ea6a9c05f341b982c2807",
+    "2022-02-23/clippy-nightly-x86_64-unknown-linux-musl.tar.gz": "f582add076fb61857c380258c0d854b7601381ba3dae7ae5b423978511159ed7",
+    "2022-02-23/clippy-nightly-x86_64-unknown-linux-musl.tar.xz": "83e806349eb8f15fbd114dc233209b6675d970716ce73ad1d692c87a0e25b7cc",
+    "2022-02-23/llvm-tools-nightly-aarch64-apple-darwin.tar.gz": "b35cc47bd525e6664592f403905866c48bb9cb7b1b409bcf63c2b35d32993a79",
+    "2022-02-23/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "4adcf00d3a684a65dfe4e0e60ada66c68d33dda2f8b503c60ee285f001b508e7",
+    "2022-02-23/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "4c02f526bd993a9118ac0ac610b85e5cdfd42bc43d7ecf77d8c3067893c8a54d",
+    "2022-02-23/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "876d4d7624e60f4c10eb4db8278aa44ee760c95c136458c719e529356de6d7e9",
+    "2022-02-23/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.gz": "b857b033803a4d6020c3425af9d4ea2b0462cc2db67f549e7dd426f81265d48c",
+    "2022-02-23/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.xz": "b3e80c1a500593705747f0864992756a99f905ba7c04fbeead72cde3da60c05a",
+    "2022-02-23/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "5e26961b8f803ca6d5be40622a8580164986bf54d8391b1a4524fcffbd1eeb10",
+    "2022-02-23/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "716117de6bd4d7cd8c06fd5b103857ae338672d7660848ab5911bc68b4976aa7",
+    "2022-02-23/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "dd5f7e54725d973423b3cb2ff3a0492da76491911591f6b34231af1dce332a7a",
+    "2022-02-23/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "bf5c860d42a1fed65c04002cff8014f82d3077873df64a79685759b6c8f9656b",
+    "2022-02-23/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "dfb6f74016e677c28cf6eeb9e8430f5022e0c874619e2f5235728e82416e443c",
+    "2022-02-23/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "e9f73b85baa17dabca65c98f3f6e0354a3a21c56933a0bfdacc7f7b6b77d3960",
+    "2022-02-23/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "2746d97f126edf2045f012591c1262d725cf042c56c32caf7ecdcc0eb1ae001e",
+    "2022-02-23/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "9e0ce36050458fcc0a54bcbe688169f8c3f31e77c1f4d2cfbd87620799f87446",
+    "2022-02-23/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.gz": "d307f34ba5fdfa7f4a4645e76a9bf8447c3baaf404017b0c698e516c3be5b56c",
+    "2022-02-23/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.xz": "df1c07273061643edd846ad0093dab7bcebf1b1fee812eba51a614dd16b3ccea",
+    "2022-02-23/rust-nightly-aarch64-apple-darwin.tar.gz": "e00ccb8acffe7450d78c5b2fc13cbc01a5210ad8edcaf27bf4a7961806942ae7",
+    "2022-02-23/rust-nightly-aarch64-apple-darwin.tar.xz": "b7ff3dba681d9c830ed3a16b6e11bda4c6dc73509c7ce80d8db9d92b9869d3e7",
+    "2022-02-23/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "f9b5613cb5ba524dfe8ba7325c2b8f8f112173d3e1a9bc5a75de49a604f4c379",
+    "2022-02-23/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "d37d46c2cbad653a5eb8722512a80d34869ebf8e1e13932da1701ef3439c03a5",
+    "2022-02-23/rust-nightly-aarch64-unknown-linux-musl.tar.gz": "a87bc336ca122847a998bcbfbcd9b1b7232c7cab7219a63948ec73bb2b9563bc",
+    "2022-02-23/rust-nightly-aarch64-unknown-linux-musl.tar.xz": "eb1bd6260e5270a90779c7159bb46b70b6f02a2225a0651147fd527eb9a47b0f",
+    "2022-02-23/rust-nightly-x86_64-apple-darwin.tar.gz": "a585cbad9e35c3a2da5d0037078501a01edaf66d9e52ac2e4394b733dd5ac81b",
+    "2022-02-23/rust-nightly-x86_64-apple-darwin.tar.xz": "31528561727a5e8afbf4db3c7f58cd1ac9f8d012d6c521aba3dd72224bac7c96",
+    "2022-02-23/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "2df97bea4add36de47074a5d70d84f3f2cb29f038b6ca82af4e7986ef5bc9acf",
+    "2022-02-23/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "118a82d89871dbed233e3c2dbcf3af618b01756a88ede9f6026c5e85ffff448f",
+    "2022-02-23/rust-nightly-x86_64-unknown-freebsd.tar.gz": "fa6b2300d71c7fab41a2c9a6b8a6b210eed8d3fe8263e8e17f2034072dd15c94",
+    "2022-02-23/rust-nightly-x86_64-unknown-freebsd.tar.xz": "8157384c9f9100b1ae63a9628cc3bb5ccc3ba87f2f46e2bdfdca8cbe3396cbf7",
+    "2022-02-23/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "d0fcb7b0e2b9b09ecca0954af53732c647859c3140b79fb2c1bd61af9846c3d3",
+    "2022-02-23/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "08f39865394e88e46c892c0b3dda2e81ba94f605346d4033a7f0df95d6913f64",
+    "2022-02-23/rust-nightly-x86_64-unknown-linux-musl.tar.gz": "00ed0db2ed84d6ab0347b663963b7ceba40483a9f40316e6f57872dbfc5ef395",
+    "2022-02-23/rust-nightly-x86_64-unknown-linux-musl.tar.xz": "e75ab8ede860541c36f93769ed3a3ac801ae37cb3ab3e820c663b7fcc77640fe",
+    "2022-02-23/rust-std-nightly-aarch64-apple-darwin.tar.gz": "66623fbb88fb63ce610dfe1d5b3242620f1bd473386950b33c3383cc064f8743",
+    "2022-02-23/rust-std-nightly-aarch64-apple-darwin.tar.xz": "8bdcd36005bb117494868bcb74b9541a3ae0485a35196c86ec5931676f449e28",
+    "2022-02-23/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "c6f82581224c8d968f0e747b07b6651f96ad8736aabe912ca9fadab7a82e7e5d",
+    "2022-02-23/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "34ee79e3e0dc183f5e1b9d74ac3b4a3525bb0ebe73f14c0edfe2935477545c90",
+    "2022-02-23/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "fda164074a8a6329835d99423a51a921948aaa67a2c6a3982940f73fe62b1a35",
+    "2022-02-23/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "abbc8486e4b2fddd9ff3678045c9e1b875a4b1729462c3b2817e9872fcfdd81c",
+    "2022-02-23/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "607a92b4e349601d6d7b4575b303324ec8af153fbfa19d6171eccd72388d6f63",
+    "2022-02-23/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "41762afb09ad6ef8e811fb1e4a3fe8bcd17b212587cdcee88d8ced6cdec79b97",
+    "2022-02-23/rust-std-nightly-wasm32-wasi.tar.gz": "4702cab8d82ae958c984686df053897ee53ae98650046016053261c922e848c4",
+    "2022-02-23/rust-std-nightly-wasm32-wasi.tar.xz": "ffa0121716adf85dccc6e211f70d0ea8938e5fa0ba9e8c1cf5f6d9d18875ce4b",
+    "2022-02-23/rust-std-nightly-x86_64-apple-darwin.tar.gz": "e6f2d3e182060387bba51540a6a8207f22cdf2f28f510143164bc755adf3d717",
+    "2022-02-23/rust-std-nightly-x86_64-apple-darwin.tar.xz": "c588370ac20eb185d50342ac04be276d22e65d181fdc9dfdc4aa621128b49786",
+    "2022-02-23/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "940c6687afd93a499e634fa31613d635f8f74ca6c16fb677a418f7288c8b80ad",
+    "2022-02-23/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "75738621babb8eae3f7eb8f4f5933fbfa34d4f46707b2ec5e23386ba7b200bf9",
+    "2022-02-23/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "b685a785f022c76231c716d1ea305d03e46c7c785e5ce38be895d357e20b044f",
+    "2022-02-23/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "69037cd59466475957092c15e742959203736acde132a47cb429c94605f9a3f2",
+    "2022-02-23/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "515506678fc829b3d418e124fa44ac29a5c485377d3fc753493e16aeed856f2d",
+    "2022-02-23/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "32517c67177fb1c8f4fc149e8dd94d26599b7215f1efaea8c2d3aa8f955a2ff5",
+    "2022-02-23/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "5a9b8bf339631e33b45704a4f071991ba0694c7b00d94d35793a86ebdb5ad354",
+    "2022-02-23/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "81d245dfa9334e5a1e921550528abdc0c578743b6fdb7d6f8780ec70be197262",
+    "2022-02-23/rustc-nightly-aarch64-apple-darwin.tar.gz": "e967e5e396f7a931f53f7a9737591c4bbfdbeec869495b3cfbce8ccb18c54fa0",
+    "2022-02-23/rustc-nightly-aarch64-apple-darwin.tar.xz": "76ca26b7aeb8801fc6f1aa04244c4b464d8e9068fa34f45d5005c91acb7e3bb6",
+    "2022-02-23/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "7a222bd902f3faa17b486027b357f461659a54f7ba81dc1b784a450d6b06f81a",
+    "2022-02-23/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "88e1063974bc8319067adf537f540229eaac229fbd9a38fda3fc3c28ea484ad1",
+    "2022-02-23/rustc-nightly-aarch64-unknown-linux-musl.tar.gz": "c898784e3e4e2fc0492c53148857ec7eff61bdda44b608a3d06e88b7e30372c9",
+    "2022-02-23/rustc-nightly-aarch64-unknown-linux-musl.tar.xz": "875bc2c02db117e0ac16386897337ed9cecaa73e2c62f525486c8d2dce7d564d",
+    "2022-02-23/rustc-nightly-x86_64-apple-darwin.tar.gz": "4976dd96f04ef65f948deb988fa9ad7adfbfbd4873c0c78657830f18cd565d4b",
+    "2022-02-23/rustc-nightly-x86_64-apple-darwin.tar.xz": "f4180cb0808d40d1ee81abcf0e5261bc8e60a3975c2fa2fe7d7ec1928adcfc03",
+    "2022-02-23/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "aa55308792edfdb41d1e7121e0343c05847b7e860ece9ff4c9534d64084b09bc",
+    "2022-02-23/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "7ecb80cc8f2db59bddf8c8b848c92698e41136ac89c660b1c0f5cc732c57e12b",
+    "2022-02-23/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "32b6dce6fabc18617d7b2295e45ff30221a68979b8302bde97c98596047f2a0e",
+    "2022-02-23/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "84ef4637f609812dc61f29c0915c0b8f9a31ef40aa740e7804cb2bdc50248d29",
+    "2022-02-23/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "d30ae66c6ad9f0292effe047d7977ecf1f2f6c5be783cfa110c54fdb5bd8396a",
+    "2022-02-23/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "8c1b9a206eb3088ccc620510d7f69da3ef53d4e0d7dff18f52281b0a5c1617b5",
+    "2022-02-23/rustc-nightly-x86_64-unknown-linux-musl.tar.gz": "355e30a7f4416a2db738d950b40d0eb57fc734f59871e1291349509e74f1be09",
+    "2022-02-23/rustc-nightly-x86_64-unknown-linux-musl.tar.xz": "0f50fe62499132d2a8aae63037892e35c5a71ebc1bd33ae6414b8ef3a810995c",
+    "2022-02-23/rustfmt-nightly-aarch64-apple-darwin.tar.gz": "8f4bc35d8e2b03db96a5d9faedb5e25155082d96621c26b90734219468904c62",
+    "2022-02-23/rustfmt-nightly-aarch64-apple-darwin.tar.xz": "c83c48eae807ab73ebeb6324778faa1430b7efe0da6e32acb013cad9e2bb505c",
+    "2022-02-23/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "88691ff2cefa6880cb4bbe2d717b5419cd0440ee0d000ff8a70f9d86d714b866",
+    "2022-02-23/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "c075a7fe36931eff39f1880fce0dbb2d6d691bd4eee6f8db88b49f123e0117d0",
+    "2022-02-23/rustfmt-nightly-aarch64-unknown-linux-musl.tar.gz": "394ee236b37b687963a0c42e40b3c6863460c302429ad00ca37c7931ea896233",
+    "2022-02-23/rustfmt-nightly-aarch64-unknown-linux-musl.tar.xz": "74b68d4c1a7d36cca7fd1dab686bd43b04af1be5a9a07f7c42c52b0d5ebe35e4",
+    "2022-02-23/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "6e7ba1d83b61ce690c857bc197f3c0a1cf0cb2afd3c4c7f16fdb4079f460ce6f",
+    "2022-02-23/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "6611703fcd9ec8ba9fa1837be5736c2b2833532cdcc152c5e3429d1994ac624a",
+    "2022-02-23/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "e1a81be6159fb9e28cb1f35ac4508a09a0be86edf6ab39db08988a5bbefa9e76",
+    "2022-02-23/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "d5073cb4c148ef6e664c1fe17b02900e5f6ee0cf39710cad55887ebd919e797d",
+    "2022-02-23/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "63a0018ed3b7bf94dca3db30be7a1d6940a7559cdd0ca408c366551e2f5e6863",
+    "2022-02-23/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "85924719f0bfa06024496e550edfb6556a7b90e42d7d2d810b52f5bcef4401b0",
+    "2022-02-23/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "7ab236ced294c39de4bb563e9ebaed04c906a4ccfd1932138d37d6d03f75cae7",
+    "2022-02-23/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "f392f5b890506e63407204998c3b9b9529dea8a7bdff2319bc202da6fa07c3b9",
+    "2022-02-23/rustfmt-nightly-x86_64-unknown-linux-musl.tar.gz": "647da2183d93846ac5225b99117846a07a90975bdf1b5075e86601dcf97d1ecf",
+    "2022-02-23/rustfmt-nightly-x86_64-unknown-linux-musl.tar.xz": "9c3be22743d1d9120d16ae47d035f788ba809207bdddeb8746828ea914dd90e4",
+    "2022-04-06/cargo-nightly-aarch64-apple-darwin.tar.gz": "7a0255c61002d666a5603d5050dae64cdffa8fa40783adc1390891eb08e877f5",
+    "2022-04-06/cargo-nightly-aarch64-apple-darwin.tar.xz": "f3326542a34dcbc90576a00961bf2b19a3eacf9e7b4bba543777266a860e904b",
+    "2022-04-06/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "5b9d0038da9d85ba833911a5133ff7ad84f07ee58110e048740ecaf2f1256e1f",
+    "2022-04-06/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "7aab7e6f5a1a80e07aa3b2b15677a00c6ecc4010b1c17ecd9d387823aabde3ea",
+    "2022-04-06/cargo-nightly-aarch64-unknown-linux-musl.tar.gz": "f58dce1bfc71c0bf4c58b063a348b1014a61d063ef3e155699580ce60db5939f",
+    "2022-04-06/cargo-nightly-aarch64-unknown-linux-musl.tar.xz": "bd5119225e2565e6551c4c0548238eb16ffe4b1a3c782735428d6d1efff9df0b",
+    "2022-04-06/cargo-nightly-x86_64-apple-darwin.tar.gz": "1d2552371eb7a05209bd18ca1cee86398a723bbc42ea0d08705f1121af8f853a",
+    "2022-04-06/cargo-nightly-x86_64-apple-darwin.tar.xz": "ba11aac31448a620ed79446002607fbe8987e8897a2e066cf8d7d4dc50b81f54",
+    "2022-04-06/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "61608db26544c28bec878951f63ee684f4c477697510cb1a4cc734e38aa1655c",
+    "2022-04-06/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "7fb7515377864ab551bd9b4160b1b9318646dad54ca21abfd8765337a3cb8c39",
+    "2022-04-06/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "77cea402c204c000b9572efd878888dbe74dd1c8d665b65f2640b04c6418c848",
+    "2022-04-06/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "f602d9a99a795c239160e1e1ece3a845f4b286c149ffaffcf93561d5aba4229b",
+    "2022-04-06/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "02f6f600e74047d540e8468efd4ccb5b0fd7b4c020745458df84b343970b9d39",
+    "2022-04-06/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "6291a76ceb228752eb9a58541b7ca869fe251b7c083c3a7a8d0fb76db090d788",
+    "2022-04-06/cargo-nightly-x86_64-unknown-linux-musl.tar.gz": "4cb35f454e82fe1c15e45a52648143abeb3df9f1db37084422d9a67d259cc4f9",
+    "2022-04-06/cargo-nightly-x86_64-unknown-linux-musl.tar.xz": "ab98bae6575cb181283fd2865a18818952691044fe766c1b3bc753b25e845ec8",
+    "2022-04-06/clippy-nightly-aarch64-apple-darwin.tar.gz": "f76dd6caf9ae840ea3c1e5331b6f91f3346cc8e3dabc00b08dbbdc0a0dbc0b04",
+    "2022-04-06/clippy-nightly-aarch64-apple-darwin.tar.xz": "aa5224e1bf3899e1e8a40a74a90c87fdebc859abc7a9c98e80705f79ba028dbd",
+    "2022-04-06/clippy-nightly-aarch64-unknown-linux-gnu.tar.gz": "4062f55cc0c59354abed8fc0a62959fdf9dc938bdcedc0d1f875af3862e38cff",
+    "2022-04-06/clippy-nightly-aarch64-unknown-linux-gnu.tar.xz": "fc0d6bf1392866c4f8256fa4c31275940eee370e4287a3d36f5d5be4ba31d440",
+    "2022-04-06/clippy-nightly-aarch64-unknown-linux-musl.tar.gz": "939657651f2a404e854f80ae36ce7e7804a0f0554d6e1f65d3d17d8bbd788213",
+    "2022-04-06/clippy-nightly-aarch64-unknown-linux-musl.tar.xz": "9ee6c91e891938c1e7cc57b5f45e7bb4a1928917e821ef6d21d110dda18b3536",
+    "2022-04-06/clippy-nightly-x86_64-apple-darwin.tar.gz": "9cee546cf6d1db2b65e10aea594463422193ff1d5bca65be609a6b3d42f7b397",
+    "2022-04-06/clippy-nightly-x86_64-apple-darwin.tar.xz": "958ffbfd5343862d3e683ce24dedfa157b212840c63f4db7995e7e2d8014f738",
+    "2022-04-06/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "31261bf69ee3ea50663b980b32891b9480958910f28a661660367a51d0ec08e6",
+    "2022-04-06/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "bd12421533b7abe16459af12ac5c5ad3aef230e196add20574f033393568035a",
+    "2022-04-06/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "a3096b1ddd578320efdc8858eeea64c8144f1579c3e5af2d928010a4ec70ff8b",
+    "2022-04-06/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "1b7045359c4e1fd9f4f4dfdb7b1fef6e9e34e5a4e1848327a153156344d5e818",
+    "2022-04-06/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "77cde3934c783735b0ee65ddaa5ce8151768f90882e6db7273a1830767160166",
+    "2022-04-06/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "5bd79997fd0115d221edc8636264080836ffd9be572b8bde2b3d764872592bd7",
+    "2022-04-06/clippy-nightly-x86_64-unknown-linux-musl.tar.gz": "84b75851334ce22e5ab0a0c5fa09a829c7ed3060c7cd05e2975fbed33520a24c",
+    "2022-04-06/clippy-nightly-x86_64-unknown-linux-musl.tar.xz": "7f037ee088f4e11213a45358a5fca06a6be6f1d26c5eb2df4ce37269e994eebc",
+    "2022-04-06/llvm-tools-nightly-aarch64-apple-darwin.tar.gz": "ff58344a3ac2bf46593b18b0a26524019298a1c453ee7a43d958831e63767189",
+    "2022-04-06/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "dd3f60e01bfc5654803807d8bf42860f4b65e13ef7b0e4726206e1a0cb221e13",
+    "2022-04-06/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "abad579ddc8d42a3676bfd9ed555c6430137dbd23689e2e17d241398163ad932",
+    "2022-04-06/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "82ac668f6197cc13334c752ab438607346410c4e04b441434428e2a7c04dc212",
+    "2022-04-06/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.gz": "90ae2e6c3d7ee227a3c677b62a0f8bac39f8b76a2912c1b7ac1ebccacde46f68",
+    "2022-04-06/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.xz": "10869068b1b711603b2994769075fa15520757fb85ce89959e2bcfcbd2c6f923",
+    "2022-04-06/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "93d3498e05b251af13f32b706755d09d2aa1fe331d090c362073711eb3afe55e",
+    "2022-04-06/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "e3fc11664cf2153a6b34282022e3aa66ecddf2fdf29bf2833656e177299861d8",
+    "2022-04-06/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "d3132011ce18e062bd7aad36b35410a234eb378e2dc2f7163ae70852165c246c",
+    "2022-04-06/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "cee5d4971a5c24851f568c79c72b47dbdaa33563e6fae1d5ad0f80e1f876acf5",
+    "2022-04-06/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "18ef22f851571c89edab3366b7ce9b14d0f4f8962df10d4e71545b392db36361",
+    "2022-04-06/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "4c26d888ea88efa68754b06dd70e0e16ef4fd6d3f69224686145e7a5694e009f",
+    "2022-04-06/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "5909e85f26681e883031986050e0b6f5bbfe1e695b302737fcfbfed9425f0cab",
+    "2022-04-06/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "15a594fd6e948d7f64614328382dca665dd9c66c54315f05a0b3bf81c0ecb1bd",
+    "2022-04-06/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.gz": "525f2ff58d1eb6539c1c2baba6e3e60ecbc110801149cd6dba5d9bfcc84fa638",
+    "2022-04-06/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.xz": "c657123fbbaa63c8fe82a42c0e609e6683eeaac92b12a865ca6a01f3c839e163",
+    "2022-04-06/rust-nightly-aarch64-apple-darwin.tar.gz": "e9fb184a1ddb7d160f4ce901e4a689d7a132508fa7ca2d058725d84f539a74f1",
+    "2022-04-06/rust-nightly-aarch64-apple-darwin.tar.xz": "834adc15effe86502e10b9bdd4e0aa16e1575b805bc14323dc0b3354c367c089",
+    "2022-04-06/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "f30535aa4a34a4d981d19c0535d5621252bde0af6b8321b483e13f3c5a042e26",
+    "2022-04-06/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "95d440c38c73d7a441828b7a91eb21f2fbb06a78ab904a9727bf20f4dd4f3f57",
+    "2022-04-06/rust-nightly-aarch64-unknown-linux-musl.tar.gz": "bc93d2b6b04012baa8dcd44189049b8a93154830883b663b50611a0517feb1fa",
+    "2022-04-06/rust-nightly-aarch64-unknown-linux-musl.tar.xz": "5997c7304dca4da0ed07370847eef24cd9afbee6ebf31b92f46ffc3f4a24f050",
+    "2022-04-06/rust-nightly-x86_64-apple-darwin.tar.gz": "1fbec82e67b657abc6560e6d83a65bd962e67396be3c1a23e46a55fccdd79312",
+    "2022-04-06/rust-nightly-x86_64-apple-darwin.tar.xz": "4f85f337a4f1a7b84274193fb647fe4bd2ac3f430c550fb7a63e650eafe98b48",
+    "2022-04-06/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "d09183283e662e39436462eb3dbe6e6c086e38cb0d5c9a1c3de9ae89210285d3",
+    "2022-04-06/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "458017fa9cf1887e28987049bcb6ecc0cae7e9e2530abde327524003a13c2069",
+    "2022-04-06/rust-nightly-x86_64-unknown-freebsd.tar.gz": "d62a242e7933a37b4b1297e4b2ecf96009626145e9fd67bd5875b4eb484c1e4a",
+    "2022-04-06/rust-nightly-x86_64-unknown-freebsd.tar.xz": "75785e9358a951adae085112265a4f1bbe90617735bf79d5dfc693fd025b118c",
+    "2022-04-06/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "bd00e59734ab8ec3988c01a49306b0afecd02e59403ceffac916052eefdf4e50",
+    "2022-04-06/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "7d4f779526d2e869f2ca2c00fd294f1aa867f88b14fd12fa9adaa88c694a7857",
+    "2022-04-06/rust-nightly-x86_64-unknown-linux-musl.tar.gz": "20c5adcc88fc94c58e48cf9971ba7d33042e3e08a99135de0a63be7afcbcf09d",
+    "2022-04-06/rust-nightly-x86_64-unknown-linux-musl.tar.xz": "d35b329886cd4b61f6f370e6ae7fe050feec88aa3e2e03190d68736ea1e6ca1b",
+    "2022-04-06/rust-std-nightly-aarch64-apple-darwin.tar.gz": "a5c2edaec1a40a2e02e87d9edb625136566455c7063641b0d318219c876b5143",
+    "2022-04-06/rust-std-nightly-aarch64-apple-darwin.tar.xz": "de41697ee56703a4fbe772598fc81e59e52e6c2cd9055b36379a3c2f20d490cf",
+    "2022-04-06/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "18ace659f50a5b9d350fcdac06f9a1d47a984f88d720c329243e5c733f930a40",
+    "2022-04-06/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "b5aa0421ec9b745c9759aee56ea2550b9de17327c48cbf25cc90301d7d2fe2d7",
+    "2022-04-06/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "0e5fddd57e69e2418131270d2dce0bd3404af8f7dc9caba4e5195dd059662d78",
+    "2022-04-06/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "bec6d354aa221836ed6a1543c56d856e9a26d4321124f237dfb9035f2da64cc1",
+    "2022-04-06/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "ac32b1f4cd8e83584d0bce16c502ecd51043e520fe5066adf06ebfb643813ae7",
+    "2022-04-06/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "72046644aad04cbeb46dd8641404337e6706efef089ae745d6a886c93542404c",
+    "2022-04-06/rust-std-nightly-wasm32-wasi.tar.gz": "42569968a63dcd7c1650b0215b1cb58ea0e087b99f1bf1de8166b79482918257",
+    "2022-04-06/rust-std-nightly-wasm32-wasi.tar.xz": "a5492e08b530ae83120b3e59771af0343c700bcedbb60b4aaeb02ecf6b1f6a02",
+    "2022-04-06/rust-std-nightly-x86_64-apple-darwin.tar.gz": "18472ec3ccc49ff9e90673eed7b255a3260ba20e98a80f71ff8e1a50ea1b8519",
+    "2022-04-06/rust-std-nightly-x86_64-apple-darwin.tar.xz": "c6b018249431c3ae9d3e725f1d2ec85c89b70a9467d462758d07f1fbab6ca82e",
+    "2022-04-06/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "b2a1c182439d0cfec3a7c60a656b7f134cf8804cf24a370d80fe01976e32fb60",
+    "2022-04-06/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "88fe9850a12a96914df2cb439214eb6c08b7692abffcdfb9d3b37858323c4677",
+    "2022-04-06/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "93525ae05de69358ce116a5bb945ed93aa46a852194c9de4f3336c78e4136a49",
+    "2022-04-06/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "3a3e983f90d66be41d1e68a3ea75de64e7b786d29fe9be1fab31b0e7ed47c264",
+    "2022-04-06/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "b72fd2e5da0a4721dfb7fc4eb767ad2f13933c61baeee9b8031f13b99f8926fd",
+    "2022-04-06/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "dfa88881d153eb75a9f5e6fb180854c6d51a6f16402ac7454aa4c849c032d896",
+    "2022-04-06/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "b5eb76832cc0a5faf00532958ce045c3d9aa0858df346e98d91a5d836650ab8a",
+    "2022-04-06/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "00e7b8da13a0b1961a430c0111356a3cc2635f8cbd064acd686196b8c5fda0d4",
+    "2022-04-06/rustc-nightly-aarch64-apple-darwin.tar.gz": "4957e96de24a361f246fd1fecaefe00bcc362510c0b81bd1423c45589bbd1721",
+    "2022-04-06/rustc-nightly-aarch64-apple-darwin.tar.xz": "caf36ae5afdcccbd09b633985760a00693a99e929cc57d31743f5822c443037a",
+    "2022-04-06/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "776385e6c9ca23c7236508e7cffc125b132c5324c839f954c2f5f056f69cf291",
+    "2022-04-06/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "54ad264e7b0ddc204d956eff258b89eaa4287474493bc9de54d35d4c7f7b3aa6",
+    "2022-04-06/rustc-nightly-aarch64-unknown-linux-musl.tar.gz": "c9348e1709aeaa87f37eb21ec65359aa22997fc30bca152d96d8f4022534bdf0",
+    "2022-04-06/rustc-nightly-aarch64-unknown-linux-musl.tar.xz": "cb3a1adae111d1ec1cf164880989ffe6c6241fbfdecb86207d87fb896060c653",
+    "2022-04-06/rustc-nightly-x86_64-apple-darwin.tar.gz": "47eeb5df2349b5b00d39bfd77ed332341b4cdf69a057c2da8aef798704645087",
+    "2022-04-06/rustc-nightly-x86_64-apple-darwin.tar.xz": "eaddc49c569e3da25ff83951883ba3150c997e4640c9146c45bd6f698ee862d9",
+    "2022-04-06/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "f72cf6e692429f71318b2ce06728f34b3838c37f2f8d3e7cfd01dc412cd997f6",
+    "2022-04-06/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "0798aacc9b85971d91e801512a3bbd1adc87386c27584953a638b55a580148de",
+    "2022-04-06/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "c43d24c7f44cfc52763523c38405ce31782dbb2616c12003a2b12e3144b92a70",
+    "2022-04-06/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "a8483d029365f15c5a7b7b01f6e1cc20c020a523280b364522e06be698d9f17a",
+    "2022-04-06/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "a3c6c8af00e659a59868556ba189c720fd838338bd0e3abdb068a85c32cfe14b",
+    "2022-04-06/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "e3867738f3e24345daf9cc9ab842fa37a9e326f3ebc1842af3edacb9951a4c2e",
+    "2022-04-06/rustc-nightly-x86_64-unknown-linux-musl.tar.gz": "e7262d07e94f85e621e1d0fbc9a6b00a7b2e60eef3462c1768a2e7dbec72fb6b",
+    "2022-04-06/rustc-nightly-x86_64-unknown-linux-musl.tar.xz": "5948c4680c1cf05e990d60cff4e9d79aab26d492fc580c0e20b7ce53350c5297",
+    "2022-04-06/rustfmt-nightly-aarch64-apple-darwin.tar.gz": "2a7ca3e7a8821e85270db660a0a284f849c07296bcb361d1c8a430da51b14371",
+    "2022-04-06/rustfmt-nightly-aarch64-apple-darwin.tar.xz": "c38a31996160ba02ccfacce36cd97972b00d26f4ed8061e3773e31fa28835c58",
+    "2022-04-06/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "29637f5a50b781ef6857cf7515addbe0e4f552d7b4b54e7ea598b38b4bf8eb54",
+    "2022-04-06/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "bcb43a2b7ca5f461e704b6fb5649ccf1ce446c76d1b9afa788861e53fb291c74",
+    "2022-04-06/rustfmt-nightly-aarch64-unknown-linux-musl.tar.gz": "19f43ffa97f39c9147748635be46f53d2e6df52c275e125b5fcb0a3ed04d98d6",
+    "2022-04-06/rustfmt-nightly-aarch64-unknown-linux-musl.tar.xz": "dd62f0425c24f8a3356f42dd403aa6930397c566fe59569ccf795383888c4dc8",
+    "2022-04-06/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "8429528b908f82f5459927e3c9325a7551ac4a54b416b9e0b27f579ba6399853",
+    "2022-04-06/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "cbd1f4fb3f9aab7e6773d9e99b702e1a300bd9a8bab2ae64db94f2a32de8eb70",
+    "2022-04-06/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "8699778d692deca7b4c8e236e0ace503216ce8217f706b6eb99030c56aa28cd4",
+    "2022-04-06/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "eb33798cdb8b0002294ca8fd6930a136447a2eb577b95d951161b2ce41f8683e",
+    "2022-04-06/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "1c74012a03a574810026dbf7f35948a4acf2db96f45f83491adeccdce445b8e4",
+    "2022-04-06/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "85f69aafb8249b472b70fc8415e0f5bd82f01e7320c74655a03d7ee967a5360c",
+    "2022-04-06/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "0c82c8cb16abb309672e9cbfc7acd959a128a43e07641bfdf17d73b7e8979990",
+    "2022-04-06/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "0eb44d374033a9a9806fe48bfcf32c7a2bbbb89679a3e54bac9c105caed08055",
+    "2022-04-06/rustfmt-nightly-x86_64-unknown-linux-musl.tar.gz": "efa33aea45f0bdfcc4074bbf2c248cc765f6b14d4df39bdfabc263eadf1b9347",
+    "2022-04-06/rustfmt-nightly-x86_64-unknown-linux-musl.tar.xz": "66db08a612651891aef08f75ae184483b00df7d81390b2a3c66800f81534e14b",
+    "2022-05-19/cargo-nightly-aarch64-apple-darwin.tar.gz": "a2e5ba1eea4c2e9cc8a73f875a16aab92051d6335bd5c3b7891bd9711c42a903",
+    "2022-05-19/cargo-nightly-aarch64-apple-darwin.tar.xz": "56f049bdb2b7af34c2da955bf5961fa5240e6bbb33cf8c7f2c57dbc9a25088c9",
+    "2022-05-19/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "2d7c51674e82355626e74c69495df46855734e4b118d92c1491bb8807be76b3b",
+    "2022-05-19/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "7df746c7491dc98145ac55d1d08b9b01d88e6b2a0aa05a3ede34866ca575f9ef",
+    "2022-05-19/cargo-nightly-aarch64-unknown-linux-musl.tar.gz": "d1bf172333e0de8488a94447538fcd9c94f51e999296a62bb4c0bc8b9bdea165",
+    "2022-05-19/cargo-nightly-aarch64-unknown-linux-musl.tar.xz": "1cf5f1292ad67ccef15b520a25d8460ebd7f7aa6379b8a77efd2685bd8d72d2d",
+    "2022-05-19/cargo-nightly-x86_64-apple-darwin.tar.gz": "a7526282030667a5b7dd3d3e3dddc9417db850f9ebe64f2badc6a8e125fa0b2f",
+    "2022-05-19/cargo-nightly-x86_64-apple-darwin.tar.xz": "2e8b0d0606295b8bb42c28d61c4eb2629fcbff7868a9b7981c6d0fde10d57be7",
+    "2022-05-19/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "2de3750b35af5a9dfe496e4a50efaeccad5b05ed0fc5242dbb84f78791d965f6",
+    "2022-05-19/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "c815670d31c79a30ed8cc0f53c2a6c8a28a1be58e1f2036fcc8faece84f8124b",
+    "2022-05-19/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "6c201ec156f70176c28daec226c688f092a199da590d3f659043886df3e95cdd",
+    "2022-05-19/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "c01a60cc0abc83ec569fd3892fe9d4b2fec211c87325cfa8972e85896f28b4ac",
+    "2022-05-19/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "da2e58f0bbf4d396e677dad7b785a1636929043b255ce099272180d36fbb8ec5",
+    "2022-05-19/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "4e77d9dbd960c7ab71a94aa1e6fe25bb52c86a1b466e9bf4845486b61ebf87db",
+    "2022-05-19/cargo-nightly-x86_64-unknown-linux-musl.tar.gz": "6683916049b0ae51e206a0568a11631788ae9218d05acc497fa78840bd4c8b33",
+    "2022-05-19/cargo-nightly-x86_64-unknown-linux-musl.tar.xz": "46f91b7e9d20cd091b5c14228270728af585d08fafcbe60f6bf8712288cb0201",
+    "2022-05-19/clippy-nightly-aarch64-apple-darwin.tar.gz": "928da4ef651fea2f341ee4affe7f225ab257f35b614f53bb8e9417254a34963b",
+    "2022-05-19/clippy-nightly-aarch64-apple-darwin.tar.xz": "b558f033d089d3fd86ed6fad6918519481c7076f946deb3fa971c1df82a3eb3c",
+    "2022-05-19/clippy-nightly-aarch64-unknown-linux-gnu.tar.gz": "9ae879e3c8bab56de67ddc229b8fb18802d771623fc38a104f375483bfe58d6e",
+    "2022-05-19/clippy-nightly-aarch64-unknown-linux-gnu.tar.xz": "73061c361b5d56c91545cc67a7dd05587e4754ce743cf25ca456b5879c9e80b3",
+    "2022-05-19/clippy-nightly-aarch64-unknown-linux-musl.tar.gz": "bf6492fb5daeb5d105a8ca8e4a971a7458572b157e7a95624d57a8f41103b524",
+    "2022-05-19/clippy-nightly-aarch64-unknown-linux-musl.tar.xz": "3167a4ab43f2555b71c75f5bc7ee270e7907ef8ba240998fbb142dcda1c4d6aa",
+    "2022-05-19/clippy-nightly-x86_64-apple-darwin.tar.gz": "65ccc333ee5f3679ca6557b5d3fc0b01c20633274534f59998e2ad6fadb83bb2",
+    "2022-05-19/clippy-nightly-x86_64-apple-darwin.tar.xz": "2e6c6abe21b8ad47030bfa7ba356db323635784cc65109c786918e6d189b2a33",
+    "2022-05-19/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "dde6acdf0a04701dafcc90b11e2f9ac33b7270816f3fb55b432a99626f1a369b",
+    "2022-05-19/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "f075f9ccb9c4ff9635ab6576dfa0963a5537e82086bfe50dcbcaa7ff54fc6952",
+    "2022-05-19/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "23429eb035f8b73ab22d6fc288ed716bc9cf118a33c8de747726f6d0757ce50a",
+    "2022-05-19/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "d4bba6218c9b4c959618f2a1170a8f60d08c38da9590e30fe32228fded5c8781",
+    "2022-05-19/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "8c9d02e8556da74108f286e0e372c5cf98386ef6a2e67abbf21d3510a38a0196",
+    "2022-05-19/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "f4272e25c3b9222f1119fcc820e760c17cb9bd7035a597504bf4f329a001704e",
+    "2022-05-19/clippy-nightly-x86_64-unknown-linux-musl.tar.gz": "53ad0354e86328b83c1a09ece76a4ab43e85404b116be55fe3ddcc4dff7ff3d1",
+    "2022-05-19/clippy-nightly-x86_64-unknown-linux-musl.tar.xz": "3148ffc79ab18b51daa399f75b45d8e3a8d1b876873312b6e230dae6bd54dc49",
+    "2022-05-19/llvm-tools-nightly-aarch64-apple-darwin.tar.gz": "262cf5a051a23f283f96d1e0abfd80b2d24676ac8d7396f165021dd2ca6c9a21",
+    "2022-05-19/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "8c76348179cbed4479625a74219fa05f634554327b5eee3aa7b2bc88a94f9db9",
+    "2022-05-19/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "35e28d8907004a56e378206556d506aa12f584cefa9e753f1c90b15883c98168",
+    "2022-05-19/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "ee090be45c702799805f59d837a7cbcd9c61e13012582ff9cc148e91c72b7d7c",
+    "2022-05-19/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.gz": "135a93dbe7e38d9f718ea09ec71cfd0a0d2ed632782cdfebba6a3fa42e06843b",
+    "2022-05-19/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.xz": "90dc3c50781d45f599932609baeb27a21a9bb25a3f24f2891cf50f5fb2a2cab8",
+    "2022-05-19/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "da8e7d9574ed4fa00a43ecc4e2f57276e79860084c46aa340c4a89f7a96908c9",
+    "2022-05-19/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "da2e08b3317f2d86523498fcdcc18f000844169e1a5056ec052d5122253d1eb0",
+    "2022-05-19/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "46d85c6f1e19d8f33502c9c17ecd54f96511a5d78ce71ab5261721278b802bf8",
+    "2022-05-19/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "15d48232fe117c6d056c119ed11f704d4be4afb348d6aa291b6510db36c8fa51",
+    "2022-05-19/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "7ff51a4424df6ade5f2d2daca6b8484f333a3e26023b271cea1b431faca161c0",
+    "2022-05-19/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "b76b0d8f279af025e68f72f72cf55e93208ece1ca901a38b195a8ba290b1b6e7",
+    "2022-05-19/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "40011bf04b71de19e2c81b802504009bc41c20f35a09627028ab92bcea460197",
+    "2022-05-19/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "43f089c115c8d989ef99ee219ad47bf27f9e7c8f20788e1b57f3b4180491ab4c",
+    "2022-05-19/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.gz": "ad6dd6cbc2971868cb834d312739b864c38b62b057fe2e0d393692d2c99cf7b4",
+    "2022-05-19/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.xz": "7010f8fedc1230d7ef1db3760689b50ec2cfed2a6f0af92151c2c20289134188",
+    "2022-05-19/rust-nightly-aarch64-apple-darwin.tar.gz": "c5a26b947f3853ace3cbe439d17d30219a4b87f1636ac1b6ea30e7f11c2e2637",
+    "2022-05-19/rust-nightly-aarch64-apple-darwin.tar.xz": "73914e4e63fcdb24fd162db80f80c4b28edf729b84b750d6cb053d1be4fe6369",
+    "2022-05-19/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "0e51aa98edda8968ed24df349aca8b975bcb5a016c29d1a37af73e72040cdc89",
+    "2022-05-19/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "597cfbaac77e372fa2977fb6836b7549dee4bd450490bfb8bdb83618f3d2799a",
+    "2022-05-19/rust-nightly-aarch64-unknown-linux-musl.tar.gz": "13ca6b7a92644c8b31b928d30a17fa7f4e768f773ec04612d287d5f9598f56a6",
+    "2022-05-19/rust-nightly-aarch64-unknown-linux-musl.tar.xz": "90889b0a5507f72d1c4a16db459abeaa861d9b84bafb1750c79639b48f5d037e",
+    "2022-05-19/rust-nightly-x86_64-apple-darwin.tar.gz": "a1023847b4bc385fa6504eb45e00fb7c607a221ab02896ff44038bdd5e5285bd",
+    "2022-05-19/rust-nightly-x86_64-apple-darwin.tar.xz": "1e117d92cd2a290f3d54000bd53a7128b809b0534e391fceae143a608a22f750",
+    "2022-05-19/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "34e8c765f52882d759a760139122bbf80b38b6869b9867124168a8446e82d820",
+    "2022-05-19/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "93c9f5a73972e28d936ebc4cc0e18aea033cd35c7d8673fbc02e15c6ea9d4412",
+    "2022-05-19/rust-nightly-x86_64-unknown-freebsd.tar.gz": "04f7c4799b35658c2b2d794c485c350fa93fefd3885d65a2d2b220f60e15dac8",
+    "2022-05-19/rust-nightly-x86_64-unknown-freebsd.tar.xz": "4c2ef0b421c279f08bf266d19dac926723f5a8ac81fff7c6b73561664470add2",
+    "2022-05-19/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "e243260137f3cb1124c5c1b1e7b7713d3549415d4fb6f15cb9d0f3573fe22e26",
+    "2022-05-19/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "9b9a11997db8b241bbb15bb482ff31b441d99b950daa63f184a4a0fc3294a4bb",
+    "2022-05-19/rust-nightly-x86_64-unknown-linux-musl.tar.gz": "c280b43b645ab2c93080c7a31758db77dfd2d1cf77a2ffe7caa43849a0a366b6",
+    "2022-05-19/rust-nightly-x86_64-unknown-linux-musl.tar.xz": "7ac30a56df3a4031ec0cd28bed06c75f96ae9ec84a111f41e1904e1ba1c05280",
+    "2022-05-19/rust-std-nightly-aarch64-apple-darwin.tar.gz": "1759e788d7f12502f49847b0603249fc721f6ad7e7dbc911750a98d0318c2af4",
+    "2022-05-19/rust-std-nightly-aarch64-apple-darwin.tar.xz": "a59db481b5061a97dddc42e434e2cc304e531ba55f75dd9974e0ecb388aab1d3",
+    "2022-05-19/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "b08405140ce428d7f33171f021988763494ecbad4f3804d8c92b034e8af8c0fe",
+    "2022-05-19/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "127d82bfa78832f6126ce232b3d7016d780d6ed2e3c1dfe8b1c85ba6802d001f",
+    "2022-05-19/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "c64d3aaf14259f3d7f71d129f5de8fd2ca27aa40f25f27107e95d28af68cbd00",
+    "2022-05-19/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "6e755d20c79f7ecac4d6472455ce6acadd57dc54618c178bbc844930774fa9c4",
+    "2022-05-19/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "6c400f9b843ed56451f8657f007cc3bf55c191e4c47875c46cfd73aef8919593",
+    "2022-05-19/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "2f3668859ec83f8d78a66d8beb12bdbdd1e000039a4b22210a2f262d86506149",
+    "2022-05-19/rust-std-nightly-wasm32-wasi.tar.gz": "8a1128403522dff777982ae563a59db2a8744022eb086ab20726ef5171996fb2",
+    "2022-05-19/rust-std-nightly-wasm32-wasi.tar.xz": "8efd568896fc1308589d6c77e1cdea3724c3a2805504ecde373ab85d672f9a23",
+    "2022-05-19/rust-std-nightly-x86_64-apple-darwin.tar.gz": "f48c72029cf6d37e2c5967207959f9a7de3b31490b304415c717e45f85bbabeb",
+    "2022-05-19/rust-std-nightly-x86_64-apple-darwin.tar.xz": "fe6d8367bf5f8d4c5a06dc15c9d26310c8c47dc9d7fe4c1fae27995132f8b801",
+    "2022-05-19/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "fee7380b80de89299037ab03d75644df02522ab1692289d1317a327880e9e4d0",
+    "2022-05-19/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "ea1db82d9789df12c306303ca653c36f1a949545c2bb7ed1f2453496361e5589",
+    "2022-05-19/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "215855934d8a1ed64fbb7f2c933541fcc9a0d137fbc3d762298c8c6255c00258",
+    "2022-05-19/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "170900fa3a886776014ab0ec56a04b5176853bb535da783d0f557a492bb8ab5c",
+    "2022-05-19/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "32bda3c334564446f6bc3f3164f6b9d010ba17e348704acb45fa9fdbc05db466",
+    "2022-05-19/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "0ae17469f290b5ac54fe8b366a87365596957cb8f74d6637f2e5f077f5bd77dd",
+    "2022-05-19/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "3542c966d7b8d2aabb6e083740e86ec4b590d3908d711505e865d7f0ac631966",
+    "2022-05-19/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "0352d744599c04be6037f1fbc719a5d6f34c3c93b557bfe22d737fb6ff401e30",
+    "2022-05-19/rustc-nightly-aarch64-apple-darwin.tar.gz": "cdd3bc67be3ee47941ea185bc0967e9fd09d9212e9767eb6c663b3fe0e9a41e2",
+    "2022-05-19/rustc-nightly-aarch64-apple-darwin.tar.xz": "14cb94e1db0ad1ff31721eeda7fff152dd9bcb7b072024b30d0629df02f9e7a7",
+    "2022-05-19/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "6a8626776a9795060679a706b9b54ddccc1d37ec5620ae0f8fc7931a200dab0c",
+    "2022-05-19/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "928ca013fe69bf73ba7f44ee659c659ba32b1170d78f8023d00d9705fbd8dc24",
+    "2022-05-19/rustc-nightly-aarch64-unknown-linux-musl.tar.gz": "25767b41e9cf01214cc06af1f2758ca4a408b23abfd6273222d5a8d95fa873c6",
+    "2022-05-19/rustc-nightly-aarch64-unknown-linux-musl.tar.xz": "9f793b622eee2991a365440db596fd3f84d2a6963780774a91502b1c9ee2b393",
+    "2022-05-19/rustc-nightly-x86_64-apple-darwin.tar.gz": "cf3ca080ef505601cdbe68ea0d8376701c4bb8f6f18ff239cf8d2c9ee21ee202",
+    "2022-05-19/rustc-nightly-x86_64-apple-darwin.tar.xz": "787cd0a504f25a4d2b50f87cd179ea457490981ad95e435d7686a7aab80bb607",
+    "2022-05-19/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "c434bdd2a82f18f4ad84d29dc5e6d971e32f8ba4fbe16577460ae1d387d802eb",
+    "2022-05-19/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "edd73de1891ddbb3814efb264ea84136df78eaac94cb6405e9e85d114b86caa0",
+    "2022-05-19/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "7305048bb55fd07475cab45b6c286c8904a01182f93acb3d4af6ab07699c9081",
+    "2022-05-19/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "c96ff89c9cce78f1a119296dd4d3f773e8c4a74f4b1eb464f10b417970fa6322",
+    "2022-05-19/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "8dedb6c2aa7357e776f6489e921901d9ad10e84662f5833d38241ea383362d8b",
+    "2022-05-19/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "ceac04828bb05cb621d354714cff449aa322c074b0d5bfbf2618d61e72e3017e",
+    "2022-05-19/rustc-nightly-x86_64-unknown-linux-musl.tar.gz": "e041ec10e7d3315c614fab96795688ba818205e964ccf8ae9aaf2e5ccc1f9f94",
+    "2022-05-19/rustc-nightly-x86_64-unknown-linux-musl.tar.xz": "9ae0ff41d94a5f44393928c087b97509ef905ee180e1555d867cc3a98b6628c8",
+    "2022-05-19/rustfmt-nightly-aarch64-apple-darwin.tar.gz": "8934786fe81e6d2a5f680f50d0529b77e6c25e0b6650d31b43e7fa1841b1f02f",
+    "2022-05-19/rustfmt-nightly-aarch64-apple-darwin.tar.xz": "401e11e5af691157e57081f70072360317d1baa289e6c0c8b5c58f5aa357aee1",
+    "2022-05-19/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "2facac5616061afdfc31e3ed95f639ce663c4c1031e3c50f178bee69ab93d70a",
+    "2022-05-19/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "eb86fb841c47bd726b68f179233bf17259fe304730228134d231d9d8375416a1",
+    "2022-05-19/rustfmt-nightly-aarch64-unknown-linux-musl.tar.gz": "db5f4732a88898370e835b8c469f055fb8a6ed423dbd76f408e3e010bbe39301",
+    "2022-05-19/rustfmt-nightly-aarch64-unknown-linux-musl.tar.xz": "102283b980e71ca238d16cee1cd616959e8d61b5d43b5dbb4da9cff79bd124e9",
+    "2022-05-19/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "390fd1459e99f9f92285e633be93296ce2db577731f30ffeca6ffb025a580c6a",
+    "2022-05-19/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "de14fe54999af1e76f2436e27706e7a9af09a65fdfefaa36ff8e743cd84e0b84",
+    "2022-05-19/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "c28f8925f6ebe02ebf5526136ee789a5eb85e0eecbfe32559095db59eacdd464",
+    "2022-05-19/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "814e24df1248b33e926061d05de9b27f2ad2351c0db9746cdc399344fa92e008",
+    "2022-05-19/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "a2ac8bc8dd10d54d815b0c2b17da9dee4ec88ae7b11c622aa448bbb5a2630d27",
+    "2022-05-19/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "c8f208473af5d7014e3d4234999af1336058e4db041d987d091a03ca2e67d2a4",
+    "2022-05-19/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "0b3eb8d7754f320983ef80ae621241576f8e62afbe042e6fc213de0ee8cd2b69",
+    "2022-05-19/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "174f6734ae0dfa0ad6392cf106a61e0a8ed79bb517a5c87e849191d9baafa4d8",
+    "2022-05-19/rustfmt-nightly-x86_64-unknown-linux-musl.tar.gz": "ca3af32cf95b3043eecd12117c0b58954ca31f26253b00d4bbd1cd95397796a2",
+    "2022-05-19/rustfmt-nightly-x86_64-unknown-linux-musl.tar.xz": "85d240625628a05cc2a57246b3d02670d9809447b2191472d3464bbf64efdadb",
+    "2022-06-30/cargo-nightly-aarch64-apple-darwin.tar.gz": "dab3e530f771a66fb27f7dd80ae94d72885d9f8c806a236f8eaafd7f4b8df0b1",
+    "2022-06-30/cargo-nightly-aarch64-apple-darwin.tar.xz": "480fd83b2cb8c42a3587a1b65a8af9c1b69b98132ffb59c56f1e02e64a02344f",
+    "2022-06-30/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "e9eb6ba6290ee9f8f15655ac692fb6ae237d7a3b7c67c2bc9f39072bfab645df",
+    "2022-06-30/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "90aec658630601c1110d01d41e08c06ca90ba0c92e151b83fff69ca08555f3fc",
+    "2022-06-30/cargo-nightly-aarch64-unknown-linux-musl.tar.gz": "36cbd388fb5d3a8bf260584466e2204a09b23c262526a4f625eeec5b3bebf69c",
+    "2022-06-30/cargo-nightly-aarch64-unknown-linux-musl.tar.xz": "b36014424b165c2913545ea2a2b3e5ed8fdfe099fb3143c96891658ac6fc3818",
+    "2022-06-30/cargo-nightly-x86_64-apple-darwin.tar.gz": "313ca29a7b3f4f35ea049010f7e84728f938d25b8396d7662d162ca5a6be0e9c",
+    "2022-06-30/cargo-nightly-x86_64-apple-darwin.tar.xz": "7cfc08aa98f4501ae688d2d7309f06807b746b707da98de83cc6892260193fb2",
+    "2022-06-30/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "08fd084b5967c2718a6c6154f613e3dab8bcd60d5c3fb437f7c80eae6307ee29",
+    "2022-06-30/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "c8934bec14d5b27f6aff6c474df4f1e7c901de2f9746eba474a6dbcfe23aee67",
+    "2022-06-30/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "8b116a8809935206d05fbe2d8673f95d6e4be48cb6b695bc682b1b2244c560cc",
+    "2022-06-30/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "1592f8061688472ec5dd99f1930d6461a33bc7b2c48d5bddc19b56a460584afa",
+    "2022-06-30/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "7359ea594fb073c3b67d2850c8fc2df29badee2ad4c5afad65891180e8b0b180",
+    "2022-06-30/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "bf87df75a755880dffecdd895433dea5215e33ead8052b93b07ad47a0420e37f",
+    "2022-06-30/cargo-nightly-x86_64-unknown-linux-musl.tar.gz": "13e49c766fc16bda3522512a78c1c61064ac4948cab53dd18f70bf69425297cd",
+    "2022-06-30/cargo-nightly-x86_64-unknown-linux-musl.tar.xz": "aea678afdabe4e0d65e1e6d04a1d31f51e2cfb01ac3de956731dcb18eca7f74e",
+    "2022-06-30/clippy-nightly-aarch64-apple-darwin.tar.gz": "dd11da949770ca0d392567280d104885279bb5dcba76389ce2513f35985e6b05",
+    "2022-06-30/clippy-nightly-aarch64-apple-darwin.tar.xz": "f22f4e94597972c0d586a6a8684d683e7272f28816b0395e32cb8341d45b0276",
+    "2022-06-30/clippy-nightly-aarch64-unknown-linux-gnu.tar.gz": "38e3d760f0e7648c9ab69e1db9c58871735983c3651f5b96445454207a5a4993",
+    "2022-06-30/clippy-nightly-aarch64-unknown-linux-gnu.tar.xz": "31ce9f2573c85cae830b80e1cdfe7e79e1d81c3aee9ccdeb6271975835ad9ab8",
+    "2022-06-30/clippy-nightly-aarch64-unknown-linux-musl.tar.gz": "d909e062b362c8c808c090506f407787c254e44737ff678be8cdeaf0a41fa2c3",
+    "2022-06-30/clippy-nightly-aarch64-unknown-linux-musl.tar.xz": "d746fc2f8c9d68683899322554aa3b44bf18e12e5e2ae4458f13c7257e3e7d27",
+    "2022-06-30/clippy-nightly-x86_64-apple-darwin.tar.gz": "fa243074c45832d3dadd72cd8b4869e44e93ae33564acbeb92b92b23cf90fa5c",
+    "2022-06-30/clippy-nightly-x86_64-apple-darwin.tar.xz": "325f36f29245bcc3b17b1ca4b56f79d61282fdd29d9752de17205a7cd6ca7af8",
+    "2022-06-30/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "decdaed7217ec1ad85fafefd3d2c104201be548938537ffb26707ccd3c0c0536",
+    "2022-06-30/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "dc34a8d99e36add092c7fe004367d58ca78e04e03d6a39e1ecc6ba25bc19d8a7",
+    "2022-06-30/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "d03191b64956f5651279df087dec5433e3e0eeff56f0a63b452e4f6a374e12cb",
+    "2022-06-30/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "7576c34fc2a2bb42a4c56bcaec1aca23030a8b66734e6f080792173227ee88f0",
+    "2022-06-30/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "c5dadc9edf3bd134a9e8a64b3ff9b586ea3f39cbca60a2537b395ca2e5cd354f",
+    "2022-06-30/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "0750dffb42e8af3a7d199766bbaa3effa6026e4c8728f7bdc9be42c12a8513d0",
+    "2022-06-30/clippy-nightly-x86_64-unknown-linux-musl.tar.gz": "2893c69f382a61243431aefb23175e0b8d0666e3ae815c07fd4322824a70f5f5",
+    "2022-06-30/clippy-nightly-x86_64-unknown-linux-musl.tar.xz": "c32ff80fd4d43695ead06845783a80da47f6309466fb0e70670c9c9a43b6e66b",
+    "2022-06-30/llvm-tools-nightly-aarch64-apple-darwin.tar.gz": "0f6f2215c91ba37aff6199e6989727efeb80f7b96cb192774fde24cff6d06e53",
+    "2022-06-30/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "c60dca323966b18a2829c5afba5d131ae01e88a6c10abe2fb4b5310aa8a38460",
+    "2022-06-30/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "9d7d946a1ab237635703554d24b32ca90ccf2c85f946df4147e5907c9a650dda",
+    "2022-06-30/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "5a88be0f8d1beb5168d351318abd097505eb28341d49040b6f8a6ba0493761fb",
+    "2022-06-30/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.gz": "e4f6ac90b59658166adcf682d58bc2f73336d366ca33b9cc9bbb1686239b59bb",
+    "2022-06-30/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.xz": "1e497f0c6dd5baab1cafe98fbe6e2c6d6756e4f24464402bd53a0334bc8b06ae",
+    "2022-06-30/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "cf70a549a0ad028802ed1709eaa793355a5f359ba28d07bf96b3fa5ef985e0e3",
+    "2022-06-30/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "f12cb2e9b4ff5b32cd9200749eaae412fdfac055b58e38c224186b3a57413f1e",
+    "2022-06-30/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "52094cdd5f51ea14f4236ee8280490fe76f65137d2598630c1ad787eee9f9089",
+    "2022-06-30/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "acbfecd5107f005b268a891d3597e7780ab3307c5f5d4bff5014bca57c4dd548",
+    "2022-06-30/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "db634ed1cd909e74829aa26decc8d979c95cdb87315b83806f5251414bd1b36a",
+    "2022-06-30/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "48e7215917372d559bea6713f4483ffecaa9cd2d087894bf4489ba7e7862b0e8",
+    "2022-06-30/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "5540d06f92824b3ba81212300999a0711f250efcb784486ad7830b370d8ebdde",
+    "2022-06-30/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "4624a88b86cddabc073bc2505103c452ce7b16d308ce57711e9d25a5c7c4febb",
+    "2022-06-30/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.gz": "8147d80b6df18e0d37b9e20bdd24a0147ff8bf07b9e4734f519ca5de4f965d14",
+    "2022-06-30/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.xz": "8afae547818d91ae935d0a89700f95321faa31b0a89f6fc760ab9d19dc8ad27a",
+    "2022-06-30/rust-nightly-aarch64-apple-darwin.tar.gz": "abf610fa1e907d7b1e376bc162f77bcf23442e1c1ef3c62f857ec59006cf30d8",
+    "2022-06-30/rust-nightly-aarch64-apple-darwin.tar.xz": "7e4fd72ea2a21461fdb7d755078e774d65293e09845f238f075ca213613f32e9",
+    "2022-06-30/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "9a73aec5a7e29e1f8e8fbece0af403a5468e91fe8ae572e5367c1974b7104bd1",
+    "2022-06-30/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "aca45a17cd5b386e7e5967d08bee051d8d5c70145085913f3e841a40fdec890e",
+    "2022-06-30/rust-nightly-aarch64-unknown-linux-musl.tar.gz": "715231c001e959d271dd63fcfe880f32c72bf7d37792f29b60b3233c0240bb1f",
+    "2022-06-30/rust-nightly-aarch64-unknown-linux-musl.tar.xz": "d2df237aaba0a3529a37b88bfce6afc5e6b3311b3f95cdfa37a29b345a3e52c0",
+    "2022-06-30/rust-nightly-x86_64-apple-darwin.tar.gz": "74f31a5ebaa2b6c30f515d76b74dfd81cb99d7a6b420d164c54ff3a940207933",
+    "2022-06-30/rust-nightly-x86_64-apple-darwin.tar.xz": "2c4b2b35983784362697c453918399f803a2ede9adaf1c30d760bfe66842e32e",
+    "2022-06-30/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "202c8cad67eba2edb03e82155fbe310a759a7216e9b5b5846fa9be605d80f382",
+    "2022-06-30/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "0e18c75462d207e9f0cf801e7a0d541762e7160805eac23be5638a6847680bfb",
+    "2022-06-30/rust-nightly-x86_64-unknown-freebsd.tar.gz": "e794726271e7f51ce63002725cdc9a62297ef2cdee1aa6fb608e8782b1c05fe0",
+    "2022-06-30/rust-nightly-x86_64-unknown-freebsd.tar.xz": "bf27a86312ad097e3e2b60eb03fc522820733d91c7a6cf6741bfcec58e9e1166",
+    "2022-06-30/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "a5c31e2ca7ad9111afa4a224f746aafc7b7a0975d12940bcdac99a44e7093297",
+    "2022-06-30/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "2ebcd2124908165d3e25d5adf2e41c767c94f346191e970fec8adcf90ca38a41",
+    "2022-06-30/rust-nightly-x86_64-unknown-linux-musl.tar.gz": "4a70ce8d621e30980770a14e31b164dc6a28c0946a6c94cd334c87e7663d41f2",
+    "2022-06-30/rust-nightly-x86_64-unknown-linux-musl.tar.xz": "99a83dd14959fbaba789223a64330900c77c6ad223279c25190a21f4ae47fcb1",
+    "2022-06-30/rust-std-nightly-aarch64-apple-darwin.tar.gz": "4479b0fd89ae5ee5c01a9001dee91f3c9c377da3a507ff20b89c78abfba12c9e",
+    "2022-06-30/rust-std-nightly-aarch64-apple-darwin.tar.xz": "77baee524b110b32f3ad2bb8a9138454d7b19b1817eb43a8cbe9d5332b9d1085",
+    "2022-06-30/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "414ec3a5960d01e18ffb923c4a5207166bc24f4acb0a6975e82a715e02bb20bf",
+    "2022-06-30/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "38dd7e2f3f75a868e0da8f9ae6aa0d98926e37deffabdd1319fef4c8d957502f",
+    "2022-06-30/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "1b87f228260c152f05317c4866c4402646767ed5d16066e538d384f619885bc5",
+    "2022-06-30/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "7eb7dad8cef21e656364a223488b8c519a89069598a2dbf27648f73b4b064ec1",
+    "2022-06-30/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "5e5ff08f391197db6ad48f7c9764aa73cda798bca8903192e5e65650e4253e48",
+    "2022-06-30/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "b78eec08c2d6036e50e1adaf634752f3bbe1f2558142a78a5043ecc5ddd6a3f5",
+    "2022-06-30/rust-std-nightly-wasm32-wasi.tar.gz": "79230006a0aac28465706f75c712ae2be8a30a11d8a7b55d083041ee1b04ac1b",
+    "2022-06-30/rust-std-nightly-wasm32-wasi.tar.xz": "f49148f119a8ed533f7a17d2735c69c9289ca63570ddeaad8827c9f0cf7335de",
+    "2022-06-30/rust-std-nightly-x86_64-apple-darwin.tar.gz": "025cdb16064a5188387ecb492df16c50f141b5405c26099672fd5663a951802d",
+    "2022-06-30/rust-std-nightly-x86_64-apple-darwin.tar.xz": "c3ec8cc8c048303fa3fc52dd9249ad05971bca6b40a11470f2134aa8f304e23f",
+    "2022-06-30/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "dae075914f3c72275bd2c87b8b386e7f403b72ba00e2381fa9297e9ac8aea0ea",
+    "2022-06-30/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "7dcb44e24e55b92941c033949a4469d4e4cfcf7baa613e8987cbe0b136d771fe",
+    "2022-06-30/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "8922a64a28bc7b97446ad76c6afc2d62d46bd37845e4fb3cf0c9e3ad1f4abd16",
+    "2022-06-30/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "0998e12d6ead939e39f692a2f988f00a1da38822bc3a779f520ec99bf84645c0",
+    "2022-06-30/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "783c0f8e34b175eae1536d9f2211052697c6608bd8ba870b2e35090a93bfc078",
+    "2022-06-30/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "101de38295682107b985eb67ebba95fb8f98f6257df7964fbcfb4259e305cb0c",
+    "2022-06-30/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "85287af62dc5c9a557c38113ceb74e06daa462ccddc67021b180fe611a89df60",
+    "2022-06-30/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "49ebf5a6dbad94137a0186870bf2ad9f2968e1f502352a2c24c4d20b29994aef",
+    "2022-06-30/rustc-nightly-aarch64-apple-darwin.tar.gz": "7261d051a1f13221141de59e4dd14f31984e600cf7d8562549d5b08cb11e590a",
+    "2022-06-30/rustc-nightly-aarch64-apple-darwin.tar.xz": "0e7594674004770595b4fc8a053b584f80b48f78626961d1a3101cf3d62416ce",
+    "2022-06-30/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "32567a36b8a42668a66eec075396f9e3fe9a6307cf12f7ab8f2251fc9d1e4ce6",
+    "2022-06-30/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "60c8929c8401eed997f96bb76185c1b3d5053ca3247f16686df0468018153ff6",
+    "2022-06-30/rustc-nightly-aarch64-unknown-linux-musl.tar.gz": "72f7887d5d3e9fa44381a079a15bd7d5b1ae42e5d176fe9c92599ce2dded91df",
+    "2022-06-30/rustc-nightly-aarch64-unknown-linux-musl.tar.xz": "1d18ca032b10be576e0df34093c5ecc76e60ff564fc41c1e3e7e6101d3e8d14b",
+    "2022-06-30/rustc-nightly-x86_64-apple-darwin.tar.gz": "5ee90bea5d56c405d3ac7abdad01994d74928655ed2d86184507d7ee1428d0cb",
+    "2022-06-30/rustc-nightly-x86_64-apple-darwin.tar.xz": "8890c50b8a3545e8698db391c472eb023022c03d7139f07700ec3a9ba00a6757",
+    "2022-06-30/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "dfb160f79c24f05cc500b1806b95edcea303b751bfdde3ddf40dbf8b41aff81d",
+    "2022-06-30/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "5c85b150f56cf9cc6ff7c6e55fe4f08589c593bbdb1d6544e7b68c1dbf00eeda",
+    "2022-06-30/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "0f59cf71cad5b3f477c3ce3f4e25dd12bed3a297094696f577973ed502976e3a",
+    "2022-06-30/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "ea59f7170700444d8e820a2effe81f871942fad0fd0f824ad63c273e8ff4c0e7",
+    "2022-06-30/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "9c887929f95811c105c7954bdf2bc796a6bfba6d3ac1b775717a9803e84ce687",
+    "2022-06-30/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "39dd07f27b59e4946d415f2f86fda74b0e13d33f983fa98a58c765228dff3792",
+    "2022-06-30/rustc-nightly-x86_64-unknown-linux-musl.tar.gz": "98e7c367bfc6d84235fdc8bdbec67abf2861dd3ac1484eea80f896f30b4e8ff2",
+    "2022-06-30/rustc-nightly-x86_64-unknown-linux-musl.tar.xz": "87643db68e0d854e57cb3bbf038b6619738fbd36d49e4f4d00fc85ca6d3ed856",
+    "2022-06-30/rustfmt-nightly-aarch64-apple-darwin.tar.gz": "cb46e956522b01c23f713f8b4dd4637e756c38e6a349da28d8d7e39646318491",
+    "2022-06-30/rustfmt-nightly-aarch64-apple-darwin.tar.xz": "6071be27b3cb4f1abb1f66b2d60b930b3e10940a558db71a351d25bd29d452ee",
+    "2022-06-30/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "daa3a05d91bee94bf16f3f316d50ef53e41d794f47b33fe6be36058fac43c937",
+    "2022-06-30/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "1c581a146a6e0c36fabf442aab3e5efc9997e50bda2e7eaebd3eb9defe3ea6f8",
+    "2022-06-30/rustfmt-nightly-aarch64-unknown-linux-musl.tar.gz": "014ad8d6fe7e861c32bbb0da96bdcddc373ee91242aaaf3e115d3e944a40c728",
+    "2022-06-30/rustfmt-nightly-aarch64-unknown-linux-musl.tar.xz": "fd930800586eda9dfee45c3a0ee71a5d39b3915c3cedbc43e74201eddd2390f1",
+    "2022-06-30/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "20f5fbb0da7fcc7cb962185eba9140ea52a7d1c55caf9514e9096b335b2d9e40",
+    "2022-06-30/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "a1bc6c967edaf64846c9a323faf201968b5d19a4874c24923c36175ce7c92a96",
+    "2022-06-30/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "5b26107dae9ed8849ce5f8f4b853c76bc3dfd7a8c482d2f88b24e366106895ae",
+    "2022-06-30/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "3f7898a83375e5d06d18215cefea37d1de42e4231c75463a025e905499403759",
+    "2022-06-30/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "aa727bb5e776d6f69175e5e924981fe5a5731cb021ec5c3551d19b2dbb8ad8d2",
+    "2022-06-30/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "84a0d167d0a1f679b1b2c537b950bc7714478a64f123b71666a681ecb3f64989",
+    "2022-06-30/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "37c588978e81648cc8f27b0226a05c8313e8082197b02766994c2d32c593405e",
+    "2022-06-30/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "cad27189fcd335d32bce8d3cf0eba886d1aeb8f725ae943d84da023e4bc358fb",
+    "2022-06-30/rustfmt-nightly-x86_64-unknown-linux-musl.tar.gz": "f92a04f66ea56f0b0fd35bff40716cf736787d37fd11be8f0d37c3f28d1151c9",
+    "2022-06-30/rustfmt-nightly-x86_64-unknown-linux-musl.tar.xz": "ee6187a8e225ba0cb7906e5c67e368ff2d832069ac8cda4b1a1772a6b3563a66",
+    "2022-07-18/cargo-nightly-aarch64-apple-darwin.tar.gz": "75bb468efa17438d7b48f5ad39b8abef35707a47fa71b94cdf2fe7edd84faa28",
+    "2022-07-18/cargo-nightly-aarch64-apple-darwin.tar.xz": "a8b75017a5768d16898d1db8dab16ef9f27a3b7f4994f0e0db64ccadf4034154",
+    "2022-07-18/cargo-nightly-aarch64-unknown-linux-gnu.tar.gz": "a204e7ec6336d53e1111963ec70a98743f670da024a857cc6033c22096424f01",
+    "2022-07-18/cargo-nightly-aarch64-unknown-linux-gnu.tar.xz": "ab25a0b94e3d7f1507faa2edf5abde18fd7834dd8d6be8d47fab5b3716bb08c5",
+    "2022-07-18/cargo-nightly-aarch64-unknown-linux-musl.tar.gz": "ea5ccafc77c7cb19ab1edccbd3ad64ac5f8064e50fa9ba0049e8d4f9bedaafad",
+    "2022-07-18/cargo-nightly-aarch64-unknown-linux-musl.tar.xz": "d46e9dfa22a113ef93ac990dd8744f751af85fce0b344145520a734c9617c68e",
+    "2022-07-18/cargo-nightly-x86_64-apple-darwin.tar.gz": "b24e5f062f07c5f694a76e8ddd7afea015f02f9ac29454505e19588dd2986f27",
+    "2022-07-18/cargo-nightly-x86_64-apple-darwin.tar.xz": "dcec723e5ca218118463a040658a47c3048744b3709250c162290ccbd4238acc",
+    "2022-07-18/cargo-nightly-x86_64-pc-windows-msvc.tar.gz": "9f0707024042c3056ee354d8deba669fac5f5374d57ff08e5de35ec7805d88b1",
+    "2022-07-18/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "fc0c6ace77fdd726ff621e45aa2f8b4e655a90c206ad1d70c584658e075a9592",
+    "2022-07-18/cargo-nightly-x86_64-unknown-freebsd.tar.gz": "360319ec8e27391692d2b4957b11bf8bf1e6b196fc095450d6416a0ba1c5cb76",
+    "2022-07-18/cargo-nightly-x86_64-unknown-freebsd.tar.xz": "618ea8c695c0854bdbb3eb0e1f1c6010314194bca7ea432a8d8c1e3b7faf6d72",
+    "2022-07-18/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz": "7b1c88fe7e91e75680a9756ded00a1af73632f5ade93d2f60803604ce74e83cb",
+    "2022-07-18/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "d5ab5dd61e63d424546ad3c4ea24fee276e8d7362b66264f4a754d0ab94561e7",
+    "2022-07-18/cargo-nightly-x86_64-unknown-linux-musl.tar.gz": "06855b13a077e1b3fc792ac49cfb5c56afb4dedcee1a7758eb284e5f0341bccf",
+    "2022-07-18/cargo-nightly-x86_64-unknown-linux-musl.tar.xz": "00abe62d596b2fb15fbbaa2c51034b67d492f0aceeb3ee861a8481c6884f6557",
+    "2022-07-18/clippy-nightly-aarch64-apple-darwin.tar.gz": "802860668b449ce139f38fe3fb3f5c48112bee2d01391b3124555c9ea01d313e",
+    "2022-07-18/clippy-nightly-aarch64-apple-darwin.tar.xz": "635e0d80d456fec181ea0d0f592a5f81192dbd9fc05397d6f6cf3b3cbec027a9",
+    "2022-07-18/clippy-nightly-aarch64-unknown-linux-gnu.tar.gz": "f1932333ad655f8dc8f1f6e2c9c680c3cbc78a60e19a12b6063c4f34a6d844d8",
+    "2022-07-18/clippy-nightly-aarch64-unknown-linux-gnu.tar.xz": "562bbf2845701b23c4ef2884d2c74130e1ad78eb9f454d1211bae7148b826281",
+    "2022-07-18/clippy-nightly-aarch64-unknown-linux-musl.tar.gz": "7afe6d2b00bffae8a31ca76cffb735a8834966ab7f4b568f83a5306262979cba",
+    "2022-07-18/clippy-nightly-aarch64-unknown-linux-musl.tar.xz": "67a1a66a4dc4917cf5b561df5229b702725d40d1548b6b02577fc2f0cf3101e9",
+    "2022-07-18/clippy-nightly-x86_64-apple-darwin.tar.gz": "2c582cc0f8063c99c0a151dee9e10016f378e8287dc909112b269cf33bcfa544",
+    "2022-07-18/clippy-nightly-x86_64-apple-darwin.tar.xz": "4fe3c169e5f4fb4e552b3686a195e86efdc3659f249ada307a0aa0ea8dd6fde1",
+    "2022-07-18/clippy-nightly-x86_64-pc-windows-msvc.tar.gz": "f75f428f8e734b409dd1ba3820757c5aaa7661174471573749b1b96a473fdfaa",
+    "2022-07-18/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "84eb70af695b0559642ffdf8443a4d6e4b785c5b3e1bcecade339a4deab073ed",
+    "2022-07-18/clippy-nightly-x86_64-unknown-freebsd.tar.gz": "4d65b3583c3963657c8df4189934dc29b08e2a6d36d93c06f717e68158beaf45",
+    "2022-07-18/clippy-nightly-x86_64-unknown-freebsd.tar.xz": "95e08e3ed1f49504a80fc873755f43d78b78ca43afb4e9cadcdd62ee004f2d02",
+    "2022-07-18/clippy-nightly-x86_64-unknown-linux-gnu.tar.gz": "d19c29eddb75503f9b0d350e0bdc6d5fa56d034087f9a689349e5d87cc1356a3",
+    "2022-07-18/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "2dcc21b8825d0d1e67be86dac2b1be14c5bd5db0a4bad868cc735251857b2db4",
+    "2022-07-18/clippy-nightly-x86_64-unknown-linux-musl.tar.gz": "6ae3da6937d7af6fbcdfc295f2fef0b693fbeded76a6ea9cc9fccaf55a3db5c6",
+    "2022-07-18/clippy-nightly-x86_64-unknown-linux-musl.tar.xz": "679851152079ded54fad7ec3b3785ef2b5bea79f748e7f856226e091b8ded626",
+    "2022-07-18/llvm-tools-nightly-aarch64-apple-darwin.tar.gz": "de61c4240a3c11beaf9ea03eecf357f0937ec64fc11b6f382f05a292717dde23",
+    "2022-07-18/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "2c7daffd0dbdd367b6233741420c6858d0a206c47bbc780b00d8807755f1f228",
+    "2022-07-18/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.gz": "ad24eb6b5b31bc732a1037133be2cf8807588b9d2d340e6b730a0e62e9dc14d6",
+    "2022-07-18/llvm-tools-nightly-aarch64-unknown-linux-gnu.tar.xz": "4736462786be9fe1e58cb849b29c902cc589a276d6f1070b78f6f887ee5e1d77",
+    "2022-07-18/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.gz": "364c14df4d8b38ab698943358dfc17f6ced4bfd81802c126bfadfd9da2568d30",
+    "2022-07-18/llvm-tools-nightly-aarch64-unknown-linux-musl.tar.xz": "48fda7fb376cf686026154fef3338c67d6c004ce62a078357d171790a564b3a6",
+    "2022-07-18/llvm-tools-nightly-x86_64-apple-darwin.tar.gz": "bf28aa75ea86ffcb905919d8166d258e6a9205f663979886d64c106931e00c7c",
+    "2022-07-18/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "167c7732ad5644d8f0d4540627d6fe7b66176aaacfc81825245d9dcf76a37678",
+    "2022-07-18/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.gz": "4e102dabf62df53f314c577641eef755f46e6085d93c597520fb39bc92bae98f",
+    "2022-07-18/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "96e08affa3a762ace95454fe1e451e357dfe7e0e0562da8e63b6f2afc3ddf604",
+    "2022-07-18/llvm-tools-nightly-x86_64-unknown-freebsd.tar.gz": "0e4fd034073fd775c02275e2dd9731430d723c6d7d0287ee929a17ce945de0af",
+    "2022-07-18/llvm-tools-nightly-x86_64-unknown-freebsd.tar.xz": "85e9243082e15edf805b30eb2a0e43ec6054d057b821f7e3f48239a3ef15ca83",
+    "2022-07-18/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.gz": "4667d016300f7e48dedbd2637bad7b40822e62a42e32da650f087cee7dc751e7",
+    "2022-07-18/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "8071f0d4eda7f5a3a7b11ad2599b4bd340208bd8fd8fa0b091a095e8c2c3a894",
+    "2022-07-18/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.gz": "72a135efca549e7efadc2f8c0b3dbfff66fa2afb20730bac651efc46d4509a50",
+    "2022-07-18/llvm-tools-nightly-x86_64-unknown-linux-musl.tar.xz": "52436599f8d6fea1edb1dce3412161a3e0c90d9a0ad12f5f1dc09e783a710ac9",
+    "2022-07-18/rust-nightly-aarch64-apple-darwin.tar.gz": "a8e0a387502e95d0092f61734b4da19d7b9b3115a35aee6f1f6ca50309ffd17b",
+    "2022-07-18/rust-nightly-aarch64-apple-darwin.tar.xz": "a5285d76e4bbc536e44e363d249526b5f102a01d79e6b131c3ff881d7b67b232",
+    "2022-07-18/rust-nightly-aarch64-unknown-linux-gnu.tar.gz": "fdd09e33e7a48ab983f239031a60c4d008e2337ff2f057cb583fa3211ae296b2",
+    "2022-07-18/rust-nightly-aarch64-unknown-linux-gnu.tar.xz": "705fe140913008aa74d448f2b9fb36d3905a5ab7a579204433ded07ea7f8367d",
+    "2022-07-18/rust-nightly-aarch64-unknown-linux-musl.tar.gz": "1cedaac34c83586329b300fb46d0164baa90a94075720a8c34736bf8a34a27cf",
+    "2022-07-18/rust-nightly-aarch64-unknown-linux-musl.tar.xz": "49bc8e2aa1357e33ff17e310c5a496c9fbe7e0ad60cd1c05c7d09cb4b8ba60e3",
+    "2022-07-18/rust-nightly-x86_64-apple-darwin.tar.gz": "d2f1d0638461ca41c1e0735c0ad7a1999bae9c76e3778ac63e53734214584e30",
+    "2022-07-18/rust-nightly-x86_64-apple-darwin.tar.xz": "b335174e1db2ef81007d9729498c92e6752501e46a375354b0912d8687ec9331",
+    "2022-07-18/rust-nightly-x86_64-pc-windows-msvc.tar.gz": "2ad7d5b5b18b17bbbf10a341b55396acccde1bef3578f50388188c449e148636",
+    "2022-07-18/rust-nightly-x86_64-pc-windows-msvc.tar.xz": "6bd8b423e93054df8111cc40af2a6a1833eff3667f91ef5aeba5011b70c92c9b",
+    "2022-07-18/rust-nightly-x86_64-unknown-freebsd.tar.gz": "8b10d055e9ca7a3a6736681876aec4df3030a47693dc2ba161edb96fe5b0a6c4",
+    "2022-07-18/rust-nightly-x86_64-unknown-freebsd.tar.xz": "0cebd0e279ee929a457b0403918f7beda60d7824b75649f4abe983e65f7bc1ce",
+    "2022-07-18/rust-nightly-x86_64-unknown-linux-gnu.tar.gz": "e20fc68c95bcd731e28418679ee1f3d6ef86215f6ebdce00f06e6a13fa1dddc5",
+    "2022-07-18/rust-nightly-x86_64-unknown-linux-gnu.tar.xz": "7357f4d15609c73f416edbca597ac7b914014bfbacf42ffc713426f97e010aca",
+    "2022-07-18/rust-nightly-x86_64-unknown-linux-musl.tar.gz": "7db6f84ed52db7ca67bbf55477ce3d0a106bab1da717152ac5cc9e38af3877cd",
+    "2022-07-18/rust-nightly-x86_64-unknown-linux-musl.tar.xz": "1abebe47e66397c81761011e0444c84243d192c03144009c8e41941dae599546",
+    "2022-07-18/rust-std-nightly-aarch64-apple-darwin.tar.gz": "775a5fc66c1afeba1a162ace909728648213614a620cfcd970b7786695497e31",
+    "2022-07-18/rust-std-nightly-aarch64-apple-darwin.tar.xz": "f7ae71284da008e0c2ac4efe9c4c103ee8ca2f509f1e7e36321857fddac79c79",
+    "2022-07-18/rust-std-nightly-aarch64-unknown-linux-gnu.tar.gz": "f2385d67b55d33aa14d2ced0c24696aca6bce58c62514ffdeafc471c52323711",
+    "2022-07-18/rust-std-nightly-aarch64-unknown-linux-gnu.tar.xz": "9e2a80681ae60554af79cda573afe2a0fc88e503552f8d5f9a8d3791a05eaab2",
+    "2022-07-18/rust-std-nightly-aarch64-unknown-linux-musl.tar.gz": "3be2ddc571cbc39093cc24c5c57646294c442d9608745e48265df6d8dcc6cbfb",
+    "2022-07-18/rust-std-nightly-aarch64-unknown-linux-musl.tar.xz": "28f3668e54115bc4a83d511fd2406733a12d8f94e7ee45a4a2f69c73989bc0b5",
+    "2022-07-18/rust-std-nightly-wasm32-unknown-unknown.tar.gz": "1ef74e59625735b20a4678ef19393f65322de51013a4f7b74b6274824ddec7ea",
+    "2022-07-18/rust-std-nightly-wasm32-unknown-unknown.tar.xz": "f506fc04713114309fcb08c71da700c6987ab539fe3c6ec3857d5d3a4eb7fe1a",
+    "2022-07-18/rust-std-nightly-wasm32-wasi.tar.gz": "01552e4b2cdbdbfd3a0581902b9e7713258860c10a85aed80e7e7cc3d8cd8c5e",
+    "2022-07-18/rust-std-nightly-wasm32-wasi.tar.xz": "88a9a2f6b1b85451ffd9f849c1ac97e370c430622da4cef221f595132c84f1ea",
+    "2022-07-18/rust-std-nightly-x86_64-apple-darwin.tar.gz": "dac908bc347e3807d8ddcb7ef70a8fa326d74507f7a9092c22b2e73b54e89f89",
+    "2022-07-18/rust-std-nightly-x86_64-apple-darwin.tar.xz": "d1e20950e41f08ed2a537e1ba6ab7b6f9e949c26f77cb662fdc10ddecd6571b0",
+    "2022-07-18/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz": "1220d18ecd671f88cdfb8dd7e3cbcb467d2d08e9cb66a9dd48fd11916181386a",
+    "2022-07-18/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "b637d05b44b0f85767ab4df1527a4c1df16b45bcfc5c1353e306b5df08f791a9",
+    "2022-07-18/rust-std-nightly-x86_64-unknown-freebsd.tar.gz": "f1f2a6c1a174241a302b3b188f3d4407b863dad98dfb4a5665d357412e749df1",
+    "2022-07-18/rust-std-nightly-x86_64-unknown-freebsd.tar.xz": "15f3f88905e191a5b80f5dbda32c6f02ee57bbd73d36ca5921fe85aa1d3f5317",
+    "2022-07-18/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz": "fddd2016c18341295126b91916d30b6cd7a844a006a683e0ee27e1f84eb8f73d",
+    "2022-07-18/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "409695e8f70410e4a1dfeae6fd08af794470a5c3f66798b8a61a3175a6a760d2",
+    "2022-07-18/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz": "cb931421d832440e21e9304e54d5f0dff3423cee50b420e0ed94a42fdf7db395",
+    "2022-07-18/rust-std-nightly-x86_64-unknown-linux-musl.tar.xz": "66db004714b66af77b6df304c015d027177648cc888fae273279e2754602632e",
+    "2022-07-18/rustc-nightly-aarch64-apple-darwin.tar.gz": "b7b6d8b4b3ece745ab82774e27b324bbf664106ca9640867df1ecee80fa43033",
+    "2022-07-18/rustc-nightly-aarch64-apple-darwin.tar.xz": "416ac4817dc671168d3cc2cb784ee923ed4defe3fb731be0703fd5ff45b0e75b",
+    "2022-07-18/rustc-nightly-aarch64-unknown-linux-gnu.tar.gz": "6fdfc79838f4fbcdb01b9431b827507b32dae374c49b2a5bda018a36240e82d0",
+    "2022-07-18/rustc-nightly-aarch64-unknown-linux-gnu.tar.xz": "6ca1130e48ddff59898deead8078b023df4b52e138dbfd848ed0921a49988f80",
+    "2022-07-18/rustc-nightly-aarch64-unknown-linux-musl.tar.gz": "89149126446782582d76f748b285dd5c7d192e736f86266bfa62fc2e777fcf24",
+    "2022-07-18/rustc-nightly-aarch64-unknown-linux-musl.tar.xz": "b334bef98e282267e9e2b2abf5301ff114efe4824c2f5ecc2792827ba89769bf",
+    "2022-07-18/rustc-nightly-x86_64-apple-darwin.tar.gz": "bb95ad994f2c85d5bb450abb5bb76b9041a627f0abeb625a95197226b0da5c7f",
+    "2022-07-18/rustc-nightly-x86_64-apple-darwin.tar.xz": "97a1c0849c4daa496bf8130c8cebfa6d4b9072bbccf5dde1d2f0c3f8ed31c6b3",
+    "2022-07-18/rustc-nightly-x86_64-pc-windows-msvc.tar.gz": "5cacd5e64c0652fead45e008b26c00e097e2cf966bab53b0dd3a66fd3d17c2b6",
+    "2022-07-18/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "b0e404d0a2e1767af42fdfe0c5d7465970830d76118490a06fa827e980ae9193",
+    "2022-07-18/rustc-nightly-x86_64-unknown-freebsd.tar.gz": "91cd87ca40d737d0f59d268ec8697f9a4f731b8555cba8323d0850e76bdb920e",
+    "2022-07-18/rustc-nightly-x86_64-unknown-freebsd.tar.xz": "75b4f0f6e9188b7bb2931a75d117d25b47e60bf70ca207e925df1625b98d56eb",
+    "2022-07-18/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz": "c6a9fbf4e71b0e041931f736f272d9ceb5693bf073c24f6a93bf0c8563d47cd2",
+    "2022-07-18/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "a71bce9c5a01fc4d67ec577d64f48371174e0180d649393c3c825c1c50b69b7c",
+    "2022-07-18/rustc-nightly-x86_64-unknown-linux-musl.tar.gz": "b89290d389e2271be3a273cec5e949ca51cd0c83831274825bc6bbe0970f7586",
+    "2022-07-18/rustc-nightly-x86_64-unknown-linux-musl.tar.xz": "5cfd8994fff435e7a01e14830f01ac4c4ca4e771a7bd1ebafbc6f5545a56245f",
+    "2022-07-18/rustfmt-nightly-aarch64-apple-darwin.tar.gz": "0eb8c4d52af4803102433134569a964e851b65c8e9e817c2988432d274c8fb79",
+    "2022-07-18/rustfmt-nightly-aarch64-apple-darwin.tar.xz": "ef2a01456abc2b87aa9cc4b6b57586d356665c151a4d11232aa310f89548bd8b",
+    "2022-07-18/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.gz": "f1c89a6d90b3e70bd24bc9e1b2c33d7be6a9893cb5a586f97b60dac41bbe2734",
+    "2022-07-18/rustfmt-nightly-aarch64-unknown-linux-gnu.tar.xz": "875e638ec4f0d9e11210b6be474915c93010b23ba402a1410bb4b7a35638c945",
+    "2022-07-18/rustfmt-nightly-aarch64-unknown-linux-musl.tar.gz": "3a94042860e31a40baf0c93bf43151e53452722d39c4d71edac0b622d2d45ba2",
+    "2022-07-18/rustfmt-nightly-aarch64-unknown-linux-musl.tar.xz": "27225572678179a94ced727cb51ac21ea3196da486e6e641a115cf6338c9a534",
+    "2022-07-18/rustfmt-nightly-x86_64-apple-darwin.tar.gz": "1c8f7e68b57c496705ac06fac4115eb2537596bd9ebc12a30e37e578244852ea",
+    "2022-07-18/rustfmt-nightly-x86_64-apple-darwin.tar.xz": "43b3ed1d52cd741f15890b3787664d2dc7de687a68ee2700a47b4af939417cbe",
+    "2022-07-18/rustfmt-nightly-x86_64-pc-windows-msvc.tar.gz": "87dd0a8f6693a4a4dd9029ed70061f0d4db349c01879fe0ab93b2a9fe155765e",
+    "2022-07-18/rustfmt-nightly-x86_64-pc-windows-msvc.tar.xz": "3a0b7c99da06ed4c93aa8de89ac0e83cc10a77531f4e87f44f487edb87577796",
+    "2022-07-18/rustfmt-nightly-x86_64-unknown-freebsd.tar.gz": "d3a9a7d08a9f6ab6e651f0703af1301c780ec451887bc566e10e286f7e95558f",
+    "2022-07-18/rustfmt-nightly-x86_64-unknown-freebsd.tar.xz": "b962c63605dc60bbdff2b9e8beaf490c6f2c12d9519964de7347120d19cf176c",
+    "2022-07-18/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.gz": "a362b4e512f53d3736b9e48bbde9f2119cd39ccc3a348fa6a4908fcb5eb5ca18",
+    "2022-07-18/rustfmt-nightly-x86_64-unknown-linux-gnu.tar.xz": "33abaea1a4ebce88ff58354d2bab2d983419600c0c8d3b352e4e6f8c56baf2f5",
+    "2022-07-18/rustfmt-nightly-x86_64-unknown-linux-musl.tar.gz": "8c83332af6a06c6171a99754c19755d6496f9f200a4bd79c634cd14df4866f9d",
+    "2022-07-18/rustfmt-nightly-x86_64-unknown-linux-musl.tar.xz": "704c90da2cc18a189f5d3e3f4a36aaea26b5f4917086900114c4325008436819",
+    "cargo-1.48.0-aarch64-unknown-linux-gnu.tar.gz": "71347016f0da96d4250225f7b52701274df958870b1a65482badb87d661035f9",
+    "cargo-1.48.0-aarch64-unknown-linux-gnu.tar.xz": "9ea440709cf51cf28110847fd769e7fc937a01d03500edec5232408c4459fc80",
+    "cargo-1.48.0-aarch64-unknown-linux-musl.tar.gz": "873883a9f6eb2e0cae7dafdc6c4262157298b7bc6ac5c3ed899ed1f55cad7e82",
+    "cargo-1.48.0-aarch64-unknown-linux-musl.tar.xz": "8469e522c512d03a410462f2efacbc5b571bfb6d6ce824f1deebec26fd023ec9",
+    "cargo-1.48.0-x86_64-apple-darwin.tar.gz": "ce00d796cf5a9ac8d88d9df94c408e5d7ccd3541932a829eae833cc8e57efb15",
+    "cargo-1.48.0-x86_64-apple-darwin.tar.xz": "89c7d6d614a92071d3d1266508669aac2ec9f75e2aef78121f0af4875548352c",
+    "cargo-1.48.0-x86_64-pc-windows-msvc.tar.gz": "c1287b03522828b527ba95a5bc9de0246efa4365a43d22a212f50a5ca2ea1487",
+    "cargo-1.48.0-x86_64-pc-windows-msvc.tar.xz": "08a070d8b82af69764f963c82aa6bc7f7d18edaac0a8ef84608f7284bff55a87",
+    "cargo-1.48.0-x86_64-unknown-freebsd.tar.gz": "55fcdad2ac3a3f8066c323f75fb2b222822023f8b9961317d710f2f43771aa62",
+    "cargo-1.48.0-x86_64-unknown-freebsd.tar.xz": "2f98e263c3cdbbe22a931658ebf057aafc1ecc9272d6f097ebb13475e3f45728",
+    "cargo-1.48.0-x86_64-unknown-linux-gnu.tar.gz": "52bf632e337a5e7464cb961766638e30dfa28edb3036428296678d1aaf7d8ede",
+    "cargo-1.48.0-x86_64-unknown-linux-gnu.tar.xz": "b11d595581e2580c069b5039214e1031a0e4f87ff6490ac39f92f77857e37055",
+    "cargo-1.48.0-x86_64-unknown-linux-musl.tar.gz": "0dd47d6342b17bc6c0fbf9ec007be0c90274e40e76d8e6a88cac73ecafc1583a",
+    "cargo-1.48.0-x86_64-unknown-linux-musl.tar.xz": "8728cb7515e593f6fcf3c7afba826a92cd227a35b8e936bae892b95482d4fb90",
+    "cargo-1.49.0-aarch64-apple-darwin.tar.gz": "2bd6eb276193b70b871c594ed74641235c8c4dcd77e9b8f193801c281b55478d",
+    "cargo-1.49.0-aarch64-apple-darwin.tar.xz": "d6bcefea3f24f9843ab19c089741f37393628ef157cdd50b984ce4e32df002b9",
+    "cargo-1.49.0-aarch64-unknown-linux-gnu.tar.gz": "fce2bd0eabf9a9958b02f5ede3c227c992ee7048ab34293cce57bc3d48e63fc0",
+    "cargo-1.49.0-aarch64-unknown-linux-gnu.tar.xz": "782b635dbba6eb88e053f5bc40ff54a4dcf7a8e0419fb4f684cb758f9d53a6dd",
+    "cargo-1.49.0-aarch64-unknown-linux-musl.tar.gz": "18b4fa2d7a737754ae2d5ce3a2f8c8881fc4d9b5aae20109d7d3d622cf3ac145",
+    "cargo-1.49.0-aarch64-unknown-linux-musl.tar.xz": "24c98aa9730286a65296f7b931ea3bff9d5b81583cb2e286226d08f05896a089",
+    "cargo-1.49.0-x86_64-apple-darwin.tar.gz": "ab1bcd7840c715832dbe4a2c5cd64882908cc0d0e6686dd6aec43d2e4332a003",
+    "cargo-1.49.0-x86_64-apple-darwin.tar.xz": "d99d636d575247caef2d26e96bac082f72a6a39c408c3e3c4cad3d47de42020b",
+    "cargo-1.49.0-x86_64-pc-windows-msvc.tar.gz": "84b44835a3f275fef70cd86a527d086c537e59fb3209fe8bbef1eeb1da6edbb6",
+    "cargo-1.49.0-x86_64-pc-windows-msvc.tar.xz": "937672fab733a8d98bfd8a25a83101fd4433f026395c051326ae006d0053bab9",
+    "cargo-1.49.0-x86_64-unknown-freebsd.tar.gz": "320aac1e31eed2db657380bce2d8ff8b65fc8de59f4aadabf8219bcb6b4ce1a1",
+    "cargo-1.49.0-x86_64-unknown-freebsd.tar.xz": "57bf92166f288e7330c7419286687552f7746eea65cfe6e0815dbdfb078aaf45",
+    "cargo-1.49.0-x86_64-unknown-linux-gnu.tar.gz": "900597323df24703a38f58e40ede5c3f70e105ddc296e2b90efe6fe2895278fe",
+    "cargo-1.49.0-x86_64-unknown-linux-gnu.tar.xz": "031eb3e4d88c6c53dd6f19de524b15377e7fcbd2744302658cf7d2afbba6b781",
+    "cargo-1.49.0-x86_64-unknown-linux-musl.tar.gz": "c2a3d3b27ac105acf7bfc25d6e401b9ac369597f57220332377b98b2f8cb550b",
+    "cargo-1.49.0-x86_64-unknown-linux-musl.tar.xz": "084dc2259379b502abd53cbad6044ac38c0b7e61f7ad5eb13cc988ad000fb093",
+    "cargo-1.50.0-aarch64-apple-darwin.tar.gz": "19d526ef3518fb0322f809deddbd4208a27d08efa41d2188348f1be8d3bcfe5e",
+    "cargo-1.50.0-aarch64-apple-darwin.tar.xz": "1113dd43e6ab92d982fdd38d07b65bb014b5b3dda6a19cb35a41dacbe964676d",
+    "cargo-1.50.0-aarch64-unknown-linux-gnu.tar.gz": "9b6fbfec7f6d14013387433f3a907b1f474027d7f32f626dc1c5ca83faefe573",
+    "cargo-1.50.0-aarch64-unknown-linux-gnu.tar.xz": "f3c772f455406f67991ac20cff56a4fcd2d01454e29280c566119ab5180307ea",
+    "cargo-1.50.0-aarch64-unknown-linux-musl.tar.gz": "7ec67e55fe541cfe32221e9b69349d2de83a24f7967f58eb4dc06e59f321babf",
+    "cargo-1.50.0-aarch64-unknown-linux-musl.tar.xz": "ca9a8d15826310ac52edfed10866bee570a17ccb914eb6be23d5a86d9262738b",
+    "cargo-1.50.0-x86_64-apple-darwin.tar.gz": "45640bb1cef40f25ecb4bd2a3bb34fdf884c418e625d4f9c9595d2aca84fad78",
+    "cargo-1.50.0-x86_64-apple-darwin.tar.xz": "329e9846f3d8bb721274731ba38f80934d08cf75c4292abe44dcb39f186b8ed8",
+    "cargo-1.50.0-x86_64-pc-windows-msvc.tar.gz": "dbd97ac5645668149d4a32b0b5f6274934d95f8b6d6e6926b7de13ee869aeedb",
+    "cargo-1.50.0-x86_64-pc-windows-msvc.tar.xz": "d682f7a7668f95dc83b397ab3fc9e6645cdfd01719201ae66016207dc749961f",
+    "cargo-1.50.0-x86_64-unknown-freebsd.tar.gz": "97cbdc9b94123e940f7ed7304aba418a1a10ee1cca5acfe302e841ea39efa190",
+    "cargo-1.50.0-x86_64-unknown-freebsd.tar.xz": "fbbbf8234b3dd8d875eaaf8ffba23ba29ac879846dd09f1284ab311fad9105f7",
+    "cargo-1.50.0-x86_64-unknown-linux-gnu.tar.gz": "3456cfd9be761907a4d3aae475bd79d93662b7aee4541f28df3d1f7c7d71a034",
+    "cargo-1.50.0-x86_64-unknown-linux-gnu.tar.xz": "3cb2c68e987e5681fca9c930973f408a71151b1b255e69669a08e54d446ee803",
+    "cargo-1.50.0-x86_64-unknown-linux-musl.tar.gz": "f1f99e1cfacaa69a12c4ee7ffd767bdcf80eb4d4b0e71af545e8e16b2b22d799",
+    "cargo-1.50.0-x86_64-unknown-linux-musl.tar.xz": "fda80f13606ae7b04ec420dd97480b362baf9ef9053aa9aed542ac8097a4e053",
+    "cargo-1.51.0-aarch64-apple-darwin.tar.gz": "3eb0eb6192635c4b844deb97004a7e38a631bb4507b1284c055df8533c00e77a",
+    "cargo-1.51.0-aarch64-apple-darwin.tar.xz": "1bf7bf8bf75a9ae645080373211f1b40b8cef789091cf59580453f5e7a8e4c43",
+    "cargo-1.51.0-aarch64-unknown-linux-gnu.tar.gz": "eeeee860ec47ebe1c45f497ff99cfee9c869a592db573cd547a67681db695616",
+    "cargo-1.51.0-aarch64-unknown-linux-gnu.tar.xz": "971d00bbbe885f57296e9670e1368e445a0e02e6241a4ae29515b41ec109a0dc",
+    "cargo-1.51.0-aarch64-unknown-linux-musl.tar.gz": "297a66f911298c55e7a494286769c045184e7b65fb3dc0a56d5a00d8655c6341",
+    "cargo-1.51.0-aarch64-unknown-linux-musl.tar.xz": "56dd0914bf1076abcae730ad546c5593d17e03748aa2ec9e6363ac654e461b97",
+    "cargo-1.51.0-x86_64-apple-darwin.tar.gz": "37eb709e5ed8fe02d2c8d89bc0be3dc1d642cff223c25df311ff5a82eab53d4b",
+    "cargo-1.51.0-x86_64-apple-darwin.tar.xz": "c9adb9746b59032df82a304c8f0288332797b8e7d58d42d5a25e5a032da75311",
+    "cargo-1.51.0-x86_64-pc-windows-msvc.tar.gz": "ee232ab24aa57f3c57218a5886af673725ecff38ad58e8d75257d4fd0c86b148",
+    "cargo-1.51.0-x86_64-pc-windows-msvc.tar.xz": "07c9d3e8b83eb075c9e019b401494f0b9009a8cf67e5862c01231eb60181a9d6",
+    "cargo-1.51.0-x86_64-unknown-freebsd.tar.gz": "fb2b8a5fd787944392adec0593f6921131069a5a95c1f53be75f98451d918300",
+    "cargo-1.51.0-x86_64-unknown-freebsd.tar.xz": "0f1a45f0854bbe2093de6179e55962a17996c7a350e819a25b0004851b087bf9",
+    "cargo-1.51.0-x86_64-unknown-linux-gnu.tar.gz": "fe8abe2c2b467ac5f5021ff8020eda70de9e9f8f45b4a2e834afbd3b78323a31",
+    "cargo-1.51.0-x86_64-unknown-linux-gnu.tar.xz": "2c557e448c145ed773baae0d6533449947bb130f8f8a2a0876d08f55b74a313f",
+    "cargo-1.51.0-x86_64-unknown-linux-musl.tar.gz": "3e3f1ca2aba2d7195bc447f4e446bbf6c8803f42ebaaf7a32e7f92268cf2f6ff",
+    "cargo-1.51.0-x86_64-unknown-linux-musl.tar.xz": "16ce1d5b31d52bd54975d4d22ce76bd9085cc1d1f595791944d120a0294cb9d9",
+    "cargo-1.52.0-aarch64-apple-darwin.tar.gz": "86b3d0515e80515fd93612502049e630aeba3478e45c1d6ca765002b4c2e7fd8",
+    "cargo-1.52.0-aarch64-apple-darwin.tar.xz": "1d40171c3af7b108fdf2e823772cfaf37375b3b5f721a5ec545b255fe32b5076",
+    "cargo-1.52.0-aarch64-unknown-linux-gnu.tar.gz": "4a7f07bd9f30ed0409a21fad831afec0b9d0d10b5bca10cf826fdefe04a4f4f9",
+    "cargo-1.52.0-aarch64-unknown-linux-gnu.tar.xz": "ac56f64a5b756c62b88cf7ac03b08f8778adcd5a0e40142cbac4262288264580",
+    "cargo-1.52.0-aarch64-unknown-linux-musl.tar.gz": "472cd83b79e173932ff436e77802c217599f73f672e88345bb61105dddf2a2eb",
+    "cargo-1.52.0-aarch64-unknown-linux-musl.tar.xz": "cf80261f6a3d0cf5feac52c3316ac47d778217a22dd4b174c60ad349971a96fb",
+    "cargo-1.52.0-x86_64-apple-darwin.tar.gz": "02a4be4aae1c99ca1e325f9dbe4d65eba488fd11338d8620f8df46d010ffbf3a",
+    "cargo-1.52.0-x86_64-apple-darwin.tar.xz": "530b1dbd84784e8b2e9831e93520bb4192477a0bc2d0075f06fb9d733862d282",
+    "cargo-1.52.0-x86_64-pc-windows-msvc.tar.gz": "866fc858fc422fa52afdabfb5feaf6e6aed41c575d6edfd4f343425faaf01023",
+    "cargo-1.52.0-x86_64-pc-windows-msvc.tar.xz": "d628789445cad294487b4ea268a0c72d707ddc440430a14f4b9032fe37bb4e5c",
+    "cargo-1.52.0-x86_64-unknown-freebsd.tar.gz": "c732090f26a36211de084fba0ffcc8d1b49591d935d3b4ebd515a9570043aeb2",
+    "cargo-1.52.0-x86_64-unknown-freebsd.tar.xz": "aa228f9b30bd239a358cfb3ea461b54f396f5b62fa35d4de3d2765ff545992ef",
+    "cargo-1.52.0-x86_64-unknown-linux-gnu.tar.gz": "85151d458672529692470eb85df30a46a4327e53a7e838ec65587f2c1680d559",
+    "cargo-1.52.0-x86_64-unknown-linux-gnu.tar.xz": "d0931a1e728afdfbe3390a2ff3a5256d1668402298a3a6c050ac65ad01c4db2b",
+    "cargo-1.52.0-x86_64-unknown-linux-musl.tar.gz": "ecb7b4968ca1b19c09ac3de9ea60420e8435c32e25f7412c19a0ac3f9dcb3363",
+    "cargo-1.52.0-x86_64-unknown-linux-musl.tar.xz": "680dbc224f2a1d9a33a256b15be8d1c58dbdfe88aae3ca9c2b0f805fea568ab3",
+    "cargo-1.52.1-aarch64-apple-darwin.tar.gz": "6787f8746cedd005b7abeabf6e2250ebc5fa767486c5bf23c597298e6965d576",
+    "cargo-1.52.1-aarch64-apple-darwin.tar.xz": "d345b60b5f66df9b088d40e474a75ead382ddf3aecc80d54b11a6783a87f2e7e",
+    "cargo-1.52.1-aarch64-unknown-linux-gnu.tar.gz": "d2e15beebe22b6f6380d233f48599fc1b9228b064f0915eea02b2376f0bde1e1",
+    "cargo-1.52.1-aarch64-unknown-linux-gnu.tar.xz": "3106a825d00f7bdd7880433c0f6bbcdeb516bedf42b3384a8ef96e785e67d769",
+    "cargo-1.52.1-aarch64-unknown-linux-musl.tar.gz": "dc8f6cf0c02f68b05b470087cd611cc4107060daae64f9d09677e97389c51281",
+    "cargo-1.52.1-aarch64-unknown-linux-musl.tar.xz": "f4b3353d36c4ad05bed8bb165b39ac958ddf5e83bf7a2ef5a5741fb28cccf727",
+    "cargo-1.52.1-x86_64-apple-darwin.tar.gz": "40d8fe950202763f633b6dd927f8e546e0a44b4b959945310c9eeb77f69e72d1",
+    "cargo-1.52.1-x86_64-apple-darwin.tar.xz": "d5980d68c23ed2f416f04ecc1faa4cd144f0d07c57ada31f490b4905a16bc6db",
+    "cargo-1.52.1-x86_64-pc-windows-msvc.tar.gz": "bb25d1ca297ac99a1dde7ce537880c1f5a37e392257b5aba589938b4f1bbf659",
+    "cargo-1.52.1-x86_64-pc-windows-msvc.tar.xz": "7254e8678608e1bcd32ed476ae7bf0527ba19b1ff63fb7256e7be225e0601286",
+    "cargo-1.52.1-x86_64-unknown-freebsd.tar.gz": "67f858cf9e46fb7efe825adb854302e187ad194d05ded1e7b8ce165607869947",
+    "cargo-1.52.1-x86_64-unknown-freebsd.tar.xz": "c90a364a8f749804e1a5559b3c9470142f456e8ebf6501e3efd5df5132247dd9",
+    "cargo-1.52.1-x86_64-unknown-linux-gnu.tar.gz": "f3225c27ce16296400389285358b61e138811c2e0eb1388593817688145ab64d",
+    "cargo-1.52.1-x86_64-unknown-linux-gnu.tar.xz": "e9f2ddeb8724cf89f4d6b6d88abdecbe27d9eac1b05b1c3a25f9e5573dd42f9f",
+    "cargo-1.52.1-x86_64-unknown-linux-musl.tar.gz": "300c30d1ad47c84a8d806ef492db2478bc7c17793b92513533166bd9d9b51857",
+    "cargo-1.52.1-x86_64-unknown-linux-musl.tar.xz": "e3e6a06b90def6864d6fe3b9a3f0b7abed354d9661efcca33ae7b47bde032ce3",
+    "cargo-1.53.0-aarch64-apple-darwin.tar.gz": "5f0aea0cd507ff6e3b1e1ae54a8726172d055a8b6d8b1ba550ce9ebc96a8a891",
+    "cargo-1.53.0-aarch64-apple-darwin.tar.xz": "0d82e353e4ba36a85cc5adecf4a3824629187f59e1136be4a9767734a59ca596",
+    "cargo-1.53.0-aarch64-unknown-linux-gnu.tar.gz": "7c35c086e294af3ae82df5609c6833a36bd8e6634e8ecca18f863829cfe80ca7",
+    "cargo-1.53.0-aarch64-unknown-linux-gnu.tar.xz": "4fa425a2d4633aeca67fa42695b3b9100f8b988dd1c21e60d6b2aa1164e55c0c",
+    "cargo-1.53.0-aarch64-unknown-linux-musl.tar.gz": "9c0e9137aaf5c13f9d65487ec3216fe39280f387be4133da088355e263ce42da",
+    "cargo-1.53.0-aarch64-unknown-linux-musl.tar.xz": "767e35e3a6104b89dacd0ce46d890c5a60133756c2db1a326d4e69eae3670574",
+    "cargo-1.53.0-x86_64-apple-darwin.tar.gz": "b42f4a7d054e219d8744af48cfab798473981455a050a320c46b164382726e50",
+    "cargo-1.53.0-x86_64-apple-darwin.tar.xz": "4c701b7d921051786abca50af4d535824aa3e167f14a61086b66d0dbd0288d42",
+    "cargo-1.53.0-x86_64-pc-windows-msvc.tar.gz": "7ab1bfdee65f19cb60671690566b89e3a0f210f04dd53078786f6c708b523223",
+    "cargo-1.53.0-x86_64-pc-windows-msvc.tar.xz": "30925e8eda2b424080fe321de73960eafdba958a9ee1fc436d7aa5d063d3a194",
+    "cargo-1.53.0-x86_64-unknown-freebsd.tar.gz": "3e2c5681793c86f21133ac7b26aa5af4525b8471ec5df840d41d0e563fb675c8",
+    "cargo-1.53.0-x86_64-unknown-freebsd.tar.xz": "17f18a0193a80721172fb5dd926946feb5d5222d99fa39d374434f8c44cb7924",
+    "cargo-1.53.0-x86_64-unknown-linux-gnu.tar.gz": "e79d9d0b03cb331428ef3cfc4cbe60ded9f90708a7dd1714d974dab9a03ee7b3",
+    "cargo-1.53.0-x86_64-unknown-linux-gnu.tar.xz": "e4437f6c83574fc60e183f4df439190f7610e4a669476802795645da66fbb83b",
+    "cargo-1.53.0-x86_64-unknown-linux-musl.tar.gz": "d8f632c0b2f8abafb1149446c695a8a7024134fa62faa37ac8922a41dd66c95a",
+    "cargo-1.53.0-x86_64-unknown-linux-musl.tar.xz": "ca236408cb2c35b8c3f7c2b4e9f1e69422ed24153f445192eafb6462351e5c2b",
+    "cargo-1.54.0-aarch64-apple-darwin.tar.gz": "7bac3901d8eb6a4191ffeebe75b29c78bcb270158ec901addb31f588d965d35d",
+    "cargo-1.54.0-aarch64-apple-darwin.tar.xz": "5207644fd6379f3e5b8ae60016b854efa55a381b0c363bff7f9b2f25bfccc430",
+    "cargo-1.54.0-aarch64-unknown-linux-gnu.tar.gz": "d54d0bde0014e73a9c6943665bd236e5596c86d58869bc758aa6c24a9ad53061",
+    "cargo-1.54.0-aarch64-unknown-linux-gnu.tar.xz": "b3b6e5358bf1ecd5d8d7e258a5632dac7d923b2aa8ab1c8c0f6aad62d9307b37",
+    "cargo-1.54.0-aarch64-unknown-linux-musl.tar.gz": "2dd6ecd46b769efbb397794e5bad4249779be3e91738efd26a7673fa728a5ac0",
+    "cargo-1.54.0-aarch64-unknown-linux-musl.tar.xz": "4db9e41713630fd559d42ac67e5d9c6c94daa40fe00279d3b5fa2bfe537d1144",
+    "cargo-1.54.0-x86_64-apple-darwin.tar.gz": "68564b771c94ed95705ef28ea30bfd917c4b225b476551c998a0b267152cd798",
+    "cargo-1.54.0-x86_64-apple-darwin.tar.xz": "f39796d6a1c721757bb3f09fb653b6f7d38e166a6e3ae3904e956a4a2c2e9f69",
+    "cargo-1.54.0-x86_64-pc-windows-msvc.tar.gz": "ad8808314e36af5de8e3e8e519c4e73d30b56a8020418aec2fd1f0f3d2d7a8f6",
+    "cargo-1.54.0-x86_64-pc-windows-msvc.tar.xz": "eeed5865ea80dc0f0fa8cf2755ba3f3f5fadb6ce5d3d707b0847f14cbe37c6b0",
+    "cargo-1.54.0-x86_64-unknown-freebsd.tar.gz": "3a2612b2073f5d3b45a4c88f359a8f5e2b86b85f7ef68bda518f532339f01227",
+    "cargo-1.54.0-x86_64-unknown-freebsd.tar.xz": "095f3b60ffad3b963d3ccadf73842bcdcf1dc5dc4b48d7684eeae9c77c433cc1",
+    "cargo-1.54.0-x86_64-unknown-linux-gnu.tar.gz": "8c4f404e6fd3e26a535230d1d47d162d0e4a51a0ff82025ae526b5121bdbf6ad",
+    "cargo-1.54.0-x86_64-unknown-linux-gnu.tar.xz": "8a9c80b7dc5d47e6eafe173b81ad96244522c97d74214ba7da57a502d49b231c",
+    "cargo-1.54.0-x86_64-unknown-linux-musl.tar.gz": "d6e2d8e2075f433b3a607b95ef170a85fc0b44356905111004d23a9b72776b0a",
+    "cargo-1.54.0-x86_64-unknown-linux-musl.tar.xz": "9a26b73e578227d111b221932d7cbeaf4b41f27a0f7597a49efb81e2bd0791f9",
+    "cargo-1.55.0-aarch64-apple-darwin.tar.gz": "9e49c057f8020fa4f67e6530aa2929c175e5417d19fc9f3a14c9ffb168c2932d",
+    "cargo-1.55.0-aarch64-apple-darwin.tar.xz": "7b33a1fc8069155dbe70de88449c2ece67cc844d3cea0162bab9227997da3d4e",
+    "cargo-1.55.0-aarch64-unknown-linux-gnu.tar.gz": "48bc8751f548b08643fbdea7756ccda35f0762492e95ea41ca41137290f56513",
+    "cargo-1.55.0-aarch64-unknown-linux-gnu.tar.xz": "0edee54dc42401e2a9a64556b6826fca8c9739d4a5766929b29ae02edece68b9",
+    "cargo-1.55.0-aarch64-unknown-linux-musl.tar.gz": "01ac6a21d74ac66a33e58d2d5766c4c90673be0e8385893da4e178a0ded56299",
+    "cargo-1.55.0-aarch64-unknown-linux-musl.tar.xz": "a529c2f2c956c323358e6ec13c23126b249cea0125b6adbd612ce406098de24e",
+    "cargo-1.55.0-x86_64-apple-darwin.tar.gz": "4e004cb231c8efbd4241b012c6abeefc7d61e2b4357cfe69feb0d4a448d30f05",
+    "cargo-1.55.0-x86_64-apple-darwin.tar.xz": "3c5a34e0533bb56795823477a3db2a13214da696cb78b14728e7b1c79746d7f2",
+    "cargo-1.55.0-x86_64-pc-windows-msvc.tar.gz": "2bc59373437d25e5cb9d4f573fa187078c5a924a244366787ce04106d3972f6e",
+    "cargo-1.55.0-x86_64-pc-windows-msvc.tar.xz": "9ccaeb794f08923fa8e16ed5b2542d99bd00a32961cbbfba784d2e31a4228dc1",
+    "cargo-1.55.0-x86_64-unknown-freebsd.tar.gz": "f574b15dee6c52f25076bb657f3e3129b5828a2617c82f2e1c4101e0bd21a880",
+    "cargo-1.55.0-x86_64-unknown-freebsd.tar.xz": "f44fab9f54be57bf8100d78cbe07ae7e709431376a2a119e643640911a5d4143",
+    "cargo-1.55.0-x86_64-unknown-linux-gnu.tar.gz": "bb18c74aea07fa29c7169ce78756dfd08c07da08c584874e09fa6929c8267ec1",
+    "cargo-1.55.0-x86_64-unknown-linux-gnu.tar.xz": "1ab9296faf1909fe3ac619ba208aeff905c39124504991c14e06462b9328493e",
+    "cargo-1.55.0-x86_64-unknown-linux-musl.tar.gz": "d91efc8e7a71845dcec9ec7db1edb6765cba5ded69d3ab734f549d6875b52e97",
+    "cargo-1.55.0-x86_64-unknown-linux-musl.tar.xz": "9faa4514576c4beafcc7b640a17b57e8103f2f9c88f646c216ccce90b1a0cdf2",
+    "cargo-1.56.0-aarch64-apple-darwin.tar.gz": "ced26df8edddcb7ebdedd2997b9005fc9a849e57b1b82f3aeba9241039f7b958",
+    "cargo-1.56.0-aarch64-apple-darwin.tar.xz": "f87f0830415d0a31c6bf14e9b2eb9240724887ab30610a89bea8855bd5b44860",
+    "cargo-1.56.0-aarch64-unknown-linux-gnu.tar.gz": "3a3b0b74a18247db46badc1e94285fe5e60ad0e9c18fd2dbf15878aa56a5994a",
+    "cargo-1.56.0-aarch64-unknown-linux-gnu.tar.xz": "9d97cd655845572846c058577f68ea74b6111f8ea7649db308f786475f764a09",
+    "cargo-1.56.0-aarch64-unknown-linux-musl.tar.gz": "bf24b7df97d93d61f6c1ed8382d99400c4197939502b14904c40ef96bb2abab5",
+    "cargo-1.56.0-aarch64-unknown-linux-musl.tar.xz": "7a6054d76019c583b6f36e4a32260a3b385e0e7358f12be72665b2a090eaabf1",
+    "cargo-1.56.0-x86_64-apple-darwin.tar.gz": "63b6558712050e7f8c57cac0b5b7cb2cafc125d157d9f4bd82f6f47b4648ed0d",
+    "cargo-1.56.0-x86_64-apple-darwin.tar.xz": "44f3ca081aac335179d2442daeb3cdade1ca8ae8892da2e7e0d33985e1a9bbf5",
+    "cargo-1.56.0-x86_64-pc-windows-msvc.tar.gz": "319ae8cde721f611ddf673a4aad21b145aec6577ccb75d40ad0856cbab9a2cfe",
+    "cargo-1.56.0-x86_64-pc-windows-msvc.tar.xz": "41d5887fea46276e6a3be273a598ef6115b83dd587ce086c287f0c5155f911c6",
+    "cargo-1.56.0-x86_64-unknown-freebsd.tar.gz": "e1e7400a16c7cb1d2ac83e567c8c23f04fb6ccfcb7b6d1978d327da6edc879f6",
+    "cargo-1.56.0-x86_64-unknown-freebsd.tar.xz": "ee042f70b6f3c22ef5d5d868db3f9d6793767056df6b15d18b42887e6434f734",
+    "cargo-1.56.0-x86_64-unknown-linux-gnu.tar.gz": "e74bd0038893e76393f67a58786ec33ef9251cdb65550b3a2a8117c7355ead71",
+    "cargo-1.56.0-x86_64-unknown-linux-gnu.tar.xz": "f972125810d2db7df2e0af56d9f6a3dcdacc52d983bdf0ca17309b45fc44209b",
+    "cargo-1.56.0-x86_64-unknown-linux-musl.tar.gz": "efadb9f545b6ce49d4a861ae7e75f0ce02a6fedb9e5b30e7810dcb4854ca6799",
+    "cargo-1.56.0-x86_64-unknown-linux-musl.tar.xz": "da68aabebb6352eea0a8737ad14de93f04a0ad3c79e5d9644cada87ba0663e80",
+    "cargo-1.56.1-aarch64-apple-darwin.tar.gz": "6ed30275214e956ee10b03db87b0b4297948fd102d39896cece01669555047ef",
+    "cargo-1.56.1-aarch64-apple-darwin.tar.xz": "f2e184a62e6b112fce2f6dd0d707c60a84addc29f774cdebcfded663ae81291a",
+    "cargo-1.56.1-aarch64-unknown-linux-gnu.tar.gz": "9aa557436b0cf2a2f4f0d6c4aed5b95062c0637a4a94c000522402e59db1c93a",
+    "cargo-1.56.1-aarch64-unknown-linux-gnu.tar.xz": "3d263eb1871b5d6ca4b198b9611925923e9353e1f5c2becf8c7b784298e88743",
+    "cargo-1.56.1-aarch64-unknown-linux-musl.tar.gz": "313f095df71bdd7cab5934641990cbcf325acdfefdcdf9d7a4a8aa950fc655d6",
+    "cargo-1.56.1-aarch64-unknown-linux-musl.tar.xz": "27f73d4ddcad9cddcc2fd25d194e26fefafbc9c6a98a14e0617b0fa63413f8b9",
+    "cargo-1.56.1-x86_64-apple-darwin.tar.gz": "cd60c32d0bb0ed59508df96bebb83cf6f85accb9908fb5d63ca95c983a190cf3",
+    "cargo-1.56.1-x86_64-apple-darwin.tar.xz": "46840c92c510b1bcfffb0ea7f0c0ee649a54ec0308965a2f3e154ae9d1780f29",
+    "cargo-1.56.1-x86_64-pc-windows-msvc.tar.gz": "0606835d9c41137552ee63f339c5df1a2ed6f722c871f9fc5cb92b02c7372373",
+    "cargo-1.56.1-x86_64-pc-windows-msvc.tar.xz": "264281bfee9fee1fabde6805a9bf916ca24337a7bb130a34b6a5fe1ed2fc42c2",
+    "cargo-1.56.1-x86_64-unknown-freebsd.tar.gz": "a1656603049a4612cdf44179ac7ccdb3c342f0b152cb114f61a228d321b0f384",
+    "cargo-1.56.1-x86_64-unknown-freebsd.tar.xz": "c987fc8c70bd4c92f753a51a14ce49dbe666a8dc209df681562575efcfe7921b",
+    "cargo-1.56.1-x86_64-unknown-linux-gnu.tar.gz": "c896c033bb1f430c4e200ae8af0f74d792e4909a458086b9597f076e1dcc2ab2",
+    "cargo-1.56.1-x86_64-unknown-linux-gnu.tar.xz": "dfed65a50e2b58b6807c1fb6f8afa7abd5c3b22c682d505721d615823687c708",
+    "cargo-1.56.1-x86_64-unknown-linux-musl.tar.gz": "4ecdd39695d9e09c3f4efffff61d67451cd41f28f09155485ac7dcc8f7a65a26",
+    "cargo-1.56.1-x86_64-unknown-linux-musl.tar.xz": "ceb8e3e273ade68766b526a7d076fc8ebfb19c2b2d4946f789bcf2597d06f83a",
+    "cargo-1.57.0-aarch64-apple-darwin.tar.gz": "2171ecf2c18fadd90588252aa294272aeb740f065772076ef36d04b1b4bfcc4e",
+    "cargo-1.57.0-aarch64-apple-darwin.tar.xz": "7314e53b73811913f63556860789d8a337b44bb240c485f3fab7d95f0e220b03",
+    "cargo-1.57.0-aarch64-unknown-linux-gnu.tar.gz": "8c046fc59feb1d670757b6de30990e346faa4b2ff49cd42f6d5f6a2b92a1ad6c",
+    "cargo-1.57.0-aarch64-unknown-linux-gnu.tar.xz": "6d11cd94618d80cda273eeeae7285980445f61a49ebacc616777b482a41cbf3f",
+    "cargo-1.57.0-aarch64-unknown-linux-musl.tar.gz": "87f7b1fb2b1a270336fbeac0ed2ea2ceda1fde26467f133e059907b57ad2bdb6",
+    "cargo-1.57.0-aarch64-unknown-linux-musl.tar.xz": "2f336c14418dbd117df136f99fc7c89459ee3553e8951473be138fa562483516",
+    "cargo-1.57.0-x86_64-apple-darwin.tar.gz": "26129f0e3ecd42e730f62d9c693e1a89aedfe6b7c8108cf970b2f1ed51900fb8",
+    "cargo-1.57.0-x86_64-apple-darwin.tar.xz": "019e0387ec5db129d1370311fa85024af5e0eb9bce4a79216148fb579027b7b1",
+    "cargo-1.57.0-x86_64-pc-windows-msvc.tar.gz": "23f4562605316f0c9002bb30d0e635f96577db9002052ef2f78b63e747b6b2cd",
+    "cargo-1.57.0-x86_64-pc-windows-msvc.tar.xz": "a68b853b7dac161472952958f0b4c81352473956982eb9391635624429a9758b",
+    "cargo-1.57.0-x86_64-unknown-freebsd.tar.gz": "c14839639299fce4e448629950c28de61fcfdd0393f9a751958c5c6d9c6d2ba7",
+    "cargo-1.57.0-x86_64-unknown-freebsd.tar.xz": "84bbe73e1806b459d310d3f213f5d7e80758e69d5549b417ce4ef7615d19ec7a",
+    "cargo-1.57.0-x86_64-unknown-linux-gnu.tar.gz": "2b341034e4c30bede47a432751935549a28e40b566a1fd4b59c824ccd0a26ff6",
+    "cargo-1.57.0-x86_64-unknown-linux-gnu.tar.xz": "ed2013713ae742895af5df8d91c5430ba9ba3c781e3bc7f3471b220cc06d565d",
+    "cargo-1.57.0-x86_64-unknown-linux-musl.tar.gz": "0f14c6bb7c413c3be2db1917eb0109b7563bff0ba02a03d30089004811d87f2f",
+    "cargo-1.57.0-x86_64-unknown-linux-musl.tar.xz": "0d8564d0348843d6c08d98990d9eac50b7b7ab790f89d514b4f45079e786d932",
+    "cargo-1.58.0-aarch64-apple-darwin.tar.gz": "9144ee0f614c8dcb5f34a774e47a24b676860fa442afda2a3c7f45abfe694e6a",
+    "cargo-1.58.0-aarch64-apple-darwin.tar.xz": "597c4fcdef065500b2fa5b50b811598ef994c0700a6636455c73579be71d331a",
+    "cargo-1.58.0-aarch64-unknown-linux-gnu.tar.gz": "68e2e7493af55c5792636c2b2b0b497b1e43b12eb2e91da71e92426701884c24",
+    "cargo-1.58.0-aarch64-unknown-linux-gnu.tar.xz": "0dd38e1c0217fec9a4075c74e3faa4ab5aeffe966f93e6ec56462b4df192c8b0",
+    "cargo-1.58.0-aarch64-unknown-linux-musl.tar.gz": "269fd3730644890725b3affbf5ad97c3f1a186fcd22e7fc122b6b9b97388aaae",
+    "cargo-1.58.0-aarch64-unknown-linux-musl.tar.xz": "ed8add6d82241ed142afa9c92f588cdcf4c98b894e38f4403a6094fad611cfc8",
+    "cargo-1.58.0-x86_64-apple-darwin.tar.gz": "60203fc7ec453f2a9eb93734c70a72f8ee88e349905edded04155c1646e283a6",
+    "cargo-1.58.0-x86_64-apple-darwin.tar.xz": "407289aee9ee6b3070714fb11b8ac94c2a1c24e20498dd41c85820b192d4b94d",
+    "cargo-1.58.0-x86_64-pc-windows-msvc.tar.gz": "ab0bdb95efa4084e19a706c14d826fa112306c25ec6304528dadff5f1017ab83",
+    "cargo-1.58.0-x86_64-pc-windows-msvc.tar.xz": "227bb7b1f018ec335ddaf25abf1a5e69b5e39c3084a540032a7d9fe8d6a82505",
+    "cargo-1.58.0-x86_64-unknown-freebsd.tar.gz": "8e280cfb6c7aa92d9c955fcfb80b6d09f067e779a5ca0b5799222f1a70ca4764",
+    "cargo-1.58.0-x86_64-unknown-freebsd.tar.xz": "26738bf888bc8d8bb688abda45d0a9f1ae1a9cac408d383aa17a4865601c660b",
+    "cargo-1.58.0-x86_64-unknown-linux-gnu.tar.gz": "940aa91ad2de39c18749e8d789d88846de2debbcf6207247225b42c6c3bf731a",
+    "cargo-1.58.0-x86_64-unknown-linux-gnu.tar.xz": "3d44be4cf353f4172b79485121286be667b76246d9998e7c48a3c2907f5e9552",
+    "cargo-1.58.0-x86_64-unknown-linux-musl.tar.gz": "926430f872e5a30b946bebe45df48ceb0d3dc8de04b35e295f33bb3b7dd394fe",
+    "cargo-1.58.0-x86_64-unknown-linux-musl.tar.xz": "94a4a8ea22daa39cc33f2372e83bc1a9f66cef43b002c78ee34551d4720d12a9",
+    "cargo-1.58.1-aarch64-apple-darwin.tar.gz": "fe4507d345fea40e2157a6d7d69100c234a83b5904747ce976df577e63819134",
+    "cargo-1.58.1-aarch64-apple-darwin.tar.xz": "b49f53631ff7dbbbe44d568714ac6b0b23172624f386b9285d64ed08b89d735f",
+    "cargo-1.58.1-aarch64-unknown-linux-gnu.tar.gz": "b4603fe8207c1ac2b5755a5f8da04c32a8a3d34ec1506df28de5dac9010350f1",
+    "cargo-1.58.1-aarch64-unknown-linux-gnu.tar.xz": "b37ce3b2e2b178bd57a42c3f12decb00a595123212a5ca963c8d4fa6f59d6de0",
+    "cargo-1.58.1-aarch64-unknown-linux-musl.tar.gz": "1bf9187170e8cdaf52ddd45aa7c93248f4d8a6c730b20251cb182b57d6624bd0",
+    "cargo-1.58.1-aarch64-unknown-linux-musl.tar.xz": "dcfd2c222153f969ae130c0e34ea195a790654ce6ce3a6dd7c87ae3ae7411b50",
+    "cargo-1.58.1-x86_64-apple-darwin.tar.gz": "27087440329a7d3b0bd2b73870c76677e52c96390c3a7b76e151f8a86ce442be",
+    "cargo-1.58.1-x86_64-apple-darwin.tar.xz": "d992d24816f9fd39c52601b682f39c944ed824a2e8ee05421a58d0451c7e28cb",
+    "cargo-1.58.1-x86_64-pc-windows-msvc.tar.gz": "4cbe75408c2745c72a27a37f77864745c7ce3e79c2d42708732c95fb3cbc9489",
+    "cargo-1.58.1-x86_64-pc-windows-msvc.tar.xz": "a7149bd053b9f14265d512abf28d6d74e235e6ea3b0258fa5dcb013140e84715",
+    "cargo-1.58.1-x86_64-unknown-freebsd.tar.gz": "f60d967c940400a92d142df1396a2031034374874a7575ad74bec2536e101fc4",
+    "cargo-1.58.1-x86_64-unknown-freebsd.tar.xz": "845cf81fdd59bfc8991f15583357eb3e7ecb9ba3837c953bd7c6323d669256e7",
+    "cargo-1.58.1-x86_64-unknown-linux-gnu.tar.gz": "a6ca018e19eb25781b72e0ce9971be66c518adb6cebb0175ad88e6ff333f5118",
+    "cargo-1.58.1-x86_64-unknown-linux-gnu.tar.xz": "1d3f01b973ea3de5174d0a48b50828cf913bafc223ecbf768a0293602cff0cdc",
+    "cargo-1.58.1-x86_64-unknown-linux-musl.tar.gz": "45cca848155e2ef853de74329ee45948e4f6f28f797679d9070f4ffa767ef209",
+    "cargo-1.58.1-x86_64-unknown-linux-musl.tar.xz": "7f577da5031790c4a0128038e50d1321a1ecc3b9968b511106d3ee1e3b35ae53",
+    "cargo-1.59.0-aarch64-apple-darwin.tar.gz": "4bdcb77ea084364b551a5cf969e263beb09afa39627f6dead262c8e2a7aed9c1",
+    "cargo-1.59.0-aarch64-apple-darwin.tar.xz": "9554dd8c9fc1889dbc099f22898e633454c77f2c127fa266f1d01ad5d211056e",
+    "cargo-1.59.0-aarch64-unknown-linux-gnu.tar.gz": "857d0b4afa76773a68ebe616db01d1b97d24b6d02b55e7348c968aa48104793b",
+    "cargo-1.59.0-aarch64-unknown-linux-gnu.tar.xz": "11b8da4b90ff74c6c796a3d6c1f5150de23c411ed2546e10b301077b904191fd",
+    "cargo-1.59.0-aarch64-unknown-linux-musl.tar.gz": "89ea1001d79ac7dc2158950c40a73aca6d1177d5e44562e9e5a8656b916e344c",
+    "cargo-1.59.0-aarch64-unknown-linux-musl.tar.xz": "3247b372bd82c01837be5947fbbe6c572dfaa04ed0936b35edd5933662c1532c",
+    "cargo-1.59.0-x86_64-apple-darwin.tar.gz": "d0202b50b4f3d0e943a5d7e8d14420afeac8cf36e6136e8d5b7ddefb3538d62a",
+    "cargo-1.59.0-x86_64-apple-darwin.tar.xz": "f85bc0b82788ae37a1909e7bd793f1e610566cefb2bfaef3422edfc06cef68d9",
+    "cargo-1.59.0-x86_64-pc-windows-msvc.tar.gz": "4cf585f1a3b295f6d51873c189c2b9d114861a4b41b44ad5245cbf119272a6f2",
+    "cargo-1.59.0-x86_64-pc-windows-msvc.tar.xz": "a3c7132dbb00a5ed62270573a34bb6ea962b84b569a29741ecf76da214c4360d",
+    "cargo-1.59.0-x86_64-unknown-freebsd.tar.gz": "a6732b18419efb4d246a35555f4ccbf904de261cde02f8e82fdbef67e70ddf80",
+    "cargo-1.59.0-x86_64-unknown-freebsd.tar.xz": "17651a873c096c477ba338ba8800cbc3649002375e49d1a3f32b85f6007bdd7a",
+    "cargo-1.59.0-x86_64-unknown-linux-gnu.tar.gz": "703c1c66f1d68549d1ee0b7a96f91935a3583af8ec13cc1722ff7a0f1c69ca70",
+    "cargo-1.59.0-x86_64-unknown-linux-gnu.tar.xz": "f56ebfb333ea46e4429377bf4b16a2ec889d61640a41c3093577cdd8f3c80b96",
+    "cargo-1.59.0-x86_64-unknown-linux-musl.tar.gz": "ee2fa67e67395f9b8e1b52433ca281454c3e4f55db536414edfadfa2d649c8bf",
+    "cargo-1.59.0-x86_64-unknown-linux-musl.tar.xz": "95f2727f22f40d7a294f08d24dc7b5f4fb4fe3991854becceffa75bf8f049745",
+    "cargo-1.60.0-aarch64-apple-darwin.tar.gz": "6839526ce51c47162e678e6329d90f04b565e2214f9864e15e14fe794d047a73",
+    "cargo-1.60.0-aarch64-apple-darwin.tar.xz": "e0451798bf0ebc88688b078aaf373810fa70358df90e4303be58c6c05fe5e443",
+    "cargo-1.60.0-aarch64-unknown-linux-gnu.tar.gz": "60d58e3c7eac74c4e7a15799c374a49d0c3d5f9ac28534b28b9507912c1d6af5",
+    "cargo-1.60.0-aarch64-unknown-linux-gnu.tar.xz": "36030f5cede7971eaed45284b5243b4103184a663ad934124de8a530e0e6d993",
+    "cargo-1.60.0-aarch64-unknown-linux-musl.tar.gz": "9a011bb88b8698568e61049c77c96f4842ba3cca4900b47f6d9abe566eccbc07",
+    "cargo-1.60.0-aarch64-unknown-linux-musl.tar.xz": "27da822bed107192bc87687b2b12b96fe096067139341731d41b3e602b37eb32",
+    "cargo-1.60.0-x86_64-apple-darwin.tar.gz": "fd479595f3c4035a555357c0bebffdf6fb5e244d590dc6b7eb2880dd71091cca",
+    "cargo-1.60.0-x86_64-apple-darwin.tar.xz": "9cabb437b5f6259f3f13cc6fd9d27f0a821f6637dfce30ff1032440e8be57748",
+    "cargo-1.60.0-x86_64-pc-windows-msvc.tar.gz": "00673d65d6a725f8d739e8e45c109fa9e11af741606b9a1e5eae26cdbf89dc45",
+    "cargo-1.60.0-x86_64-pc-windows-msvc.tar.xz": "4d4fb84e61542ca15721e31c0b210354cbd2d8e9b902877f0dfa9e414b1b6e2f",
+    "cargo-1.60.0-x86_64-unknown-freebsd.tar.gz": "a3dc279bfe878d676ca901b85c53beca8f7c1c7290c955377a893325f59ac777",
+    "cargo-1.60.0-x86_64-unknown-freebsd.tar.xz": "970deb4b423dcb6c0baeedf5adde92cac105d9a971fca57694c24d34e1157a4d",
+    "cargo-1.60.0-x86_64-unknown-linux-gnu.tar.gz": "6dfc8b0e2d5ac2ccfc4daff66f1e4ea83af47e491edbc56c867de0227eb0cfd5",
+    "cargo-1.60.0-x86_64-unknown-linux-gnu.tar.xz": "48edb2eb51d7c56ef9a3130f0b331e83f139559161f6f93b9588d28cf72610f3",
+    "cargo-1.60.0-x86_64-unknown-linux-musl.tar.gz": "24884c2a50b5e0320ba7ad115d0a5a5c53448ccadc8da7356ea071be455c9f96",
+    "cargo-1.60.0-x86_64-unknown-linux-musl.tar.xz": "38268edfebb190192f895134c73824ac9b017fa937510be4b35be17364ad05e4",
+    "cargo-1.61.0-aarch64-apple-darwin.tar.gz": "8099a35548e1ae4773dbbcbe797301c500ec10236435fde0073f52b4937be6c3",
+    "cargo-1.61.0-aarch64-apple-darwin.tar.xz": "5ed7ea11528f1100c0c015546e4f1646bfbc0f869e5f9bc0ad06e0eb322e3bd8",
+    "cargo-1.61.0-aarch64-unknown-linux-gnu.tar.gz": "0d31d5a050e41f8b56c920527538886db96c09824a8ff619d0fc4c410dbf7e5a",
+    "cargo-1.61.0-aarch64-unknown-linux-gnu.tar.xz": "a055e6cfd9b5f8938780db6179d2ef92990c714ce64278337d7edf3d29c8ab62",
+    "cargo-1.61.0-aarch64-unknown-linux-musl.tar.gz": "ac783fc2b18254efd9fe2dfcb3928e630f1dc4d81db72e2f6b073bd56e6c224c",
+    "cargo-1.61.0-aarch64-unknown-linux-musl.tar.xz": "6555ecd3fbe482e743edb505a309520ddcf8dd51e58d36080a2eaff4b7651fef",
+    "cargo-1.61.0-x86_64-apple-darwin.tar.gz": "f2b10ef8c56f37014d2f3e4c36d5e666e3be368d24c597e99cf2e4b21dc40455",
+    "cargo-1.61.0-x86_64-apple-darwin.tar.xz": "41154ccc20ade7b14a2f29ba1b7777684b87495ae94570de6726ae72731acc95",
+    "cargo-1.61.0-x86_64-pc-windows-msvc.tar.gz": "312e042cb6e65b0b7c01f7eceb968898d9219ee11e23528c8c7b2468f00b4036",
+    "cargo-1.61.0-x86_64-pc-windows-msvc.tar.xz": "0f3fa42ab7226fdfb831311fc1f998faba075bb7e76b50bb8572306bf67fa252",
+    "cargo-1.61.0-x86_64-unknown-freebsd.tar.gz": "cafd33b422db45e5e0a1e7236b0898966109686977058c79cc90366cfaa59f8d",
+    "cargo-1.61.0-x86_64-unknown-freebsd.tar.xz": "433906be12e99b9b371fba6aaf2391b3104c314059e76746c92827bdb91c3eb9",
+    "cargo-1.61.0-x86_64-unknown-linux-gnu.tar.gz": "c6e108e13ef5e08e71d70685861590f8683090368cab1f4eacfe97677333b2c7",
+    "cargo-1.61.0-x86_64-unknown-linux-gnu.tar.xz": "9461727d754f865ef2a87479d40bbe4c5176f80963b7c50b7797bc8940d7a0a0",
+    "cargo-1.61.0-x86_64-unknown-linux-musl.tar.gz": "b22fd5207b214839e71b8294f86787524d6a41610339de5259191ffdd3fa8761",
+    "cargo-1.61.0-x86_64-unknown-linux-musl.tar.xz": "db4b4423c2843b6e27737664cf8085afcba670374110ca24b9c8d341045e748c",
+    "cargo-1.62.0-aarch64-apple-darwin.tar.gz": "8a4c0f52491382d537753531a51a45355135e0b19f85f20588785d604f1eff2b",
+    "cargo-1.62.0-aarch64-apple-darwin.tar.xz": "270ac5f4196ad4e016a4da79f2f3b0417fd19f8680de619583fd1f4e240c2c7c",
+    "cargo-1.62.0-aarch64-unknown-linux-gnu.tar.gz": "2b55f7073846cd269a2c0b002800699de89ed7ed38852457cf2dbae35f5e73fa",
+    "cargo-1.62.0-aarch64-unknown-linux-gnu.tar.xz": "475038ecacca9ff586cad2082d5d950544b0d581a2a287facc7d899aae488813",
+    "cargo-1.62.0-aarch64-unknown-linux-musl.tar.gz": "3951ee228906caf03134a667662e2ac1cece5c0607f54d09a6c3a4759de59d7b",
+    "cargo-1.62.0-aarch64-unknown-linux-musl.tar.xz": "af4a5f2cb93ae4c78ea135f415ebd91a9bc33528617d6618c647641cc2520bfd",
+    "cargo-1.62.0-x86_64-apple-darwin.tar.gz": "4957c596cc5327921be523fb1de935b1072caa12f9cedaa68cff3e85898fd09a",
+    "cargo-1.62.0-x86_64-apple-darwin.tar.xz": "ddb05c2d74a9538ec989a7b2e5ba773a7d73def78050c4e4d14f495bffcf0a3e",
+    "cargo-1.62.0-x86_64-pc-windows-msvc.tar.gz": "4ae611128dee1ca2060cffec20df67a9fbb9731d51c6cd789b9161ab1e6eb3f3",
+    "cargo-1.62.0-x86_64-pc-windows-msvc.tar.xz": "407790462a9ed376299d602d038f5f9a58eac072d38872110327fea26022a41e",
+    "cargo-1.62.0-x86_64-unknown-freebsd.tar.gz": "575f7f8b4e185ab94567b52e943a837ca0153676d7a55e7b3fa04b96c4f27aaa",
+    "cargo-1.62.0-x86_64-unknown-freebsd.tar.xz": "258ea331ee7aee19135b9e9b6a9bbfce206c7aeac427bc6e63ff25dbdb7bc8cf",
+    "cargo-1.62.0-x86_64-unknown-linux-gnu.tar.gz": "fb0141db9fdea4606beb106ca10494548f24866b39a10bde8d1e162f653e94d8",
+    "cargo-1.62.0-x86_64-unknown-linux-gnu.tar.xz": "815c63119a9cf0282ff240c6444b6f867238763ee3dea182f10837ae7dbbb1d4",
+    "cargo-1.62.0-x86_64-unknown-linux-musl.tar.gz": "04c90e1f96f0a8c2e78638a2e98481ee449eed9809d01609264de4d627f186f0",
+    "cargo-1.62.0-x86_64-unknown-linux-musl.tar.xz": "1d8e958aa7b17433e0bdce3515cd6b1b5127220bfd654df8ec68d40be432f7b4",
+    "cargo-1.62.1-aarch64-apple-darwin.tar.gz": "363b925378e4e51e35db655abfad0ee8187dc30d502f4814ff3dfdec43238c23",
+    "cargo-1.62.1-aarch64-apple-darwin.tar.xz": "5970726dcfa316131aa5219db06df303e550d430a4127f0a2703923f89bca586",
+    "cargo-1.62.1-aarch64-unknown-linux-gnu.tar.gz": "5c14e1bdfe37cf004cc7abac1f4498c36c5c7675849125ef4c48e1589c6641f7",
+    "cargo-1.62.1-aarch64-unknown-linux-gnu.tar.xz": "dec2461c23fb587810ea47ed1a9a058d5c46755d790746295d6ecaa41cce2c16",
+    "cargo-1.62.1-aarch64-unknown-linux-musl.tar.gz": "c585b76b792e3b7e62d1523a40dcaf77a38de03a2ea220029d7a2d8cf9f170d0",
+    "cargo-1.62.1-aarch64-unknown-linux-musl.tar.xz": "6ac59a634f71ebb3130695fb31ff81fa66b09bc807884fe40ab76de4cc23ef25",
+    "cargo-1.62.1-x86_64-apple-darwin.tar.gz": "6a6ea26fba82ad3b6f8d2378fb006ce083e02fde77718e335b3942f59cf63cb4",
+    "cargo-1.62.1-x86_64-apple-darwin.tar.xz": "8b17c84c7931a9bb34dfa28a13bd8dc285ccfdd60138b59ac405376db83b3093",
+    "cargo-1.62.1-x86_64-pc-windows-msvc.tar.gz": "5a3a793fbdae409dcdfca8b232b5bd6a4f2899bce5234e91eb595b2ddb96086a",
+    "cargo-1.62.1-x86_64-pc-windows-msvc.tar.xz": "9ec69130eff75b2dc5cebf512d5df5cadf752f1a8901f37395f9c9d3180109aa",
+    "cargo-1.62.1-x86_64-unknown-freebsd.tar.gz": "8da1e16c594dc1e5483f3b27cf92bbe411e6d2cb8ae507dc9bc95d1f2dbeeafa",
+    "cargo-1.62.1-x86_64-unknown-freebsd.tar.xz": "f16097d8cfb3ba1992a513e6dc8a736228271e51540e9bd93830f9d7c8d6ba69",
+    "cargo-1.62.1-x86_64-unknown-linux-gnu.tar.gz": "7a471270fe18dfe231693178c169b279c0747ae179fd755729eefd8c6052f595",
+    "cargo-1.62.1-x86_64-unknown-linux-gnu.tar.xz": "9af4601aed486c982d5f07f8a0c2506a5a278316cfe30f77f5a41b5f69d8382e",
+    "cargo-1.62.1-x86_64-unknown-linux-musl.tar.gz": "35a5b6fb9950a1825f44bb9f69cc3c0ba9f2014b9645c774a7ecc4597009f7c0",
+    "cargo-1.62.1-x86_64-unknown-linux-musl.tar.xz": "089705fc085f2806c0c541a1bac918cfb83a775c69db6868185e6a9e62ae09b4",
+    "clippy-1.48.0-aarch64-unknown-linux-gnu.tar.gz": "2cc894bf75d938c0f7b96c7711d93b6d5a0befed5c09232cdd8413a57942ed88",
+    "clippy-1.48.0-aarch64-unknown-linux-gnu.tar.xz": "ff5fc4d3b4f1b6147f782d28669fa0e847b3660185fa147e4ebf4d9ace61cd4e",
+    "clippy-1.48.0-aarch64-unknown-linux-musl.tar.gz": "b3d740358470df6f4c1881a40db16c6fce4082bd251b012963147fdadab96879",
+    "clippy-1.48.0-aarch64-unknown-linux-musl.tar.xz": "782277e11c8508a0133c6d3d78a0ef9582a5a3f6db430cf4fc15583a69a804fe",
+    "clippy-1.48.0-x86_64-apple-darwin.tar.gz": "d70a5d224a90df3fc77d7bd38df931023a3966be755b888bf0888d6bfcbdc424",
+    "clippy-1.48.0-x86_64-apple-darwin.tar.xz": "1ee1766b112972de3b5b7a1f3424f072ef9e8a71b816d1187ee2eb744f3eec7c",
+    "clippy-1.48.0-x86_64-pc-windows-msvc.tar.gz": "e52103f31fe8d4e067b28273ba0aed9ae352d88ad1c3b9860ec1e08b81241ebc",
+    "clippy-1.48.0-x86_64-pc-windows-msvc.tar.xz": "956a73001292ff9f98a1cc11f1831220798533b4b13f48532023c9ee7bb6023a",
+    "clippy-1.48.0-x86_64-unknown-freebsd.tar.gz": "14459e9629b09c83c38fe2366d996490c1691fb3ae9937f4a8de48219857e14a",
+    "clippy-1.48.0-x86_64-unknown-freebsd.tar.xz": "254abc2f923fde7c2539550769fed884a4707c3ba6929f957624b7400d64960f",
+    "clippy-1.48.0-x86_64-unknown-linux-gnu.tar.gz": "409c2e4a6b50f9a797379e687c2d0bcbda4a268e736fadd2be07f35a2fb9557f",
+    "clippy-1.48.0-x86_64-unknown-linux-gnu.tar.xz": "84d66ceb4f60ea0cb86739648f972ef37326c562386ac9497b9811d588f30469",
+    "clippy-1.48.0-x86_64-unknown-linux-musl.tar.gz": "cf6480cc206ef4b615f95de2f048e6bbf17072b39dd76246faf3440fccea3704",
+    "clippy-1.48.0-x86_64-unknown-linux-musl.tar.xz": "43466ef8d99b8d9d01136b5f452f18c4c2003262ea4d98153e09e9efeef90180",
+    "clippy-1.49.0-aarch64-apple-darwin.tar.gz": "d6f2782d600f1a25d1fb9fe828be0cf170fe5afad50184c30e8c32310f26fd8c",
+    "clippy-1.49.0-aarch64-apple-darwin.tar.xz": "677862a01733f71bcd32ad0dd261d689ff4f0a292dd84b7dfb23efb7b4fd1e26",
+    "clippy-1.49.0-aarch64-unknown-linux-gnu.tar.gz": "ed805952ab975e9f395fa68544448ff7a6e823c4bf7e04952e4c1dae5a550be3",
+    "clippy-1.49.0-aarch64-unknown-linux-gnu.tar.xz": "697cfecf6e3df6f255bba98bd31d909b3e0ef7c5da8be4dc03cadd543443e3a8",
+    "clippy-1.49.0-aarch64-unknown-linux-musl.tar.gz": "f4329c16a6f448abe7be50b2206ca7d8a21605d9d8e3f01303fbe737d0c3bf7a",
+    "clippy-1.49.0-aarch64-unknown-linux-musl.tar.xz": "c7ae92ad591e4340ae9e4a44dffdeaccb02b0e3a4331d6d47d0daeb6aaefaf08",
+    "clippy-1.49.0-x86_64-apple-darwin.tar.gz": "c4a7baeda3a558a65af3afe857aedb5f25e8dd0ba42ea02cdd1056d92e610b35",
+    "clippy-1.49.0-x86_64-apple-darwin.tar.xz": "9fbba9540efefadd80ef12ff3a25523834762476aacfddc6804b2155587d3858",
+    "clippy-1.49.0-x86_64-pc-windows-msvc.tar.gz": "70eec30a80aebaa1f6f4dfc1a6fa681cdc833aa2281726319a06c9fb1af277fa",
+    "clippy-1.49.0-x86_64-pc-windows-msvc.tar.xz": "7e0c6ac885fdecf8387a484cee928032ce09cdfe626408617f70989f323854ef",
+    "clippy-1.49.0-x86_64-unknown-freebsd.tar.gz": "835bb7c1d4f4d57453f69b35e758347ad02f22949cbce3265282d2059aea4166",
+    "clippy-1.49.0-x86_64-unknown-freebsd.tar.xz": "ad1b291bf4da6caeb2afb0b5b2c0ddafa7ba97b2e4e2b225c458a296a95297cb",
+    "clippy-1.49.0-x86_64-unknown-linux-gnu.tar.gz": "0be34ad7ddde82f54353d5322c6142b43d4dee54ea26b9428a3a34444aa4b9c4",
+    "clippy-1.49.0-x86_64-unknown-linux-gnu.tar.xz": "9203aa7a372f8258963e13f661ae92f226a66ee6722551bbc11e2b87e8670707",
+    "clippy-1.49.0-x86_64-unknown-linux-musl.tar.gz": "c53a5e73e99ea9f3e14f2c1164f234eac4e60e428ed82502ffbfdd19be728f3f",
+    "clippy-1.49.0-x86_64-unknown-linux-musl.tar.xz": "793416c642893e4173df9ded9577fcfa73688f41c783407f7d6b67327009e867",
+    "clippy-1.50.0-aarch64-apple-darwin.tar.gz": "c0a335e4cc3b0775661c98937c767eb63f5cca4a8a224c164af2415158175025",
+    "clippy-1.50.0-aarch64-apple-darwin.tar.xz": "8e4b684306eb12d8befd2d08486af1ff7cf41a4aa6bd6e30e02f47df06740bcf",
+    "clippy-1.50.0-aarch64-unknown-linux-gnu.tar.gz": "bfdd830f04b1dae6ffa71e750b391cdd43def5a9c266366eea8e6b8071509747",
+    "clippy-1.50.0-aarch64-unknown-linux-gnu.tar.xz": "3b733892aa55f49864ad6b09cd541bfdf2e9e8f57aeaed5023382859e84e0101",
+    "clippy-1.50.0-aarch64-unknown-linux-musl.tar.gz": "1fb4eaf6c2230ff138edb906ac55fbb47b638e412c83580a783749a38096cb98",
+    "clippy-1.50.0-aarch64-unknown-linux-musl.tar.xz": "18e5fbe76317ab808158071e8171e5ccd5632e3e2a6f78e83da42292f3214709",
+    "clippy-1.50.0-x86_64-apple-darwin.tar.gz": "466be411c4eff28c006179ba5a45af5c37dc9a56395a24ad597fa54a475eb97e",
+    "clippy-1.50.0-x86_64-apple-darwin.tar.xz": "adec8f3f654ccfe01d3ddab3dcc7d14708434bddb05d8275115e210c5b636b49",
+    "clippy-1.50.0-x86_64-pc-windows-msvc.tar.gz": "65b3198dc0082d2ca77559047901dd102d100bf7fde513a0a3e81ab78c93d568",
+    "clippy-1.50.0-x86_64-pc-windows-msvc.tar.xz": "2a00881e8db9909592f50c54e1ed6cfcc032d6307236ca09212b794861105011",
+    "clippy-1.50.0-x86_64-unknown-freebsd.tar.gz": "f065a60cae99287eeed1ad479f159efeef7f79459b8b4369c451d966bc8b0bed",
+    "clippy-1.50.0-x86_64-unknown-freebsd.tar.xz": "12bf496dade56c6d300dbc3060a5150056ae881551ce1fc2e9b6ff3e137df11c",
+    "clippy-1.50.0-x86_64-unknown-linux-gnu.tar.gz": "ef4098fdb39d67366300a63370c513ca97fdce8f4d6ce9e2a5fbff32d3a8ea38",
+    "clippy-1.50.0-x86_64-unknown-linux-gnu.tar.xz": "ec38b632d13a66ab070104b31266b5c45dce9761543db7be03649ecd2c0727c1",
+    "clippy-1.50.0-x86_64-unknown-linux-musl.tar.gz": "b921d64ab3a130240372c069f72b549ec5c0d566dd302c6b7593453536688ed9",
+    "clippy-1.50.0-x86_64-unknown-linux-musl.tar.xz": "8929c01a290c9c530f567e1626d5043ef6e4d58d430dbf1980212ce230b79831",
+    "clippy-1.51.0-aarch64-apple-darwin.tar.gz": "1d4769e522ec3275b6a1b6e63f0d48b6995cf3647df4d97fc1c20bf2969cac6d",
+    "clippy-1.51.0-aarch64-apple-darwin.tar.xz": "272f5ea5c58533b2db979156826e3e55e82030d38206f582d4018e06d47732d8",
+    "clippy-1.51.0-aarch64-unknown-linux-gnu.tar.gz": "bbf4f53e8c9496524384cf8e3a9e56bd80b19aae12135c058ef113bec40fd30e",
+    "clippy-1.51.0-aarch64-unknown-linux-gnu.tar.xz": "b155d313f80bc41f864400aed4d128a8d31213394ea13a61792b902b11930df1",
+    "clippy-1.51.0-aarch64-unknown-linux-musl.tar.gz": "ede6e08307a91fb18feec8d4ea9e170dd3f522f79267ca39d258dd554af5eef0",
+    "clippy-1.51.0-aarch64-unknown-linux-musl.tar.xz": "b84cd09baa461a9ddd8c56972b979bc0b5423b2e37d0aa63ea2adee3fdd8eece",
+    "clippy-1.51.0-x86_64-apple-darwin.tar.gz": "6c1d2c143720058a67da274b1579b4e7e955bd35de6d4714d884b55030ead225",
+    "clippy-1.51.0-x86_64-apple-darwin.tar.xz": "bab39acab59485b4baede28179aac482caaa68de04783bb14c4f41c46ad3aa53",
+    "clippy-1.51.0-x86_64-pc-windows-msvc.tar.gz": "9d7c25c031257ec62b0800e418252e4a53319a513deb9e682b438bef1abc4056",
+    "clippy-1.51.0-x86_64-pc-windows-msvc.tar.xz": "098b7706503c20d490449f4796d0bdd633f87d93b4b4d14eeae767e10cfeceb6",
+    "clippy-1.51.0-x86_64-unknown-freebsd.tar.gz": "db15a34b5d829338f63c436665c7106817b2577d9417615d75e4aa6b27633c3a",
+    "clippy-1.51.0-x86_64-unknown-freebsd.tar.xz": "2ed5ab4a3ef3cf254c2fcf4047bb96b5af564fac42f11998c69c2e986415b291",
+    "clippy-1.51.0-x86_64-unknown-linux-gnu.tar.gz": "61774912e775de826e4f9173c8f91a915d91319d353ecad46361775a035ed69f",
+    "clippy-1.51.0-x86_64-unknown-linux-gnu.tar.xz": "b8e1fe865e98f183b272f897c218c3a07959d534319359bc02ee4ee8c29a5c83",
+    "clippy-1.51.0-x86_64-unknown-linux-musl.tar.gz": "4d3f51f4e1220e740e6d310c5f90652b8463e8897a9e4fe82d9c4b8e3315f9b5",
+    "clippy-1.51.0-x86_64-unknown-linux-musl.tar.xz": "333fe44d64f5ae45dabaf99fe481c0001642f7e102a2a0c1a96b58f97bdb6e92",
+    "clippy-1.52.0-aarch64-apple-darwin.tar.gz": "0e8a71e8567553ed625168f46e2253c04ef19f0ae7683b6500b3fc07cb81fefb",
+    "clippy-1.52.0-aarch64-apple-darwin.tar.xz": "3dea8e3c01952a15ac75642ce5db98bdca6556cb2f78071aee3bfca0c16b5a4e",
+    "clippy-1.52.0-aarch64-unknown-linux-gnu.tar.gz": "06b0a9e579b93bcf5948f013c1e053f8ad6717b3349068b2dbe774215f4b0dd3",
+    "clippy-1.52.0-aarch64-unknown-linux-gnu.tar.xz": "54afbf6e1ebd31875c94170d5b3e76d8f143197f009aa3039c0e397fb6ddb9dc",
+    "clippy-1.52.0-aarch64-unknown-linux-musl.tar.gz": "a2075592aeb37ad33ebcd93b228e79dabd8fb62eeee7aae531ac0d9682eb6abc",
+    "clippy-1.52.0-aarch64-unknown-linux-musl.tar.xz": "21cc5679d90d14ef44682648605404699e3c964ec38e7017f5b7de55e003aa0b",
+    "clippy-1.52.0-x86_64-apple-darwin.tar.gz": "baef3bd3c93872c67ddede8b657236f5f368a9e30b2ba9725c70881877c6db28",
+    "clippy-1.52.0-x86_64-apple-darwin.tar.xz": "ccb756a0cc7e048c3b53a55346f66c36222709e81f1e2738b0cdd061d23b76df",
+    "clippy-1.52.0-x86_64-pc-windows-msvc.tar.gz": "149418af4a93f3c4d8978eccf95a968d2fcef4cdd748b284c782d8efd06d38da",
+    "clippy-1.52.0-x86_64-pc-windows-msvc.tar.xz": "f95d2ac7f8a4cd2040f6504e3d9c7a2b4d30df39f4d2eb32ddb10cba0bb220ec",
+    "clippy-1.52.0-x86_64-unknown-freebsd.tar.gz": "db50b6ac0cfb3c8eca34e8059014bd5602dfd160246a51efef568165ff7bd4bc",
+    "clippy-1.52.0-x86_64-unknown-freebsd.tar.xz": "c6b8495662e0725f348d8fc01e0face4e8441aec7da8c23a43a68c6f00342b12",
+    "clippy-1.52.0-x86_64-unknown-linux-gnu.tar.gz": "00a55613d1a47c12c08f6b101ca791052b07650b624c102acdda4569ba2652a9",
+    "clippy-1.52.0-x86_64-unknown-linux-gnu.tar.xz": "3c3d29365cb5e3baa082c4df8288b61666b4600ba9542e4d19ee06356fa2ed91",
+    "clippy-1.52.0-x86_64-unknown-linux-musl.tar.gz": "95950b2455e706d500a2c2f02904e5d48394b998f5f486fe376a144edcd7f85b",
+    "clippy-1.52.0-x86_64-unknown-linux-musl.tar.xz": "5655b6ed10ca79cd45a5121bd3fe115a8fe076ee75cf98f58d161cc10a3caaa7",
+    "clippy-1.52.1-aarch64-apple-darwin.tar.gz": "fa19b0115201c9462f36eb8f51db07cf58af02ba2c997f1431719f78bea30904",
+    "clippy-1.52.1-aarch64-apple-darwin.tar.xz": "30dd71eb45f049f3c007069615fe5fbef2cfd89d799fa0caa479332e9886d6fe",
+    "clippy-1.52.1-aarch64-unknown-linux-gnu.tar.gz": "91d914a83b5c6d1b551a4acfa96c9cd4365b674438fdd3d2114ee86f11f53849",
+    "clippy-1.52.1-aarch64-unknown-linux-gnu.tar.xz": "fe704e62af7a6234261b25f68913803927d5f72eeeee833e51adad206d8e71fc",
+    "clippy-1.52.1-aarch64-unknown-linux-musl.tar.gz": "0910ba13838bf80b5ae86c219078340fc02ba5e0b570c54a510aedf78cc6837d",
+    "clippy-1.52.1-aarch64-unknown-linux-musl.tar.xz": "0671a1189b76b4007812e6ba09a700ea2f228100d3004d27fbad809002a38436",
+    "clippy-1.52.1-x86_64-apple-darwin.tar.gz": "39264348d1246a9cff623eb511979b71831ff331e16be6bf3371ccefa19a23f5",
+    "clippy-1.52.1-x86_64-apple-darwin.tar.xz": "8289c1765fe7d400a1624af912e5920c74d0406788421b5d4c84ca812b2bb873",
+    "clippy-1.52.1-x86_64-pc-windows-msvc.tar.gz": "2470d52eda90cd6f7a02901bb2144c40957b0decf2af8f6cf115265acc64c956",
+    "clippy-1.52.1-x86_64-pc-windows-msvc.tar.xz": "80470a7ff0a9dcc917600a650b94195fad7cc2be6ba80cf49af7aac6eb82fffd",
+    "clippy-1.52.1-x86_64-unknown-freebsd.tar.gz": "d9b4aeb263668e95b3fff8d4125ce28905695c1c8ed3d9d5bf949d47d386d13c",
+    "clippy-1.52.1-x86_64-unknown-freebsd.tar.xz": "d8e97c48ea2a6ac64bc0ee07ed5615393cd21dabf559af82b2d987f1f4f22dcd",
+    "clippy-1.52.1-x86_64-unknown-linux-gnu.tar.gz": "33d6d2446ec4d381057f404c7081686856a001bd91409d81c96aeeb6c452d289",
+    "clippy-1.52.1-x86_64-unknown-linux-gnu.tar.xz": "35598ab54fe6d0f204deab12a075b423a6cfdeb6f578b72fe0de072da99fbf5c",
+    "clippy-1.52.1-x86_64-unknown-linux-musl.tar.gz": "f37ccdaf359f1ae4aa31324490a9ab2ebfe56e5f11245dfea04930eaa0b5c5c3",
+    "clippy-1.52.1-x86_64-unknown-linux-musl.tar.xz": "b5b1aa6ca94a6e9d852042e96d2ea75be1625d0414c2c58125f106aa433f24df",
+    "clippy-1.53.0-aarch64-apple-darwin.tar.gz": "311247f7aabd4d846d1220f26a6ea6478219d6549a9abc546ad69092dde2e1a7",
+    "clippy-1.53.0-aarch64-apple-darwin.tar.xz": "d201b848169c532c6396aaf423dd88c743ff08e0c1d7e397405c9627ab79c64c",
+    "clippy-1.53.0-aarch64-unknown-linux-gnu.tar.gz": "56842a410a38293a09cf4d880a5d237c10eaf8344a080bb1ea0d3e069ce12112",
+    "clippy-1.53.0-aarch64-unknown-linux-gnu.tar.xz": "1d790bb0a580509647403b5040d72d168c5de5472e2bb3477ce833f0e56a977b",
+    "clippy-1.53.0-aarch64-unknown-linux-musl.tar.gz": "26db11ca69b33b3ac8e3379573f7e3bbc352f7920f98c4434465636c34d386dc",
+    "clippy-1.53.0-aarch64-unknown-linux-musl.tar.xz": "793b35090da358d87d07440571e39e21a8abd8f7ee26774bdff61b7ef454fc01",
+    "clippy-1.53.0-x86_64-apple-darwin.tar.gz": "ede5bceff1be27a21b12a3be4034d254925d3d58d39713fa4af9fa561f1ea671",
+    "clippy-1.53.0-x86_64-apple-darwin.tar.xz": "94a8dcc5e18558d91dc8a3e94674968413fdab3b06b7009c4c18f656f0886a20",
+    "clippy-1.53.0-x86_64-pc-windows-msvc.tar.gz": "dcff1fcdae5ca816a71c9f080246860e8e1d90022576d28d74d033f940ed8aa5",
+    "clippy-1.53.0-x86_64-pc-windows-msvc.tar.xz": "d3d647df154db7cbae4a09209362c2a0b29bd5e211060fb3f234fe8e97b91eb4",
+    "clippy-1.53.0-x86_64-unknown-freebsd.tar.gz": "4de1e957c3999a130ef3cb0362a28746ffaf79197cbb1ebabf7be6be115b2f29",
+    "clippy-1.53.0-x86_64-unknown-freebsd.tar.xz": "b45773cd162ea04205f23c6746ea035613c300029a4e81a30984c7a364058741",
+    "clippy-1.53.0-x86_64-unknown-linux-gnu.tar.gz": "bf065f9c7710a5e7305fb511bd1e21bd248ab216230ec0c71d8bdd2383e0b088",
+    "clippy-1.53.0-x86_64-unknown-linux-gnu.tar.xz": "13a79c06ba4af69b04f34e409d0317ee71527d7b8970d33027f7b15ad3b199e2",
+    "clippy-1.53.0-x86_64-unknown-linux-musl.tar.gz": "ae84cd0677a5446dd07384d4006f52fc6e2d290728edabb5a169a56ca9bb388b",
+    "clippy-1.53.0-x86_64-unknown-linux-musl.tar.xz": "8476052653a62ebdaea971491201407215f1cee71ad0173b624d8e64377906eb",
+    "clippy-1.54.0-aarch64-apple-darwin.tar.gz": "086e52350792a8b4e3f3f40753948e7d067c38c9c0f22492f2c7d88ba7c94e95",
+    "clippy-1.54.0-aarch64-apple-darwin.tar.xz": "164f0aea08a452db9823f401401010c68ed5ea8d66cc100a4c93bcb2603f0194",
+    "clippy-1.54.0-aarch64-unknown-linux-gnu.tar.gz": "e25bdd281f3fa9cb194eaefe75cea7f4f0cd70c615ac7077a015764360d45953",
+    "clippy-1.54.0-aarch64-unknown-linux-gnu.tar.xz": "bf2b912221068af11a68276af4d1e50df0f3ef7f12deeb241b3fff85bcc0ff84",
+    "clippy-1.54.0-aarch64-unknown-linux-musl.tar.gz": "8de3e94808e40540402aafed1343ce6cd058c86fa7ac174c6ec591e4a03d6c09",
+    "clippy-1.54.0-aarch64-unknown-linux-musl.tar.xz": "2551c9f4b36981d1fae104d0817752cdb36c356e8d73e54bb2ca70cc7b018d16",
+    "clippy-1.54.0-x86_64-apple-darwin.tar.gz": "b1548c2d6d524aad02865e98a367dc665cd5b1847a20d29b142cc13adfea43b8",
+    "clippy-1.54.0-x86_64-apple-darwin.tar.xz": "d3a6841fbcb8ca5acdb84fb4631de619067189d57105dd0b754a5933c3442ae3",
+    "clippy-1.54.0-x86_64-pc-windows-msvc.tar.gz": "36e03f67f45d83d66187df2380b4acaaa2cfe5924c53c724a83a2780f78212a1",
+    "clippy-1.54.0-x86_64-pc-windows-msvc.tar.xz": "b3726c5be98d38a066c1ce3de34a0834810697f2a70baa98fe785d644801696e",
+    "clippy-1.54.0-x86_64-unknown-freebsd.tar.gz": "92569c0f9faab4501d47ab6958d6535d2039490e763cc65c1700b0c5436106b0",
+    "clippy-1.54.0-x86_64-unknown-freebsd.tar.xz": "513ee2337d63cdb2529080a2c280342caba2a97cabc2037318aab3710aec175c",
+    "clippy-1.54.0-x86_64-unknown-linux-gnu.tar.gz": "4896d754064c781611901c459d326dfcc10d9916cad5c1dd6a0898bca7e6428e",
+    "clippy-1.54.0-x86_64-unknown-linux-gnu.tar.xz": "a6d9087ca16987827502e39d48c23919234ca121088caef279662fcb8a408e40",
+    "clippy-1.54.0-x86_64-unknown-linux-musl.tar.gz": "8184892daa7b652af96c9634ad15f33e97b022c7aad16e1e95bb95bf3fa96972",
+    "clippy-1.54.0-x86_64-unknown-linux-musl.tar.xz": "7104530862c17861bfe00d24277cf03cf02bd1dfb6fe0cc1ada941219a438b8c",
+    "clippy-1.55.0-aarch64-apple-darwin.tar.gz": "470c8c99050a7785c4b261ab95575141bb48f19dc135dec96b8424e175898670",
+    "clippy-1.55.0-aarch64-apple-darwin.tar.xz": "80cfb671e7bf8cc7c80a6156955b66d9a49b8c8cc8a936c34e8a0b17e0707838",
+    "clippy-1.55.0-aarch64-unknown-linux-gnu.tar.gz": "ace2cface85e199c5d1773a88ca5ba4d1527cf3936bc844113e4defb54fc13b8",
+    "clippy-1.55.0-aarch64-unknown-linux-gnu.tar.xz": "834096ecaef316682c2cd42e9ae1d0ba0e6d725b6822ae2d872dbc07f9148589",
+    "clippy-1.55.0-aarch64-unknown-linux-musl.tar.gz": "f1dead08b21cc8a67a3d27c785e107d2aa5363e60dcfd74c7fb81fd663d288b8",
+    "clippy-1.55.0-aarch64-unknown-linux-musl.tar.xz": "e8b0c2e5f497d47444f31ee8815ed5a7ee807a715c7641aed1d494dbe9143be4",
+    "clippy-1.55.0-x86_64-apple-darwin.tar.gz": "fff5969a2a6795e28e040eda2ab59d29a48ff5aad0f15bea194b61befbffec77",
+    "clippy-1.55.0-x86_64-apple-darwin.tar.xz": "1a8d785842143d52d85cd0ed7b838302c756382daa1d461ddfd416e0051b7f6f",
+    "clippy-1.55.0-x86_64-pc-windows-msvc.tar.gz": "d7dfa77cc50348023d973311bf378181bdf18d5aff7c2fde69cf8031564667da",
+    "clippy-1.55.0-x86_64-pc-windows-msvc.tar.xz": "8fae52db158d05d5151422a08dd0667f6d15fc44f44ac056c69eedbceedfe3b5",
+    "clippy-1.55.0-x86_64-unknown-freebsd.tar.gz": "ba035cd7f62468fc75a56f604ac3579adce4f90ba2e6df219299f21668def51f",
+    "clippy-1.55.0-x86_64-unknown-freebsd.tar.xz": "d99e576a00d5c3a8a8e95c7879d56459681718c9fda9c7ce6bd64f71a89045a4",
+    "clippy-1.55.0-x86_64-unknown-linux-gnu.tar.gz": "108ebbc6b311fc0cafc125f1fd7f35a82935000c60cad49a565958e47f63193f",
+    "clippy-1.55.0-x86_64-unknown-linux-gnu.tar.xz": "1aa42d51b80e2bdadac5128bf66f84b9b1c6ca6262995a1bf34f438a55a0bdf8",
+    "clippy-1.55.0-x86_64-unknown-linux-musl.tar.gz": "e248a8b3987c2750439966ed5df385a089147079105d85041a8147b1044b4f3c",
+    "clippy-1.55.0-x86_64-unknown-linux-musl.tar.xz": "fb6818a511ccc6b49d943c8c5df85864f47df5ade77769b17ffbc48e7a2b7bc8",
+    "clippy-1.56.0-aarch64-apple-darwin.tar.gz": "70eb9ec3d9ab79c20030bd0df903ff972dea451dd2a4b55c7eaa8837c1782071",
+    "clippy-1.56.0-aarch64-apple-darwin.tar.xz": "b7fa611cd2520b1295d1c7da7f801362b53e84224e50460f838709a7a9c2afd4",
+    "clippy-1.56.0-aarch64-unknown-linux-gnu.tar.gz": "fb62502c82cf35fecc55761fb3f7a816d2d355cb31ad89fa844be4a1368853de",
+    "clippy-1.56.0-aarch64-unknown-linux-gnu.tar.xz": "a5df55745445a3337c799013112ad8909f02af368f63703435d6ea6fd7bf8437",
+    "clippy-1.56.0-aarch64-unknown-linux-musl.tar.gz": "fb1852dbeff93f1518ae3d0f7adfeb95596aa55069ad24dbcda14e59bd9ec9a2",
+    "clippy-1.56.0-aarch64-unknown-linux-musl.tar.xz": "f4bc1a9deb52455780d7951d6ac747624e83f40b900c3fc55f43a6426f49287e",
+    "clippy-1.56.0-x86_64-apple-darwin.tar.gz": "9410b2f7096ecc3f495fc8a36e14bd566fdd3e6fda2923b4732c3055da81fcf7",
+    "clippy-1.56.0-x86_64-apple-darwin.tar.xz": "71982616a49d329c02ab9f6835084e5f819335f12616ff4c543958f8345878d5",
+    "clippy-1.56.0-x86_64-pc-windows-msvc.tar.gz": "cdca7f40793889dca4eb19b846c7ca7bc60ffd8f5cc2fa20c6c71b66c26e9449",
+    "clippy-1.56.0-x86_64-pc-windows-msvc.tar.xz": "4c09010d38fbca074ee9d8c3dc9fad2b38c89514d271ed82644bf398035f7440",
+    "clippy-1.56.0-x86_64-unknown-freebsd.tar.gz": "c5751a4a7043c7a29755459193cde2a1468b4a0726fb3b188853afc6d6870510",
+    "clippy-1.56.0-x86_64-unknown-freebsd.tar.xz": "a7ab2b170e992ae9b28452c312cbab22cfe225d2cd6c0574faa413d9f51acd41",
+    "clippy-1.56.0-x86_64-unknown-linux-gnu.tar.gz": "52b49ecc5d44d7f83983ad1aaa37ed9d0ac86a72395cef9e31d06f4ba2343c03",
+    "clippy-1.56.0-x86_64-unknown-linux-gnu.tar.xz": "0792b033388566452102c527887d38c25477fcd68a01517d1c65120d6a2c91d0",
+    "clippy-1.56.0-x86_64-unknown-linux-musl.tar.gz": "32b7b596225dedf38f9228edd1fde9211f6bd1969f924c3de7cc0d5150577487",
+    "clippy-1.56.0-x86_64-unknown-linux-musl.tar.xz": "3f80ef76ed342fb970cfc33bbb2660519340c28a110e975db4e653f708b7bf1b",
+    "clippy-1.56.1-aarch64-apple-darwin.tar.gz": "a3ea45a2c569bbfabe556c6d3c3ca6caa3aa84cd1c4897027a7ae17856ad9c9c",
+    "clippy-1.56.1-aarch64-apple-darwin.tar.xz": "e3a19daed444c493899e270ce3e531c4d3aefa2d033143fd5f70762c557e4ee5",
+    "clippy-1.56.1-aarch64-unknown-linux-gnu.tar.gz": "2b9bea99c887b07b960325f51989600c120278ba658ada17ca9b9f8c75270265",
+    "clippy-1.56.1-aarch64-unknown-linux-gnu.tar.xz": "bad8580d031ee3b51e55cfea408e44d375ae7baad8841a455f5d5983a998bc93",
+    "clippy-1.56.1-aarch64-unknown-linux-musl.tar.gz": "578aeb964a07730e8f92b360e7e96c89728ff35d9d2bd21b1e7436b06960b0a6",
+    "clippy-1.56.1-aarch64-unknown-linux-musl.tar.xz": "562ca14ebcb2ca6ff633f14c3c397c880ed13d067b8dfeaecba8ab1712c565ff",
+    "clippy-1.56.1-x86_64-apple-darwin.tar.gz": "00690eb127e30b75992256481e75d4f3dd6afcedd0d00495eee88137cdbfc6a9",
+    "clippy-1.56.1-x86_64-apple-darwin.tar.xz": "dabcafd0287fd45f5ded4a13ae2c9582e2ec168bc4d860196fefda80879dde5d",
+    "clippy-1.56.1-x86_64-pc-windows-msvc.tar.gz": "932cb41989bb9f72c1a8c37a306a663d311fba26e34f3759e3fe533c963c1571",
+    "clippy-1.56.1-x86_64-pc-windows-msvc.tar.xz": "7f449cec3545e5bf40f28a3bdaf6b41ea572ce3da2d012682e10eb657123b7f1",
+    "clippy-1.56.1-x86_64-unknown-freebsd.tar.gz": "2e25fdf46fb4144115583cc2ee9a43d9d8a5ee8806a00ed676c89ab3f26ff799",
+    "clippy-1.56.1-x86_64-unknown-freebsd.tar.xz": "0dee72fa7b8159586119e7ec600f187961d778e7590415b91b8ef8250347fbc8",
+    "clippy-1.56.1-x86_64-unknown-linux-gnu.tar.gz": "07bfe461a7da0631917a1c2ff0f319af85d1083ada911a089a76e792cf673d16",
+    "clippy-1.56.1-x86_64-unknown-linux-gnu.tar.xz": "5f295ce72bdea0e1da07df703f0ccbf01b235c8e35c7ebf7612a747c833ee14e",
+    "clippy-1.56.1-x86_64-unknown-linux-musl.tar.gz": "031f5118516ee442d9489ac32922cfa322b76629ba2dbcbd10047891651e8955",
+    "clippy-1.56.1-x86_64-unknown-linux-musl.tar.xz": "48a17a9b411a77e944fef8e0afe0a8dca72bbf09e5c853a4a564acb42b378a80",
+    "clippy-1.57.0-aarch64-apple-darwin.tar.gz": "1e29be461daed9196ffeabca4855501de118a503863f54873cb24b18ffb785ce",
+    "clippy-1.57.0-aarch64-apple-darwin.tar.xz": "148bdb4854df2d53e8ef0971ddd2d2898fc63c4c68efac81a50f2a5b64e61294",
+    "clippy-1.57.0-aarch64-unknown-linux-gnu.tar.gz": "c6f082eeb70580e293feb68a0bf415d8e490675a50e66c67384cbbf2c38539e2",
+    "clippy-1.57.0-aarch64-unknown-linux-gnu.tar.xz": "d73b283093aad701749c9ab4a8a891fceab1439e6797d068ba8202712b259393",
+    "clippy-1.57.0-aarch64-unknown-linux-musl.tar.gz": "f8ec644a01ef3f69db2b90e91640334de4b5b557ff2a085053e937f12d428f14",
+    "clippy-1.57.0-aarch64-unknown-linux-musl.tar.xz": "df4a723ed40a8510fb89e36c8212d9433bc8e42082e27b420a31a9898d4550d6",
+    "clippy-1.57.0-x86_64-apple-darwin.tar.gz": "f232a98a50cc0cb6237a09e59e12bf0ed67051e369d5371519085f91f7bd9411",
+    "clippy-1.57.0-x86_64-apple-darwin.tar.xz": "b755d61cff4f97d5034cf84e6c16024f141533c0e4f000afd293cd25326ab093",
+    "clippy-1.57.0-x86_64-pc-windows-msvc.tar.gz": "e24ba652942e85bba965b61045f0515f4c7f3537eeea6ae7023c2110179545d5",
+    "clippy-1.57.0-x86_64-pc-windows-msvc.tar.xz": "4fbf7c930d25f697be01c3018f83228d7595b60f84c07477e515eedc1324e5d1",
+    "clippy-1.57.0-x86_64-unknown-freebsd.tar.gz": "664d64fa5557717b7ea14fb3dfa8c7a32fc03296ff6ea38243e42dbb371776b7",
+    "clippy-1.57.0-x86_64-unknown-freebsd.tar.xz": "05723d3f72002d77aa1630afca1574cc4a185002b5b1f14a42518dd097cc51ac",
+    "clippy-1.57.0-x86_64-unknown-linux-gnu.tar.gz": "650a417e4adb00c29795110fb07d671e8fe79ef54a682a357defe7b402d09838",
+    "clippy-1.57.0-x86_64-unknown-linux-gnu.tar.xz": "b82b6181b451f6aa71703a54e97f756a3fb4c5dbff5f1f58135f91c4d59151d1",
+    "clippy-1.57.0-x86_64-unknown-linux-musl.tar.gz": "ba8eb172cc6435e396312509925058af6bc16ddd6da8abca7a89b8dbf4dd32d3",
+    "clippy-1.57.0-x86_64-unknown-linux-musl.tar.xz": "0eefe5f20d9ac09139bcd7c2398041e1636256f32abe6e7bab7ccaf57eafe289",
+    "clippy-1.58.0-aarch64-apple-darwin.tar.gz": "8370af0cb5e274de23adab83eb62ce32bf117dfe4681a731719d2b3d1a9758b9",
+    "clippy-1.58.0-aarch64-apple-darwin.tar.xz": "995192fd0c3db63929b3c8766ecba63957550714ed56535fe165317c5e5af349",
+    "clippy-1.58.0-aarch64-unknown-linux-gnu.tar.gz": "d228ee69d7552d66f637d0afed4d43098fe0b87fc4cd15ff670f06aec642e171",
+    "clippy-1.58.0-aarch64-unknown-linux-gnu.tar.xz": "d1a98ec6344aebdf3b72b11deeadf6ab51cded7d615236c6da3ec87aac4165a0",
+    "clippy-1.58.0-aarch64-unknown-linux-musl.tar.gz": "5dd6ae5262d0b02f417d37698e9ed72a44880cf389e6ca4c2ad6fdcddbc87e3d",
+    "clippy-1.58.0-aarch64-unknown-linux-musl.tar.xz": "4c1a11ebdff3e30998b9a1993ab65bd5389bbb0824b6ea37930970b02dec373d",
+    "clippy-1.58.0-x86_64-apple-darwin.tar.gz": "98489c63d307db213c66d18f375c4feca49eaca1a48967d0b13e5395a1564924",
+    "clippy-1.58.0-x86_64-apple-darwin.tar.xz": "425003e97760662dc01bbbe9ade86c8d0c43b1f0a18ab82a4804389668d1c153",
+    "clippy-1.58.0-x86_64-pc-windows-msvc.tar.gz": "52ca3e4cf88a39ed02aa573de29a88868b5bf326c4d148b12b791071d004c79a",
+    "clippy-1.58.0-x86_64-pc-windows-msvc.tar.xz": "1a1e13a5989f49a2c0d0d644fd7b3802f71b1685d608ba760b340a4f9c092a9d",
+    "clippy-1.58.0-x86_64-unknown-freebsd.tar.gz": "801695120c015e84980408fce40ce0797c7720c291a7d8b56ca0a642d133d336",
+    "clippy-1.58.0-x86_64-unknown-freebsd.tar.xz": "b92ce8afa864226003d8edc9aba6b5e7d5b286553f420377b7e27638ff0163ce",
+    "clippy-1.58.0-x86_64-unknown-linux-gnu.tar.gz": "747524e25f22659447bef677083625657caa2138a945d44998eb375b4262f9c7",
+    "clippy-1.58.0-x86_64-unknown-linux-gnu.tar.xz": "2ed31e60dade08462fc829f89a780144de50604d601eed1c4cfa5492918a3a59",
+    "clippy-1.58.0-x86_64-unknown-linux-musl.tar.gz": "dd4bb678e1f48e6013b46e350355a4911dbef865d23613cb950cfe3691cae88c",
+    "clippy-1.58.0-x86_64-unknown-linux-musl.tar.xz": "efdad26de16a4809316acf7ddf6a0f55a9653acaee26761595ff93ece1cb8137",
+    "clippy-1.58.1-aarch64-apple-darwin.tar.gz": "89e881ec4e8e2a54cef8999fc85bfec72fc749f4bf3eb292d0b6b7318652992b",
+    "clippy-1.58.1-aarch64-apple-darwin.tar.xz": "3796203287313e58f286d0366acc745dd139d5aed97a4afc09254499ced5d3b8",
+    "clippy-1.58.1-aarch64-unknown-linux-gnu.tar.gz": "efc65bf92fc1011dc34805d6b2ae18ecebd85f9593fc4dffd9dd1e59daf6eb6a",
+    "clippy-1.58.1-aarch64-unknown-linux-gnu.tar.xz": "93c5fcdbf93d4559bbe325af4ec3139b9765eb1db1606a8a10688b2a2d7c1b0a",
+    "clippy-1.58.1-aarch64-unknown-linux-musl.tar.gz": "d28e4e64aa8b96dea036165481ba0b3df118edad7cead3902b1bfe5becf0dd33",
+    "clippy-1.58.1-aarch64-unknown-linux-musl.tar.xz": "aec7b7e7d8077175b256d967ffadfb8aed43527a683a7c8f78786bcb01164eec",
+    "clippy-1.58.1-x86_64-apple-darwin.tar.gz": "e5a67b36bec6c0ba128f134fd08621a6a72b08db64020592b171ea66a1af300d",
+    "clippy-1.58.1-x86_64-apple-darwin.tar.xz": "72bb66d4b12c656fd96c66579352b586a558187e0d3faffa300ba527104f7533",
+    "clippy-1.58.1-x86_64-pc-windows-msvc.tar.gz": "ee3186a2fe0dd68cfc4d63771d5cb67fd7c34bffcf8bc60fc7f0e70e0c37e94e",
+    "clippy-1.58.1-x86_64-pc-windows-msvc.tar.xz": "92b76b4b8ffa8bcbcb2374cc444876023c5e3c11a374d7113a1611c7d4b02769",
+    "clippy-1.58.1-x86_64-unknown-freebsd.tar.gz": "e52bdea9a882c610b4510011f36b359df5dd0c6b33e3e6c7c1ea1336b59774e9",
+    "clippy-1.58.1-x86_64-unknown-freebsd.tar.xz": "05d49ed2b4d9f47157c93742ed7dc9c6142d36f27355a0c4409146ca14d88f08",
+    "clippy-1.58.1-x86_64-unknown-linux-gnu.tar.gz": "8a750e67626799c6d7c2424f5ba47c9d9d4aa128bc2f7b78f9bedb8e4e8c46a3",
+    "clippy-1.58.1-x86_64-unknown-linux-gnu.tar.xz": "affbb29601df1afc15db2883271b2b57f989acd78433c4dbabecb35300fc9d96",
+    "clippy-1.58.1-x86_64-unknown-linux-musl.tar.gz": "74ee750364731d8a1f67a7dda33381e64f07adb8af782a5fd00f1b8b5f09b083",
+    "clippy-1.58.1-x86_64-unknown-linux-musl.tar.xz": "24b94bfe9559ea133b269aaa0248113a94018ddb5a8e99af37d5dd0e8da12524",
+    "clippy-1.59.0-aarch64-apple-darwin.tar.gz": "37e2589cb182da7c7878eac4386973ee0539e11de6cea047d500247e57214573",
+    "clippy-1.59.0-aarch64-apple-darwin.tar.xz": "bef023f286d3c44777e14bb93c7244d12334013ee10b438a8bb8f473d893c3b9",
+    "clippy-1.59.0-aarch64-unknown-linux-gnu.tar.gz": "d4278d73c317d487ea4cdfbaf43ffe048744c0ce887c584eb396016b9cc007af",
+    "clippy-1.59.0-aarch64-unknown-linux-gnu.tar.xz": "061d7eefa1e669a8df9195e96a7d8341e92a897cd505a61892561ae11300d83c",
+    "clippy-1.59.0-aarch64-unknown-linux-musl.tar.gz": "9f8e96d61a23c83cc59c44bac7b42b997f173974ee8b6cd4a9c3b4a54caa0107",
+    "clippy-1.59.0-aarch64-unknown-linux-musl.tar.xz": "acee673f639135e8531b3cc6d88b3ea111e08233e2a127af454fd32e6e476c56",
+    "clippy-1.59.0-x86_64-apple-darwin.tar.gz": "932e843d538f3775d7996ad2f9a4e412f431d413c6585521fc95dba85aca2bad",
+    "clippy-1.59.0-x86_64-apple-darwin.tar.xz": "c0d5426868567606bc5d5964f33a02cfb0ea0d48b97f922c242ea7ec5e74dece",
+    "clippy-1.59.0-x86_64-pc-windows-msvc.tar.gz": "786751cdc3b1937c19e555255092c888509e81ab6295887da0e92f1de7f5900d",
+    "clippy-1.59.0-x86_64-pc-windows-msvc.tar.xz": "e8b61f0d9544cc43e6074dfaab023512f2a2a7c00b18eeca7afc73d83f474ff5",
+    "clippy-1.59.0-x86_64-unknown-freebsd.tar.gz": "d1c2ab40e6be423d4d4e29af85b56dec090cc49afb82684c07b0cb19317d043b",
+    "clippy-1.59.0-x86_64-unknown-freebsd.tar.xz": "b27a1aec40afae6ed5c905bd0dfe97b718bf911c12cbac4539253f24a13d33f3",
+    "clippy-1.59.0-x86_64-unknown-linux-gnu.tar.gz": "aad54aae93bd8cad8fa1ae77a0e4f79b8439d471b1478a0fb67294497a782edb",
+    "clippy-1.59.0-x86_64-unknown-linux-gnu.tar.xz": "6677bf4d2b46fbd3a205b304b56482d92da3dfe7c45668ed59222724c7c83bd3",
+    "clippy-1.59.0-x86_64-unknown-linux-musl.tar.gz": "23b57a9b3b30b6724df278860d9700e50e88b5dff5afd8b8ddaf0bf235695762",
+    "clippy-1.59.0-x86_64-unknown-linux-musl.tar.xz": "e8c74d7676c9938843d4d10e3fa8b6a0d6a3ef0f12bfcd58e7cd1658997f0ea2",
+    "clippy-1.60.0-aarch64-apple-darwin.tar.gz": "67af957c613f1a9a3de032a4ec92c97694d3b210ff9af7998a9c9a41b6a0ab07",
+    "clippy-1.60.0-aarch64-apple-darwin.tar.xz": "70c34acd2dc0c203016a9d40a76b0135b4a4b7a146d8c2b8d7a08d982fe70a01",
+    "clippy-1.60.0-aarch64-unknown-linux-gnu.tar.gz": "225383cf9b630190ed4ad0841b98e1cfe40580571515ee2d8a3acf89845e1190",
+    "clippy-1.60.0-aarch64-unknown-linux-gnu.tar.xz": "c419069055c8940279c10cfb19b96c7bad09a47eaa773652c2c47da83fc78cf1",
+    "clippy-1.60.0-aarch64-unknown-linux-musl.tar.gz": "e658017604bf3b52a2a6ae348401cc95d6167dfbe6c5b030e7972537f9a05f7f",
+    "clippy-1.60.0-aarch64-unknown-linux-musl.tar.xz": "800981b5325a23f49d8acf431dcdd5a3205a0ace7066ba25052381a09744cbb6",
+    "clippy-1.60.0-x86_64-apple-darwin.tar.gz": "1ede0da348aa9dcccc4a2366db99bd39ac9b3f1575137d63702d49a9a65b0b4c",
+    "clippy-1.60.0-x86_64-apple-darwin.tar.xz": "ada91302c1fb5062309207a1e3583a90d55bbc9508e97b98c6ef225f63475c12",
+    "clippy-1.60.0-x86_64-pc-windows-msvc.tar.gz": "e5cb742b74a7430545af4900e9b63e260c3b4d8990b5ce3f5e18e66ce8855ab7",
+    "clippy-1.60.0-x86_64-pc-windows-msvc.tar.xz": "b8a998c4c186664e73702ecf3bd38e59f64c37523b8092536da7cddd9a82dde8",
+    "clippy-1.60.0-x86_64-unknown-freebsd.tar.gz": "ec9076b4c934b7b6eef8159044e6e2296991d662f2cc867e44956ca2abfc4d90",
+    "clippy-1.60.0-x86_64-unknown-freebsd.tar.xz": "e4987b4df645f6720017d5e2b2a1d45d03ecc289d56f5f4d8fa75092da9dc37c",
+    "clippy-1.60.0-x86_64-unknown-linux-gnu.tar.gz": "2efda20cbc60287cb0ea91a057568f9266f8589192c257cd9f21dd3294eae0fc",
+    "clippy-1.60.0-x86_64-unknown-linux-gnu.tar.xz": "cbfc51f46cccf4cee9d87f66d1206883d6dfa2c47051a1fafd42bd84bcffbabe",
+    "clippy-1.60.0-x86_64-unknown-linux-musl.tar.gz": "3f6f9cdcdd5ab81aad2cadd3cbfeb9a752a3dbeb5fbe4cab382b2ccc5ff25329",
+    "clippy-1.60.0-x86_64-unknown-linux-musl.tar.xz": "23056cc386b172ca987c414fcf7b601a3005db80c6af158f84fd27ac0888db37",
+    "clippy-1.61.0-aarch64-apple-darwin.tar.gz": "f9d24b7f596d580061dec5fa47184842945f8f5a440247e08ddca3a6196cac54",
+    "clippy-1.61.0-aarch64-apple-darwin.tar.xz": "721a6f26f8082a82506fede6ebdd12d8c1d23fd6c80f2ba242ebe8b27ed67d75",
+    "clippy-1.61.0-aarch64-unknown-linux-gnu.tar.gz": "f6062dbd5137468ca5acca314e36dea1b74a77b433ac874b7a2c2caf47b87bea",
+    "clippy-1.61.0-aarch64-unknown-linux-gnu.tar.xz": "c9ddba5eeca792516a5dddbedbb55adb1a0cd96ba410325d6a8b445b72209845",
+    "clippy-1.61.0-aarch64-unknown-linux-musl.tar.gz": "8c3e9d1a9e33891b9f9eba74fbedc84180579742ef79023670dc99f2b3b694d3",
+    "clippy-1.61.0-aarch64-unknown-linux-musl.tar.xz": "4ba2ba81832921e9212b8782790cab2ae955284aaa403b3ace392f0644040a74",
+    "clippy-1.61.0-x86_64-apple-darwin.tar.gz": "383c5088789e09dad44e670bb4df1f07ba4c7b36bdf9186d0bfd20a19a188a9c",
+    "clippy-1.61.0-x86_64-apple-darwin.tar.xz": "78f8b0cd8ec46f03697cc5183659cf9cf6d56d8cbab1704c67529908e4591730",
+    "clippy-1.61.0-x86_64-pc-windows-msvc.tar.gz": "294d907c95839b2cc21ebf73a8ce85252c6ed093d38fef3a64665b3a24197f3f",
+    "clippy-1.61.0-x86_64-pc-windows-msvc.tar.xz": "05dde2a545248bba975d97750838e283f2d9c9f97aa65812639ec4e0cc1f1a9d",
+    "clippy-1.61.0-x86_64-unknown-freebsd.tar.gz": "1804477befcc3e26118dd40c815055e35d13ccfb277ee9a324868139a5b43ee0",
+    "clippy-1.61.0-x86_64-unknown-freebsd.tar.xz": "31c35a66bd139df588489f27a67f45e5dc544b20f7194b4d8436a7940f1c0a2f",
+    "clippy-1.61.0-x86_64-unknown-linux-gnu.tar.gz": "89b07f598d98be902ca678d156cf280feb5fb0ced4bccb6c0d6b286233f5c892",
+    "clippy-1.61.0-x86_64-unknown-linux-gnu.tar.xz": "821b1275799937a5273c48d2d652938bfa75f1f06ff4443fda66d0ab659c44fa",
+    "clippy-1.61.0-x86_64-unknown-linux-musl.tar.gz": "4cbf5e5a6957f351c38b78a9725be127bac826f83466bd6cbd86ae0d8cf54f91",
+    "clippy-1.61.0-x86_64-unknown-linux-musl.tar.xz": "5a6b76e0945f4d16423ce3f7f71398f15f90d2d13702de246b105366ae6c268f",
+    "clippy-1.62.0-aarch64-apple-darwin.tar.gz": "8d01abc5fcf5af194008091f79b5aa4044c3f199c60d4d7b1e8fa9587f590709",
+    "clippy-1.62.0-aarch64-apple-darwin.tar.xz": "32610d7fd41b342bbfbab32e4bdd5669fe701cca57b1da6f25baaa5dc4837704",
+    "clippy-1.62.0-aarch64-unknown-linux-gnu.tar.gz": "7f7c399ec6feff30cba05f3ae41a5bf11674bd89dbd1bac3befcab75c6524b6d",
+    "clippy-1.62.0-aarch64-unknown-linux-gnu.tar.xz": "ed413e817b702fd7275f25798f1a935286367d3ad7da12c9b460a7dd9882d64f",
+    "clippy-1.62.0-aarch64-unknown-linux-musl.tar.gz": "05b7d6b91838ecb140432bbc32aee62d281b7f5e56a64d5d8a0b0f4b2ffba26c",
+    "clippy-1.62.0-aarch64-unknown-linux-musl.tar.xz": "609b64e7244b75cb053f835d51dc6b45c583673dba0f5b5776cadb0835980334",
+    "clippy-1.62.0-x86_64-apple-darwin.tar.gz": "ec6d5296bdfbacf0e7c44be0c89f5ab3519fd18c68df184c18172b6ad650c0d1",
+    "clippy-1.62.0-x86_64-apple-darwin.tar.xz": "10eaa92b0409a2272c98f7117e42aed996130f6eff1630fa22c71791aef075a4",
+    "clippy-1.62.0-x86_64-pc-windows-msvc.tar.gz": "dbed1bc07a30a86f8f17a2353ae8fec97167202f7db477846182c0bf898e685e",
+    "clippy-1.62.0-x86_64-pc-windows-msvc.tar.xz": "bf42669c573a24a0efcd295eacde7b1378bf1d39c06abc41cca18fdd8cb89d83",
+    "clippy-1.62.0-x86_64-unknown-freebsd.tar.gz": "21bb4f0b5f9633a4aee1231dea7c66e76757a1fed88dca8420a1724db547848a",
+    "clippy-1.62.0-x86_64-unknown-freebsd.tar.xz": "952f3568f6e1d4c8d4f22dd3e6fcbebc99541044185312460483fed767a013f3",
+    "clippy-1.62.0-x86_64-unknown-linux-gnu.tar.gz": "6f5ff978a18c557c4b21d327de25eafd5346075d12278bdc6677dea51509184b",
+    "clippy-1.62.0-x86_64-unknown-linux-gnu.tar.xz": "b80b3572139036810eda80a4716f47b7166b42f935827773b2c7e74410d2951f",
+    "clippy-1.62.0-x86_64-unknown-linux-musl.tar.gz": "ba37e0ebb2c6778103bc7d437b13de670beb6a2d9dad3ac1f81eb5626cc06c78",
+    "clippy-1.62.0-x86_64-unknown-linux-musl.tar.xz": "f5f3f0334232408328dde685b50f210d1f0378e8d8fed6effdecbe2cdf5db4db",
+    "clippy-1.62.1-aarch64-apple-darwin.tar.gz": "70ec000ba2615d62a853dd1b28e8446510c44d486f254e111a9ee752eef6b133",
+    "clippy-1.62.1-aarch64-apple-darwin.tar.xz": "133ee7470c78caad37ebecb7a7878302a4cd2c04dd6b75bb10b50f9d5d4886ad",
+    "clippy-1.62.1-aarch64-unknown-linux-gnu.tar.gz": "8d3266b3f1139a0cc51db63b55949353852483804410b80ac71a1654eeef237c",
+    "clippy-1.62.1-aarch64-unknown-linux-gnu.tar.xz": "05a257e6269c061dec7fe200a78b10ffd83d3eda15df7e3f3ea365cbb2803b6b",
+    "clippy-1.62.1-aarch64-unknown-linux-musl.tar.gz": "cdb6b257e1c2d5c5fd06458e577f5eab876e65cc5cc65f3e54ba040116d8c97b",
+    "clippy-1.62.1-aarch64-unknown-linux-musl.tar.xz": "838d795bdadad0f598dea51284a5ba4c7e1640979052b5eb52a12c08ae1068a9",
+    "clippy-1.62.1-x86_64-apple-darwin.tar.gz": "6c4c4b1d4d1f9d4f99f7417942f3c08cbcacba89e58a38b91fc392926a5d9029",
+    "clippy-1.62.1-x86_64-apple-darwin.tar.xz": "4036047ef496110a9ba45066a8fb8bd57e69cc670be762750f6812bf1cf0bcf1",
+    "clippy-1.62.1-x86_64-pc-windows-msvc.tar.gz": "e9212f0be51000bf0e3c6e7ae5070c8f7840454f74515a8a571260d7a89e9523",
+    "clippy-1.62.1-x86_64-pc-windows-msvc.tar.xz": "12956ab701220d0d881d0006ab8aeb3c2a3e8ae416ee9e1ac36ca300d8289203",
+    "clippy-1.62.1-x86_64-unknown-freebsd.tar.gz": "0d3e2a2478d74261ef868796f282e464e4e120f279effa79ac9d4c3acbba93c8",
+    "clippy-1.62.1-x86_64-unknown-freebsd.tar.xz": "65e03c44c5e636e7315dcbbcc0db49684393f9e805d5d1aed261d0907a5ccb70",
+    "clippy-1.62.1-x86_64-unknown-linux-gnu.tar.gz": "8d0cf0fea4132e3e57793e01d494d85b4010e2073b531119f0c4f88a28fa8f05",
+    "clippy-1.62.1-x86_64-unknown-linux-gnu.tar.xz": "1d7d113459ae1ac060d37c7de8d981c651eac16527e8ba5bedcd89309aca1e10",
+    "clippy-1.62.1-x86_64-unknown-linux-musl.tar.gz": "470fcf84bc8ce04229f16f493513b05902aa600cb85ddcd7a80a9212bb415a91",
+    "clippy-1.62.1-x86_64-unknown-linux-musl.tar.xz": "eb07eb7ec59e4a332f3a8d761612fb11eaf6c669f3451c1a056117f3c1ab466e",
+    "llvm-tools-1.36.0-aarch64-unknown-linux-gnu.tar.gz": "942856e49837a1c3b9c7d48b52cf0ac0fcb2bb31bb691fe53bfb934afb561c7f",
+    "llvm-tools-1.36.0-aarch64-unknown-linux-gnu.tar.xz": "e2671f3710f65642779023e46ad7402cc3bdaa15861ccfd6b48f1607e0b76ae1",
+    "llvm-tools-1.36.0-x86_64-apple-darwin.tar.gz": "ed702a4174a27fcf118f301e79835c3da205d3d98adb4acc294b72293a2ec790",
+    "llvm-tools-1.36.0-x86_64-apple-darwin.tar.xz": "790cfc66b0b0cb9ce00567e624aaa334b6e3719b44efdcdba1745982da228509",
+    "llvm-tools-1.36.0-x86_64-pc-windows-msvc.tar.gz": "cf72242bcf873227c026505f56f3ffdaa2febde828d67ad7fc04c4a2e72d7587",
+    "llvm-tools-1.36.0-x86_64-pc-windows-msvc.tar.xz": "244c7a0b1b5bfc211317748991cae1d93721597056500317e4013fcc5f875c7e",
+    "llvm-tools-1.36.0-x86_64-unknown-freebsd.tar.gz": "37c19db740acbe462d878fe193b59653a5073b23a840c6a2e2924772c0642b56",
+    "llvm-tools-1.36.0-x86_64-unknown-freebsd.tar.xz": "1242f280615f66d1388bbda36dd15a15343cd35028a24ee1070dc97787aad9ae",
+    "llvm-tools-1.36.0-x86_64-unknown-linux-gnu.tar.gz": "beae1690418b4adffac166fbfde525be8f5e2b2ce220ffd19b420edb1efa4477",
+    "llvm-tools-1.36.0-x86_64-unknown-linux-gnu.tar.xz": "6104a8a3edec668b4771e5314fc5355267e636a73c33bdcb15b1b39ccf17732e",
+    "llvm-tools-1.36.0-x86_64-unknown-linux-musl.tar.gz": "6f2754a2305792e3160fe3d1710e8609b242fbe753b8b18867acf6f3d326dc95",
+    "llvm-tools-1.36.0-x86_64-unknown-linux-musl.tar.xz": "62868eaafbe7b095203435078dd80df9883b3298c2d16e6a7600b32e1ce2bd81",
+    "llvm-tools-1.37.0-aarch64-unknown-linux-gnu.tar.gz": "fb7cea148816422466aee656d81b08f9cb819cff8c431574f08c281b58547413",
+    "llvm-tools-1.37.0-aarch64-unknown-linux-gnu.tar.xz": "42547197197a333084d337ca672ab99175042f004ff7276a01c3d8910045b786",
+    "llvm-tools-1.37.0-x86_64-apple-darwin.tar.gz": "b882607b0f181d3942eb00a13cb375d820d000ced456a0cfd626ad79f597f8ac",
+    "llvm-tools-1.37.0-x86_64-apple-darwin.tar.xz": "09547519effffff5e394c9566ca8d4e4d16aac5c92b259ea4ecc6ff9222cddc6",
+    "llvm-tools-1.37.0-x86_64-pc-windows-msvc.tar.gz": "804a1455879b72f9439e9f2d6469f328847ccb432f69b41ccbad2ecc0e124fb2",
+    "llvm-tools-1.37.0-x86_64-pc-windows-msvc.tar.xz": "b63007bb2400a76afeb86eb998bbaa8923aaf4fadac78e350d8665f09adbde09",
+    "llvm-tools-1.37.0-x86_64-unknown-freebsd.tar.gz": "206bf31dc2851a27b697acd5ad978d2b0d1cfdf26e01b7798388030591fa7899",
+    "llvm-tools-1.37.0-x86_64-unknown-freebsd.tar.xz": "118d35a8513767ce563907a47c093c578fb1ced9ec7950f032ef4cddf8b121f0",
+    "llvm-tools-1.37.0-x86_64-unknown-linux-gnu.tar.gz": "da54ade6c7e2776edab1b6f1216477168cadf30fe40e503cca8b4bce20d89bc6",
+    "llvm-tools-1.37.0-x86_64-unknown-linux-gnu.tar.xz": "c1dab477e0fddb62276cbf33eeaa598c43f793be675b9bcbf5e66ffe1a94d0f0",
+    "llvm-tools-1.37.0-x86_64-unknown-linux-musl.tar.gz": "737f6f903340700c7953c46f3143418d90f8bc1f879cd940ce0bcc479109b7d4",
+    "llvm-tools-1.37.0-x86_64-unknown-linux-musl.tar.xz": "f9526d0f3fd4d51b8b9a31b687ae50fd7730f4c412be05d1c175df56832901c5",
+    "llvm-tools-1.38.0-aarch64-unknown-linux-gnu.tar.gz": "dbbfdc0dd802feb94e8e0f0eb0dad2c2f3e6bf69bb58d371622c94e8c7e82e25",
+    "llvm-tools-1.38.0-aarch64-unknown-linux-gnu.tar.xz": "1521b4e54a13e50dbf6df0c6dd64f7d290456d5f52dcef6da40e818daf2ec3c5",
+    "llvm-tools-1.38.0-x86_64-apple-darwin.tar.gz": "7a4f8502b93e6fc3a4d89ab94230a90c94778d17badcdde25ebb545f4e37a7c0",
+    "llvm-tools-1.38.0-x86_64-apple-darwin.tar.xz": "5c6843bb4716a16a5e5b621f95485c5713864e736404d5942d19ee095716beea",
+    "llvm-tools-1.38.0-x86_64-pc-windows-msvc.tar.gz": "da005a040ee70728c224eb23d1374420422ac64e2b4ba328ac6d7b5934389061",
+    "llvm-tools-1.38.0-x86_64-pc-windows-msvc.tar.xz": "38757118c55cc0ce2153914d86775477d78c9db18f8bc44cf153c726922016bb",
+    "llvm-tools-1.38.0-x86_64-unknown-freebsd.tar.gz": "f4da25e84e31a78b6f761b3f597c98391bd6873298c7708dc886b2c72f56f874",
+    "llvm-tools-1.38.0-x86_64-unknown-freebsd.tar.xz": "d9ab51a8f51dc37325f47410f6cae0646ef68905bb0c3c64cb69d628e90588ac",
+    "llvm-tools-1.38.0-x86_64-unknown-linux-gnu.tar.gz": "0fff5bc69ebf49fec0372aa73f9b6757b8a6bb506f14f48d153e6f14de2fd19a",
+    "llvm-tools-1.38.0-x86_64-unknown-linux-gnu.tar.xz": "c53fa8ee6322538548bc7dbd29b85daa4135f6d981cbd4274693807af643aef1",
+    "llvm-tools-1.38.0-x86_64-unknown-linux-musl.tar.gz": "5877d995125b6d17f25f23f9eaccb5775dc2bde5f3b7062fff8cad23221e80e8",
+    "llvm-tools-1.38.0-x86_64-unknown-linux-musl.tar.xz": "1d715c93929bb8bb0ad7ef04b2c6f8d404b00db54577824cb3cacb1151f35b28",
+    "llvm-tools-1.39.0-aarch64-unknown-linux-gnu.tar.gz": "9c7eae2e5770d20872f6012b273d2ca5dab09f97f497a0cc82ea5af8e2b08527",
+    "llvm-tools-1.39.0-aarch64-unknown-linux-gnu.tar.xz": "eb9cd89e3e9b927269de3e18ea1f1dfc7029bfeec5a5c12f18b420668b24f8a3",
+    "llvm-tools-1.39.0-x86_64-apple-darwin.tar.gz": "52c15480345a18d55a2141a9f440fe874a8686d3d94e4637b2c4884df7c88a43",
+    "llvm-tools-1.39.0-x86_64-apple-darwin.tar.xz": "b0f1de2062f8e7dea2996c4a7f1940b8e8d401e00e6b0b2e854c6efe15194225",
+    "llvm-tools-1.39.0-x86_64-pc-windows-msvc.tar.gz": "87b7cf10ebab53bb7fab625d603f80e35111afaeacd915df63c19ad68382f31f",
+    "llvm-tools-1.39.0-x86_64-pc-windows-msvc.tar.xz": "bc26aaa56dd7236b274ab5f345391157d56108535d3b0a9e0a60b10e965c2f3d",
+    "llvm-tools-1.39.0-x86_64-unknown-freebsd.tar.gz": "f451ffb87b00a277264c5acf5267f8df61300089a9798607b4cdfebc88fabee1",
+    "llvm-tools-1.39.0-x86_64-unknown-freebsd.tar.xz": "5f10f893813aee17a546e1527d995a791877eff699c61a40722448d2aa9e3e0b",
+    "llvm-tools-1.39.0-x86_64-unknown-linux-gnu.tar.gz": "0a87b543e3841d415887a4543587b783fce678a7097a774a56a2032cee842991",
+    "llvm-tools-1.39.0-x86_64-unknown-linux-gnu.tar.xz": "61e8e3352c5f829f43af66cb421e5efccb7889f4139efaef8c20089796776262",
+    "llvm-tools-1.39.0-x86_64-unknown-linux-musl.tar.gz": "da87e08670b7dad359f3d0b3f132d212713dcb21cf1c5e308acf257632de0075",
+    "llvm-tools-1.39.0-x86_64-unknown-linux-musl.tar.xz": "495297bfdfe53857870ed60372128e52ce6e81602843a7f58c4c6ddfe0f5a1fa",
+    "llvm-tools-1.40.0-aarch64-unknown-linux-gnu.tar.gz": "caf36148d0f5a885cad05605d80cc2c805ce8456837b6dbb34b47420a4d52475",
+    "llvm-tools-1.40.0-aarch64-unknown-linux-gnu.tar.xz": "37df56699d89b3ed43240995ee7ddc80478fc5820a8dfc5e3f69a6a4c6e9b287",
+    "llvm-tools-1.40.0-x86_64-apple-darwin.tar.gz": "d4c4abb2a7b2800500ef4e0a46493c5340bb7b0be84d38897573281e93b8577f",
+    "llvm-tools-1.40.0-x86_64-apple-darwin.tar.xz": "105f368b0e931e55c681d4945929d9ff1bb194a9c4b52501fa3add1d962571f6",
+    "llvm-tools-1.40.0-x86_64-pc-windows-msvc.tar.gz": "0fe4cfa0e4ce99e45c810b8301edcdfa694db75e291b497ce8c52ec5b89e4861",
+    "llvm-tools-1.40.0-x86_64-pc-windows-msvc.tar.xz": "a06ed2207f0f01e67f08503f780e49425a0e20fcfdd73eb95730a25100f52d35",
+    "llvm-tools-1.40.0-x86_64-unknown-freebsd.tar.gz": "aa11c881fa728fa8df233c220fecd6b25cb27cbb673569cbd9a90865ae464d9f",
+    "llvm-tools-1.40.0-x86_64-unknown-freebsd.tar.xz": "403114271e36bff76dd6d50c5daf5bbde76571f50948fa1dacdfb2f50502e27f",
+    "llvm-tools-1.40.0-x86_64-unknown-linux-gnu.tar.gz": "40c5ad2c53802b8b722ebd5a06b9f51f32644d8a6d6fdc32aacc60a33bed5839",
+    "llvm-tools-1.40.0-x86_64-unknown-linux-gnu.tar.xz": "db945532a422eab326b9d74f07e018fbb35323be35434d296e255743c9773bb2",
+    "llvm-tools-1.40.0-x86_64-unknown-linux-musl.tar.gz": "8e98e884442ade699f951bdab603a012c683de5809cae6bcb25bdc81abc3c4db",
+    "llvm-tools-1.40.0-x86_64-unknown-linux-musl.tar.xz": "db8036095418c7332b0eb21e9d1a42e838d8b1b6decfdb5f8a878cb16faa20e0",
+    "llvm-tools-1.41.0-aarch64-unknown-linux-gnu.tar.gz": "279aedca8c3c12a0608de9a51fa38a33b910600e4f980487c1706cec29270c63",
+    "llvm-tools-1.41.0-aarch64-unknown-linux-gnu.tar.xz": "d39cc5de88558b4920e4525e6133235b617f68d7c6960765fe77612291d82b5d",
+    "llvm-tools-1.41.0-x86_64-apple-darwin.tar.gz": "621676b4ae3d75662463876315a58bd188ceb4b22ff249ad033e0181fe30df74",
+    "llvm-tools-1.41.0-x86_64-apple-darwin.tar.xz": "0aff78996330d8ec944a478bf6e5ba357c4a57ba1a89649051b3e2509ed64772",
+    "llvm-tools-1.41.0-x86_64-pc-windows-msvc.tar.gz": "6d1b3a2a74497b0a4e9420d87a6fa462dc608a3b41d4dae9f164cf66c290a00d",
+    "llvm-tools-1.41.0-x86_64-pc-windows-msvc.tar.xz": "166ffa82555a57638188e872381662c6f6d7f745c2f1486f80f651725f1766ac",
+    "llvm-tools-1.41.0-x86_64-unknown-freebsd.tar.gz": "311a056371edbad2194b5714f3e8d17e7a897f27b67bdbe2d827ed437d06d050",
+    "llvm-tools-1.41.0-x86_64-unknown-freebsd.tar.xz": "ff2ed2a8bf9a653399e568f16df01f92a076fc7c98cbf07245086e0b1f8c0b86",
+    "llvm-tools-1.41.0-x86_64-unknown-linux-gnu.tar.gz": "d2cfa10a162cd9b63c5b8eb3db49560532c11823bb15f836abc5e42cca1a1170",
+    "llvm-tools-1.41.0-x86_64-unknown-linux-gnu.tar.xz": "5c9b6840754f6aadabc83f6ae8d7cdb17dbcf897d126de4b6dea547aabf85968",
+    "llvm-tools-1.41.0-x86_64-unknown-linux-musl.tar.gz": "dd176d66f6f04d2e1c0deeb11d07d5882937af6c72121cad4bc7e63bba3fa0ff",
+    "llvm-tools-1.41.0-x86_64-unknown-linux-musl.tar.xz": "3ef4b31f327fa7744451599e88b449321afb533f73758767a2fe4c1ffa244934",
+    "llvm-tools-1.42.0-aarch64-unknown-linux-gnu.tar.gz": "7601ef92b42a321fee08f6adce3ca0eb612ca8703fda1db63e30bd4952f7fcc9",
+    "llvm-tools-1.42.0-aarch64-unknown-linux-gnu.tar.xz": "f34ab844163f5d005e257ed7ca26e24cc3b38fc279906c9de5e5b24520275af3",
+    "llvm-tools-1.42.0-x86_64-apple-darwin.tar.gz": "c4c0319e8be687b104162ce3654249ed76040229a77d77016e32570fbfbd3439",
+    "llvm-tools-1.42.0-x86_64-apple-darwin.tar.xz": "ce05568efa9619f55fc8f1c329373e7e157d7965d4bd8425d7c068aa07d9c4c7",
+    "llvm-tools-1.42.0-x86_64-pc-windows-msvc.tar.gz": "721b14d159d6df877991db62a0f5fcd11d8d9cd642d8f51311a2d2c99c0f9e43",
+    "llvm-tools-1.42.0-x86_64-pc-windows-msvc.tar.xz": "c560d4e3e26b7eb92fb77dea4fea2870ded85161f65f8f9f542a56f220aa800a",
+    "llvm-tools-1.42.0-x86_64-unknown-freebsd.tar.gz": "4fc2bb1ab454b21750c78f9ce19d7138e4929a804770202319a3f457b1e5c2f9",
+    "llvm-tools-1.42.0-x86_64-unknown-freebsd.tar.xz": "8a48af8442ef53dd75a38c9a8ba3dd6a01a431af372082d2d97ed6857b3ee6cf",
+    "llvm-tools-1.42.0-x86_64-unknown-linux-gnu.tar.gz": "d306ee9009eeab2062b813123628cc440f58c71c0e1d53afe1563f4eb1a5e0e4",
+    "llvm-tools-1.42.0-x86_64-unknown-linux-gnu.tar.xz": "62318956f1e3f56ab7f9f89a5d51825dd558dc9f419b78e4c4a86c061a2f696d",
+    "llvm-tools-1.42.0-x86_64-unknown-linux-musl.tar.gz": "7fc21cc7f2a8879b052fed92fedff55df5afd528912c8405ec67640f663d716e",
+    "llvm-tools-1.42.0-x86_64-unknown-linux-musl.tar.xz": "b48cd8b26c8f74467fea9a7089be7b501c954702638d603a93393201b6fbc2d4",
+    "llvm-tools-1.43.0-aarch64-unknown-linux-gnu.tar.gz": "647dc36be8dc5130a703f6ba151bc79936503d0251481ba40bfacc5bfa251947",
+    "llvm-tools-1.43.0-aarch64-unknown-linux-gnu.tar.xz": "b50aeb2f895db3f7f660a772e30194fe22685aab5661749c10840871452523af",
+    "llvm-tools-1.43.0-x86_64-apple-darwin.tar.gz": "890bf12d80b72fc0c58966e1d229cfb24764eabe356762dcaf126afbd63fd47d",
+    "llvm-tools-1.43.0-x86_64-apple-darwin.tar.xz": "3ae3418e42dcc0944b8161608946ef72e21382d77cbe2ea73e8970ff4ef5e9ba",
+    "llvm-tools-1.43.0-x86_64-pc-windows-msvc.tar.gz": "e299dea627f89f6b14897d45f39dba3036298b2c94f35ba4dfea276996682977",
+    "llvm-tools-1.43.0-x86_64-pc-windows-msvc.tar.xz": "7c61e3b3a2581dabb0e11adc095a4c8e7ef520c6a6adf5b86f33eb4e8c7bd489",
+    "llvm-tools-1.43.0-x86_64-unknown-freebsd.tar.gz": "6a64cc4b3dd0b8218b350b4fad36197edf2da33e5ab43c4670737e4d392ba586",
+    "llvm-tools-1.43.0-x86_64-unknown-freebsd.tar.xz": "ccbcd86d47041cb5064c069b684c7354ceec3f8d0585d5d41111476c4e239185",
+    "llvm-tools-1.43.0-x86_64-unknown-linux-gnu.tar.gz": "4f62cab67e89d78d886cb03379d71f6722f8c5e5c069b3c243e334381c5948cf",
+    "llvm-tools-1.43.0-x86_64-unknown-linux-gnu.tar.xz": "f0a05f05cfd563db236880a0560557527a4413e5200d359c5face0c74add4cdc",
+    "llvm-tools-1.43.0-x86_64-unknown-linux-musl.tar.gz": "ea90e9540b5618698088171793dc571614d434571d6c81a80259a597d536a265",
+    "llvm-tools-1.43.0-x86_64-unknown-linux-musl.tar.xz": "eb816917c6894cfd50ac60a86187a48169c0eaebda017d9636d9a2091f225a45",
+    "llvm-tools-1.44.0-aarch64-unknown-linux-gnu.tar.gz": "e25ee71a187d6c8969b17788fb678c9b358034ad2a2fb7557b755534eaf9cfa6",
+    "llvm-tools-1.44.0-aarch64-unknown-linux-gnu.tar.xz": "9c32279327f4fc93324aa24c13b6df94c862786a1bc8019cb60a772e077f20d0",
+    "llvm-tools-1.44.0-x86_64-apple-darwin.tar.gz": "d684de7783ee15537f78231acacb9079f821c8c8b85b889e54c40b095ae6b0a1",
+    "llvm-tools-1.44.0-x86_64-apple-darwin.tar.xz": "364067b085cc88e36a7f0dbd68a085b509d83d4869fc047b9bdaaa0fdd0613d5",
+    "llvm-tools-1.44.0-x86_64-pc-windows-msvc.tar.gz": "ac84fcc25d5d8d20592d6491576df7a72059fe9317889692badac2fc9028bd8a",
+    "llvm-tools-1.44.0-x86_64-pc-windows-msvc.tar.xz": "7733a2adc0a5da567b12b792b8ec8be8fc342d5d9306dd52dc6a794daec29711",
+    "llvm-tools-1.44.0-x86_64-unknown-freebsd.tar.gz": "3f4a17239b9dc9e84d98922ea4725f741249ba597ac1345b09c818b54b7a0765",
+    "llvm-tools-1.44.0-x86_64-unknown-freebsd.tar.xz": "f34977a0e806f3c071068619f3ffa32892195a86d4841b5794f36f12c3bc63c6",
+    "llvm-tools-1.44.0-x86_64-unknown-linux-gnu.tar.gz": "1755b589718c652071e354c3629f41a9a90a84a3649078ed697e630ba19b3592",
+    "llvm-tools-1.44.0-x86_64-unknown-linux-gnu.tar.xz": "46355e1c136687998815ad580dc1a9c0ecbb98ce6d048bd6260aab7fe3ba23e5",
+    "llvm-tools-1.44.0-x86_64-unknown-linux-musl.tar.gz": "c3abf2adba70a8cce16e4a6962b6868238858e54c9822cec64c5f981e43489b8",
+    "llvm-tools-1.44.0-x86_64-unknown-linux-musl.tar.xz": "7c88f27f55ca6ed5a009e6a3ca010538be5e2dc4877ef9db9f20b50309568e4b",
+    "llvm-tools-1.45.0-aarch64-unknown-linux-gnu.tar.gz": "1432bf52b301e16a5a57398a7f59bcee43358913627c7caf7b1568cd8824c5c4",
+    "llvm-tools-1.45.0-aarch64-unknown-linux-gnu.tar.xz": "a92b175c89bee15126ed0cc07ca7cd701f70fd951a7014638ca2cfc9739e5b39",
+    "llvm-tools-1.45.0-x86_64-apple-darwin.tar.gz": "9c4e5488be910b8b5ded830ea4c8844090801d3f35e7d9cb1f272e3e7df90a0d",
+    "llvm-tools-1.45.0-x86_64-apple-darwin.tar.xz": "e8fc28076470b574fbdad79907200ad8eada5afd947c22fbd8a441956216555c",
+    "llvm-tools-1.45.0-x86_64-pc-windows-msvc.tar.gz": "5a2b5f49e04def6bc6bdb148412bf62ca7fd01d0e8ed61d07fe6716003425350",
+    "llvm-tools-1.45.0-x86_64-pc-windows-msvc.tar.xz": "3aee953c82e7d705988cd4b873eb187000537443b8db48a7e0953fa0486c3d42",
+    "llvm-tools-1.45.0-x86_64-unknown-freebsd.tar.gz": "dbeaa09b90aab06a8450afaa9018a859a440be48d98e9437a7d827a138d3ae7a",
+    "llvm-tools-1.45.0-x86_64-unknown-freebsd.tar.xz": "17e445fe6d87100e63f75917bd0cd7d934979cedef86ea080cd32f4515f3f644",
+    "llvm-tools-1.45.0-x86_64-unknown-linux-gnu.tar.gz": "54a2ac31ad53d3d346c571fa1d25b730b614a8214b5484c511f21f7dd0bdbd5f",
+    "llvm-tools-1.45.0-x86_64-unknown-linux-gnu.tar.xz": "e700b1a2182511f494b0b9bd723292f703340f6659d00083703dee91821c8d08",
+    "llvm-tools-1.45.0-x86_64-unknown-linux-musl.tar.gz": "5e610db342edfb61ac702b36eebb4cfa1a4d2c0b89ca400b2ca89055167e07fc",
+    "llvm-tools-1.45.0-x86_64-unknown-linux-musl.tar.xz": "7a5511e7c69ecf807c80a703fb0df6d462c577a2785b013442a0914fd998ac59",
+    "llvm-tools-1.46.0-aarch64-unknown-linux-gnu.tar.gz": "1d8107ff0682d20c37a0d42f54fa1e2e96e70f7c4694fc71a84f7b32e3793247",
+    "llvm-tools-1.46.0-aarch64-unknown-linux-gnu.tar.xz": "d8e3d3efca327fd86ebc577ccbf73ae972f5c56dcc1f824e45cca1e60c4ea210",
+    "llvm-tools-1.46.0-x86_64-apple-darwin.tar.gz": "1045f55a6e59326e0f5b46616e8c945f0cc04c4519f21aa095f87b3e35420422",
+    "llvm-tools-1.46.0-x86_64-apple-darwin.tar.xz": "9d2573ca03f5b40e49ed894ac1417c7853cc8c898ecd613f935deab9286ceef1",
+    "llvm-tools-1.46.0-x86_64-pc-windows-msvc.tar.gz": "037719e7774bae1e3084949123a8a10d4d2c89134849333a53c7dcad00fe412e",
+    "llvm-tools-1.46.0-x86_64-pc-windows-msvc.tar.xz": "900bda8310804cb98e850e9edbfe398114dc8ff862b2ef4c2816dbb38488ea8a",
+    "llvm-tools-1.46.0-x86_64-unknown-freebsd.tar.gz": "55d9194cd9ac3f26f95f4f94db899c86b140753ef57aa2996dd8be528eaf8ae0",
+    "llvm-tools-1.46.0-x86_64-unknown-freebsd.tar.xz": "04bbc35799740aa1b80f6f9c7f0a376668be348a0fd1277a09bd96f8073c61ee",
+    "llvm-tools-1.46.0-x86_64-unknown-linux-gnu.tar.gz": "2a98e7290148575cdc6230610fca3ce68d1bd7b7dd105124f8a1673859ecc9ad",
+    "llvm-tools-1.46.0-x86_64-unknown-linux-gnu.tar.xz": "5add40772b66537dfbf0cee662708b9c7366c1c506d6489a9988ca63da5ebc45",
+    "llvm-tools-1.46.0-x86_64-unknown-linux-musl.tar.gz": "431339bdd829224c0d3a3c835d65de95e52f042c1e0c3a286718055af4b2b977",
+    "llvm-tools-1.46.0-x86_64-unknown-linux-musl.tar.xz": "4090f9dc1b833831bf64f46e4e17ba8982e1b0d64d4ba49579871c4f52fc3c2b",
+    "llvm-tools-1.47.0-aarch64-unknown-linux-gnu.tar.gz": "6f9cc27ea4d33ef81be176392d169a2ca2ba6d3e6e8c037917133823cc4979c1",
+    "llvm-tools-1.47.0-aarch64-unknown-linux-gnu.tar.xz": "9608f4946e573973f49f6a3204917699e5ff758621cae877be253e3fec87a68e",
+    "llvm-tools-1.47.0-x86_64-apple-darwin.tar.gz": "75a8381f7f521ad8afc8480e2bda27d3d3730b9ee154022deb26db3ca6216505",
+    "llvm-tools-1.47.0-x86_64-apple-darwin.tar.xz": "f06164e4dcca255d4f96780d7ece2553cb65a03a1d3bc88c924553378023957e",
+    "llvm-tools-1.47.0-x86_64-pc-windows-msvc.tar.gz": "e9a5d9db6f899904f094cc745a1b5cc47f7d7bbcb708217ad68933316e814880",
+    "llvm-tools-1.47.0-x86_64-pc-windows-msvc.tar.xz": "d4108d5edb30b634952e31fa1d661f1f3fb628d3980af7a764cf088f63157b70",
+    "llvm-tools-1.47.0-x86_64-unknown-freebsd.tar.gz": "47592da88536cf5c44085907c7e5d57bf695d5ac8add76d2c7d1c0518e6e05e6",
+    "llvm-tools-1.47.0-x86_64-unknown-freebsd.tar.xz": "46d347658d77c5ff01a145b1af8ccdeb745df4942ed90478bf5390991b5dfadc",
+    "llvm-tools-1.47.0-x86_64-unknown-linux-gnu.tar.gz": "a52c3cd18a6895c91a49d0a00f2cb4b12d64dd5b1ef6607fade1fed88fc36dac",
+    "llvm-tools-1.47.0-x86_64-unknown-linux-gnu.tar.xz": "0383f00d485323ea3a70d765f2c7ed9872938495cf4379e5d12f0af6c4953ec8",
+    "llvm-tools-1.47.0-x86_64-unknown-linux-musl.tar.gz": "08ec337e44c1d83438d84e79dfacf6f123a8ed1af90c8130da784ded74966187",
+    "llvm-tools-1.47.0-x86_64-unknown-linux-musl.tar.xz": "a37285e83f29a6b4ad59d8a839e8b2906639530fb8e336ffc76c8d71088226d6",
+    "llvm-tools-1.48.0-aarch64-unknown-linux-gnu.tar.gz": "133e6b94d3c34d91ea9689c9288c66acf169d59877c0c924fc99b1fee283f4f4",
+    "llvm-tools-1.48.0-aarch64-unknown-linux-gnu.tar.xz": "01263dff426dcec2cc76c589fc36b4976a7f5ad422e95303093b518a6cea78b7",
+    "llvm-tools-1.48.0-aarch64-unknown-linux-musl.tar.gz": "5a643eb72e06c4baa68ab38481b0e24ad40468e07dced9dfade04f469cce3b26",
+    "llvm-tools-1.48.0-aarch64-unknown-linux-musl.tar.xz": "92c90139457682b6960e0fb81e924f10656bf60fbfa1d4806cc2021afe8ac2f1",
+    "llvm-tools-1.48.0-x86_64-apple-darwin.tar.gz": "de0715d6cb0456da647750605ea1a3e3832278a4fa500d9c13bd148e7b278afe",
+    "llvm-tools-1.48.0-x86_64-apple-darwin.tar.xz": "f1f9b782c2503e30b02741f5fbe3d18bd727834379da54a239d54e3dc24c3cf3",
+    "llvm-tools-1.48.0-x86_64-pc-windows-msvc.tar.gz": "a0506c1619708e2bdf6bc198db5d130965613ec0609a9fe75556ce5effdf4f78",
+    "llvm-tools-1.48.0-x86_64-pc-windows-msvc.tar.xz": "6207c5b461779287e0849f1f459ceab800e9c31ce81f3f126f723f8deb7cb46f",
+    "llvm-tools-1.48.0-x86_64-unknown-freebsd.tar.gz": "61a56f1436c7e4bfe68be160abb61989a8b4b4fef5e939764d488587484d6da3",
+    "llvm-tools-1.48.0-x86_64-unknown-freebsd.tar.xz": "66a40243c99fad04a87ee3e7cb9b1fba14f677dd54ac88f80043d32877088084",
+    "llvm-tools-1.48.0-x86_64-unknown-linux-gnu.tar.gz": "a4932dafdc84a2c2f4f67a9aa207ce306c36a4ed8e682e6d79764d438ebd00b8",
+    "llvm-tools-1.48.0-x86_64-unknown-linux-gnu.tar.xz": "e305612c3ce0be1f1e9dd788d15455f107193841b844d67fec2b2d6e2ad228d0",
+    "llvm-tools-1.48.0-x86_64-unknown-linux-musl.tar.gz": "904e1a0009819b626bd643cfe7f82d8de7e277e69aa0791de26fb3754d897046",
+    "llvm-tools-1.48.0-x86_64-unknown-linux-musl.tar.xz": "88cc37be0d922b8051d0f57f389b992f0558e7ebd875184fc1810988f285beed",
+    "llvm-tools-1.49.0-aarch64-apple-darwin.tar.gz": "78f666e9608c6b38f704447ef270170154c55dcda033e4fab00c42bebc3319a5",
+    "llvm-tools-1.49.0-aarch64-apple-darwin.tar.xz": "af20c411654ab87271a2fa9d84c62a3c4c3495a61fd8902d23fabc09666d91ef",
+    "llvm-tools-1.49.0-aarch64-unknown-linux-gnu.tar.gz": "50228dd0c1ea9f483cac055fd1ff82f202427ef970266e904be01133c40f0c91",
+    "llvm-tools-1.49.0-aarch64-unknown-linux-gnu.tar.xz": "cc01a4d2f6cf54284f010669594020f33f979ca705df599434174eed84c23185",
+    "llvm-tools-1.49.0-aarch64-unknown-linux-musl.tar.gz": "0992328492832f96f4ee35661d8706e8e5f630bb92de117398f0b27556bc98cd",
+    "llvm-tools-1.49.0-aarch64-unknown-linux-musl.tar.xz": "5a8ebd7311db21634d3d37292b460d67c13f08233471c49f90e74857c1b55c9a",
+    "llvm-tools-1.49.0-x86_64-apple-darwin.tar.gz": "39c294fb87e6dc8c29975469a0566d4f8a47e50c1defe9f3dabbf1d598772bea",
+    "llvm-tools-1.49.0-x86_64-apple-darwin.tar.xz": "0b3df21d49629d14a723ac311669593edff80f881b534fb8c6d255eb839dd8d6",
+    "llvm-tools-1.49.0-x86_64-pc-windows-msvc.tar.gz": "3e57ff66c2a0091e3373e479fec699d3012e9249b7e0da36500fa0071308114f",
+    "llvm-tools-1.49.0-x86_64-pc-windows-msvc.tar.xz": "d1eb72d19b178cfe376844e9c87f66ea485b5659fa692ac692c87b0c79c44513",
+    "llvm-tools-1.49.0-x86_64-unknown-freebsd.tar.gz": "c2b3c06bf4b2f6010f9927391c8e72f96642a528c486ec98f66c16066298e015",
+    "llvm-tools-1.49.0-x86_64-unknown-freebsd.tar.xz": "1af3854baf75fad64d6ccb02c816f69f8e8473e1e8dbd2e51c1f0ca394b1790f",
+    "llvm-tools-1.49.0-x86_64-unknown-linux-gnu.tar.gz": "aecf6c322dc4064dcedf2315d443a69e099fc52e617711306fa1269cb180aa68",
+    "llvm-tools-1.49.0-x86_64-unknown-linux-gnu.tar.xz": "4414c9212eabf60f3b177b82e5f2849cf08289313fb4b8ca81da3213c2b5837d",
+    "llvm-tools-1.49.0-x86_64-unknown-linux-musl.tar.gz": "c53b602056f48c38624942c1f6b6cc1a5a542cb56249a3a90c67355da531bd40",
+    "llvm-tools-1.49.0-x86_64-unknown-linux-musl.tar.xz": "5ca195b382b1feba7efab207996dfe58bff7730b3ad2a6b70e2670e2a301cbab",
+    "llvm-tools-1.50.0-aarch64-apple-darwin.tar.gz": "4a03b09dc15644fd5a10ac8aa1dc3ec32bc832f0c27bce4fa6128f18ac22a90d",
+    "llvm-tools-1.50.0-aarch64-apple-darwin.tar.xz": "a3ab52c3e53db359148b9310c83ed8c8a0e615dc2189493dd765f5f95ead5c09",
+    "llvm-tools-1.50.0-aarch64-unknown-linux-gnu.tar.gz": "25256ce02516667890abf82fa4d49a86f16dcea448d63c9a03782c0a3bbe05c1",
+    "llvm-tools-1.50.0-aarch64-unknown-linux-gnu.tar.xz": "5c06f277f4b1a67dcac93fb59a6ebcfe3da5a8871f625bed71923f715e4f22b9",
+    "llvm-tools-1.50.0-aarch64-unknown-linux-musl.tar.gz": "cfe980fe89486c78a5c88701e8ce6a9c7914030c703d2b3ee841b84c1ccdf31d",
+    "llvm-tools-1.50.0-aarch64-unknown-linux-musl.tar.xz": "33513f143348854fc0cfa611e720a1b4374c7066b2e4f900fd46ff42f27ba2b4",
+    "llvm-tools-1.50.0-x86_64-apple-darwin.tar.gz": "d8b018570e8ff163c4ab37a36ce16128b39c2ea55efd1be3caf14bdd85d03394",
+    "llvm-tools-1.50.0-x86_64-apple-darwin.tar.xz": "4a261c8732b518fa736f85e2ac76909ef0525ec92204eeba2303a92dad09d58d",
+    "llvm-tools-1.50.0-x86_64-pc-windows-msvc.tar.gz": "728f7a656f27eb6361847d245d23b56b7109c7ef5f47117044e83aaf49fcc536",
+    "llvm-tools-1.50.0-x86_64-pc-windows-msvc.tar.xz": "c31172e78ddd66da5fb4414f927664fe1d573352de7bc814d5c2b4103ed01377",
+    "llvm-tools-1.50.0-x86_64-unknown-freebsd.tar.gz": "4300261729751c6a7353cc4a4bb3d6c448fcc24e90a82e3d626af037fb6aae4c",
+    "llvm-tools-1.50.0-x86_64-unknown-freebsd.tar.xz": "c47b6fb63c931b314e7d5a64c80d79497f461d50450a6e45cc8396d40940736d",
+    "llvm-tools-1.50.0-x86_64-unknown-linux-gnu.tar.gz": "86871fb83afba38ba818286c20bc863798b64a7a403ecb0454535bf1a09df482",
+    "llvm-tools-1.50.0-x86_64-unknown-linux-gnu.tar.xz": "ca2b5da9035a6d97bd07d4c4151a244a06ff8e6690ebd347e80c78d738ae2ace",
+    "llvm-tools-1.50.0-x86_64-unknown-linux-musl.tar.gz": "98f2266ffbcf1d94e2d6961341ef6488ef3f49a81ae4c857c4b817cc9528535b",
+    "llvm-tools-1.50.0-x86_64-unknown-linux-musl.tar.xz": "da81298857716ee3a5c4e1451d829fd0096f42d969dce1df4c69fee981737f83",
+    "llvm-tools-1.51.0-aarch64-apple-darwin.tar.gz": "1a12dd5bd2c354a89737640ac105600f59fc038809ad4611b29eb0d225bd783d",
+    "llvm-tools-1.51.0-aarch64-apple-darwin.tar.xz": "5b84cd7e31d9fd8fb85bf3299d26b73dbe6e7d542c167ba7cd4ede634a611800",
+    "llvm-tools-1.51.0-aarch64-unknown-linux-gnu.tar.gz": "5295ca2bbaa8d37942ed95f801107900d40f326f543edf4c80a1c2adf48fb077",
+    "llvm-tools-1.51.0-aarch64-unknown-linux-gnu.tar.xz": "a5ccc1469304e3a3dd0a9c28fd8975d9a6fcc99dfa73b78a18a40a6784c5bc12",
+    "llvm-tools-1.51.0-aarch64-unknown-linux-musl.tar.gz": "2dfbe582660bac4a674186a475a5a3d118aa2369dc70eb9d8e93cd13a66cb50f",
+    "llvm-tools-1.51.0-aarch64-unknown-linux-musl.tar.xz": "2fb85d5eb2706a037b6510d2bf7adfcee1bdc6f3881e34ee75e80f9ec4be5204",
+    "llvm-tools-1.51.0-x86_64-apple-darwin.tar.gz": "1c52b39cae8fb17e64c311eb9ab66e475b6ae8190b35c6513344271b7e172d3e",
+    "llvm-tools-1.51.0-x86_64-apple-darwin.tar.xz": "56cace9df88661b74ff30cfdb692190f4c1f3610ad59aa980569114bce93563f",
+    "llvm-tools-1.51.0-x86_64-pc-windows-msvc.tar.gz": "cb2dd2a21deb3228ce3e7e2495b95d34b5c985eae39126170d823ff1b585a240",
+    "llvm-tools-1.51.0-x86_64-pc-windows-msvc.tar.xz": "4a35ef127c26a698a46b1bfd6c4fc7e57eb99d14735a34b315af539ab22cfd2a",
+    "llvm-tools-1.51.0-x86_64-unknown-freebsd.tar.gz": "a2f698841b8f860bf5a841f5f53dea8fd9df53c19c3b6d15cbe43a327696ffea",
+    "llvm-tools-1.51.0-x86_64-unknown-freebsd.tar.xz": "4920c4de108f39aadeac3ce71ff4a59c328458a8bdb02102b6193312e4e10761",
+    "llvm-tools-1.51.0-x86_64-unknown-linux-gnu.tar.gz": "398a587c088ac159322bf47d1736409ab88d3a45eb9e09bfb7bacbbf20627e49",
+    "llvm-tools-1.51.0-x86_64-unknown-linux-gnu.tar.xz": "fa327cccd923b20ee374db5747c019d16df14a76d5e927dac38c2f2aabee2d68",
+    "llvm-tools-1.51.0-x86_64-unknown-linux-musl.tar.gz": "0b7a9e46dd64fdef3ce22bd5a69d4599a17c120ae645fadadd7371b03f2dacd8",
+    "llvm-tools-1.51.0-x86_64-unknown-linux-musl.tar.xz": "8623de70a64268eee2da2fccdf7204c77110c2f57b141ef3d3c0778492de23f8",
+    "llvm-tools-1.52.0-aarch64-apple-darwin.tar.gz": "f3b3a9dbef7a00fe26a38d143585d3ca79b85c6dc6326c31ea3de178715d2456",
+    "llvm-tools-1.52.0-aarch64-apple-darwin.tar.xz": "ab9ae847a2c8aba3c79b3eb3a54768d98636c1c8f71772e04c78c3a31ecf771b",
+    "llvm-tools-1.52.0-aarch64-unknown-linux-gnu.tar.gz": "9550b39d38ffdb32231fbc3893a362dc325448aa05b4197845d7fb799ec556e6",
+    "llvm-tools-1.52.0-aarch64-unknown-linux-gnu.tar.xz": "419d854376f42c0a012592eda1b58b541da20293508c1f0c2c67fce796211cbe",
+    "llvm-tools-1.52.0-aarch64-unknown-linux-musl.tar.gz": "7dd8f795ec2d9f2eeb67e98e08341ab46416bf8f307a8395d6c7d289f4f6a641",
+    "llvm-tools-1.52.0-aarch64-unknown-linux-musl.tar.xz": "41ef1be907d17b920c607b500596e16b8f437671881390dae63481ab9fc634c6",
+    "llvm-tools-1.52.0-x86_64-apple-darwin.tar.gz": "0160eca2c73cd54b47c226c6f0f6ae4841300bbf8384426bbfb03a814b30cf84",
+    "llvm-tools-1.52.0-x86_64-apple-darwin.tar.xz": "2c026e25d66c3b922f00766ac877eb1145ce336e5b5ffeccb82db4d313826e25",
+    "llvm-tools-1.52.0-x86_64-pc-windows-msvc.tar.gz": "baf0810ece6694ed431010a24d9c81386f150567b48f79fac952e411927d3058",
+    "llvm-tools-1.52.0-x86_64-pc-windows-msvc.tar.xz": "ee712b43285f295170d08c80dd2cb75ba89af177f6d939002cf34fc9d4960757",
+    "llvm-tools-1.52.0-x86_64-unknown-freebsd.tar.gz": "cdb385cc036a9f354639050384584e64e6464a8ccfd422db17b3a2df82b88eb8",
+    "llvm-tools-1.52.0-x86_64-unknown-freebsd.tar.xz": "e62b684e38e0ff7517de04530028a553841025d1b7c10aebee80b0ea0c0b9389",
+    "llvm-tools-1.52.0-x86_64-unknown-linux-gnu.tar.gz": "bd5056c50b92e48787d164d4d93db332c3f02e2913b3d86edabddfa248c3aeba",
+    "llvm-tools-1.52.0-x86_64-unknown-linux-gnu.tar.xz": "9522324726098cf4da8e979d7038258332d797b02ce761a6ad3b7b717569a02f",
+    "llvm-tools-1.52.0-x86_64-unknown-linux-musl.tar.gz": "2f5905d5b3198311d2b335ad59d6e14bde9e5eae201df5d723b8b07de37740eb",
+    "llvm-tools-1.52.0-x86_64-unknown-linux-musl.tar.xz": "9899c3a5b303cf006c849a5728c243e90041b3d6fd153027e1884bd5fa965a64",
+    "llvm-tools-1.52.1-aarch64-apple-darwin.tar.gz": "749d77f5877395081ccbdde25183a4934fa9f771191f1994ef67ab6b845b380f",
+    "llvm-tools-1.52.1-aarch64-apple-darwin.tar.xz": "4d911b52bce6d3ef78bf22522a9ff0dadf2f7e04c5e06be2ac66b05427b45712",
+    "llvm-tools-1.52.1-aarch64-unknown-linux-gnu.tar.gz": "94fad9186731f9428ec8a73165294810d63583a04798377298d1569ddf373503",
+    "llvm-tools-1.52.1-aarch64-unknown-linux-gnu.tar.xz": "3fe21c44b641a862cdc1653bae387243d7207bfbc9a125896c5b90bee67db64d",
+    "llvm-tools-1.52.1-aarch64-unknown-linux-musl.tar.gz": "afd4fd18b981bda0a351bf5fff8f6cf76be877aa8840e5e5b159aaffa6979f69",
+    "llvm-tools-1.52.1-aarch64-unknown-linux-musl.tar.xz": "9956718036d67d8612588ef012766fb076976f548f85ae09f26132000a1e128b",
+    "llvm-tools-1.52.1-x86_64-apple-darwin.tar.gz": "ef5e0713fee477262bff9a8cb2212bd775050ea768a5ba50ceb33e13b58ede17",
+    "llvm-tools-1.52.1-x86_64-apple-darwin.tar.xz": "8d1094f48807d87f5abcf1aa8966c421f153ef732527c9ba67229dda9eac68a3",
+    "llvm-tools-1.52.1-x86_64-pc-windows-msvc.tar.gz": "6823c114ae05ebf515401e44d1ca6fb8d108cbaa495ace60c5fdbd7e81f2b32f",
+    "llvm-tools-1.52.1-x86_64-pc-windows-msvc.tar.xz": "6391c502fa05b9d8dc5137229d3b8e82345017d523099b76f1b45f40167257d6",
+    "llvm-tools-1.52.1-x86_64-unknown-freebsd.tar.gz": "470789210cd51acab85662ea5d80f3275d0766f98f59399b6aa3741bde86e773",
+    "llvm-tools-1.52.1-x86_64-unknown-freebsd.tar.xz": "573a9091c5a8c2de3fb2ca0183de934863c50dea3ac85d6bed1491bd02fedfd0",
+    "llvm-tools-1.52.1-x86_64-unknown-linux-gnu.tar.gz": "db70724d4010273644c4e0ef4739299940b47e307f3dbee094050703147b60f8",
+    "llvm-tools-1.52.1-x86_64-unknown-linux-gnu.tar.xz": "fa05fe718989797e0a8e8c84314fe64d0b0246d2d6df460c99d01113202ef319",
+    "llvm-tools-1.52.1-x86_64-unknown-linux-musl.tar.gz": "ad0755ed04d3e17d11e99aab793a5752e6ef0943a92822874277a13f5b91373f",
+    "llvm-tools-1.52.1-x86_64-unknown-linux-musl.tar.xz": "ae1fcb202b5e9ab79d6b19d8852cc64190cd6bb25f2233f47037cdbc25f40253",
+    "llvm-tools-1.53.0-aarch64-apple-darwin.tar.gz": "cd700c4ae2c6fe2a568f477a9db7d7c9cd1079456cd777aa04954fbb3bc64e37",
+    "llvm-tools-1.53.0-aarch64-apple-darwin.tar.xz": "4667b4cb1be3b5a0ec9fcc090b04b8795011cba3bad9804500754f86ceaceeeb",
+    "llvm-tools-1.53.0-aarch64-unknown-linux-gnu.tar.gz": "916307648b13cd403e5d89e26dc0057a3d6517033b04199b905af7b216ff191b",
+    "llvm-tools-1.53.0-aarch64-unknown-linux-gnu.tar.xz": "40fe74b0bb699ba8531f66ab8ac00b0fd2b8d3bd7628eb45ff8bce462d7d7f33",
+    "llvm-tools-1.53.0-aarch64-unknown-linux-musl.tar.gz": "f19e5396e69a12c854294c61c2ba647e8d06a67750b4bc741c1ec8b44e27ad76",
+    "llvm-tools-1.53.0-aarch64-unknown-linux-musl.tar.xz": "65afdfd224b72f1a07fe1005d1d57418ed8aeb6314d036460ae33092fd7746be",
+    "llvm-tools-1.53.0-x86_64-apple-darwin.tar.gz": "5a693b933e6755fc42983912c0a9197107b61c5ded051526aa0eed60cbb038cf",
+    "llvm-tools-1.53.0-x86_64-apple-darwin.tar.xz": "7dfef3b6181d7401d6143e4b7406f2f95d0d499858897beab95360cc2072aa68",
+    "llvm-tools-1.53.0-x86_64-pc-windows-msvc.tar.gz": "8d2800c3460935386c0ea368460d0b4cadb152403d3125b9616a1b4fa856cfc4",
+    "llvm-tools-1.53.0-x86_64-pc-windows-msvc.tar.xz": "e3bf420bc96be8bec9e317403f6fe169a98106670247b6c02c4c93a8e61cb5e6",
+    "llvm-tools-1.53.0-x86_64-unknown-freebsd.tar.gz": "221f677502c4d648e5578cf75224fb017dc4df486bbb15408100f6dc63fb72e9",
+    "llvm-tools-1.53.0-x86_64-unknown-freebsd.tar.xz": "1bed894ae1b131da5008932298db3447a025c1d4b57b372f08f01601cd92ed8b",
+    "llvm-tools-1.53.0-x86_64-unknown-linux-gnu.tar.gz": "4aa6e3c9ef91efc082a6741013fc7886dc669b1532c0c3b23f922e4307200800",
+    "llvm-tools-1.53.0-x86_64-unknown-linux-gnu.tar.xz": "98e6bc6dbac57acfb23063c99c65f2faf8756200d4104fb0fdf0603eebd13013",
+    "llvm-tools-1.53.0-x86_64-unknown-linux-musl.tar.gz": "b5054bcd14e5a5361f29fe5efa970ab8340c75feebc3c6b7719ee4cf1cf1027a",
+    "llvm-tools-1.53.0-x86_64-unknown-linux-musl.tar.xz": "995b287d5ebe77e961a1636cfa514847b5ee874ba3d1b2ebb62dd85e6b6507db",
+    "llvm-tools-1.54.0-aarch64-apple-darwin.tar.gz": "61bb98566e77f998f59c2399c5db3b488cd88e4a7bcce74061bbbb6de5c85c62",
+    "llvm-tools-1.54.0-aarch64-apple-darwin.tar.xz": "9a0dc88d3dc01a6ebeeae28da868338d2e815275e68bdb0525e103332eb1a228",
+    "llvm-tools-1.54.0-aarch64-unknown-linux-gnu.tar.gz": "95dd016daee815e6511ed09becba913e5aa1fc6b9ef42bc27d1a509f660dec99",
+    "llvm-tools-1.54.0-aarch64-unknown-linux-gnu.tar.xz": "ef22bf11d60529db53872179177f390070a58ec2a35dc1b75653113f1b507094",
+    "llvm-tools-1.54.0-aarch64-unknown-linux-musl.tar.gz": "8cac2dd2d1ef582c77b37b6810122426369028351a66a355c38ff72efb8f6ec4",
+    "llvm-tools-1.54.0-aarch64-unknown-linux-musl.tar.xz": "1759587415fd92f768a090288cac950d2959d13597ba39df5f5bc0598c89d804",
+    "llvm-tools-1.54.0-x86_64-apple-darwin.tar.gz": "a287d049bf7beb3a3cddf62974e0450d21bb09da72ab453222dffc3f5ef72fef",
+    "llvm-tools-1.54.0-x86_64-apple-darwin.tar.xz": "b833a10786bf6e74b25ff0c745187ea38565b3466c357c5fb2f5dab820683acf",
+    "llvm-tools-1.54.0-x86_64-pc-windows-msvc.tar.gz": "e1437993d0088f93871e2563c570fb62aec6109087227df7da8779ef226abbc3",
+    "llvm-tools-1.54.0-x86_64-pc-windows-msvc.tar.xz": "a2e8a9c6d4c637f1efa0b6401025a491bbd0b7c964201f4c3a63d560da2940d7",
+    "llvm-tools-1.54.0-x86_64-unknown-freebsd.tar.gz": "024fcaabada32629381b5d1ec856d595eacf5cf506c43619d2ab454aeac7da4c",
+    "llvm-tools-1.54.0-x86_64-unknown-freebsd.tar.xz": "6a0ab83983ab7a48be27953b84f0a194a81224f2aace6780a84c9a50b9bdc8a8",
+    "llvm-tools-1.54.0-x86_64-unknown-linux-gnu.tar.gz": "aa4000bccc5e463c9cc3aecb6b400813a0f122b5f14a747710f23b838b4fbcc8",
+    "llvm-tools-1.54.0-x86_64-unknown-linux-gnu.tar.xz": "0553aa7ef7d14f4b1d6c8849e81318532ceb4542e7b2a0ecd39cf2df76dd5251",
+    "llvm-tools-1.54.0-x86_64-unknown-linux-musl.tar.gz": "b0e2a74c6e1fb0c9fa888887996cb168c0d119ee4596736a4785b1200b79021b",
+    "llvm-tools-1.54.0-x86_64-unknown-linux-musl.tar.xz": "fa8e143d4740e7f5fb53271d0dc22ab65eac1592afa62f6446932b420b2755df",
+    "llvm-tools-1.55.0-aarch64-apple-darwin.tar.gz": "00a0a90cd743480a192d3f1c905d57b98986d75c88fc738effcbc50c43b0ab85",
+    "llvm-tools-1.55.0-aarch64-apple-darwin.tar.xz": "9169cd5f7a1d6444c325993390afd31ecd6059cfe0cd5319afc7716fc97171b5",
+    "llvm-tools-1.55.0-aarch64-unknown-linux-gnu.tar.gz": "259a183333a4f19eded8a2b6fa4382b7f36a9a23605d0f0a7b59a28d794c77d1",
+    "llvm-tools-1.55.0-aarch64-unknown-linux-gnu.tar.xz": "a82c2ad41aa602e15bc27dc47d14ef17969fe883fc7a4822e3420dcf16971e69",
+    "llvm-tools-1.55.0-aarch64-unknown-linux-musl.tar.gz": "a6a6756bb3091d15b772e57189c4279d17e218193b7d795b307effb88d269ef5",
+    "llvm-tools-1.55.0-aarch64-unknown-linux-musl.tar.xz": "35bc3f9d0897ae90c949a9f131ee146ae759dce700fa734a2b38820c7f1ae95a",
+    "llvm-tools-1.55.0-x86_64-apple-darwin.tar.gz": "fce7354b071f2da56a100f89846e0c5bb3848f2e85e8583102f1d8b409214a95",
+    "llvm-tools-1.55.0-x86_64-apple-darwin.tar.xz": "36c34f4141a024cfd74c615fffaf225af064a02d6e41ca70ffb9b2ab226f1d3a",
+    "llvm-tools-1.55.0-x86_64-pc-windows-msvc.tar.gz": "03307e359512652648b296cecf1e446befbeaf4a3a73db5cec1e6dfbc03f6376",
+    "llvm-tools-1.55.0-x86_64-pc-windows-msvc.tar.xz": "499cf530c626b58fc123226951a55270606e4255052c5695acd628268b098dfa",
+    "llvm-tools-1.55.0-x86_64-unknown-freebsd.tar.gz": "f186caf30fadf738275f4daf077815445b4c3496cc7d3e85fbf53b5f8f57eb21",
+    "llvm-tools-1.55.0-x86_64-unknown-freebsd.tar.xz": "0bdd48bccfa2508ec0be2c704eb28a9c940562f2b8c166b5d78ec234feaa9e45",
+    "llvm-tools-1.55.0-x86_64-unknown-linux-gnu.tar.gz": "ebad576075c4dd039444ca7335ff244d6c0c566a7ee1532ac80d36a2de1217a5",
+    "llvm-tools-1.55.0-x86_64-unknown-linux-gnu.tar.xz": "91b23de8e4fec5f4a00dff089a370de4a3115e4e627758d9b5d0b5cdd8af5c6d",
+    "llvm-tools-1.55.0-x86_64-unknown-linux-musl.tar.gz": "28de296a08d173bf5bad236935ccc547c8eb741fb91900cb10499e80e2472ec5",
+    "llvm-tools-1.55.0-x86_64-unknown-linux-musl.tar.xz": "e444cd7dc835b949692e69557a7a87adc052d689800ec0fe41215d5ae1f3b519",
+    "llvm-tools-1.56.0-aarch64-apple-darwin.tar.gz": "4ad514255a87b0aba52bf995cb999bc7b34d42419b675fd757664d6682a45210",
+    "llvm-tools-1.56.0-aarch64-apple-darwin.tar.xz": "8dbf7f9aa4092283b52671a3c9bc5f0011e567964b3a660388c0f328ce050621",
+    "llvm-tools-1.56.0-aarch64-unknown-linux-gnu.tar.gz": "9518804888281bd1b0c8d8467d7c3e312342649ce3660248728a8d4faa193564",
+    "llvm-tools-1.56.0-aarch64-unknown-linux-gnu.tar.xz": "8f1e135ed9d22f58466ff45b15d13c6c1ec7ba3df5b749a5ef3282534fadf300",
+    "llvm-tools-1.56.0-aarch64-unknown-linux-musl.tar.gz": "095acf10efb3a4561758da9f9374488ab73c88a2f78b6d1ee97147ac8f039fe9",
+    "llvm-tools-1.56.0-aarch64-unknown-linux-musl.tar.xz": "2a79b8262c8634832cd236bf92e87d870f7fe3e50da1dcddad3d516693d945e6",
+    "llvm-tools-1.56.0-x86_64-apple-darwin.tar.gz": "e40341be6619513f50bf89d445e3b30696853f3553bbe98fa9aa3527cd7c49cd",
+    "llvm-tools-1.56.0-x86_64-apple-darwin.tar.xz": "df1ec196dfb2bff4c238b68f7267731fb3068ce1b0b5dc2ea537a4919cc19415",
+    "llvm-tools-1.56.0-x86_64-pc-windows-msvc.tar.gz": "838bf630fdaa404f9899a92e58c1b5646f4f4b6d54729e4f1c3aade5585a74f7",
+    "llvm-tools-1.56.0-x86_64-pc-windows-msvc.tar.xz": "38acd0c54d580eedc44de7b4c03d112c6257c830f52c593e5dbe23fcf9e544cb",
+    "llvm-tools-1.56.0-x86_64-unknown-freebsd.tar.gz": "05225a9aeb481757b470ee604a129bfc7707d85dc487fffcc2585f4124e012d9",
+    "llvm-tools-1.56.0-x86_64-unknown-freebsd.tar.xz": "77209f17dd310b1321e62562ba03460ef33508b0f6ce061524f3865ee57c391b",
+    "llvm-tools-1.56.0-x86_64-unknown-linux-gnu.tar.gz": "ac54b5c1bae0955945cd779291bc443b3e6d52f217ce1078a3505bae1c0e2ff2",
+    "llvm-tools-1.56.0-x86_64-unknown-linux-gnu.tar.xz": "884836bdcc7e436d4820e87d87f188763828f06b8d27edf7eec1ab9ff5592509",
+    "llvm-tools-1.56.0-x86_64-unknown-linux-musl.tar.gz": "9512db06f3090028b0ba26aeea21c3a80e6676177c92cfa1e60d13acd6871f0e",
+    "llvm-tools-1.56.0-x86_64-unknown-linux-musl.tar.xz": "d97a6ad1028ba750cc81c3cbad969fe7e19c6255c0c12413cce05824e0c981f3",
+    "llvm-tools-1.56.1-aarch64-apple-darwin.tar.gz": "8feb4429f37d2c59a97a657052a8518492ea3e0c43b37af1e44407bb04d5fd8c",
+    "llvm-tools-1.56.1-aarch64-apple-darwin.tar.xz": "00ae070257a1cb7eb8e42c24b2ca3b8c9b0b5360ebc0d906360363e53e821a3f",
+    "llvm-tools-1.56.1-aarch64-unknown-linux-gnu.tar.gz": "3c831ad4ee247ae29a5acecba1609d70b02777ba8181d40a945d2efedebc8126",
+    "llvm-tools-1.56.1-aarch64-unknown-linux-gnu.tar.xz": "27a13ab2545078ece271231310fce351a655cabd28f482f31f1b6a730fec118c",
+    "llvm-tools-1.56.1-aarch64-unknown-linux-musl.tar.gz": "bf62fb69c222c41c83cb5e647dbce207519724c92de8e05015e7fe62396ad33e",
+    "llvm-tools-1.56.1-aarch64-unknown-linux-musl.tar.xz": "ebb13e524a7b3fb25e74084eb8244c77df213937a80bdb1f75255440cab39c5b",
+    "llvm-tools-1.56.1-x86_64-apple-darwin.tar.gz": "75dc2fb8105e33e3f86753eb2f97615f62bc3433591c31f63fa7c4c12b643321",
+    "llvm-tools-1.56.1-x86_64-apple-darwin.tar.xz": "b32e5fd39841182e02ad7ab3c5ecee3f0456a8d913b631c6925d47de2d02d839",
+    "llvm-tools-1.56.1-x86_64-pc-windows-msvc.tar.gz": "34ff6e95ce6397b954691f5ae59068bf33f8ecf71fe8aa8b1ac2db6eaff81720",
+    "llvm-tools-1.56.1-x86_64-pc-windows-msvc.tar.xz": "399578b46d7aaf37fff53ae368c1b525f2f0be28b8f1a17c25f825414ea15f4b",
+    "llvm-tools-1.56.1-x86_64-unknown-freebsd.tar.gz": "b8d281cdae768bdd87409e69c916612e1fed29334d861fd07b0d44dd8b6d086d",
+    "llvm-tools-1.56.1-x86_64-unknown-freebsd.tar.xz": "0d3b2e63c45858f1a6514e87119294e6789a59f959888e3e1af5578323b6be3b",
+    "llvm-tools-1.56.1-x86_64-unknown-linux-gnu.tar.gz": "61e322fc405540fae66790a0317d3fe4bb500da20879ef53c14eb32e93590ee6",
+    "llvm-tools-1.56.1-x86_64-unknown-linux-gnu.tar.xz": "6cf7335fe068134c031b9ea84f4a3e912d9276074c46bc1d3af3a9479e9cff5b",
+    "llvm-tools-1.56.1-x86_64-unknown-linux-musl.tar.gz": "880e2eae8998ee390c3cd325b1806adb627c7491a252af99fc87f43380e1f11a",
+    "llvm-tools-1.56.1-x86_64-unknown-linux-musl.tar.xz": "644880b655dcdee774d12ee92fcdf0ccc4ab72cb08d6d7ece101c045533bf67b",
+    "llvm-tools-1.57.0-aarch64-apple-darwin.tar.gz": "712e59804a2dc7c0f0a91680c3ccd7463bfe75784e508b4a47b7eebff258867f",
+    "llvm-tools-1.57.0-aarch64-apple-darwin.tar.xz": "855c093b59f5767ddecbfa3850d5cd33ea3277462eca9f3319d8bf6c7fd78260",
+    "llvm-tools-1.57.0-aarch64-unknown-linux-gnu.tar.gz": "340fcbf4555cc56232225284b500679f33601689bde3122cd54af7648c9d0ce1",
+    "llvm-tools-1.57.0-aarch64-unknown-linux-gnu.tar.xz": "d68d6bdf270e5457547fdf532822e071ff3ecab047099d867db2b7e6c5d823a5",
+    "llvm-tools-1.57.0-aarch64-unknown-linux-musl.tar.gz": "5de4f546695db024c74ad8c4ffbd03f549ce6476bdad8d40bd8fce59e4c3d4ce",
+    "llvm-tools-1.57.0-aarch64-unknown-linux-musl.tar.xz": "ecc41ba620c19c892d8b05796e9f94289e33edf832ed77343aa1d9dce8a0e6a6",
+    "llvm-tools-1.57.0-x86_64-apple-darwin.tar.gz": "4ee2065bf9ca04894c6ea700f5fe13f222843dc34b1bf92fc94f37c03e47f6b3",
+    "llvm-tools-1.57.0-x86_64-apple-darwin.tar.xz": "4debc65ba9df5a76805b9ef9fb48b3642f9b2acab6c85fcb4e986a2dcbd4f8df",
+    "llvm-tools-1.57.0-x86_64-pc-windows-msvc.tar.gz": "dd042fd62e75ff14c1638b9a63072eac42530d29deca2c0277964091f974d3b7",
+    "llvm-tools-1.57.0-x86_64-pc-windows-msvc.tar.xz": "722f7e515a3138df236093decd0af2ff6db91d4c86f07476d2ffa5d8e222e607",
+    "llvm-tools-1.57.0-x86_64-unknown-freebsd.tar.gz": "0d23df22a31816f5545b5af083dde75a74060889b42ebc8231795bd478f803ce",
+    "llvm-tools-1.57.0-x86_64-unknown-freebsd.tar.xz": "c1b8eb4a12dfa3d195975962db82ab57e079a25017f2b2daa320a4245c406134",
+    "llvm-tools-1.57.0-x86_64-unknown-linux-gnu.tar.gz": "bb2f45e0efe77886da2b8b9d3519b6a2929d1654258158d847996867d5b4ab40",
+    "llvm-tools-1.57.0-x86_64-unknown-linux-gnu.tar.xz": "f0eabab66bdd36a36d2136cec03358f2ad94251c9bcb2975a01f3899dd757507",
+    "llvm-tools-1.57.0-x86_64-unknown-linux-musl.tar.gz": "7c53a882379938b319c859f41d1f5569b66f1b4f03e745dec2bb3dc8eb11f2b4",
+    "llvm-tools-1.57.0-x86_64-unknown-linux-musl.tar.xz": "ba0a2a390518418e3f9c55fa79ce069763ee3590096aa6824aad5364d41fe03a",
+    "llvm-tools-1.58.0-aarch64-apple-darwin.tar.gz": "55b8ac5d42e3910d7f77f2022a964ec54e4c8082cc6624070d8664c4449b5161",
+    "llvm-tools-1.58.0-aarch64-apple-darwin.tar.xz": "9ca8345545066d41e763ad38656e30cc8dea2e86071647a218aea6b2640aff23",
+    "llvm-tools-1.58.0-aarch64-unknown-linux-gnu.tar.gz": "765d797cc11d746616d71015a52e564220e4e10b8f10efa2fd5fb74ba308ce30",
+    "llvm-tools-1.58.0-aarch64-unknown-linux-gnu.tar.xz": "4423beab0473f9af8ec9bb70cee1aa142996baeeeb2dcf2bfe2987963041355a",
+    "llvm-tools-1.58.0-aarch64-unknown-linux-musl.tar.gz": "e4b221ea279f698eab0bfebfd2dabca8e2b02c0423c48fb5d0ef281920771b99",
+    "llvm-tools-1.58.0-aarch64-unknown-linux-musl.tar.xz": "8f6812054bcb81a0c6661d0e0a8997710ca392395cfe98a351b3bfcf191dd9cd",
+    "llvm-tools-1.58.0-x86_64-apple-darwin.tar.gz": "7e3f807c85d8b6ff00747d20e88c115bb56a52ac1964593b5ff6bff84bf05647",
+    "llvm-tools-1.58.0-x86_64-apple-darwin.tar.xz": "44369feeaa2f5b133ea054a0fe34a2bf97ac5192c0a5c3dce20f09680d250e7c",
+    "llvm-tools-1.58.0-x86_64-pc-windows-msvc.tar.gz": "11aa6d93678766ea8a4625146de43290418f3b9076a69bb183b12613fafc7e5a",
+    "llvm-tools-1.58.0-x86_64-pc-windows-msvc.tar.xz": "801ccd75d616d6e8b62faf28978eab87dec535edf99d92ebe9c5b515d77e2d13",
+    "llvm-tools-1.58.0-x86_64-unknown-freebsd.tar.gz": "5950fe6c5a9c27ce0e85d07fd54cfa0ae0687a797e4cc957e91d2deb07451ad1",
+    "llvm-tools-1.58.0-x86_64-unknown-freebsd.tar.xz": "49dbd87e7c9784038eb996ea583e68135fd3d1af84d3e6b63a11145c095bf4fa",
+    "llvm-tools-1.58.0-x86_64-unknown-linux-gnu.tar.gz": "26cee659335a999d1c9dd47ac2bd2a8c94c2d42f7cda27b96b419f0c0c785bc7",
+    "llvm-tools-1.58.0-x86_64-unknown-linux-gnu.tar.xz": "b0b21efb1101ba1d56bfb418816cdb44650cd7f0153dfcf47949b1f85db7a748",
+    "llvm-tools-1.58.0-x86_64-unknown-linux-musl.tar.gz": "b20c27a6cfef891f4ac9bfcd06c38dd17f9f4021a7876599092da84c318b8b6b",
+    "llvm-tools-1.58.0-x86_64-unknown-linux-musl.tar.xz": "b9bcc47ffb317e44e55f7a196d67a4d6acdbd4723b50903f0cc962a7c7658835",
+    "llvm-tools-1.58.1-aarch64-apple-darwin.tar.gz": "c43a9166c2cbcc1858afe2de696ee3e6233316603e9f5963bedaaf200a531d29",
+    "llvm-tools-1.58.1-aarch64-apple-darwin.tar.xz": "9fe6e609d48c7a010de02e12ee63527dbc5e3ab6b857973e81b3dc431a152ba1",
+    "llvm-tools-1.58.1-aarch64-unknown-linux-gnu.tar.gz": "bec9207417c9bafa311119565e2a38f36d3aca5f642b8f0e19eb6fa0898fca5c",
+    "llvm-tools-1.58.1-aarch64-unknown-linux-gnu.tar.xz": "a4b46955d4cabbda7770065b3d4b975d33e0c15f8d47d48d3b4c0ea453074cf3",
+    "llvm-tools-1.58.1-aarch64-unknown-linux-musl.tar.gz": "0faff43fbfc9806355861b906fa0a32dca786843874fcaa7cf911f3899fe9313",
+    "llvm-tools-1.58.1-aarch64-unknown-linux-musl.tar.xz": "bc665f4717c893bea4000db7e1242cd7e240257985b95fdb2be88e3599c06d00",
+    "llvm-tools-1.58.1-x86_64-apple-darwin.tar.gz": "0810cbbe2c590ed03128075aaccc77fffb16ceb41bb92490dca2c018117040da",
+    "llvm-tools-1.58.1-x86_64-apple-darwin.tar.xz": "d1f262e23cd40522ef5f9d0e6eacd6582e8a4717405f05592bd920acefd53089",
+    "llvm-tools-1.58.1-x86_64-pc-windows-msvc.tar.gz": "8c5887ebb551ba392cbe915474b4c2494c4b36ece102683240cf4150c5dc1718",
+    "llvm-tools-1.58.1-x86_64-pc-windows-msvc.tar.xz": "a4749a6cd55b354223659fa4c1a143e8e85395051df6bf3e5e39fe054a0d24d3",
+    "llvm-tools-1.58.1-x86_64-unknown-freebsd.tar.gz": "b33b2ffa80bb8e3f116b15532acafe56bfb799973ccd97fbe35cb5c8eaeeb8bb",
+    "llvm-tools-1.58.1-x86_64-unknown-freebsd.tar.xz": "c3669b80ee7fecaeed84f44d725fcdc77daa516bf1aa4631a4d5ac4df7c62b55",
+    "llvm-tools-1.58.1-x86_64-unknown-linux-gnu.tar.gz": "3d003e6b2a38a6364667ce033ba3fe8029320acbb5b34f9bb103001ffcfef044",
+    "llvm-tools-1.58.1-x86_64-unknown-linux-gnu.tar.xz": "9b646d0fc397e7aeb4e9cb944c97ec1403499174d8f1132b049f83a6e99b1855",
+    "llvm-tools-1.58.1-x86_64-unknown-linux-musl.tar.gz": "a3206ec957f0e8728ad79203f700e4a7d64acccf8b83d11209ac5e459eadab2d",
+    "llvm-tools-1.58.1-x86_64-unknown-linux-musl.tar.xz": "c303b077488a241bf83947eda56ef9b8156d11bc9cf5a125db513ec37f315c80",
+    "llvm-tools-1.59.0-aarch64-apple-darwin.tar.gz": "474ba73365de82fa00940887d945931dde56efeb28789c036ab62b90c2e528d1",
+    "llvm-tools-1.59.0-aarch64-apple-darwin.tar.xz": "ae3c752ebd9954093b8d85ab60b43e7c051e6fdc868694220084db151786ba33",
+    "llvm-tools-1.59.0-aarch64-unknown-linux-gnu.tar.gz": "e3bc96a602e8cb7768f279c020a3830417e767095dc784b1549510de42c37f5b",
+    "llvm-tools-1.59.0-aarch64-unknown-linux-gnu.tar.xz": "b7606acfbd1964361dbe3ff729f1223408539a6858528387c4fe91464b7f956b",
+    "llvm-tools-1.59.0-aarch64-unknown-linux-musl.tar.gz": "5b28d1c6a73b99346dc9f29b4fb0b475814d8bcc3fd9661a2b53bedf606f1bc3",
+    "llvm-tools-1.59.0-aarch64-unknown-linux-musl.tar.xz": "e1a935be20ec528a969f1fc5e56fb95d8e4313cceeb2c4be4560ffa5b076d0e4",
+    "llvm-tools-1.59.0-x86_64-apple-darwin.tar.gz": "988593882b294423fbd88895b88887da8b47bf28946ae78263b0169a2b2b4597",
+    "llvm-tools-1.59.0-x86_64-apple-darwin.tar.xz": "f7de97180f014c8ea5eeeb1a9f0b39ba01b56fc32e3f25b59dff06a7136f5167",
+    "llvm-tools-1.59.0-x86_64-pc-windows-msvc.tar.gz": "45f393a71799392ff73cfb17ee071b7304b304c8375db6cdd86f3025b4ba56b0",
+    "llvm-tools-1.59.0-x86_64-pc-windows-msvc.tar.xz": "a6c2431b0278c0d6afb64414c8d72aedecee6df4f0a15b396893589777b96902",
+    "llvm-tools-1.59.0-x86_64-unknown-freebsd.tar.gz": "dbb0a7ad6c0e7a87e55a8e3fad05c1ed9ee5944e41e841267d0dfbb748060135",
+    "llvm-tools-1.59.0-x86_64-unknown-freebsd.tar.xz": "b8801fd282707302be00f775c1e3a7ed730fd5a55574305cfab794693bbdec5c",
+    "llvm-tools-1.59.0-x86_64-unknown-linux-gnu.tar.gz": "3bea89788f101b7ea1aca5dad94c3d2bd5f5133999ba78cea878ecad00c8c602",
+    "llvm-tools-1.59.0-x86_64-unknown-linux-gnu.tar.xz": "6b16f529c10d9e4cd1f36369f04ee2018501a09e3c84ee7556b80760715a871e",
+    "llvm-tools-1.59.0-x86_64-unknown-linux-musl.tar.gz": "db090aa8093efe163f54e1b211846b9061f835ba21e55cca2e37a5af7ad40e80",
+    "llvm-tools-1.59.0-x86_64-unknown-linux-musl.tar.xz": "2c7febfaeef400c3611c247e4a1c679adbee9ad50abde536aa5c8fb304594a0c",
+    "llvm-tools-1.60.0-aarch64-apple-darwin.tar.gz": "95d3f40816355158031bb7e4391136b4528892ec469aa1931d128ce26fd9e0ef",
+    "llvm-tools-1.60.0-aarch64-apple-darwin.tar.xz": "1a07ce1b629818d4c28cbc33741ac51c82f17e7d0031aa1abec3b16976704a37",
+    "llvm-tools-1.60.0-aarch64-unknown-linux-gnu.tar.gz": "bf38e24ce4241e048f19f108b530d01ff0efe9da88745d15e5fc8faef32acfa0",
+    "llvm-tools-1.60.0-aarch64-unknown-linux-gnu.tar.xz": "43ecfec07c0b7dc415bfd7eba0e8b9d181791c0769d3b157e6f0030965704fd9",
+    "llvm-tools-1.60.0-aarch64-unknown-linux-musl.tar.gz": "aab2512204860f6fa69d763f849aedca5f4214ba97ef8fe6548ef86ebd1838f8",
+    "llvm-tools-1.60.0-aarch64-unknown-linux-musl.tar.xz": "2f89f4890a23ea7e36f4a9121524a957fcd82d0ac0dcd7227dc030c61bbfb404",
+    "llvm-tools-1.60.0-x86_64-apple-darwin.tar.gz": "c3d2b8f6e3fd5a21967bcb27db8bb9d9988d6ba9544cef1233caa1f392745975",
+    "llvm-tools-1.60.0-x86_64-apple-darwin.tar.xz": "e55b57ffbcb8df5f57b62025649e83d2e0f9dcdef1b9419356c931cf41d18609",
+    "llvm-tools-1.60.0-x86_64-pc-windows-msvc.tar.gz": "e8decc0da38ce22dfac72db30ce5a2f8367f92d78369d1eed821148025092477",
+    "llvm-tools-1.60.0-x86_64-pc-windows-msvc.tar.xz": "cebcb62b0a9ef209781538c13dda2c0045602054e90904bffaaf568d67719e6e",
+    "llvm-tools-1.60.0-x86_64-unknown-freebsd.tar.gz": "6e77aa4dc5d562ef1e6596c2afdf59d70590880b987754524dc5989cf00bda09",
+    "llvm-tools-1.60.0-x86_64-unknown-freebsd.tar.xz": "65537bafa70073dc9d827357b8de81f00dbe9a9ecfe19978262d4e4253e1a25f",
+    "llvm-tools-1.60.0-x86_64-unknown-linux-gnu.tar.gz": "25d4d8d27550c5653ff5dc3504de44eee9dc362fc7f3d0047e7e7ad0db805201",
+    "llvm-tools-1.60.0-x86_64-unknown-linux-gnu.tar.xz": "ea97f66834aedb7c9f7afa6985f61b078609f4e3e17a3fee7e6c089adf357e0e",
+    "llvm-tools-1.60.0-x86_64-unknown-linux-musl.tar.gz": "c9e5b1aaddb8883ba36f8f1fb47f7f2a46cacf877c3d856a446c9670da03a9ed",
+    "llvm-tools-1.60.0-x86_64-unknown-linux-musl.tar.xz": "be170088f969b810b89d7fcd4f10129108ba11a0da5886c860c7fecf65deab9b",
+    "llvm-tools-1.61.0-aarch64-apple-darwin.tar.gz": "44a30e16313ce338310e9e6c0c173ca44180407139b0f1bb12d976b125abbf34",
+    "llvm-tools-1.61.0-aarch64-apple-darwin.tar.xz": "3498be8ee3b3f8dea029beb3fbd306eaed65214a82d8f6b5b27b1d45735c90a8",
+    "llvm-tools-1.61.0-aarch64-unknown-linux-gnu.tar.gz": "6307c7943edc5e0e471690c829b7632e8fd9e3dc11cdd30d40db46bb2722bd10",
+    "llvm-tools-1.61.0-aarch64-unknown-linux-gnu.tar.xz": "b7f79fa77ffa963268b1cf36b75d1cf45b136051b464c9abcb47e37929c5c243",
+    "llvm-tools-1.61.0-aarch64-unknown-linux-musl.tar.gz": "433836301570c1289426b74b9a71130be8df635555ca4dbb4d066f65b6559282",
+    "llvm-tools-1.61.0-aarch64-unknown-linux-musl.tar.xz": "54b2e2ddb750f2aa4580153ab7a3d4d46a37c69df91af01f38d17b6d13aaebcf",
+    "llvm-tools-1.61.0-x86_64-apple-darwin.tar.gz": "c0a99ea8f6203bfc58517f25a144bf1cd7a5d53ebedb38a0d347c2afebf23417",
+    "llvm-tools-1.61.0-x86_64-apple-darwin.tar.xz": "d9795208a655bb8feb9a3b665b277cb72915c7279319a0e4ff865df9675324fd",
+    "llvm-tools-1.61.0-x86_64-pc-windows-msvc.tar.gz": "51f57b496755921d77021f47f880d8e37e99448975e875261e862a09c37d71f4",
+    "llvm-tools-1.61.0-x86_64-pc-windows-msvc.tar.xz": "909c7cb9ed6c2e285a7c46ac6115ca80851c721c03849345bda646b06b89fed5",
+    "llvm-tools-1.61.0-x86_64-unknown-freebsd.tar.gz": "c655f969db68e7ae89ab23ffe3956fa5062ee9ca6a2497ea22ac0b51b822a5ec",
+    "llvm-tools-1.61.0-x86_64-unknown-freebsd.tar.xz": "6b46f7be11615c303f17165acdd8658f88fba7474ea3e8749244fc6f7666ce2c",
+    "llvm-tools-1.61.0-x86_64-unknown-linux-gnu.tar.gz": "14b6aa44fd275e776660a5f31328f9344407c2d89db3c87af74614e6e9915d28",
+    "llvm-tools-1.61.0-x86_64-unknown-linux-gnu.tar.xz": "0e97c3b1aecafd114a47fee1f7ab3c2764c72733b8bf5302db95031c864ea253",
+    "llvm-tools-1.61.0-x86_64-unknown-linux-musl.tar.gz": "ecc67ba8e60ab4ba612ce190379141bf1786671c76db2437284d4a21b0ae318d",
+    "llvm-tools-1.61.0-x86_64-unknown-linux-musl.tar.xz": "e4aa4a938b47f7ee3e58a20fb25d00ca18cf7ca5861aa17ea1565781a5c6dcaf",
+    "llvm-tools-1.62.0-aarch64-apple-darwin.tar.gz": "3a469b15f2c8e33b48a36e80fdcfb4be2bda812fa83b9f46ffb86fd7f6837999",
+    "llvm-tools-1.62.0-aarch64-apple-darwin.tar.xz": "c05c5bfa78de37e0879ae32e76e60b4dfc49dd0f5e7a7a8d621869a9ad61e697",
+    "llvm-tools-1.62.0-aarch64-unknown-linux-gnu.tar.gz": "e4ba2e2cd1359dddacca146155b4edd6fb9a525db52580fff29216a6ff067451",
+    "llvm-tools-1.62.0-aarch64-unknown-linux-gnu.tar.xz": "be8f70d222113704a429545ad333b788b3534ef5850ccfdc73f887b7eecbc06c",
+    "llvm-tools-1.62.0-aarch64-unknown-linux-musl.tar.gz": "644038bf2e247fa432a85778b3c30b346c21261b15393a8fe30f26c01e12a0f5",
+    "llvm-tools-1.62.0-aarch64-unknown-linux-musl.tar.xz": "ad9e3f6a6071415b63d81ce7e3965f1303bdec63c0cc6f0d3c071a92544e2786",
+    "llvm-tools-1.62.0-x86_64-apple-darwin.tar.gz": "0f2c8a1e06665ed0b26a78edec373ce775684acea4f4f932ee151fb6a292f9c7",
+    "llvm-tools-1.62.0-x86_64-apple-darwin.tar.xz": "cfe0dd1112b09aea4de1c009ef2fe778115c2b36541ffdb0b1f6ae23d7523dc1",
+    "llvm-tools-1.62.0-x86_64-pc-windows-msvc.tar.gz": "4e2673a5868ff02ac8c82154f08098f9e1d3ddd9d8a5087d497bb0f0b9199868",
+    "llvm-tools-1.62.0-x86_64-pc-windows-msvc.tar.xz": "1dadfcfaaf681c6e0913ae3a4e232aa90f77c976035517de1673dfa9efa08706",
+    "llvm-tools-1.62.0-x86_64-unknown-freebsd.tar.gz": "c3cc6d24038d780716fef7867e51d67cb4e0410e5d136dd55e8a78ddc69517a4",
+    "llvm-tools-1.62.0-x86_64-unknown-freebsd.tar.xz": "9c9e239ace8b765d472103544501a78e3cf5a137d9b9c634f5dd2de45c76765f",
+    "llvm-tools-1.62.0-x86_64-unknown-linux-gnu.tar.gz": "136bc8120b5f282dc4cbb2899a889192ea32cffcd913777d8d036527dc32c79e",
+    "llvm-tools-1.62.0-x86_64-unknown-linux-gnu.tar.xz": "152afbd674846e51343d5c1f8c7b44c8632023ca3d6b6ff25ae29ec644ae1a19",
+    "llvm-tools-1.62.0-x86_64-unknown-linux-musl.tar.gz": "d65dbb8e0ac759293c5f290e1a82a745f08c675037608c740b8e04d335ccc317",
+    "llvm-tools-1.62.0-x86_64-unknown-linux-musl.tar.xz": "9997f83856bc4e5b15228fbdcca43aee3e10c9e756e1f99381a3bb21a529aa2a",
+    "llvm-tools-1.62.1-aarch64-apple-darwin.tar.gz": "4489a75247fbeb987f258aa80ebfde2995d4e72106d7b872ac2910179f3bfacc",
+    "llvm-tools-1.62.1-aarch64-apple-darwin.tar.xz": "17fba281b7f6048cda65aedc323f9a41786e8b93bd2fbdf7df79c6e0b1390004",
+    "llvm-tools-1.62.1-aarch64-unknown-linux-gnu.tar.gz": "f7dbab7d9e4783916cf3b97014cc37d3a2d806aa6e67973f0b3dda89aa6a0ed5",
+    "llvm-tools-1.62.1-aarch64-unknown-linux-gnu.tar.xz": "69ece924c2ee322a5e9cb2a7a5244eec9aeeecf52d2922e8fdd58e119a9dd90a",
+    "llvm-tools-1.62.1-aarch64-unknown-linux-musl.tar.gz": "b5acf95518118b12b8c979b4916fa175e963fc7652047d77f34b0d6bd413f82f",
+    "llvm-tools-1.62.1-aarch64-unknown-linux-musl.tar.xz": "121898a9579e28d9257d3c1dc6262e5d97adf2f873ce59c597882a2f8da71a25",
+    "llvm-tools-1.62.1-x86_64-apple-darwin.tar.gz": "15255d787ab1c9dd5ba52489be098b3d4fa3745925f9902db1ade53ad6399a38",
+    "llvm-tools-1.62.1-x86_64-apple-darwin.tar.xz": "311ef246a87bcf32823324e162324d265f20849332fe8a90c8f4f195de1d1471",
+    "llvm-tools-1.62.1-x86_64-pc-windows-msvc.tar.gz": "f0e82148033a289f8e49ae8650192b63aec5857d04d65759bbae6a3e92cfcfb4",
+    "llvm-tools-1.62.1-x86_64-pc-windows-msvc.tar.xz": "096543b27c215180575bb9ce1ebe6c9d8edb7a884c5ac4833f572ac8b897d56a",
+    "llvm-tools-1.62.1-x86_64-unknown-freebsd.tar.gz": "1c649e4674d05646ee938344f9177a59f4f0f8e968bd0c99c6749ae47752af64",
+    "llvm-tools-1.62.1-x86_64-unknown-freebsd.tar.xz": "3492b2814d1dd343735704f9df2934056fa9c5cf90d3eb10d4443866ccadd1b2",
+    "llvm-tools-1.62.1-x86_64-unknown-linux-gnu.tar.gz": "d06911db8d7ba0844e9709e61813ecfbe0c398353803e1675a12fbbecf91f4b1",
+    "llvm-tools-1.62.1-x86_64-unknown-linux-gnu.tar.xz": "e3a87c051b6a668abaf5394584917e2d86dd8a8867cb95e309d0bfe345fc2154",
+    "llvm-tools-1.62.1-x86_64-unknown-linux-musl.tar.gz": "a3a25356445da9e4c433e3a4d1c307727824031ea2aed34c314bd053c4f62fbb",
+    "llvm-tools-1.62.1-x86_64-unknown-linux-musl.tar.xz": "4e71a395a9cc85364ceba82fab89f5bcaf03ead646eec88405b49a45bc20dc78",
+    "rust-1.26.0-aarch64-unknown-linux-gnu.tar.gz": "e12dc84bdb569cdb382268a5fe6ae6a8e2e53810cb890ec3a7133c20ba8451ac",
+    "rust-1.26.0-aarch64-unknown-linux-gnu.tar.xz": "773560f577d4bfc34efa69f035b0d397fc8f4d55835d163416bc4f2012a57a4a",
+    "rust-1.26.0-x86_64-apple-darwin.tar.gz": "38708803c3096b8f101d1919ee2d7e723b0adf1bc1bb986b060973b57d8c7c28",
+    "rust-1.26.0-x86_64-apple-darwin.tar.xz": "0885a92df119aeac497a9501e7208d5a80554b992dc765dbf92fd162c5ba4431",
+    "rust-1.26.0-x86_64-pc-windows-msvc.tar.gz": "20631bf942242d4be82363030839851bf18a2199b74a661bdc334f830e9e1d5a",
+    "rust-1.26.0-x86_64-pc-windows-msvc.tar.xz": "b3a2a2b0e31083954c6b5adcc9f6b7ddecc3166188c3a7ab8fba78146c0c25c1",
+    "rust-1.26.0-x86_64-unknown-freebsd.tar.gz": "a03cbe097670042c90d18654fbc852c9d473261d61c03d0f745bbaee759780ed",
+    "rust-1.26.0-x86_64-unknown-freebsd.tar.xz": "030df5c3813392bd1e9c21e2477794456f4ba08a2871ca9a880be1315c75908d",
+    "rust-1.26.0-x86_64-unknown-linux-gnu.tar.gz": "13691d7782577fc9f110924b26603ade1990de0b691a3ce2dc324b4a72a64a68",
+    "rust-1.26.0-x86_64-unknown-linux-gnu.tar.xz": "ca5436ae9fd7c7a942fe8af669bbb32d14050a68e91b68d1a0d318a9f7d68672",
+    "rust-1.26.1-aarch64-unknown-linux-gnu.tar.gz": "d4a369053c2dfd5f457de6853557dab563944579fa4bb55bc919bacf259bff6d",
+    "rust-1.26.1-aarch64-unknown-linux-gnu.tar.xz": "3454fff9fca72600dc852e5788f3bb7de3f6165ac5b7aed7ce34b51ce236b331",
+    "rust-1.26.1-x86_64-apple-darwin.tar.gz": "ebf898b9fa7e2aafc53682a41f18af5ca6660ebe82dd78f28cd9799fe4dc189a",
+    "rust-1.26.1-x86_64-apple-darwin.tar.xz": "a69797ff3656b1de7c1978fc12797a9f047696125a2ff908ed76be3cbb7dee48",
+    "rust-1.26.1-x86_64-pc-windows-msvc.tar.gz": "56c2398de358094606afba419c1e1a9e499cbe6f894315e99cfebda9f765c52f",
+    "rust-1.26.1-x86_64-pc-windows-msvc.tar.xz": "edbcc6309b0f2239cd6218c8d6830a5b18eff33209ba2e36ac179a0d003527fa",
+    "rust-1.26.1-x86_64-unknown-freebsd.tar.gz": "910128f60c680e175ae93722272f491c6835f27652f9f3fe415dc0d9c482e204",
+    "rust-1.26.1-x86_64-unknown-freebsd.tar.xz": "c746cffab257e16ef0cf9bd17902129b00d09cc5d4ee62acb284e028a6ffbf58",
+    "rust-1.26.1-x86_64-unknown-linux-gnu.tar.gz": "b7e964bace1286696d511c287b945f3ece476ba77a231f0c31f1867dfa5080e0",
+    "rust-1.26.1-x86_64-unknown-linux-gnu.tar.xz": "068a28c1b74476965ea74779b87d0152ed17e42efb3a23f5f718e75b178fac89",
+    "rust-1.26.2-aarch64-unknown-linux-gnu.tar.gz": "3dfad0dc9c795f7ee54c2099c9b7edf06b942adbbf02e9ed9e5d4b5e3f1f3759",
+    "rust-1.26.2-aarch64-unknown-linux-gnu.tar.xz": "a45280f4eeac132a5b2de4b14f4e3702c33b55cf244468cb020dc67201f1f254",
+    "rust-1.26.2-x86_64-apple-darwin.tar.gz": "f193705d4c0572a358670dbacbf0ffadcd04b3989728b442f4680fa1e065fa72",
+    "rust-1.26.2-x86_64-apple-darwin.tar.xz": "30339ea8e853d8d5ba2c05e4c45649df35d4699d1e250cc69346a9c58960059a",
+    "rust-1.26.2-x86_64-pc-windows-msvc.tar.gz": "c4195cc0541db7cb08d503cc38917f6f40f53826001e86d613a48bd7387ac6a0",
+    "rust-1.26.2-x86_64-pc-windows-msvc.tar.xz": "cbe54a8090c7f03267aeb33d1a7a930b77ccb7f3326a3cff877722c9c38800cd",
+    "rust-1.26.2-x86_64-unknown-freebsd.tar.gz": "0ad985cf36b3946f086fd3c3c6eb97b0c94b24285147a04da22c00d4d522727a",
+    "rust-1.26.2-x86_64-unknown-freebsd.tar.xz": "7119c8e4d3d7fe95ef82a7aae0b1eeb635135a402a833ecfc963440950faa2f7",
+    "rust-1.26.2-x86_64-unknown-linux-gnu.tar.gz": "d2b4fb0c544874a73c463993bde122f031c34897bb1eeb653d2ba2b336db83e6",
+    "rust-1.26.2-x86_64-unknown-linux-gnu.tar.xz": "15a5ab639d794e33a54c488b4064b055663b4f297311c487d7ce8dd46c366d1b",
+    "rust-1.27.0-aarch64-unknown-linux-gnu.tar.gz": "e74ebc33dc3fc19e501a677a87b619746efdba2901949a0319176352f556673a",
+    "rust-1.27.0-aarch64-unknown-linux-gnu.tar.xz": "980e743fe13aa82ec1f8004becbc9ac76a002e505dfbc561394385bfa9cac8b4",
+    "rust-1.27.0-x86_64-apple-darwin.tar.gz": "a1d48190992e01aac1a181bce490c80cb2c1421724b4ff0e2fb7e224a958ce0f",
+    "rust-1.27.0-x86_64-apple-darwin.tar.xz": "5d5b967369b61c0b10fff45d3b1c9849d863aa69f0d56266b27d3eee07198717",
+    "rust-1.27.0-x86_64-pc-windows-msvc.tar.gz": "795585a4f49dfcfd719dd6678713d0e84979b265ae9265dcb26b45c67b3a883a",
+    "rust-1.27.0-x86_64-pc-windows-msvc.tar.xz": "8ec6378f4d70f5ff8dbe4de127417455d1dbc812589d12a69200fc9dcfe18f08",
+    "rust-1.27.0-x86_64-unknown-freebsd.tar.gz": "f0754434f76f261ecdfd7ea3645b251b0188e263c0c7a7466aafac1b034d20ec",
+    "rust-1.27.0-x86_64-unknown-freebsd.tar.xz": "7bea9bdf14fe09c3d2a19177a990e3e2d76395e5f64e79bad142d536b98ee56c",
+    "rust-1.27.0-x86_64-unknown-linux-gnu.tar.gz": "235ad78e220b10a2d0267aea1e2c0f19ef5eaaff53ad6ff8b12c1d4370dec9a3",
+    "rust-1.27.0-x86_64-unknown-linux-gnu.tar.xz": "d1a4150b1001ec75a6d8eaa5117af1ae36c481131dd3aaa240dc590c916b3719",
+    "rust-1.27.1-aarch64-unknown-linux-gnu.tar.gz": "d1146b240e6f628224c3a67e3aae2a57e6c25d544115e5ece9ce91861ec92b3a",
+    "rust-1.27.1-aarch64-unknown-linux-gnu.tar.xz": "72cefe4e238d0bb0a6c9de77958688d55a84ae6b5b89bf51b9d1a4746f7d9f5a",
+    "rust-1.27.1-x86_64-apple-darwin.tar.gz": "475be237962d6aef1038a2faada26fda1e0eaea5d71d6950229a027a9c2bfe08",
+    "rust-1.27.1-x86_64-apple-darwin.tar.xz": "228a6cdcd33eb4256aaf9303a88b83bd2f9f7938ba87bc28ff4327099399f5e6",
+    "rust-1.27.1-x86_64-pc-windows-msvc.tar.gz": "24fb59a42277487ab1aaf8ac8b7a988843ae851ffe4a3386d9339e99e42d08d0",
+    "rust-1.27.1-x86_64-pc-windows-msvc.tar.xz": "ec35452907f36b1f09c631f414967729479e6a81e7a40961c397a36ed045cbd5",
+    "rust-1.27.1-x86_64-unknown-freebsd.tar.gz": "739d38036c9f08c13bc7425cc5cccd3dd37860fa6e9dfc7bcd9081c8d3c5ccdd",
+    "rust-1.27.1-x86_64-unknown-freebsd.tar.xz": "103b4a95adf5aea88e15ce34ee1792ee8106a9830ca5b6982a56a5e18a305ff8",
+    "rust-1.27.1-x86_64-unknown-linux-gnu.tar.gz": "435778a837af764da2a7a7fb4d386b7b78516c7dfc732d892858e9a8a539989b",
+    "rust-1.27.1-x86_64-unknown-linux-gnu.tar.xz": "bae52484fe3cd50b4670487709e77ee5c0412ea55432f6036225e5c5557d43ae",
+    "rust-1.27.2-aarch64-unknown-linux-gnu.tar.gz": "cf84da70269c0e50bb3cc3d248bae1ffcd70ee69dc5a4e3513b54fefc6685fb4",
+    "rust-1.27.2-aarch64-unknown-linux-gnu.tar.xz": "da8667be6b01f7f6855c06fe6cec8f04cb99eb735ff0d2af8e62591b09177831",
+    "rust-1.27.2-x86_64-apple-darwin.tar.gz": "30c5cc58759caa4efdf2ea7d8438633139c98bee3408beb29ceb26985f3f5f70",
+    "rust-1.27.2-x86_64-apple-darwin.tar.xz": "2ccd29c3ab2a42a8e6146717ab710886749b86fdc18066cfcf2eb6be2cbc10d7",
+    "rust-1.27.2-x86_64-pc-windows-msvc.tar.gz": "be1cccbd4cc00d473cb19fee4402d0ffde3b1e3ca3701926d47590878bc88508",
+    "rust-1.27.2-x86_64-pc-windows-msvc.tar.xz": "4fdc819acb005cd42fff4bdd0bce7ba0d2c7c810831583aeda59413e337d6018",
+    "rust-1.27.2-x86_64-unknown-freebsd.tar.gz": "b114c5eebc120b360d4d3c4360421ff181cc47bb311e161d3af6971b6d3e6244",
+    "rust-1.27.2-x86_64-unknown-freebsd.tar.xz": "731eca2277f27575f4f52a5053ca00235063575a2a11ac52fdfe13ccd83faafd",
+    "rust-1.27.2-x86_64-unknown-linux-gnu.tar.gz": "5028a18e913ef3eb53e8d8119d2cc0594442725e055a9361012f8e26f754f2bf",
+    "rust-1.27.2-x86_64-unknown-linux-gnu.tar.xz": "090a3bfc536b7211ae84f6667c941c861eddfdcadb5e472a32e72d074f793dd4",
+    "rust-1.28.0-aarch64-unknown-linux-gnu.tar.gz": "9b6fbcee73070332c811c0ddff399fa31965bec62ef258656c0c90354f6231c1",
+    "rust-1.28.0-aarch64-unknown-linux-gnu.tar.xz": "19ec7a80e59df67c61ad85d1d00642db087026ebd9155616a3bf673c366d2453",
+    "rust-1.28.0-x86_64-apple-darwin.tar.gz": "5d7a70ed4701fe9410041c1eea025c95cad97e5b3d8acc46426f9ac4f9f02393",
+    "rust-1.28.0-x86_64-apple-darwin.tar.xz": "d65f6f24b61e657381534a999b493ee6033da696f3843aa93898bd489fc79cb6",
+    "rust-1.28.0-x86_64-pc-windows-msvc.tar.gz": "5990e79259967a6a176aa5e4c55c6395f0c9262eed61ea858cfb909bac477542",
+    "rust-1.28.0-x86_64-pc-windows-msvc.tar.xz": "34dbb4c2545995acd796fae757edcda8081745ec7ad79dd7c7be3c97df3caabf",
+    "rust-1.28.0-x86_64-unknown-freebsd.tar.gz": "cac701973239cbec802780855b172a3cc85ce15602e72873fe966d9d7d807e07",
+    "rust-1.28.0-x86_64-unknown-freebsd.tar.xz": "227884282ae07895d24ecf527e1bc9cb445add50dad451f596b6a1232c2d4b62",
+    "rust-1.28.0-x86_64-unknown-linux-gnu.tar.gz": "2a1390340db1d24a9498036884e6b2748e9b4b057fc5219694e298bdaa37b810",
+    "rust-1.28.0-x86_64-unknown-linux-gnu.tar.xz": "9e73dc59f3e39dbe363af3000d85fad64638f456025622b919766c10f38ffa48",
+    "rust-1.29.0-aarch64-unknown-linux-gnu.tar.gz": "0ed3be0fd9f847afeb4e587fff61f6769ea61b53719d3ea999326284e8975b36",
+    "rust-1.29.0-aarch64-unknown-linux-gnu.tar.xz": "eadb910e75c33d1a2d57eb8d916de91757a47315c7bc4e3a7e809eaef27f0be1",
+    "rust-1.29.0-x86_64-apple-darwin.tar.gz": "28a0473637585742f6d80ccd8afd88b6b400e65d623c33cb892412759444da93",
+    "rust-1.29.0-x86_64-apple-darwin.tar.xz": "1ae728de731ee04c89f418084e5743a56e1efaa8ad332f5a8bddb0ab7c487317",
+    "rust-1.29.0-x86_64-pc-windows-msvc.tar.gz": "64f8c85540520c82d579d7eac5e2a524b42a6083cc46c7e80181512651a66fef",
+    "rust-1.29.0-x86_64-pc-windows-msvc.tar.xz": "989ce9fb85938beb6a3ea771aeedcd50592b82735071d85f7ded764c5af6ccc1",
+    "rust-1.29.0-x86_64-unknown-freebsd.tar.gz": "3500b1683849cbe526bb79f460147aa387b79a4f9a6a4760e276f73ddbffafd5",
+    "rust-1.29.0-x86_64-unknown-freebsd.tar.xz": "1bd7ae05a76e9301557ff9be8bce7ecedc0cf9b8ca69a1bccbd0133b53e9fd5a",
+    "rust-1.29.0-x86_64-unknown-linux-gnu.tar.gz": "09f99986c17b1b6b1bfbc9dd8785e0e4693007c5feb67915395d115c1a3aea9d",
+    "rust-1.29.0-x86_64-unknown-linux-gnu.tar.xz": "02376bd111138926eefa62a464e928010b866ca3448559574d0cf4b382f44627",
+    "rust-1.29.1-aarch64-unknown-linux-gnu.tar.gz": "2685224f67b2ef951e0e8b48829f786cbfed95e19448ba292ac33af719843dbe",
+    "rust-1.29.1-aarch64-unknown-linux-gnu.tar.xz": "bb8664f0aa5a5c310f0ec51bd6520539ede94a39aebdb13fd81f8658c18eec2c",
+    "rust-1.29.1-x86_64-apple-darwin.tar.gz": "07b07fbd6fab2390e19550beb8008745a8626cc5e97b72dc659061c1c3b3d008",
+    "rust-1.29.1-x86_64-apple-darwin.tar.xz": "ae0cf5bdf85e1a0e6b9f07551c0ca1135c32110d2ba09d11f3552a14997b36dd",
+    "rust-1.29.1-x86_64-pc-windows-msvc.tar.gz": "ec15b45be27b4406122518b2949f6186f0d9d422f23a946ab4de43716cc8e492",
+    "rust-1.29.1-x86_64-pc-windows-msvc.tar.xz": "9902f28fbcff20261dcdcbd9be415d100f20098a51077a11dbe4ce2ef4e473eb",
+    "rust-1.29.1-x86_64-unknown-freebsd.tar.gz": "4055a9e9990f83f6c0d4f2040b2704edb8dbdaf82933f8598ab4ee31c541bbb9",
+    "rust-1.29.1-x86_64-unknown-freebsd.tar.xz": "f9766172bc44a078b3ba9560f9012e6b5751952f47a27790ea5128c08b0a6d23",
+    "rust-1.29.1-x86_64-unknown-linux-gnu.tar.gz": "b36998aea6d58525f25d89f1813b6bfd4cad6ff467e27bd11e761a20dde43745",
+    "rust-1.29.1-x86_64-unknown-linux-gnu.tar.xz": "6e38e51cc5cc2a6e66401ed88571fb044792e0694b2af8edd9b12fbe87c4e1f9",
+    "rust-1.29.2-aarch64-unknown-linux-gnu.tar.gz": "e11461015ca7106ef8ebf00859842bf4be518ee170226cb8eedaaa666946509f",
+    "rust-1.29.2-aarch64-unknown-linux-gnu.tar.xz": "63ef07abc851889ec8d0df4333b581c8767cb50f3e7c343ce08f5e96b82015a3",
+    "rust-1.29.2-x86_64-apple-darwin.tar.gz": "63f54e3013406b39fcb5b84bcf5e8ce85860d0b97a1e156700e467bf5fb5d5f2",
+    "rust-1.29.2-x86_64-apple-darwin.tar.xz": "075d5b9ba3c5ee735dcde53d9c52d4eda0204df4fc4f71a9bf901a6ec5a44b21",
+    "rust-1.29.2-x86_64-pc-windows-msvc.tar.gz": "7813396fb99021e9a8bccb2fc7e71b1b730d5f3aebbb09ffcc2ecb838a1073b4",
+    "rust-1.29.2-x86_64-pc-windows-msvc.tar.xz": "92b4cb5316fc43b774fe067b626c36ad58d6d102b086a3440044728022f96d7f",
+    "rust-1.29.2-x86_64-unknown-freebsd.tar.gz": "2e209d505c730df6e68575424eec03ed924e12114ad60595602cb2513c6a382a",
+    "rust-1.29.2-x86_64-unknown-freebsd.tar.xz": "5188940e871a1c17a2e7e3c2f6e56bb4df5d17769eb61813d335d68ad6d08a23",
+    "rust-1.29.2-x86_64-unknown-linux-gnu.tar.gz": "e9809825c546969a9609ff94b2793c9107d7d9bed67d557ed9969e673137e8d8",
+    "rust-1.29.2-x86_64-unknown-linux-gnu.tar.xz": "b27b4da8e7a85c07dc546cb26682cf0fc74cb4c183dce44f9014c2dd9265931f",
+    "rust-1.30.0-aarch64-unknown-linux-gnu.tar.gz": "9690c7c50eba5a8461184ee4138b4c284bad31ccc4aa1f2ddeec58b253e6363e",
+    "rust-1.30.0-aarch64-unknown-linux-gnu.tar.xz": "8cd698c0772b66547c958647380006ea9d10d0c7a66920b2b69a83f61a478f11",
+    "rust-1.30.0-x86_64-apple-darwin.tar.gz": "07008d90932712282bc599f1e9a226e97879c758dc1f935e6e2675e45694cc1b",
+    "rust-1.30.0-x86_64-apple-darwin.tar.xz": "9ec056022535557912f7015e7b53852d3dfc61791738a86fe38ad95f525dff75",
+    "rust-1.30.0-x86_64-pc-windows-msvc.tar.gz": "960ca17c0c62ee250647c20b617e75912badb67ca8ade08c3224410a7c320ade",
+    "rust-1.30.0-x86_64-pc-windows-msvc.tar.xz": "75839a50e479fd468431dd834803816cf764bb5bcb7ca02baf84ece67b560d09",
+    "rust-1.30.0-x86_64-unknown-freebsd.tar.gz": "b4e5d00b318d56edb7ba9182af4210fca9d7f44b64bc1380456ff3c17584af52",
+    "rust-1.30.0-x86_64-unknown-freebsd.tar.xz": "8ca9a7dd2528fcdce255c5dc0d2dabef11957699c0dd2237928e84f13551deaf",
+    "rust-1.30.0-x86_64-unknown-linux-gnu.tar.gz": "f620e3125cc505c842150bd873c0603432b6cee984cdae8b226cf92c8aa1a80f",
+    "rust-1.30.0-x86_64-unknown-linux-gnu.tar.xz": "2c8c6161ca0536e3af1ca6def8b09f41bb0c0d401d805664e0e04a2d1971d588",
+    "rust-1.30.1-aarch64-unknown-linux-gnu.tar.gz": "6d87d81561285abd6c1987e07b60b2d723936f037c4b46eedcc12e8566fd3874",
+    "rust-1.30.1-aarch64-unknown-linux-gnu.tar.xz": "1f493cfb40566a61765eb91e4613503350378803ac9b962c710e80e01a781aa9",
+    "rust-1.30.1-x86_64-apple-darwin.tar.gz": "3ba1704a7defe3d9a6f0c1f68792c084da83bcba85e936d597bac0c019914b94",
+    "rust-1.30.1-x86_64-apple-darwin.tar.xz": "81acec3b39c84ef3a70073faec79fd5b98c2e978da84e8368404efdcab14a45d",
+    "rust-1.30.1-x86_64-pc-windows-msvc.tar.gz": "b0110a5ad461532b2cce59bc04346af739b4660e7241f92dde6442a11a5391c2",
+    "rust-1.30.1-x86_64-pc-windows-msvc.tar.xz": "255941a8a6f41a31cce9c28e124432c4cf8579e56ff48895455945874dae9f5f",
+    "rust-1.30.1-x86_64-unknown-freebsd.tar.gz": "480db9003f8e8c4ad12f2868af2c1489a05b18a8dcc62985c52310a7a15201ce",
+    "rust-1.30.1-x86_64-unknown-freebsd.tar.xz": "0b4087ace49d335d9c761bc53d56ec3a1b16159c08747c04082e102e155de70a",
+    "rust-1.30.1-x86_64-unknown-linux-gnu.tar.gz": "a01a493ed8946fc1c15f63e74fc53299b26ebf705938b4d04a388a746dfdbf9e",
+    "rust-1.30.1-x86_64-unknown-linux-gnu.tar.xz": "fc08025864a5e70e5c92bc16239992f044dbd1932ca7455ccfdf662075e97931",
+    "rust-1.31.0-aarch64-unknown-linux-gnu.tar.gz": "4e68c70aba58004d9e86c2b4463e88466affee51242349a038b456cf6f4be5c9",
+    "rust-1.31.0-aarch64-unknown-linux-gnu.tar.xz": "1ba64ed8c6565498da4fc02164dc2ec826ee3f7c39ddce1de75cc41a034d3088",
+    "rust-1.31.0-x86_64-apple-darwin.tar.gz": "5d4035e3cecb7df13e728bcff125b52b43b126e91f8311c66b143f353362606f",
+    "rust-1.31.0-x86_64-apple-darwin.tar.xz": "694d10c740b45516863283d29aa917f2955ef4ef1203ad20bc37aed04de59de2",
+    "rust-1.31.0-x86_64-pc-windows-msvc.tar.gz": "9288248f1821ab53557cbc5728ade7d221b1670547b0c0ec35099e0b2993dcf4",
+    "rust-1.31.0-x86_64-pc-windows-msvc.tar.xz": "032fc79efd86b5793a578a3c8a909c250c5c1fa17a5759215c7381032eb67c1f",
+    "rust-1.31.0-x86_64-unknown-freebsd.tar.gz": "936ca1503ab1f18d9a4a1cc27fbc655f2c532ba819e1109bb03f5c52c5fb4fdd",
+    "rust-1.31.0-x86_64-unknown-freebsd.tar.xz": "e31746d48e22575893227d1c0cdfab2fc10129a11c608ba4df5065231e0f105f",
+    "rust-1.31.0-x86_64-unknown-linux-gnu.tar.gz": "c8a2016109ffdc12a488660edc5f30c1643729efc15abe311ebb187437e506bf",
+    "rust-1.31.0-x86_64-unknown-linux-gnu.tar.xz": "670e2767ba99bb85d710a4031f74d499805d132cdefd6ed9acf9c6fd79a3cd86",
+    "rust-1.31.1-aarch64-unknown-linux-gnu.tar.gz": "29a7c6eb536fefd0ca459e48dfaea006aa8bff8a87aa82a9b7d483487033632a",
+    "rust-1.31.1-aarch64-unknown-linux-gnu.tar.xz": "8926323bd0a69cfa13fc42a933ac290ef2c2ed2795e49a76aee6a8b15e0f5522",
+    "rust-1.31.1-x86_64-apple-darwin.tar.gz": "8398b1b303bdf0e7605d08b87070a514a4f588797c6fb3593718cb9cec233ad6",
+    "rust-1.31.1-x86_64-apple-darwin.tar.xz": "7ab986a3529246263322d81010163583d328fb4e4204e8102359a62dd3f5d11f",
+    "rust-1.31.1-x86_64-pc-windows-msvc.tar.gz": "4d2aa25c9d79dca5aba67b7b1df1c1f0ad40fcfb25a4c1d364fd64dd17a63cf3",
+    "rust-1.31.1-x86_64-pc-windows-msvc.tar.xz": "15edb9313a12055728a1e4e6b8bc95eeefd81e60a3cc8cd6eacfdb728c9df4fe",
+    "rust-1.31.1-x86_64-unknown-freebsd.tar.gz": "5cbb465a0843b31da217c51c4f9ebbb2508aa2ece41e9b98303101e12571de42",
+    "rust-1.31.1-x86_64-unknown-freebsd.tar.xz": "2ae0ea775c808ba8b2b81bf1ba0aeea3a1986631e603178e7ab8d69a0b9070b1",
+    "rust-1.31.1-x86_64-unknown-linux-gnu.tar.gz": "a64685535d0c457f49a8712a096a5c21564cd66fd2f7da739487f028192ebe3c",
+    "rust-1.31.1-x86_64-unknown-linux-gnu.tar.xz": "b2a13544161f6a5a5d9d4130f2c4ce8043c2d3a7cd429310a51080111fbf957a",
+    "rust-1.32.0-aarch64-unknown-linux-gnu.tar.gz": "60def40961728212da4b3a9767d5a2ddb748400e150a5f8a6d5aa0e1b8ba1cee",
+    "rust-1.32.0-aarch64-unknown-linux-gnu.tar.xz": "a530cfc8aadd2cec3b8c63dfb46c940ad8b4b18131641a3da1601ec380619f11",
+    "rust-1.32.0-x86_64-apple-darwin.tar.gz": "f0dfba507192f9b5c330b5984ba71d57d434475f3d62bd44a39201e36fa76304",
+    "rust-1.32.0-x86_64-apple-darwin.tar.xz": "fa1e3bb49071f1d2a84e15d1bd519948e53417eb2c3425cd8495bce3cc8d31eb",
+    "rust-1.32.0-x86_64-pc-windows-msvc.tar.gz": "51b0b64cc843d6e443bf19f89b61addb532ea61e02777c7e80a185a9a263776b",
+    "rust-1.32.0-x86_64-pc-windows-msvc.tar.xz": "8d9af7f6336738a07e24db96126f44f33321a65f8b8c122d60aa56e74ffabe96",
+    "rust-1.32.0-x86_64-unknown-freebsd.tar.gz": "20d062493d01f1816014fe9dbe883bda06f1828a6ddbfb7ee5e4f1df20eb1c3a",
+    "rust-1.32.0-x86_64-unknown-freebsd.tar.xz": "802c352b27e45e95fbeefbf3a91bb79c0172f6f40710bf052a7dca44cc5d85cd",
+    "rust-1.32.0-x86_64-unknown-linux-gnu.tar.gz": "e024698320d76b74daf0e6e71be3681a1e7923122e3ebd03673fcac3ecc23810",
+    "rust-1.32.0-x86_64-unknown-linux-gnu.tar.xz": "e7ee1fc3c6e2d2dec4bfdc0b38ecc3a80828655bdf6bb44d97c7a9ea76134f86",
+    "rust-1.33.0-aarch64-unknown-linux-gnu.tar.gz": "a308044e4076b62f637313ea803fa0a8f340b0f1b53136856f2c43afcabe5387",
+    "rust-1.33.0-aarch64-unknown-linux-gnu.tar.xz": "e3a9608b234fb3165e892279c550645905c360303b5ffa7b8b1e09f00c42deb1",
+    "rust-1.33.0-x86_64-apple-darwin.tar.gz": "864e7c074a0b88e38883c87c169513d072300bb52e1d320a067bd34cf14f66bd",
+    "rust-1.33.0-x86_64-apple-darwin.tar.xz": "0b4ee9ed15dfd88cb607de961c7795031e1863ca63fa58dca942923cb890a22c",
+    "rust-1.33.0-x86_64-pc-windows-msvc.tar.gz": "b477be7a27799397cf90f09ef5efe21b1af02f48ec9bc1be3306ad298aaf8841",
+    "rust-1.33.0-x86_64-pc-windows-msvc.tar.xz": "c30ff61b9b0e9df9368ef4a493948e039fcf7a8bd3d7e90aa4ef3da570389219",
+    "rust-1.33.0-x86_64-unknown-freebsd.tar.gz": "31ab015c1807a7c231ee74b4fb367f3fa43551d6c49cd2f7b63541f1fef0cc72",
+    "rust-1.33.0-x86_64-unknown-freebsd.tar.xz": "ef55db419e21f4dac14c52207cdeee202db8badc02ff85e882bf78c4d20aedc4",
+    "rust-1.33.0-x86_64-unknown-linux-gnu.tar.gz": "6623168b9ee9de79deb0d9274c577d741ea92003768660aca184e04fe774393f",
+    "rust-1.33.0-x86_64-unknown-linux-gnu.tar.xz": "3d93d277d6cd24b4840225b3380c9c80e64520fd0f6c84bd9783e46e5f45e97a",
+    "rust-1.34.0-aarch64-unknown-linux-gnu.tar.gz": "370c3a8fb9a69df36d645a95e622fb59ac5b513baecddde706cedaf20defa269",
+    "rust-1.34.0-aarch64-unknown-linux-gnu.tar.xz": "86f94dd8a6fe33fb7acc0b62505a422013a3a36add461687faecfcd2ba550a56",
+    "rust-1.34.0-x86_64-apple-darwin.tar.gz": "e6bea8d865cc7341c17fa3b8f25f7989e6b04f53e9da24878addc524f3a32664",
+    "rust-1.34.0-x86_64-apple-darwin.tar.xz": "1aa67c7b40ac4e9ccdddd62e99a9bc1c28734cadb533e8c69737fc535b73e0df",
+    "rust-1.34.0-x86_64-pc-windows-msvc.tar.gz": "471325ceb9492239f7bb399cb88df230791966c0f76f01020aa9d2868bafcfb5",
+    "rust-1.34.0-x86_64-pc-windows-msvc.tar.xz": "ffadcec662199d0d513d6eb452ef864839a93b59738a38f3453b279a64c537be",
+    "rust-1.34.0-x86_64-unknown-freebsd.tar.gz": "bc9048312bee935ae1e7417e2f6840ea76fe370752915ca605ec7dc5b606dba9",
+    "rust-1.34.0-x86_64-unknown-freebsd.tar.xz": "7d478df3efbdfa551ccf4621a68696c33944a78e1d1bdb5b0c91f57257bd637b",
+    "rust-1.34.0-x86_64-unknown-linux-gnu.tar.gz": "170647ed41b497dc937a6b2556700210bc4be187b1735029ef9ccf52e2cb5ab8",
+    "rust-1.34.0-x86_64-unknown-linux-gnu.tar.xz": "8182f18251f25de133c5b076ef32821e59a7a5b9eddf6417ac73d6415394a110",
+    "rust-1.35.0-aarch64-unknown-linux-gnu.tar.gz": "31e6da56e67838fd2874211ae896a433badf67c13a7b68481f1d5f7dedcc5952",
+    "rust-1.35.0-aarch64-unknown-linux-gnu.tar.xz": "2e3b7988f631f382092e67e33b1a4e5bf34d67a2a33835d760d07c76e405dcde",
+    "rust-1.35.0-x86_64-apple-darwin.tar.gz": "ac14b1c7dc330dcb53d8641d74ebf9b32aa8b03b9d650bcb9258030d8b10dbd6",
+    "rust-1.35.0-x86_64-apple-darwin.tar.xz": "2f29835a21fcdd5f6e111ff63dd38f42df3218c5695757aa8bc17457f7f1bd05",
+    "rust-1.35.0-x86_64-pc-windows-msvc.tar.gz": "4f8935cea6b68c447b5fcb5974e0df3fefc77d15ab4f7d535779f06c3e4adc84",
+    "rust-1.35.0-x86_64-pc-windows-msvc.tar.xz": "4d56aa487dfc5aa4c43a6a0511c8e6b497f92438047041ce5f6e15c63c1ff7bb",
+    "rust-1.35.0-x86_64-unknown-freebsd.tar.gz": "a6a3c7983a880d8e9bf475735b725c47de68831abc22da980e44a3aca5c5bd89",
+    "rust-1.35.0-x86_64-unknown-freebsd.tar.xz": "36fe834112abab615df403c3f1e1b9ae924e27d98d5fea2f88eea582ccb80227",
+    "rust-1.35.0-x86_64-unknown-linux-gnu.tar.gz": "cf600e2273644d8629ed57559c70ca8db4023fd0156346facca9ab3ad3e8f86c",
+    "rust-1.35.0-x86_64-unknown-linux-gnu.tar.xz": "764c56a1855ebcd45b47ee0d47c8b36ae05074bbd425ad35f415b34180f57968",
+    "rust-1.35.0-x86_64-unknown-linux-musl.tar.gz": "3704219a4d16e4e9df22051877274c7b246d12658b447a85efa0b16037e98093",
+    "rust-1.35.0-x86_64-unknown-linux-musl.tar.xz": "5332ed98c40d127737be03f11d6233303739792d2861224981e4c347cc37fbdc",
+    "rust-1.36.0-aarch64-unknown-linux-gnu.tar.gz": "db78c24d93756f9fe232f081dbc4a46d38f8eec98353a9e78b9b164f9628042d",
+    "rust-1.36.0-aarch64-unknown-linux-gnu.tar.xz": "009a55688042c8f64cab97a1019d2d4e2c5ebc932acaa9eadecbcb7cd8193183",
+    "rust-1.36.0-x86_64-apple-darwin.tar.gz": "91f151ec7e24f5b0645948d439fc25172ec4012f0584dd16c3fb1acb709aa325",
+    "rust-1.36.0-x86_64-apple-darwin.tar.xz": "3507ccf18600dc79d69e5f3d6ac0454d4849c41922db107a1bcb7b4fefa2fd55",
+    "rust-1.36.0-x86_64-pc-windows-msvc.tar.gz": "c7c9f7f996d195f464b84eaf0b6a068b41d1480e088b12e5134f85a5a144bd30",
+    "rust-1.36.0-x86_64-pc-windows-msvc.tar.xz": "9793ada44d16b8624cb338a04a9816fb79fbc1384272b00853319617bba613bc",
+    "rust-1.36.0-x86_64-unknown-freebsd.tar.gz": "eeeb1e9d0d7823c55f00f434789696e7249f465ba5966a5ab479040e3912c0e7",
+    "rust-1.36.0-x86_64-unknown-freebsd.tar.xz": "5823cd69fa159e7eb25a10ffe17c39ed17e409ab2c79f0238f5eb70f96cef8ea",
+    "rust-1.36.0-x86_64-unknown-linux-gnu.tar.gz": "15e592ec52f14a0586dcebc87a957e472c4544e07359314f6354e2b8bd284c55",
+    "rust-1.36.0-x86_64-unknown-linux-gnu.tar.xz": "7e8dfbbba493b7efa762daf9980406cd7266f7224e7895a9940b86ef7614f738",
+    "rust-1.36.0-x86_64-unknown-linux-musl.tar.gz": "74931a19a4854642cd1593a3bdcf8a832ab5b134a3cfacea9003f9ea387ca88d",
+    "rust-1.36.0-x86_64-unknown-linux-musl.tar.xz": "e4aea102036c7abedf8e66bde71c2e84b14bafb17f10e78eae61b10e27eecc18",
+    "rust-1.37.0-aarch64-unknown-linux-gnu.tar.gz": "263ef98fa3a6b2911b56f89c06615cdebf6ef676eb9b2493ad1539602f79b6ba",
+    "rust-1.37.0-aarch64-unknown-linux-gnu.tar.xz": "aed553dbf457d8239eb3b01d4a2f422672772a0114aa43647294eca1b358d219",
+    "rust-1.37.0-x86_64-apple-darwin.tar.gz": "b2310c97ffb964f253c4088c8d29865f876a49da2a45305493af5b5c7a3ca73d",
+    "rust-1.37.0-x86_64-apple-darwin.tar.xz": "d753cbaa2a3bbd968c9c971db5a950bee3ef879c3631b07d6066a2666293884f",
+    "rust-1.37.0-x86_64-pc-windows-msvc.tar.gz": "4e42652e7bf7ef13b7fdf8c64d0adf4e18c6a765e482e4c62a4dded36d4d08e1",
+    "rust-1.37.0-x86_64-pc-windows-msvc.tar.xz": "f3a719a440461559980fdf05a90c8f02e6193b5706f46bf7279b570e658c2e76",
+    "rust-1.37.0-x86_64-unknown-freebsd.tar.gz": "58a794fa9da9c14cefda55e7d4d13276517265a05a49f3a048033aee8870388f",
+    "rust-1.37.0-x86_64-unknown-freebsd.tar.xz": "544ed80652da7ccbaa09770ec64a770cda6c5b65939c6240b39e9a0c781a047c",
+    "rust-1.37.0-x86_64-unknown-linux-gnu.tar.gz": "cb573229bfd32928177c3835fdeb62d52da64806b844bc1095c6225b0665a1cb",
+    "rust-1.37.0-x86_64-unknown-linux-gnu.tar.xz": "b498a84947012064363607c29cdd2ba6fab9a5260212ec4a7151dafd0d079081",
+    "rust-1.37.0-x86_64-unknown-linux-musl.tar.gz": "d97da4f1c1f89142b6885b006f8686c4035d25e95cfb988f961ce844e5b80dbf",
+    "rust-1.37.0-x86_64-unknown-linux-musl.tar.xz": "3758be67b9a8ca7878d6c6fe3da635fca404620ea00085bc378cdd152a2203f0",
+    "rust-1.38.0-aarch64-unknown-linux-gnu.tar.gz": "06afd6d525326cea95c3aa658aaa8542eab26f44235565bb16913ac9d12b7bda",
+    "rust-1.38.0-aarch64-unknown-linux-gnu.tar.xz": "6ab06ff04cc41e612dd55f3358a1239be8cceb0ad8018996d39ae3e3b23156d2",
+    "rust-1.38.0-x86_64-apple-darwin.tar.gz": "bd301b78ddcd5d4553962b115e1dca5436dd3755ed323f86f4485769286a8a5a",
+    "rust-1.38.0-x86_64-apple-darwin.tar.xz": "eadf50d2c64bd350e48aa3d87b5f97ceefa6788dc7e4c8461eac2102404caccc",
+    "rust-1.38.0-x86_64-pc-windows-msvc.tar.gz": "99e2e22084a7c6a114f5353800677e1f7eb4b8cecf1b8841e21ac9579fe8da8c",
+    "rust-1.38.0-x86_64-pc-windows-msvc.tar.xz": "b69e251dc38cf1b57ddf9a1941c644c48adc560d2e06d2220de0a3c9478d01d0",
+    "rust-1.38.0-x86_64-unknown-freebsd.tar.gz": "a765b1f01a387b15b576b67c77e02609a6d9a6769584742f66f0cac1944c0f7f",
+    "rust-1.38.0-x86_64-unknown-freebsd.tar.xz": "23b610e229ea1d703be1d5384ff948bcef579aacfe8e488c7b8678c2df4f278a",
+    "rust-1.38.0-x86_64-unknown-linux-gnu.tar.gz": "adda26b3f0609dbfbdc2019da4a20101879b9db2134fae322a4e863a069ec221",
+    "rust-1.38.0-x86_64-unknown-linux-gnu.tar.xz": "4e9a2ef90679a66c9f8c62b113b018866303645a69c4812d8290d8a7162ea190",
+    "rust-1.38.0-x86_64-unknown-linux-musl.tar.gz": "14f064fbd34b332866d96db12329ddd6d40525d69d7b8532d3d5387da1217e79",
+    "rust-1.38.0-x86_64-unknown-linux-musl.tar.xz": "939264abe2e8a16bc62451c24084afcbdcca9d0810446538ddd8902d2a63a500",
+    "rust-1.39.0-aarch64-unknown-linux-gnu.tar.gz": "e27dc8112fe577012bd88f30e7c92dffd8c796478ce386c49465c03b6db8209f",
+    "rust-1.39.0-aarch64-unknown-linux-gnu.tar.xz": "a3f6943ad00bbf7131c8571b21f641082c8ac8298ee3a8bd5428e96743e31e05",
+    "rust-1.39.0-x86_64-apple-darwin.tar.gz": "3736d49c5e9592844e1a5d5452883aeaf8f1e25d671c1bc8f01e81c1766603b5",
+    "rust-1.39.0-x86_64-apple-darwin.tar.xz": "4434bc3e775a649213a664a04eba16cbe5a3379165006035c1cf652bc07f2ebd",
+    "rust-1.39.0-x86_64-pc-windows-msvc.tar.gz": "3c96b221af3343c04bf81e621a0b97a2452ae1803ecc2841a162690d8ebfe46f",
+    "rust-1.39.0-x86_64-pc-windows-msvc.tar.xz": "e6e1cd6cff4e0599c49cf0637055d06496545845639ffdf29f36653bd02ba4e5",
+    "rust-1.39.0-x86_64-unknown-freebsd.tar.gz": "9cb25742e727bab0da5feb957ef61f7ffc836b4d5d0e6cabfdf28fb68caf5fdd",
+    "rust-1.39.0-x86_64-unknown-freebsd.tar.xz": "adb0a434d515d6870e1f22217977e771c12ef1a73a772369dacc12b7b92fab16",
+    "rust-1.39.0-x86_64-unknown-linux-gnu.tar.gz": "b10a73e5ba90034fe51f0f02cb78f297ed3880deb7d3738aa09dc5a4d9704a25",
+    "rust-1.39.0-x86_64-unknown-linux-gnu.tar.xz": "095874d294355e95236e07e3e82635d95b8872f751ad21c5d1d9b53ef443e536",
+    "rust-1.39.0-x86_64-unknown-linux-musl.tar.gz": "f6610742ad223cdd9420707454e4814baf14ab79d73dc033ef190eed28e05cbc",
+    "rust-1.39.0-x86_64-unknown-linux-musl.tar.xz": "cbb30c3a3ed58632e6c5a328afa3968baa96f9785de7cff67a305ac0f5c54e26",
+    "rust-1.40.0-aarch64-unknown-linux-gnu.tar.gz": "639271f59766d291ebdade6050e7d05d61cb5c822a3ef9a1e2ab185fed68d729",
+    "rust-1.40.0-aarch64-unknown-linux-gnu.tar.xz": "5817c8c3a919117ae6dac8e9b3039d4e614cc9bed8040bf64fcf2e683b8c6245",
+    "rust-1.40.0-x86_64-apple-darwin.tar.gz": "749ca5e0b94550369cc998416b8854c13157f5d11d35e9b3276064b6766bcb83",
+    "rust-1.40.0-x86_64-apple-darwin.tar.xz": "14f047b4fbd3a7db1cba49c86a066650703a354db360fefec0e35e8dc63a3dea",
+    "rust-1.40.0-x86_64-pc-windows-msvc.tar.gz": "64d98af9b9114a3aaea096ba74c43cad75a2502fb682e941b4701f5d2a2b9272",
+    "rust-1.40.0-x86_64-pc-windows-msvc.tar.xz": "975dda13b8b723701e86927c6f99e9250d50d1e02968cbcb4587ecdaa606ad51",
+    "rust-1.40.0-x86_64-unknown-freebsd.tar.gz": "d1a58e9f743f4a55513f74e41c90ab7b291413ce46336c138762fd9aa6605b32",
+    "rust-1.40.0-x86_64-unknown-freebsd.tar.xz": "889e2b4f8c22ce35dee26b044537ae47c080995fd274b0b04d1a38c424e8a4fe",
+    "rust-1.40.0-x86_64-unknown-linux-gnu.tar.gz": "fc91f8b4bd18314e83a617f2389189fc7959146b7177b773370d62592d4b07d0",
+    "rust-1.40.0-x86_64-unknown-linux-gnu.tar.xz": "37492d6467bcea611b2c7388aed50b655524f81410e255142ef6cfb6cef1ec53",
+    "rust-1.40.0-x86_64-unknown-linux-musl.tar.gz": "4fbc6a60c31d89d922cb8c3630a92d7d959a8ec8fa48b51bed9eb67eb0d30b33",
+    "rust-1.40.0-x86_64-unknown-linux-musl.tar.xz": "055e5de669363503ac192d25a50d18ad8e5f34a4a9a7c16aafa314209c219f67",
+    "rust-1.41.0-aarch64-unknown-linux-gnu.tar.gz": "79ddfb5e2563d0ee09a567fbbe121a2aed3c3bc61255b2787f2dd42183a10f27",
+    "rust-1.41.0-aarch64-unknown-linux-gnu.tar.xz": "5cde80ad53b7e238625fe6702f04091ed0c89935a92f1dc00d5b37f3aad94abd",
+    "rust-1.41.0-x86_64-apple-darwin.tar.gz": "b6504003ab70b11f278e0243a43ba9d6bf75e8ad6819b4058a2b6e3991cc8d7a",
+    "rust-1.41.0-x86_64-apple-darwin.tar.xz": "f97d9d1b776317b0602552cab9e7d12c87d9383181ba00006f902611ae2780ab",
+    "rust-1.41.0-x86_64-pc-windows-msvc.tar.gz": "4c43a64e83c28bfb788782b01d95034ecc59bf9846006aa1deb6986c139b9f9d",
+    "rust-1.41.0-x86_64-pc-windows-msvc.tar.xz": "aa2cd2d5f0632a8680b61d17ac4d4030549f9ad9af35267beed2fc19e430ccdd",
+    "rust-1.41.0-x86_64-unknown-freebsd.tar.gz": "ae1093a1e476f5c7b1c1f59f986d64b5f82a76b865c9823bcc3d5061bb93ff9f",
+    "rust-1.41.0-x86_64-unknown-freebsd.tar.xz": "b240647f8bfa98cc51a553b2c9463c67624cfde7024cdc7c8b2341ba457b1823",
+    "rust-1.41.0-x86_64-unknown-linux-gnu.tar.gz": "343ba8ef7397eab7b3bb2382e5e4cb08835a87bff5c8074382c0b6930a41948b",
+    "rust-1.41.0-x86_64-unknown-linux-gnu.tar.xz": "7ab76558551865a93a92952ba142376b35893fe09fc8a445b3e741739e1c4afa",
+    "rust-1.41.0-x86_64-unknown-linux-musl.tar.gz": "ff7345dde2f5bc295ed8ae50f0eee54b8dd697e712f86095a3378bb4dcfeea70",
+    "rust-1.41.0-x86_64-unknown-linux-musl.tar.xz": "cbdc66765790c8a7c94c2a7305f1435dff9c77a4d24d8f34e0662c501c4d547c",
+    "rust-1.42.0-aarch64-unknown-linux-gnu.tar.gz": "fdd39f856a062af265012861949ff6654e2b7103be034d046bec84ebe46e8d2d",
+    "rust-1.42.0-aarch64-unknown-linux-gnu.tar.xz": "b30833fd98b3d2a5886e93473e100c32a319d741a305eda67ea5fc24c85e5f9a",
+    "rust-1.42.0-x86_64-apple-darwin.tar.gz": "db1055c46e0d54b99da05e88c71fea21b3897e74a4f5ff9390e934f3f050c0a8",
+    "rust-1.42.0-x86_64-apple-darwin.tar.xz": "6029bd3414c6cb919ecf1d8e7dda6a0c4b50e998e78d5aa69a82d85692a04873",
+    "rust-1.42.0-x86_64-pc-windows-msvc.tar.gz": "4a3131ff6d2b04d120069e0ba494a6418db1c691fc8e4627cf1aaf2ffbaf5ad9",
+    "rust-1.42.0-x86_64-pc-windows-msvc.tar.xz": "fa76f38f161ef5c2ba5890862280c49094ccf414934782234df239ed4c38cc71",
+    "rust-1.42.0-x86_64-unknown-freebsd.tar.gz": "230bcf17e4383fba85d3c87fe25d17737459fe561a5f4668fe70dcac2da4e17c",
+    "rust-1.42.0-x86_64-unknown-freebsd.tar.xz": "1fc57da200f30260b2eebad4d5b3a58e7dd7afb5f1614e42a3b7330cc05d666b",
+    "rust-1.42.0-x86_64-unknown-linux-gnu.tar.gz": "7d1e07ad9c8a33d8d039def7c0a131c5917aa3ea0af3d0cc399c6faf7b789052",
+    "rust-1.42.0-x86_64-unknown-linux-gnu.tar.xz": "8c94fba97589f1548bbd0652ff337169a7e47b4cb08accd9973722fe830c27ff",
+    "rust-1.42.0-x86_64-unknown-linux-musl.tar.gz": "1c6bcdf5dfb51c52e7afd33fddd799a0814cd80b443137a8e9eec5563de6849d",
+    "rust-1.42.0-x86_64-unknown-linux-musl.tar.xz": "d99252d6d05cabb002964fb9521f2d01f4d5396cf41253305c998ad2418b1c97",
+    "rust-1.43.0-aarch64-unknown-linux-gnu.tar.gz": "e5fa55f333c10cdae43d147438a80ffb435d6c7b9681cd2e2f0857c024556856",
+    "rust-1.43.0-aarch64-unknown-linux-gnu.tar.xz": "5d1bcbf7575be72c4775c89098366158ee87905423342196a6ef0c1b3d3f1140",
+    "rust-1.43.0-x86_64-apple-darwin.tar.gz": "504e8efb2cbb36f5a3db7bb36f339a1e5216082c910ad19039c370505cfbde99",
+    "rust-1.43.0-x86_64-apple-darwin.tar.xz": "1abaf0d5c954ff5d0c13f03efbdc396b86a849352f5258c72c2346ec0d631d61",
+    "rust-1.43.0-x86_64-pc-windows-msvc.tar.gz": "78dea49969addb3ef7a3a3816482534828a5140c866a828be69ccfeb44972a3b",
+    "rust-1.43.0-x86_64-pc-windows-msvc.tar.xz": "0fcea356a9cadb91cb1e2ec310b924792bad79904bdb9cee2290479e35967b8b",
+    "rust-1.43.0-x86_64-unknown-freebsd.tar.gz": "2555aa83d1559af19054befdaea3ae560374376f9973aa3dad2c41fcd2eb84d4",
+    "rust-1.43.0-x86_64-unknown-freebsd.tar.xz": "4ffbcef916d8bc4d82ce218c28050d90bb8d456b757c9dcedb00ba9491b8a7a3",
+    "rust-1.43.0-x86_64-unknown-linux-gnu.tar.gz": "069f34fa5cef92551724c83c36360df1ac66fe3942bc1d0e4d341ce79611a029",
+    "rust-1.43.0-x86_64-unknown-linux-gnu.tar.xz": "af633676caffaaecfb2600ec617d84e41811e7a6fe438760a97c5404afecdd6b",
+    "rust-1.43.0-x86_64-unknown-linux-musl.tar.gz": "dcb022649bc1998d8e103f42cb0847afc57fcd303bc9fdfde057b2b53436605a",
+    "rust-1.43.0-x86_64-unknown-linux-musl.tar.xz": "c63e4c1b4c56d4118fd21de2bbecb05d1d9bde156bb1c3f6754854773dd93cc4",
+    "rust-1.44.0-aarch64-unknown-linux-gnu.tar.gz": "bcc916003cb9c7ff44f5f9af348020b422dbc5bd4fe49bdbda2de6ce0a1bb745",
+    "rust-1.44.0-aarch64-unknown-linux-gnu.tar.xz": "077bcf4119007817fa265cb0062c908ac03ceddf699bc0fc50a21dc4e90e46e8",
+    "rust-1.44.0-x86_64-apple-darwin.tar.gz": "f20388b80b2b0a8b122d89058f785a2cf3b14e93bcac53471d60fdb4106ffa35",
+    "rust-1.44.0-x86_64-apple-darwin.tar.xz": "5e214e9bfa225b6c3795a5b81810c4140c3fa90a508a2bab0ea638b1cbd97694",
+    "rust-1.44.0-x86_64-pc-windows-msvc.tar.gz": "127cf6569c4958e362f06f850eec6cba0ad69474ab15fef2dee740aee45a3169",
+    "rust-1.44.0-x86_64-pc-windows-msvc.tar.xz": "08f2ba598d5974562be9ae0faafde8ba952bf68d52875572b7f99d77abe3b48c",
+    "rust-1.44.0-x86_64-unknown-freebsd.tar.gz": "e2ad3224790d2283d7ef66d5e1f08cec688f1c29cf53326c9a6c28fb4914b6a1",
+    "rust-1.44.0-x86_64-unknown-freebsd.tar.xz": "be1ed09ac71f3d8ffc232ea02dfc1ec987ad9a21b226aee371c90184ea91f589",
+    "rust-1.44.0-x86_64-unknown-linux-gnu.tar.gz": "eaa34271b4ac4d2c281831117d4d335eed0b37fe7a34477d9855a6f1d930a624",
+    "rust-1.44.0-x86_64-unknown-linux-gnu.tar.xz": "1c0ff71c36d35f214d7c34ce139b256bd517adce08d3da9fafa96a9bab8a624f",
+    "rust-1.44.0-x86_64-unknown-linux-musl.tar.gz": "dabcba42caeba91874cf10640f70fb580bdab136ce56211ac341f10d311f6ebc",
+    "rust-1.44.0-x86_64-unknown-linux-musl.tar.xz": "1b5a82d62c1d2acc633e43cd6076f55b190c26ca9fa22bd51cf2330d3ea43b92",
+    "rust-1.45.0-aarch64-unknown-linux-gnu.tar.gz": "b727be0ecdee5fb88775b784758a09ab696293048a80288999b8a6f78b160212",
+    "rust-1.45.0-aarch64-unknown-linux-gnu.tar.xz": "9901f2c1d9e5025fb9b6fe65b9e96ae47acdc160b8094f8667e75795e20f6a24",
+    "rust-1.45.0-x86_64-apple-darwin.tar.gz": "8e91f99ffbf5ae86d659d3515315a8e92ef44210102672c1536a9902cc182401",
+    "rust-1.45.0-x86_64-apple-darwin.tar.xz": "e6768061857a1cab3aafbb400258d4af4f3134eddd8307ca9e469dcd59d34a53",
+    "rust-1.45.0-x86_64-pc-windows-msvc.tar.gz": "7d1118568b83fd1da5312de95ca6f30d4f21dae57073c00a216437e4c02733cc",
+    "rust-1.45.0-x86_64-pc-windows-msvc.tar.xz": "c8c488791f95a2334de78b4f36104449b8e41d4bc6d377e5f5d717cd0f75551c",
+    "rust-1.45.0-x86_64-unknown-freebsd.tar.gz": "3d09db6a127558cfdb4fc44106e7d478bb8f6cc6148d536b90d30610181fc656",
+    "rust-1.45.0-x86_64-unknown-freebsd.tar.xz": "94dcf280f2a76e5a2866892c6ca70414d647b3e6fe56141a70a840a504c6235a",
+    "rust-1.45.0-x86_64-unknown-linux-gnu.tar.gz": "c34ed8722759fd60c94dbc9069833da5b3b873dcd19afaa9b34c1ce2c2cfa229",
+    "rust-1.45.0-x86_64-unknown-linux-gnu.tar.xz": "2703735ab54dedcd4540de651f8bf6bb761ee930abb0187d3138696067c9b38d",
+    "rust-1.45.0-x86_64-unknown-linux-musl.tar.gz": "ca5c4670f511ff225d097b5602d4a2ce984b4cd02c6aedc3be1279570c6475cb",
+    "rust-1.45.0-x86_64-unknown-linux-musl.tar.xz": "66819552563333fd7b2e82570009e3c05acf2ea0ad27390d20f4c56e37935fdb",
+    "rust-1.46.0-aarch64-unknown-linux-gnu.tar.gz": "f0c6d630f3dedb3db69d69ed9f833aa6b472363096f5164f1068c7001ca42aeb",
+    "rust-1.46.0-aarch64-unknown-linux-gnu.tar.xz": "81146b6942665db5588f7b52ff0b2fbb7208dfe3d6ebd6cf9016e1cf1d487475",
+    "rust-1.46.0-x86_64-apple-darwin.tar.gz": "82d61582a3772932432a99789c3b3bd4abe6baca339e355048ca9efb9ea5b4db",
+    "rust-1.46.0-x86_64-apple-darwin.tar.xz": "463e90e6f649cb1e4eb5f8d906aadf7e8107b9855ded295bfc44a86213b2c0d0",
+    "rust-1.46.0-x86_64-pc-windows-msvc.tar.gz": "3545eb66ed7c6222ca4eb9e990d4bef63edbac9b580387bf7035501ee35d453f",
+    "rust-1.46.0-x86_64-pc-windows-msvc.tar.xz": "b590c0bb20489bfc2491c2c8da7038fdc7461dfb8f37105b216e2305da293861",
+    "rust-1.46.0-x86_64-unknown-freebsd.tar.gz": "30d8b05073b23f0621ed00276208589dcd7669776b752a67c66c9c928ebbe258",
+    "rust-1.46.0-x86_64-unknown-freebsd.tar.xz": "ddc68e748f14359be6bfcf8f1d470fd250d31d4dbfa7b21ea6668a5e2691e400",
+    "rust-1.46.0-x86_64-unknown-linux-gnu.tar.gz": "e3b98bc3440fe92817881933f9564389eccb396f5f431f33d48b979fa2fbdcf5",
+    "rust-1.46.0-x86_64-unknown-linux-gnu.tar.xz": "9877249e71f13775661feb9f5c922c094bfd87ba8a3f2b41532fa56b8a44b70e",
+    "rust-1.46.0-x86_64-unknown-linux-musl.tar.gz": "57aa5ca25bbd3da4eea6fc411b0fe7e1dbc683230a3f58ec84b9f70c5606909b",
+    "rust-1.46.0-x86_64-unknown-linux-musl.tar.xz": "b16e65c09529f36f5b74b8595ae4be4d79be9e094c88b9913cd5389a552782aa",
+    "rust-1.47.0-aarch64-unknown-linux-gnu.tar.gz": "753c905e89a714ab9bce6fe1397b721f29c0760c32f09d2f328af3d39919c8e6",
+    "rust-1.47.0-aarch64-unknown-linux-gnu.tar.xz": "e9d8c864482f12ab21fc0f351b006c2fb24733a39ea75c172b7a443d7a0e2a06",
+    "rust-1.47.0-x86_64-apple-darwin.tar.gz": "84e5be6c5c78734deba911dcf80316be1e4c7da2c59413124d039ad96620612f",
+    "rust-1.47.0-x86_64-apple-darwin.tar.xz": "d93ab2b932b90ba1f41969677b70218b199b2438e2b8d8bbfa379b2cd99de14d",
+    "rust-1.47.0-x86_64-pc-windows-msvc.tar.gz": "c9f93f8c821090e1c96384bef564e9c9d86bd13ef8d1116b3f17e124f07f55cc",
+    "rust-1.47.0-x86_64-pc-windows-msvc.tar.xz": "56482b250a282455652ac289596bf64e8630bf8b841157c425ef0df87eba638c",
+    "rust-1.47.0-x86_64-unknown-freebsd.tar.gz": "650af0288d099c9debef7258a27caf15dd8aaf033ee1a099b4c5216c95ecfeaa",
+    "rust-1.47.0-x86_64-unknown-freebsd.tar.xz": "04d541022735759d22cf74a6a0a06aaa82f0a1aca64ce858616e86af38cf5a2b",
+    "rust-1.47.0-x86_64-unknown-linux-gnu.tar.gz": "d0e11e1756a072e8e246b05d54593402813d047d12e44df281fbabda91035d96",
+    "rust-1.47.0-x86_64-unknown-linux-gnu.tar.xz": "123f8840258d5f9c858f957aa3930d045c6bdf80074d081c1ab4ef0c1d6e1c73",
+    "rust-1.47.0-x86_64-unknown-linux-musl.tar.gz": "63be7601a9ecc552e3cb7a7b8f781bc122f756e8c61e4da4b76f995af039e53f",
+    "rust-1.47.0-x86_64-unknown-linux-musl.tar.xz": "14c9fbb5b9bbe8b16cd5a95ea6030a6682505cb3a8fb0c8e7c8df7560cea172a",
+    "rust-1.48.0-aarch64-unknown-linux-gnu.tar.gz": "c4769418d8d89f432e4a3a21ad60f99629e4b13bbfc29aef7d9d51c4e8ee8a8a",
+    "rust-1.48.0-aarch64-unknown-linux-gnu.tar.xz": "bd5a8b4c891c1f569381c0c42a61a1f5c5aa0b34d34d6cd3ed6e5d37f24c00d4",
+    "rust-1.48.0-aarch64-unknown-linux-musl.tar.gz": "ac4de580a28e45a9773b389b296d13bfeeb08263cb1f8343859577a54940dae9",
+    "rust-1.48.0-aarch64-unknown-linux-musl.tar.xz": "adcd06616886959da1cb18c646912f9ce65b1f45b294585dae5efdfc269e6e7d",
+    "rust-1.48.0-x86_64-apple-darwin.tar.gz": "20e727cad10f43e3abcedb2a80979ae26923038e0e8a855e8a783da255054113",
+    "rust-1.48.0-x86_64-apple-darwin.tar.xz": "33dabae51fbe01061c6ef0bffddc585a34516543e51ffff1e09e80b6245cee1b",
+    "rust-1.48.0-x86_64-pc-windows-msvc.tar.gz": "0fdf41bb9b45e923000205b08329e15124f01b9b32986d73cd36625f3c7d883b",
+    "rust-1.48.0-x86_64-pc-windows-msvc.tar.xz": "e105801b40d2ae45190aae3d2f15f2be3234294dad8d522b59c8c27739d4cf66",
+    "rust-1.48.0-x86_64-unknown-freebsd.tar.gz": "21e24489ffaabe517e5e87572707784d5b471646164109b248957a2d32e7a8b9",
+    "rust-1.48.0-x86_64-unknown-freebsd.tar.xz": "12b356fea23f05f4a724bb413d8146d279a0c89ba60672f5c2a027abcc10b8c6",
+    "rust-1.48.0-x86_64-unknown-linux-gnu.tar.gz": "950420a35b2dd9091f1b93a9ccd5abc026ca7112e667f246b1deb79204e2038b",
+    "rust-1.48.0-x86_64-unknown-linux-gnu.tar.xz": "58270d8e10f72e1712ba08db6b8f8ffca64a63d1a7b220688b59fb05655b3843",
+    "rust-1.48.0-x86_64-unknown-linux-musl.tar.gz": "4ed9627f57b4e0b9807fc5e7513d9731f4791668b7f875b9e44e65e21072c56f",
+    "rust-1.48.0-x86_64-unknown-linux-musl.tar.xz": "9c4e7d9e0dcb08d08432fb5bc1672ee26f4e722ddb1dd5a548dfe5794a1adebe",
+    "rust-1.49.0-aarch64-apple-darwin.tar.gz": "ce7d689e6f73dd9c07b672ba23dabe5159fa8c194dce71b4f3f95baeaf564082",
+    "rust-1.49.0-aarch64-apple-darwin.tar.xz": "b91c7ef52144af18f9ebfe7ac3d1ffb248bb41130bb0853e1a7ac282d34d26fb",
+    "rust-1.49.0-aarch64-unknown-linux-gnu.tar.gz": "b551bd482041307fa3373a687d6d6a2c4c0931c2e0a68b8b75dc80bc5cf5f002",
+    "rust-1.49.0-aarch64-unknown-linux-gnu.tar.xz": "0d887344a6d048ddb9f9acc215054e2fe9d5723bb2d8904daf77a06761847b69",
+    "rust-1.49.0-aarch64-unknown-linux-musl.tar.gz": "0a43d96a508c720520328112d609916d062f866a5c35f1db8f906284035d6d98",
+    "rust-1.49.0-aarch64-unknown-linux-musl.tar.xz": "44c77e1f8c9d5c7c9937de1e22b5a9878b85358ef882224b2da7deef79dc7d66",
+    "rust-1.49.0-x86_64-apple-darwin.tar.gz": "fe3e248bc4b0ee0a2595693687ad845c8a8bda824a56c9321520bcca02433716",
+    "rust-1.49.0-x86_64-apple-darwin.tar.xz": "7099180a5842931738299a5ee3326b3ade477ed1ac5b46e1af5bf515d6022460",
+    "rust-1.49.0-x86_64-pc-windows-msvc.tar.gz": "5340831dcf98344de4a6888b50237f82568a97a46d9814f1400720dde0c7b6e5",
+    "rust-1.49.0-x86_64-pc-windows-msvc.tar.xz": "82242723250fce46d8d9b29d67ff241fe189200c5caf2d6e750bea6b3ae6c5bc",
+    "rust-1.49.0-x86_64-unknown-freebsd.tar.gz": "dced98577e834f511cae8e58290539ad6b8dd40ae512e90d1371f650961bd930",
+    "rust-1.49.0-x86_64-unknown-freebsd.tar.xz": "8e42a60e17a600d1c55611d231355c08a75855b97127c99891d86f2af7f0ce40",
+    "rust-1.49.0-x86_64-unknown-linux-gnu.tar.gz": "8b14446df82f3707d69cf58fed92f18e0bff91621c62baf89288ef70e3e92981",
+    "rust-1.49.0-x86_64-unknown-linux-gnu.tar.xz": "4f7cc328231e1a853e0d28d2fea960c6055b7d2eef9d06e7e2c85482e50b23ef",
+    "rust-1.49.0-x86_64-unknown-linux-musl.tar.gz": "f92a5a4adcfac4206a223d089a364a8375d1b6f112f3f2efa3f6d53d08a61904",
+    "rust-1.49.0-x86_64-unknown-linux-musl.tar.xz": "e98af94366a70b26cdf3c542b0a5ded5d94752c8ef02ade2ec6b940f10113f12",
+    "rust-1.50.0-aarch64-apple-darwin.tar.gz": "1ed91a867e7b86cc4bc84c0838240f1c25acd007100ec9f7a14c4873e4b56561",
+    "rust-1.50.0-aarch64-apple-darwin.tar.xz": "be2209a14b826c2da3635cfe16d6ac2df8bc8a20eae7881e9a3041fd7bd0bd0b",
+    "rust-1.50.0-aarch64-unknown-linux-gnu.tar.gz": "1db7a4fbddc68cd29eb9bca9fa7d0d2d9e3d59ede7ddaad66222fb4336a6bacf",
+    "rust-1.50.0-aarch64-unknown-linux-gnu.tar.xz": "4f38e4a5e9075d8938877ceed7687c99395a12aec2906b9e118bedb3014ad0ec",
+    "rust-1.50.0-aarch64-unknown-linux-musl.tar.gz": "adcc6c76a8967bacb6687b565d3cf739e35fde066b03edb745b05b52fa8b5b36",
+    "rust-1.50.0-aarch64-unknown-linux-musl.tar.xz": "c630e7c49056b1048c6bf1b0fe0d615ad58c3ffd3bc5909170ef33a5e190e3c8",
+    "rust-1.50.0-x86_64-apple-darwin.tar.gz": "1bf5a7ecf6468ce1bf9fe49c8083b3f648b40c16fbfb7539d106fe28eb0e792e",
+    "rust-1.50.0-x86_64-apple-darwin.tar.xz": "25741c4fbd2d82d1b2d2942ebd6b95763a772b4a8de41e972984faf18dcdf36d",
+    "rust-1.50.0-x86_64-pc-windows-msvc.tar.gz": "e8857c30b43b7d92371f824303d18e90e67e1053497366ad3496fa7ba0e0de6e",
+    "rust-1.50.0-x86_64-pc-windows-msvc.tar.xz": "0796c331861ca4363c7dd7b749a376d28de99b69db5e73c73b9f803e0be6ab92",
+    "rust-1.50.0-x86_64-unknown-freebsd.tar.gz": "83f9d093ab7f0f5abac15e0fcea6f22daef217a2b6240342b71ae52f99a7f31d",
+    "rust-1.50.0-x86_64-unknown-freebsd.tar.xz": "98f176ed2d43587aaadc7a2d0b202d077e9504c3b1d291cee4c15aeb24a70fdb",
+    "rust-1.50.0-x86_64-unknown-linux-gnu.tar.gz": "fa889b53918980aea2dea42bfae4e858dcb2104c6fdca6e4fe359f3a49767701",
+    "rust-1.50.0-x86_64-unknown-linux-gnu.tar.xz": "ebca47de5cbc225ec40573e67ceb1ad1ae9c97e6e7eca135d8fb535a5ee99168",
+    "rust-1.50.0-x86_64-unknown-linux-musl.tar.gz": "867cbfb35f5dc9b43e230132ea9e7bfa98d471a9248e41b08ced2266e5ccd00f",
+    "rust-1.50.0-x86_64-unknown-linux-musl.tar.xz": "82ea3f2079a84ad781b04c586d8e7fe2c8d3804ee61de913a11ec8d1de05f08a",
+    "rust-1.51.0-aarch64-apple-darwin.tar.gz": "95d0410bbd20b05f8b7d5adf70e8737873995bc86611a90e643d7081ca35147f",
+    "rust-1.51.0-aarch64-apple-darwin.tar.xz": "e8fdadd29ec2773e363e95f6e813fa121822d4dfea5d46ffba35ee10156b550e",
+    "rust-1.51.0-aarch64-unknown-linux-gnu.tar.gz": "fd31c78fffad52c03cac5a7c1ee5db3f34b2a77d7bc862707c0f71e209180a84",
+    "rust-1.51.0-aarch64-unknown-linux-gnu.tar.xz": "f0359cc4e83253eaa86e74724b457509932bbc4f3bb2311021fa43e5965d38eb",
+    "rust-1.51.0-aarch64-unknown-linux-musl.tar.gz": "06cdaa1117dcdd392ede938b655b9bc45cf2a76bd42870ca223189e6eb29d435",
+    "rust-1.51.0-aarch64-unknown-linux-musl.tar.xz": "96d0fed5a78f81574a94936178abeb3eb4e3cc86b085c5e318c201ced81cd6d9",
+    "rust-1.51.0-x86_64-apple-darwin.tar.gz": "765212098a415996b767d1e372ce266caf94027402b269fec33291fffc085ca4",
+    "rust-1.51.0-x86_64-apple-darwin.tar.xz": "47c501b6c6d99d30038299d8609bd746864d1f2089d9b1e20a976fe5af4cfb28",
+    "rust-1.51.0-x86_64-pc-windows-msvc.tar.gz": "aa0a7c78c68a2f23b72a95976f74aa5b883feb20812698b8ee0b07a86314ebc5",
+    "rust-1.51.0-x86_64-pc-windows-msvc.tar.xz": "7b1caf43162c4f8a8f90702115c8626ddf5fdbd37062e4bfe7fbeb275b872a17",
+    "rust-1.51.0-x86_64-unknown-freebsd.tar.gz": "d764ab80889460caca86cda7b7ca2ced80544bb477634adc8cade0e27f4f663b",
+    "rust-1.51.0-x86_64-unknown-freebsd.tar.xz": "97280e235845ba020bfc078efbc364cbff56d6e47bbffc09c4ee49f70b56144e",
+    "rust-1.51.0-x86_64-unknown-linux-gnu.tar.gz": "9e125977aa13f012a68fdc6663629c685745091ae244f0587dd55ea4e3a3e42f",
+    "rust-1.51.0-x86_64-unknown-linux-gnu.tar.xz": "0f3bf3792f9d79d4dd12a7af2d7d1c43c23914690ab12f000030ac94c3e0d20f",
+    "rust-1.51.0-x86_64-unknown-linux-musl.tar.gz": "cb65c3a19ba0e09a94ccfd8551e648efaa1db52b0db19ae475d35a46f8750871",
+    "rust-1.51.0-x86_64-unknown-linux-musl.tar.xz": "938ac39dc03313348bd4f4606b6b8f8026b8438be07b0fa434a0f14c01c99758",
+    "rust-1.52.0-aarch64-apple-darwin.tar.gz": "3aa15896dd85d1746a23af1b9764b55edb3659823ec20f306a5f30271c6bac5d",
+    "rust-1.52.0-aarch64-apple-darwin.tar.xz": "04da3e710b59046ee6e81262c95701e381cd2795318268b5ac283ce219bdecf3",
+    "rust-1.52.0-aarch64-unknown-linux-gnu.tar.gz": "d37152f9da1074cfa84407ff183ce0dfb298f2e474d5b0ae3a3065d44c442770",
+    "rust-1.52.0-aarch64-unknown-linux-gnu.tar.xz": "c8458be21a60faed4f45ea47441d29437bb3d06c61c49767ae67ac9e442c4af8",
+    "rust-1.52.0-aarch64-unknown-linux-musl.tar.gz": "af73b6e9a99151f60569411fedcf5dfefb89bbec61548a2b4a8157874da77816",
+    "rust-1.52.0-aarch64-unknown-linux-musl.tar.xz": "30ce47ae8b164deb83bb34e36c8fc162620a7c50c5f67956ed65d56f6ff764dd",
+    "rust-1.52.0-x86_64-apple-darwin.tar.gz": "18906ea9ef6d7afc493f0c4403ece9fb466b0971db8d37d837864676ef9b077b",
+    "rust-1.52.0-x86_64-apple-darwin.tar.xz": "894aaf7ebd62e79355c7e410268552bd46014b168f7711768fe0cab9d695441c",
+    "rust-1.52.0-x86_64-pc-windows-msvc.tar.gz": "53ad54808b1320aff5cc772f007a7f6570afceeb9c5b70b4b09fec9363610d59",
+    "rust-1.52.0-x86_64-pc-windows-msvc.tar.xz": "7e0257d5eb4a8dbcb3aea157a3d13dd61b97965b5b078591625b1200bf09d549",
+    "rust-1.52.0-x86_64-unknown-freebsd.tar.gz": "f0610d69f18f861b72240cd6d42dae43adf932eadc24619a48e5a9363f719cdb",
+    "rust-1.52.0-x86_64-unknown-freebsd.tar.xz": "f6aacc1e88f6365adbc72ccb5e6f4e08dc364b140bc7ce0c80f6585ea8886414",
+    "rust-1.52.0-x86_64-unknown-linux-gnu.tar.gz": "c082b5eea81206ff207407b41a10348282362dd972e93c86b054952b66ca0e2b",
+    "rust-1.52.0-x86_64-unknown-linux-gnu.tar.xz": "d440cb932bbaaf43b600bd47b2dd4a05bc669a74d88addeeb943d694638d8e6e",
+    "rust-1.52.0-x86_64-unknown-linux-musl.tar.gz": "56e36a3e626dca9eb65a07109ecd65e0454d9882124a6cda66ad21e78b82f627",
+    "rust-1.52.0-x86_64-unknown-linux-musl.tar.xz": "56e1e1e20ba85bd4b057066250b6ef9fa8ebe1d46e12ffb93fec4f8df60e5d77",
+    "rust-1.52.1-aarch64-apple-darwin.tar.gz": "217e9723f828c5359467d69b363a342d702bdcbbcc4107be907e6bc4531f4912",
+    "rust-1.52.1-aarch64-apple-darwin.tar.xz": "bffa9c3d7d79480a3f9e634e7765e2623e84074525a8ef0de4b3854e1ea88a64",
+    "rust-1.52.1-aarch64-unknown-linux-gnu.tar.gz": "17d9aa7bb73b819ef70d81013498727b7218533ee6cf3bd802c4eac29137fbcb",
+    "rust-1.52.1-aarch64-unknown-linux-gnu.tar.xz": "50f12da8c131edd0eab6d875c31194a461f67ac0a753b0f8805f5abbba88fea9",
+    "rust-1.52.1-aarch64-unknown-linux-musl.tar.gz": "f2bae2b32f05a90eec041352d9329deb3e907f5560b9fda525788df3b8008b6b",
+    "rust-1.52.1-aarch64-unknown-linux-musl.tar.xz": "00ec189c143119a4d6d6325cabd4ce940b616e33622700840ac0e4127e462250",
+    "rust-1.52.1-x86_64-apple-darwin.tar.gz": "cfa73228ea54e2c94f75d1b142ea41444c463f4ee8562a3eca1b11b2fe8af95a",
+    "rust-1.52.1-x86_64-apple-darwin.tar.xz": "626471001f73739056a4c9cfe302b90ff433943d41b01f716760cb2a277525b7",
+    "rust-1.52.1-x86_64-pc-windows-msvc.tar.gz": "c03fb39f39519abd65ce792cc3d2c038b6c4179089d21f9e26933b93cde402d9",
+    "rust-1.52.1-x86_64-pc-windows-msvc.tar.xz": "3a014fbed6b727f9d4df89b501831bb919dfb9acd50a230370c00c7a7d3e4a0c",
+    "rust-1.52.1-x86_64-unknown-freebsd.tar.gz": "74e8386d2a9b1363ac8f5b0637e4c38a305d4706babda5222801c5ec9d5a2e6d",
+    "rust-1.52.1-x86_64-unknown-freebsd.tar.xz": "59ee5a2852eadd9bea97464c0974ec784961a7477dce040a715806932050ad42",
+    "rust-1.52.1-x86_64-unknown-linux-gnu.tar.gz": "617ae06e212cb65bc4abbf52b158b0328b9f1a6c2f822c27c95b274d6fbc0627",
+    "rust-1.52.1-x86_64-unknown-linux-gnu.tar.xz": "04df0b61eb1d5d9dd5793191121f5e7029d33a50f0fe2ae3ef3ec3d22899d855",
+    "rust-1.52.1-x86_64-unknown-linux-musl.tar.gz": "c3eae6e78ee29e03416897f89b54448b2a03d063f07a78cde41757ad2e02c2f0",
+    "rust-1.52.1-x86_64-unknown-linux-musl.tar.xz": "8a80f16f1fcd2fa972bed08857ef79c2d56c2571206371dc26939cdd2e6e15e1",
+    "rust-1.53.0-aarch64-apple-darwin.tar.gz": "c519da905514c05240a8fe39e459de2c4ef5943535e3655502e8fb756070aee1",
+    "rust-1.53.0-aarch64-apple-darwin.tar.xz": "7ccd94f7058c12485c8c815f791dcb2ceafeff0cc3b98c53bdd24d84c29e0ccb",
+    "rust-1.53.0-aarch64-unknown-linux-gnu.tar.gz": "cba81d5c3d16deee04098ea18af8636bc7415315a44c9e44734fd669aa778040",
+    "rust-1.53.0-aarch64-unknown-linux-gnu.tar.xz": "70706b3bd89a78b0d78450b99de9f1f7415a166d0a8722d93fe0000adec3e03b",
+    "rust-1.53.0-aarch64-unknown-linux-musl.tar.gz": "a0065a6313bf370f2844af6f3b47fe292360e9cca3da31b5f6cb32db311ba686",
+    "rust-1.53.0-aarch64-unknown-linux-musl.tar.xz": "90f5e1a3dd716100d0c31a58bb654d268381dacd461065a894384e1b39ed6bad",
+    "rust-1.53.0-x86_64-apple-darwin.tar.gz": "940a4488f907b871f9fb1be309086509e4a48efb19303f8b5fe115c6f12abf43",
+    "rust-1.53.0-x86_64-apple-darwin.tar.xz": "3efc6ba9ede230fb820901adff516168081dd318d6c02eef496dbba1cd5a40cc",
+    "rust-1.53.0-x86_64-pc-windows-msvc.tar.gz": "4690fb3ff390eef30eca4b3b9193a74e0e00ef18f2d89b7981753aaa9b36d787",
+    "rust-1.53.0-x86_64-pc-windows-msvc.tar.xz": "b480077e2a8b7dd7dfaaeab1cdc943f700f31c4b5a1d0edf3c3a89fc8237dbeb",
+    "rust-1.53.0-x86_64-unknown-freebsd.tar.gz": "f87eee8fabffc5800d5285ce2116e9c0f39340fed4a3c77eeb9fbbf7659b25c4",
+    "rust-1.53.0-x86_64-unknown-freebsd.tar.xz": "ccbbae297a4c32b8b96093470539d4000391a6efb3a18f7d5cc2a47453f163fd",
+    "rust-1.53.0-x86_64-unknown-linux-gnu.tar.gz": "5e9e556d2ccce27aa8f01a528f1348bf8cdd34496c35ec2abf131660b9792fed",
+    "rust-1.53.0-x86_64-unknown-linux-gnu.tar.xz": "2579fd330d63e67c8bab4a7503befeb8cff064c54650277d0129fdf5375e5e5c",
+    "rust-1.53.0-x86_64-unknown-linux-musl.tar.gz": "908b6163b62660f289bcd1eda1a0eb6d849b4b29da12546d24a033e5718e93ff",
+    "rust-1.53.0-x86_64-unknown-linux-musl.tar.xz": "90e51f36257c008763e14f395703a6ed6621ee15462b2de1781ba4dcf360973f",
+    "rust-1.54.0-aarch64-apple-darwin.tar.gz": "801b3b15b992b0321261de8b8ea2728e9a74822c6cb99bf978b34e217c7825ba",
+    "rust-1.54.0-aarch64-apple-darwin.tar.xz": "e52314376d5258f3fb3ec6b9e0164bfca1c15ed276bd0d772e5392ea8531afe4",
+    "rust-1.54.0-aarch64-unknown-linux-gnu.tar.gz": "33a50c5366a57aaab43c1c19e4a49ab7d8ffcd99a72925c315fb1f9389139e6f",
+    "rust-1.54.0-aarch64-unknown-linux-gnu.tar.xz": "ee35b807d6cdedefed82f01e2beff448df2daa7ebd45e1f417d3706ad744b04a",
+    "rust-1.54.0-aarch64-unknown-linux-musl.tar.gz": "49d94116a357ea13f5a3231de2472f59210028c3cf81f158b8a367c3155ac544",
+    "rust-1.54.0-aarch64-unknown-linux-musl.tar.xz": "66bc306ab38f2e95e1692737e647808c0880617fc96863f52d976b2f699e6cb1",
+    "rust-1.54.0-x86_64-apple-darwin.tar.gz": "5eb27a4f5f7a4699bc70cf1848e340ddd74e151488bfcb26853fd584958e3d33",
+    "rust-1.54.0-x86_64-apple-darwin.tar.xz": "5be9bfc9b3d4f170bc9fd44815179ca58fd8614a41e5be2e2369970b4286f004",
+    "rust-1.54.0-x86_64-pc-windows-msvc.tar.gz": "1c01182f8d9ef1295eacf58e5b7ba2e3183d768b91f7f650a7421808779068a0",
+    "rust-1.54.0-x86_64-pc-windows-msvc.tar.xz": "cb1cdc415189294df210523f8f47d7a9e5a43f19e6e20f2b7b276560e5743168",
+    "rust-1.54.0-x86_64-unknown-freebsd.tar.gz": "026a40470b9fddfbb4abff3546e620eceaa2812ffc13e180bbb9360c01501a16",
+    "rust-1.54.0-x86_64-unknown-freebsd.tar.xz": "b5a96a9eb960bbfe527dba5549067102849fa80daabf524d367455c7b80232e1",
+    "rust-1.54.0-x86_64-unknown-linux-gnu.tar.gz": "350354495b1d4b6dd2ec7cf96aa9bc61d031951cf667a31e8cf401dc508639e6",
+    "rust-1.54.0-x86_64-unknown-linux-gnu.tar.xz": "9fb4a22b74120b81a4d896326b02d121d5f996b3288580c346ea55a52d8946a9",
+    "rust-1.54.0-x86_64-unknown-linux-musl.tar.gz": "3571db0018fcd32f3b579a32b2301826dbd1cce44b373aed8e8a31c2a6f52fe8",
+    "rust-1.54.0-x86_64-unknown-linux-musl.tar.xz": "87cd6f2267fb262a954bc5c9bb9b29baf101402ed96db243447d7012dea457ab",
+    "rust-1.55.0-aarch64-apple-darwin.tar.gz": "70c71d30d0de76912fcd88d503a6cb4323cfe6250c1a255be7e0d4e644b3d40a",
+    "rust-1.55.0-aarch64-apple-darwin.tar.xz": "3b71bd426445c6d5b4381bfbef63b9d38a288b372ddd671b13ba6577eb863f2d",
+    "rust-1.55.0-aarch64-unknown-linux-gnu.tar.gz": "eebdb2e659ed14884a49f0457d44e5e8c9f89fca3414533752c6dbb96232c156",
+    "rust-1.55.0-aarch64-unknown-linux-gnu.tar.xz": "1294261d9734f590e6b0da586a6c26ae7d8532c5a3d74aaa93b18c4f755774f7",
+    "rust-1.55.0-aarch64-unknown-linux-musl.tar.gz": "2ce36a7d34f1f2aa43b4cbc0b437d96eefb45743828bf9ae699ff581ae257f28",
+    "rust-1.55.0-aarch64-unknown-linux-musl.tar.xz": "d2d73af8aa79f399999f0c11b0060109697523d2716d1d248f34762362e29c99",
+    "rust-1.55.0-x86_64-apple-darwin.tar.gz": "2e345ac7724c192c9487a2c6bd4f6c52c884d791981510288830d27d9a0bf2f3",
+    "rust-1.55.0-x86_64-apple-darwin.tar.xz": "a7b1c814689ce56c2be5a5074cf23a81b97fb45ccbba5d5a2a84551bc3b9b29e",
+    "rust-1.55.0-x86_64-pc-windows-msvc.tar.gz": "c7f21e819d883306c3a06115b4d46a92c7310aed655a2f19b40c457a6f06ba62",
+    "rust-1.55.0-x86_64-pc-windows-msvc.tar.xz": "82bdbd55eb4e5888840d8b677694c4404fe2534ea55d713b2f0f6aed758ffc5e",
+    "rust-1.55.0-x86_64-unknown-freebsd.tar.gz": "7ddb8ec4d431f64dd6428df93d46f726516970b0ca83c71c3efbfe34a42d3113",
+    "rust-1.55.0-x86_64-unknown-freebsd.tar.xz": "c9dccc63e1d4c87526b7d38ee27ac3c12d6ae143907b7aba288f143a7c18669b",
+    "rust-1.55.0-x86_64-unknown-linux-gnu.tar.gz": "2080253a2ec36ac8ed6e060d30802d888533124b8d16545cfd4af898b365eaac",
+    "rust-1.55.0-x86_64-unknown-linux-gnu.tar.xz": "57b0ae332351904f1f84812b08de4f3fa6f5b1055f35281f57a3df3fbac77e5e",
+    "rust-1.55.0-x86_64-unknown-linux-musl.tar.gz": "f24f68587253c4bfbe59d3d10fe4897068d9130538de6b2d02097a25718030c2",
+    "rust-1.55.0-x86_64-unknown-linux-musl.tar.xz": "be5bc0252479e3b4ff687892cd4b181e3a0fbf727ba99067fc87bf665c3ac084",
+    "rust-1.56.0-aarch64-apple-darwin.tar.gz": "31b7e9c8b4ac3133b1952d1278077fa45250e26758625f972f9b2f4e2426709d",
+    "rust-1.56.0-aarch64-apple-darwin.tar.xz": "7ef0aa1b2b80e98e4173fd892013535d29510f8ca5aeb894ee952875d149260f",
+    "rust-1.56.0-aarch64-unknown-linux-gnu.tar.gz": "f3e9a9c8af7d17a2fbe0ce561a7dc42f65c5444025783f1f63cd47960a534a9e",
+    "rust-1.56.0-aarch64-unknown-linux-gnu.tar.xz": "c9dc301034506aeea0a3811531dead2f0bcdd770932b10f993abe1a4ffa9295f",
+    "rust-1.56.0-aarch64-unknown-linux-musl.tar.gz": "a97c8f305c0dd07925a00f90e135152769f1c97442874691ffc865602209066d",
+    "rust-1.56.0-aarch64-unknown-linux-musl.tar.xz": "a3ab7ea8449e12d68b12adcc5234525ebad423a8a5dd8ee8bd6112e61190d878",
+    "rust-1.56.0-x86_64-apple-darwin.tar.gz": "577faef3f118a4a259e5e61a415b06434081baeceeff7bbf2357456cfc5b8735",
+    "rust-1.56.0-x86_64-apple-darwin.tar.xz": "084190d855d78fbadc328c9ac34c5c76f62246cfd44f89f75d47a56bd96e712f",
+    "rust-1.56.0-x86_64-pc-windows-msvc.tar.gz": "7ebee9ae583d0723d945fe89244fbc6f51f8723d318a2be9bcbe1e4ffc33606f",
+    "rust-1.56.0-x86_64-pc-windows-msvc.tar.xz": "f725a0d00b738ddecb7420d5fc3214d7277f08bebfce9a3732043370a3bcb3aa",
+    "rust-1.56.0-x86_64-unknown-freebsd.tar.gz": "e31a47ecdd223ef7c84fc50d2c51343f8a3e54d419b04e17d143bd81ed587a7f",
+    "rust-1.56.0-x86_64-unknown-freebsd.tar.xz": "07fb8400b9a4bc942d8fe3b66ae0486c24a7075f208a9e440ade2bcc08e36d6b",
+    "rust-1.56.0-x86_64-unknown-linux-gnu.tar.gz": "5189cd56447f9d56fcd7a1966efe5a8efd19843fdfd6bf9a23a9acbc57b5e3f9",
+    "rust-1.56.0-x86_64-unknown-linux-gnu.tar.xz": "0cc6c195b562702492ffd0be61f9368811d90617fa3b5db3a9115cd235440731",
+    "rust-1.56.0-x86_64-unknown-linux-musl.tar.gz": "6ad1c6fa11e3bce86368385d0b0512d723a426fa55bcaeafdab08d03f127275d",
+    "rust-1.56.0-x86_64-unknown-linux-musl.tar.xz": "ebaa789c169722ff4859fe95b2c9fc0697db6167326bdcf744e9cc9e79929c0b",
+    "rust-1.56.1-aarch64-apple-darwin.tar.gz": "e71c14c1368048a22e4d1851f301872ac2e6f4c574f04d2a7ae4d64b0e7c7235",
+    "rust-1.56.1-aarch64-apple-darwin.tar.xz": "7402a588d91299169f40099865f17a045772097f4ced84013473dd3058b79a5f",
+    "rust-1.56.1-aarch64-unknown-linux-gnu.tar.gz": "69792887357c8dd78c5424f0b4a624578296796d99edf6c30ebe2acc2b939aa3",
+    "rust-1.56.1-aarch64-unknown-linux-gnu.tar.xz": "f08f0683bc62e506a37a29ce91668aea2fab50046b6feb2493eeb117a492e727",
+    "rust-1.56.1-aarch64-unknown-linux-musl.tar.gz": "971d13d41657e50e3ac54f17f52b4198c3d8bc25ec489a6a9e6d12c18226dda5",
+    "rust-1.56.1-aarch64-unknown-linux-musl.tar.xz": "a7df27ec92106d86618655754280407f3134f250293b8144fb678999ef04387d",
+    "rust-1.56.1-x86_64-apple-darwin.tar.gz": "8d65ef02a123c23be00101fb204d28b60498b9145dd2ee8edabf0afde6e01e55",
+    "rust-1.56.1-x86_64-apple-darwin.tar.xz": "ed65d274c3067969aefd0bb25c718b504f6276340b510feae65701f6468df5f4",
+    "rust-1.56.1-x86_64-pc-windows-msvc.tar.gz": "b39acf48e5d73279ca9485f50e6ec16c16fcef922eb17f2921ce807df11d3e5b",
+    "rust-1.56.1-x86_64-pc-windows-msvc.tar.xz": "b3ebdc6682c4aa85e0aa7af2f62a16ffedd345539a802eb5f1226c1828904051",
+    "rust-1.56.1-x86_64-unknown-freebsd.tar.gz": "94e2c8b44af125ca8ba1a1ded7e7b9c5acb27e52acec4ab483d5ed9a8528c5a9",
+    "rust-1.56.1-x86_64-unknown-freebsd.tar.xz": "17cefb4c30656eb9235e0e09de3b00f570af27d4b01ed7cb8fb574722adb2d2d",
+    "rust-1.56.1-x86_64-unknown-linux-gnu.tar.gz": "a6be5d045183a0b12dddf0d81633e2a64e63e4c2dfa44eb7593970c1ef93a98f",
+    "rust-1.56.1-x86_64-unknown-linux-gnu.tar.xz": "b66a484eaa186317c14d7576dadfbb68b2ead05b858a425b6eee264ec5cd20aa",
+    "rust-1.56.1-x86_64-unknown-linux-musl.tar.gz": "3c09058d104d9a88943fb343af1fb70422f9c4a987e6703666ee8a8051211190",
+    "rust-1.56.1-x86_64-unknown-linux-musl.tar.xz": "0dd33d3aa8818827bb5c536a95ad7460908e08098948f78d517e5dc833eba695",
+    "rust-1.57.0-aarch64-apple-darwin.tar.gz": "7511075e28b715e2d9c7ee74221779f8444681a4bb60ac3a0270a5fdf08bdd5a",
+    "rust-1.57.0-aarch64-apple-darwin.tar.xz": "74f23430ef168746d733c2c30c41cb4e3d13946106945bc4ad94eaa67dc73db0",
+    "rust-1.57.0-aarch64-unknown-linux-gnu.tar.gz": "d66847f7cf7b548ecb328c400ac4f691ee2aea6ff5cd9286ad8733239569556c",
+    "rust-1.57.0-aarch64-unknown-linux-gnu.tar.xz": "6ee1ea2daae52c44cb970cf2c740edca02d2234210ed45a79a58c4c87d45d71e",
+    "rust-1.57.0-aarch64-unknown-linux-musl.tar.gz": "91c8e5171e5715261f7f635142a10a9415a4e5ba55374daf76f0b713c8b08132",
+    "rust-1.57.0-aarch64-unknown-linux-musl.tar.xz": "8ded45c2fffe0ca24b3af34c4cc743af982108bb0d9ed0bc108afe43162da374",
+    "rust-1.57.0-x86_64-apple-darwin.tar.gz": "15ceffc4743434c19d08f73fb4edd6642b7fd8162ed7101d3e6ca2c691fcb699",
+    "rust-1.57.0-x86_64-apple-darwin.tar.xz": "10d92d8c3019a9d7eca5186594499e4fb6bbaab13c98966bacaf760a776b5873",
+    "rust-1.57.0-x86_64-pc-windows-msvc.tar.gz": "566374ae6c9f487726932f4d4ef3c9000147574f30365cfda265cbfd0c4ea5c6",
+    "rust-1.57.0-x86_64-pc-windows-msvc.tar.xz": "9dda7e9f0807d11b7c938e3fe1f3b21f257183d9a2da65118af523ced79efcac",
+    "rust-1.57.0-x86_64-unknown-freebsd.tar.gz": "ebe96fa1f15e8d70c91e81aab7e0c341717b909225029f37d52fbdfa506e3fab",
+    "rust-1.57.0-x86_64-unknown-freebsd.tar.xz": "b9984cc15c3158c0b41e8564564102eb7e8b261c1e59ed4dca87fdbdf551a0a5",
+    "rust-1.57.0-x86_64-unknown-linux-gnu.tar.gz": "ea0253784b2e5c22659ff148d492a68d2e11da734491714ebc61cc93896efcda",
+    "rust-1.57.0-x86_64-unknown-linux-gnu.tar.xz": "590772474cb5d24c3d85b8fb770246e4a6b7dd8b13a2ab1db2c50a3965a36e1a",
+    "rust-1.57.0-x86_64-unknown-linux-musl.tar.gz": "56876ebca0e46236208c8bd3c3425dba553abe49639e1040ee8b95bc66a45d33",
+    "rust-1.57.0-x86_64-unknown-linux-musl.tar.xz": "d8e0d8c178c92a715abd78ec3eb5cd5cae837ce646a0b8cd47d75633d9092b61",
+    "rust-1.58.0-aarch64-apple-darwin.tar.gz": "6fb564f03dc09fd0ede8cdc35803b9efdd0ee3b3769c392c63167f863e9512ce",
+    "rust-1.58.0-aarch64-apple-darwin.tar.xz": "9d13da250595de24422eeec0804e6ac4818358ef93ff96c31e425b03f6f559e3",
+    "rust-1.58.0-aarch64-unknown-linux-gnu.tar.gz": "38fafc97700dcb1d205d3db7d86e9eb404577ccc4054333f41ec52d508394043",
+    "rust-1.58.0-aarch64-unknown-linux-gnu.tar.xz": "e31f80898d42de068a6fc3f93900a7b41f56c2a85bda0646f1a5c752ab7900e0",
+    "rust-1.58.0-aarch64-unknown-linux-musl.tar.gz": "787655adcaf004cc1f6a438881a3964ec20fffa682b46418a2a87b564548d80b",
+    "rust-1.58.0-aarch64-unknown-linux-musl.tar.xz": "1afd7d239471906a3df02e444a5fde6e0c2f75e5e0024fb3ecc43dc723630358",
+    "rust-1.58.0-x86_64-apple-darwin.tar.gz": "1f35e32a70ced5019fef45d1073d8ac25c0c2f91537b2b3592e041542f582b84",
+    "rust-1.58.0-x86_64-apple-darwin.tar.xz": "a38b5e1c502a7f3cf7cd08aa9496769d7ca19f004d29a9ac38fdd92cbb45c0a8",
+    "rust-1.58.0-x86_64-pc-windows-msvc.tar.gz": "c15f4ac3ef3a3833b6394f3f102cc7896a82107d68c2f398aab2bfd70fbb096a",
+    "rust-1.58.0-x86_64-pc-windows-msvc.tar.xz": "536d94d361db727c6806fc0bbf90e755c24d4d88ec0c96c4f409320ae1f6b8a1",
+    "rust-1.58.0-x86_64-unknown-freebsd.tar.gz": "ce69d9e2b7f60d7805d7759f112a9a3d2c608715242041e7fecea033d557bab1",
+    "rust-1.58.0-x86_64-unknown-freebsd.tar.xz": "d682889bd68a521cf3054e235c34b1b029b3e26e7ab9116a904c5b6a6dc0cd09",
+    "rust-1.58.0-x86_64-unknown-linux-gnu.tar.gz": "1d7ec4bceb0d31f163540fe7ebebed68ca8853e7982821108770eaec5d66f871",
+    "rust-1.58.0-x86_64-unknown-linux-gnu.tar.xz": "fc77eefec4d1bff9c578c94f5a2c054d196ae51bdea0e042b4d0829efc58476c",
+    "rust-1.58.0-x86_64-unknown-linux-musl.tar.gz": "d1d04e4c5a3299c1d4b3eac8785f7b77c23d4ed32da3c3f77a1e39d90264b386",
+    "rust-1.58.0-x86_64-unknown-linux-musl.tar.xz": "c7908dfff680c84a3f7f1f549e153d51331a566dfa96a3c164983c267e700421",
+    "rust-1.58.1-aarch64-apple-darwin.tar.gz": "00b44985bc87e53c53d92622fb10226f09e9f25c79db48a77c0a769a36f83b1e",
+    "rust-1.58.1-aarch64-apple-darwin.tar.xz": "f954e39c5c96758d7c8f776de627c6fe143386a1b44d5f755ee497edd9ddaeba",
+    "rust-1.58.1-aarch64-unknown-linux-gnu.tar.gz": "ce557516593e4526709b0f33c2e1d7c932b3ddf76af94c2417d8d667921ce90c",
+    "rust-1.58.1-aarch64-unknown-linux-gnu.tar.xz": "0a80900aa160de4292b1174e25f183bd88f6c2fbb3056a59fcb4d658c70084cb",
+    "rust-1.58.1-aarch64-unknown-linux-musl.tar.gz": "b1533fdeeda483a3633617fd18a79d8fad7821331614b8dc13efd8b22acc30f5",
+    "rust-1.58.1-aarch64-unknown-linux-musl.tar.xz": "1e76aea1335a1103febf5cf5f45b2128448d469ae17db34e1ad79cb96aa47aa3",
+    "rust-1.58.1-x86_64-apple-darwin.tar.gz": "d0044680fc132a721481b130a0a4282a444867f423efdb890fe13e447966412f",
+    "rust-1.58.1-x86_64-apple-darwin.tar.xz": "9d7d4a6e4267dacd43bf613807ecbbf4e97032f5decb20152c408c84b812d4ae",
+    "rust-1.58.1-x86_64-pc-windows-msvc.tar.gz": "93cebf7a895420b3763dbc808c0772ef814add757eb689abe1da3690e876447f",
+    "rust-1.58.1-x86_64-pc-windows-msvc.tar.xz": "44f5711c41fd09c76d90c7a38b9239af21f0a2acccfa9f40c1a88d62ecb2c3a2",
+    "rust-1.58.1-x86_64-unknown-freebsd.tar.gz": "124d056c3af35bd9a42c6ef3529c73a6b29b1d927f5498cec499e16ca4defe63",
+    "rust-1.58.1-x86_64-unknown-freebsd.tar.xz": "5af5434c2d3cc4cd27a4c2687fd01ad69d52f2c503856c261af7c2e2e8e7c499",
+    "rust-1.58.1-x86_64-unknown-linux-gnu.tar.gz": "4fac6df9ea49447682c333e57945bebf4f9f45ec7b08849e507a64b2ccd5f8fb",
+    "rust-1.58.1-x86_64-unknown-linux-gnu.tar.xz": "f71b077caf0becbd0af9fd22bc1fa31c4fdf7a21fe046da8a15a7bde1286da25",
+    "rust-1.58.1-x86_64-unknown-linux-musl.tar.gz": "7036e34eadc8ce22d16b0625919d9f2244ca49a5441d6599f4822116c181d272",
+    "rust-1.58.1-x86_64-unknown-linux-musl.tar.xz": "76350a9a36b148cb2dd7d09212c04142d858b168794dee2805e6252829561a20",
+    "rust-1.59.0-aarch64-apple-darwin.tar.gz": "5449ae915982967bae97746ce8bea30844f9ab40b4ee4da392b9997e0e7b2926",
+    "rust-1.59.0-aarch64-apple-darwin.tar.xz": "8e03f00d568c825a151b1a715841ec102c5c58ab6779c33522cd148f753bc451",
+    "rust-1.59.0-aarch64-unknown-linux-gnu.tar.gz": "ab5da30a3de5433e26cbc74c56b9d97b569769fc2e456fc54378adc8baaee4f0",
+    "rust-1.59.0-aarch64-unknown-linux-gnu.tar.xz": "d155d58ee5e7c4a10482e4fceb3604023baff51a9cc8a89f0895567b9e588f65",
+    "rust-1.59.0-aarch64-unknown-linux-musl.tar.gz": "a3f8afdf23c98e6d25bf3b4bfcf5e9a4712f4c425f3754500931232d946204a9",
+    "rust-1.59.0-aarch64-unknown-linux-musl.tar.xz": "1f349b78339aeb2769644d2208fd30c1431725bbaf2c29946b84b6f20eaa7a2c",
+    "rust-1.59.0-x86_64-apple-darwin.tar.gz": "d82204f536af0c7bfd2ea2213dc46b99911860cfc5517f7321244412ae96f159",
+    "rust-1.59.0-x86_64-apple-darwin.tar.xz": "d21425729ea3ad333a1d598cd725b95d3a5ad5e9169e536be6999ef060c29502",
+    "rust-1.59.0-x86_64-pc-windows-msvc.tar.gz": "d781bfed7e3e5dc4959ce39df101fc476a3a70ab75e2fa1bbc3e59281f6e9e00",
+    "rust-1.59.0-x86_64-pc-windows-msvc.tar.xz": "39384a61edeca5271f4204befd0027fb3efaa4cb00af19d4908f986555ea0a8e",
+    "rust-1.59.0-x86_64-unknown-freebsd.tar.gz": "83f9c49b6e9025b712fc5d65e49f1b6ad959966534cd39c8dc2ce2c85a6ca484",
+    "rust-1.59.0-x86_64-unknown-freebsd.tar.xz": "0f339634b5f27effd49ead1a4d8197c11141ca68c3b9368a4711d7c2123310fc",
+    "rust-1.59.0-x86_64-unknown-linux-gnu.tar.gz": "0c1c2da3fa26372e5178123aa5bb0fdcd4933fbad9bfb268ffbd71807182ecae",
+    "rust-1.59.0-x86_64-unknown-linux-gnu.tar.xz": "a10c4abcba4891c463612c161246706cd0e8d3ddb1ae75f514d3f02bed235af6",
+    "rust-1.59.0-x86_64-unknown-linux-musl.tar.gz": "c0ae76fa4bb0f1c85b86b9f7637db0fddf5084ce4c8f86c4d4acc3c41813201f",
+    "rust-1.59.0-x86_64-unknown-linux-musl.tar.xz": "211b2269460d67e22d2bb43e99b677c0e54d63f7e93ff49dcf6d4628c5180c6f",
+    "rust-1.60.0-aarch64-apple-darwin.tar.gz": "b532672c278c25683ca63d78e82bae829eea1a32308e844954fb66cfe34ad222",
+    "rust-1.60.0-aarch64-apple-darwin.tar.xz": "460283ad22df069aaa8099be2b256fe890aa43a96f63356014e58295060c2477",
+    "rust-1.60.0-aarch64-unknown-linux-gnu.tar.gz": "99c419c2f35d4324446481c39402c7baecd7a8baed7edca9f8d6bbd33c05550c",
+    "rust-1.60.0-aarch64-unknown-linux-gnu.tar.xz": "5d18bc384273edbd8a4b6d18104685651fb42d5f07bdf518ef2ec3641269c95d",
+    "rust-1.60.0-aarch64-unknown-linux-musl.tar.gz": "fe7e9bad8beea84973f7ffa39879929de4ac8afad872650fb0af6b068f05faa6",
+    "rust-1.60.0-aarch64-unknown-linux-musl.tar.xz": "c595f41bdac2675ba7b41051a682d04ebdcdcfd6b75209f19852d5ca92055914",
+    "rust-1.60.0-x86_64-apple-darwin.tar.gz": "0b10dc45cddc4d2355e38cac86d71a504327cb41d41d702d4050b9847ad4258c",
+    "rust-1.60.0-x86_64-apple-darwin.tar.xz": "8df69fe4dbc6c9ef14c0f7e952f244f268580c686c37e40645af46630545eb38",
+    "rust-1.60.0-x86_64-pc-windows-msvc.tar.gz": "eddb8fcf2cfd5a20c87a93465dee0dd7e0ffda7cd8b09bf9c681cde65293d0e2",
+    "rust-1.60.0-x86_64-pc-windows-msvc.tar.xz": "bef45bf03c1a969bf933d49a59358a393219398bbf8824944a08e601652433f5",
+    "rust-1.60.0-x86_64-unknown-freebsd.tar.gz": "6f86164f6eb8387e6a82c59910890bb69efe1a996f02b15fa9e96570e7ad90ae",
+    "rust-1.60.0-x86_64-unknown-freebsd.tar.xz": "2ac4a012eb903f94ad869069afa5f3ce3de6ec7ae58bbdffface49c366d52d32",
+    "rust-1.60.0-x86_64-unknown-linux-gnu.tar.gz": "b8a4c3959367d053825e31f90a5eb86418eb0d80cacda52bfa80b078e18150d5",
+    "rust-1.60.0-x86_64-unknown-linux-gnu.tar.xz": "83c3fb8645379ec308192fa713df87044892639495722077e07aa779b310239e",
+    "rust-1.60.0-x86_64-unknown-linux-musl.tar.gz": "f0feefcb1985c5c894ad9b0f44e6f09900b31c0eb5f49827da9f37d332a63894",
+    "rust-1.60.0-x86_64-unknown-linux-musl.tar.xz": "8b6df0d19d6edfc7d687142d9919a3dd5ddf872271470910a379928ac44a3ec9",
+    "rust-1.61.0-aarch64-apple-darwin.tar.gz": "2dbafd13d007543aada47179fa273f9a3865f27e0a07bd69be61801232a0819e",
+    "rust-1.61.0-aarch64-apple-darwin.tar.xz": "be9dc929edd7a66a8ae07bc1a3da7538e671c0d6453296349753577928c69001",
+    "rust-1.61.0-aarch64-unknown-linux-gnu.tar.gz": "261cd47bc3c98c9f97b601d1ad2a7d9b33c9ea63c9a351119c2f6d4e82f5d436",
+    "rust-1.61.0-aarch64-unknown-linux-gnu.tar.xz": "e1158db58fe81151ef17bd6010d4b9bfe069835e67eff1924d3ffd88935ade32",
+    "rust-1.61.0-aarch64-unknown-linux-musl.tar.gz": "feb79985cb161a10b252236852df8db3bf3593c78905b84c7e94cd4454327e47",
+    "rust-1.61.0-aarch64-unknown-linux-musl.tar.xz": "c75dc9fd3e3ff935d6320f495141df410cca387b64dc768bf08700203f7b32f2",
+    "rust-1.61.0-x86_64-apple-darwin.tar.gz": "d851f1a473926a5d8f111ed08002047a5dc4ad944a5b7f8d5d2f1f266b51e66a",
+    "rust-1.61.0-x86_64-apple-darwin.tar.xz": "44218ede22bd45781a4473da9fc7e5b75485fafe2bc486df6f369fa3a6c283fd",
+    "rust-1.61.0-x86_64-pc-windows-msvc.tar.gz": "f2d594a9a797a958b99aa5ab265788ef12a97b78d612f8d0be9d903af60db5a4",
+    "rust-1.61.0-x86_64-pc-windows-msvc.tar.xz": "5ea2002dbf2ec942e3ccbd3c08659c232e114f57a22807a110b1c9704b44f4df",
+    "rust-1.61.0-x86_64-unknown-freebsd.tar.gz": "fc025538a1f429f66e0a6b2108cfc1b5167e6742cabb573bee5841ad5929b077",
+    "rust-1.61.0-x86_64-unknown-freebsd.tar.xz": "fbd81f25ae8e2d3e493693c0d2037d1e368acbfab04ce0a702305d96708b8f9b",
+    "rust-1.61.0-x86_64-unknown-linux-gnu.tar.gz": "066b324239d30787ce64142d7e04912f2e1850c07db3b2354d8654e02ff8b23a",
+    "rust-1.61.0-x86_64-unknown-linux-gnu.tar.xz": "3910d8b5f979969f9c95a63e98b22b27435b5d22b908945056b257fc20855b1a",
+    "rust-1.61.0-x86_64-unknown-linux-musl.tar.gz": "0904f6b769ae28c259e0e25a41e99290a4ae2a36bca63ae153790b2ebbc427bf",
+    "rust-1.61.0-x86_64-unknown-linux-musl.tar.xz": "241907b494bf2a0125f8a1d0bd021e812fd38c90f6921e059780dba1133432b9",
+    "rust-1.62.0-aarch64-apple-darwin.tar.gz": "f3a4e925474e6d54617a08ea8b8d0886590f70553e8c41ad3bbad69083876977",
+    "rust-1.62.0-aarch64-apple-darwin.tar.xz": "6e904cf75484760da63462f72008295ef29aff0defec51a17217f93e516c3d6b",
+    "rust-1.62.0-aarch64-unknown-linux-gnu.tar.gz": "eb15623acab56523bab68826db03c66f926adb6376363dd5e2a8801a16bc4542",
+    "rust-1.62.0-aarch64-unknown-linux-gnu.tar.xz": "596edf892fac02f3a3b9a8f018f64551e2d58f0a840a8bad13793eb7224783bd",
+    "rust-1.62.0-aarch64-unknown-linux-musl.tar.gz": "5dc62e8a550d26a40a0780aae790895b1cc8ff718965298787fca184d5ddd4ae",
+    "rust-1.62.0-aarch64-unknown-linux-musl.tar.xz": "f3b295cf0e9e2dd2352263bdfacb3417828293812bb9b5b0128b497c1edf1710",
+    "rust-1.62.0-x86_64-apple-darwin.tar.gz": "e4c2b363a54eb147fa93b966431c221f6af59779e63bb4ae825521f9258294b4",
+    "rust-1.62.0-x86_64-apple-darwin.tar.xz": "8bfd1d6ddd433e419c6c07d2b740ae3f44dd0b4dbc2b01ead26bf0677f43ac81",
+    "rust-1.62.0-x86_64-pc-windows-msvc.tar.gz": "fe50b932e3a0c6cc9d4e8987ae2fa2f14ae4304f9d020fa1a37db2de5c4c6ae5",
+    "rust-1.62.0-x86_64-pc-windows-msvc.tar.xz": "a4c7d8ecb75ab2a97a3cad56d6f7d3384d320fdcaf3f59ac107f93da643b6147",
+    "rust-1.62.0-x86_64-unknown-freebsd.tar.gz": "c725a73314de934f3d7b81fe9c2c0f22362643d6f3e670f6350e5f0c1aca7ac9",
+    "rust-1.62.0-x86_64-unknown-freebsd.tar.xz": "716affa00ff8b1179ee5f28292dd55b80b6cbe30b64031590756ef8be037786a",
+    "rust-1.62.0-x86_64-unknown-linux-gnu.tar.gz": "4172d3cb316498025410bdf33a4d0f756f5e77fbaee1fb042ccdef78239be1db",
+    "rust-1.62.0-x86_64-unknown-linux-gnu.tar.xz": "29d0cb095bc006f82fb99bc4b9081aff813d803426ef01c9d1bd2b150e68d035",
+    "rust-1.62.0-x86_64-unknown-linux-musl.tar.gz": "d3a18f43533bf020177a10543b1055bfecbe510f3229cd8a7f97da1b35f90b0c",
+    "rust-1.62.0-x86_64-unknown-linux-musl.tar.xz": "f1846989bc857925eac4acf00348a11aba0ec0985677c6445f9c05ad02f5bebc",
+    "rust-1.62.1-aarch64-apple-darwin.tar.gz": "6d1671ea31b05cab5e2587cc2b295b3e7232b0135f0977355618e2a01933ff0a",
+    "rust-1.62.1-aarch64-apple-darwin.tar.xz": "64f94677f74f77507d8ed6e6264b6284e5892dc06f37c54df6d927f482372185",
+    "rust-1.62.1-aarch64-unknown-linux-gnu.tar.gz": "1311fa8204f895d054c23a3481de3b158a5cd3b3a6338761fee9cdf4dbf075a5",
+    "rust-1.62.1-aarch64-unknown-linux-gnu.tar.xz": "6da279aed8ee7cda7067147916df5b113401ff340b90533741ea1fe9005fc85a",
+    "rust-1.62.1-aarch64-unknown-linux-musl.tar.gz": "73bbab4d8a9e3c416035d40406e656ab37e785df35fa069a33af52e931a24b12",
+    "rust-1.62.1-aarch64-unknown-linux-musl.tar.xz": "13632c334624987120f07876246767af9562073f2bcc63134237a728ccec7342",
+    "rust-1.62.1-x86_64-apple-darwin.tar.gz": "0a04dcf2b521239826f3eaa66d77169d91e68087ccc3107b54e8aba7c02c9adf",
+    "rust-1.62.1-x86_64-apple-darwin.tar.xz": "77df39bd918fa3aec433c9fde4d5e824146df6803b2628f1d7a1369efc40b95a",
+    "rust-1.62.1-x86_64-pc-windows-msvc.tar.gz": "0090de907090eb75373d12ef6a9c478032b10c9151516e65d30c6140b5b0bc3f",
+    "rust-1.62.1-x86_64-pc-windows-msvc.tar.xz": "199ede7d1901de99f8aa4f9c9909c0f48661784013880858ddd2168e5cdda449",
+    "rust-1.62.1-x86_64-unknown-freebsd.tar.gz": "edea64139d065b3e60e76487bfb7e3e068b3253938f657dd81c5a3d03e46581f",
+    "rust-1.62.1-x86_64-unknown-freebsd.tar.xz": "908bda6df3ae15cb1b8b11959d3b247790a2ef64d8bda008d29ab203cb622592",
+    "rust-1.62.1-x86_64-unknown-linux-gnu.tar.gz": "dd7d82b8fa8eae59729e1c31fe59a9de6ee61d08ab40ce016185653beebe04d2",
+    "rust-1.62.1-x86_64-unknown-linux-gnu.tar.xz": "2f4dca8a67e8e3c3aab8da4146a93e3a5fd249af6f5a845083ade716ec0b9be9",
+    "rust-1.62.1-x86_64-unknown-linux-musl.tar.gz": "32bee487074b105e2582cddce35934a6019eec74bae3f9300fdc3edfcf5b66d4",
+    "rust-1.62.1-x86_64-unknown-linux-musl.tar.xz": "11c79886f55d314dae8b9a2c38db169cffa94cb536193e8971dbf662cf56bab1",
+    "rust-src-1.26.0.tar.gz": "d02fe6fd5c0f330656e9ff0a290ebf23cab7c909f96ce1838247fadc117eb1dd",
+    "rust-src-1.26.0.tar.xz": "7d313fdecb23afd07826b62360f63c40ca8c12730b00b7cecf2c53098039e326",
+    "rust-src-1.26.1.tar.gz": "19ef8113ae53ec7ea8f6772a5c9ce5a3dfc28b1bddd800841fb5bbec33fa3619",
+    "rust-src-1.26.1.tar.xz": "092ba94844b9ab739f8d58fbdafbfd16c104ce964d6d7c6197f9c832bd57c0bb",
+    "rust-src-1.26.2.tar.gz": "d63cb7ca67f1bb2101898b7ca33105eeb6d9d9cc3e7ff566b90b0321ec448e73",
+    "rust-src-1.26.2.tar.xz": "70120e9f85520c30a060f5df33b91e88698c8fadfc85a6b5c9224122d0700be1",
+    "rust-src-1.27.0.tar.gz": "9a60d9f0c586a537129a741576370b90d9cce1999b4aa2623d5c1d9c3fdf5a73",
+    "rust-src-1.27.0.tar.xz": "89f326d5d41ec0acecfe4b98e0f1c32c5b2e6289446a74313474ffcf59f1f85b",
+    "rust-src-1.27.1.tar.gz": "8736577a84bf7263d333996b21ec49697a4a942ab1b5f6d1327241866481cdc0",
+    "rust-src-1.27.1.tar.xz": "d4a2bdd23143a62fb842bf6f129e9fcc000e8e4620d0047898e30a00e747a017",
+    "rust-src-1.27.2.tar.gz": "03b4b09d855b2c393508f1e5d11c2cba147112a534193e62d6cb54e2b5a631f1",
+    "rust-src-1.27.2.tar.xz": "af163609b96494f19d840d1b6051741509a1371abdbaa2dbba0390bdc3fd6973",
+    "rust-src-1.28.0.tar.gz": "99ee2a227f27bf0136e7bc53790ef5e02ad9744a56f488b77579403b281b1d63",
+    "rust-src-1.28.0.tar.xz": "d5ee08bb646d0838c464f40e5719e363a50f0d806190371dfe5182d312153138",
+    "rust-src-1.29.0.tar.gz": "6f1a4457d2e75d2b3d3dda1f05e6ff5f37c4c416d25733cb3b008cad99247a42",
+    "rust-src-1.29.0.tar.xz": "e6c7709957f64c8903b78ce78869b40a2b56d4b319ed0bdbe1c478f95745ff3b",
+    "rust-src-1.29.1.tar.gz": "89bddeeb0b38ec2715e287a4827179fc975d69bd6d223b05199321e9c0de8313",
+    "rust-src-1.29.1.tar.xz": "d05af8de08128202bc8c8aa7cc7846001ac9d7cce1f57c935fe6f5eaa9c5b373",
+    "rust-src-1.29.2.tar.gz": "47b1ed6d19d5a14f20c1723218fcf073c3f790aceb780ffae9209c1a480f5b81",
+    "rust-src-1.29.2.tar.xz": "17eb4b1b7b82b5a703491b3ed19d9e24cb522d35d8a89b5b25e96cc16b6b783e",
+    "rust-src-1.30.0.tar.gz": "27e806396aa5ce2466929e06106a23b456a63f9dee2e9c378da326f1f88e6570",
+    "rust-src-1.30.0.tar.xz": "b537c1d2e5a618c2c2133da0df5e9010fc8e16a4a6050a3c618803f8ef91d5ed",
+    "rust-src-1.30.1.tar.gz": "16dc694d49b22a58e766dfa5812d84000a6197cc6b1f1f7b4e553be8d9427d85",
+    "rust-src-1.30.1.tar.xz": "94dc448a25f406a70228e87313d69e1abd32b9365cc0e456ae0adff3c1594a24",
+    "rust-src-1.31.0.tar.gz": "121909b2428487a31d6bef4ff92f6d63967b225310632fc60570874ba392feb1",
+    "rust-src-1.31.0.tar.xz": "4416250296ce87135e461d07a8d434028ef75d1dea7a92020c595c523d4b4e6a",
+    "rust-src-1.31.1.tar.gz": "097550782be7f201a44b842b74c6c2ec6851495454ada2d9ee693a8af4cdbc6a",
+    "rust-src-1.31.1.tar.xz": "5576e2135788ef68b67d2127ff17d49b56ebdab80befc8f5779d72429ce62ba0",
+    "rust-src-1.32.0.tar.gz": "6ece16e38b969606a5da8def53cae55d0c67d8502261086afbd5e303013ce92b",
+    "rust-src-1.32.0.tar.xz": "9fea29ab5526ba16d171e3937cf4a502d99e3c03b234c6b7ba073ecb9635abfb",
+    "rust-src-1.33.0.tar.gz": "48b28b0cd9badcef24f1525b6a225db9018924567d6a998ae891996dc843fb22",
+    "rust-src-1.33.0.tar.xz": "258ca0fe0441789a81df9f81ef7c4f24dfbc49aad36d882258d1898432eb7ffd",
+    "rust-src-1.34.0.tar.gz": "6fe16aae312d3be5e0fec93e52918b7b03e0920e7d6d3e552a4fdd740556c4e9",
+    "rust-src-1.34.0.tar.xz": "2c856be1fc8764d3e8f94459b56b15079e4d275b1a2206204a576c594bf240f6",
+    "rust-src-1.35.0.tar.gz": "7547d1e9a7ed236860e0a1ed7b9e428941fad7ff9bd3888e19db7e7a5fd53e38",
+    "rust-src-1.35.0.tar.xz": "679b2fe531d257fd6be42009f7b1224d324a88943c375f38b0af90d2225cc99a",
+    "rust-src-1.36.0.tar.gz": "c0099d763779ef095fcd32531a88a2af714670ec0b64f7b27aa027b2f51057b0",
+    "rust-src-1.36.0.tar.xz": "0fbf059a6875cb8d207df5d94b36c76ca74dfb05506fc5ab28e7641eb4b78be7",
+    "rust-src-1.37.0.tar.gz": "30e7bb28725b86b53b7dfe23ba4f3119889c30e38930f7c2dfdc74b1f62704a5",
+    "rust-src-1.37.0.tar.xz": "91a0dea3efa42a4a019ec7a3b12a9685dfe4d85c4aa2f8afa565455ebdb1668b",
+    "rust-src-1.38.0.tar.gz": "082891ceb8547c4a0fbadcd1309fb0219b935f3dc5a38d2b3b77f40a670a0a54",
+    "rust-src-1.38.0.tar.xz": "00b6d11a198288cd1367b72483079716e4d93f7d635ca870660e5364d29915fb",
+    "rust-src-1.39.0.tar.gz": "068186f866703ffeae804a0642588a78a492f03b62c0113e6cdfcb4eeca56df6",
+    "rust-src-1.39.0.tar.xz": "75b4eed864d524b203d507bac88b100a0a219af5c9ad06f37b68c339c1f608da",
+    "rust-src-1.40.0.tar.gz": "2a9be624ba682f1331cc4d764e161a1b18e007ded34ffcb1494804bc24e0fd62",
+    "rust-src-1.40.0.tar.xz": "48466c3aa59b09bfa5d251f6443fc4a6136934869024e17c806c9bb853b2b28a",
+    "rust-src-1.41.0.tar.gz": "6597a1f217c6a9cfcf41e34bba91d8d98b6736ab6a18b54ed2db1ce5634e176a",
+    "rust-src-1.41.0.tar.xz": "acf437b8459614ec2156ab3e239f7f2b3b42310a2e0342ce3784fca230d964ac",
+    "rust-src-1.42.0.tar.gz": "56d809eb9efb70e9444be88bd8e3ff54d94ab5fef24b13d5b17a75309190d84e",
+    "rust-src-1.42.0.tar.xz": "04a77e6af7bb6c20c34dd1466aad62627d0d8e300bacd844d8563b772cd0f80d",
+    "rust-src-1.43.0.tar.gz": "7999fad1e60609f76ebe589cab48451e35ecd54d5336bf70dfb0eb57c78e8bb7",
+    "rust-src-1.43.0.tar.xz": "2f10d02b1dd895eebe551824ee3171c1b0c32f55a02325c98bb4e4e55010f595",
+    "rust-src-1.44.0.tar.gz": "6f748c303431126827fc3f262ba05ece2456e274eafeb9bd0b40bdf27c5f99da",
+    "rust-src-1.44.0.tar.xz": "deee54af18d5360fc29e1cb74bafc42a5f93777fe81f67e00f37b8a39283b13f",
+    "rust-src-1.45.0.tar.gz": "96590b0a987098da05d38f8e3bb5e049a77c20f03689ffb7144f23136fd488b4",
+    "rust-src-1.45.0.tar.xz": "8f84e7198d6b07c15f9ab992783f32362a2767acc6fc180c958bd602bb91bf8a",
+    "rust-src-1.46.0.tar.gz": "7478839072096041220c6ca9cc9031028cdf65fa8cb5bcf87178ea1351442bdc",
+    "rust-src-1.46.0.tar.xz": "86bac2f210d75ed67d5406e2cee76dc1ed086be25fc4d4e093efdecf986dd329",
+    "rust-src-1.47.0.tar.gz": "64b27ba31f8956342e8ace0f949d06524d7013bf73bfbe6f9d18ec19e5a0c793",
+    "rust-src-1.47.0.tar.xz": "4fe28057f561a5cf9bc009e158cb8515a55c66ed0ce67023c105fee267c26a86",
+    "rust-src-1.48.0.tar.gz": "e8f15bdfcb5ced76ae40dd9aa6b387d5f9cece82b7a340cdcaa353fbc94f53da",
+    "rust-src-1.48.0.tar.xz": "1abd48b90c12e99e55196e985419da4afbbe77eec835bde68d1c3538f1497589",
+    "rust-src-1.49.0.tar.gz": "474a0fd0c1da720eb9fa701c73ced702a7599eb265333a18c1b25feeb9566f8e",
+    "rust-src-1.49.0.tar.xz": "688b345fbc9b22aa197297a228f4e756f2c0bb8fb1edea6e272391ed314af348",
+    "rust-src-1.50.0.tar.gz": "678e140e88656f19a49aa802eb6e1ea117a520c6f3eb0da265a7dc6e0c012a9c",
+    "rust-src-1.50.0.tar.xz": "d0bf61a7eea96f37cc2f2e60178b95fa7f43777d072f86cce65ea6af4117b05c",
+    "rust-src-1.51.0.tar.gz": "18904ca04c5bc09fa1a88d32391c611bc60bc3a739551496cad0829e34301563",
+    "rust-src-1.51.0.tar.xz": "bed0e1029ca28f5f18876ff1ca11afc99fc9e516ccac96a612b7f0e23e367984",
+    "rust-src-1.52.0.tar.gz": "861dcbf1faf2faca5b5e3afea5bbcf453cbda4ae00bd34ae67bfc36463f9e227",
+    "rust-src-1.52.0.tar.xz": "1b362dd66c577034cbc1120e75d048777a81dee425a33624a6b0f04fc92b5c56",
+    "rust-src-1.52.1.tar.gz": "34fb417e94aadbace368e934e1f079dd09f2423ccd6cc0cc519cdd55ef3fa8bf",
+    "rust-src-1.52.1.tar.xz": "d7f342c9dcc1a5475db64bdd9f0e8cbcb3624a984832d7ecd92d0f49b66051ae",
+    "rust-src-1.53.0.tar.gz": "26b1464bd313ae99de27a162ca96b4fb321e4414448ea8ce8abd715ef8c7ba2b",
+    "rust-src-1.53.0.tar.xz": "8695c38dcdd84091b4dbc7e968f0f3fcd5b2c58fdd6fe57d1cf27b22da3dd8dd",
+    "rust-src-1.54.0.tar.gz": "56d14ee97c59c543291154ab427cf96a1a82ef5cf32b89f14886dcfc01f5310b",
+    "rust-src-1.54.0.tar.xz": "f07aabb0f26cc34375f7a187f2bc8cb9645b86b663fefb5899907439503f391a",
+    "rust-src-1.55.0.tar.gz": "3be79e301246b413e9e1cc4b5b4f53bcbc964482005381a899ab6c597bef7996",
+    "rust-src-1.55.0.tar.xz": "4d4b62a377bbe57e363268b7e046f25c35aa530e0ba9db69b512d6573fb27387",
+    "rust-src-1.56.0.tar.gz": "00c2225d0e1d430b1632373c46448b1b69839032b8384684091bb9cce19b2ce6",
+    "rust-src-1.56.0.tar.xz": "0726eb30b63d8d5b98a716ea7c48c575fc7cd7d8428859777091accb6bc3ef0e",
+    "rust-src-1.56.1.tar.gz": "be4757c283f94a37cf38b9897f5513ebe3e2f4ef15f013630cdb845987324503",
+    "rust-src-1.56.1.tar.xz": "85b763dfdecc827656db283700c60c89c6320a9b12028056b3af261111ccda61",
+    "rust-src-1.57.0.tar.gz": "cc1fa22e939b14a6952deb7547fcfafa6670e727f942fb4ef77075d8e58e45a6",
+    "rust-src-1.57.0.tar.xz": "c4a12e59c54925f56d0a966ebb088214d2e1523bef96c56d1999a0c2ba89835b",
+    "rust-src-1.58.0.tar.gz": "c91bb6df4ebbfea42a1c3940e38bc1c2c4768efbdada8205b12f6d9d383ee219",
+    "rust-src-1.58.0.tar.xz": "0c959ec0d6b0f6cd08167a142fb0a140ae130c3158acfcdf44728c46a568ea2e",
+    "rust-src-1.58.1.tar.gz": "e7bb7325e5e71411aabfbd251acfd131d1ad6d9aee2b65d04b081702915cfe4f",
+    "rust-src-1.58.1.tar.xz": "c4d85a0db66f736370e1e7ed9a80ee8cda203c7e15d4c5d94d980bb14414fcdd",
+    "rust-src-1.59.0.tar.gz": "127658a5237cce6dd43ce9d9113fc104ea6902cc8c850272fba07d92140fab12",
+    "rust-src-1.59.0.tar.xz": "c5f2776c9096ca498536f461f584ac5a19c21bc15c59cd1fd0bb7d3aece6ebe3",
+    "rust-src-1.60.0.tar.gz": "3a3bde7edd168df6852dd66a6685dbe9ac2f52addc3671bffc3ad14ae83ec1ce",
+    "rust-src-1.60.0.tar.xz": "66a96ff728d1538b1313322a754bf5b50bbfd0c3c75c6a5504c9e906918cbcb1",
+    "rust-src-1.61.0.tar.gz": "7cc39f30b584a105623cf5be62199b811ff28c76f3d828d2c77e809488e95c47",
+    "rust-src-1.61.0.tar.xz": "954331ca52438da004f37e9ac820b1f80c5f88b5b6bd69a9763539ae19a11b4b",
+    "rust-src-1.62.0.tar.gz": "b26a32f487cc19e6c503b0050f5f4f248d46e1fcbc69a2d9ac19f5a2da0bf8f0",
+    "rust-src-1.62.0.tar.xz": "14856905c4e49775270c7162403032c2c97f4e656eb12514c5ad9a59c997d2bd",
+    "rust-src-1.62.1.tar.gz": "4cca13c2e3c6aac4361fc7d928a4c82164bbded56d8bb0c7170b7f15a5da51af",
+    "rust-src-1.62.1.tar.xz": "23c944887fa5873b58a15c307599c6562aff51fafb7020c3530e7b00a5031a8b",
+    "rust-std-1.26.0-aarch64-unknown-linux-gnu.tar.gz": "a583ddc2d4b5f9516bf136f781268ae0e813295d1d145fab4b46a4220f448923",
+    "rust-std-1.26.0-aarch64-unknown-linux-gnu.tar.xz": "85615b5a109d4c12e9d0910020fceece8f0535848c137c8b8662d38de3d8ca37",
+    "rust-std-1.26.0-aarch64-unknown-linux-musl.tar.gz": "6a112ecd4cdefee2688bf69fdceb785a4d08cea33ba32296539abe3cb7f5eae1",
+    "rust-std-1.26.0-aarch64-unknown-linux-musl.tar.xz": "6fd583012c8e3381df86bf2237b309f896fa0eb56596aab7e4f8e4968b2cf991",
+    "rust-std-1.26.0-wasm32-unknown-unknown.tar.gz": "0f8bb8bdb523cd05acd11006d47b14d7589e64fe25a43d1aec5df692988b400f",
+    "rust-std-1.26.0-wasm32-unknown-unknown.tar.xz": "ea230e3d3cec0fb4bd5f2bb5e3a23eb7272b948f33eb6af950f20580e9c250ac",
+    "rust-std-1.26.0-x86_64-apple-darwin.tar.gz": "cb5a0114e9e383aa93267868482db84f791124ee4faafdaed08ec6782d000fc2",
+    "rust-std-1.26.0-x86_64-apple-darwin.tar.xz": "594420598ba666e0fa384bc253bb98e38d38ebdb75c586b6a9c1091b68e8fe8f",
+    "rust-std-1.26.0-x86_64-pc-windows-msvc.tar.gz": "88ae8697a84cfddc72429fb0880e6d8663d99ab98a69d27c06d21b4e668b13d9",
+    "rust-std-1.26.0-x86_64-pc-windows-msvc.tar.xz": "7cce8c1e7ea4fc08b10f15fde0509e2f382d3d21fb7c90bd4da78065864e9b2d",
+    "rust-std-1.26.0-x86_64-unknown-freebsd.tar.gz": "38cd138eba2ccaff59513d154fec580b6663ca6ef38cd620c348364aa1e11a40",
+    "rust-std-1.26.0-x86_64-unknown-freebsd.tar.xz": "896087ac4aa2bb750ee207d2a99f0a85b1ca1b039d664a0da1a30e76934905af",
+    "rust-std-1.26.0-x86_64-unknown-linux-gnu.tar.gz": "e27cb5c21541a500c8df919e15c8d3b002456ebbe573122e7b058cf5b4c3c13a",
+    "rust-std-1.26.0-x86_64-unknown-linux-gnu.tar.xz": "bd157c007bd361159951ad54fbab1e904625aca91a149954dd1308229bcdda65",
+    "rust-std-1.26.0-x86_64-unknown-linux-musl.tar.gz": "943886ce013589b6dd9c9392c807881631cab4a8e04acc83e3a047134a9294f5",
+    "rust-std-1.26.0-x86_64-unknown-linux-musl.tar.xz": "df6d7b9ad98773656adcb77ec7ad1bf18bf910076b4f0d381d3560391fbe9dc9",
+    "rust-std-1.26.1-aarch64-unknown-linux-gnu.tar.gz": "34077f14d1e8c9ce96a9c72e95599326187bd460b88f877794a8c19f9e1b56b4",
+    "rust-std-1.26.1-aarch64-unknown-linux-gnu.tar.xz": "c4b16f75c8e6581fc46441007312709953e1df45e8c61d610754cd31edc5151c",
+    "rust-std-1.26.1-aarch64-unknown-linux-musl.tar.gz": "d4435fa89ff7575d8d70114a5841bf70d699294db707512d6f4f4d0a073b237d",
+    "rust-std-1.26.1-aarch64-unknown-linux-musl.tar.xz": "bd1541362469ce3554f41e49ecb5293faf0e287bab351627de67601e0ff9bc2b",
+    "rust-std-1.26.1-wasm32-unknown-unknown.tar.gz": "98af245301a921042997a433a618f58ae27b52340ad71c5502ecde7f29db79f9",
+    "rust-std-1.26.1-wasm32-unknown-unknown.tar.xz": "b97df2cd8b019f0ebd8cb42b90fa7e2dd481c67457a1b527429ec7f177a16ab2",
+    "rust-std-1.26.1-x86_64-apple-darwin.tar.gz": "d43e06674e645e120af6716e6d0db5771fa8818b5a48fbee9791360086cdec4a",
+    "rust-std-1.26.1-x86_64-apple-darwin.tar.xz": "245ea05bc6bf8683e3afb080a5b1762871057a1805e992f654d31e7b4f8ec98a",
+    "rust-std-1.26.1-x86_64-pc-windows-msvc.tar.gz": "5223b7dde5b96d278072b4541fdffb7d33c64950af643eba385928763aca32bf",
+    "rust-std-1.26.1-x86_64-pc-windows-msvc.tar.xz": "9c919b8789ecf1d17f51d030a59b95f30dea85185acb448e1c1c8255cf190efa",
+    "rust-std-1.26.1-x86_64-unknown-freebsd.tar.gz": "1d63cc1f6dc6dfa2644619cd8c264c3d1be0fe5c44c5454e8ea04bd7beb036fb",
+    "rust-std-1.26.1-x86_64-unknown-freebsd.tar.xz": "ad71aea86111876dfd75fc4bb7990e14386ce1e209184d38109b98df3688a825",
+    "rust-std-1.26.1-x86_64-unknown-linux-gnu.tar.gz": "cc7cec9a121a97e8e23c350305a0e4cd4e3b475fd5a36fa6335a585d3c511f0d",
+    "rust-std-1.26.1-x86_64-unknown-linux-gnu.tar.xz": "5b684014c618cbfec69fcda01fc4f80715df9ca85fbf22aa79cfd244388a4b23",
+    "rust-std-1.26.1-x86_64-unknown-linux-musl.tar.gz": "9d6a4191ad8ddfae10a05882cd0e867ecc2b64d26da2f38fbdcbdcbcf94139cf",
+    "rust-std-1.26.1-x86_64-unknown-linux-musl.tar.xz": "f48360cf29730838aac62ad9a456f8eedcf815b1cf4b675b8dbc43a140129abb",
+    "rust-std-1.26.2-aarch64-unknown-linux-gnu.tar.gz": "6f629b8c3ef8aa4a6c9439a5c1d8719905853f321a1080bb9f8a8356a1b06364",
+    "rust-std-1.26.2-aarch64-unknown-linux-gnu.tar.xz": "1f83a04b6268140bfc940f46d05d1c07af842380e33af22c9d6fabed78e70d0f",
+    "rust-std-1.26.2-aarch64-unknown-linux-musl.tar.gz": "d70817352ebe34fab475ef3cd79ccbd56cf20e3b9ae0b34a285dd1c966bf2bde",
+    "rust-std-1.26.2-aarch64-unknown-linux-musl.tar.xz": "e7c30306ec59fc5d89c44ac9ba3678cb0dcb077f216685c8f48caf0cd92d3f73",
+    "rust-std-1.26.2-wasm32-unknown-unknown.tar.gz": "260e3267451c8098ac069376e2f4320e129ccec79602086a77f0798499cb5b3b",
+    "rust-std-1.26.2-wasm32-unknown-unknown.tar.xz": "9e7db84c3c62da67c67b4801317b37cb86c27d681289cee353564bd514a85365",
+    "rust-std-1.26.2-x86_64-apple-darwin.tar.gz": "712a79cd10b96c7119980e535a36595e03c69a360f1541f690c09de858d92723",
+    "rust-std-1.26.2-x86_64-apple-darwin.tar.xz": "4945bc10a9e4c896168312abc361027b4116aea2138eeaea4291d2500bc78547",
+    "rust-std-1.26.2-x86_64-pc-windows-msvc.tar.gz": "41036c06e00ba038c5ec3940608370e93c6b9a731019d0349841fa78bc8ea125",
+    "rust-std-1.26.2-x86_64-pc-windows-msvc.tar.xz": "8a8f901a361a4605166b1379cddbf48b7895688f1fa8b2785fbbaa69f5309e9c",
+    "rust-std-1.26.2-x86_64-unknown-freebsd.tar.gz": "f54b58bf941d794ee10ab7ee9e1c94a70012073b0ee633ec2be585b1be2e31de",
+    "rust-std-1.26.2-x86_64-unknown-freebsd.tar.xz": "ec3a520e9f857ec0170f5ad2d57ca8b9c2d94033957d926740adc926e1a78f40",
+    "rust-std-1.26.2-x86_64-unknown-linux-gnu.tar.gz": "91634f05bf2d0a20e627aed08a8450673acecb963869273221de17130540fb26",
+    "rust-std-1.26.2-x86_64-unknown-linux-gnu.tar.xz": "83f0d8847bcb2130f1eec4298df35dbc94ba79ce9552ef91c9f22256453cc6dc",
+    "rust-std-1.26.2-x86_64-unknown-linux-musl.tar.gz": "5ba536ccc53bf550d7ae3f032cc743b2f13c1ac92e3be45f0843762ed8aa4ca0",
+    "rust-std-1.26.2-x86_64-unknown-linux-musl.tar.xz": "3c8026d1692e36379435238c407d19e0630d9b5bb55ccf997214559f5d0d099e",
+    "rust-std-1.27.0-aarch64-unknown-linux-gnu.tar.gz": "a32ff8d2ab75a229b73076182978e8b97ac1c5447b9446b1d253685ef31652ec",
+    "rust-std-1.27.0-aarch64-unknown-linux-gnu.tar.xz": "7d6e41fa476efa4e671013283e80fa65509abc1a3e106ad3d22ba99843a7e7df",
+    "rust-std-1.27.0-aarch64-unknown-linux-musl.tar.gz": "e64ee59e3c113483714c563a567532eba46c96ff7e7f3982e88fecf03d0c1cae",
+    "rust-std-1.27.0-aarch64-unknown-linux-musl.tar.xz": "957edbec59b09890de4f349558ca0d2c9ad9ff5b726852eeda4cae69c00d5a2a",
+    "rust-std-1.27.0-wasm32-unknown-unknown.tar.gz": "aa1afca259ecbee3cf65368e8f9d5e9a0d8ea86be30edf4ecfedecc1db110380",
+    "rust-std-1.27.0-wasm32-unknown-unknown.tar.xz": "969eb535077d58df6113bc3d736ffaa3872a41b4841c7fbf6a0f316c80853d42",
+    "rust-std-1.27.0-x86_64-apple-darwin.tar.gz": "15ee6418f9b564618e9c81a6dcd7706a2f8ae5ca24fd1b6d7527c97563a47e57",
+    "rust-std-1.27.0-x86_64-apple-darwin.tar.xz": "0da0e6ba26c5a67756b5e6c64b437a1e761224e69645c5a44cdcc53a7c9c7b18",
+    "rust-std-1.27.0-x86_64-pc-windows-msvc.tar.gz": "77c9102d192ed2dda7128dea4e60992d1135c50b85f0ef8e989f0fda3ed3b73c",
+    "rust-std-1.27.0-x86_64-pc-windows-msvc.tar.xz": "2d05d78fed0a3ee6e8649170b0570c3cd8ce5fec61b81fbef6f8458dec148776",
+    "rust-std-1.27.0-x86_64-unknown-freebsd.tar.gz": "6e307cc3798b50b37beb9ff43e88b12fb565ddaf051925fffa35bfbeb091d660",
+    "rust-std-1.27.0-x86_64-unknown-freebsd.tar.xz": "e7e3e815fbcf7e36c1298fc21d874371e4949449bc8283c9d68d8f3892803a8c",
+    "rust-std-1.27.0-x86_64-unknown-linux-gnu.tar.gz": "b8cf36922315ca792929d515327c74b873358a64be4929b2ecfbe23af21e8043",
+    "rust-std-1.27.0-x86_64-unknown-linux-gnu.tar.xz": "801ab125beeec6748f0380beb4258cf4c69567cfca7aa2d8df26788be58ce9da",
+    "rust-std-1.27.0-x86_64-unknown-linux-musl.tar.gz": "166b5286de202feebfbbfea18f2cc06b0a945dd7687985d6a14b3c811b18b202",
+    "rust-std-1.27.0-x86_64-unknown-linux-musl.tar.xz": "40e6cd3ed1d9226332e349a1ca3782c5f925fdcf9fb3090f4cbc9b3e971f3ec0",
+    "rust-std-1.27.1-aarch64-unknown-linux-gnu.tar.gz": "00a553c4b5869db1acc4f5fb1f6f954893db507ae01ed754bb8654f8916588e9",
+    "rust-std-1.27.1-aarch64-unknown-linux-gnu.tar.xz": "1f9565cac16e600c68ebfb4fe50b1658462698b8d4a1e8392f8182c4e813d99d",
+    "rust-std-1.27.1-aarch64-unknown-linux-musl.tar.gz": "aabf69e0ed8a0a45a1dd7c52bf532cff37ab00c1aa5cd1555ca57e4fee9dc64d",
+    "rust-std-1.27.1-aarch64-unknown-linux-musl.tar.xz": "e401e36819073d1c62ef01d4c68f87244a5f7846387a2644a5802d5be55319af",
+    "rust-std-1.27.1-wasm32-unknown-unknown.tar.gz": "e16cfda8a8eb29c81d34ea3ca7b4c0815b46ddb85814cbf68320f2666ef44d78",
+    "rust-std-1.27.1-wasm32-unknown-unknown.tar.xz": "f98bad41fcde2e7229730128513f03233a0c9a182316658263c1106945beea6e",
+    "rust-std-1.27.1-x86_64-apple-darwin.tar.gz": "a521599355e564984e43a63042b1de93dd7cf96730930501f86611dd766384e8",
+    "rust-std-1.27.1-x86_64-apple-darwin.tar.xz": "705d5847fb2ee439391fc917f5c6ff8606cafc81a64f6ae51beedc8f5ec542f7",
+    "rust-std-1.27.1-x86_64-pc-windows-msvc.tar.gz": "4745f31711f18e06859946b932909a26d4593552c6631c5710e72d3da26f06ab",
+    "rust-std-1.27.1-x86_64-pc-windows-msvc.tar.xz": "6b6a666c0e861b4f15df2c64d4c9123027039658a4241ee9cb6e8e2cd42dd3a7",
+    "rust-std-1.27.1-x86_64-unknown-freebsd.tar.gz": "12902b61a4897ade258217f045dfac3fe83d49dd52d1e2250bd94c3a10642b08",
+    "rust-std-1.27.1-x86_64-unknown-freebsd.tar.xz": "06f06c44c750a4f251fab9a627e053d1afd43e16c476eb66db677581f354371b",
+    "rust-std-1.27.1-x86_64-unknown-linux-gnu.tar.gz": "9a1830b522117d68eeec703b50692093352212e035a46baceea666bb37739c2d",
+    "rust-std-1.27.1-x86_64-unknown-linux-gnu.tar.xz": "d3b0d00357cfaecf85651bea6f1d72793a5a859b6b07e9613ba21285922d5d58",
+    "rust-std-1.27.1-x86_64-unknown-linux-musl.tar.gz": "c387d462fc07d4bace1355cfca70b68ff263432614cbe7c66d53ac25e1a47161",
+    "rust-std-1.27.1-x86_64-unknown-linux-musl.tar.xz": "011eac5524fe74b773b92c03bef41dac17ce7cc80ed246c472a8bc6c6fc5163c",
+    "rust-std-1.27.2-aarch64-unknown-linux-gnu.tar.gz": "39bafd1db4f1e881cdbd8d81b757bfef1cad6c06f6aa4514f8b693d997764e2a",
+    "rust-std-1.27.2-aarch64-unknown-linux-gnu.tar.xz": "1538eff6a3ecb62c362cf463686c28103bb162ea1274705e23116b5534f06c56",
+    "rust-std-1.27.2-aarch64-unknown-linux-musl.tar.gz": "5e8e6d5368ece8c822991c8b4437e83d0537f253cb70b39d627d17f012813122",
+    "rust-std-1.27.2-aarch64-unknown-linux-musl.tar.xz": "4473c33b209bf22cd95e00591aa604a7dc92821888a08a5c60dc51c6589e6e79",
+    "rust-std-1.27.2-wasm32-unknown-unknown.tar.gz": "59ad2323afe090c43e41dce482a4abed1473a7997db5db2ee236d49eac208b70",
+    "rust-std-1.27.2-wasm32-unknown-unknown.tar.xz": "0372a8d80425ef914096a87e7ceb6f40c3afe30b31976cee527f6b5575eca4f2",
+    "rust-std-1.27.2-x86_64-apple-darwin.tar.gz": "eed3688d9f551066593b34f07e4d28846caa99624c2168387993acc6bddd003d",
+    "rust-std-1.27.2-x86_64-apple-darwin.tar.xz": "6b75ef4b1c918f2150e5d26f9b69e5d30ee5c1e36b51e6bd6f45dd983bfb3283",
+    "rust-std-1.27.2-x86_64-pc-windows-msvc.tar.gz": "f5dbee42f3fde455d79e759a4854da78a650df3bcf27f194da78670feb11e10a",
+    "rust-std-1.27.2-x86_64-pc-windows-msvc.tar.xz": "b27720170d32f093313f05892d7027ab76234979e6f8bc3af07e98ca2042af7c",
+    "rust-std-1.27.2-x86_64-unknown-freebsd.tar.gz": "6051f8bacbfbd2c3dceeddab8c66274bed7ef260cf346d367c53495cd1567572",
+    "rust-std-1.27.2-x86_64-unknown-freebsd.tar.xz": "56e385edeb9d418232b06e69f51ece79deed550d101d508451ef3fa9f1780a8a",
+    "rust-std-1.27.2-x86_64-unknown-linux-gnu.tar.gz": "68984f2233853d3e9c7c56edd72a91b5822157f28fdb42023fb311af68f842dd",
+    "rust-std-1.27.2-x86_64-unknown-linux-gnu.tar.xz": "d25e00b8a86956bdf0efe0b20d700081c3f279a1e92f86ccc15fb4deefa42e14",
+    "rust-std-1.27.2-x86_64-unknown-linux-musl.tar.gz": "2ef23cad3779c8ee7abf7cbe7d93b0faa1ffd87e1ef5a378aa9ce566cd1b7644",
+    "rust-std-1.27.2-x86_64-unknown-linux-musl.tar.xz": "3f615213d1c07c8e04c0cf2e70c010e1f8c99ecddc21bf9c06596d4bc9146093",
+    "rust-std-1.28.0-aarch64-unknown-linux-gnu.tar.gz": "9ba698f68c5643f53934e1085af40c79c6d1b3bfa01ca6dcdffdc5eec8f44cc0",
+    "rust-std-1.28.0-aarch64-unknown-linux-gnu.tar.xz": "3a57261bb435fdac09bf43e51f5df3eac9adf95d89f453b4462775ef597b91cd",
+    "rust-std-1.28.0-aarch64-unknown-linux-musl.tar.gz": "b1acdf055d534f4ce295271fe6101833c65261aeb52ffb619911a4db3de35663",
+    "rust-std-1.28.0-aarch64-unknown-linux-musl.tar.xz": "a4a73a1115ef9a0306a5c27ab60fe3d66db56f011548509c8b5768121e4ed4a3",
+    "rust-std-1.28.0-wasm32-unknown-unknown.tar.gz": "33f9b2d3f568859db28ab32ec4dd388390d408f6204ab44886eec04cc08af843",
+    "rust-std-1.28.0-wasm32-unknown-unknown.tar.xz": "e7ef1b54f0cfb51b86276b855dbd220a9f92c1989c1acf669c92a648d74935c6",
+    "rust-std-1.28.0-x86_64-apple-darwin.tar.gz": "bd1b5110d35383349aafad904431d55656b13a3c02ed3b2020d2038557735ab9",
+    "rust-std-1.28.0-x86_64-apple-darwin.tar.xz": "6544da0d86d23b85185e9eaeb27a3c31f19c7964ae3d13409dfffc08f5b6ccdf",
+    "rust-std-1.28.0-x86_64-pc-windows-msvc.tar.gz": "876d68628e6e91113117516621ae4773cdbebdaab1e899d3ec83c612683947b8",
+    "rust-std-1.28.0-x86_64-pc-windows-msvc.tar.xz": "1f2442fda1d420a38f7adbcd1962b841dbab2e56c92cb1ddb406b868f703bac3",
+    "rust-std-1.28.0-x86_64-unknown-freebsd.tar.gz": "1fabaf71d21c1cdcddfb564950152ef862b519a175f7ee88d7e22bab31c4733e",
+    "rust-std-1.28.0-x86_64-unknown-freebsd.tar.xz": "91ff72b36b539c3b52a56abcda83bf1b39f75afbfe4e0c103a266f0ee8464395",
+    "rust-std-1.28.0-x86_64-unknown-linux-gnu.tar.gz": "c5aed4c7ef362b5754526d26acaccdc9300942fd12e5cc67cc56fc89576a9dab",
+    "rust-std-1.28.0-x86_64-unknown-linux-gnu.tar.xz": "80aca8c46aa724c91f7cb7fc038c8c94e6648e73156e9f35e1f73bc5dd5b0249",
+    "rust-std-1.28.0-x86_64-unknown-linux-musl.tar.gz": "caea8f24197232c25de0e387567af452e0d57b9103ef8acef167814f9acda08c",
+    "rust-std-1.28.0-x86_64-unknown-linux-musl.tar.xz": "00f6810acd6f169da3ff7821e6d77a18fb13f1a053863e0ba249de4e82c2053b",
+    "rust-std-1.29.0-aarch64-unknown-linux-gnu.tar.gz": "72c0ab49bbdbf819da5018b620aeed22d34af558f4db9598059cb253fc6adec3",
+    "rust-std-1.29.0-aarch64-unknown-linux-gnu.tar.xz": "9fb267947e83ff59d055599bb6c2c0ab5a16037e34d956e748e0b21b8184a4ec",
+    "rust-std-1.29.0-aarch64-unknown-linux-musl.tar.gz": "63f9cef857800feae763ba5356f1aa67b6d2d5c8c13e03378d79014e41eacf17",
+    "rust-std-1.29.0-aarch64-unknown-linux-musl.tar.xz": "c6b1392d953186fd5b052b3a64d81b3cc08333a33795f16edfd4326257092c7b",
+    "rust-std-1.29.0-wasm32-unknown-unknown.tar.gz": "83449101356a3ae4abf8597913602b1c79dd76cc52bca7a6a3a9f4fdabc565d5",
+    "rust-std-1.29.0-wasm32-unknown-unknown.tar.xz": "0bbaab4e9041ef71c98cc0883da54a8fa9c71be6363f99ed8a654668f1e31908",
+    "rust-std-1.29.0-x86_64-apple-darwin.tar.gz": "7fca06854f7c63d1d0da7c46c816af5dd23eb8010603b8cf3f07a61b162f02ae",
+    "rust-std-1.29.0-x86_64-apple-darwin.tar.xz": "620b52eee2c30c5f72c8d312c03d77db844156710f864cd2eecc32c1420e957f",
+    "rust-std-1.29.0-x86_64-pc-windows-msvc.tar.gz": "b05d04c684e070a820a0a3dc1128a24795895aecf25f6ffa0d68150e6209e424",
+    "rust-std-1.29.0-x86_64-pc-windows-msvc.tar.xz": "5fe01f163771cacf5fd72f9a53a50c856e430f5e70aa1b11823004d621bec13b",
+    "rust-std-1.29.0-x86_64-unknown-freebsd.tar.gz": "a59a50a60b033c00cf36c3b8039f300b2997245c21f2d02074f9d3157b54b353",
+    "rust-std-1.29.0-x86_64-unknown-freebsd.tar.xz": "9351a2eb4b347f2d3dc771a3e3283c0cf53bceefe4ce28d1c91f4c25f7144606",
+    "rust-std-1.29.0-x86_64-unknown-linux-gnu.tar.gz": "0bed2fcba596e1af6f56ed3f5d481b89b28a4ac26aea07128c6630c00c6a136b",
+    "rust-std-1.29.0-x86_64-unknown-linux-gnu.tar.xz": "58e53fc0823b7f5669e3806b3cb87503bca91e815383b37d0fce34a9140bed14",
+    "rust-std-1.29.0-x86_64-unknown-linux-musl.tar.gz": "f45012af49d05990b0917c465a7986be466d2dcf6fb82100903ba0dc7f63469c",
+    "rust-std-1.29.0-x86_64-unknown-linux-musl.tar.xz": "9c9e5c24dcc2adc5a9f088873c8c65b71d3bd0d24972ef2554193b1ebd5a1552",
+    "rust-std-1.29.1-aarch64-unknown-linux-gnu.tar.gz": "cf192e05192f79961b9f9e834e19c8b71654ac98b239408a6815d07ff2a96f19",
+    "rust-std-1.29.1-aarch64-unknown-linux-gnu.tar.xz": "87c86b7a3e23632a2ba1f8386b8ebca00cf5f3f30bd889712ad7d25ed3ad9e20",
+    "rust-std-1.29.1-aarch64-unknown-linux-musl.tar.gz": "fa2f496ee03bff273eb88726e1faa2cbd6156b33ca19acb5e3b2f4c687a5594b",
+    "rust-std-1.29.1-aarch64-unknown-linux-musl.tar.xz": "184995d73f526c150e8676b9f5ffaa4eaebd575212058946593baaae46723ed8",
+    "rust-std-1.29.1-wasm32-unknown-unknown.tar.gz": "48f31123614b5e0799200e0db640ff05c7236d0b6940bedf4043d5d19a2b22df",
+    "rust-std-1.29.1-wasm32-unknown-unknown.tar.xz": "3c17286c61b511753f2905b04b9e41feeb53700c15d9a053860501117aa91c42",
+    "rust-std-1.29.1-x86_64-apple-darwin.tar.gz": "9c31fba3bfb816cf6aa8d9d4c3e7f235233035ada95417e130de8487faa507d3",
+    "rust-std-1.29.1-x86_64-apple-darwin.tar.xz": "810308caf7f548c41b349aba8f5f5bd83f0cf06dfa34d5f1b9281d7ede7705ab",
+    "rust-std-1.29.1-x86_64-pc-windows-msvc.tar.gz": "cb7825c2a1fa46696a429fc7e6afd3f2b396d1467a6e4b5f850ff8dedd73ac1b",
+    "rust-std-1.29.1-x86_64-pc-windows-msvc.tar.xz": "b001578bd3820ddf5a72c66ce9ffbc67bfcf690c3402aa1e50e804e1093f212d",
+    "rust-std-1.29.1-x86_64-unknown-freebsd.tar.gz": "aad9e36766284656449dad75cc1c77c7b86da99abfb0ec424689101679aa8a43",
+    "rust-std-1.29.1-x86_64-unknown-freebsd.tar.xz": "52e7bac478d6c698778769ebfe1f160d6961d34216d98130c58feed8b366e0f0",
+    "rust-std-1.29.1-x86_64-unknown-linux-gnu.tar.gz": "d05ddae0f05d721de00bf6e40f85f1ccdec902f864b9647e2e1cb08a8202d513",
+    "rust-std-1.29.1-x86_64-unknown-linux-gnu.tar.xz": "4da2606613910870e21d6057047ad9f6ad5d570e158f584a4b2a2a40ed2d2483",
+    "rust-std-1.29.1-x86_64-unknown-linux-musl.tar.gz": "7ef498c2c817afc7843d301431015931323af1759d325f46b4379bf4dccec331",
+    "rust-std-1.29.1-x86_64-unknown-linux-musl.tar.xz": "80b7318bd5336a7bcb6725b2464649f1368a00d3164be7f01e9b29d11d38bf6d",
+    "rust-std-1.29.2-aarch64-unknown-linux-gnu.tar.gz": "f64b051f0b293ee66d7556231dcd70d143525bf6d0b2afc6fae945bf1ffd8073",
+    "rust-std-1.29.2-aarch64-unknown-linux-gnu.tar.xz": "df62bdb6839e313f8f9c3a92b4de63ba2c37b9c7b534449a392db1ede0f6a741",
+    "rust-std-1.29.2-aarch64-unknown-linux-musl.tar.gz": "660dcc5252db28a3d46712606a299001fd9a0fe1f27333a88269ab4502315c43",
+    "rust-std-1.29.2-aarch64-unknown-linux-musl.tar.xz": "805514df184834005cb1ea096d37fb488ff9d392e68a90928886cc02dab24329",
+    "rust-std-1.29.2-wasm32-unknown-unknown.tar.gz": "e8317f0677a3d4ee3b4e5f2dffdf0cdb930c77da20676a32099fde477b439d5e",
+    "rust-std-1.29.2-wasm32-unknown-unknown.tar.xz": "091ca45d4ebfe24df3a10dbb60d599d92739da8be25c7ae75551e6f4ed2ef26d",
+    "rust-std-1.29.2-x86_64-apple-darwin.tar.gz": "72cd953cb8ea05667f5d58f5c4ba615a564611a86303c0f8f9235e7a53852692",
+    "rust-std-1.29.2-x86_64-apple-darwin.tar.xz": "a36543ff0ae1e1409baab147ecb8ca8d92050dfe16af6fdbec48b1435e9b6e95",
+    "rust-std-1.29.2-x86_64-pc-windows-msvc.tar.gz": "5f2320e89946208b14a34d96a2bfc652bf1debe2bbf139fda19f7dc3a5f91694",
+    "rust-std-1.29.2-x86_64-pc-windows-msvc.tar.xz": "e1c4d7bdd5ebd9aae6ac76cff62d11b3e5702ea3455642fec7f35c28c573e273",
+    "rust-std-1.29.2-x86_64-unknown-freebsd.tar.gz": "ddde8a33ddd902471c51f273087d90e9f7f184b7f09f5d14cab454c8c4965ec2",
+    "rust-std-1.29.2-x86_64-unknown-freebsd.tar.xz": "79382559225298abba3a8d48f8e459603d904c22d416eb50bc1b072b3c5b37f3",
+    "rust-std-1.29.2-x86_64-unknown-linux-gnu.tar.gz": "1fe9a0f354256483a354ee1b51c60bf9f3f48868581f7cb36d0cc51a82400605",
+    "rust-std-1.29.2-x86_64-unknown-linux-gnu.tar.xz": "be16e9db4e39e5e1af0621eea715d13e0fdc56f7b14c3d7310905dc34dfa618a",
+    "rust-std-1.29.2-x86_64-unknown-linux-musl.tar.gz": "7588af2d23b4e2d342476acfd5fb95dc399777142cf1fb39a6ef0a40d70437bc",
+    "rust-std-1.29.2-x86_64-unknown-linux-musl.tar.xz": "e1b106bc35e608d42e90729c8be2d3fb29cdf883060ff40fe84e147b3536d2a6",
+    "rust-std-1.30.0-aarch64-unknown-linux-gnu.tar.gz": "0166650de5072545c3945416638dec9beec5ae1f3c72069e314b7c50e18b4819",
+    "rust-std-1.30.0-aarch64-unknown-linux-gnu.tar.xz": "ac68b928e827859c959780fe43f2fa4877d4425ee1ad1ddd0c0dc6557124351d",
+    "rust-std-1.30.0-aarch64-unknown-linux-musl.tar.gz": "03ea73844f2963e1716661142a15fc39b8dc026b2654ababe009d31df4e78363",
+    "rust-std-1.30.0-aarch64-unknown-linux-musl.tar.xz": "1fbd39d54c9a577e0b2cf527c22b0d367f21f67469b5ce9e4efb1b8bca4c14f3",
+    "rust-std-1.30.0-wasm32-unknown-unknown.tar.gz": "e85afbc075e162e9af71795e1dc81fa0d2cf657dd10b74751f1769585321a20f",
+    "rust-std-1.30.0-wasm32-unknown-unknown.tar.xz": "10dc1ba0607ac45b1f695af4c5d193908162f427ac1b165a1934763aef81943f",
+    "rust-std-1.30.0-x86_64-apple-darwin.tar.gz": "33f4a7574c82db1b1bc3f829d0fecf9047bbac073c305500ada4aeaa08272ca9",
+    "rust-std-1.30.0-x86_64-apple-darwin.tar.xz": "fde1b5c6e8167a524212b3dc6ea89f53fa6db0da6e235dc1c1e03146b91c9e7b",
+    "rust-std-1.30.0-x86_64-pc-windows-msvc.tar.gz": "7b493d21ac115dc4a1ef85cf0d8e73f688bda065c3abbdf68ff3674c122fb9e4",
+    "rust-std-1.30.0-x86_64-pc-windows-msvc.tar.xz": "8461ae7257b39e57e5050dc38e4504fb488ffbe438b8252c91780cdf11ea34e5",
+    "rust-std-1.30.0-x86_64-unknown-freebsd.tar.gz": "4040fe677524e2ead69a2fcab4c16acaad3d4c4f1210ae36f400f82463bdfbc7",
+    "rust-std-1.30.0-x86_64-unknown-freebsd.tar.xz": "48fc6c0152bf1af2896968946d280ff813ddc602609b45cb4f6445f49432fd78",
+    "rust-std-1.30.0-x86_64-unknown-linux-gnu.tar.gz": "8514eedc0ed99ab75c61be3137c3e57c4115063ddc07aec842f687ebfc7ceda3",
+    "rust-std-1.30.0-x86_64-unknown-linux-gnu.tar.xz": "af33548af67ff851ddaae17f49237d1d19c2ab01a167b771eb1fe053d3431f38",
+    "rust-std-1.30.0-x86_64-unknown-linux-musl.tar.gz": "c2fbdb20b81992220002d1c8a4b76b9363711370cc62a42811d2980f9b5c8401",
+    "rust-std-1.30.0-x86_64-unknown-linux-musl.tar.xz": "50fdff040f68c801f6bb45e973e3394c5574d849efef655a4319468bb32fa0c6",
+    "rust-std-1.30.1-aarch64-unknown-linux-gnu.tar.gz": "64410910d73628a77dfe94dbcd0cd49709b518b5f641fbe4a2476b9af097d47b",
+    "rust-std-1.30.1-aarch64-unknown-linux-gnu.tar.xz": "580018021c1cf5d8889a8bfcc93743dae9f4f4e285b0873232110cf52577a03b",
+    "rust-std-1.30.1-aarch64-unknown-linux-musl.tar.gz": "0bdcb6fcf904d0b047d75e0368caf1d29380c62ba5c54254ca8ad777e1e7b5ba",
+    "rust-std-1.30.1-aarch64-unknown-linux-musl.tar.xz": "706872bf28443f9ba903002ca72bc3f8c24d4237461d2471bbf74e3a9b720e58",
+    "rust-std-1.30.1-wasm32-unknown-unknown.tar.gz": "0892ab95cdfb0bee3c9981e4a5c69a88c0fc5fb7e0c206638291e91a4c794ee0",
+    "rust-std-1.30.1-wasm32-unknown-unknown.tar.xz": "f37f66320a5fa9aad125d3309bf355d4a77ff0315d47c9e04fd6f8f57afc2edf",
+    "rust-std-1.30.1-x86_64-apple-darwin.tar.gz": "a13d4a748914056f34c2e8691b4ca8ab6d16bb04e6e5fafc22ca594789f4e8b1",
+    "rust-std-1.30.1-x86_64-apple-darwin.tar.xz": "62260e2f55cd50feb030218ba1c9753c2b62a377d8d32f30965c253d7305035e",
+    "rust-std-1.30.1-x86_64-pc-windows-msvc.tar.gz": "177d887593e29847a1bb7afeb7924c3958248a9ec8604e66671d8036e8fbf9b1",
+    "rust-std-1.30.1-x86_64-pc-windows-msvc.tar.xz": "63c52a16cf71f4dbba4f14226c68e578dfeb827315b8d7f68f0cb7bfb705aeeb",
+    "rust-std-1.30.1-x86_64-unknown-freebsd.tar.gz": "66c91d14d8d3c1523f9b5c52b81e4293ba5378fcf8b3e5d0ed52e96afe6bdd31",
+    "rust-std-1.30.1-x86_64-unknown-freebsd.tar.xz": "e3fbab0a3d6b1b72fe17381187a7bcbd944e4e74b92635fe6a8705312111712b",
+    "rust-std-1.30.1-x86_64-unknown-linux-gnu.tar.gz": "12c4b164efed44c28096fcd141225ee9bf74e7e3395bc6a60c11c9115a0536c6",
+    "rust-std-1.30.1-x86_64-unknown-linux-gnu.tar.xz": "23e246736fc12db8c81391485281a61a6c68203efd7ede8b547a13785325824a",
+    "rust-std-1.30.1-x86_64-unknown-linux-musl.tar.gz": "1965d586f74bacb3b7332621c1040aa51efd65393da86da6c5296dafbe57602c",
+    "rust-std-1.30.1-x86_64-unknown-linux-musl.tar.xz": "a00a9d9fb5f9248fb0aaf985bbf1640553b2c0b1888eb297a7edb5961b1c01ac",
+    "rust-std-1.31.0-aarch64-unknown-linux-gnu.tar.gz": "02e5b48d8fff293a95b591646e707a8c61399ab6c244508ed842f3d736ded641",
+    "rust-std-1.31.0-aarch64-unknown-linux-gnu.tar.xz": "d2eddb9d7e0b40a519531df149f340a2397687f871148bccdcff1e3061833bd6",
+    "rust-std-1.31.0-aarch64-unknown-linux-musl.tar.gz": "3cedc72a9754219f1684e7037ed10866f0cd756d6ecfaffcd2ef8d57374f85b0",
+    "rust-std-1.31.0-aarch64-unknown-linux-musl.tar.xz": "f833a7d29d688d0f55f2f19b4eacc875a324badbae37374d12eac1d8dc2850ea",
+    "rust-std-1.31.0-wasm32-unknown-unknown.tar.gz": "ff284b10844cdddca786d85fc3be48796f7286a14350e807fa9912e7748634f0",
+    "rust-std-1.31.0-wasm32-unknown-unknown.tar.xz": "91cf9880feaa9a07e9a7476870bdce01afd66d2235d183e11376a645427a0362",
+    "rust-std-1.31.0-x86_64-apple-darwin.tar.gz": "7dd4bea941cde8a5ece3286ed43733503c092a8edb50c8c31223a738a526c246",
+    "rust-std-1.31.0-x86_64-apple-darwin.tar.xz": "e793b9b7a793236e17e548415d1a574c2e92ded59a1adfc703bfd2145353933f",
+    "rust-std-1.31.0-x86_64-pc-windows-msvc.tar.gz": "625e1dbb5996cb9845cb6c779e4a6353faa1e05535471fc00aff6a6f84efeab5",
+    "rust-std-1.31.0-x86_64-pc-windows-msvc.tar.xz": "9813780869a74a9a19778ead5bc0912ffd709c8c86b70b2a7fb0d0424586cdde",
+    "rust-std-1.31.0-x86_64-unknown-freebsd.tar.gz": "3779f0732ee8fdc1d81663172a72219d59b716e8cc5a6b07bf1d5dd744f74b13",
+    "rust-std-1.31.0-x86_64-unknown-freebsd.tar.xz": "a1569a5bcc27c8a4a840546e8e8d58468eebedafa2978a444ef9f2789dd6f295",
+    "rust-std-1.31.0-x86_64-unknown-linux-gnu.tar.gz": "fe67a62c7a63acbf2458a36d7689ef41903187a472f0c28850f1fca7ea478da8",
+    "rust-std-1.31.0-x86_64-unknown-linux-gnu.tar.xz": "d6ce2bbef644c70b01246d301ef2df1b56ec2c44957fafd3a742e4508241a50f",
+    "rust-std-1.31.0-x86_64-unknown-linux-musl.tar.gz": "f3bdef5a9e4974296965b36ced9fa3375eb9e3c3d51a305d64b9be47fa2ae55c",
+    "rust-std-1.31.0-x86_64-unknown-linux-musl.tar.xz": "bf9ff0cb15ab5a11319427de0f3af708815b37f82b017c9c8520332f3db6e058",
+    "rust-std-1.31.1-aarch64-unknown-linux-gnu.tar.gz": "cc32d23cc2995c4838ab2ed4e709ca9748f13f912e9fbbb7cc78c41dbc4de268",
+    "rust-std-1.31.1-aarch64-unknown-linux-gnu.tar.xz": "e68cea6a0e742d5a49e2c4f5255c5cd47336d8e6997f81f1ed2f14d29c56c299",
+    "rust-std-1.31.1-aarch64-unknown-linux-musl.tar.gz": "3d48648a2dad8fb6e7d4eed2d7df14eb20c79e654bc1fe666ab408cebc6e8b72",
+    "rust-std-1.31.1-aarch64-unknown-linux-musl.tar.xz": "d5178b5a485c19fb81c97fab8f70c4ee9ad31ed472841e19dbc776c3e4eeec19",
+    "rust-std-1.31.1-wasm32-unknown-unknown.tar.gz": "a9b1774a6aed9387b12244d2ac0ea047506ffffee67cd834148f01c66ed24e98",
+    "rust-std-1.31.1-wasm32-unknown-unknown.tar.xz": "b9c7866d268c3797204e7b37300cd8c902850b2a5e38f7f1267bc017b9d94e4a",
+    "rust-std-1.31.1-x86_64-apple-darwin.tar.gz": "91c3b12614f9795ef2e0092010f247a38d09c95d4089f75b44fad14679bd1cfb",
+    "rust-std-1.31.1-x86_64-apple-darwin.tar.xz": "735678959d79620f4c83771c67e0d70fe86eec5cc94db957373ac5b26370b419",
+    "rust-std-1.31.1-x86_64-pc-windows-msvc.tar.gz": "e84c961261fe70da68dc56effbb277eadeac51fb5bdd2287a168cbe2ba2b1a2e",
+    "rust-std-1.31.1-x86_64-pc-windows-msvc.tar.xz": "912a447ad7ba49a5aefb0b7e1ccb93c8ec7093f64738462b19d261e7be206020",
+    "rust-std-1.31.1-x86_64-unknown-freebsd.tar.gz": "89e551403f70eed976ac1dd91c3effc9434ef450da4c347d24a141529f83a101",
+    "rust-std-1.31.1-x86_64-unknown-freebsd.tar.xz": "b258b288259e69fc1d1ce662c120fbdf5ef484c8be017841937853102ffa1817",
+    "rust-std-1.31.1-x86_64-unknown-linux-gnu.tar.gz": "699664b3a64959a2d75e486e19e7cc9934cbcbf2c57a977dd2a2b33cff367da1",
+    "rust-std-1.31.1-x86_64-unknown-linux-gnu.tar.xz": "4facc7e7236d9550c973d5183e626b3ccd483efdfae493a22b448788b83096ba",
+    "rust-std-1.31.1-x86_64-unknown-linux-musl.tar.gz": "ea622d3bc171a23f704440ea99e96023888425d0c3d90bc6fcc592c17e9f8f54",
+    "rust-std-1.31.1-x86_64-unknown-linux-musl.tar.xz": "17d45aaab0ad8ddaacf820b47c1a333e5af910d349f658257dea4aae1a0e5dc9",
+    "rust-std-1.32.0-aarch64-unknown-linux-gnu.tar.gz": "346efe3aef2aff7b71a611bf7661bcec5f9bc4025a599c2866ec5fd330247cb9",
+    "rust-std-1.32.0-aarch64-unknown-linux-gnu.tar.xz": "fc433a7e3313042e5f4237a2512205689701336ea8e5abd60f22fb907cb0e7e8",
+    "rust-std-1.32.0-aarch64-unknown-linux-musl.tar.gz": "ca67a0ae151de83e077b95dfca459ca2445db461c7e6428c11a32e23e8ea9525",
+    "rust-std-1.32.0-aarch64-unknown-linux-musl.tar.xz": "00f34f26af7fb57c745742d82de255259643e0d90e913cf0ea1e4fd5df2e49e7",
+    "rust-std-1.32.0-wasm32-unknown-unknown.tar.gz": "5da2824a9404204ce2a72b44961e2dd8854fe2232f65851c1a8ff5c59ef537d5",
+    "rust-std-1.32.0-wasm32-unknown-unknown.tar.xz": "fa3c98f41f6fa2d9050be5caf60a6da1283716bd70c7c1eb7e71b923924266d5",
+    "rust-std-1.32.0-x86_64-apple-darwin.tar.gz": "b736d035a97f830585360e54e3f8877b68c942211cf0a75e805f34bfb36103a6",
+    "rust-std-1.32.0-x86_64-apple-darwin.tar.xz": "fb32b92483e6065e19ad540f8f28731593d9ee1254994037b988978e0086e19e",
+    "rust-std-1.32.0-x86_64-pc-windows-msvc.tar.gz": "cd9693213bcc2ca0ff1490861d3b52703b65df6f678c3f2ae9ad3f3717e08871",
+    "rust-std-1.32.0-x86_64-pc-windows-msvc.tar.xz": "f026eda83fad7893ba54d357b00a83c72ef9e5bdd0ee02936841d8efffc4fa98",
+    "rust-std-1.32.0-x86_64-unknown-freebsd.tar.gz": "d50f674379791a93764d383153ed6533cea165ede7f233df4e17563bfdab273c",
+    "rust-std-1.32.0-x86_64-unknown-freebsd.tar.xz": "9ccd8d242f10565cf45570b22a64b7a08253f29aad59d6d47110464e09b775b0",
+    "rust-std-1.32.0-x86_64-unknown-linux-gnu.tar.gz": "9f2705a3ed3217c13fd55569406c52f590030752f57520312e135223ae930caf",
+    "rust-std-1.32.0-x86_64-unknown-linux-gnu.tar.xz": "3cea0fa8c896d19f615a2a9c7f0a59fea1483b9d5f884411b5cdfeec16497562",
+    "rust-std-1.32.0-x86_64-unknown-linux-musl.tar.gz": "d69a44623be904b48c72adbe0141401c4c1068b4a45502328f9e219e0f833c75",
+    "rust-std-1.32.0-x86_64-unknown-linux-musl.tar.xz": "080c2237655ae747a3816420a95762740e5928d228a4ae71eeb98845b950ecb7",
+    "rust-std-1.33.0-aarch64-unknown-linux-gnu.tar.gz": "26f13cd80c95d484ccffecf517f1e05ce521072a00f1adea43d02b3f9d37f82a",
+    "rust-std-1.33.0-aarch64-unknown-linux-gnu.tar.xz": "3e3449dada8306b3ff91f23c7803c7312a47e93af140f757b29b74f1e226a505",
+    "rust-std-1.33.0-aarch64-unknown-linux-musl.tar.gz": "47c7ed55b77e161c9489ca903be32be80dd0efdf88d55f472bb54cce832629de",
+    "rust-std-1.33.0-aarch64-unknown-linux-musl.tar.xz": "485d42d19a894ec3f06d8fe8dfacd73a3c66002fc48ee3ad25122dfdf62d3a86",
+    "rust-std-1.33.0-wasm32-unknown-unknown.tar.gz": "ea1662a05f89f9fb725cba851f6636316cd80052fed610e4912432e4ee523db1",
+    "rust-std-1.33.0-wasm32-unknown-unknown.tar.xz": "041596abad6ce058951c520388f7dd4fc59f0ad3a2380a2787cc27cf39974ee2",
+    "rust-std-1.33.0-x86_64-apple-darwin.tar.gz": "94247d4d11c631c9d4256f4b0aedd7fd0379fdb55174405c4c1c0dd0c40097ca",
+    "rust-std-1.33.0-x86_64-apple-darwin.tar.xz": "874dc8f8bc4a3302a5184191fc99ab64c1cff68e2dc60ce6123cc28235b57c93",
+    "rust-std-1.33.0-x86_64-pc-windows-msvc.tar.gz": "36d94915b8aa9d3207d31ce77bbb790685cb8263920f0873875ae433fcb8709a",
+    "rust-std-1.33.0-x86_64-pc-windows-msvc.tar.xz": "d147e1198117bb68965440533fcd070009774f573fa76b13fc577237834e4a8f",
+    "rust-std-1.33.0-x86_64-unknown-freebsd.tar.gz": "8eec7a21a3368890fdf0b826e7bc1928775724c0a4bd14d86304cc7e48309237",
+    "rust-std-1.33.0-x86_64-unknown-freebsd.tar.xz": "d25bfef40ad944a40d959e3afed487aae96bb2ce923f7be115356a7ee8cd9a31",
+    "rust-std-1.33.0-x86_64-unknown-linux-gnu.tar.gz": "661c2ba717ae1502f002b4c6e7aeb8941685c7ea8fe7ac26ed9ede26f615b7af",
+    "rust-std-1.33.0-x86_64-unknown-linux-gnu.tar.xz": "6f20343ed73faf5fdfc423bec38a9bb1910a0a962af6f2dddd7184407543ed0e",
+    "rust-std-1.33.0-x86_64-unknown-linux-musl.tar.gz": "c3c0bf38140f7108705bbeeeaebd3dd9e23f556d36796779100c8ecf9142da7f",
+    "rust-std-1.33.0-x86_64-unknown-linux-musl.tar.xz": "dfa318f5b7cf331963bc5a1891f00f6d09bcbea428e5d47e57ba6198c84d9a29",
+    "rust-std-1.34.0-aarch64-unknown-linux-gnu.tar.gz": "d175e91206aba9e2056a9c5af50f700502e70b2f8eb609854d660ac2f3bf1fff",
+    "rust-std-1.34.0-aarch64-unknown-linux-gnu.tar.xz": "9b2f742b15ba65f8d63fe925fed4e5ceec6102d3692f12373fa06b90c02078a5",
+    "rust-std-1.34.0-aarch64-unknown-linux-musl.tar.gz": "2b08cf5b0fdd2cd71e7aece36587fb4869e53faace966eaddb2e2c5fb908eb74",
+    "rust-std-1.34.0-aarch64-unknown-linux-musl.tar.xz": "d8cd2a53be14c228abbd209713bd0713c901ed2226e6d2a3b2c6213a7a89a1e8",
+    "rust-std-1.34.0-wasm32-unknown-unknown.tar.gz": "4add0e23d048309cd284096c36342a6c2307a293072ced9fceeb6a2a48f3797f",
+    "rust-std-1.34.0-wasm32-unknown-unknown.tar.xz": "0cca239ee957f533b130a069780afc3491077acbe9ab23eedb126fa40ee4727d",
+    "rust-std-1.34.0-x86_64-apple-darwin.tar.gz": "f5a4fa8e86e1d4483bbe80d0adb08a7f5e466d8173bb5ea596ee698c75d0fd19",
+    "rust-std-1.34.0-x86_64-apple-darwin.tar.xz": "3d9a6f3aa295844bc877b020af9614c81dd3f5c93af96d80af6bc8f6eaa5f35c",
+    "rust-std-1.34.0-x86_64-pc-windows-msvc.tar.gz": "3037d196ac175595de3ddb3c8d26e9795e1765bb083a33da30d2b6afb5b03e17",
+    "rust-std-1.34.0-x86_64-pc-windows-msvc.tar.xz": "92f34a6423d481af3568a546e29a2a2cdefce22ed9e355d430c20a0cd2300b38",
+    "rust-std-1.34.0-x86_64-unknown-freebsd.tar.gz": "c012bcf9ee417308fb53b97e58d753f90699bd516bcafd6cc83d6f0a54423f3e",
+    "rust-std-1.34.0-x86_64-unknown-freebsd.tar.xz": "0af31ddafff59c959337b3cde9081a05fdc94687ebccf353fc24bce26578c175",
+    "rust-std-1.34.0-x86_64-unknown-linux-gnu.tar.gz": "6565dbe18ee9fa972058b17744ec1129c4fcbf797443f2e16b999df3870d6281",
+    "rust-std-1.34.0-x86_64-unknown-linux-gnu.tar.xz": "32e097e75f13975e24e45465f2911dd794194f2803e9f6ae96d6f6254596fa45",
+    "rust-std-1.34.0-x86_64-unknown-linux-musl.tar.gz": "57e65e5679e7bc00a5bad52de0375f81f91f2f2c3fb1d25af626e4aa4510d80d",
+    "rust-std-1.34.0-x86_64-unknown-linux-musl.tar.xz": "749d0d1bc5d9625da08bd651681f0da5d481c22e4e6af05cd86e9f13af289f0f",
+    "rust-std-1.35.0-aarch64-unknown-linux-gnu.tar.gz": "eee3c6a5c7ef5bc21b626ce350b0e1b02310e0463b6686683262f3fef400746d",
+    "rust-std-1.35.0-aarch64-unknown-linux-gnu.tar.xz": "77972a832aeb6991ef0016ce32b60818c4e35eb1bdb773ef0b117080ac36dcea",
+    "rust-std-1.35.0-aarch64-unknown-linux-musl.tar.gz": "518ba1fb0c0020856eb06ecf3d4d11b94b2ffb0b5f318aac9e086be9b0be2ccd",
+    "rust-std-1.35.0-aarch64-unknown-linux-musl.tar.xz": "7f8d9d5d609eb10bddf7e9402b52f795a8f0ffcf77f3d6f3d2316311d93f395b",
+    "rust-std-1.35.0-wasm32-unknown-unknown.tar.gz": "14f1640b35fe351dccd54fc459dea6b7ea199324a723e6d3efc42d519adca99b",
+    "rust-std-1.35.0-wasm32-unknown-unknown.tar.xz": "4bbada0e82e3dc82bc7aeab1bdb1ecca313905eaf51afb66817304e077ef6472",
+    "rust-std-1.35.0-x86_64-apple-darwin.tar.gz": "93a640d065d761b85b0f770dfa865b2f86a671a7fac0d5079e4cdc9e4e031011",
+    "rust-std-1.35.0-x86_64-apple-darwin.tar.xz": "025c2dcaaf1ba0a8ff32f2f410d823939ab7c5fe0f5ecbbbc4f5047f55a42e57",
+    "rust-std-1.35.0-x86_64-pc-windows-msvc.tar.gz": "2d9091b4a78d7f86b9db5d086b0eebbc2afad4bf828cfbc4b2cc44af86f52210",
+    "rust-std-1.35.0-x86_64-pc-windows-msvc.tar.xz": "1c60efcf777b7ff1f175c3f535cf99553aa56210ef933e62f108778254df40f9",
+    "rust-std-1.35.0-x86_64-unknown-freebsd.tar.gz": "22e8a2deb83dac920237f810b612b7ea555b03f5830f413a94d007ec683de519",
+    "rust-std-1.35.0-x86_64-unknown-freebsd.tar.xz": "4925ecf0093a1077787d7087cf4636553898d8a5e82618d08e4df86ed518ade5",
+    "rust-std-1.35.0-x86_64-unknown-linux-gnu.tar.gz": "5dfa92661ff1a22680785bd6999b6117ae66841e2bd9e5318eb97002956131e4",
+    "rust-std-1.35.0-x86_64-unknown-linux-gnu.tar.xz": "ccff05d0e2d88499505b10f8e33e8b1645df057f918edc81f8acb0fcee9f90b2",
+    "rust-std-1.35.0-x86_64-unknown-linux-musl.tar.gz": "c9ac131020d4a422191f1e55c66ca5b1bf1b768180cbc2e717eefefec049bd37",
+    "rust-std-1.35.0-x86_64-unknown-linux-musl.tar.xz": "3574e0d43b2746ea0cb9f8084670699f5cb920cee646026cec1da152818c51ba",
+    "rust-std-1.36.0-aarch64-unknown-linux-gnu.tar.gz": "22bfc32b5003c3d5259babb202f3f66be16fa6f3c75c20f429a16d7ef5eb1928",
+    "rust-std-1.36.0-aarch64-unknown-linux-gnu.tar.xz": "46c96cdca589e0b256e59370a6c9a1126f00cdd48b5659b638aa4dd7198b0406",
+    "rust-std-1.36.0-aarch64-unknown-linux-musl.tar.gz": "42778ab5f87d2dbfc6849fcf0c6e0a3760b18e8c89385130da0a1953d5fed147",
+    "rust-std-1.36.0-aarch64-unknown-linux-musl.tar.xz": "284e38f2b68d79c41f1073d11d45c58b64b165eaf9660a493b1d96bc19ae7e49",
+    "rust-std-1.36.0-wasm32-unknown-unknown.tar.gz": "7fc1d9f19f6674f73fb89c24aeb741adc59896da6d7ce2e16317aa1fb084bea4",
+    "rust-std-1.36.0-wasm32-unknown-unknown.tar.xz": "1f0402bdfc0ea24cf5461f5f7a21ffc9de8d5183d40178ef6c334026cdc919aa",
+    "rust-std-1.36.0-wasm32-wasi.tar.gz": "382dd29fa294ef53272984b9121e07d2b50cc131c561bb7ab72bdebda3abc031",
+    "rust-std-1.36.0-wasm32-wasi.tar.xz": "194feedc3bac687bc442432b142ec3cbf1ed6d5a2dc5f741e68a5cf2ebfa4ae2",
+    "rust-std-1.36.0-x86_64-apple-darwin.tar.gz": "7c6806809e010e5fba1780007ecff5c31f0ad2fcac1b414b98ca3baa0fb41b36",
+    "rust-std-1.36.0-x86_64-apple-darwin.tar.xz": "798087a4a0a3e87997abbf67f35e2f00af4fbf2f47474cb2b2899d91e88cab60",
+    "rust-std-1.36.0-x86_64-pc-windows-msvc.tar.gz": "2ef035a156b7f20a06677f3873631833afdf9cf755af3fc9466c02d9725755eb",
+    "rust-std-1.36.0-x86_64-pc-windows-msvc.tar.xz": "26f1fef2c8be636a3c1f8147c543f2c967bc05cec941c2238c0ac2e1393c0b20",
+    "rust-std-1.36.0-x86_64-unknown-freebsd.tar.gz": "a2a923cbfa3481af66c22673cac38e7cb70e26333318ad59c27b8b6ac16a84fe",
+    "rust-std-1.36.0-x86_64-unknown-freebsd.tar.xz": "5ceac44ea809ae4dd0c5ef35d4d0e83b6f082bcd5ffc244e92a041a974fc9be8",
+    "rust-std-1.36.0-x86_64-unknown-linux-gnu.tar.gz": "f92425592c02d4681a5c5ae43ac3ad7ddcc218da50fc651ddc5c2240843a7f31",
+    "rust-std-1.36.0-x86_64-unknown-linux-gnu.tar.xz": "ce8e12684b568a8a4f7d346a743383429849cf3f028f5712ad3d3e31590c8db3",
+    "rust-std-1.36.0-x86_64-unknown-linux-musl.tar.gz": "4d36e7b52839cff72481b2b1858417f382be36ffa5f084f72f35c1a9117c94ea",
+    "rust-std-1.36.0-x86_64-unknown-linux-musl.tar.xz": "70d0cc38cc829603c81812c59435ef85456a93962bea20deb12f0634e87fbaf7",
+    "rust-std-1.37.0-aarch64-unknown-linux-gnu.tar.gz": "60d64dde9178fdb698b44315b182375916116e30f5fe7f0d8278dd62eb15e7b3",
+    "rust-std-1.37.0-aarch64-unknown-linux-gnu.tar.xz": "eb0105a56563112ac841171d94d92ce1e7da1e7affa26488c04cb1dbe822c76b",
+    "rust-std-1.37.0-aarch64-unknown-linux-musl.tar.gz": "68db64972c1af5d4d0c4b3d62b644d158df149eed4197e1c26e93ae4a81e4860",
+    "rust-std-1.37.0-aarch64-unknown-linux-musl.tar.xz": "452f70ff3c73d4e27d7b17d04152a0469d6d7a59d954297e99b71220fc1c5530",
+    "rust-std-1.37.0-wasm32-unknown-unknown.tar.gz": "b55f82540aa900d2d1d1f6879c9374a8efc78d9eeb20af181ee30182b7f9688c",
+    "rust-std-1.37.0-wasm32-unknown-unknown.tar.xz": "f5f1d1bd7f9a0e701800c1a08f8a7eb5bda6ae7fabd98e2f359efc665f516d61",
+    "rust-std-1.37.0-wasm32-wasi.tar.gz": "551ee5f9adbf24c637e914148c0f161e9e2175aa7d39e5b486d1dd817fb47dec",
+    "rust-std-1.37.0-wasm32-wasi.tar.xz": "00d22aae8fa79542ed7aa7c44d20862db146c15b78a14ee8c9e117136d274e20",
+    "rust-std-1.37.0-x86_64-apple-darwin.tar.gz": "0b3fe2575b55a739f409a9d76d05c4bb32494691bde5043d77ba4d39ac182f20",
+    "rust-std-1.37.0-x86_64-apple-darwin.tar.xz": "8fe94b20ede22b768d86c0fb29c9dd17dda30f7ab411b5c540654ea1ae8ebb20",
+    "rust-std-1.37.0-x86_64-pc-windows-msvc.tar.gz": "e03f363296cd60e93110db517f3804631e49fd91de7c0d77b229e31b1135dff2",
+    "rust-std-1.37.0-x86_64-pc-windows-msvc.tar.xz": "13a48333bafd14396e712c148238cc123f7a38cebd1752abbf229c8783be0d3b",
+    "rust-std-1.37.0-x86_64-unknown-freebsd.tar.gz": "8783a667ea9c46f27027d494098c51563faa734c5ddb23c6b9b3eda804eb9742",
+    "rust-std-1.37.0-x86_64-unknown-freebsd.tar.xz": "262d294a1b71712118c14acdd43198ef958a5e95ba5da0b3b46153a8e959cb22",
+    "rust-std-1.37.0-x86_64-unknown-linux-gnu.tar.gz": "09a531a97a16701eb794ecbeeded5d8f8da33da7f1bd372661ad385e3f31c048",
+    "rust-std-1.37.0-x86_64-unknown-linux-gnu.tar.xz": "f8090dbd8a2dda674f8832f7999758b248028453465bf83f797569e28065fdbc",
+    "rust-std-1.37.0-x86_64-unknown-linux-musl.tar.gz": "fa1d98bf18fb49ff58a70d51ff7924e4d1975f7812dc5217ea31652bf8b7bca4",
+    "rust-std-1.37.0-x86_64-unknown-linux-musl.tar.xz": "985d511eb43c1083f5961c0dfb953cd01c0818a7200593fade278cde7502f836",
+    "rust-std-1.38.0-aarch64-unknown-linux-gnu.tar.gz": "0725ae9f55639c648fdaba06129de395ed839a7d1aab6aebfd21f26cbe1ce7ca",
+    "rust-std-1.38.0-aarch64-unknown-linux-gnu.tar.xz": "b931843898b0457fa92b8ef1521ff460bef525451ed786897cfaa6f7baed4105",
+    "rust-std-1.38.0-aarch64-unknown-linux-musl.tar.gz": "56268f0c7c93a4f3436aa20af75e80e29e7d651c754b076c64f13219f2e6be8a",
+    "rust-std-1.38.0-aarch64-unknown-linux-musl.tar.xz": "34f231f10309e120f30a8382ffe978916ccdd586b7841561890a0ee2cb89e178",
+    "rust-std-1.38.0-wasm32-unknown-unknown.tar.gz": "9634130c797e8c1fd1d7bbdfd48a32e85e2dd3512ffb2b51974374308cf581cf",
+    "rust-std-1.38.0-wasm32-unknown-unknown.tar.xz": "5c831d894e50f847c1be3b8cf437bc479cac6b688cfa4517f11ce5dbc26dd60c",
+    "rust-std-1.38.0-wasm32-wasi.tar.gz": "becb178cecc2d2137e006c24e6988d79390f96dcd65cc2e8b2f475a8fdab4bfc",
+    "rust-std-1.38.0-wasm32-wasi.tar.xz": "5841289d775e26065780ee23fee3773d00f98cab3b7868a934a70ccba6b4efe2",
+    "rust-std-1.38.0-x86_64-apple-darwin.tar.gz": "b1a986e8676aaed25959e9f6dd7c8c5aa67fb829d0d694edea34d8169658a125",
+    "rust-std-1.38.0-x86_64-apple-darwin.tar.xz": "e1e7c617cd7ce655f20bc737e6832a01eefb19dd9163f6957317ee376aa4dd64",
+    "rust-std-1.38.0-x86_64-pc-windows-msvc.tar.gz": "3f5b3c9a4f9015c9e1e12eed94752129d80448ea53f9d5ec1e332c2ffa2c4807",
+    "rust-std-1.38.0-x86_64-pc-windows-msvc.tar.xz": "3b7d5c47ee35078e18d780872f2d8116f7068e33ab868531a9d5ad1cf4edbdc5",
+    "rust-std-1.38.0-x86_64-unknown-freebsd.tar.gz": "9f1d88449ef56c31ebc514873ba4d5889fa12697c4c2ea1071f15127f301ac4d",
+    "rust-std-1.38.0-x86_64-unknown-freebsd.tar.xz": "f01d0f7bcfe07ef363a4ae74058e3d9570a2bfdaa1f01db615d8f5a219e59d4b",
+    "rust-std-1.38.0-x86_64-unknown-linux-gnu.tar.gz": "cd50ec3384d79aae89ffdacf09715b68b1b5562657e993f26f67b9458e92dfdd",
+    "rust-std-1.38.0-x86_64-unknown-linux-gnu.tar.xz": "51b334337804baeff7524e5496d396f254894d7529860d236975e9ed8fcca371",
+    "rust-std-1.38.0-x86_64-unknown-linux-musl.tar.gz": "56b87fdca1f41b634285593cae42fdbd5fe9632ef502336679362b283ed53c22",
+    "rust-std-1.38.0-x86_64-unknown-linux-musl.tar.xz": "efcc1779f9815c1d99010ef9eb66a2439f3993bc4d5accd7566e669d1b182373",
+    "rust-std-1.39.0-aarch64-unknown-linux-gnu.tar.gz": "adbecacf6cf0ed19df2496cc648b16192c0bd085d7e6f670edcea4dd28ab37df",
+    "rust-std-1.39.0-aarch64-unknown-linux-gnu.tar.xz": "f1d2072b1a8bb5a13f98c81275e1fe1d429c1a257ccc0715846029bae20fd4cf",
+    "rust-std-1.39.0-aarch64-unknown-linux-musl.tar.gz": "1d4a3640fa6e696180848ac2eb10ccc7904acac58784b27e5fcd8a79b2cdf0fa",
+    "rust-std-1.39.0-aarch64-unknown-linux-musl.tar.xz": "635788f77e005048fafbaa8f4b232e9a34bd912d2584a0c0b86449dc95a5249d",
+    "rust-std-1.39.0-wasm32-unknown-unknown.tar.gz": "654905b39eae031282a9db9bfa47504c23aa4bbc7d22b769b9bd2f6ca8b61cee",
+    "rust-std-1.39.0-wasm32-unknown-unknown.tar.xz": "0a4925fb0881b5c1cd19d43dd353a59d5be68c9f88aa2cf81a4e5f328a21926a",
+    "rust-std-1.39.0-wasm32-wasi.tar.gz": "e7f008fd1f7c902f5ba7777d8a4346783392bd40813c79381bd7497fbcf19be0",
+    "rust-std-1.39.0-wasm32-wasi.tar.xz": "dfbfc931fa0110a1c23803f40e5e0b664838813dd695329f9da908bd91893f6a",
+    "rust-std-1.39.0-x86_64-apple-darwin.tar.gz": "ebd058b16590e2c1a73f5de59d169c8c11be6014934cb083afc84accdccd40d9",
+    "rust-std-1.39.0-x86_64-apple-darwin.tar.xz": "791c4c8bcd24866bbc1a648b29fe2fdf13202d8de1bc8d2801f6bca57a5fc097",
+    "rust-std-1.39.0-x86_64-pc-windows-msvc.tar.gz": "cc704f4c26d5e215a8d98d0797a766fad959101776db69bb392317becd7472ea",
+    "rust-std-1.39.0-x86_64-pc-windows-msvc.tar.xz": "540d613cef1649c30ac8f5304b1010a92b161c2f68df44bc5e7843806856cc6a",
+    "rust-std-1.39.0-x86_64-unknown-freebsd.tar.gz": "94a71addd6983ae844be1cd403926c947766b72f032a083fd1be73f18cf329d9",
+    "rust-std-1.39.0-x86_64-unknown-freebsd.tar.xz": "7015a0b0a991af19b0a7d0cbb1b0e2aae612a19cf2a4ab9cdb49f91f9e443201",
+    "rust-std-1.39.0-x86_64-unknown-linux-gnu.tar.gz": "2ddad802f048acaa5cd48f1105c18c7f4de32dc9569ac4d64bfcbb3d8c155cb7",
+    "rust-std-1.39.0-x86_64-unknown-linux-gnu.tar.xz": "b629952ec9e3e750137d7b8a922de145c97c1dc372dd616e86e4e501da13910b",
+    "rust-std-1.39.0-x86_64-unknown-linux-musl.tar.gz": "9c6b49e161e53c174b4fd46825a96b78854cfbcd0971ce846d4edd33c2b5f275",
+    "rust-std-1.39.0-x86_64-unknown-linux-musl.tar.xz": "4ac886aab08eae7c67edc0be3ffd808a0a6fa599b9aa52f52f0a48fdb8b56435",
+    "rust-std-1.40.0-aarch64-unknown-linux-gnu.tar.gz": "e1a1bc577d51556c53e39d4f11fb4918f0ebf27e166ff63321b2991754706d16",
+    "rust-std-1.40.0-aarch64-unknown-linux-gnu.tar.xz": "1abd1865e8339c2cac6992a11f6f98b66fa2b97f67acaddcf1992e39a7001bfc",
+    "rust-std-1.40.0-aarch64-unknown-linux-musl.tar.gz": "5a269c83446da52c824b3c2047d66540f524e79901ac09b2ac80900a692849dc",
+    "rust-std-1.40.0-aarch64-unknown-linux-musl.tar.xz": "18322da6c0e71b4df995e696abf0c1b58ff085bb68882ee352b04dfb48f49f33",
+    "rust-std-1.40.0-wasm32-unknown-unknown.tar.gz": "e3f68aa04c97fb8f5f595d47f417221afb4b0c49d177a2cde7935e3afdd45947",
+    "rust-std-1.40.0-wasm32-unknown-unknown.tar.xz": "466d478ac046996d12a75e58bd5c8ebed40e470530ef753b63519b5e363b15d8",
+    "rust-std-1.40.0-wasm32-wasi.tar.gz": "814d780d7296cc8a8969536f99e8b591fc68d9290e399f01c59cf86d32303718",
+    "rust-std-1.40.0-wasm32-wasi.tar.xz": "2d3ec95dd03a486e4c4af20fcb15376d93122ef63db839fb10bbf3da7546c1ae",
+    "rust-std-1.40.0-x86_64-apple-darwin.tar.gz": "1eff41b353403cc284a09debb00cfd41d663447eabf5ad2d4cf736c8c8db0458",
+    "rust-std-1.40.0-x86_64-apple-darwin.tar.xz": "e16802935ad4f2a52393482a2356ed977bc033e9761295fd396d68b49030fec8",
+    "rust-std-1.40.0-x86_64-pc-windows-msvc.tar.gz": "10685476cf7d68e56564730a7d553bacd924717b9272875219da7b9f5ad6704d",
+    "rust-std-1.40.0-x86_64-pc-windows-msvc.tar.xz": "63e295ce77496a060443828f7082a01721d73bdbc611ca6e2c0607cdfe338c93",
+    "rust-std-1.40.0-x86_64-unknown-freebsd.tar.gz": "90a41f80e2501ac2b036b7cdf269db19a5204aeec257bd585074508f1a6ba2c9",
+    "rust-std-1.40.0-x86_64-unknown-freebsd.tar.xz": "1573726506a89b14932e84575d99511d96724fd1eabfff25a9bbcb4c57235b12",
+    "rust-std-1.40.0-x86_64-unknown-linux-gnu.tar.gz": "735affaca1370699f9bc3fd7b1320694afd250923d283d88c842b7913a97d083",
+    "rust-std-1.40.0-x86_64-unknown-linux-gnu.tar.xz": "5a0b14a51f51b0194f70a2023749d9cb49c3b2e11f0d4c8232960b91fad336ac",
+    "rust-std-1.40.0-x86_64-unknown-linux-musl.tar.gz": "1183b1f698716409be6b48c8f98109723b5e9f5f2cab6c20f73d0b281c63aa80",
+    "rust-std-1.40.0-x86_64-unknown-linux-musl.tar.xz": "c647bb7f399b3d18e345b2dab1fb073470582a9298e83d8648f6661544df7279",
+    "rust-std-1.41.0-aarch64-unknown-linux-gnu.tar.gz": "59b8dab431af29dcd28c6e92e82a488ebb20dbb5dff93ca14119ba8e2fabd9c8",
+    "rust-std-1.41.0-aarch64-unknown-linux-gnu.tar.xz": "665fce8e4f955425a41bd2ce9b21eabbee15fd38ab8fafda42ca9edabd0bc403",
+    "rust-std-1.41.0-aarch64-unknown-linux-musl.tar.gz": "775a256864417d93d20ae106b775564051be888a78e77a6a88c67ac86e401059",
+    "rust-std-1.41.0-aarch64-unknown-linux-musl.tar.xz": "a931604d2bb9665afb2e333a2d2faf3e7d54ca98606ec83ef44c9980cf925396",
+    "rust-std-1.41.0-wasm32-unknown-unknown.tar.gz": "0974d40a9f54bd9dda88c20ffa1778fa90ee77a549a8f30ed13477b55e142a63",
+    "rust-std-1.41.0-wasm32-unknown-unknown.tar.xz": "bdffa7168b6f3f63fc34e950cc634e105000752170ceeb527980d9f4d32de228",
+    "rust-std-1.41.0-wasm32-wasi.tar.gz": "e50c63deae8a8bc81d438f73bc885e5de7fa282784171b53e3eebf8f41d8f7d1",
+    "rust-std-1.41.0-wasm32-wasi.tar.xz": "fad1a6709892d66d6e824c1e8c3020cbfcaf52de5f40ca5da46765a1a7636cb5",
+    "rust-std-1.41.0-x86_64-apple-darwin.tar.gz": "c917af985d879376d8906e7c81ceacb06e65ea7b229ccf81505f8bd6cf5abf64",
+    "rust-std-1.41.0-x86_64-apple-darwin.tar.xz": "663415cb4bca98876d0115ed475caebffd6f1dff3504f9bde81a167891d9e46e",
+    "rust-std-1.41.0-x86_64-pc-windows-msvc.tar.gz": "aee5b98f0ac533471dc3d9ffdf6fcb22565c44d80c03c1c4df0c8b714931d1a9",
+    "rust-std-1.41.0-x86_64-pc-windows-msvc.tar.xz": "dc969fdb62dbc7464f1e21e48ab36d6fef52b47be002ae6da699d7da6a442859",
+    "rust-std-1.41.0-x86_64-unknown-freebsd.tar.gz": "4436e80598592398724daf0efc33b2a6505bebde59c021d3e894d605ae5255dd",
+    "rust-std-1.41.0-x86_64-unknown-freebsd.tar.xz": "c21e3d50458e8a78a5ae93658c2a7c9cbd7ea819d70a03194152f8b85ecf7de9",
+    "rust-std-1.41.0-x86_64-unknown-linux-gnu.tar.gz": "b563fc979eea8372f5b371e10f0857e79cdffc34b124c7a7b0d89014d1b351b7",
+    "rust-std-1.41.0-x86_64-unknown-linux-gnu.tar.xz": "29c52cc00339881886bd18e18a4d1c6512836773cd31cc6135302dcc3376d3b6",
+    "rust-std-1.41.0-x86_64-unknown-linux-musl.tar.gz": "6df5f52b7acb58d2123f2a6596741ae1857921ec747087bbd0b0cdf4cec5e369",
+    "rust-std-1.41.0-x86_64-unknown-linux-musl.tar.xz": "a889280bcac58eef42d18168e318ca7da9b7946abfb5993ed282f5f28027ce04",
+    "rust-std-1.42.0-aarch64-unknown-linux-gnu.tar.gz": "1343f51fc87049327233cee8941629c3d7dfdc425d359385f93665de3d46711b",
+    "rust-std-1.42.0-aarch64-unknown-linux-gnu.tar.xz": "9d88ebdbd49d92887d6830b17f341ed7c2a043ecf7dc781ced2d9855d069f94f",
+    "rust-std-1.42.0-aarch64-unknown-linux-musl.tar.gz": "77dd67761c8e2e17aaa837b714ddb9dd4433272b6b2980fa327faf23a6fc5bc1",
+    "rust-std-1.42.0-aarch64-unknown-linux-musl.tar.xz": "213802d9c34d6763594d60033b98cc12890b2a933fae10ba4c055bc40da2545a",
+    "rust-std-1.42.0-wasm32-unknown-unknown.tar.gz": "695439ef4099f2a1da7c9932e556b3985f4ede5b27e6ef260d670bfe4bc3894b",
+    "rust-std-1.42.0-wasm32-unknown-unknown.tar.xz": "1454b1c096e0ec03d08e63e173d11bacfaf6995830f1d9ce2128e08036166075",
+    "rust-std-1.42.0-wasm32-wasi.tar.gz": "077bb250b6df47f1350ea875645fd388d3e6df69830ab49627fe6f6bea5887ad",
+    "rust-std-1.42.0-wasm32-wasi.tar.xz": "1901b7aa76cb42a64947847f1f5798fb910fa82e5757bc315bb64bfa34057a38",
+    "rust-std-1.42.0-x86_64-apple-darwin.tar.gz": "1d61e9ed5d29e1bb4c18e13d551c6d856c73fb8b410053245dc6e0d3b3a0e92c",
+    "rust-std-1.42.0-x86_64-apple-darwin.tar.xz": "3adc66e6a87e4008c681be27e5cfb079a69ebaece9476913b65cd05c660e7f12",
+    "rust-std-1.42.0-x86_64-pc-windows-msvc.tar.gz": "192d8e1277280df261bc917d1dcc8225b5fb507f281d05bbcf85f859679e1429",
+    "rust-std-1.42.0-x86_64-pc-windows-msvc.tar.xz": "e762cf107de469ca74dd2787b3b754b729497ae84f52526dc9f1ee52c00c7b66",
+    "rust-std-1.42.0-x86_64-unknown-freebsd.tar.gz": "76e0f0f7275e114908b0ce2bf39813eaa580af92cc1fab31496ca37ba9d5703e",
+    "rust-std-1.42.0-x86_64-unknown-freebsd.tar.xz": "373126721383753443d0d393b6645f2628de3ea45345e65ac746daf74aa085e2",
+    "rust-std-1.42.0-x86_64-unknown-linux-gnu.tar.gz": "e6bf5495a8b1cfb849fce2753404b3b7ce7fba0c5d743d940fac3ee4558fda26",
+    "rust-std-1.42.0-x86_64-unknown-linux-gnu.tar.xz": "21405992fa02411a7a5bbd88e8218cd3e4609fe18bee687bb5ad6bab81e3f783",
+    "rust-std-1.42.0-x86_64-unknown-linux-musl.tar.gz": "c426957a3f2e3d51ee91b996c2c6b21a10d4ade7fb6b7c64d6e2f7100b6b994a",
+    "rust-std-1.42.0-x86_64-unknown-linux-musl.tar.xz": "f429e81c3266bdcc038b6c2c2e5f51c64f75a85b46749e2cf5b93556f17b63a1",
+    "rust-std-1.43.0-aarch64-unknown-linux-gnu.tar.gz": "f4b80b12ecf14e97937cd24573e82f306f147db6266dc5a2cb27aaeaf49398a7",
+    "rust-std-1.43.0-aarch64-unknown-linux-gnu.tar.xz": "5feb424fa10ac8c850d2eae5228c88262bd14eccfaf1c10e70e74d71a7c22088",
+    "rust-std-1.43.0-aarch64-unknown-linux-musl.tar.gz": "5cc80aa5b5cf6dd40a5252de6c2d2cceebd930b80b02bdda7442f93ed6539a55",
+    "rust-std-1.43.0-aarch64-unknown-linux-musl.tar.xz": "f47b8fbc71b15b46985efd2d69325f497d1e88f2e6ff545abf7b9a8ece08c7a0",
+    "rust-std-1.43.0-wasm32-unknown-unknown.tar.gz": "efe2061e7b9711f51b560c7770ebe372003beb9beddb363f27c3960ee12135cd",
+    "rust-std-1.43.0-wasm32-unknown-unknown.tar.xz": "c2fe87ec1396e76c55112072bb3c6d96dd47b2e5ea6cf5031017a93e1ce80267",
+    "rust-std-1.43.0-wasm32-wasi.tar.gz": "6ece090d05853a54bb7f6e4985840cf01dc4857eda0f375bc8e35846d1d533e9",
+    "rust-std-1.43.0-wasm32-wasi.tar.xz": "2b58bb11fd05abf32989e8acb474741072da915892e90c89cfc2bcf04aa87ad7",
+    "rust-std-1.43.0-x86_64-apple-darwin.tar.gz": "c75d37579b9e143ebd98ae2fe42c818fd47e0a2763b2a9bdd7e6b9954509d735",
+    "rust-std-1.43.0-x86_64-apple-darwin.tar.xz": "58320be75a746bb4365acaf61536a062ba256aafc55a3ec25b9b3896774b6a4b",
+    "rust-std-1.43.0-x86_64-pc-windows-msvc.tar.gz": "008ca995f429410248558cbfb0e77ebd062ca709a9e3a7d58d9f81c491395280",
+    "rust-std-1.43.0-x86_64-pc-windows-msvc.tar.xz": "1932903095c6295fc688511cabfb996cb231e487bb0aafe657d99362c2779935",
+    "rust-std-1.43.0-x86_64-unknown-freebsd.tar.gz": "3c9b450b826874be5c3f35f7cb923f02d4769b81f763fef21c9c0d3a80532c2c",
+    "rust-std-1.43.0-x86_64-unknown-freebsd.tar.xz": "fd8ed608f3707a832b5c156e1f66ec3eb12edb4f17a47b499120bae87b6858bd",
+    "rust-std-1.43.0-x86_64-unknown-linux-gnu.tar.gz": "84fd8ddaaa217b82c563d4a32a690da2c399388258a3d2baf180992c21938af5",
+    "rust-std-1.43.0-x86_64-unknown-linux-gnu.tar.xz": "e6ebb6a7ae80c297eac1bbab50864c030886b35b790220ced100be5e697688aa",
+    "rust-std-1.43.0-x86_64-unknown-linux-musl.tar.gz": "496efe781a68c1ad75bb16e72b383fdcb9bf28ce448019dbf1ab4742fd4d4299",
+    "rust-std-1.43.0-x86_64-unknown-linux-musl.tar.xz": "423e2b86f31d6a9c692941f04b88a6b69a33a04a61bfe8ccad42fe370e6a8cac",
+    "rust-std-1.44.0-aarch64-unknown-linux-gnu.tar.gz": "fafb49cc7264a8621c17e8954ec2e0a78e097395b285edb5c1639c61ffb8142c",
+    "rust-std-1.44.0-aarch64-unknown-linux-gnu.tar.xz": "d56470b407758bff8c0f1427d1dd494eb956f5c99bd388bed091cccd1c77c2cc",
+    "rust-std-1.44.0-aarch64-unknown-linux-musl.tar.gz": "b32ccb5a8bf7c3ba9e7295e2986acad87c0eab9eff98a98f4dd3eaa4c8b74405",
+    "rust-std-1.44.0-aarch64-unknown-linux-musl.tar.xz": "6bde29458184c9395fcfcb5a362234b083c4457abc0d086b731d76968b488d2a",
+    "rust-std-1.44.0-wasm32-unknown-unknown.tar.gz": "8e12796a0c2fb083953042218f832bdeb78da1bfaf67b9dfe3d719920084d755",
+    "rust-std-1.44.0-wasm32-unknown-unknown.tar.xz": "a061697d4b2db714b783b7977ce3a8c1a5dda0457201d3012100a8aa490ac31d",
+    "rust-std-1.44.0-wasm32-wasi.tar.gz": "ac0ffeb48bd4be6dd460c5665fc52bb4da2be15e5ecdefa4bf73c6db7392759a",
+    "rust-std-1.44.0-wasm32-wasi.tar.xz": "6c9f8c3d5769d06feb7c9b9228d0e2e9f9e1c306205986609cf15fe066d0fcbf",
+    "rust-std-1.44.0-x86_64-apple-darwin.tar.gz": "af58f742764949765e09bb60bd1c16025a79a1be8152996fd5b3a44e5df90311",
+    "rust-std-1.44.0-x86_64-apple-darwin.tar.xz": "dce598542c14f57706420fa865d4ef890e14967454a40525b68f89bc81032707",
+    "rust-std-1.44.0-x86_64-pc-windows-msvc.tar.gz": "1f52376c9a48ce76b24c7aad7a9817b0b4b2cf11a8581001c8d76285d9593340",
+    "rust-std-1.44.0-x86_64-pc-windows-msvc.tar.xz": "9257383136ddbd4b5dbc4e1cf569132db2a3d9cfe0d300603fcd5aa1e52b9c2d",
+    "rust-std-1.44.0-x86_64-unknown-freebsd.tar.gz": "a0315d028e72e221291dba257e8212e564574d87362cb07e06dc15950d1e6788",
+    "rust-std-1.44.0-x86_64-unknown-freebsd.tar.xz": "37698332f103ced3751e3427243330adc01548b84bfc5a9146ac8ad82fe100c6",
+    "rust-std-1.44.0-x86_64-unknown-linux-gnu.tar.gz": "3b7a4eede0ca550c256ca6721877de0154c27e71196d8b9a980a480682ead0aa",
+    "rust-std-1.44.0-x86_64-unknown-linux-gnu.tar.xz": "122b2a909fc185c6ae5a0110af6f60699f4332b4fb3c43698b14a873fbe65b6e",
+    "rust-std-1.44.0-x86_64-unknown-linux-musl.tar.gz": "220877112bc1dafdaa1760c3d1c5b3529766faaa1e969d1a99d27648d3bf927d",
+    "rust-std-1.44.0-x86_64-unknown-linux-musl.tar.xz": "ff43c33836d5a56ce8089f8a0b101cbb12f130374e9631acdcc00f5f051f6429",
+    "rust-std-1.45.0-aarch64-unknown-linux-gnu.tar.gz": "816f6cc132db84617bfde6ad47336bfb020552a45bd0a10250c4e420d512d5ad",
+    "rust-std-1.45.0-aarch64-unknown-linux-gnu.tar.xz": "74a6d33ee80421b261c0e628ce26b90a6c65be37cc130619a9aaae52e7b3bb7a",
+    "rust-std-1.45.0-aarch64-unknown-linux-musl.tar.gz": "c37bb023f496161ef3238f37b44606a93e15af225d70d3083bfd52e7f8fdd36a",
+    "rust-std-1.45.0-aarch64-unknown-linux-musl.tar.xz": "4c89ba61bad1153a79a2a64c6a6e855d2387100643da59f791286993eab29b12",
+    "rust-std-1.45.0-wasm32-unknown-unknown.tar.gz": "1b4f40be1d0f18a5a04f9f706fef74db0e299046557a706a4dc31a2b36d8de21",
+    "rust-std-1.45.0-wasm32-unknown-unknown.tar.xz": "d61862d9eb437e0cb08ab6a8d6cfb225d9446fe9f35a2d27b7ec36045bb7d12f",
+    "rust-std-1.45.0-wasm32-wasi.tar.gz": "1ef0e8e09ad39275a188bc88d4969c4d1e150cd728d9ff5955b42d6a643ac10c",
+    "rust-std-1.45.0-wasm32-wasi.tar.xz": "32a464d2f89a5e761d5dd91786c31b55782aba9d595a02526ef9850f3e6a513a",
+    "rust-std-1.45.0-x86_64-apple-darwin.tar.gz": "e3ac5a3efc106ea13687aa1231609a5d61b1874f4b3a2f68b0e0ad70c89a2364",
+    "rust-std-1.45.0-x86_64-apple-darwin.tar.xz": "6cef5e88f7d7b60c98b51be40e5f19ff842d6c01b423471b7e3df81b81ba4a00",
+    "rust-std-1.45.0-x86_64-pc-windows-msvc.tar.gz": "f638c04f6709382ded2e78aebff03ae5e40e074d003786f083e6e3ccc438e0b5",
+    "rust-std-1.45.0-x86_64-pc-windows-msvc.tar.xz": "9e3b4b79477470c21fec64b1c5aabf800f14b6a90f267a7fedaf4055a2a7f05d",
+    "rust-std-1.45.0-x86_64-unknown-freebsd.tar.gz": "68b28ad5488bfb051589c7079bdfa396aa42c29d463a5622fb5eb9d6ecc4a8e6",
+    "rust-std-1.45.0-x86_64-unknown-freebsd.tar.xz": "319304331b92f96f57a56ec3c662d5be97c58fe037f3087ba442f46d9b1e8bd8",
+    "rust-std-1.45.0-x86_64-unknown-linux-gnu.tar.gz": "7ab1dbcdeab16dfea1ed024675e60429db9719f03648e6a09662de72b4ff730f",
+    "rust-std-1.45.0-x86_64-unknown-linux-gnu.tar.xz": "f3e4dbc0787d0ff2597d2d9c1a406abc45626c3331791c360c79b06a4cb9b89c",
+    "rust-std-1.45.0-x86_64-unknown-linux-musl.tar.gz": "f54b23b39308b6049644d0c8ac625724911ab423d09ed43dcbc52489b7636ea7",
+    "rust-std-1.45.0-x86_64-unknown-linux-musl.tar.xz": "a25e0dc17b3069fead0f0d7e9327e4a1fe46d2d5afd345b99e5fbc94fba0f7b4",
+    "rust-std-1.46.0-aarch64-unknown-linux-gnu.tar.gz": "eaa7cfd73e96b6ce03498398f4bd9ded73870fe3c5db980038a4863c37157597",
+    "rust-std-1.46.0-aarch64-unknown-linux-gnu.tar.xz": "bfd00a780928a511d36acc50dc6f7e41fa040dc2f6fe7b085e323de38921c63c",
+    "rust-std-1.46.0-aarch64-unknown-linux-musl.tar.gz": "5ad254082e3af2d301d3dd2c9af90942cb91eecb293f86778d163a75cd6bafd1",
+    "rust-std-1.46.0-aarch64-unknown-linux-musl.tar.xz": "15945f2685bc7ef67c51fef7dddfaa6fa569ff88ddadcff28f96924f97236750",
+    "rust-std-1.46.0-wasm32-unknown-unknown.tar.gz": "0ef3344aff8ae3f2065ed8f15daa73514a26f934e160cb6974d43a8231fcc090",
+    "rust-std-1.46.0-wasm32-unknown-unknown.tar.xz": "63a1d33353350f99d38e2f673172d0cdee83a8acd34158a9128baec0b90ad3c9",
+    "rust-std-1.46.0-wasm32-wasi.tar.gz": "44a37dfe4398e1c120a199b2ebbe86838171c38a29a0f76e10ede00bf1aeb16f",
+    "rust-std-1.46.0-wasm32-wasi.tar.xz": "39284a6f50b786e5bba932fb98597426dfe29a42ec8ca34acadf9f98ad84db73",
+    "rust-std-1.46.0-x86_64-apple-darwin.tar.gz": "8c897982bc38c9528b448fe551f089fee7716e692dece98052f4459ccc6e591c",
+    "rust-std-1.46.0-x86_64-apple-darwin.tar.xz": "d8a36dc0e7baac0631a3ebd00348c1daf14cb58a6c39eb9c99906ce82a0fe6d8",
+    "rust-std-1.46.0-x86_64-pc-windows-msvc.tar.gz": "06d92b12e2f4e6024971e99a7716423d4738c3e379fc82aa54de2a812de268b2",
+    "rust-std-1.46.0-x86_64-pc-windows-msvc.tar.xz": "745d37074a6b9f90527392e986b7fdce6085c9666af6617a196674e4a7d2032f",
+    "rust-std-1.46.0-x86_64-unknown-freebsd.tar.gz": "e37c06bbe2bf2501675101787388ab87d510ef80f2e091be3f50fc5d019add1e",
+    "rust-std-1.46.0-x86_64-unknown-freebsd.tar.xz": "4b968e65f58b8f5e48848fa77546c0304f36c85a56f52d40e1d9aff819a9637d",
+    "rust-std-1.46.0-x86_64-unknown-linux-gnu.tar.gz": "ac04aef80423f612c0079829b504902de27a6997214eb58ab0765d02f7ec1dbc",
+    "rust-std-1.46.0-x86_64-unknown-linux-gnu.tar.xz": "e631d80cb03539769c041ee4566e94e36a271d4b3cdd149e1447d1f77fda979c",
+    "rust-std-1.46.0-x86_64-unknown-linux-musl.tar.gz": "cc28b7807ceeb5a7f162edb933d825ed5f5880a45a2e920e1f1a846bfdc1b1a0",
+    "rust-std-1.46.0-x86_64-unknown-linux-musl.tar.xz": "9e7107082c5b47b8931f65d5d6a9c97b1540e67533a2e69f480d9d83e8d05d57",
+    "rust-std-1.47.0-aarch64-unknown-linux-gnu.tar.gz": "0019c302a0a02d8a9e40c3bcdd5a31b9b2704161563d72df3572521989182b0c",
+    "rust-std-1.47.0-aarch64-unknown-linux-gnu.tar.xz": "b471f3b984fcf90cc21eb1e4833435d586941fbb434fe5007a6f2898a32698d3",
+    "rust-std-1.47.0-aarch64-unknown-linux-musl.tar.gz": "69e27f17038a4eb99fe43781f0ca6432f64802bb24fd08fd4f2b90dc73987396",
+    "rust-std-1.47.0-aarch64-unknown-linux-musl.tar.xz": "cbbefc40e1b48c710954ed4d202e967ad2221ae9f792c2af6a0270669eb44689",
+    "rust-std-1.47.0-wasm32-unknown-unknown.tar.gz": "b0d19ceb2b56105ee3407bdecaa779747abb1574990632e53a2aba681e964187",
+    "rust-std-1.47.0-wasm32-unknown-unknown.tar.xz": "cfe9005d306997342b548db84f89c375b81ddda5bc384a4e5863a93cf43e423e",
+    "rust-std-1.47.0-wasm32-wasi.tar.gz": "0eab479faac83b9352af04ba4dea376fdeade3101f5e912f40ee3c93e32d1317",
+    "rust-std-1.47.0-wasm32-wasi.tar.xz": "224affcfdbb78bf67966130b891c83798ef9b6dcbbff992578fc2492494e3fae",
+    "rust-std-1.47.0-x86_64-apple-darwin.tar.gz": "6b86bcdad5a6eff87a67b6387051d7f10a48e088b8f92d76869d201500b9ce13",
+    "rust-std-1.47.0-x86_64-apple-darwin.tar.xz": "248c4b2a34b8de34505c136e99bcd19029ab0791cc6acd5d55beaa74bec57095",
+    "rust-std-1.47.0-x86_64-pc-windows-msvc.tar.gz": "896614728a21128c335f632f2f45217320974f71cb4c7c23184610f0b587b7b5",
+    "rust-std-1.47.0-x86_64-pc-windows-msvc.tar.xz": "583888a4f73ccacaa517496978e9559c897611383ff794b9376a3d5343fe2897",
+    "rust-std-1.47.0-x86_64-unknown-freebsd.tar.gz": "80f5dee782bd74b41c55a676c624ce2260ab54c834102c90ea54e0c5e7e513c6",
+    "rust-std-1.47.0-x86_64-unknown-freebsd.tar.xz": "6770420e5b55a8a7c665000479009f96bd2065ffa92705a12bcc75d931aa545a",
+    "rust-std-1.47.0-x86_64-unknown-linux-gnu.tar.gz": "17ecad27d96b331608e4a96dfa3cad05ccb2ccecb888894ed35054e0d1f5207f",
+    "rust-std-1.47.0-x86_64-unknown-linux-gnu.tar.xz": "a469db59f7df3a5e4003421d853b274e828b537d2d56fd5ce6bba8ba73266f02",
+    "rust-std-1.47.0-x86_64-unknown-linux-musl.tar.gz": "fe4d2ee953979abd09aedaab25fa2ab646089caa6fd4ea9c78486a819729d777",
+    "rust-std-1.47.0-x86_64-unknown-linux-musl.tar.xz": "11a181846bbc56b42f2142cc5517dc084e12b9147b215a55056fc70274f643da",
+    "rust-std-1.48.0-aarch64-unknown-linux-gnu.tar.gz": "3b0e5c4d03ddb97cd462947c539005427813f5ba91be81888db77e7d4bf36e45",
+    "rust-std-1.48.0-aarch64-unknown-linux-gnu.tar.xz": "3a50eeb64a63a09f79bee49e01f72410d455b9ae1c7f07ebdb6dc0d40e9aa0bc",
+    "rust-std-1.48.0-aarch64-unknown-linux-musl.tar.gz": "29be0b241bd14651bf9d470a9766000b424a112a0b4a6160f422b075e4668c4c",
+    "rust-std-1.48.0-aarch64-unknown-linux-musl.tar.xz": "f5510d5d7c0112c3837380051ec24e6e4836bdad66848af2d75452e83b2e8567",
+    "rust-std-1.48.0-wasm32-unknown-unknown.tar.gz": "6f981b353e096b8a54c86e6812c82db3b5fd45335b575396e3bfc29b03ffe959",
+    "rust-std-1.48.0-wasm32-unknown-unknown.tar.xz": "7d06858530e6a3a4292034083a71075bb2f354ea7a66e946b4d834466454ecb1",
+    "rust-std-1.48.0-wasm32-wasi.tar.gz": "ed57645e5fe429ef99018759e1a89e090220a3197f30ea544070610ef73c19aa",
+    "rust-std-1.48.0-wasm32-wasi.tar.xz": "28f2b3ac9f1ebeed0c3036a069b443be2f9bd2146331eea4f6f7fb5b63db034b",
+    "rust-std-1.48.0-x86_64-apple-darwin.tar.gz": "430d0ca7c04b0e1140f39f2274e0072a3ba2373a99a230d14ab16361e19b6129",
+    "rust-std-1.48.0-x86_64-apple-darwin.tar.xz": "0d8af65d6966e4c53b702571ad903074a8c10490cc5499058685829f0759bc8e",
+    "rust-std-1.48.0-x86_64-pc-windows-msvc.tar.gz": "a526c6f6c00d6a0cd4b6e3348e6329d204099983672862249593ba932b5ddf28",
+    "rust-std-1.48.0-x86_64-pc-windows-msvc.tar.xz": "cfe7ebfcf55bbe53d042cf2836185eaf84274af7979247fff83f2db3a505cf3b",
+    "rust-std-1.48.0-x86_64-unknown-freebsd.tar.gz": "a5ea4ec9664f38a2464216031eeea01f723b4e0691f7d473d8f7ab663551f979",
+    "rust-std-1.48.0-x86_64-unknown-freebsd.tar.xz": "d36bfaba851e6729e503e89862d66151c26a6f7d931106f67c583c6221f2dce0",
+    "rust-std-1.48.0-x86_64-unknown-linux-gnu.tar.gz": "2e7152e5d24cea7e44e6645ebbc0387cbe1c7059b54d95d8ea3afe298ac8b2fc",
+    "rust-std-1.48.0-x86_64-unknown-linux-gnu.tar.xz": "1c00a6a0dabbf6290728b09f9307d9fa6cc985487f727075c68acd4a600ef3f8",
+    "rust-std-1.48.0-x86_64-unknown-linux-musl.tar.gz": "1bf2a0cfaa3e0cf8f743a48802c91d641a3289dffa1c44d7dc5365b68c8739c4",
+    "rust-std-1.48.0-x86_64-unknown-linux-musl.tar.xz": "4f485d8800f90898705686b873765a4c0fe909d1127d5b091a01979bc32f01c0",
+    "rust-std-1.49.0-aarch64-apple-darwin.tar.gz": "cf3308806fc3b6fe00ce49f1e63b1cb1d1443cc812eff7947257f31f590465d3",
+    "rust-std-1.49.0-aarch64-apple-darwin.tar.xz": "509cd5d0faa216c468664ca7e0c89be70a7699080f6ee4c8ec7270302331e43f",
+    "rust-std-1.49.0-aarch64-unknown-linux-gnu.tar.gz": "c58bd4f0738ff662f70e35c19bfa6b8eb12ad54b0fbdce32ee3e50186c04a969",
+    "rust-std-1.49.0-aarch64-unknown-linux-gnu.tar.xz": "69c9a3d56fe8fcbb74b9885e451dd387c9316513a0da8f618dda066597011256",
+    "rust-std-1.49.0-aarch64-unknown-linux-musl.tar.gz": "bc5501347598f48f55ba23011602a8fc1fe156c23c1c7b4d449c84eddd64d4ba",
+    "rust-std-1.49.0-aarch64-unknown-linux-musl.tar.xz": "3e2ddbe6d0683b93228467663a2ba2f80f588fe0cee267d73308be8eeb0b43ff",
+    "rust-std-1.49.0-wasm32-unknown-unknown.tar.gz": "803b4bd43c711753e3e73c210b88a30c4cfe6f3955902d76e2a15a70ad191ffd",
+    "rust-std-1.49.0-wasm32-unknown-unknown.tar.xz": "75695161842c04846107d4e2ba880c45ee4a41fcfe95e962fea9897eb4f34aa0",
+    "rust-std-1.49.0-wasm32-wasi.tar.gz": "0c97a1f8470719b741186cbb89c4be6a61057fa013d815b2b97fc1043e269d22",
+    "rust-std-1.49.0-wasm32-wasi.tar.xz": "c01f9ee262f550f51ffe19f9253453d93bef0f1f02e2ba391fada02c54dfd09c",
+    "rust-std-1.49.0-x86_64-apple-darwin.tar.gz": "c4389a8534b8da3ae3570646d68fea9a25268b17ed138867e31d4517312759af",
+    "rust-std-1.49.0-x86_64-apple-darwin.tar.xz": "d064ec56f8d4f880098922dbb34642ccbfa7cba0d333bd924215d202e0f0cd95",
+    "rust-std-1.49.0-x86_64-pc-windows-msvc.tar.gz": "bb55ad626b9d304c0e080fc8731c7978a937c98e873a84834925c525acdbb5e3",
+    "rust-std-1.49.0-x86_64-pc-windows-msvc.tar.xz": "240cce33f8704d161ca00097f2faecb7cc0ffc00cef7f94fad592e3853bca9b4",
+    "rust-std-1.49.0-x86_64-unknown-freebsd.tar.gz": "ba97f1d751d6656d5efba4b0278a6571e6a56a489670f279bd2c647a90f1679c",
+    "rust-std-1.49.0-x86_64-unknown-freebsd.tar.xz": "6ba34f59ef2ee0e2f0160e13724dc6c66b0a4926c4db464d7f182102771a90b5",
+    "rust-std-1.49.0-x86_64-unknown-linux-gnu.tar.gz": "f0d2c2d509c29ea9f7c24bb5a885321030281631e0bde0714e5cf881184d57e2",
+    "rust-std-1.49.0-x86_64-unknown-linux-gnu.tar.xz": "638c3983ad20f9b9e1f49da1c64ac681eec5cf705fee1089f052de4c09b05c2b",
+    "rust-std-1.49.0-x86_64-unknown-linux-musl.tar.gz": "07d5ebdb6c391631c168deea21c7f4d538ea93c86c2e5e1968508e90835c14e9",
+    "rust-std-1.49.0-x86_64-unknown-linux-musl.tar.xz": "1b6ec104ccfb0b782de4b73d460db22a6b7ca495673d548b1e8554cddb97facf",
+    "rust-std-1.50.0-aarch64-apple-darwin.tar.gz": "8a1cda91afd3a732d3737b6f933b0b6065949dd8fbc820245a7e2a97ae9a7711",
+    "rust-std-1.50.0-aarch64-apple-darwin.tar.xz": "975b3e25c09c2817c1681e7db647c72bf4f65b5dc3a764d5d5ff2ba4a93eabb5",
+    "rust-std-1.50.0-aarch64-unknown-linux-gnu.tar.gz": "83aeff923faa528e2ff5b582e4c3bdaefeda34078345e48878eba6ef95d41040",
+    "rust-std-1.50.0-aarch64-unknown-linux-gnu.tar.xz": "1a1b1a540d531c89e866083f84ef67125dee108844e4e415b07c3a1000006544",
+    "rust-std-1.50.0-aarch64-unknown-linux-musl.tar.gz": "fbfa90f58d9c96f91937666ff2495345f564955442109833189ab7dbb0facd89",
+    "rust-std-1.50.0-aarch64-unknown-linux-musl.tar.xz": "9f47e009bcba5fe5ae871106a02dfde033674796ef93f22a7f3c1dc19fd85b50",
+    "rust-std-1.50.0-wasm32-unknown-unknown.tar.gz": "6b639eb5b07e1fee82e58e4fb74b2f40f5c76b02384d27f9675692a7e9656bf6",
+    "rust-std-1.50.0-wasm32-unknown-unknown.tar.xz": "5468ae3ead6459fceb66473eaaa0beb4f68977c9491cf25f86daba05565667ea",
+    "rust-std-1.50.0-wasm32-wasi.tar.gz": "205216840a1c286523342adc5c085819e8a4fc6de55efbfb70dc691a463fd8fb",
+    "rust-std-1.50.0-wasm32-wasi.tar.xz": "25717eaa844ec325983fc5792624d6a63e70989697b0f57dff9bd31913870ba3",
+    "rust-std-1.50.0-x86_64-apple-darwin.tar.gz": "a291354e78e8147b22e92c817a0dfee8d3342e07bfafa73a2904a1c99d22c5b8",
+    "rust-std-1.50.0-x86_64-apple-darwin.tar.xz": "5f7dd6bbe551195e1c8b09921e4712f80adb26bf03dc7b19f0533049c7ddc500",
+    "rust-std-1.50.0-x86_64-pc-windows-msvc.tar.gz": "48e562e1de58bd45aa0d8a95173e159c588ee76b0164affdc0140c928b1994c1",
+    "rust-std-1.50.0-x86_64-pc-windows-msvc.tar.xz": "2abfda2e94bd0dcd541d6ca6c8f46fba5b12571c404c3b144551506c50296992",
+    "rust-std-1.50.0-x86_64-unknown-freebsd.tar.gz": "b9b543a310adef1e8432f7edea63b684369b30dad1c30aa12a57ccdaf8ae0224",
+    "rust-std-1.50.0-x86_64-unknown-freebsd.tar.xz": "09ac8e9e3efd6e5d1a833fc693e22204d33ed1a7e1a613f78be826520c12222e",
+    "rust-std-1.50.0-x86_64-unknown-linux-gnu.tar.gz": "2aaf284a204d605f6685d2000cf83c25d0e1c789093009801ca16e1c659ae8c6",
+    "rust-std-1.50.0-x86_64-unknown-linux-gnu.tar.xz": "f1eb68db2b28a56ed8701edba7cf3688011d903ca12ff9d85bd21d3f8f614792",
+    "rust-std-1.50.0-x86_64-unknown-linux-musl.tar.gz": "f8924ff7378552c2f16faba6aea178c1b098f4cfcb07247c7c58533543980594",
+    "rust-std-1.50.0-x86_64-unknown-linux-musl.tar.xz": "e2878dcf80a8ffca1fb53d75dc0418d3fa3af52d03e25421c4f9fa29af2eaec0",
+    "rust-std-1.51.0-aarch64-apple-darwin.tar.gz": "b9ed9468652417b375d24152eed9b87436f1ca0ad0311d8a1a802fdde263bdad",
+    "rust-std-1.51.0-aarch64-apple-darwin.tar.xz": "cfdb0c1b095384648e1993288ea7176c4ca058e4a0360aacc72e31b578896554",
+    "rust-std-1.51.0-aarch64-unknown-linux-gnu.tar.gz": "a6ed4abe59dfaf2119e2803f67fd8aef757a622ae3ac9a040946af2b02f4c269",
+    "rust-std-1.51.0-aarch64-unknown-linux-gnu.tar.xz": "b9692bdf8baee930ebea7e9fdd6174c2463fea45bd83769ece31715dfa5025ba",
+    "rust-std-1.51.0-aarch64-unknown-linux-musl.tar.gz": "9c0dcae82c10d52d202052fa0fa912cd7a21dd286de01717f70e24dfa20a5b03",
+    "rust-std-1.51.0-aarch64-unknown-linux-musl.tar.xz": "ca3eae4f02d96f19c24d921a10889740976852aff36bda51cd6452b4297407f0",
+    "rust-std-1.51.0-wasm32-unknown-unknown.tar.gz": "27f4455f01911c2fa1a58cd2fdb3bf5699bf1521cbd462a457c4a1ccb8650e38",
+    "rust-std-1.51.0-wasm32-unknown-unknown.tar.xz": "fd57886f607cee8573cb511ca546ffec5591bcbb62bbafafe91c9804b85edfb4",
+    "rust-std-1.51.0-wasm32-wasi.tar.gz": "6e96fef8f132934a37169296e7bd13e64ee73679014b47e7bdc399add9b10007",
+    "rust-std-1.51.0-wasm32-wasi.tar.xz": "7a9700d8ddaa9bb950b46b731fb7b1ee8d66e2b8ed8ecb048919d92704ca6b29",
+    "rust-std-1.51.0-x86_64-apple-darwin.tar.gz": "2856bc46d3624ae2658897c15388c0c353bea916963a2fc5991c23b920d5678c",
+    "rust-std-1.51.0-x86_64-apple-darwin.tar.xz": "63be2a7ce6a8f495dad57c5c3550506311eafdc60fe757517c7ce3ef1c491be5",
+    "rust-std-1.51.0-x86_64-pc-windows-msvc.tar.gz": "0e9300e21b61ec1adde0b48772a76f1c881015cf1e7885b641dcfa1dd8289e55",
+    "rust-std-1.51.0-x86_64-pc-windows-msvc.tar.xz": "63a72141efcba51c3a6bac4a98f9f3d7589c4cd3ba832e9b98be60cd151a7b41",
+    "rust-std-1.51.0-x86_64-unknown-freebsd.tar.gz": "4d03de5911c533cd0ac2ab5ea9b9105e853ac0ee0f6aea22b6714a7dbe008f01",
+    "rust-std-1.51.0-x86_64-unknown-freebsd.tar.xz": "9cceb857b488e0ea5837e37b38b8a97e888f521a9cdb02879bd9a231dd9bb0ee",
+    "rust-std-1.51.0-x86_64-unknown-linux-gnu.tar.gz": "5e7738090baf6dc12c3ed62fb02cf51f80af2403f6df85feae0ebf157e2d8d35",
+    "rust-std-1.51.0-x86_64-unknown-linux-gnu.tar.xz": "1199ba8351bb88166050c0fb15a55a23b20b6ead098d7637aaca53b91c5e68ca",
+    "rust-std-1.51.0-x86_64-unknown-linux-musl.tar.gz": "8e23cf075b514633226e73786bbcc0907853a2e9cba98ec208ca16ba3847b834",
+    "rust-std-1.51.0-x86_64-unknown-linux-musl.tar.xz": "3a0ddcc426fe79e21f943309258cf40b552e633180536fe90be21e6e492053c3",
+    "rust-std-1.52.0-aarch64-apple-darwin.tar.gz": "2bf799c9846c9e6308d777d30f38a54acde53b690bd12324dbba3e3b12c44822",
+    "rust-std-1.52.0-aarch64-apple-darwin.tar.xz": "8145cd071c190bc50fa5d81f856e067c1cb8fcd7d55ec6924cf6a39e1b858c4f",
+    "rust-std-1.52.0-aarch64-unknown-linux-gnu.tar.gz": "f16adbfc562875aad7f6a4c9111519ee27eeca804fa575f8d274bd2dc1efa41a",
+    "rust-std-1.52.0-aarch64-unknown-linux-gnu.tar.xz": "3720d98988302bc1f676cef2ea3b2a641404cbbe2d47d0f28f8954658586aa12",
+    "rust-std-1.52.0-aarch64-unknown-linux-musl.tar.gz": "54d9f39a8a2ebcdec83b0102eac209439f846248cd6b9919421a51448b757bf0",
+    "rust-std-1.52.0-aarch64-unknown-linux-musl.tar.xz": "153d4a56264b3c38187c566ebdc3dee2e7573cad87b7c68b7e5c52d0c5ad056a",
+    "rust-std-1.52.0-wasm32-unknown-unknown.tar.gz": "d4b059dd880b7c2418c454f6ff9b87f075f8634364d86ade1f4131083951592d",
+    "rust-std-1.52.0-wasm32-unknown-unknown.tar.xz": "305e10c5cc7e8f270347e2bff624097605be11775b850d751de972f4b051e14d",
+    "rust-std-1.52.0-wasm32-wasi.tar.gz": "37a48c39b8a5c41906b003dd803d5d4679a1321c0dd36c222e74b3384592a2d5",
+    "rust-std-1.52.0-wasm32-wasi.tar.xz": "4140f74f6b60d4be60ad913e4732ff35d1f713a42c49a4aae7e237e3ec46ed06",
+    "rust-std-1.52.0-x86_64-apple-darwin.tar.gz": "dfab59a96112512f8b3f6550ea932bdc4f09b0c0659545a938dbc334e96b9515",
+    "rust-std-1.52.0-x86_64-apple-darwin.tar.xz": "cf6b4788718abe9c3f6439620ac1eee3aae57cff21504cb4c4cdca7083edee99",
+    "rust-std-1.52.0-x86_64-pc-windows-msvc.tar.gz": "28adfe2d59d37f179d82fa0ad9b2d0308607abd6c05de0f17458625d83997930",
+    "rust-std-1.52.0-x86_64-pc-windows-msvc.tar.xz": "059e62e8e48d182be17de3ba10d28df1c451f441e75efc4cc53703bfff15e590",
+    "rust-std-1.52.0-x86_64-unknown-freebsd.tar.gz": "e721b2acb871722a0c36ae2e9d8d97a2ee8175c9c2e3cb80238c662be401b3e2",
+    "rust-std-1.52.0-x86_64-unknown-freebsd.tar.xz": "23c092731e39221f6281428e51ae3060c608452a4af57a106e9c32048a501182",
+    "rust-std-1.52.0-x86_64-unknown-linux-gnu.tar.gz": "dcea50e20596a698bf534d37f28cabbe6ca6fa31bee9c4c186b0874d1d67d4ed",
+    "rust-std-1.52.0-x86_64-unknown-linux-gnu.tar.xz": "dcdc0083facd6484527494ee5b8f72e040a095ab346bb658ce176be573d5c9b4",
+    "rust-std-1.52.0-x86_64-unknown-linux-musl.tar.gz": "6d9883520f6d3cc540114a0246849234a6f801bdfb0346340426b02f4c677063",
+    "rust-std-1.52.0-x86_64-unknown-linux-musl.tar.xz": "d5809f3f1345a3c524f00cfa2ac1631b494a6de3143b1a3d081476f2c4f78905",
+    "rust-std-1.52.1-aarch64-apple-darwin.tar.gz": "3b8914c1e9a51407690661032b059fb87482e93f10f2160f3b042ecc4cb97c38",
+    "rust-std-1.52.1-aarch64-apple-darwin.tar.xz": "b87b3b86b8e9e8129c74bc53f79f0a16085c05555df07b87923b9c8ab5d30944",
+    "rust-std-1.52.1-aarch64-unknown-linux-gnu.tar.gz": "b87ef86a241626cc86bf98fa0e70483f96d1bb9bbb4da7d9c589ac2094393a8d",
+    "rust-std-1.52.1-aarch64-unknown-linux-gnu.tar.xz": "c26b9ddac553ecee1b98ae0f068f98296ec14943eb3cd7bb2b410cadc48897ad",
+    "rust-std-1.52.1-aarch64-unknown-linux-musl.tar.gz": "fe8091e71cde5e3a344d204a6627765ab79ccf19321348dbfa27768ac5f2abf9",
+    "rust-std-1.52.1-aarch64-unknown-linux-musl.tar.xz": "e49bff685aa5feb69c9f51c178a72b66b3858edfd3774784a55088fc5b88f8dc",
+    "rust-std-1.52.1-wasm32-unknown-unknown.tar.gz": "83953390e0d1e99cd6572e825888020f91d095b07eb744539a59891837b6fe9b",
+    "rust-std-1.52.1-wasm32-unknown-unknown.tar.xz": "dbe1069bdfb85290b39c238af4d4832cb4bfbf9285eee844c116bda68ec68b33",
+    "rust-std-1.52.1-wasm32-wasi.tar.gz": "7f90fb6336d679ddcce034201645f254d8b97c6352926f5122e38329fd6e1aa6",
+    "rust-std-1.52.1-wasm32-wasi.tar.xz": "03a9e0395d553a866277c1e85789347057e25c38a7250d64952bcd405a40c9fd",
+    "rust-std-1.52.1-x86_64-apple-darwin.tar.gz": "3567ec015a498b8d5c6e8f47aaa3ec469a418ea0e0f163249e825ef24457e38b",
+    "rust-std-1.52.1-x86_64-apple-darwin.tar.xz": "19c78017d12e31d32bcfcf3c781eece80f426cf1de36957ceec73fafbac56f67",
+    "rust-std-1.52.1-x86_64-pc-windows-msvc.tar.gz": "ca95b1ddeae98af71439574fdd9fd9b233ffaea7792c1b654c212a1821d33986",
+    "rust-std-1.52.1-x86_64-pc-windows-msvc.tar.xz": "cca65fce2e9cfe697d50e699c66ed997f53915fc29b12c7d351258a8a86ed2df",
+    "rust-std-1.52.1-x86_64-unknown-freebsd.tar.gz": "5ac8a9dc61421dc4f39380a5d4380130fa176047eef48b3aba205103363b9774",
+    "rust-std-1.52.1-x86_64-unknown-freebsd.tar.xz": "d89ccd638c21d903aad7c64270b559daed9795fecef41dcb32e0d34953f1d91c",
+    "rust-std-1.52.1-x86_64-unknown-linux-gnu.tar.gz": "ba9cf6570d509b3e4c4d821db4caf304f2ffacf5377b7ca55dc1ef9788ae5b58",
+    "rust-std-1.52.1-x86_64-unknown-linux-gnu.tar.xz": "5dfeffb7e6600c311cc7208142bd66367a62a02d593903d3ac940d0a31350fce",
+    "rust-std-1.52.1-x86_64-unknown-linux-musl.tar.gz": "1f3155180a1a143119fd7b1eae3eeed0a0758ca095fd6533918d87cefeb93fe0",
+    "rust-std-1.52.1-x86_64-unknown-linux-musl.tar.xz": "13c198e5e9e49e7cf92684f2b3682884f7566e60bf6e3490489d62fc5d5ac047",
+    "rust-std-1.53.0-aarch64-apple-darwin.tar.gz": "a6191c9b5adab64832c0e0c0ea24f64b32db07ac5f56faf21239055ce38041ed",
+    "rust-std-1.53.0-aarch64-apple-darwin.tar.xz": "2b790f46e49100a0a4e583e432f9b7847701181ce709e8dfc0b519a09223cb8c",
+    "rust-std-1.53.0-aarch64-unknown-linux-gnu.tar.gz": "9e5c09d14fec5609bfd042299900f20a44c52d53c64e76e184faadf67d07590d",
+    "rust-std-1.53.0-aarch64-unknown-linux-gnu.tar.xz": "fc261d0ff057c58b36057c30217bad1a29a9a3f257c70f5df88ad3f1d982386e",
+    "rust-std-1.53.0-aarch64-unknown-linux-musl.tar.gz": "7501cc0787a63e550f9918dc5d23ee9fa9f3f3162088b33213694be2d6e2aa32",
+    "rust-std-1.53.0-aarch64-unknown-linux-musl.tar.xz": "f7867d54e677dd53539a72421cfbe2a2e7a9f845b8ea38e30d2dc43fbae0f7ec",
+    "rust-std-1.53.0-wasm32-unknown-unknown.tar.gz": "d9539af508a484d7da6b9683aaeb9b50ca63730a14c90837100d668c2591a697",
+    "rust-std-1.53.0-wasm32-unknown-unknown.tar.xz": "7f88e2cf265cec593b02c63921660387ed8325b3f67cd1e3504b1be83c847839",
+    "rust-std-1.53.0-wasm32-wasi.tar.gz": "e75188931308e2dbd6cf85c802d28bbd175a0696cec241b134c17f2ffdfcf10d",
+    "rust-std-1.53.0-wasm32-wasi.tar.xz": "babe36210fed82375d30cc7af90d92c3621e3a889ddb8b540ff57265049fead9",
+    "rust-std-1.53.0-x86_64-apple-darwin.tar.gz": "ef9b2d8b467a29c8d5621ca804dfd6b9eb38ceae6ed86c763ddece0a38714697",
+    "rust-std-1.53.0-x86_64-apple-darwin.tar.xz": "3194a6fac963335ee08bdf56bfb358f7142831f5f2ad7b45bf0c1d65b84f06ef",
+    "rust-std-1.53.0-x86_64-pc-windows-msvc.tar.gz": "b5dc9771dd9b8c2a9fb10769e64c962cea01cc3e0b0057b78ce8a9ba0477a4d0",
+    "rust-std-1.53.0-x86_64-pc-windows-msvc.tar.xz": "45a3ef1b85d4e751356b1c7ee1193b2a676bc17eb23e8192621b62d41b69d497",
+    "rust-std-1.53.0-x86_64-unknown-freebsd.tar.gz": "238bf461d866b5ef4614609462356304eb0225b0c61668d51a7b1844561df845",
+    "rust-std-1.53.0-x86_64-unknown-freebsd.tar.xz": "e307ccdbe7c896e3ac53d3a933bc5254d8a7cd2a18026211dffe7211192eba80",
+    "rust-std-1.53.0-x86_64-unknown-linux-gnu.tar.gz": "b3428b9ffd5a8f8f13506eedf2fc865665a53894408f0b64314686e8a08d06b2",
+    "rust-std-1.53.0-x86_64-unknown-linux-gnu.tar.xz": "66d5257bbd194db08e67ca63a74cc80cdc4a36eaa30bf7dfe65861d9deaff7f7",
+    "rust-std-1.53.0-x86_64-unknown-linux-musl.tar.gz": "e91abd171f35951f1fc56b10af817c9e83833eec5c3712dae8bc1e5e63cb7100",
+    "rust-std-1.53.0-x86_64-unknown-linux-musl.tar.xz": "413449866616b1cd048da1356a41d977bf4e037cce114f07c3afbb0497b3e4c6",
+    "rust-std-1.54.0-aarch64-apple-darwin.tar.gz": "469b832c7d33c1edfefe705a2ad27172f6906a73b56be789fcc30629792f75b4",
+    "rust-std-1.54.0-aarch64-apple-darwin.tar.xz": "f6c87ba69889f4efdba616990b1dadbed5fe76746bf5f1c07ccc618a96b78e99",
+    "rust-std-1.54.0-aarch64-unknown-linux-gnu.tar.gz": "2d90cd90734a2d057b2a4eeee36a72d96569fb5fff0ac1e22eeb5fab93e66848",
+    "rust-std-1.54.0-aarch64-unknown-linux-gnu.tar.xz": "a1a77737d218087eb7d3613adcde2c9e383d758cdf128646a0ee63396145270b",
+    "rust-std-1.54.0-aarch64-unknown-linux-musl.tar.gz": "4c689f32444afa8faef2f7eb896b59f76827e9950f795988d626c9e4552e3d4b",
+    "rust-std-1.54.0-aarch64-unknown-linux-musl.tar.xz": "9a7ff8e4cd160f6a58c3b5c7e679b7acdc427c2440ecc70a31a5dc71bbecd0c8",
+    "rust-std-1.54.0-wasm32-unknown-unknown.tar.gz": "6e454b700234a0b33df15e6936c1c27c643101a3c4253f5e41b8e8a48a9f7ab2",
+    "rust-std-1.54.0-wasm32-unknown-unknown.tar.xz": "c109ef05ede1d69f7af5aa4d0a1e1ea6e22c27ebccffe610577e28d6bdd45b85",
+    "rust-std-1.54.0-wasm32-wasi.tar.gz": "052220fdf7ea1988b6cc6445f8ea58d2c29335feb442842014f161e618534331",
+    "rust-std-1.54.0-wasm32-wasi.tar.xz": "481b00badbeaf5b8a110881ff52f8760098cc7eadc6c0942939646067be4a478",
+    "rust-std-1.54.0-x86_64-apple-darwin.tar.gz": "3908ff438cdf39c3f46a103f3a0fa04a0d8add996c87e4290c80f1a766df6a04",
+    "rust-std-1.54.0-x86_64-apple-darwin.tar.xz": "d6533d147e5844feb3af26a02c71c78332462334b554af577f68898aeb7a6d3d",
+    "rust-std-1.54.0-x86_64-pc-windows-msvc.tar.gz": "13f7595449308c4ffe79a6111d5fd2e7a4c6a56174d6c295437676e29951ce90",
+    "rust-std-1.54.0-x86_64-pc-windows-msvc.tar.xz": "01706f7711fb763b9c1e4ca6c7675b656f1c0283e1377a7afb81d46ff76b1fc5",
+    "rust-std-1.54.0-x86_64-unknown-freebsd.tar.gz": "f504cad489fe606dd1a7d064253d6e0d0e5450674cfd941b8f848953efce99e5",
+    "rust-std-1.54.0-x86_64-unknown-freebsd.tar.xz": "29e423fef1e3480dfa4d011d6663551f893dc01e98c1c486c875dae62d90f2b2",
+    "rust-std-1.54.0-x86_64-unknown-linux-gnu.tar.gz": "487c51ac97e7f7deceae904b70e9bb031574dbeefe07b39b24e3fb00740962eb",
+    "rust-std-1.54.0-x86_64-unknown-linux-gnu.tar.xz": "a22e19859b3c5032daac1633637546a986c51bdfa3ad0db6e394e6cc461f466b",
+    "rust-std-1.54.0-x86_64-unknown-linux-musl.tar.gz": "7cbe73472390e0e63d1812dd86d5024350e0e8dae36a6bf52585ad0136148818",
+    "rust-std-1.54.0-x86_64-unknown-linux-musl.tar.xz": "c2de24eb3e524c0fdd1e8116f578c103035da1ece1e4c06efab67999180eefe8",
+    "rust-std-1.55.0-aarch64-apple-darwin.tar.gz": "bd364710331b34f454258b73e5cfc0583d3c0763ecce0994d8a990c1847604a4",
+    "rust-std-1.55.0-aarch64-apple-darwin.tar.xz": "cd5f46a7c594249907b944d2cdcedc46bf2bdc5fe66ccd6ce9fc2defe52bf4d8",
+    "rust-std-1.55.0-aarch64-unknown-linux-gnu.tar.gz": "e30063a259e32cd0e31baadcee82112ef840e0f654d5128dd79fc715ede92058",
+    "rust-std-1.55.0-aarch64-unknown-linux-gnu.tar.xz": "1aa21d2e90164f452c17650f862ad64c7ec1863c0409f2926d306d406ae4668b",
+    "rust-std-1.55.0-aarch64-unknown-linux-musl.tar.gz": "f540bf8238b46cefc5490eb6e626f8712ff5a49d8fdb7e75e838a5c1e1b3046d",
+    "rust-std-1.55.0-aarch64-unknown-linux-musl.tar.xz": "aab252fca85811305964a8038460cf1c5c1833753666bca00ab2bd7fbb2c9879",
+    "rust-std-1.55.0-wasm32-unknown-unknown.tar.gz": "275d7a1032f709d186bb8bd66a96f17f5c8d6c1a4c3b51b7ce60a4f3dccefdf4",
+    "rust-std-1.55.0-wasm32-unknown-unknown.tar.xz": "939f4a53a3b000e026d1da8df604ec4cdae1b3ced784388f152204b8d5331ec3",
+    "rust-std-1.55.0-wasm32-wasi.tar.gz": "69696faaa29bdffc58a71707a4547a85a09199218411302afa7554073357f576",
+    "rust-std-1.55.0-wasm32-wasi.tar.xz": "b4ca353d8e68a01b48c03a31ab4710147a58067ca28e6a2874f5b21281682a9f",
+    "rust-std-1.55.0-x86_64-apple-darwin.tar.gz": "8888fb0a1cbc645f86e1551d27cc127697361fecab9cd414691e434976412733",
+    "rust-std-1.55.0-x86_64-apple-darwin.tar.xz": "0e167e9e0e4fd86a2586fa3df21b8d7550761bdcc3464c64a4ae6b521017657b",
+    "rust-std-1.55.0-x86_64-pc-windows-msvc.tar.gz": "8507fe0f2059d68bc0cfabae1cc96cfc3d0357f04522942c5d4fdcdc1cbc23a8",
+    "rust-std-1.55.0-x86_64-pc-windows-msvc.tar.xz": "c4a086db9d5e861540192efc0ce31d38fec2743e858205f1e5f04cb1200f1363",
+    "rust-std-1.55.0-x86_64-unknown-freebsd.tar.gz": "522f4f75c50a0fde08d6235ed80c7cac30c922943954aad1e7c154cd8762ddd3",
+    "rust-std-1.55.0-x86_64-unknown-freebsd.tar.xz": "0295cd52fb356294a0b2ebc082437fde89c98e654fcf21e753b9ae52c4342045",
+    "rust-std-1.55.0-x86_64-unknown-linux-gnu.tar.gz": "c07c5ce96b86364601c0c471bb85105e80a5e345b3e4b3e2674e541cc2fdefcf",
+    "rust-std-1.55.0-x86_64-unknown-linux-gnu.tar.xz": "160873f5ba5099b21202a1e62eb7b0588aabf88dd709f886b142ce60356b3006",
+    "rust-std-1.55.0-x86_64-unknown-linux-musl.tar.gz": "357b8f56ffa3858e2f32be837bd84e3d89403f17c55bf0c105f34a0b796bceed",
+    "rust-std-1.55.0-x86_64-unknown-linux-musl.tar.xz": "a7f02bd5b4fd2b1f55edaddfa869d2ce210ce4951cb752ce7b380129bc2d1882",
+    "rust-std-1.56.0-aarch64-apple-darwin.tar.gz": "88ae1a2da1c7bbabeab3bce392ed9cdf1403c1f6cef5a8bc9a6813e480127fc6",
+    "rust-std-1.56.0-aarch64-apple-darwin.tar.xz": "4d27aedcb0d12b238dffdce9c2571094ac5b1aeee9c69d15fff97be8a95357ce",
+    "rust-std-1.56.0-aarch64-unknown-linux-gnu.tar.gz": "061c8a855696b3e23fb48ad69aa90e70ead825825e4cc02374d3cb1df4486258",
+    "rust-std-1.56.0-aarch64-unknown-linux-gnu.tar.xz": "3cd1c69c618e5efaf578a156c2a950c93964f9b47ba4d705d5700bdc64880231",
+    "rust-std-1.56.0-aarch64-unknown-linux-musl.tar.gz": "2a83ec23e14e0b578b636c3c95283c92fd034e8b56a564c043db3f8b746eeb2e",
+    "rust-std-1.56.0-aarch64-unknown-linux-musl.tar.xz": "f8fd780fba59a523bcb07db1632e7fd017c04244abacbd4ffbedcab9439ac3f8",
+    "rust-std-1.56.0-wasm32-unknown-unknown.tar.gz": "3e0f1282549f09f9f9062f8fa8ca197eba5407c4422378688d78075bdfaf3358",
+    "rust-std-1.56.0-wasm32-unknown-unknown.tar.xz": "9ccd02fec8b546e5c712cf21e89ca148c1909d34d0906edaa48622ad7f356e6a",
+    "rust-std-1.56.0-wasm32-wasi.tar.gz": "f819c096dcfc3fd0466eff346ea4291fe0ef86a08529b9be6843017c79256237",
+    "rust-std-1.56.0-wasm32-wasi.tar.xz": "6603b2d51440b33e860615818027dc29b3aada77542813fd3a5b18efe70a97bd",
+    "rust-std-1.56.0-x86_64-apple-darwin.tar.gz": "58c6fad6f09706f2940cd501a1d0dbd984ce4926000009aed313dd2cd3c1a7ad",
+    "rust-std-1.56.0-x86_64-apple-darwin.tar.xz": "1633917bdc5fb5d9e161070328440fec4afd8f50827c5979ff78af4fca1b10a9",
+    "rust-std-1.56.0-x86_64-pc-windows-msvc.tar.gz": "7d3961a5115f29738061d9c22e2472082a5e2de7bfe550a04a22180c3caa472c",
+    "rust-std-1.56.0-x86_64-pc-windows-msvc.tar.xz": "424c12ddd9863538ee6034d84cab30d8d02839ce3718d16b9ec2ca7d59f1692e",
+    "rust-std-1.56.0-x86_64-unknown-freebsd.tar.gz": "e059d39f15cea58fd89d860a06504f48234ae2aff2c1eb5e4463b50367827ff7",
+    "rust-std-1.56.0-x86_64-unknown-freebsd.tar.xz": "4409121b07a4dd4ec5a7c65c230ad796005fdfa8d5064506b8e546728d92a87a",
+    "rust-std-1.56.0-x86_64-unknown-linux-gnu.tar.gz": "3c314efa230f95f5d9e3357e5f915a4f40d2a21b10ba7b92fcc9036cbcd9fbac",
+    "rust-std-1.56.0-x86_64-unknown-linux-gnu.tar.xz": "f693e4f41a959d62528e0043b0b010c4815fb9f5887267ae34ff8b860f8ec4ae",
+    "rust-std-1.56.0-x86_64-unknown-linux-musl.tar.gz": "03b7a319a3d3e5f86278753f2780c7b3fa3f1b60bc2b8ddf6fd18a36540b8601",
+    "rust-std-1.56.0-x86_64-unknown-linux-musl.tar.xz": "0b1f5494cbde937294b1d90f58e94de24c25608e485f3eeafff50192b4d3c6f2",
+    "rust-std-1.56.1-aarch64-apple-darwin.tar.gz": "59fcdb16c264fce206a1a59261fc576f547fa0a807d3370b542ab25261ae5158",
+    "rust-std-1.56.1-aarch64-apple-darwin.tar.xz": "733d5855a4b4158778e4eab50229a96cfdd492cfa8cf1877bfe7c9a242d523cd",
+    "rust-std-1.56.1-aarch64-unknown-linux-gnu.tar.gz": "d577c25879cf160ec1a04d5101971dd684f9b4f87b3cb463a7521b676dc3df89",
+    "rust-std-1.56.1-aarch64-unknown-linux-gnu.tar.xz": "a83416d15354e4dfa1c1e4a756282c6be7169679f2b04eca82ed34e2116b93f0",
+    "rust-std-1.56.1-aarch64-unknown-linux-musl.tar.gz": "444d5cb43bb82322562afe54c249c3d85b5b1cf215fcd0cfdabd2e657fcda687",
+    "rust-std-1.56.1-aarch64-unknown-linux-musl.tar.xz": "50603cfa6332846ee1a7e9c0440f976b57b49d1800a2504ef0be1fb484646bbc",
+    "rust-std-1.56.1-wasm32-unknown-unknown.tar.gz": "4e62beca963a5b8c98913dd10abc493126675a0a35c2817afdf6975a49cc1bce",
+    "rust-std-1.56.1-wasm32-unknown-unknown.tar.xz": "4ad9c1d9eb00c2dc569f6e2b5ca5acd715db02db3456af08ba61d00f40e3a0fd",
+    "rust-std-1.56.1-wasm32-wasi.tar.gz": "a7eaf9bf238671f7a54afe00cd76dbb354933e525ab5bceb10d156a2bc414dd7",
+    "rust-std-1.56.1-wasm32-wasi.tar.xz": "c5ae515041a447a94de4d7f9559f82e70fcc7b48571bfb26d9866dcb2fa5cfa6",
+    "rust-std-1.56.1-x86_64-apple-darwin.tar.gz": "a1cedfaea1508bf3bfc8a77d82d15c693b41e70e56fad930d24f21f0bce5052a",
+    "rust-std-1.56.1-x86_64-apple-darwin.tar.xz": "5e58c2ecb19b09dd56637bd21813fd76778aee2be3104d324b62bc6c4ec3c46d",
+    "rust-std-1.56.1-x86_64-pc-windows-msvc.tar.gz": "ace5ea90e70b9d035b28b405175d52e1796fb1bb36cfbdead1048ff00e9ec1fe",
+    "rust-std-1.56.1-x86_64-pc-windows-msvc.tar.xz": "064e4e9a030057c20e398c2f4c46e6e5e2d3b493b5e677c2e5e32fe77d1ecfb2",
+    "rust-std-1.56.1-x86_64-unknown-freebsd.tar.gz": "1382799af56e1ec48cf3971f84122c9d445996422055b822d9d6226a31a20737",
+    "rust-std-1.56.1-x86_64-unknown-freebsd.tar.xz": "8ae63f5c03a8d8a60be62dc536672b6ae8e5259837cf2a543f1c4c30d4cbb5e6",
+    "rust-std-1.56.1-x86_64-unknown-linux-gnu.tar.gz": "afd959b295e17640d1e94648278a944dc5f349ebdd9e59e2404729db0810c531",
+    "rust-std-1.56.1-x86_64-unknown-linux-gnu.tar.xz": "b01011cbb5503c456ecc6a557a38e099994b8497df545c661ce8fd48c5beadc6",
+    "rust-std-1.56.1-x86_64-unknown-linux-musl.tar.gz": "88bfd0dce45d4321b0781550a300f90da5344dda20744219b6b23072b6cb03af",
+    "rust-std-1.56.1-x86_64-unknown-linux-musl.tar.xz": "055c5f8676712d8b86c3685d857d45bc0757594cb59f04dce4949a91df99635c",
+    "rust-std-1.57.0-aarch64-apple-darwin.tar.gz": "3b442d3f546524aef4fe8483c5ddcec1c5dbd52216d98aabc066883db31088d8",
+    "rust-std-1.57.0-aarch64-apple-darwin.tar.xz": "1636ae0aa61c0d64bbcaf424d0a18b4f1e604b538ffdf86d710beeb1e36ffbf4",
+    "rust-std-1.57.0-aarch64-unknown-linux-gnu.tar.gz": "4c70901d1cbddec9ea99fbd62b20f454d30e1ffbb48a21169ac823b3f02a1fbc",
+    "rust-std-1.57.0-aarch64-unknown-linux-gnu.tar.xz": "3618da916a0f92f241cf1d67d04bb57835b303cf2047b57dc2f2487b89a4fc1f",
+    "rust-std-1.57.0-aarch64-unknown-linux-musl.tar.gz": "4f0c6533186b8fb596ee11b49bd6c9ffb76be59eb8bbdf26f25a47d297666c02",
+    "rust-std-1.57.0-aarch64-unknown-linux-musl.tar.xz": "a955bb0d7b8c6fc67f89af6e4eba4aa700debe7b040c5e19cbb9e2eb57c234af",
+    "rust-std-1.57.0-wasm32-unknown-unknown.tar.gz": "3e0525d9e16f1a58e847080f2d3c02e275c2d5563b7980311e39382bb6c8441d",
+    "rust-std-1.57.0-wasm32-unknown-unknown.tar.xz": "c5ceafae74f43ae31ca21f9523eee317e298d77b2ef94515a27676941f6271b7",
+    "rust-std-1.57.0-wasm32-wasi.tar.gz": "391d814379cf117e927e5deb17bf44e964adee4f5f7208eaee1ddc8927da1fbc",
+    "rust-std-1.57.0-wasm32-wasi.tar.xz": "93395034223068ea82efc61c6c32d040a7db13a5c0682608507261ef408c2cb5",
+    "rust-std-1.57.0-x86_64-apple-darwin.tar.gz": "c1eb892ddb50ebeed288b7aa8171ad46d62362bb26b2d82d2b463dfd45606dc2",
+    "rust-std-1.57.0-x86_64-apple-darwin.tar.xz": "46c2c8fd6aeffbfb62bc03ba913d65b37dfdb328405e2b75a540b6f68e1031c2",
+    "rust-std-1.57.0-x86_64-pc-windows-msvc.tar.gz": "c3984148c561297f804238f6f1e4dd06302c6b3465d3744074016bc23a9f078b",
+    "rust-std-1.57.0-x86_64-pc-windows-msvc.tar.xz": "f6a7512ed0bb31885c3b98ce195f2fa314e02cca71c6a3c1c5d1601d0f44df66",
+    "rust-std-1.57.0-x86_64-unknown-freebsd.tar.gz": "1528a4bc7e3ba42da164bcc7b952dfa73048333c5b9254ce2d03db6bab6081e8",
+    "rust-std-1.57.0-x86_64-unknown-freebsd.tar.xz": "d8279054e722e03794c2499c5ebb25e99df372f81e98dc986d62a76884baf422",
+    "rust-std-1.57.0-x86_64-unknown-linux-gnu.tar.gz": "9140ad6f46a903345d4297a987ccaf37b9c5ca594cd6fd5a27d0be482116fe7f",
+    "rust-std-1.57.0-x86_64-unknown-linux-gnu.tar.xz": "ccdc72d06c90841b7227ec3630337881eeda3da5fbe87328d2e9d705f6f8016c",
+    "rust-std-1.57.0-x86_64-unknown-linux-musl.tar.gz": "e59345c7ba6bde5e1d2950b846c097511998d5897c63a7cea078ece4b8507f5b",
+    "rust-std-1.57.0-x86_64-unknown-linux-musl.tar.xz": "818213a6444503ed6adf0231d3c71de990d4c26926c62e8c602bb7e2d636fb94",
+    "rust-std-1.58.0-aarch64-apple-darwin.tar.gz": "7c1d58bdc87b79f439b1083348a0e492305f8737ad1931755c26b2834a854f42",
+    "rust-std-1.58.0-aarch64-apple-darwin.tar.xz": "812116676bb5278cbe3da3e7e8f2b160b653cc2cfba777317c26188d800c7833",
+    "rust-std-1.58.0-aarch64-unknown-linux-gnu.tar.gz": "3a1283a2dce7abf2816dc70d622215f5769c416abf3e94dd94dd6a5d1109f506",
+    "rust-std-1.58.0-aarch64-unknown-linux-gnu.tar.xz": "b562646864cea55079e4b9d35dc2e9b6abc8efa224e2e49779ba2cbf8ff83b3d",
+    "rust-std-1.58.0-aarch64-unknown-linux-musl.tar.gz": "2e0589157f7f5055f4f295886f9161cdd239d845b7e021a0a59bf338facf9dba",
+    "rust-std-1.58.0-aarch64-unknown-linux-musl.tar.xz": "e8686490679bb827cb59df5a1fe72c9b03ae6ce2299be7fb88ab31a0efa9e1ad",
+    "rust-std-1.58.0-wasm32-unknown-unknown.tar.gz": "cb668772798a811de6e6d5823398abf888f29319bd3803621b0f4ff8c1693de0",
+    "rust-std-1.58.0-wasm32-unknown-unknown.tar.xz": "f220d05a1da577759fb757314cbab9a70407118c7b02c1ee268e5450e3219df7",
+    "rust-std-1.58.0-wasm32-wasi.tar.gz": "4d86cf175ebeb3002fa940447b52ff6fdad99f9fb2ba6a56e42ef961e685c3f5",
+    "rust-std-1.58.0-wasm32-wasi.tar.xz": "86b64ff90d0ca72cd50cd04f1205747f9189f6b13f009ee0cecae0a79db5cc09",
+    "rust-std-1.58.0-x86_64-apple-darwin.tar.gz": "fa89e9ab2e3645d6732811dae3828c86fbd65cb7447ec33c84137e61b168396a",
+    "rust-std-1.58.0-x86_64-apple-darwin.tar.xz": "b6077abd2c70e5782fafb0a5559a0870ebd4d0393725fb7b1e96c862b876ee4a",
+    "rust-std-1.58.0-x86_64-pc-windows-msvc.tar.gz": "20738c0c92fbb59800926ab2fda5191b03537a3d6574ba4b6534de3ebc12d043",
+    "rust-std-1.58.0-x86_64-pc-windows-msvc.tar.xz": "0a93f536d321df52f435a2b7807254f76c7ff530bf6517b54f7b89484585cd4d",
+    "rust-std-1.58.0-x86_64-unknown-freebsd.tar.gz": "99016932b881df2a579d52761d4851ed538e34c39b47e882505892bb50d930bd",
+    "rust-std-1.58.0-x86_64-unknown-freebsd.tar.xz": "2eb84f63368b36e3e737f0e8e28275e1ecd25bb4699bf6d9ca18eac1320118d6",
+    "rust-std-1.58.0-x86_64-unknown-linux-gnu.tar.gz": "0517b0cb57a311bbe1997e9b87fc6bae1f9e1eadec4f7d97374740f17f890842",
+    "rust-std-1.58.0-x86_64-unknown-linux-gnu.tar.xz": "319e2dc5f50cbdfb7091f56643c637465d6bc34291ccdaf1a06a2023a37f50c7",
+    "rust-std-1.58.0-x86_64-unknown-linux-musl.tar.gz": "10d911a65381b624cd1d33a913c9a2270355dbcd6db66b847e63f0f9b0f85f35",
+    "rust-std-1.58.0-x86_64-unknown-linux-musl.tar.xz": "dc839b669ab75699a1c85f6cf0a50d632cbeb18ab0ef08ce2fac0bb3008d07c1",
+    "rust-std-1.58.1-aarch64-apple-darwin.tar.gz": "307f4d430f3491098b7d73db618408eadc22b0e290d2e22fbcf2909c5ec96c2b",
+    "rust-std-1.58.1-aarch64-apple-darwin.tar.xz": "fe57c547650490721bb6f602daeff15dfc3838d556cacdcaa4e2bbd16752e741",
+    "rust-std-1.58.1-aarch64-unknown-linux-gnu.tar.gz": "1f81a91f29d1a5dd4bbedbb76be74582553bb363103bc390c2f8f1f26c2a24bf",
+    "rust-std-1.58.1-aarch64-unknown-linux-gnu.tar.xz": "c7a016ac63aeb5481d661ee3e680b57d35d5ccb902c605c32937a047a02cff49",
+    "rust-std-1.58.1-aarch64-unknown-linux-musl.tar.gz": "feeb863de2688b70b98eafaf7e707b2192373b649ad147aa07d1e95d8cde825d",
+    "rust-std-1.58.1-aarch64-unknown-linux-musl.tar.xz": "4c8d9774fb1f6cfa616f2c43395f438e887a38f0cd901a3886056cc1c1b84c30",
+    "rust-std-1.58.1-wasm32-unknown-unknown.tar.gz": "ef92a50952a03111c59745b8732f55f209da12e5dd8cd15072ad4ed96ad048e7",
+    "rust-std-1.58.1-wasm32-unknown-unknown.tar.xz": "ed74ac99f5ae8e43d4ae1ea0b3f63306bf1fc33f3055d2a4910f29e3f7ed80ce",
+    "rust-std-1.58.1-wasm32-wasi.tar.gz": "09e3b15ebff0a68e83b36913e4711db5ffb4c8dd3d7fa827988c1bdde6b9ee32",
+    "rust-std-1.58.1-wasm32-wasi.tar.xz": "8959da91e21df01588777a1f0e999460d9e94b4d8b89952c9f8bcb6eb2212cdf",
+    "rust-std-1.58.1-x86_64-apple-darwin.tar.gz": "aaa1e34c45394abaa943499e56047f6e678e42e7fcf5fe065000fb33559961cf",
+    "rust-std-1.58.1-x86_64-apple-darwin.tar.xz": "56ffe262af41121997c8036677d1daace0c27dfb577c51b10d8e22d1e31678f0",
+    "rust-std-1.58.1-x86_64-pc-windows-msvc.tar.gz": "b8c335eb2ac500f59f2259b3ac9095647566725ad133509732d3f4a5a7d53139",
+    "rust-std-1.58.1-x86_64-pc-windows-msvc.tar.xz": "82c26dfa30c1671777ae30e54190a11431c13ca6d8174ae11a15154387306447",
+    "rust-std-1.58.1-x86_64-unknown-freebsd.tar.gz": "946c4bc834a89b30deb82664b04b67aee0fa65c232447b3adb4c29e89a559b4d",
+    "rust-std-1.58.1-x86_64-unknown-freebsd.tar.xz": "23204823aa1fae2f93e99c909728fd7752fee7a7515d7f694082fca162d7de78",
+    "rust-std-1.58.1-x86_64-unknown-linux-gnu.tar.gz": "649bda48542f211d77afab4b71505572a4712b6b5c5bdee94533e2e7a9a832f1",
+    "rust-std-1.58.1-x86_64-unknown-linux-gnu.tar.xz": "e72367c15906f021f46801652181c917cd3328be022b93bb30506724f7b56256",
+    "rust-std-1.58.1-x86_64-unknown-linux-musl.tar.gz": "c4e56dfcf9d3d8466eb7d065af44763369df6e641a812a0a6974f94c98ef9a12",
+    "rust-std-1.58.1-x86_64-unknown-linux-musl.tar.xz": "b0d3e03c9b1eff6e241383913b02653ba80776626ca7c4a93f36c2ad829ba989",
+    "rust-std-1.59.0-aarch64-apple-darwin.tar.gz": "e70bd0c56f8f716238a1395c54dd9d993a3168e2764e404dc65553babf7aa127",
+    "rust-std-1.59.0-aarch64-apple-darwin.tar.xz": "ba29d736dcc5bd8d8bade517b95d9752b02e798075d6b9b8e673c03327dc46a9",
+    "rust-std-1.59.0-aarch64-unknown-linux-gnu.tar.gz": "81dbd37919f631f962ac0798111803eb8f06ffde608f0e5dd3682d701cf5566d",
+    "rust-std-1.59.0-aarch64-unknown-linux-gnu.tar.xz": "68e50dee4f6dddeab7330906e46022f57f2c004c847eae3f5b1bc82c59e43fc0",
+    "rust-std-1.59.0-aarch64-unknown-linux-musl.tar.gz": "e4f73617db73df7cb3b97984e38184f57292cc527654b52451293cd70f36f5a4",
+    "rust-std-1.59.0-aarch64-unknown-linux-musl.tar.xz": "6b8424e9b99da7df3b842b47476fbff4c371414186ae50ca0aff050a532c1d52",
+    "rust-std-1.59.0-wasm32-unknown-unknown.tar.gz": "d79f31c54eab23c24e245e8988efa2f73451dc8537d386c52dcc1d7a6db246dc",
+    "rust-std-1.59.0-wasm32-unknown-unknown.tar.xz": "84228f29383f3aed7865b6ed3d3581c55ab595e85a19786c8521fb2e95ae81d3",
+    "rust-std-1.59.0-wasm32-wasi.tar.gz": "b62d02df72e2129c64b35a5d531525d4f51f96eb550cc6705f618968218a7ed6",
+    "rust-std-1.59.0-wasm32-wasi.tar.xz": "66aad729352a3677e23bcabf0183e4aa90ffc173d19a60cbb426fdccee53cf09",
+    "rust-std-1.59.0-x86_64-apple-darwin.tar.gz": "959af8bafbc9f3916a1d1111d7378fdd7aa459410cdd2d3bbfc2d9d9a6db0683",
+    "rust-std-1.59.0-x86_64-apple-darwin.tar.xz": "5697c8283461a3ec4fd397b33bd8bd1b05a2b7eb7bebd0020c7d09128994b794",
+    "rust-std-1.59.0-x86_64-pc-windows-msvc.tar.gz": "fae30c5c9ac491380b556377fb0e804b35707118c5e69f8190debf828c9ad863",
+    "rust-std-1.59.0-x86_64-pc-windows-msvc.tar.xz": "d967779e1ccad4b62c16074c914261aad327c4fb340f7d86f8a56a4e0acb65b9",
+    "rust-std-1.59.0-x86_64-unknown-freebsd.tar.gz": "cf5e4303dd7c3b70a738a2336097c9f2189c8b702a89a8c453d83ac0dee4602c",
+    "rust-std-1.59.0-x86_64-unknown-freebsd.tar.xz": "301233c8a82e1f1320fb180209162adc116bb92311bcf673ab560dec42fadddd",
+    "rust-std-1.59.0-x86_64-unknown-linux-gnu.tar.gz": "3927fd7a094ba063daaf3163fa1b3b0b196968356845fe31c901a23ecc5048d4",
+    "rust-std-1.59.0-x86_64-unknown-linux-gnu.tar.xz": "c854a9ee3dd8e5be9522c1581f75838c1cbae6dece3934b0004f138c4a5024a3",
+    "rust-std-1.59.0-x86_64-unknown-linux-musl.tar.gz": "dfad080e9d86d97929f040a3e2a113a17d4906809c47e9ab6410418b492116af",
+    "rust-std-1.59.0-x86_64-unknown-linux-musl.tar.xz": "473b6ddf598418db49efc21c3d2702cdaf9c78ee4ae00611c7d9e384a2d4dad7",
+    "rust-std-1.60.0-aarch64-apple-darwin.tar.gz": "ca99a455d930147d9383da282e6db4f0de2a013099555b551ab381d58fd82732",
+    "rust-std-1.60.0-aarch64-apple-darwin.tar.xz": "365ab4623bbfd00d78390364748e2b4be547e068c1ec575226246694131cbe44",
+    "rust-std-1.60.0-aarch64-unknown-linux-gnu.tar.gz": "790b12924797dd00e550f3205c8f6403e73124b88de10a77b00830f67904630c",
+    "rust-std-1.60.0-aarch64-unknown-linux-gnu.tar.xz": "fbc39c2ba2eee9bad7305d73d02a63ada651961be8fd9e0dae520bda5d715c6e",
+    "rust-std-1.60.0-aarch64-unknown-linux-musl.tar.gz": "1f023fb8e8d41451e503e1d194f674ba12b37da79612018d77dc13860b8b694d",
+    "rust-std-1.60.0-aarch64-unknown-linux-musl.tar.xz": "16e8f0e03e6a025ef1f96cb76890810d4212525de82340d8cbf2f627725f2ec7",
+    "rust-std-1.60.0-wasm32-unknown-unknown.tar.gz": "9f9472ec8a59ce2bdfa2616ca79113761ebeaacd03e5ef15edef5f075f643a4c",
+    "rust-std-1.60.0-wasm32-unknown-unknown.tar.xz": "f749f69fca07c276285f24590da186b11acd1cd86410aaefd1cd12bfc03c4a85",
+    "rust-std-1.60.0-wasm32-wasi.tar.gz": "0a774f702751843261e215bb638f89e4888f176599dffaed105637b80babf55f",
+    "rust-std-1.60.0-wasm32-wasi.tar.xz": "4f66235d6c72e7fb17f521972a482da46d5a803e1bc99cae31e0b31fa2a27252",
+    "rust-std-1.60.0-x86_64-apple-darwin.tar.gz": "1cdd56c95d27b954f5fda8c5527d2edb4e3f17cf17c5553b8b3b57f8dfc77eee",
+    "rust-std-1.60.0-x86_64-apple-darwin.tar.xz": "7eb4e17c03114e1a5860de096e3413e9eed70413cf63b2d541492b1c9f8c77c1",
+    "rust-std-1.60.0-x86_64-pc-windows-msvc.tar.gz": "e585a7fb4a7fcbc96cebdb2f458f47598b41f43b0cd1e5387128d761f9c03636",
+    "rust-std-1.60.0-x86_64-pc-windows-msvc.tar.xz": "95dde154e4c8a25207df1981f3a69cfb787d03ab671a2158aa5432c82a788fa1",
+    "rust-std-1.60.0-x86_64-unknown-freebsd.tar.gz": "322e5919e849ceed37377b466cede0769352c1e844dea6c685fb248d4c96aa35",
+    "rust-std-1.60.0-x86_64-unknown-freebsd.tar.xz": "769fa6a98cb62c9175929214b9e16a989f05fd663d077e272f41b9a23f9b5e0b",
+    "rust-std-1.60.0-x86_64-unknown-linux-gnu.tar.gz": "963fd25a1f0e986a890e0f99f14902314c71e00f3b14bb587a08ca447ea7d1a6",
+    "rust-std-1.60.0-x86_64-unknown-linux-gnu.tar.xz": "6fb8ee3650beb10836ae48a9aaa535473e64eaca20695b88113267aea3c7557f",
+    "rust-std-1.60.0-x86_64-unknown-linux-musl.tar.gz": "0f4c714c3e6c6b71d39a7b995282eb1b8dea83256e3cf44a688735f9c63e57ea",
+    "rust-std-1.60.0-x86_64-unknown-linux-musl.tar.xz": "0801252694e49eca069003f311e23e124a6dee3557e613133dc2e3cab7bed64d",
+    "rust-std-1.61.0-aarch64-apple-darwin.tar.gz": "9417b3640eb67e233544c925cdf4f0787e5af3c03a1ea8be400f1ef66281e0ed",
+    "rust-std-1.61.0-aarch64-apple-darwin.tar.xz": "c057292538667f1f61638225ce3b2c4c95b823db90b7d32b6af0724934c1e34c",
+    "rust-std-1.61.0-aarch64-unknown-linux-gnu.tar.gz": "2cc8cfc5cc60e0c6a473bb609b54251c561d8d12a986fda8a7ca86dc1d36b4df",
+    "rust-std-1.61.0-aarch64-unknown-linux-gnu.tar.xz": "57d60a519dbce12146849f7e72d55f3cffe9cdcbff8d58e90bb62d3c016bb5c0",
+    "rust-std-1.61.0-aarch64-unknown-linux-musl.tar.gz": "4858a62e12e8541d2f5a7dec0ce0ea73c73ed9dfc73766e6e2d08b8a8bcdfde5",
+    "rust-std-1.61.0-aarch64-unknown-linux-musl.tar.xz": "a7b10112f276a1bafaade1b921985684c93e172f014a5d21b346eb208e387605",
+    "rust-std-1.61.0-wasm32-unknown-unknown.tar.gz": "c502b5894f226c2579ead0c45395327be63eadca75700979ef147a7135d55302",
+    "rust-std-1.61.0-wasm32-unknown-unknown.tar.xz": "2b854a2c9d39fb943d655ddf82da8bff31e954c6eaf7e2ed7ce51e11d15a3534",
+    "rust-std-1.61.0-wasm32-wasi.tar.gz": "6682457e5d9233638bf1ac5c896bde5740686b9504684553faa74407c0b00b5e",
+    "rust-std-1.61.0-wasm32-wasi.tar.xz": "985556f07b723e3d51be669d6d8182afc68f7c0efeb579f31d4bdb52f931895b",
+    "rust-std-1.61.0-x86_64-apple-darwin.tar.gz": "cbd76787224916cd16c11b9b0d506a479413b6384525fb5c3bdd92fe5b2c0806",
+    "rust-std-1.61.0-x86_64-apple-darwin.tar.xz": "c01ff5b433b17858a1fb648f3c5a76ef29b2437360d81c20cf4442543f20d39b",
+    "rust-std-1.61.0-x86_64-pc-windows-msvc.tar.gz": "8d93cd3e3792054ed5cacae601fa003106ce508420e5f78ae759c405255da15e",
+    "rust-std-1.61.0-x86_64-pc-windows-msvc.tar.xz": "9212d90983ef22b1670c0b8c7179cfd68eafe875fefc62afbf026867c022e338",
+    "rust-std-1.61.0-x86_64-unknown-freebsd.tar.gz": "2ab4e71a0e0f65fa41df203073e7dbd67368e6e774ef2cf01b3a77b3d001478b",
+    "rust-std-1.61.0-x86_64-unknown-freebsd.tar.xz": "ee35d9703c8c3857ef1ba75809e207e8365941e781f2f91fffad4c7dcbd22383",
+    "rust-std-1.61.0-x86_64-unknown-linux-gnu.tar.gz": "27383bf7b39d2ff1298fc0dfcd70ac70e1c01e70d7d0c60a2002c266a25b2015",
+    "rust-std-1.61.0-x86_64-unknown-linux-gnu.tar.xz": "270b07aa5f2de52255a117e1e587138d77375ce0d09a1d7fead085f29b3977e9",
+    "rust-std-1.61.0-x86_64-unknown-linux-musl.tar.gz": "fb41f74af65bb86626ae9b641167f82cfd8c9f17f470b0174b3eb11ba651fe7c",
+    "rust-std-1.61.0-x86_64-unknown-linux-musl.tar.xz": "1f4f2e4c5dd0f9b0dac7c8888f4a49ef16a6fe8992f39895823d2a442f0fe408",
+    "rust-std-1.62.0-aarch64-apple-darwin.tar.gz": "49447cf8f6c9ceb27626a860adecdaf912ab14f3f93a1f12007d2f60aea8174e",
+    "rust-std-1.62.0-aarch64-apple-darwin.tar.xz": "8bd3a2c75d954cf81ec0a86e1f331bc2d87c1307d33be2b0bd4cc5daea12fb62",
+    "rust-std-1.62.0-aarch64-unknown-linux-gnu.tar.gz": "3bffcbf76689f8ae6d00d5c115515eb9363a3b6c2cc1dfd8ed397bba2fda5f78",
+    "rust-std-1.62.0-aarch64-unknown-linux-gnu.tar.xz": "dd5df8a92af3e5d49a1122b9561821ebd72a9317884a37ecddae041e652a7563",
+    "rust-std-1.62.0-aarch64-unknown-linux-musl.tar.gz": "9f21aa1992429bee75437532dc61de6bfdd38c18169f9bddb8eb9eefa8576648",
+    "rust-std-1.62.0-aarch64-unknown-linux-musl.tar.xz": "8098164090a4625f5d7caebce3475b50424689f5ca849cecfc341ce6b7f569e1",
+    "rust-std-1.62.0-wasm32-unknown-unknown.tar.gz": "b6373e4d87eb8339fce915243117ff243093acaa91ce08f25e0f65520999854e",
+    "rust-std-1.62.0-wasm32-unknown-unknown.tar.xz": "80827b5ffd3036dd0e2a7115fb40df62b8fb64b2937455b19b8a8c3639d020e6",
+    "rust-std-1.62.0-wasm32-wasi.tar.gz": "d7f8a75dfef2a363fa294d149082d058f24f42b4be541657c9503433736958ca",
+    "rust-std-1.62.0-wasm32-wasi.tar.xz": "95e9e41c9009490b9d4934b49a0faa979c4048c75e504fae00c2da506b1bd085",
+    "rust-std-1.62.0-x86_64-apple-darwin.tar.gz": "426707e7f6e37f94266a5a4e4488c5c75dbe5385e9a1b6b1eb02f709e6ed7bb0",
+    "rust-std-1.62.0-x86_64-apple-darwin.tar.xz": "599cc7766a5b46d157bc2e00771822310925221e673b4fba137731cb209a140c",
+    "rust-std-1.62.0-x86_64-pc-windows-msvc.tar.gz": "eb7be417576ae9d95bf3e5bf5973fc06509005f2aa61173baf0e62bf8b7df4f6",
+    "rust-std-1.62.0-x86_64-pc-windows-msvc.tar.xz": "e00f96ec3f88fb39ac1bd17840a2ac1592df30cdf7f8c277cfb36596ebd7fd5f",
+    "rust-std-1.62.0-x86_64-unknown-freebsd.tar.gz": "cf94f19a5ffd8ec1817abf80c16a17853947bd48bf2cec88370f45e9dec24d1b",
+    "rust-std-1.62.0-x86_64-unknown-freebsd.tar.xz": "834774bbe9126256cd8e9c8e1560305735e50e4d1cea9708eaf225011df0cc3c",
+    "rust-std-1.62.0-x86_64-unknown-linux-gnu.tar.gz": "80c3a88c8a972d20b2ac59adc789495c508d6b70d1fad2aa12e419ab683638dc",
+    "rust-std-1.62.0-x86_64-unknown-linux-gnu.tar.xz": "addfae87b6b1b521d98a50fdc5120990888a51bb397100062e9c558267c67c77",
+    "rust-std-1.62.0-x86_64-unknown-linux-musl.tar.gz": "44f3efb98179a2482ace8a5a126a1f2f58e4f649d35bac1760515af47bfb2d3d",
+    "rust-std-1.62.0-x86_64-unknown-linux-musl.tar.xz": "1280847d3026276d0c511fb42d81bf8c39f01b87bb19bda4248386e35b86aed0",
+    "rust-std-1.62.1-aarch64-apple-darwin.tar.gz": "02dbd6cac8f1a3c7e08c5b2818598ac22f48c09b4d419d7534d8f1780fe36e99",
+    "rust-std-1.62.1-aarch64-apple-darwin.tar.xz": "93573f03b9dfba038f67cba659eda4b6e17a51fe53a089a1dd4ebcad53553c45",
+    "rust-std-1.62.1-aarch64-unknown-linux-gnu.tar.gz": "6af6bac7a3ae1b2e1b9153d5d0bed124122daf8e6a8e90440701cb199c2c95d2",
+    "rust-std-1.62.1-aarch64-unknown-linux-gnu.tar.xz": "9b3caeba947cd6d68ee45cadd6148d781bddb596d3a4addf2b68d0d1149adf1c",
+    "rust-std-1.62.1-aarch64-unknown-linux-musl.tar.gz": "ef305007ff13cefabb08a6bc69751fdc25a453fa54aaf535cfda21d8ad86426a",
+    "rust-std-1.62.1-aarch64-unknown-linux-musl.tar.xz": "4af7045d381f9eedd01ced7625c4062598e9f7cbf97c089e47a1b718c10c246b",
+    "rust-std-1.62.1-wasm32-unknown-unknown.tar.gz": "2720a4d88a4940c9c73be36f20c95c87ffd79ae1a47c5e8519a6a95e7a1f0750",
+    "rust-std-1.62.1-wasm32-unknown-unknown.tar.xz": "b7e4d9ebf2c4a224808ccbfe1298ae41ef7b2a901c8940b7ec62bbe077077173",
+    "rust-std-1.62.1-wasm32-wasi.tar.gz": "1b19789de33d8a35c87b68bf8007da6ec99de132a82dbbe6c4a0fb0e2b3f91ac",
+    "rust-std-1.62.1-wasm32-wasi.tar.xz": "5cf8b3681dfa9e3dd06d6c77942e034dfcc979242d6f8a691c6054b99b39bdf5",
+    "rust-std-1.62.1-x86_64-apple-darwin.tar.gz": "c8597ca0924adbdc804014f3a39ffda7c7f98fba4c3b4095a8e67f530f7d6299",
+    "rust-std-1.62.1-x86_64-apple-darwin.tar.xz": "621d7336bf019363f5eb31d425c93f7d4f2fe8fe22cd21521586dbe8c79d67ec",
+    "rust-std-1.62.1-x86_64-pc-windows-msvc.tar.gz": "7b1c7a6f51b958b76e5fd4e9221527ef559c40832b797fe66cc36e797238c22c",
+    "rust-std-1.62.1-x86_64-pc-windows-msvc.tar.xz": "554ab57c234d25a2b3fc13b1b72c5fea767a817becf86b55b64539400ae78b05",
+    "rust-std-1.62.1-x86_64-unknown-freebsd.tar.gz": "04f1d52ecafba78750d384d720a6ee9c3dad2e8fb0a16f37cbd69f5b28fc8da2",
+    "rust-std-1.62.1-x86_64-unknown-freebsd.tar.xz": "dd4e64380ff903f2cb06fcd8c285efc65a2bffd2b417a5108310218e62d42dd3",
+    "rust-std-1.62.1-x86_64-unknown-linux-gnu.tar.gz": "564e5afc7151826190f8b31ed839fc305469158967ffe907d4c6e712a281ff5f",
+    "rust-std-1.62.1-x86_64-unknown-linux-gnu.tar.xz": "431110528b25c0eeff47304ebedc423fa8051e995b35cfedce880038a52b23a4",
+    "rust-std-1.62.1-x86_64-unknown-linux-musl.tar.gz": "e4adac8cb3c49241f7c0b61b2e0eca70abe0b3e4786182654f7ba8f33027c177",
+    "rust-std-1.62.1-x86_64-unknown-linux-musl.tar.xz": "1d286fceccd0370b13a0721bd1e164f5dcad0c0c4f3345af2fe88889583d2c8e",
+    "rustc-1.26.0-aarch64-unknown-linux-gnu.tar.gz": "ddddaddb585b95d81854171ac4e02d07790505853cee3034f199c8b7897f32e2",
+    "rustc-1.26.0-aarch64-unknown-linux-gnu.tar.xz": "859daf94bd0f9c14aa58af41c30b5105c49f28860bcebba3ddcd9699813954cb",
+    "rustc-1.26.0-x86_64-apple-darwin.tar.gz": "5cb67314656d16cf2a1bdc84213aaaf6afdb5811825c7afba916e2d42d3d641f",
+    "rustc-1.26.0-x86_64-apple-darwin.tar.xz": "0a34d9c744f5d0f1e15a931c6091a489e27b3669e24d2cec33bfc4ea295604b5",
+    "rustc-1.26.0-x86_64-pc-windows-msvc.tar.gz": "427ae4a43a901be288ff3a4dc85d3a14f7e95108cfdaae63e8dbb4a227e07cdd",
+    "rustc-1.26.0-x86_64-pc-windows-msvc.tar.xz": "8af095ac8553cf1d2cb27e4ab7833666cfa3394149b6df52f409faa0edb37636",
+    "rustc-1.26.0-x86_64-unknown-freebsd.tar.gz": "9499ce5b68d631f8345c387e1f59b21892d97e0acb5650deb61a34719310bd38",
+    "rustc-1.26.0-x86_64-unknown-freebsd.tar.xz": "e799cfdf3867aaa6740903c99f61c14f1c9cafc1bbd57a4113bd9d9b5a9773ba",
+    "rustc-1.26.0-x86_64-unknown-linux-gnu.tar.gz": "7ca9a30010602aaf2244c376a3cc5baa89429d54da17b8ba1cb0cdfdc846cc61",
+    "rustc-1.26.0-x86_64-unknown-linux-gnu.tar.xz": "58d2e6c167c0a7d5fb4f76cc57ce65bd08c93e34bbfb97177523c9db49468a9a",
+    "rustc-1.26.1-aarch64-unknown-linux-gnu.tar.gz": "7a06bd5312cbe8bb19e526b4c9ab04de1628019815a566ce0ff9401515bc2c04",
+    "rustc-1.26.1-aarch64-unknown-linux-gnu.tar.xz": "754d12eb5680e750a919504ca1028c9a5917f410c5c5799c1946c3a01726d423",
+    "rustc-1.26.1-x86_64-apple-darwin.tar.gz": "e5f4291c3709b170fbeb17fab7fae50fe0c626dbdc5c42ddb1f342ea03acbad4",
+    "rustc-1.26.1-x86_64-apple-darwin.tar.xz": "b252eb43238afa260cdb67e1d72b32a5194b45aed1422fac0a93cf7edc41925a",
+    "rustc-1.26.1-x86_64-pc-windows-msvc.tar.gz": "e84dca395837aa24b4ea87d46d06a333c2e87d0be5fc5259476a95fbcb05accc",
+    "rustc-1.26.1-x86_64-pc-windows-msvc.tar.xz": "16be234ff02b7e0643fc4b7275168e0f58cc3fc452ac69e3fcf1430c6ce51927",
+    "rustc-1.26.1-x86_64-unknown-freebsd.tar.gz": "dc3dc36010d73349152e6158522e82830fda173007b9299b0a947c90769c54ff",
+    "rustc-1.26.1-x86_64-unknown-freebsd.tar.xz": "24baa5d15b20a8355901afb9ecf3b4742ce62ab7959a3ec5149e03a8200578c2",
+    "rustc-1.26.1-x86_64-unknown-linux-gnu.tar.gz": "45bc1c30e0c473c42889f22b182ec6f0b0fc3be0825e1607c64933592486eb2a",
+    "rustc-1.26.1-x86_64-unknown-linux-gnu.tar.xz": "5736225bd53f9955801a19c872a937a2ab2b7765499761d72801758b3b9ade30",
+    "rustc-1.26.2-aarch64-unknown-linux-gnu.tar.gz": "b09fea72e259811fcbc6aade942329bc4588356470765987ee37d6108a82f7b6",
+    "rustc-1.26.2-aarch64-unknown-linux-gnu.tar.xz": "a70793b101aebcdd528072cb4b3590a3ef651cc15642c4d031e933653e7800c3",
+    "rustc-1.26.2-x86_64-apple-darwin.tar.gz": "5b0a3d94a4fa76ed28859123e35c09a91d7eb8ff65f40ec4c50dfa56ffed8ae5",
+    "rustc-1.26.2-x86_64-apple-darwin.tar.xz": "1a4ecdc1fd15dcd91d40b6a94ee76db969fc093fd56fbeb749271cf14942fa28",
+    "rustc-1.26.2-x86_64-pc-windows-msvc.tar.gz": "15eb657747a86a4481501bb21e2dbcf56a06c0beea00e8677c86ef74b8812576",
+    "rustc-1.26.2-x86_64-pc-windows-msvc.tar.xz": "b2a75bff1972e23791459ddf1e15981b0d54bc29137e14cfb3f3455ad1e0284e",
+    "rustc-1.26.2-x86_64-unknown-freebsd.tar.gz": "48f20a8dc6bc54c90aae685d0c3fa2caf3677f1c4a4d0c53aee9d15588bd0735",
+    "rustc-1.26.2-x86_64-unknown-freebsd.tar.xz": "fc7d1a5a1573e7ef6e70a99b6eafb7c079cfa17ba5fd39370f58612a14b9341f",
+    "rustc-1.26.2-x86_64-unknown-linux-gnu.tar.gz": "1ebdafe52b581a63cea217a036fd6e77706d2715ae9cfe10a8c715d753326004",
+    "rustc-1.26.2-x86_64-unknown-linux-gnu.tar.xz": "ab750f32e13ca1e431df6e382972ddbc4a63ce2deedfc4eb2fbd9f70a4327230",
+    "rustc-1.27.0-aarch64-unknown-linux-gnu.tar.gz": "b58c0373df43623adcc990d36190ee157f46f6fba650d0242632f3df2dfbc425",
+    "rustc-1.27.0-aarch64-unknown-linux-gnu.tar.xz": "de90185473d5ea52dbc7a2f1e8815ba0a78ee9d122f9951f8e03e590e50619eb",
+    "rustc-1.27.0-x86_64-apple-darwin.tar.gz": "0b00c6971ef524f68b911f621d199e60c339c390b18e12700d55e012b62aa90c",
+    "rustc-1.27.0-x86_64-apple-darwin.tar.xz": "d038bcf10c56af570261feb3a7badf521530c185b73598f26e342aa1b314b0bd",
+    "rustc-1.27.0-x86_64-pc-windows-msvc.tar.gz": "22eeac4f4b4d91c28cf18c6a4a8b477091e6661e3e827c0b32355d52e634a517",
+    "rustc-1.27.0-x86_64-pc-windows-msvc.tar.xz": "eb727446a12d39dd1c4a831701d7a99ec62258aabdb2762fc8bd23dfb60a8546",
+    "rustc-1.27.0-x86_64-unknown-freebsd.tar.gz": "24c193213450ffacffebdd1413d77fc3c1ed00049cf1ede2d0f3f370dd86b462",
+    "rustc-1.27.0-x86_64-unknown-freebsd.tar.xz": "14d298640f0676c89a651bada2bb1a568f2401873599f71bb0c0ef98c7d13234",
+    "rustc-1.27.0-x86_64-unknown-linux-gnu.tar.gz": "29f399a1a208ea3f27f21e57f2d832e9d801c397a986aaea17e3a2ddeded6c3c",
+    "rustc-1.27.0-x86_64-unknown-linux-gnu.tar.xz": "85e1f29d83a22cb1758e5361676ecce273db9ceba5cf473d920890cc3708e981",
+    "rustc-1.27.1-aarch64-unknown-linux-gnu.tar.gz": "c48d19ff5474ce75ebbb97e1b26ca8dc23d38f635ae7a3e21b8a4139df5cfb8e",
+    "rustc-1.27.1-aarch64-unknown-linux-gnu.tar.xz": "d439b48d80fac05bb3cfe54f2d6e58fb9554fbf3ba5470955bdcf9f94cf99f3c",
+    "rustc-1.27.1-x86_64-apple-darwin.tar.gz": "747f616e07e5da9323a21c1cf9d76b53bb46094a68223d461a7333f26c714f19",
+    "rustc-1.27.1-x86_64-apple-darwin.tar.xz": "d5fbb6be167f0493a94c310d70a8863fac3e4e4578f0401d02334af3bd7778d9",
+    "rustc-1.27.1-x86_64-pc-windows-msvc.tar.gz": "76abfd523f876516e589f62a83eaaa6e55496745e32f2e9f3f87aca55da3e8b8",
+    "rustc-1.27.1-x86_64-pc-windows-msvc.tar.xz": "f03afefbfcae245fbf45eb76dd88960e6f790d015b20ad45f8b170a9b0f6e62a",
+    "rustc-1.27.1-x86_64-unknown-freebsd.tar.gz": "9b199c21094f996fd9d4b620a5ff2c4bc5b8dab13e96bdf7c113291f601ec944",
+    "rustc-1.27.1-x86_64-unknown-freebsd.tar.xz": "506b92f763ce9d0feae49804e581237145cfc5aac96792134cfc20d8224f498d",
+    "rustc-1.27.1-x86_64-unknown-linux-gnu.tar.gz": "a6bf6205b345b854d705d0028a4e7161a0f5b209e464130e7d135fa01a296dc1",
+    "rustc-1.27.1-x86_64-unknown-linux-gnu.tar.xz": "d4c45e15d4ffb150f3eeef1fa2945a5ae541ab791f9464e9a4dcccba77bdf9c7",
+    "rustc-1.27.2-aarch64-unknown-linux-gnu.tar.gz": "c1a5ddc6e40be5eef7afad8c126c6f426d07eb1a297902c7ef871279fdbeea49",
+    "rustc-1.27.2-aarch64-unknown-linux-gnu.tar.xz": "27e0f00de24321b6200b66fa70ccec0e2f71126ffdd2ada50089a5e7d3bc2ab1",
+    "rustc-1.27.2-x86_64-apple-darwin.tar.gz": "b5c5edd2094afd0a92ad776dbd12cb6ee37800b940437dece10229ccacd1f561",
+    "rustc-1.27.2-x86_64-apple-darwin.tar.xz": "21d8cd0e2f73d45df8e8f29f0f6b7f1ff2e32c6adf85768958fd1382f6598073",
+    "rustc-1.27.2-x86_64-pc-windows-msvc.tar.gz": "c00dde7df7475340f5574b09c86d0e19f6707f838bf95d2ff463a8f4d4d76d33",
+    "rustc-1.27.2-x86_64-pc-windows-msvc.tar.xz": "80e3ff138915dc9f1eec4b437351884ff566522525483c96486a4bfd3f0bb837",
+    "rustc-1.27.2-x86_64-unknown-freebsd.tar.gz": "66d739632574fa52e82b40aca0eb4cef7a38047ed67cd6a240d8798a3cf9b6a6",
+    "rustc-1.27.2-x86_64-unknown-freebsd.tar.xz": "f0af1185b47da1e4aaad286444ee4c17cea5632585d78bce65e054d41912b1ec",
+    "rustc-1.27.2-x86_64-unknown-linux-gnu.tar.gz": "ec3efc17ddbe6625840957049e15ebae960f447c8e8feb7da40c28dd6adf655f",
+    "rustc-1.27.2-x86_64-unknown-linux-gnu.tar.xz": "927f88b5362e4b601caf619f64d609a88c03852fa505991c08c5f661fe71d7ac",
+    "rustc-1.28.0-aarch64-unknown-linux-gnu.tar.gz": "09d1fa08d7403495ca07565eaabfcbe6703e842b765a68d5110cf4e64e988476",
+    "rustc-1.28.0-aarch64-unknown-linux-gnu.tar.xz": "9a8743b219e0558963f75991af96d6427a9bcb896f4fe1bd7c0bd96e150c7b09",
+    "rustc-1.28.0-x86_64-apple-darwin.tar.gz": "10a5bf35177508c72050149663ff679a770eafa8557c6be0052603ca1267ae4d",
+    "rustc-1.28.0-x86_64-apple-darwin.tar.xz": "51bde784a33d2a445a8116315893f067ad37da522aa53c4c1e4ce7b2ae5c9ff0",
+    "rustc-1.28.0-x86_64-pc-windows-msvc.tar.gz": "39871017768fe779dbffaaff8696baf0788bb9c4d6c4caa3d2564e1153ab2199",
+    "rustc-1.28.0-x86_64-pc-windows-msvc.tar.xz": "e00530e378f4f960911615e8c366601b5babae1707bdc8b32d7dd076479407e6",
+    "rustc-1.28.0-x86_64-unknown-freebsd.tar.gz": "5eeaa17844f87e59aab821dc98dd15a920df0d1d7da3ef5808d2c586331c92a7",
+    "rustc-1.28.0-x86_64-unknown-freebsd.tar.xz": "c9083cf897611ea671340c5124d65aaa68ead46076e95af4cf710aa0707f64bf",
+    "rustc-1.28.0-x86_64-unknown-linux-gnu.tar.gz": "008bb3d714544bc991594b29a98a154441914c4771007130361bbadfb54143d0",
+    "rustc-1.28.0-x86_64-unknown-linux-gnu.tar.xz": "193f5e18e15152c26d1b09b97ee72f334a0e9ef8f0ba05187a3f20dc02443c4f",
+    "rustc-1.29.0-aarch64-unknown-linux-gnu.tar.gz": "c7480c0b98ae84151ffa8cadcb06d1ed2a11a755b6619ac1b89e7c886e98b7ff",
+    "rustc-1.29.0-aarch64-unknown-linux-gnu.tar.xz": "00f3a2380de741fbada38ad8f25945152029ebfc30efc6c6a4de12d7463f3cc4",
+    "rustc-1.29.0-x86_64-apple-darwin.tar.gz": "3462ba7e841485f93251762ce0b36a3922830a1249e5d79d6d010ceb43e4ee3f",
+    "rustc-1.29.0-x86_64-apple-darwin.tar.xz": "15ecaefae6665ae2160f5dee9bebd5cbb2b2be81853de2b00acba8fbcaaae6ba",
+    "rustc-1.29.0-x86_64-pc-windows-msvc.tar.gz": "b27c38cb60092e9cac8afc4ad760349821e6b068d986e13ad46233b9676ab35e",
+    "rustc-1.29.0-x86_64-pc-windows-msvc.tar.xz": "10b2670a424748e860160de4391f44de7dfaf9dcbf2d9fdeff2a97cad758b92d",
+    "rustc-1.29.0-x86_64-unknown-freebsd.tar.gz": "38f30c96f0fa7ebfe94cd2db57e9b99961feca0a09045dbc1e955404b5d7f40a",
+    "rustc-1.29.0-x86_64-unknown-freebsd.tar.xz": "6785925415c8e6bc280c02af76057d4e75a3972eab02c26adaf2ab834ecf13a4",
+    "rustc-1.29.0-x86_64-unknown-linux-gnu.tar.gz": "229c51d51efc239e6eb9b428795bb7f57309f11287705dcba4877d5e220102a0",
+    "rustc-1.29.0-x86_64-unknown-linux-gnu.tar.xz": "3cb6b99c5d2efae5d005fe9fa75086e2723be2eb46653712c114c792bb7d2625",
+    "rustc-1.29.1-aarch64-unknown-linux-gnu.tar.gz": "784ea61ff852225be622141600c79621456f1ad9f9becdf7070eb0217b8635aa",
+    "rustc-1.29.1-aarch64-unknown-linux-gnu.tar.xz": "26094bf08c1f4154cb7b7c469430f25212b25690dc97aa688f2f35866a72feb4",
+    "rustc-1.29.1-x86_64-apple-darwin.tar.gz": "64b86c923786dfafe8bbb5fcbef0d854132f29f0bf635830cd2d95ff225d2317",
+    "rustc-1.29.1-x86_64-apple-darwin.tar.xz": "3f7289db7a5c64f96c4debb25885927ecfa5a98c8825e1874cc9a7da547e9e3e",
+    "rustc-1.29.1-x86_64-pc-windows-msvc.tar.gz": "2675bf444df8fe900b84098917db3e765c87ad3c812ef2a818c7e622d77db457",
+    "rustc-1.29.1-x86_64-pc-windows-msvc.tar.xz": "f84797169e0ec6e7ddd08f67c5bfd5431eb299165a0db7c06eaa7b620d538d23",
+    "rustc-1.29.1-x86_64-unknown-freebsd.tar.gz": "ed9b2ccbfc6028ce2c73105cebebdb9f2e2332018c687951639176358bfed9a2",
+    "rustc-1.29.1-x86_64-unknown-freebsd.tar.xz": "9bc0633075fee0e56d5306cebea40a1805594eb182d8be57161d2cba159827ba",
+    "rustc-1.29.1-x86_64-unknown-linux-gnu.tar.gz": "b99324394ba20bd12efa9d30dad72b10747bd075f97c7a9fd0ce3f9394383fa7",
+    "rustc-1.29.1-x86_64-unknown-linux-gnu.tar.xz": "b6e35469543f059c02d68f4271d5ada6fb1ec20d9c0f5b4edd41b3ab4958dfe4",
+    "rustc-1.29.2-aarch64-unknown-linux-gnu.tar.gz": "54a8c54f04dec72d7f8655ce1c3037dc23ded2f9ada26e7ea77aa45fc8b0d0c5",
+    "rustc-1.29.2-aarch64-unknown-linux-gnu.tar.xz": "46e4c22e991f1fcc1518622e3b5db57d7c7bc93cbf1faf0734460d864edf35f3",
+    "rustc-1.29.2-x86_64-apple-darwin.tar.gz": "d9c0dd8127ed632e27d751f051bca933578317ffe891e39155ae721bc1d3ec05",
+    "rustc-1.29.2-x86_64-apple-darwin.tar.xz": "9b7871d47ce1120ad791373d0972caee114a00021f112f2829ade69e43149cae",
+    "rustc-1.29.2-x86_64-pc-windows-msvc.tar.gz": "53dcf97ed9461784d713c5a413df7e8e5aa4c9158a4d5921a038b77b17120a17",
+    "rustc-1.29.2-x86_64-pc-windows-msvc.tar.xz": "934815535cdceca8d055c2a2630206c6049cd044266558ed769dfdaab8781c3f",
+    "rustc-1.29.2-x86_64-unknown-freebsd.tar.gz": "94fba7a7b88ca86c037a48376b7e09bb4ca66e1268fc8d664796cdbdee97c0fa",
+    "rustc-1.29.2-x86_64-unknown-freebsd.tar.xz": "e62e706aa52df221d976219ee2e7ac7afbf7affe93c75e9cbeb50cb61588be48",
+    "rustc-1.29.2-x86_64-unknown-linux-gnu.tar.gz": "b04146b09edc4bad0de7c8fa1a5a2aa4416d365c03c5962b8a5b26c7047b7cc9",
+    "rustc-1.29.2-x86_64-unknown-linux-gnu.tar.xz": "b0ea41cd20caf9af62394601b09d2c8b12814293f3cc1247a8c61fb672477499",
+    "rustc-1.30.0-aarch64-unknown-linux-gnu.tar.gz": "ccff6c6d8386655955265f586862314dd3b646bbeccd1369877f4343b1960a53",
+    "rustc-1.30.0-aarch64-unknown-linux-gnu.tar.xz": "ab3e74b2fb9722461c43b0ff17cbd5673dde2c79cfedd61ef1ed9350ac20614b",
+    "rustc-1.30.0-x86_64-apple-darwin.tar.gz": "d4fcbc61c7323e6fa1001ae268c5db1693ff07e5ef1ac25907138a2ee7bd8faf",
+    "rustc-1.30.0-x86_64-apple-darwin.tar.xz": "ca5fc1f48c5f95fa92441c9d1f5fe8186dd8f6e16276fc55181e22398981ce0c",
+    "rustc-1.30.0-x86_64-pc-windows-msvc.tar.gz": "2d2d1a51bb15794920a2f0cccf7fd2c8bfb037d00975e799ff4a4ac3b83032ce",
+    "rustc-1.30.0-x86_64-pc-windows-msvc.tar.xz": "92cc8e26f4bea9b8d6dbfb16d3da8ae33146117d3cb72e5a87a28a8a72947c7b",
+    "rustc-1.30.0-x86_64-unknown-freebsd.tar.gz": "68a74949e34118406673cf8cc0098b011907c840890e0640aa3b145ce91c521d",
+    "rustc-1.30.0-x86_64-unknown-freebsd.tar.xz": "99a2876c053b63e2e0b4d8aeffb18e0e036ccbbc93987f2e3d0aeecab429c751",
+    "rustc-1.30.0-x86_64-unknown-linux-gnu.tar.gz": "cc45058e9963d33ca28220e752d9e360b7e05f17e34284f5f8197738c3a88444",
+    "rustc-1.30.0-x86_64-unknown-linux-gnu.tar.xz": "97b3fd6978d1321b7c93d61cd3b9823d2973bfacaeefe5e239c376d317efdf6c",
+    "rustc-1.30.1-aarch64-unknown-linux-gnu.tar.gz": "f3569c0a74f07aa2e56bf93c9f2aaddf7434ce17f85d6d6ff854fb9245888bcf",
+    "rustc-1.30.1-aarch64-unknown-linux-gnu.tar.xz": "4215f1382923325f17fc66356f308c8e997b3a9dd495693d43eb6e76462c6133",
+    "rustc-1.30.1-x86_64-apple-darwin.tar.gz": "fd8ca09595e9d686aef9e3b94259500b482cf7a01de167a8c72a4f8d19a604f3",
+    "rustc-1.30.1-x86_64-apple-darwin.tar.xz": "bd19f5dcc0f623872b1e81ed1a40d46c21be9266c3bcbf8cf396671b290ac0f9",
+    "rustc-1.30.1-x86_64-pc-windows-msvc.tar.gz": "8ad1551132de8c766d2d7c66d9bb93a959ebbfa7d86c47f196227fea914583dd",
+    "rustc-1.30.1-x86_64-pc-windows-msvc.tar.xz": "5f5e9c6e61125deed2ed099dc9bdd63a7a7e1ad766707fcbc43bc0588d3eb15b",
+    "rustc-1.30.1-x86_64-unknown-freebsd.tar.gz": "2f79e386bed201eb9b6ffa58240742617ec6006accb559dab7b6424f33b65b5f",
+    "rustc-1.30.1-x86_64-unknown-freebsd.tar.xz": "dd65c326248449c4049b21ed6cf69cd3c436c88ca30593b259fb869e52823b55",
+    "rustc-1.30.1-x86_64-unknown-linux-gnu.tar.gz": "d84de208499b59e4a3c074f9f3f2fcbb26fb20d6bfd19262e6d5f4181ddbe34d",
+    "rustc-1.30.1-x86_64-unknown-linux-gnu.tar.xz": "11c639c3d86cdc8c7f40398d0cec6858ca8621becd400a0dd759fc8ab58e62d6",
+    "rustc-1.31.0-aarch64-unknown-linux-gnu.tar.gz": "1e480d8cadceff39ad39d30fe874bfd485386c98842f16423310cb2ada1923c0",
+    "rustc-1.31.0-aarch64-unknown-linux-gnu.tar.xz": "417534a64da0b39627ca762d214d0680a0542ab0f5ffb231b47896810ef7efb5",
+    "rustc-1.31.0-x86_64-apple-darwin.tar.gz": "250fd3f3aba7d38c4af9682a12a37c733dbd6dde127665b0f493551e6c4aea8b",
+    "rustc-1.31.0-x86_64-apple-darwin.tar.xz": "a0bfa1e7f046ab9d78247c7aaad16533210b2cff731ee7908e543c8864faceb4",
+    "rustc-1.31.0-x86_64-pc-windows-msvc.tar.gz": "418abc285870ab4d85d53769eac229cd66b7fc7cdaa6e73699530e88ee5dfaf4",
+    "rustc-1.31.0-x86_64-pc-windows-msvc.tar.xz": "86d20e6a5766f0e404d649fe1addf2785157894c4e379e3f615001b20844d59f",
+    "rustc-1.31.0-x86_64-unknown-freebsd.tar.gz": "9ec40454e22e3494b9859c03e37e8851077f897845bcf838d69d4393900e7b33",
+    "rustc-1.31.0-x86_64-unknown-freebsd.tar.xz": "2dff193a31ca6feae7ce9534c94eadada702e654f9f8cf22813e5e0befce4013",
+    "rustc-1.31.0-x86_64-unknown-linux-gnu.tar.gz": "5c4581f0fc05f0f5076db6231b0c1a4d27eb61c0b36bfb42d97243ad8f4e43a0",
+    "rustc-1.31.0-x86_64-unknown-linux-gnu.tar.xz": "9a370c31e3d3c9318136a7c5c497619f15200d797688d3de2c2d36ba9458d9c1",
+    "rustc-1.31.1-aarch64-unknown-linux-gnu.tar.gz": "315ea9c981e4320a557f6c75b58242c0598a90316f610b4dfef5d06e82b927f2",
+    "rustc-1.31.1-aarch64-unknown-linux-gnu.tar.xz": "5d1a2038cb793c04d507c63450670ce02671021d74fcb4c39a6fd793fc61c927",
+    "rustc-1.31.1-x86_64-apple-darwin.tar.gz": "e3f9c5ccd0e6e09da8012f30ee9a1880efebc0c039cc1f3866cf50c984be16a7",
+    "rustc-1.31.1-x86_64-apple-darwin.tar.xz": "b71f573bc2bdc3510a1a99e68f04e321701d88ba65fd624e2c5cfd885c38b43a",
+    "rustc-1.31.1-x86_64-pc-windows-msvc.tar.gz": "0320b7544de463d4444c6445fd2e23044e28fde1173f614145a72a4bcfc6ccd9",
+    "rustc-1.31.1-x86_64-pc-windows-msvc.tar.xz": "6d283715102d67acba4c5ea4a430441678a9e444eb8dec710cc9d8ab237624a6",
+    "rustc-1.31.1-x86_64-unknown-freebsd.tar.gz": "fb38ad94976c273c0fb95d0b5ba2d1ce90684e58fa06fafc9f8050ba00559f50",
+    "rustc-1.31.1-x86_64-unknown-freebsd.tar.xz": "41ee1aeed5ff6b226d2e6920ac6b347fa0577e1944eb802d46fe01b2a8d1f269",
+    "rustc-1.31.1-x86_64-unknown-linux-gnu.tar.gz": "77d47ce7e27a146e4301f11befd43f3fc5ac195ace0dfc07ac8154f130b057ea",
+    "rustc-1.31.1-x86_64-unknown-linux-gnu.tar.xz": "84d65ea3876a73f674a3ad3e627b273e15c9162f497c09c4d4b119222623e41a",
+    "rustc-1.32.0-aarch64-unknown-linux-gnu.tar.gz": "193cbe67161e20a0bf4eeb8bafeb302f3e61a59ca939a0454fc3fbc76e9524cc",
+    "rustc-1.32.0-aarch64-unknown-linux-gnu.tar.xz": "eb8947bf2f05aa622c5d49e3420502fd84f66d60257b652b30d84d0ef1759f6a",
+    "rustc-1.32.0-x86_64-apple-darwin.tar.gz": "0334c4568f09cae984e53e4a3f4ff207e2bcc50fce13ad32b8eca89f014e5e61",
+    "rustc-1.32.0-x86_64-apple-darwin.tar.xz": "90dce7015d17471487d88136c4d3607f81402d04e38f5cb355e0782c82f6bb91",
+    "rustc-1.32.0-x86_64-pc-windows-msvc.tar.gz": "a7799495d3032c5ad6b5f712f7d7a9538f695c6d8d2e5258c0f7aadac8cea1d4",
+    "rustc-1.32.0-x86_64-pc-windows-msvc.tar.xz": "63ba3c27701881e7f5b733acad4a65033fa92f215e501d3d93e096e806ddf3fb",
+    "rustc-1.32.0-x86_64-unknown-freebsd.tar.gz": "a14a0e288be8ce894a85810151a2eb70fc86afa36e4a5fae4e903c744b888687",
+    "rustc-1.32.0-x86_64-unknown-freebsd.tar.xz": "69243bbfd9db20dcf52074d818ba3e8725cd8dcec86b283a920e76c559ec0b74",
+    "rustc-1.32.0-x86_64-unknown-linux-gnu.tar.gz": "75c31f32e19548c1608611d08b82b87560e02f15caac7b2663a8189a4609977c",
+    "rustc-1.32.0-x86_64-unknown-linux-gnu.tar.xz": "8f553852579fac6cf7c10f77ea842752caa59a79b5c75f5c2126489d14cbbddd",
+    "rustc-1.33.0-aarch64-unknown-linux-gnu.tar.gz": "e23141cc65d1d8e3957a96f3a601bdb7a9d09026ac20396aeaebd2613ea0d08e",
+    "rustc-1.33.0-aarch64-unknown-linux-gnu.tar.xz": "b4264930d8b98838778946d766a311fecc4d394b7e01ec1edd4dc99b5653f23f",
+    "rustc-1.33.0-x86_64-apple-darwin.tar.gz": "ea1f0a95015bbefba9eac5890b12ee2887f464822ab579c8bbc2db3023c6dd08",
+    "rustc-1.33.0-x86_64-apple-darwin.tar.xz": "c6cf3e201a3e600716efba26f97d33d0f250d70c3f9a85a38df2b7550f850ce9",
+    "rustc-1.33.0-x86_64-pc-windows-msvc.tar.gz": "b935a78d072b9ae91ff8ddf9155df95d77fd8a1c6293e39df3c65b18d860320e",
+    "rustc-1.33.0-x86_64-pc-windows-msvc.tar.xz": "a5a761b947f0f8919d1912afd01070d13048870f0dfc98bd844b78734f185de8",
+    "rustc-1.33.0-x86_64-unknown-freebsd.tar.gz": "8bfc7fc50c50294cf4ded35360b41b590180401a0d2e84256f5931c7c1ff35cd",
+    "rustc-1.33.0-x86_64-unknown-freebsd.tar.xz": "8bf10724e5ae2aacb6c7532eaf6bdc56a686eca38bdb58ba51c35c287510849d",
+    "rustc-1.33.0-x86_64-unknown-linux-gnu.tar.gz": "54a342f718b712d8a17fd7878ebd37d22a82ebc70b59c421168cd4153fd04c2b",
+    "rustc-1.33.0-x86_64-unknown-linux-gnu.tar.xz": "57c5ced1a826d34f26e50adf041528dd0000f2a59e8be32d2359386843382ce1",
+    "rustc-1.34.0-aarch64-unknown-linux-gnu.tar.gz": "364328a40c7aa5749be80b13a14466149a559205e34aef3d8823dc2580f55921",
+    "rustc-1.34.0-aarch64-unknown-linux-gnu.tar.xz": "396dddc57bd33697650ef742e37693d3dc4df800b7bf28a278abf79dad58dccb",
+    "rustc-1.34.0-x86_64-apple-darwin.tar.gz": "2044d44f01a8aa7fb3382f35fc839facfde4fc1eb6f951ead42aef954e317088",
+    "rustc-1.34.0-x86_64-apple-darwin.tar.xz": "d51507072ce88f1d15768054bb161c422efccb6ceafd77bd8835367888c91c84",
+    "rustc-1.34.0-x86_64-pc-windows-msvc.tar.gz": "371f9abd2bc615b339dfd606d93e6b4892594fd86084d513e07a9f80ff21a828",
+    "rustc-1.34.0-x86_64-pc-windows-msvc.tar.xz": "0b58c3361ae37d8f2ece888a8096cd73d4218431d0c3811f9a242d72c3485e5c",
+    "rustc-1.34.0-x86_64-unknown-freebsd.tar.gz": "522662f147d0550e4f4f49026b4ebcc5e05a0935fa88acc9b99da5d7435755aa",
+    "rustc-1.34.0-x86_64-unknown-freebsd.tar.xz": "5d398acbda83050e915e834371c83db286adf49464e978e33fe64ad3616042e1",
+    "rustc-1.34.0-x86_64-unknown-linux-gnu.tar.gz": "5852e84dd30e4a552a7cd4d7c0172648d7ffb4d9ac7078871adbb902c183ffc2",
+    "rustc-1.34.0-x86_64-unknown-linux-gnu.tar.xz": "ccbb2580d619ab44e19f193893f4eec9fb703b6f8a929ea7fb25be5ddc3b126d",
+    "rustc-1.35.0-aarch64-unknown-linux-gnu.tar.gz": "dc06d77e6cdc06693d3b87ce473f151c96bda2c1e5dbba8c0354c54990c64fc2",
+    "rustc-1.35.0-aarch64-unknown-linux-gnu.tar.xz": "0127763a0042c2b6d4f1d643f4e322723bd22476e9c04dc2e9911685f635b5a7",
+    "rustc-1.35.0-x86_64-apple-darwin.tar.gz": "5b2fb7581332f349c041860479ffdbfec0eebf87fc3016146836b8868afc3ae5",
+    "rustc-1.35.0-x86_64-apple-darwin.tar.xz": "360b383d959ff780d82beb4a4b3d0b93ecf7ce3aaa6cb2759f7da8e3ab74ea71",
+    "rustc-1.35.0-x86_64-pc-windows-msvc.tar.gz": "df4f94d29d10fde2486d9fac3247a566d99a2b7f97fa6ebd416f308b804f7693",
+    "rustc-1.35.0-x86_64-pc-windows-msvc.tar.xz": "bccefe9eaf530c2dd7c2e5ee29acf1eb6def99cd637ef0f6a5a93a50a172cd20",
+    "rustc-1.35.0-x86_64-unknown-freebsd.tar.gz": "d3b5a6cfa41264e1873287bdb89892a7edc40333d581f468890c68336f50a601",
+    "rustc-1.35.0-x86_64-unknown-freebsd.tar.xz": "df2eb504e3a8886530d4d924578d45168041e6120ea9e03036787d7ed47ef10e",
+    "rustc-1.35.0-x86_64-unknown-linux-gnu.tar.gz": "bb3a07a1f2fdc3eeeee25fc40131d3f05494e3838dfd4e9275475ffc500d7a9e",
+    "rustc-1.35.0-x86_64-unknown-linux-gnu.tar.xz": "5d6dc216ba429ddf3a1657e70f3e5e380549b546fe56de897677a11d72aa4e07",
+    "rustc-1.35.0-x86_64-unknown-linux-musl.tar.gz": "a975395127a2abf727a7c6b6ed2656e90368b46c5e6ccdc53fd50acca3cd3f94",
+    "rustc-1.35.0-x86_64-unknown-linux-musl.tar.xz": "961df84a116c7b1b11eb912d33c8edb233b76980f97983f9ed3989621f9f90c3",
+    "rustc-1.36.0-aarch64-unknown-linux-gnu.tar.gz": "62e40e0677032ae0cd91a7f8b4450dbaaf5223050a05b28a9174802d09691da6",
+    "rustc-1.36.0-aarch64-unknown-linux-gnu.tar.xz": "98ce55b141a5057bee1c0126ddf20824a940104fc57d7350417776768ce533ee",
+    "rustc-1.36.0-x86_64-apple-darwin.tar.gz": "97568272717ffa62dbf4459dff6086e69c808df252a912146e28468412667013",
+    "rustc-1.36.0-x86_64-apple-darwin.tar.xz": "2465f33b66f09d4b16f0aac19179818665db5c92c97770be81bfddbef13db9d8",
+    "rustc-1.36.0-x86_64-pc-windows-msvc.tar.gz": "4c131f68eac74bc20315eda097578c43de2b695445739462a4b273f90a131ffc",
+    "rustc-1.36.0-x86_64-pc-windows-msvc.tar.xz": "0140145950c6c748a78dc240b8259cda9abf86976acdfc7b0a645de5048bf4e5",
+    "rustc-1.36.0-x86_64-unknown-freebsd.tar.gz": "c2dd0cec49b054ed9439762fb31555b8df9a3d81747b194f7d3afbc6d8adb8de",
+    "rustc-1.36.0-x86_64-unknown-freebsd.tar.xz": "10d896f57dd5a0dab4e44e9a94cf46e83a157cd46d904571b8eb8f0308c35fe8",
+    "rustc-1.36.0-x86_64-unknown-linux-gnu.tar.gz": "7c149fa1695b41e8e1edcb95dca199522889f119be99f922741084d50470a9e5",
+    "rustc-1.36.0-x86_64-unknown-linux-gnu.tar.xz": "fff0158da6f5af2a89936dc3e0c361077c06c2983eb310615e02f81ebbde1416",
+    "rustc-1.36.0-x86_64-unknown-linux-musl.tar.gz": "913b7097e13c4e616edb8f83a3a976908c8c12295472f65a5682465145ced552",
+    "rustc-1.36.0-x86_64-unknown-linux-musl.tar.xz": "04c15e34bdfd17136b924baa4f93cfbfe64739964b57f5a13ada8e91f9239076",
+    "rustc-1.37.0-aarch64-unknown-linux-gnu.tar.gz": "721ba21dbe9b350a8c50a4c783c76ba3f6926525480518851dd6ba92ecdb042c",
+    "rustc-1.37.0-aarch64-unknown-linux-gnu.tar.xz": "8e06a483a5764f687db8e352591ab651c7a78e3be06af2d2a4f33d6c9b158c59",
+    "rustc-1.37.0-x86_64-apple-darwin.tar.gz": "00d4d15b4d9a4d188e0db8bbc17cd5f0c3c3a87ad681e80ef15580c0d5bd4ff3",
+    "rustc-1.37.0-x86_64-apple-darwin.tar.xz": "403b1ee63235b6a196a6eb99f315b05ce007558cc7041150251354cfbf734f07",
+    "rustc-1.37.0-x86_64-pc-windows-msvc.tar.gz": "790bdb5b57f397d7481151ad8715f7ac3f32b343efaf2922650f4fc6e374d7d7",
+    "rustc-1.37.0-x86_64-pc-windows-msvc.tar.xz": "923e829d67102e45fc16eeae727a4dad13f7abe6239b99fef0e4a233c7509880",
+    "rustc-1.37.0-x86_64-unknown-freebsd.tar.gz": "a4dd357a0b39abf1ebbe8a0f64973c3b0c5bc527e374c12afe51266279fc1ca6",
+    "rustc-1.37.0-x86_64-unknown-freebsd.tar.xz": "077509f49f3546bef943476387e1a9b22f4a42544841b17e5997900179be35be",
+    "rustc-1.37.0-x86_64-unknown-linux-gnu.tar.gz": "c759b318f333639a45f29c1551ca7ce55b1bf64e0fc3a3357d6b9356885d1626",
+    "rustc-1.37.0-x86_64-unknown-linux-gnu.tar.xz": "7014f34578a0bbfffc09bf53d536e29f4ec37bfc48a579d372a340b4d6763416",
+    "rustc-1.37.0-x86_64-unknown-linux-musl.tar.gz": "1981b67c0cbcaf37f40ee9576d6d1b9a554019e571fc4c49ee9457cf011e0f75",
+    "rustc-1.37.0-x86_64-unknown-linux-musl.tar.xz": "b2edb942f73604973f7281e1d51629f75274ed64394edaba55ea9f35cc3c66de",
+    "rustc-1.38.0-aarch64-unknown-linux-gnu.tar.gz": "0c787eaf01b5779b5a0c12bd0573901cf1b58e5e484ad44c3530b7ed51754d15",
+    "rustc-1.38.0-aarch64-unknown-linux-gnu.tar.xz": "2bbcd0822f54b60b6952a4503eb51389e6da23d3f6ca4ce050688c92f026b6ac",
+    "rustc-1.38.0-x86_64-apple-darwin.tar.gz": "ac34aee5a5f67003b8f7f857ddb1fa68f89a32680a591ab77561282721b75256",
+    "rustc-1.38.0-x86_64-apple-darwin.tar.xz": "96042d7c440a50403f521c9e379e1539128becbbc426cd745659724c9ae63bd8",
+    "rustc-1.38.0-x86_64-pc-windows-msvc.tar.gz": "6e00ee5f34c552c1b9fafec3b7a1330140c820a2ae4bd4213d2c4f135341a88d",
+    "rustc-1.38.0-x86_64-pc-windows-msvc.tar.xz": "b6ba6e09ad4d9b85732e792b6b80efdf19b776ba580d29494803c629dfd71206",
+    "rustc-1.38.0-x86_64-unknown-freebsd.tar.gz": "1d99318bbdc947c6dc375215f0eddcd767348c309811cd141e5d18e17d5aaaa4",
+    "rustc-1.38.0-x86_64-unknown-freebsd.tar.xz": "7609333d9ae4e9e3da182c914f0d312b9463beee77b7c445fad2197b0656bab2",
+    "rustc-1.38.0-x86_64-unknown-linux-gnu.tar.gz": "790a611695fabd12c3a141efa58b3dc5913d749947c1a95d3f5b6eb5476ee612",
+    "rustc-1.38.0-x86_64-unknown-linux-gnu.tar.xz": "0fedde3406cf3367ceb00f493698e6bfc3264bd7f7253c85de7a042b45f873fa",
+    "rustc-1.38.0-x86_64-unknown-linux-musl.tar.gz": "bb0166cbb1d31bcb09d79224e7ac43a80d9448b7199b5392a3852b3ec71840aa",
+    "rustc-1.38.0-x86_64-unknown-linux-musl.tar.xz": "9bc0b51bdfca3ed7b298021e2ec768bd28ea3af138d9dc1854a70e3866f06c0d",
+    "rustc-1.39.0-aarch64-unknown-linux-gnu.tar.gz": "c64fc482404277fdb160a4b593b0be5a1b0c32d985464595015295321d111621",
+    "rustc-1.39.0-aarch64-unknown-linux-gnu.tar.xz": "d12cdc9b0f4a6c77b606fffb749e61f39041f29cdad1a87a2d3986966a72c28d",
+    "rustc-1.39.0-x86_64-apple-darwin.tar.gz": "9347ffb47e936fb44666ada525f8bfb86758a719e7c0330e93e17bbd5f3623be",
+    "rustc-1.39.0-x86_64-apple-darwin.tar.xz": "d597416eed2c71cb5c65a6ffe637d7344d1dc61919a8af6317fa0317038f2c5f",
+    "rustc-1.39.0-x86_64-pc-windows-msvc.tar.gz": "9a94785fdb473079d02f32bded6691322688001dcc16f5bfb582c1d181d3ef67",
+    "rustc-1.39.0-x86_64-pc-windows-msvc.tar.xz": "fc36e1e3a770c66150ede7fa474fec8283e58b7a1259f0cd43d5b0627d37d210",
+    "rustc-1.39.0-x86_64-unknown-freebsd.tar.gz": "3714bf7bd4163a3bfe18291d49acaeda02f4bf2beb9fe36c520d2ecdc29ca031",
+    "rustc-1.39.0-x86_64-unknown-freebsd.tar.xz": "802aa5124f15002ba07b33838f6b8ecb394e3d63d2f9bd2de725c85baf8b8bf5",
+    "rustc-1.39.0-x86_64-unknown-linux-gnu.tar.gz": "333399dbf96dd6b8a9dc9cc56b1cb5d8aac2296b4e4aa857bd59d906d6df6fa1",
+    "rustc-1.39.0-x86_64-unknown-linux-gnu.tar.xz": "5b2a435a4c034615d70cfc383abe9924cbd1ffd4669caa55ce6539f22ed979ed",
+    "rustc-1.39.0-x86_64-unknown-linux-musl.tar.gz": "07a9705dd77c6859ef921389dc6a958a297030e53571fe015163c79aa93d1e43",
+    "rustc-1.39.0-x86_64-unknown-linux-musl.tar.xz": "bd3e2964d171eafc95668f675b521669b89abc32129214bb4c3b2509e4c66247",
+    "rustc-1.40.0-aarch64-unknown-linux-gnu.tar.gz": "8981d500261ecfec93c4b52e8f96a81c705b56ff9317d63e0363d11a72ee09a0",
+    "rustc-1.40.0-aarch64-unknown-linux-gnu.tar.xz": "40619bf6316706e9d8f9d842802e9e00018140ffb3e937d807299b5a28af4536",
+    "rustc-1.40.0-x86_64-apple-darwin.tar.gz": "f45bb00a9a59ca819a8266e9de77f7232f4b704d64f1c45d3870e2db4f646a77",
+    "rustc-1.40.0-x86_64-apple-darwin.tar.xz": "f25ffcefd0700a39c887e444d65cb5e5459cbbbd6cd17dc2082f0cb8f1bff403",
+    "rustc-1.40.0-x86_64-pc-windows-msvc.tar.gz": "16299638792b7bffb63ca20674a7196a33d1fb25e91083b90f8015be010eec19",
+    "rustc-1.40.0-x86_64-pc-windows-msvc.tar.xz": "229be7c97b0f94cb187e8c06e2d96649d08fb6231251242bfbd7fd8ddfe57412",
+    "rustc-1.40.0-x86_64-unknown-freebsd.tar.gz": "65810804d3e4cf8f845978c6226f8e23d77a7ccf35ebafdd5f8dac027627f396",
+    "rustc-1.40.0-x86_64-unknown-freebsd.tar.xz": "031769384fdbf6d53853020bdc7583d6b1e7afaf041179379d53edbf7ba3d178",
+    "rustc-1.40.0-x86_64-unknown-linux-gnu.tar.gz": "5085a26abdc932fd9339aab2078084f9ab654f8298ad9f301611ac41ba8eca19",
+    "rustc-1.40.0-x86_64-unknown-linux-gnu.tar.xz": "b1c00618b7a98156e88b14682508a503284f85748eab23de749a20dcc8847111",
+    "rustc-1.40.0-x86_64-unknown-linux-musl.tar.gz": "acd01559a875b57f6fc7e27beafd8d011f8295c627ab276d814700082088f2ed",
+    "rustc-1.40.0-x86_64-unknown-linux-musl.tar.xz": "769b9e31557fcc0ea2a661f88b679d3dbd62b537807c7b3c75ac6816a1be4fa3",
+    "rustc-1.41.0-aarch64-unknown-linux-gnu.tar.gz": "9d994935f92088c968f520f558a88b140bb7d60e917fc4ad69019e2b830b1db7",
+    "rustc-1.41.0-aarch64-unknown-linux-gnu.tar.xz": "3be313538e776b0406d16aab342fb3a95b0ce26a2acfbd7f897bfc8cac877f13",
+    "rustc-1.41.0-x86_64-apple-darwin.tar.gz": "25ee8865e21007c282cd1f3457c3bf932591337c3044e55ba574fc988bead3ad",
+    "rustc-1.41.0-x86_64-apple-darwin.tar.xz": "88b3db34b3ee045cf87691fdff346cae07d80e273af54b46e9e34b9405ef798d",
+    "rustc-1.41.0-x86_64-pc-windows-msvc.tar.gz": "b338afb534be113f179252f8de29195e201dcd8bf4053b1d5e8eef928c457ca3",
+    "rustc-1.41.0-x86_64-pc-windows-msvc.tar.xz": "f388e7dc49356cdc93efc7f89157c54924ee3ab0297a373b32160ddb48dead92",
+    "rustc-1.41.0-x86_64-unknown-freebsd.tar.gz": "de3386f79a0e261b8f6133dc0d5a7d51b70ad73dba5a14dd30204ac285d04f3a",
+    "rustc-1.41.0-x86_64-unknown-freebsd.tar.xz": "1cbd96a85b6895e5f7fde41711ecc6412a5e50db827f6bea57ab02d41846cbba",
+    "rustc-1.41.0-x86_64-unknown-linux-gnu.tar.gz": "531b4cc77cc25e960aafa2ebaee073c137fceb0004447c6b7274557281c62a6d",
+    "rustc-1.41.0-x86_64-unknown-linux-gnu.tar.xz": "482314411cef6a315c2784eb68729c2c88346e7304f516304bcf42c98ba71ec0",
+    "rustc-1.41.0-x86_64-unknown-linux-musl.tar.gz": "18c0f6d263d3a54a6842e2feab7c90ce5d8e5136b67cedabb98756f029122c8a",
+    "rustc-1.41.0-x86_64-unknown-linux-musl.tar.xz": "99a60002fc0f5dfa88b6a4f61466daeb6357722023955049a4fe27dedda01845",
+    "rustc-1.42.0-aarch64-unknown-linux-gnu.tar.gz": "612c10793852fd0c2e52b30f3d50dd6aef6f8181032b820eddefc93e3bf4d97b",
+    "rustc-1.42.0-aarch64-unknown-linux-gnu.tar.xz": "9d06a74b838df2f55db12280da94e805bc0640034d1c36888036875ec4e5b094",
+    "rustc-1.42.0-x86_64-apple-darwin.tar.gz": "778dea93d7e46261e2c06cadec35b68f9857604f279ce6fbd1b37c1a89634625",
+    "rustc-1.42.0-x86_64-apple-darwin.tar.xz": "00a3a385c88d9622e827836b214c71bb17896d599bb6f7742695ca4f4a42cb6c",
+    "rustc-1.42.0-x86_64-pc-windows-msvc.tar.gz": "d132f99df49cb0d421f6d8948a268d4eddb1ae23e0af2641272438998503708b",
+    "rustc-1.42.0-x86_64-pc-windows-msvc.tar.xz": "b63323a3bf36aa9599f748da13065a94a11d0c42acc857c5f6edde05fca20c05",
+    "rustc-1.42.0-x86_64-unknown-freebsd.tar.gz": "e6e36a7df9886b18cce32752f5ac7a8da6977c6a1878fae696340f3843176fe5",
+    "rustc-1.42.0-x86_64-unknown-freebsd.tar.xz": "a918690e354a194e285830032addad926347148be8ac96170d04556f8a7b0c41",
+    "rustc-1.42.0-x86_64-unknown-linux-gnu.tar.gz": "4242a728b850bf6e74db9a95c68e8ed316fa4813b38e6b8bc296396b5f47ea5a",
+    "rustc-1.42.0-x86_64-unknown-linux-gnu.tar.xz": "3d2e4dccbeec8866c7d1d151abe06526f331ea1dac9f8ae3cbe30ac6568fefb2",
+    "rustc-1.42.0-x86_64-unknown-linux-musl.tar.gz": "60945b79fdf8be51c87967368245380a64d0d331ef1aefa778712f3695028c39",
+    "rustc-1.42.0-x86_64-unknown-linux-musl.tar.xz": "79029296fbd91c19c2ad080a52c62963eb127227c59005645b86b5aa9aa310b8",
+    "rustc-1.43.0-aarch64-unknown-linux-gnu.tar.gz": "99f26a2b4376fc08203d129d65e15f01b2630db40dd2d4d6a7b917df8d512e72",
+    "rustc-1.43.0-aarch64-unknown-linux-gnu.tar.xz": "ecfcc28e58d37008e2d645c120b50bd618764ed975569d2d0567a86516d92133",
+    "rustc-1.43.0-x86_64-apple-darwin.tar.gz": "3723b8194e38d7238262b4cc49762a22037f53f58ab1df199c1d710dad5728a5",
+    "rustc-1.43.0-x86_64-apple-darwin.tar.xz": "139847eb84be840cdde8c493ca701bbb7d2f8b99ff1f573d0f34a2ae3f7989f1",
+    "rustc-1.43.0-x86_64-pc-windows-msvc.tar.gz": "c6d1aa60cf2056c4fb35a5a197fb4e1a42887eb4ad1615b00398524ff78ce74c",
+    "rustc-1.43.0-x86_64-pc-windows-msvc.tar.xz": "b1fccfae06c3b992a4e79ecbf455dbec42d77daed585d21f9b694dccc9158362",
+    "rustc-1.43.0-x86_64-unknown-freebsd.tar.gz": "69d572e80e13da85599557f662ce71909823194c874eea0fe91f82da0958fa68",
+    "rustc-1.43.0-x86_64-unknown-freebsd.tar.xz": "99ad9cb9dc206fb2ba7311c254f74d6c63160077f56ff630c326241d8c51b66e",
+    "rustc-1.43.0-x86_64-unknown-linux-gnu.tar.gz": "950b323044ae9a7932b697a2e4f4f62b59248f58faa320e22dc20f8ad9521f6b",
+    "rustc-1.43.0-x86_64-unknown-linux-gnu.tar.xz": "c8f3ac271f20cae5259fe01f91e6906d9ef435b1fd1836daaefb3b176ba00e29",
+    "rustc-1.43.0-x86_64-unknown-linux-musl.tar.gz": "7b9ff3fdc2024d044f19bfd5353441fa5fe7409c9ca4883726b5c8fdece3a7a6",
+    "rustc-1.43.0-x86_64-unknown-linux-musl.tar.xz": "28d73b5f899d671453b40df5c42f1d6b99d2488bed725a7fbe08c432d32647ad",
+    "rustc-1.44.0-aarch64-unknown-linux-gnu.tar.gz": "b0fc4cee7119c10f79fe2701ca0d19ab738bd20954352ae5b1dcc4c6f432779a",
+    "rustc-1.44.0-aarch64-unknown-linux-gnu.tar.xz": "8e050879b5013401f788bc9eed5f6d6fb9a35d546e2add7d4189c0fb156c9310",
+    "rustc-1.44.0-x86_64-apple-darwin.tar.gz": "4fd09afcae85f656d4a545ee415e19546e03e34f1ca23be5eaa68c489e3186ab",
+    "rustc-1.44.0-x86_64-apple-darwin.tar.xz": "23a2357a11f31e19315fea66fa51c208e8a15a01a9e37abf4495b180a8dd8b17",
+    "rustc-1.44.0-x86_64-pc-windows-msvc.tar.gz": "0b3aec27d86034cbadf4adbaf36308bcf98d97c0979d162ffccf4328fb4f96cd",
+    "rustc-1.44.0-x86_64-pc-windows-msvc.tar.xz": "badd51fc41d8f2f03f6b70dc3277ad19b48401bef2539837f6c6d34a69c0efff",
+    "rustc-1.44.0-x86_64-unknown-freebsd.tar.gz": "6f3c4e16bbda8719e5c07dc687e84a7236e097da55c4fabea13ef1cbd6a30c40",
+    "rustc-1.44.0-x86_64-unknown-freebsd.tar.xz": "9cf831863749042476ef1239a4d74c5a720ca9eb0ecb907e580ac987df851e0f",
+    "rustc-1.44.0-x86_64-unknown-linux-gnu.tar.gz": "52671652e7045df0702d8f2e8af60bf6f20da3e3a5db1aa6022bf9545e914449",
+    "rustc-1.44.0-x86_64-unknown-linux-gnu.tar.xz": "fe1d8d81950eea1f67219abc49bc1ae88b2b27fd02d1bffa38b43bc5bff05124",
+    "rustc-1.44.0-x86_64-unknown-linux-musl.tar.gz": "71440388e5e4affe11fddf3c3a706ac6f129d9ea47717894b586290e553223fa",
+    "rustc-1.44.0-x86_64-unknown-linux-musl.tar.xz": "f023a98493b3617f3eecbc0744c88a9b4d4e1a8ac105d0cf50a9c191018facf6",
+    "rustc-1.45.0-aarch64-unknown-linux-gnu.tar.gz": "b1ef2ea19142d851f2ee6936cd46a30ec8f157ba53048bc2748279d1e9e0ad17",
+    "rustc-1.45.0-aarch64-unknown-linux-gnu.tar.xz": "d1c265a74dce6f7cb1ab27c01130d34bf7a8b7cde95157832288c1d4b649e69d",
+    "rustc-1.45.0-x86_64-apple-darwin.tar.gz": "fd17d99c3e827f0b4f01b9122d4bf2fca0f1144827300a1eda93718d8642b39f",
+    "rustc-1.45.0-x86_64-apple-darwin.tar.xz": "54dc3113a513b0d678491db512d7c62a3af2ebff900c04a6b0f945406376d0e6",
+    "rustc-1.45.0-x86_64-pc-windows-msvc.tar.gz": "f65fb383f2c6f979a19acbd4e099e6eea8addc0e76f1fd988582dfc0daa4a121",
+    "rustc-1.45.0-x86_64-pc-windows-msvc.tar.xz": "a28e7440f2960ff0ff903792ec991d108ac5a4dae791abcec44bde1ba90857e3",
+    "rustc-1.45.0-x86_64-unknown-freebsd.tar.gz": "b5d263c53320f8a5dd5daceac1e60da172fd21614ada67f584565430d9d1c9c6",
+    "rustc-1.45.0-x86_64-unknown-freebsd.tar.xz": "5df7d5014594aa7db2c4c05d2c81f89fbcc1c65e7212a70c3085cb0a33acad9d",
+    "rustc-1.45.0-x86_64-unknown-linux-gnu.tar.gz": "3ef2fcf818c133c3e9957441917b23ea536805efd0ff9ac6ee0bea349d703a90",
+    "rustc-1.45.0-x86_64-unknown-linux-gnu.tar.xz": "57e96d49f71a3a900fcae25d24f7d436272b858ebd45c31f6ce5e7d2a5cd2cb7",
+    "rustc-1.45.0-x86_64-unknown-linux-musl.tar.gz": "596f04e0774225ca85b5c99575854dd66973854ebcdd0b7a60d3c2cff4d415db",
+    "rustc-1.45.0-x86_64-unknown-linux-musl.tar.xz": "6a456c9862fe2620120270581cb2eec4a0b17067dbcbe5463bbf5ffe8f91c884",
+    "rustc-1.46.0-aarch64-unknown-linux-gnu.tar.gz": "41239ece19c79250a205e5b2fae60b242bba4bf72b687bccc88f011e66a872b6",
+    "rustc-1.46.0-aarch64-unknown-linux-gnu.tar.xz": "b6c6f966a1494fa26d3b81470d28344726205a25a6ecc4629e305a34f721194d",
+    "rustc-1.46.0-x86_64-apple-darwin.tar.gz": "f690b375df7b1399e5baa69b64932e3e4a3f2b651e5ef2ebc85509bee777a9d9",
+    "rustc-1.46.0-x86_64-apple-darwin.tar.xz": "d1feb3e25667c9966e81ee17d28d3015c3d50f068d198ee53bf33a1f793fd10d",
+    "rustc-1.46.0-x86_64-pc-windows-msvc.tar.gz": "56badce580b65f59d676b20b4e5f138969e5039182b7f6052ac7da9d38bd0aca",
+    "rustc-1.46.0-x86_64-pc-windows-msvc.tar.xz": "91dbbe38a0212a5ebd7e21c084863a6f2414532e628a0c035073f83801540c68",
+    "rustc-1.46.0-x86_64-unknown-freebsd.tar.gz": "e76d3e18d1826753395d881bc37be3d43e9ff8d2d34d49d7ed6105f228d56284",
+    "rustc-1.46.0-x86_64-unknown-freebsd.tar.xz": "df757f57c947b67a2820e2423aee1bb2692d7064da1d683e088d3c8e6a768657",
+    "rustc-1.46.0-x86_64-unknown-linux-gnu.tar.gz": "4c0c740cfb86047ae8131019597f26382a9b8c289eab2f21069f74a5a4976a26",
+    "rustc-1.46.0-x86_64-unknown-linux-gnu.tar.xz": "6edcec5367f9fcaee78cbcabfb1f6757fa95d7fd2c0853913223fe20ad534f12",
+    "rustc-1.46.0-x86_64-unknown-linux-musl.tar.gz": "6ab2664edc93122b7a93a1b72025e869d088445af65d3df286258c3860090114",
+    "rustc-1.46.0-x86_64-unknown-linux-musl.tar.xz": "130fb0ef33324996bd87abcc5d6835b0fea97d9786f53c90af5986a80c1d97da",
+    "rustc-1.47.0-aarch64-unknown-linux-gnu.tar.gz": "2e143bfa59eca5c3f3e995c5997ae55c7defe824fb4dbe7e77896e132f42c24b",
+    "rustc-1.47.0-aarch64-unknown-linux-gnu.tar.xz": "86195fb50d9a0b3b8739388fd115601c7eb602a396ca789721589c52d68f8dd0",
+    "rustc-1.47.0-x86_64-apple-darwin.tar.gz": "4773ad46b912c859984f1e4466e506dd8102603d1ffcd8b63cfe7522f49e5987",
+    "rustc-1.47.0-x86_64-apple-darwin.tar.xz": "168860cae8596e14b7f1cedfa564503240a965f02f092633a15a16a9037adc7c",
+    "rustc-1.47.0-x86_64-pc-windows-msvc.tar.gz": "f2010e4500602d0efc431c0853692733415bedb58652376023d7d6ac204f8c7c",
+    "rustc-1.47.0-x86_64-pc-windows-msvc.tar.xz": "cc86c913c0020fbc915f9c1caa60f89bca6a50441241250f232c5317ff841069",
+    "rustc-1.47.0-x86_64-unknown-freebsd.tar.gz": "811f298c07fb32a6a01f9960f2d7dc403f6f288a3f475ed9806648e2cc5938ca",
+    "rustc-1.47.0-x86_64-unknown-freebsd.tar.xz": "e4469b6e35638329aa7cee9b91b5b48d87b2a633aef48f6356af8384c681940c",
+    "rustc-1.47.0-x86_64-unknown-linux-gnu.tar.gz": "d96be0ae1deada01f41372ab2c2f485a9f8625069aeaff33c5b513061e9706d4",
+    "rustc-1.47.0-x86_64-unknown-linux-gnu.tar.xz": "6effe67c3461335eabba2334f4747260bd479c938e635899a60ed094beec7481",
+    "rustc-1.47.0-x86_64-unknown-linux-musl.tar.gz": "4c6979e2b01fc8da0f83b30e9ccf869f692ad84cf517e300362624d9eaac8635",
+    "rustc-1.47.0-x86_64-unknown-linux-musl.tar.xz": "9fb8267d7ed0adc9bf591c00c0dc4ed4542b399312c753affddc5e87d3bedadc",
+    "rustc-1.48.0-aarch64-unknown-linux-gnu.tar.gz": "9c83a5d18f6ca913eeffd78c53913da288b171ff245137b646a8fd280fe72340",
+    "rustc-1.48.0-aarch64-unknown-linux-gnu.tar.xz": "ad2ca472b4abf228afd28e16840524a4f08a5efaeaae1d046ff1855c00f3994d",
+    "rustc-1.48.0-aarch64-unknown-linux-musl.tar.gz": "eba49211f2e0aae157e18258edacb3031dc8b4bb6db0bca142c919d9042c7ba4",
+    "rustc-1.48.0-aarch64-unknown-linux-musl.tar.xz": "72fbaf8488c0097267723f3ef2f4131bf21803e5c49a7eae95728055603a7499",
+    "rustc-1.48.0-x86_64-apple-darwin.tar.gz": "846f45f9bd6676e9d1f6758279b48e32564ba23773e69aa89692dbc123dbea5a",
+    "rustc-1.48.0-x86_64-apple-darwin.tar.xz": "afc242b1973d2d83760fc1af511db70fb946d0347e2a2005d4983abd3a9fcd96",
+    "rustc-1.48.0-x86_64-pc-windows-msvc.tar.gz": "395b2a8e6824b3e56a8a9b4598273be5410b4ea64e92c8aeaf900d9ff21f470f",
+    "rustc-1.48.0-x86_64-pc-windows-msvc.tar.xz": "7e054196c5906bff41cae1a7b48568d5c863a6c5a446638d52ab871f2e487115",
+    "rustc-1.48.0-x86_64-unknown-freebsd.tar.gz": "fbaff313c2423f1ababc9792332560ca0e3749abf3749e7eb5289bc6515d9424",
+    "rustc-1.48.0-x86_64-unknown-freebsd.tar.xz": "444990ea5d6294e10a3ab0fe993569c3bf2069edd0491b8cb1f2e60cd21868a8",
+    "rustc-1.48.0-x86_64-unknown-linux-gnu.tar.gz": "aa4a96b010e0d4573e6a1fec230beaadaae6cdce2bb4befeee7b1c081ee9ef8c",
+    "rustc-1.48.0-x86_64-unknown-linux-gnu.tar.xz": "fc4d292a52cbb6b84fb9f065d0d7596064a9b957381d639d5a750d6e2bf02483",
+    "rustc-1.48.0-x86_64-unknown-linux-musl.tar.gz": "5513813bdbd1aa5e4c4a0a0e680953b72d24829595920fec4e69da3682abdc0b",
+    "rustc-1.48.0-x86_64-unknown-linux-musl.tar.xz": "50c2904db7794400987487ea364392714830f287f3e596a9f8ea9df748dfa8a3",
+    "rustc-1.49.0-aarch64-apple-darwin.tar.gz": "3e8c0c9101f27623f7607f2d8acef5f28dcb2bdfcded56f210d9d370cf9a9c06",
+    "rustc-1.49.0-aarch64-apple-darwin.tar.xz": "c502ca9bbf4ae3356e91e1e1a5bf0ffb4ffd53a6112aa0c5dbf2d38638102ccb",
+    "rustc-1.49.0-aarch64-unknown-linux-gnu.tar.gz": "b72699cdf74c03ccc0aabab937a69807f2ceb5861f3508593e1c222190c4efc7",
+    "rustc-1.49.0-aarch64-unknown-linux-gnu.tar.xz": "9850cb24a8cc86b9ad6e0ea95ef2e473448e45345817bfba51aa3d054411ab68",
+    "rustc-1.49.0-aarch64-unknown-linux-musl.tar.gz": "b76b7f687ffceed03a86e69dafd251e8e069c31c31dbe70c0fcad1ace5398956",
+    "rustc-1.49.0-aarch64-unknown-linux-musl.tar.xz": "d885d860a13855979074d1883dab7d4ce1dc1517f6ae98158e6cb2e08d353ca8",
+    "rustc-1.49.0-x86_64-apple-darwin.tar.gz": "09333f9aacb9c5959e2a2798d7e283cae674255f063a35ea28f91595caa0a78b",
+    "rustc-1.49.0-x86_64-apple-darwin.tar.xz": "d44b0d9f5393e5777396ad63193f64f149cade306677ff6da94cee9e96ee6f08",
+    "rustc-1.49.0-x86_64-pc-windows-msvc.tar.gz": "800b7571438850074aeb0fb9a0e7d890c6785f9f4823b3052b9b0b098bb9ddd4",
+    "rustc-1.49.0-x86_64-pc-windows-msvc.tar.xz": "2f4107995a7ec69dc2feffa5c18a94abe2884b950fd146084f59ace2b7d81688",
+    "rustc-1.49.0-x86_64-unknown-freebsd.tar.gz": "66427837606aba2cda99d4f52161bee1086e98b226a5cb99be8e9a7bf896495f",
+    "rustc-1.49.0-x86_64-unknown-freebsd.tar.xz": "b3d5be8527cad53d9e8089fc6ace493c75a5548cd2f441cd8b80a829057c54b2",
+    "rustc-1.49.0-x86_64-unknown-linux-gnu.tar.gz": "42300556b987934e5e4677972c1dfc57eb07731dc62fa9f4f561935a1c84ed0e",
+    "rustc-1.49.0-x86_64-unknown-linux-gnu.tar.xz": "faa6c7c477284f4e0ef87e19cd5696844b1b079fbf14cefe369eaba8470dd861",
+    "rustc-1.49.0-x86_64-unknown-linux-musl.tar.gz": "4c56ed1fcee28a6f35c98d14edd34a33a60f52ac583c98313623760de093bf7d",
+    "rustc-1.49.0-x86_64-unknown-linux-musl.tar.xz": "eb811b680b0cdcc73bb9643e811f2a84235b9b581cee35c6d01ef43946e687cd",
+    "rustc-1.50.0-aarch64-apple-darwin.tar.gz": "3abc090591fb7fd0a292eeff4cc6a029841d39b0a768eaf1f0b9e4e06cba8ed7",
+    "rustc-1.50.0-aarch64-apple-darwin.tar.xz": "8a746b1aa9e0b0a5e5036653aaac6bf416094c76ad3f4040a1d1edcd912724cf",
+    "rustc-1.50.0-aarch64-unknown-linux-gnu.tar.gz": "9afe0e968da845981b463beb75f91d6da0d4de5443d1abb6002b75a8cf066ea7",
+    "rustc-1.50.0-aarch64-unknown-linux-gnu.tar.xz": "9b956d97d7e428ecd8634d467659ebdb5bd79c387b88363be8749eddd7f98756",
+    "rustc-1.50.0-aarch64-unknown-linux-musl.tar.gz": "abafb6bb1d2f065b72b43331e6cb00f3c98c78af00f261e1c53828c26528a078",
+    "rustc-1.50.0-aarch64-unknown-linux-musl.tar.xz": "b41379437147b8cdb210f1f6d4b6ef31959f4b64844a9704dbdc59af150c2554",
+    "rustc-1.50.0-x86_64-apple-darwin.tar.gz": "3637ee8d8bc0f8e922b1f9ec7b6fc00b6efcceae97c337d205a3bc472be7b936",
+    "rustc-1.50.0-x86_64-apple-darwin.tar.xz": "7a51224e17a2934992207dfe6670ef560879bafb962073543cf5423502fe2897",
+    "rustc-1.50.0-x86_64-pc-windows-msvc.tar.gz": "d7f7607c9cd3e137a335904e1186345f4328a971588ee8a54838e32a35a38e3a",
+    "rustc-1.50.0-x86_64-pc-windows-msvc.tar.xz": "20d55aef294a21b5a87c21354228f8a3bde1bedd907ad67cc10f3cfec34d0771",
+    "rustc-1.50.0-x86_64-unknown-freebsd.tar.gz": "916e616188638738ff217a047b3fbe372d9ad3734bb466d0e56d2fcefd1da5c6",
+    "rustc-1.50.0-x86_64-unknown-freebsd.tar.xz": "83bc3340e67011e4c8c33bf46719692066db52014db7f23bcb692859eb7f9f0a",
+    "rustc-1.50.0-x86_64-unknown-linux-gnu.tar.gz": "160a91a3f545f96b2b955cf48811080d8e0accbd9d9a9732b080e1ffa72113bf",
+    "rustc-1.50.0-x86_64-unknown-linux-gnu.tar.xz": "9bebd360bcd9b5bb58f2a02930b9db4ae291adef259c96377f1f4cbd240bcf86",
+    "rustc-1.50.0-x86_64-unknown-linux-musl.tar.gz": "528d02fa77fc0da26904ff10da2d6f94c6da618c323b37247b49fe28fd950240",
+    "rustc-1.50.0-x86_64-unknown-linux-musl.tar.xz": "fbe1188b42bb859e2557575988ddc66ad0495a48942b4866134ecb8e365430ae",
+    "rustc-1.51.0-aarch64-apple-darwin.tar.gz": "110db4985d7cb18ce6879f34fc02422f5f074b3a2b40b62e6bfd54ceaaa56d33",
+    "rustc-1.51.0-aarch64-apple-darwin.tar.xz": "8e9744845fcb405dd3ff56ff02d4b816a4d4b0880f0a61861aaa20d437b2915b",
+    "rustc-1.51.0-aarch64-unknown-linux-gnu.tar.gz": "b63b21d56cab87133c9cd149f7c8ca3b3399a877cb16496a86f7a87d8b15c784",
+    "rustc-1.51.0-aarch64-unknown-linux-gnu.tar.xz": "4ac31fbece2b8ff077986e9843a94990306fcf1e6feff04c1c0308b45eedfe72",
+    "rustc-1.51.0-aarch64-unknown-linux-musl.tar.gz": "58305d3fffa1662114587a6144afff9a872496aef6073b23dc5da9676d315d5a",
+    "rustc-1.51.0-aarch64-unknown-linux-musl.tar.xz": "332b827f19b8048d9e58397d825c644b5a0baf8eb6eee58b157dfa26e0502695",
+    "rustc-1.51.0-x86_64-apple-darwin.tar.gz": "abca027d4e45870ac97f220e5f60f4e849dd53f575f902046952a127da739aa2",
+    "rustc-1.51.0-x86_64-apple-darwin.tar.xz": "884ef3b6236594edf5fd00e45907592dd936fef3a1c749cc660c755830e0f31d",
+    "rustc-1.51.0-x86_64-pc-windows-msvc.tar.gz": "a6fee78393f3ee78bc81b5437122f7fd220d8d6686c9cfd41848bd699c9758f4",
+    "rustc-1.51.0-x86_64-pc-windows-msvc.tar.xz": "0c55127d95dc142385be4779dd4d0ca7b72f68ddc08507ba9b88140a7db3d972",
+    "rustc-1.51.0-x86_64-unknown-freebsd.tar.gz": "572e7c13bb5951a12a9f6f422e636da8468747d29ab6901ef3b5b03932482e1a",
+    "rustc-1.51.0-x86_64-unknown-freebsd.tar.xz": "ff19c800c0e03f1c83e635f88b5abc5a5903989e4aeb4878172c8a2be099de67",
+    "rustc-1.51.0-x86_64-unknown-linux-gnu.tar.gz": "6b1298ef220302a33cad21fad7c8e1535264872b18e2ece733ac37ed31571dda",
+    "rustc-1.51.0-x86_64-unknown-linux-gnu.tar.xz": "feef13f6cd5072f30e2c121b7775d7ac5316998fcf03b68b2537684f3a7fe24a",
+    "rustc-1.51.0-x86_64-unknown-linux-musl.tar.gz": "77614b115eac2ec975f29a8e2d60d8a77834f11689ff6b0d94eb74d4999df285",
+    "rustc-1.51.0-x86_64-unknown-linux-musl.tar.xz": "dd432bee9206bc5edd149a295b912504998ebcc2569cfe68f37f6366f7122723",
+    "rustc-1.52.0-aarch64-apple-darwin.tar.gz": "9e17debb80c85695aef2b76f1b4ff3a10ab40947b386b2590fe168c4ba77ea42",
+    "rustc-1.52.0-aarch64-apple-darwin.tar.xz": "7cc787e75a4414ee89b1ae0e210f2f46be0ed7a3ea4426cf985f92f482852c1a",
+    "rustc-1.52.0-aarch64-unknown-linux-gnu.tar.gz": "cbfec2d4cfd38a04e1945beb4736a6ad2eb22f3a18743865158c4e0a4da43450",
+    "rustc-1.52.0-aarch64-unknown-linux-gnu.tar.xz": "19ae99631af894d1417770c05988ab97b623db38325e52751a1103263587390d",
+    "rustc-1.52.0-aarch64-unknown-linux-musl.tar.gz": "fdf8be2fd4c4505155f81099e171fca5300f14cd1a343b4e11753bea99f2764f",
+    "rustc-1.52.0-aarch64-unknown-linux-musl.tar.xz": "63d5b88a78bf7369cb6cdafbfbdab66987a3d0d33031bf6e2e1b71331983a095",
+    "rustc-1.52.0-x86_64-apple-darwin.tar.gz": "abed71e08d05a47f7a54495212ef67e020cc61edd6c90cb1589bb4c7f771a821",
+    "rustc-1.52.0-x86_64-apple-darwin.tar.xz": "2826b24bb5d427fa0b9540aa5658606690c1a2d089bb36a7fc75e2a14233b64f",
+    "rustc-1.52.0-x86_64-pc-windows-msvc.tar.gz": "bcad3eaaac6f8bc117346047b3efa088977927ca668477b6e51cd037428ceed2",
+    "rustc-1.52.0-x86_64-pc-windows-msvc.tar.xz": "28582489bb20cddd93f04a46a9f7137030812d1347df220159b595d0923a2689",
+    "rustc-1.52.0-x86_64-unknown-freebsd.tar.gz": "5883388f0d1abc7e187d03bb213a4f34b8487ae4b665d9a76acd80c86fa5d3de",
+    "rustc-1.52.0-x86_64-unknown-freebsd.tar.xz": "b6a97d89277e8978250db48be15a981baa205b294b7b72aba43e3ce7b3342076",
+    "rustc-1.52.0-x86_64-unknown-linux-gnu.tar.gz": "76f16908c37c719abc1cd28e9cb4cd484aa88ba00152b2de3188b6ce86eea848",
+    "rustc-1.52.0-x86_64-unknown-linux-gnu.tar.xz": "a5ce7d951dbebd815530c3c571c193c24ae4b83bc1bf431845c0dbfbe1280476",
+    "rustc-1.52.0-x86_64-unknown-linux-musl.tar.gz": "13e1ef7a3db7a90a2756e423cda10ae0b95510f041d543d8c00a91a2ffbb68dc",
+    "rustc-1.52.0-x86_64-unknown-linux-musl.tar.xz": "57a2282e20694ea9dcb8417bd45ad7623c95ccbfac86c58927a7e3479976b21d",
+    "rustc-1.52.1-aarch64-apple-darwin.tar.gz": "d9f76477db98aebcbfd5ebbe4ce5c3aff30d7ac0185b25cec27e4ecc376ef4b8",
+    "rustc-1.52.1-aarch64-apple-darwin.tar.xz": "506edd3ea9b2aa59a6fb3a0f3f4411b7eaac470c62ba1e5b73cb8e862a0b9ef1",
+    "rustc-1.52.1-aarch64-unknown-linux-gnu.tar.gz": "5218780009126b391786280f76b98aea743fd7cead8d48befc03791c095f88d6",
+    "rustc-1.52.1-aarch64-unknown-linux-gnu.tar.xz": "3dffb653453e913272209a3577f6f03da83f152fc0d34d094bc19c82e8251d50",
+    "rustc-1.52.1-aarch64-unknown-linux-musl.tar.gz": "a1dea60ad703c424f99becef772b97ea3966974002427ad8baf3ff5473fd7ada",
+    "rustc-1.52.1-aarch64-unknown-linux-musl.tar.xz": "6c8c1bcf157bf36bc5ee5fd95b00379866638a4fbc216d5bbec0c5bad1326c22",
+    "rustc-1.52.1-x86_64-apple-darwin.tar.gz": "bc896a1c701ca10328671710c4a06ec4774b398cdeb64cf55fcf247f31dd275f",
+    "rustc-1.52.1-x86_64-apple-darwin.tar.xz": "873c8df5cc03c8ff502611e97922d6b9eb89058f21c647ca4343a0007634e51a",
+    "rustc-1.52.1-x86_64-pc-windows-msvc.tar.gz": "1828ce5c7ca28e7cdc9cb75105dd3489ea1e3648f800d3db0e99c248292d816e",
+    "rustc-1.52.1-x86_64-pc-windows-msvc.tar.xz": "c3700e0d442bab9f68961d960e8b8d69e9cc75f5daf0c8ead270a54065f8d408",
+    "rustc-1.52.1-x86_64-unknown-freebsd.tar.gz": "2de1df845045a8c6dc3832e7d615c9124c52eb5626b1aff1219e66fd3116623b",
+    "rustc-1.52.1-x86_64-unknown-freebsd.tar.xz": "8430f3d0e73baa0f7aff4481b30c246d6c0757aa0bbc07d8eee3c69e5b120b74",
+    "rustc-1.52.1-x86_64-unknown-linux-gnu.tar.gz": "52002b050485674e87fdd72c7b49dac8783dfa36575be7e6265a69b4e66f8570",
+    "rustc-1.52.1-x86_64-unknown-linux-gnu.tar.xz": "582826187f4a20b1df434710dd871ce2debf4025a76cc8225777391e42e4a345",
+    "rustc-1.52.1-x86_64-unknown-linux-musl.tar.gz": "195711077d44392a13e57c6695489e71cf811538eba02758dbea7c4ca2a72047",
+    "rustc-1.52.1-x86_64-unknown-linux-musl.tar.xz": "56a40a49abb2973a934ae97081d335af9c6c63c27784a5faf0c41e5893684c40",
+    "rustc-1.53.0-aarch64-apple-darwin.tar.gz": "a7f9c48adb4062c43bfad8fe608551c98d538529cbd13cb979578532a91edbe2",
+    "rustc-1.53.0-aarch64-apple-darwin.tar.xz": "0817bb9ba012b238ae360f01b31d05ba848014c4ff3b697db7f3c1cfa477dbcb",
+    "rustc-1.53.0-aarch64-unknown-linux-gnu.tar.gz": "a54267708a1e80bab2c0a919284b9387f4b70ca61a96dce7544b2c8001adc5dd",
+    "rustc-1.53.0-aarch64-unknown-linux-gnu.tar.xz": "a857e5c615f6b5b3afc6b707ae007b3b4624585b0b2ba9b38b553114db37f8d5",
+    "rustc-1.53.0-aarch64-unknown-linux-musl.tar.gz": "b26c35cc651c9233c58d08c12c076413a9637875a7fceef3f6b582629e169282",
+    "rustc-1.53.0-aarch64-unknown-linux-musl.tar.xz": "22163063cb39998f4bea6970c44a9e6863cea4c4a72e232c3fca22301acb95ee",
+    "rustc-1.53.0-x86_64-apple-darwin.tar.gz": "ad3d181deafb4bfeaf3d313828b258b89ad2fece3623bb4c4488e282db802e39",
+    "rustc-1.53.0-x86_64-apple-darwin.tar.xz": "4bb2eed591607df5de98bd5ea00764f4775d31157797d519882072a4eab456bc",
+    "rustc-1.53.0-x86_64-pc-windows-msvc.tar.gz": "27b895346c458c141d1cd277b3e87380ad3e304c62c7240d778a0cd3dc245581",
+    "rustc-1.53.0-x86_64-pc-windows-msvc.tar.xz": "d967d6ad2f6cf895b4d854ec41f5dfffeb625817f3f2546d0cad2b2d067a55b9",
+    "rustc-1.53.0-x86_64-unknown-freebsd.tar.gz": "304eb5d1b4a8a98fb67cc1a9599c1c0ef7553d939945a6a80d768e3b69ff8c75",
+    "rustc-1.53.0-x86_64-unknown-freebsd.tar.xz": "fe5aec7b2dc3866a5702d5f16dfb51dc7a579a725c9ee684190a3efd62c87ec7",
+    "rustc-1.53.0-x86_64-unknown-linux-gnu.tar.gz": "c2c24b41602a589886f87276d4d46e42efddbad820917dc4dcbf6625cdf9ff52",
+    "rustc-1.53.0-x86_64-unknown-linux-gnu.tar.xz": "9c2f0443a546dd18f1f020c7711a7b9864432545ceb812e79315c1e76508b193",
+    "rustc-1.53.0-x86_64-unknown-linux-musl.tar.gz": "6ab5694ac8ed7ccb79b7689e5dcf9198ddb937e123d31289e7b385bb60b3848f",
+    "rustc-1.53.0-x86_64-unknown-linux-musl.tar.xz": "50de8b4bcb0819ec0ca363e0aa53fc1c55bc85f53bc82da8dce20a132da7e7d9",
+    "rustc-1.54.0-aarch64-apple-darwin.tar.gz": "f18bbe09d8e08be5753e5f536ddfe15d4141b3ce968a2809a9869c91d492292b",
+    "rustc-1.54.0-aarch64-apple-darwin.tar.xz": "73563f21e164a9d105e844d7f6d38ea1b30451697494aeb37d6cb1c6cc3d02c8",
+    "rustc-1.54.0-aarch64-unknown-linux-gnu.tar.gz": "595e8db56e68247ee3caf29f6a3d3c72d7955ed45f1291e7e596d63923427a86",
+    "rustc-1.54.0-aarch64-unknown-linux-gnu.tar.xz": "0e771c06435b6fa3087ce054c7f2f94b8ee36717997f32f97e2e3425739ac2b4",
+    "rustc-1.54.0-aarch64-unknown-linux-musl.tar.gz": "02360abef6aebef211a3e6fccfbc81f27c83e930c3291f95e033c8c9eb6c07b1",
+    "rustc-1.54.0-aarch64-unknown-linux-musl.tar.xz": "e68c68b77ab5e7e36ddfba8835f1c63feb2b75484e5cd9268819f694cfbe6adc",
+    "rustc-1.54.0-x86_64-apple-darwin.tar.gz": "b3ac970d31893a192c8ec46fd6c9b8409751246cba029a212c4cd84115086a13",
+    "rustc-1.54.0-x86_64-apple-darwin.tar.xz": "e860a4f9b28bd7266c15859dc6d523fe445c7c776fb5ab134e27c400d07335b3",
+    "rustc-1.54.0-x86_64-pc-windows-msvc.tar.gz": "9fd8ed58b28cc6554dc7ae17e8b96770cc4736460c4a0047c78fb7ff54d53f10",
+    "rustc-1.54.0-x86_64-pc-windows-msvc.tar.xz": "9b99ac6700f3e4e48bcfa91771e116f5f60e9386c3a81d352be6099cfe5032fd",
+    "rustc-1.54.0-x86_64-unknown-freebsd.tar.gz": "a2974a15b2b284c09eeac39396728544700fdb8689e8b662ee062e68daa0b554",
+    "rustc-1.54.0-x86_64-unknown-freebsd.tar.xz": "773e37f3a371e6be4826498ea973ffc84cbbf12eccd2dff2fffaf5682c80b3e6",
+    "rustc-1.54.0-x86_64-unknown-linux-gnu.tar.gz": "cd4c1c5db3b8ca3f76fac42d209e83640794eb8c2bbfb71b71e5f93b584d159c",
+    "rustc-1.54.0-x86_64-unknown-linux-gnu.tar.xz": "eafc06aba7128ee8592c16d7e3ae7b877e82c5d9779c9d07099558ed7e286296",
+    "rustc-1.54.0-x86_64-unknown-linux-musl.tar.gz": "896b4eb229259005410311a29587aaab4ed7d5d590d810b06abd7601a004a953",
+    "rustc-1.54.0-x86_64-unknown-linux-musl.tar.xz": "5cffd160f5daac521652ee67c62947c0d66bdc8e5ebf7dc93114cdff9a934b0b",
+    "rustc-1.55.0-aarch64-apple-darwin.tar.gz": "4d782c947f1a35f5fb60799f019b4b82ad121a017746c935ab37fbd105c66c8f",
+    "rustc-1.55.0-aarch64-apple-darwin.tar.xz": "ffdf4b92c9b1d03909c10247eea97c028ffe3b6ba8e0106fbb3ef8292c5f768f",
+    "rustc-1.55.0-aarch64-unknown-linux-gnu.tar.gz": "31dbbc1395f5a545c114e778552159713977dec423bca5705bd4c92ee3840cb1",
+    "rustc-1.55.0-aarch64-unknown-linux-gnu.tar.xz": "8a718456700e65817ebab6ccb709f7541af691c6acdc12b20997c5c541761e7d",
+    "rustc-1.55.0-aarch64-unknown-linux-musl.tar.gz": "a5170d72af554b1d39a0db46cb2bd55911132705e3cf8e38d16a382f3b9d4215",
+    "rustc-1.55.0-aarch64-unknown-linux-musl.tar.xz": "893b01a0fad41c2706170d580521cf3e829c905580a057fa1d2635872def97d5",
+    "rustc-1.55.0-x86_64-apple-darwin.tar.gz": "7d1197687c72d4c72ae04905b96a7205ec4ad7c9da0231ea6f3bbbc8399adb84",
+    "rustc-1.55.0-x86_64-apple-darwin.tar.xz": "366c8e495bcd1402af88e996ecd7d8370206dfb0245a39d83c31d1f4b110760e",
+    "rustc-1.55.0-x86_64-pc-windows-msvc.tar.gz": "2cb681fa074386af8dd2cc6c79b57e1a8048acb1dda18e04fedff1c2dd84d70b",
+    "rustc-1.55.0-x86_64-pc-windows-msvc.tar.xz": "def3198b3e0a32321675655ac0b50bfb2dd8a89ee3f604343b1f70909acbe49f",
+    "rustc-1.55.0-x86_64-unknown-freebsd.tar.gz": "ad50ba2c87acb59020959df594aadc207f4fa527b2b2cd8849f3b1d3f666986f",
+    "rustc-1.55.0-x86_64-unknown-freebsd.tar.xz": "34d02e6e2dd3ca2f04bf58a1b60ce82367cd3dc7826dd8775848ebb828a2535e",
+    "rustc-1.55.0-x86_64-unknown-linux-gnu.tar.gz": "9da098b2df01124f2c4b9789767151521f4bab98f50befdc75a691cece0c0d00",
+    "rustc-1.55.0-x86_64-unknown-linux-gnu.tar.xz": "a602f4178d5adfa8428f89bd4045df029586d1bb87e04ae6ec2da7eb702a403d",
+    "rustc-1.55.0-x86_64-unknown-linux-musl.tar.gz": "f7c1fe2393db842630b23ecf6164fac471b11235fdb62a35a86e7cd3cf8d749c",
+    "rustc-1.55.0-x86_64-unknown-linux-musl.tar.xz": "0ddf6eccc6d005d39aaad3246ff157811a5a81c801f6e935c671299d24036c50",
+    "rustc-1.56.0-aarch64-apple-darwin.tar.gz": "c588dc2cd352eaf27ae74ee593bd0aaa65ac2742416c714f5827f395bb7c19df",
+    "rustc-1.56.0-aarch64-apple-darwin.tar.xz": "de1b5053ccc170af221ea9725a116cd2f26e5357f2551ec0064489cd2badc8e9",
+    "rustc-1.56.0-aarch64-unknown-linux-gnu.tar.gz": "eb7283729bc4c336aa23b020489e8feb78eed70831213ee2e4121ce7d6ac33f4",
+    "rustc-1.56.0-aarch64-unknown-linux-gnu.tar.xz": "0d2491a59f697d2ea52fc429b8d4665acb5f79b0e16703f3604b61b8aa68d1c4",
+    "rustc-1.56.0-aarch64-unknown-linux-musl.tar.gz": "e312187386bfb39fde04ca007faf656179e8c2b1bb1a0d59007db7a247b54b4e",
+    "rustc-1.56.0-aarch64-unknown-linux-musl.tar.xz": "4429db7e6169ae647b2869a534812aabe757e7aa786e2bbb18bd2aaf0512ec78",
+    "rustc-1.56.0-x86_64-apple-darwin.tar.gz": "a724945de2bb0ba78e56217ba02f67ad0cb07a01c2438b01b91f85fb94d273d2",
+    "rustc-1.56.0-x86_64-apple-darwin.tar.xz": "8381b3a6ad395cca58905eb36da2d05f63c411223671d7460c6b6b87135844f8",
+    "rustc-1.56.0-x86_64-pc-windows-msvc.tar.gz": "1034b2f6150d892649c1eb8fb10dbb4228ca2010f88720795e6a12696cab369a",
+    "rustc-1.56.0-x86_64-pc-windows-msvc.tar.xz": "4be524f968909858a37d9d1e6018e74deeed962739a4bcdb9b992094e9c0a128",
+    "rustc-1.56.0-x86_64-unknown-freebsd.tar.gz": "4e7a2f62ef2873b3bd45749133c1690c4b0e037af5a586e9ea691e480f8d2d40",
+    "rustc-1.56.0-x86_64-unknown-freebsd.tar.xz": "fb4eeb2e50facd0e08c26d2e42afe5fd2b2d051ca8a725af37b77f4e56eb8c83",
+    "rustc-1.56.0-x86_64-unknown-linux-gnu.tar.gz": "aa66db89c3f89325e40ba0bfe481f4d631559884ae4812c3c3d091d80ba7c245",
+    "rustc-1.56.0-x86_64-unknown-linux-gnu.tar.xz": "2a5f919e2036496c02ab4707a5eb8bd8a4ce6ea589e01cb39f25d213a26dcdfe",
+    "rustc-1.56.0-x86_64-unknown-linux-musl.tar.gz": "5f7ed6c289b56c129d6dbb407348f566caf39cfc5db35a4b6253cf514940482e",
+    "rustc-1.56.0-x86_64-unknown-linux-musl.tar.xz": "2cf4bf618265bfa2092fcb2bf0e8069120e1f1e1ab3b48b14d028559d81b5b55",
+    "rustc-1.56.1-aarch64-apple-darwin.tar.gz": "fcb2c2e46e3cc7e7cba3abbb78ba87131aea56770145f8d97944b675a491312a",
+    "rustc-1.56.1-aarch64-apple-darwin.tar.xz": "b68f42d3d5ef3c88ac21f5958149a25bacc4144c69a5d6b04ed3d05530265817",
+    "rustc-1.56.1-aarch64-unknown-linux-gnu.tar.gz": "9e7461908d0b3e6f4bbb158b71d85e536c186fe571c9960f8ef4300328b25a11",
+    "rustc-1.56.1-aarch64-unknown-linux-gnu.tar.xz": "77aec6a8c5f3d33941c79a48cda3bb08878c23dd1947dc027dfe5c4da41305b3",
+    "rustc-1.56.1-aarch64-unknown-linux-musl.tar.gz": "1e913b7f39d0f478c48ff9b9dd6a05dfe67a6ad58e478509cafb20e106512965",
+    "rustc-1.56.1-aarch64-unknown-linux-musl.tar.xz": "d8e7e6b9a9f07b9a9f3c080d9fd2ab93684776b8e0434bb06c147ce626adef05",
+    "rustc-1.56.1-x86_64-apple-darwin.tar.gz": "876b9ed13a71ada3c00878c6006d837b852973cba84419753445c8a8a76efe00",
+    "rustc-1.56.1-x86_64-apple-darwin.tar.xz": "aa7f98ef0cbf1cd3e983d8240474d381c800e25c33522532abf03fb960c065d6",
+    "rustc-1.56.1-x86_64-pc-windows-msvc.tar.gz": "709fa5ad9723e233025ab0cd142b628cd8a4bb8d11fcdbb97a779d78a60604e5",
+    "rustc-1.56.1-x86_64-pc-windows-msvc.tar.xz": "68970f47f8eb37b683521c97ce1e9fc711bb526a8474c8950b798fb5f5482412",
+    "rustc-1.56.1-x86_64-unknown-freebsd.tar.gz": "b6a440bf5c3b1e4930effc07c6e50bf03cc44c0465f0c379d626b800f4971700",
+    "rustc-1.56.1-x86_64-unknown-freebsd.tar.xz": "630a2d54a614c7d2b2f57f83c8d36c9b037299b42233e267bfedb05ef178de28",
+    "rustc-1.56.1-x86_64-unknown-linux-gnu.tar.gz": "d09557a497a4f3b0726cae4c8e193843e403c80615f25f6ef740c79d7e4c122b",
+    "rustc-1.56.1-x86_64-unknown-linux-gnu.tar.xz": "a7001d1218b62d377cab15522d1b1c376b073c05f7d0ff32cf278871a5eeda3d",
+    "rustc-1.56.1-x86_64-unknown-linux-musl.tar.gz": "b49ef5d9d8a2c49e48dda8bf08fc5a95ac87095a8895df9dbce0ecfb1a97c70a",
+    "rustc-1.56.1-x86_64-unknown-linux-musl.tar.xz": "1b1f83b69502240ea66a45426bb1ba3a7c1291b05c31b59a28ac0551933e1210",
+    "rustc-1.57.0-aarch64-apple-darwin.tar.gz": "cfd28be33d8669c85dc177775de6c4aa94289bba7cc65b90cbd2d9cd5486c860",
+    "rustc-1.57.0-aarch64-apple-darwin.tar.xz": "edd8bcd6e75a0161a6f63fabafaa32d918b60b49b0eea34c560f3e12bf5b9c82",
+    "rustc-1.57.0-aarch64-unknown-linux-gnu.tar.gz": "91f1e29387fc53430592985b0620c8587e4aacc8ac582de4ef96c45c9ae930d4",
+    "rustc-1.57.0-aarch64-unknown-linux-gnu.tar.xz": "f26811e48d03c56c125de03d389e1ae7c6df36990953c1670c6a5676bc12d4cb",
+    "rustc-1.57.0-aarch64-unknown-linux-musl.tar.gz": "e5289c930ed72c08310108f543deafc319c27389523c6c6905fa35283e9ab725",
+    "rustc-1.57.0-aarch64-unknown-linux-musl.tar.xz": "28e78badf85819eed0099b7dd32a18c1d790f004f137f4df534ced59eaf3c9cd",
+    "rustc-1.57.0-x86_64-apple-darwin.tar.gz": "4417eea141bb915f39305cf2d812579f503422fa2e712eddf11427ce91c48294",
+    "rustc-1.57.0-x86_64-apple-darwin.tar.xz": "07d8a849bbe6f5e12946061d6dc007733b953c3c29f02c8393e1606136ea0c87",
+    "rustc-1.57.0-x86_64-pc-windows-msvc.tar.gz": "073bbc3f8f71fb20bf6c7bd2e4cf6e2758c8ee6f08d3eef51a615d5b5b8a516b",
+    "rustc-1.57.0-x86_64-pc-windows-msvc.tar.xz": "c2c163a386ff840fece2cb08bfcd7a8f962c114e719768dbcd3a6b6f44a4c458",
+    "rustc-1.57.0-x86_64-unknown-freebsd.tar.gz": "ef9af581c88b5d52f3b91f8781fbea77426364ac035bb7cb274f41fa3bf60706",
+    "rustc-1.57.0-x86_64-unknown-freebsd.tar.xz": "83a0431e38c40699d7ffae7729fead5a9f4a1193ed38bb6768f6b4ab14e8c34b",
+    "rustc-1.57.0-x86_64-unknown-linux-gnu.tar.gz": "92257646cd85b7c03520c838920851c879845ed8dfd2b339d2ebb4480ee4d4d3",
+    "rustc-1.57.0-x86_64-unknown-linux-gnu.tar.xz": "c42f40c5279a3a9d539cae93dbcab9d333777ad9a60a5b9f1086b874ef63db86",
+    "rustc-1.57.0-x86_64-unknown-linux-musl.tar.gz": "49ff02cdc94bd8732c2969b06006773311c8e41c188a9cef627b37eefb0b73d7",
+    "rustc-1.57.0-x86_64-unknown-linux-musl.tar.xz": "5b04e0e0bbf140f7c49baa6280114c28f59f6de50481bdd45074eebf629c174c",
+    "rustc-1.58.0-aarch64-apple-darwin.tar.gz": "7b3291177d4f8a73c8e20185a04bbc88775fc85eeb271c19bc8f37fb5051ae0c",
+    "rustc-1.58.0-aarch64-apple-darwin.tar.xz": "2f171d7f0861e870094b0fe1c6f68242567928a8d2c3fba274927d59a29e2797",
+    "rustc-1.58.0-aarch64-unknown-linux-gnu.tar.gz": "34d8fdaec504efe6e9448ad5a118ac0e7ef3bd9a8f6c49ea68204f2f9a9dae4e",
+    "rustc-1.58.0-aarch64-unknown-linux-gnu.tar.xz": "8d7c8a64118ee523ad3ffc84baf91cf02ff4415390dc835f3925f8697170ec65",
+    "rustc-1.58.0-aarch64-unknown-linux-musl.tar.gz": "2c6ee3dfdd496a01f55f6b0ae683d3acdecbd42ee386c4000b336351e89b3cac",
+    "rustc-1.58.0-aarch64-unknown-linux-musl.tar.xz": "d6412ff4d8e72310658598b009e125bfe0b4f77dfa541587918ddd362c198f5e",
+    "rustc-1.58.0-x86_64-apple-darwin.tar.gz": "3d3815385dda1c1d8617ee14b682ec3804307b0f5a0ac5604a7dc5efc783263f",
+    "rustc-1.58.0-x86_64-apple-darwin.tar.xz": "630382b0b52941978e680cada034951978b08e3c65d5dc26b234131f4af0fd4f",
+    "rustc-1.58.0-x86_64-pc-windows-msvc.tar.gz": "2296e7bd3e4977917e1cfd021a618064e3bac955338193fba89e84705306aed9",
+    "rustc-1.58.0-x86_64-pc-windows-msvc.tar.xz": "d500cbb5ad84e59b3391b8056d08179edfa62f2d79a96041f2f1cfcbde216d7a",
+    "rustc-1.58.0-x86_64-unknown-freebsd.tar.gz": "89969a81fd9c9cfb94e6554bf1a8884417b0d5dde5e7c45bd4e9b1887771f5d5",
+    "rustc-1.58.0-x86_64-unknown-freebsd.tar.xz": "654bc0ace57ca64005123642217af9fc500e8361d0f5ccaea9316d08ca9f2c3d",
+    "rustc-1.58.0-x86_64-unknown-linux-gnu.tar.gz": "94e3a5e6dca2ae2516d6496568b6791b9501ac500c3e5faf6f42baaead41d404",
+    "rustc-1.58.0-x86_64-unknown-linux-gnu.tar.xz": "47e586451ac25027eb6c0d23c881a917d21d074d2fe9e5a3f41b4b6de1622be0",
+    "rustc-1.58.0-x86_64-unknown-linux-musl.tar.gz": "1134b85ce578ac017650d8e7c360d14a85a1d6185c164678f95440cac1f6786d",
+    "rustc-1.58.0-x86_64-unknown-linux-musl.tar.xz": "3ed55e845dc5ac8d70609edad2cdb60fe3c36a22be6a22f7d30eab43896420b3",
+    "rustc-1.58.1-aarch64-apple-darwin.tar.gz": "cbcc922fa499131b4f9b0ff6c656792edd34452dc902552a0d0dfa8f4690b996",
+    "rustc-1.58.1-aarch64-apple-darwin.tar.xz": "28cbda14d27337369ae526f8f35cbee78b42ee3555832fdb4695eb624ee60a57",
+    "rustc-1.58.1-aarch64-unknown-linux-gnu.tar.gz": "ad97b6e3ed1e6701ceaa1bad7f2da391546d27b121d967b606bd48542f21c669",
+    "rustc-1.58.1-aarch64-unknown-linux-gnu.tar.xz": "330e7ac9cf685d4f7fb6f32fbe0374815fb7866dff13a34efa727e6853b00650",
+    "rustc-1.58.1-aarch64-unknown-linux-musl.tar.gz": "156c5909cb6c9b5d96662f2eec87edefcdf019783082745b9abaeb97d1d45307",
+    "rustc-1.58.1-aarch64-unknown-linux-musl.tar.xz": "ad1e98337de63f7cd9ab79ffbd277122f23603a0d2022dc17e58dae042f87347",
+    "rustc-1.58.1-x86_64-apple-darwin.tar.gz": "859ea96ca53ed6480333273ccd39c0f9a487d7f288a5fd2646c3907353402fce",
+    "rustc-1.58.1-x86_64-apple-darwin.tar.xz": "a781aef0271351a029fd74df5e275631b65809727cdbbde3ab8e6ba69ecf7e75",
+    "rustc-1.58.1-x86_64-pc-windows-msvc.tar.gz": "31bc5359886854fccf16956a92c4205372df0ba1be19642879a0e9d6441a069c",
+    "rustc-1.58.1-x86_64-pc-windows-msvc.tar.xz": "ab584ed6038748d576fc718b3dcca7695aa3ee454ead0363fb93d67a0f7ac2dd",
+    "rustc-1.58.1-x86_64-unknown-freebsd.tar.gz": "ccc043fbf337adda1dc66611f8b8eea3d2fd9e1cee9adc1a07d1a3c4c0b4711b",
+    "rustc-1.58.1-x86_64-unknown-freebsd.tar.xz": "63b137db93cbbfdf7c585f24f9ebf0f0b1ed96054042b66bfd4a4bd217e0c7f7",
+    "rustc-1.58.1-x86_64-unknown-linux-gnu.tar.gz": "1bab764b75bec5b83ec88f6cf7e6127f0bc5bf64307277d1f5ce8838a8b8a415",
+    "rustc-1.58.1-x86_64-unknown-linux-gnu.tar.xz": "95627658e0a3b59a32f7b9325968af2ce875d4eb1df9bc0952afd8f8776b3e29",
+    "rustc-1.58.1-x86_64-unknown-linux-musl.tar.gz": "626cfaf717b3e05d2e20726ecbbd7026edf8a816de06ef0f499e5a27339c1310",
+    "rustc-1.58.1-x86_64-unknown-linux-musl.tar.xz": "026ec08a186f63569371afa0d3cb687243a0743ce6ecae35d4e0ed7558954ccb",
+    "rustc-1.59.0-aarch64-apple-darwin.tar.gz": "caac78491d8f0844bb9a512989a409c35ff681a131495e7ebfacb69ba006bbc1",
+    "rustc-1.59.0-aarch64-apple-darwin.tar.xz": "337623ec9bfc9a1ad3b7e15c595a0d1d1881f688e61e5b59f9d9b023d465d074",
+    "rustc-1.59.0-aarch64-unknown-linux-gnu.tar.gz": "04d4add5530d247214ec8afd32f2c91d75b219035130b877e4769cebcd4174d8",
+    "rustc-1.59.0-aarch64-unknown-linux-gnu.tar.xz": "d9789013ef6edd76eae3e7427b48f420a036ab3ee2af883e60baa33a9e1c23d7",
+    "rustc-1.59.0-aarch64-unknown-linux-musl.tar.gz": "a50567a08ec5a33bdb60b4a6c4572cb85c2e48429ed6d98a28580ca7ed82d8ed",
+    "rustc-1.59.0-aarch64-unknown-linux-musl.tar.xz": "76d1b1671a0d68aecda7a707186e3e6d7a58c156f048c60804835974aa5abb02",
+    "rustc-1.59.0-x86_64-apple-darwin.tar.gz": "eb5b613800c75882bed9e3bb48c325aac0e5ce418ae2b19f51e4ccf7e4781e0b",
+    "rustc-1.59.0-x86_64-apple-darwin.tar.xz": "1cad5f80f6778ba47ee3675174103dd08864e116f961fb84cd51201f28ebcabe",
+    "rustc-1.59.0-x86_64-pc-windows-msvc.tar.gz": "e838ecdba060b4ad3d0becc08027c9598977db40ac1f4e5fa9231725110ea06b",
+    "rustc-1.59.0-x86_64-pc-windows-msvc.tar.xz": "22c14602552ddaec7f8d684d89e098620e3b195a4b3c4c2de964ea08a30a0d52",
+    "rustc-1.59.0-x86_64-unknown-freebsd.tar.gz": "053fe53aa72e9400b3657049cb0352a26268bd5a81a2b09500ff2cb150c32767",
+    "rustc-1.59.0-x86_64-unknown-freebsd.tar.xz": "0ebe251fb86b7b7c824e0492aab3b4973854ab7787d103b6ddba3014a768afb5",
+    "rustc-1.59.0-x86_64-unknown-linux-gnu.tar.gz": "e7ed041c93b77a7d986aa198d28f63ab96493fdf164bd28c8785c5b31a9e62d9",
+    "rustc-1.59.0-x86_64-unknown-linux-gnu.tar.xz": "838de1fef855ef7733a87862c2575e8da9f3fa11fd0a8ce05c293038ea92356e",
+    "rustc-1.59.0-x86_64-unknown-linux-musl.tar.gz": "34e7b33acbffd2012906249509a0d364692767a15a54d10e67122361703ee811",
+    "rustc-1.59.0-x86_64-unknown-linux-musl.tar.xz": "e0b543b36f8b3471975e5982f7c93894947af315932dd3305d1cf5763c4f5d4e",
+    "rustc-1.60.0-aarch64-apple-darwin.tar.gz": "fc864d34c78b4d2509d13c10680321946b87ddd0b2f6d4c6c5bb711db461dd17",
+    "rustc-1.60.0-aarch64-apple-darwin.tar.xz": "4443c2cb3a10025e51a24b13da208b8a94ce13d1899d1f2082d5e2cd28f88696",
+    "rustc-1.60.0-aarch64-unknown-linux-gnu.tar.gz": "0e1ada844aa2f0fa9c1dcfd9352ddd400f67890131eb5873fd3e9ec700b911e1",
+    "rustc-1.60.0-aarch64-unknown-linux-gnu.tar.xz": "f5b24f2bc30db4b8efb7eba7db86fd5db0bc283631b4c918794e9217fca32822",
+    "rustc-1.60.0-aarch64-unknown-linux-musl.tar.gz": "fe1e5d34fd09b6c8b923cf7454f84a5471fe76ff5a58255e5647a959e43d323d",
+    "rustc-1.60.0-aarch64-unknown-linux-musl.tar.xz": "09b1b227109e4fdb30cc1795e13fb7cf8912caf3e00618ba7213980d7f158673",
+    "rustc-1.60.0-x86_64-apple-darwin.tar.gz": "6569aa1b0959fa7f73fea4d6dd01059132c83d1d8c06216726077cf9e6883857",
+    "rustc-1.60.0-x86_64-apple-darwin.tar.xz": "bbf441c3abf5ac0965a237c09eaa609207726cad2c387b5bc9dfa7c12c0c0409",
+    "rustc-1.60.0-x86_64-pc-windows-msvc.tar.gz": "aa1c8dac9b0afbe5b7a985f08bcc2b06fdb2a902850e06e0a70a23ee943ebb0c",
+    "rustc-1.60.0-x86_64-pc-windows-msvc.tar.xz": "8be10a979fbd4fd34e9529baac6358d140a9acef8112eb56956864631970baaf",
+    "rustc-1.60.0-x86_64-unknown-freebsd.tar.gz": "7771457aa6f080fcc5198e9b645682e43efef5a27a66f3e9bc6d18d6c99bc1c0",
+    "rustc-1.60.0-x86_64-unknown-freebsd.tar.xz": "1fb29ce37e10a60e95ea6887b6a15dc256f52d4ee9948f1d6a77eff6c50023b9",
+    "rustc-1.60.0-x86_64-unknown-linux-gnu.tar.gz": "d68a0566627ea0d481ee5e57c1bfc995c10ff55ffad34b2508c747429c3bbd6e",
+    "rustc-1.60.0-x86_64-unknown-linux-gnu.tar.xz": "fc0b41c15e348ad0eeb7a6c015a922a2ac95e9577e531635558b26d99399f315",
+    "rustc-1.60.0-x86_64-unknown-linux-musl.tar.gz": "4ce8a7c4ae8761c9fbb74e602d813811a005be5d4eb40d24688a367f429c40d1",
+    "rustc-1.60.0-x86_64-unknown-linux-musl.tar.xz": "0b8b5261575575bae6768a27fcd43b01784ee7e29249ca8fd7b1d3b5e1fab5a9",
+    "rustc-1.61.0-aarch64-apple-darwin.tar.gz": "512c774a41c816c53ecbbb584cacdc582b8da1334193ece4eea1e5d0b0730906",
+    "rustc-1.61.0-aarch64-apple-darwin.tar.xz": "6b52e1fdf6066e8df474776c3f090b945ec9ac4de4d9419c86e92e992eb3462f",
+    "rustc-1.61.0-aarch64-unknown-linux-gnu.tar.gz": "cec2afb78b5f0d3303cd6629232dcbd9f9dfa0d5e99b8ca0a95b77d570b1d591",
+    "rustc-1.61.0-aarch64-unknown-linux-gnu.tar.xz": "c996de6391e3ea94629fbc09b03bce186fcde345159f43ec95a82c500adb5e94",
+    "rustc-1.61.0-aarch64-unknown-linux-musl.tar.gz": "d13e8bcf0972ec13174b8aa17df08d74b32ebe765b7cb49dcfa5f308adab54ce",
+    "rustc-1.61.0-aarch64-unknown-linux-musl.tar.xz": "412bdcfc50494267063f356e09679927e684ce298783f6f587184d6c4993fa04",
+    "rustc-1.61.0-x86_64-apple-darwin.tar.gz": "126b7c079a3b70cb60e0be76846862478a668079373124054227245f69378af8",
+    "rustc-1.61.0-x86_64-apple-darwin.tar.xz": "e8f3dd3887544a38eb12a66298f1c579f4d6456d037ea4d22e4348866c336b8c",
+    "rustc-1.61.0-x86_64-pc-windows-msvc.tar.gz": "ddc55e2f43dc88d2eead12d108c43fdb88f89167fa11affc1e6d6bad7f8a1d06",
+    "rustc-1.61.0-x86_64-pc-windows-msvc.tar.xz": "f331c6f9b6235bb367397acfbc4370588126b8abf807ed0c7aa8018bd3faef79",
+    "rustc-1.61.0-x86_64-unknown-freebsd.tar.gz": "0db77e24813108a0c531a17daf1dbfbe2de8b40c3701f1cf2ad6fdbd9ae77a21",
+    "rustc-1.61.0-x86_64-unknown-freebsd.tar.xz": "7cc77cf9b88a7b821fcd7d5d0bc15e843e66a798cf5718262b964bf753b3866f",
+    "rustc-1.61.0-x86_64-unknown-linux-gnu.tar.gz": "708a8f8b9ebda188e133695a12c96ef7875723bb3ad2ed2a2b6a20ebfcd57ff3",
+    "rustc-1.61.0-x86_64-unknown-linux-gnu.tar.xz": "21c4613f389ed130fbaaf88f1e984319f72b5fc10734569a5ba19e22ebb03abd",
+    "rustc-1.61.0-x86_64-unknown-linux-musl.tar.gz": "6db0895000c60d74ca068b2f49dcf787fe8b01c78533e85695291b457253a83d",
+    "rustc-1.61.0-x86_64-unknown-linux-musl.tar.xz": "89cb72cbc493cb5cd8e43830009b4a1a5bfd472246ae184157868c9b0607bf6c",
+    "rustc-1.62.0-aarch64-apple-darwin.tar.gz": "0e360dba315cf9000e16cceaa4e569b77adede57a71d4ead447ce11500299469",
+    "rustc-1.62.0-aarch64-apple-darwin.tar.xz": "f46b4fcbc88b4f372c7f997b8aa65eb79331b4fba269e03adcd0e1d6c058e6db",
+    "rustc-1.62.0-aarch64-unknown-linux-gnu.tar.gz": "34f107285727f7d53e9e3128f05c5f258ef10cf03658f5723a2599890ae265cc",
+    "rustc-1.62.0-aarch64-unknown-linux-gnu.tar.xz": "0fa320a19d41dcfc592bc006f5e9eda8e3b972598a26c96ad64eedd868516df3",
+    "rustc-1.62.0-aarch64-unknown-linux-musl.tar.gz": "1862262b348b840a823fbcde41e068b5fffb76a27f0498f0ddf1da8f93e8bed0",
+    "rustc-1.62.0-aarch64-unknown-linux-musl.tar.xz": "352905af751a4f3920f972209889e80115882cbb910e580df9d5436aa38b80bf",
+    "rustc-1.62.0-x86_64-apple-darwin.tar.gz": "780e23e6c5dd46a74357349591cf576746fa5a28156b0f4ef60b64c2e7cd1ee4",
+    "rustc-1.62.0-x86_64-apple-darwin.tar.xz": "94d11ebcd867e45a548398e720e4b65a32d3fba60b8bfb689d5034266a676822",
+    "rustc-1.62.0-x86_64-pc-windows-msvc.tar.gz": "a40214b9280a5a9bc3f251afe8fd59edf270c6f57be8e5b1b9a64665d5505bbb",
+    "rustc-1.62.0-x86_64-pc-windows-msvc.tar.xz": "66b8e7957fe0b0d5eb48a32b93c7177f0f15ffd285486c376abff5783600bc2b",
+    "rustc-1.62.0-x86_64-unknown-freebsd.tar.gz": "eab2a88a4ff51811b90acbb6957a192031de4392eca3f679307f9c55e7fb7749",
+    "rustc-1.62.0-x86_64-unknown-freebsd.tar.xz": "fc72a5043866661837e705086d6ccf6127d684e8353d052343d5fd212e9915c6",
+    "rustc-1.62.0-x86_64-unknown-linux-gnu.tar.gz": "892752484043f7a129f7c80fb5b71c7745fbfd8542d4ed4c7c7f18898a7add16",
+    "rustc-1.62.0-x86_64-unknown-linux-gnu.tar.xz": "e7f71f4ef09334ddc9ec8cbf2f958d654e36f580c95f8fec6d5c816ce256dbd6",
+    "rustc-1.62.0-x86_64-unknown-linux-musl.tar.gz": "8d3422124f774eaa56dcc2234886af0a4a5f71ffccccda403304e0658809b5bf",
+    "rustc-1.62.0-x86_64-unknown-linux-musl.tar.xz": "8c8e94ed162ff957806b4beb81ad5272c39cf116f2d96f19ccc82b7e805af11a",
+    "rustc-1.62.1-aarch64-apple-darwin.tar.gz": "f5cef5db93fcd2565d6d5f91b04396668bad560352ca445c9c296ba534de92f9",
+    "rustc-1.62.1-aarch64-apple-darwin.tar.xz": "d681a505db3b58559369b5524e3939f3d5481e539e6abd62882419e7c1ff85c3",
+    "rustc-1.62.1-aarch64-unknown-linux-gnu.tar.gz": "7f61cee6f69fb6895cef5e5d077504ca69dbf35535defd5182b7e60582b7f1d0",
+    "rustc-1.62.1-aarch64-unknown-linux-gnu.tar.xz": "25f4de7534d12c9a67534b96e24f4dde3366d0df85169f54e2fcc3b3901ee1bc",
+    "rustc-1.62.1-aarch64-unknown-linux-musl.tar.gz": "8572fdcdd88d2052ae518f2b00f3d9029324abc9cd61c0fca2430f5f8f29fd3e",
+    "rustc-1.62.1-aarch64-unknown-linux-musl.tar.xz": "169a91024496b82c97f8d544fc766d3fcdc0fc3aae32d1bc1d7ec848ff284d27",
+    "rustc-1.62.1-x86_64-apple-darwin.tar.gz": "3c604cdd8ff6617c7ecc1b38a1689772ec4392dd0d1624a5e435f6db6ed13d71",
+    "rustc-1.62.1-x86_64-apple-darwin.tar.xz": "22a70770f0f5c793bf8c4a33887439b42b1e7a3cf7791ab11bd25f87cca43705",
+    "rustc-1.62.1-x86_64-pc-windows-msvc.tar.gz": "6f3f3e78a05502b946e3f00a10da5f8942d9a1aa4c07e2a95e3a41669dc749c3",
+    "rustc-1.62.1-x86_64-pc-windows-msvc.tar.xz": "41a4aa1522d32aceba23ab4eaa9517afa5ab41372e33934d839742dc46052826",
+    "rustc-1.62.1-x86_64-unknown-freebsd.tar.gz": "2da8b3263f91f3c773ef90ea9b4266c8df555728f87fcb5a8ee9998413727b42",
+    "rustc-1.62.1-x86_64-unknown-freebsd.tar.xz": "77870f288f2099e14fc8c1dce21574c7aa11c766b05523077eccff6d91a9e061",
+    "rustc-1.62.1-x86_64-unknown-linux-gnu.tar.gz": "4066d5f897864f88dbe55fdc190881272132d3acf031f6aa29e1b19a3b589c9c",
+    "rustc-1.62.1-x86_64-unknown-linux-gnu.tar.xz": "10a269b15d569dc07fa7bd4a701784d5a897395622891e1003710a6a386fcf09",
+    "rustc-1.62.1-x86_64-unknown-linux-musl.tar.gz": "54cb96ad8db976c4deed44f202522b4f02235af578c7219e9e11865b2113cc9c",
+    "rustc-1.62.1-x86_64-unknown-linux-musl.tar.xz": "1818c682fc8e48537c1c43a9fd7eee4bb12ae24c201f1ac7b0e889ab01b32f2b",
+    "rustfmt-1.48.0-aarch64-unknown-linux-gnu.tar.gz": "28f7d1ef37c034033eb0e30a13e5f0ad5bbc506adb8a8a9c03adce2b0d4842d5",
+    "rustfmt-1.48.0-aarch64-unknown-linux-gnu.tar.xz": "24f5e32213cd81bbb854f836c4da44e31652b4f6dff3a9b5455d5433bffacf9f",
+    "rustfmt-1.48.0-aarch64-unknown-linux-musl.tar.gz": "e6efa0fae347f97dca3b892565302d35b4cedfee7cb6e2b5fcdb2801074fe018",
+    "rustfmt-1.48.0-aarch64-unknown-linux-musl.tar.xz": "7579db65fd6e6a9a2273347a1d3f2e3ad577592c565552270265571ce6d3f355",
+    "rustfmt-1.48.0-x86_64-apple-darwin.tar.gz": "cfe593a9446e7dfa52ded8a7cca174ba0c2d1cac6e865d04e0890282f25d22e2",
+    "rustfmt-1.48.0-x86_64-apple-darwin.tar.xz": "bc67f04503364006f85855ba7231ae657cc937cc0ab9286913f5a45aec7da944",
+    "rustfmt-1.48.0-x86_64-pc-windows-msvc.tar.gz": "96d779befe8bca88d3cb69723d401d290a4a637746e8cc119126cfe9d5c773ee",
+    "rustfmt-1.48.0-x86_64-pc-windows-msvc.tar.xz": "bb05b952dd4dc0f2c922f1b8e10185ab0630a635616eadbe8603cbf6c8caa3a9",
+    "rustfmt-1.48.0-x86_64-unknown-freebsd.tar.gz": "ae84ca6d0841e6be0f140efd67693a1a50520e6610f26e5ee57a15b5a9947588",
+    "rustfmt-1.48.0-x86_64-unknown-freebsd.tar.xz": "1fb64864a7d0d218eea4e41e4072f49c7e7554ad335751c7197838f678b434c9",
+    "rustfmt-1.48.0-x86_64-unknown-linux-gnu.tar.gz": "12d185cfd6ce15e4df3590bf1b9b3233df75e7aa14b42a9269b4235347a14b2b",
+    "rustfmt-1.48.0-x86_64-unknown-linux-gnu.tar.xz": "79925c8a6b651fbbfa159ba2f28875c6b61cb6da30d1450e7acf041cba83bca3",
+    "rustfmt-1.48.0-x86_64-unknown-linux-musl.tar.gz": "1a8674af3fbe9616426a02fa4115057e411e7dfcc0f7bb377ee27e3a3bec15f4",
+    "rustfmt-1.48.0-x86_64-unknown-linux-musl.tar.xz": "482e1b85d1fab287ae6aacbaa5108e310827ee7007c3917cef401e04f8a50ed5",
+    "rustfmt-1.49.0-aarch64-apple-darwin.tar.gz": "4f03d2913ecff9b534bc6c2c7684d0884958a1c8f12668fea86c0aa4371231ae",
+    "rustfmt-1.49.0-aarch64-apple-darwin.tar.xz": "e44c8c1aa133db189d37b3e0b46bbb52075099b50941515c04c9ee7dcc553899",
+    "rustfmt-1.49.0-aarch64-unknown-linux-gnu.tar.gz": "9ef9c477911b3718539defa18ef5838b6f479e646d82e410643e5e8cb21791dc",
+    "rustfmt-1.49.0-aarch64-unknown-linux-gnu.tar.xz": "768545967c75b2b7ac8de3fd22a9e2aa139e4f22ebcc38cfd0c4e0bd672acf6f",
+    "rustfmt-1.49.0-aarch64-unknown-linux-musl.tar.gz": "40dbcf80a23055cf2245a6bbf5e16c0fd0300076e279b8e29d66de8af1d5409a",
+    "rustfmt-1.49.0-aarch64-unknown-linux-musl.tar.xz": "0bea0ab5fddb38ed9c62f9ae353f633c69bc19888f8816409e697033fa870981",
+    "rustfmt-1.49.0-x86_64-apple-darwin.tar.gz": "e505092d5525dca1012d57e9c9dfd048cbbe2890e02e1327c1a0af44cd3d7aa1",
+    "rustfmt-1.49.0-x86_64-apple-darwin.tar.xz": "8961852b61dc2ba8691e9c75103e9f7d384d8b66f3122b11e7f2a6c33237e78c",
+    "rustfmt-1.49.0-x86_64-pc-windows-msvc.tar.gz": "e094798983f77ef95e28db1c561915f992f3a190813162b33e2bc6942485a485",
+    "rustfmt-1.49.0-x86_64-pc-windows-msvc.tar.xz": "f2af88aa992806f9952bc2ec441f97578872370bfefb221c5598672feacb1d31",
+    "rustfmt-1.49.0-x86_64-unknown-freebsd.tar.gz": "ed7465ddcc654b32822e48a8e91cd58391c36210b332f054a9ab5c1e5733ae74",
+    "rustfmt-1.49.0-x86_64-unknown-freebsd.tar.xz": "1bf339e919bde431de75efecff9662d063d821987835183bc7c411729fad9f14",
+    "rustfmt-1.49.0-x86_64-unknown-linux-gnu.tar.gz": "a1b1a9c06b9958116c37e212c5e04d921f78967e9f9956f6249a16e033f67a03",
+    "rustfmt-1.49.0-x86_64-unknown-linux-gnu.tar.xz": "7c27858367164a41d54a09c62411b6cb37c74cd1b00944c91fc028e61aa785ba",
+    "rustfmt-1.49.0-x86_64-unknown-linux-musl.tar.gz": "cad26f7f7f9c67f32e03a07ad84f9dc9b7f755213cc0cc596d2971836bcc0cc1",
+    "rustfmt-1.49.0-x86_64-unknown-linux-musl.tar.xz": "a0cac56eb73bf9ce635e5e5789b0549f5b86421c85188a125a4438c59a58bd7d",
+    "rustfmt-1.50.0-aarch64-apple-darwin.tar.gz": "1dd932c23b3e70c1183dcb58c431ddd97df72c173b4e28d3a3b008132079a914",
+    "rustfmt-1.50.0-aarch64-apple-darwin.tar.xz": "c75b8cbe477ef2ed40d477275a0d7123858e7ca6e7e0a4058adb4e5aed251a38",
+    "rustfmt-1.50.0-aarch64-unknown-linux-gnu.tar.gz": "0bddf9a1b55bcdae7cef3b37c56ba5816a2b2c932d57dbe7cfc73acce65f5aff",
+    "rustfmt-1.50.0-aarch64-unknown-linux-gnu.tar.xz": "98a5159169f06e30d39380ad8e6cd1b08319c0c043fa19845474c0fbabbb6bad",
+    "rustfmt-1.50.0-aarch64-unknown-linux-musl.tar.gz": "c885b27194ad8405d2c75ff134d81c5a51c24ffcab2ce5f3684e8de8b353f66b",
+    "rustfmt-1.50.0-aarch64-unknown-linux-musl.tar.xz": "8b12a914ce0a007bc2a936edf4919a488681ee05c9fc6c6a91b309828bc9972f",
+    "rustfmt-1.50.0-x86_64-apple-darwin.tar.gz": "90108b9bf4b529d12096d7e7c3ef97e77d2304ea142cd0352d0b9814df80c7d2",
+    "rustfmt-1.50.0-x86_64-apple-darwin.tar.xz": "3b9067472587065e463f153011e57f830967e56428c5fe07798f884ea6437572",
+    "rustfmt-1.50.0-x86_64-pc-windows-msvc.tar.gz": "4ee791749b1312091ecb66bee916b0f70fa71cfae1315de8d3351c6da913d5f2",
+    "rustfmt-1.50.0-x86_64-pc-windows-msvc.tar.xz": "100b3778d02fc5102345d35f5e158d508ff4aba8ce2b548e983fd5add820fbf1",
+    "rustfmt-1.50.0-x86_64-unknown-freebsd.tar.gz": "037c575d92f87ee372b2bfb3b802c8a86690133ee1c82a5a8402ef9e97780f77",
+    "rustfmt-1.50.0-x86_64-unknown-freebsd.tar.xz": "eb03eac2c48dbfc7b548906848f76103a4e9375421ecde9d2909520ed58e82b1",
+    "rustfmt-1.50.0-x86_64-unknown-linux-gnu.tar.gz": "2537e788067e56f263ab52869a6efbbf6be9f57ad6b14fc33ddab7cff79a3768",
+    "rustfmt-1.50.0-x86_64-unknown-linux-gnu.tar.xz": "4b7664caa568e4ea9888b13024fb7e210caa684a7d95fde8399560476a59030c",
+    "rustfmt-1.50.0-x86_64-unknown-linux-musl.tar.gz": "6f412c518e078f8891578b174d884cddf992b5fb72b14952f71d5ee8c2a743d8",
+    "rustfmt-1.50.0-x86_64-unknown-linux-musl.tar.xz": "f0d9e3e77af8852cd9bf906904ab4d70a9a3d76e3243358cd2a6c7f7f1c6c0e2",
+    "rustfmt-1.51.0-aarch64-apple-darwin.tar.gz": "2f6966b51abc33a76b497776f061d049dc9c928aa09ea773a3404396002b33d8",
+    "rustfmt-1.51.0-aarch64-apple-darwin.tar.xz": "a045cbbee7e43da6acf06aebd83b52cadb7ffc703d16e0f271ef7421424829a7",
+    "rustfmt-1.51.0-aarch64-unknown-linux-gnu.tar.gz": "5dfa947dfc221ecb282a082263d79c5faf0c586acfcf7e416357d3e5107675c8",
+    "rustfmt-1.51.0-aarch64-unknown-linux-gnu.tar.xz": "fcbd0f9396e259de1f2093a500322b64924c4cae3270eea3a1176d4429801b61",
+    "rustfmt-1.51.0-aarch64-unknown-linux-musl.tar.gz": "0fbca6b470e8c888b03adb501d45db68a5c19dcc05b8f5a1d73d5f9a4d1b3c01",
+    "rustfmt-1.51.0-aarch64-unknown-linux-musl.tar.xz": "baef27c99bae70089a080a6eb4e6c1b8eb413899ea3d5f5cb1d667b22ad04082",
+    "rustfmt-1.51.0-x86_64-apple-darwin.tar.gz": "b30448ce429f2920b5a4d1bf50b40f4d251188f29ffaa6af12bfb131d993c5e0",
+    "rustfmt-1.51.0-x86_64-apple-darwin.tar.xz": "03a27655d659327e6537829afcc6ddf2ac56acc4b431a20468d484bbf74fd2b5",
+    "rustfmt-1.51.0-x86_64-pc-windows-msvc.tar.gz": "520e8eaa186acc4f978fd30a34566b11073ed3396628e3dc192aa2862be42edd",
+    "rustfmt-1.51.0-x86_64-pc-windows-msvc.tar.xz": "6e1717b13d631905d1339a498f5aee3e82ef33798d4fb40d21c432960ac38a15",
+    "rustfmt-1.51.0-x86_64-unknown-freebsd.tar.gz": "3693bd333303984ce0854452c31b5720cf6d8fa02f69062dc28b7db3b677bec2",
+    "rustfmt-1.51.0-x86_64-unknown-freebsd.tar.xz": "ff725ab1a898e59d1fa43ecd4edcf56d2ba6e212315d56b6fea784630905179d",
+    "rustfmt-1.51.0-x86_64-unknown-linux-gnu.tar.gz": "e50c03cbf104de7788eed8d5d923b5dc7555f12a3c045275751633121ce74d43",
+    "rustfmt-1.51.0-x86_64-unknown-linux-gnu.tar.xz": "2a4f5e521f914463cd3384f210d382fd53f9892f03fa20f5ddecc6047ed61f62",
+    "rustfmt-1.51.0-x86_64-unknown-linux-musl.tar.gz": "6798ff8f805cf1ddc187c4567fa7f3e32b9f347477b0956869caf1f31a99c374",
+    "rustfmt-1.51.0-x86_64-unknown-linux-musl.tar.xz": "2c383f6e4a7d622caa42a9189ca1c0a90c837c6b61db4fdd6c6af4c4360359eb",
+    "rustfmt-1.52.0-aarch64-apple-darwin.tar.gz": "263296e44decd784b468de22519f7a22fa3dce3358bd96aab627f60b1f9778db",
+    "rustfmt-1.52.0-aarch64-apple-darwin.tar.xz": "d5baa77ccb90c0b1994ac8bcebc8ac74ca4c9b37a3a14d3dab531f255f51eff7",
+    "rustfmt-1.52.0-aarch64-unknown-linux-gnu.tar.gz": "f70260c7f6e39e20b376389d75e8c3518608860a3ce7647abeff626204341ea7",
+    "rustfmt-1.52.0-aarch64-unknown-linux-gnu.tar.xz": "1527c47e8958b9b650ed7b4bffdee30d54700765cfed7fd03a98210a74a02d62",
+    "rustfmt-1.52.0-aarch64-unknown-linux-musl.tar.gz": "97190a6c8b6044c0fb375c71d672204adcf62d1b6c5d747715cc94a0ae631e04",
+    "rustfmt-1.52.0-aarch64-unknown-linux-musl.tar.xz": "c072e0c3c94cb73e25082f2b77621c9ecca143ee34698294a2fd5d7db4f3bc78",
+    "rustfmt-1.52.0-x86_64-apple-darwin.tar.gz": "c3841b8568c00068ce6d264688320466c95307971a64adbb2b6ca6d5e54e158f",
+    "rustfmt-1.52.0-x86_64-apple-darwin.tar.xz": "eb0cb5ee6f966fdc2dea4516a11b04ff8369c773913fbdcbb862652aacdc5039",
+    "rustfmt-1.52.0-x86_64-pc-windows-msvc.tar.gz": "eba78266b8a381c2fbb07c4b3a1571a6fc102e1b9fc298ae362ab8da0aca41e5",
+    "rustfmt-1.52.0-x86_64-pc-windows-msvc.tar.xz": "12be7726b02381c45e628312948e1515d0de966b6727fcc0240f3eec2a43a0d7",
+    "rustfmt-1.52.0-x86_64-unknown-freebsd.tar.gz": "e150cd81ac2e7036ed9ff55b93c62cbcbd6fa2025371fda568a32a071cf94020",
+    "rustfmt-1.52.0-x86_64-unknown-freebsd.tar.xz": "d86d91d17545929f0a537cf8b4680357d4812cd81cf879040b9aca00e4559686",
+    "rustfmt-1.52.0-x86_64-unknown-linux-gnu.tar.gz": "7563b04b2900e9bef6360fb445baf00a8584072142d4554eb54f8109ac7486c5",
+    "rustfmt-1.52.0-x86_64-unknown-linux-gnu.tar.xz": "2053e365ea14a46ef4a2f2bc1a35828bc0b2b15886aeb0e04bf0af5bc59ad693",
+    "rustfmt-1.52.0-x86_64-unknown-linux-musl.tar.gz": "ba74b93b4a70a7070d516a332a589b10bd161ab8b36826052ffa0569b1d6b5e6",
+    "rustfmt-1.52.0-x86_64-unknown-linux-musl.tar.xz": "d0e27650023a5fe2f21a0c558d6d946786136acf6bc3aff75dea3468239df98b",
+    "rustfmt-1.52.1-aarch64-apple-darwin.tar.gz": "b02cf93d230a4147f2551e012b314b93d2d448ebc4ee71896918c488d8e6e446",
+    "rustfmt-1.52.1-aarch64-apple-darwin.tar.xz": "7d21714d9f47594b2ea85b3e83d96922993dc21cd16ff4fe1553b95a13f2be7d",
+    "rustfmt-1.52.1-aarch64-unknown-linux-gnu.tar.gz": "727d227f5e1e0ab3bcaa4f4adfe6b5e21fb70279b4d5825cb95fc6983c3cd9ae",
+    "rustfmt-1.52.1-aarch64-unknown-linux-gnu.tar.xz": "4c8501c349c0955e19034089622e8373278723fd3afa075a9fb0ff4e5506134c",
+    "rustfmt-1.52.1-aarch64-unknown-linux-musl.tar.gz": "f707919fb5ad7d0db02fd2e63293153b20043c4511385840835d6a8ae7087d96",
+    "rustfmt-1.52.1-aarch64-unknown-linux-musl.tar.xz": "2c098fbc5eb1ed8f9cb1338d19939ebccb249f79ad2c4331dbf8bdca1b44e528",
+    "rustfmt-1.52.1-x86_64-apple-darwin.tar.gz": "fc2d3cfd2742800745a97a3cb69a005166992c756dc9fd191add1f37842210e4",
+    "rustfmt-1.52.1-x86_64-apple-darwin.tar.xz": "b1610f304a799fda1dc12e6611b333b4a767142f77689df1c3558aa47cb4f122",
+    "rustfmt-1.52.1-x86_64-pc-windows-msvc.tar.gz": "d5cf3e6be769dd266e66e0351062ff1317b537bf0f4e95def2a8f518f6e6571b",
+    "rustfmt-1.52.1-x86_64-pc-windows-msvc.tar.xz": "c52b78ae666456d035ece5666b8c3229a7a32e1eeee3126136641bc6d04e3b0a",
+    "rustfmt-1.52.1-x86_64-unknown-freebsd.tar.gz": "ecfebd807b2addc80d102f4909f42c71104039e1f7d9b7bd7e6ebdb5072d8d6f",
+    "rustfmt-1.52.1-x86_64-unknown-freebsd.tar.xz": "dc08c04bdd48a90add9a86ba3367d42c400c23a840b53acf0a61d23e5b2bdec0",
+    "rustfmt-1.52.1-x86_64-unknown-linux-gnu.tar.gz": "1717c5eeae799b0ceee7f8b7180543713d08ad72e03af77b05dd1e69e32b06bc",
+    "rustfmt-1.52.1-x86_64-unknown-linux-gnu.tar.xz": "8952de9ed72cd1ca65ecd37b457dfb9e9f83eab9b3e5c9fb18944a6206a0df73",
+    "rustfmt-1.52.1-x86_64-unknown-linux-musl.tar.gz": "5b19c462dc70b632e44189c1384aa753bdc20f9a9ad66d35dd34d321cfb19b1c",
+    "rustfmt-1.52.1-x86_64-unknown-linux-musl.tar.xz": "7bc29abbbac6532c00248f71ad0bb79df974790f4cd236e0724b2441eb53e952",
+    "rustfmt-1.53.0-aarch64-apple-darwin.tar.gz": "4a29c3663a2c0f5133ca21e1c12223e9ef4fa3f8b1f29b98709ad588aa52c140",
+    "rustfmt-1.53.0-aarch64-apple-darwin.tar.xz": "26fd463ed3ee4803359f1a7269396cf7df6f9ea6e483e9fcdcc7113624f5fa8f",
+    "rustfmt-1.53.0-aarch64-unknown-linux-gnu.tar.gz": "d5157ddaf978a3619292a5b133390eea3a049b7903eeef25ded9f24c995a7c58",
+    "rustfmt-1.53.0-aarch64-unknown-linux-gnu.tar.xz": "4c05130816b8b15c9eca1f8da4dd7f3b2eb324e57c54f9c035d75c797736e5a2",
+    "rustfmt-1.53.0-aarch64-unknown-linux-musl.tar.gz": "91006e773898a40af2f0e843e7f1111ce07320f1507e61d8c9a4ae216dfe245b",
+    "rustfmt-1.53.0-aarch64-unknown-linux-musl.tar.xz": "bc105c3bf8199ee64777849429e6bb50c539443692d9d460c0f9a8dcd5f0bd65",
+    "rustfmt-1.53.0-x86_64-apple-darwin.tar.gz": "b4db708e078615e1d21ad13acfc4b5943b3548d094d397c3b14e24dda3bd78ca",
+    "rustfmt-1.53.0-x86_64-apple-darwin.tar.xz": "3278a0aef19475719c8c2047143762bd0a6bb15bffd7e3c391e7a08de4b84a3a",
+    "rustfmt-1.53.0-x86_64-pc-windows-msvc.tar.gz": "adead783882f055129268f11d137857bdcac5eb1ccc20ea8ff8edbb67026f6ff",
+    "rustfmt-1.53.0-x86_64-pc-windows-msvc.tar.xz": "6f223d3470a5ea99b40137cd605df6a8549109d5b64746a51b9fe03c7166b4c5",
+    "rustfmt-1.53.0-x86_64-unknown-freebsd.tar.gz": "569c6185ad0868f855b1414a51f9e9eba52a0cbf270c0b674bcb4580eece668b",
+    "rustfmt-1.53.0-x86_64-unknown-freebsd.tar.xz": "72e2b8feee6c0eda43924660dea7927b00a9d8a9dd7f1565cdb9d2d68dcf9dbe",
+    "rustfmt-1.53.0-x86_64-unknown-linux-gnu.tar.gz": "e4e826c678f16c6a896e1226309c12c3677ff9c4bc8065ac6932fc616bb67572",
+    "rustfmt-1.53.0-x86_64-unknown-linux-gnu.tar.xz": "49c070d592740d3cd31ef3ed09b0006d5d65d2a00148766992230fcda1352f77",
+    "rustfmt-1.53.0-x86_64-unknown-linux-musl.tar.gz": "6d2778b35149971308717e6f10c29f189f46003a1bb9490d495906c0ae6aad45",
+    "rustfmt-1.53.0-x86_64-unknown-linux-musl.tar.xz": "39acc4d4777a00d1dd04fc82ecadd1953a98fa896aa976a3bd700a9922972180",
+    "rustfmt-1.54.0-aarch64-apple-darwin.tar.gz": "1823b397d89bc23b1a8ec4df113c5f765a0e91cae655dc59fbf13be4616c0f3f",
+    "rustfmt-1.54.0-aarch64-apple-darwin.tar.xz": "9101a9a148dc94857098d7b58904784cd4e8363f40291cc0326f7519855d7969",
+    "rustfmt-1.54.0-aarch64-unknown-linux-gnu.tar.gz": "82f45f13c8885663461f27ca7d590c341e41cdf2ea76f40d23b90d38d374cb46",
+    "rustfmt-1.54.0-aarch64-unknown-linux-gnu.tar.xz": "bfd1258b2f8c909c3fbdde2ca0d5884ff6e76fc3df66bc7f02e9e63cf8749821",
+    "rustfmt-1.54.0-aarch64-unknown-linux-musl.tar.gz": "fbdfde8d13d08718364a5dfd97f8b99898134a630a4ec13fe8405402688f746d",
+    "rustfmt-1.54.0-aarch64-unknown-linux-musl.tar.xz": "70bdd7f295a0a10bc45781f66560b098964018127f7a2dd3e4eb5006e02a6458",
+    "rustfmt-1.54.0-x86_64-apple-darwin.tar.gz": "e33122e00fa2ba319e229f3a92380e31b2b813398f3a681d0e1b2e6fbe3f135e",
+    "rustfmt-1.54.0-x86_64-apple-darwin.tar.xz": "b7a5a1c50b6ec0c1e7f45d8916d25f58424f5ef08578e09f4c700516be2baec9",
+    "rustfmt-1.54.0-x86_64-pc-windows-msvc.tar.gz": "608da9f9cc59d24c14897febeb0983d0ace04264d91e3ff9dd8b57bb546a2965",
+    "rustfmt-1.54.0-x86_64-pc-windows-msvc.tar.xz": "d0d9258288427aab9e8801cb429f142f6a4fc5896204e1a32cacca33be238516",
+    "rustfmt-1.54.0-x86_64-unknown-freebsd.tar.gz": "4b5098c749c547516ca2c81aabf87617d589ae674cdc48d7636b37cc5017d29b",
+    "rustfmt-1.54.0-x86_64-unknown-freebsd.tar.xz": "b5cd37fe1e008fd734834d32a468e8ae59e8859b17918e5deb19582cf6f0572f",
+    "rustfmt-1.54.0-x86_64-unknown-linux-gnu.tar.gz": "0205d6af87d381b93aa69bc75c0bd44ac5eb006832f0f505a851dc8d22aaf101",
+    "rustfmt-1.54.0-x86_64-unknown-linux-gnu.tar.xz": "dbd8bbb04748d71fc9d299f2f2ba0b05efdfb84ae421d7b9dd1d973abfc93b73",
+    "rustfmt-1.54.0-x86_64-unknown-linux-musl.tar.gz": "34a2321d2f7f57398b6f588f2e219639f0958d444ca283ff0c8d0144d8c09fc1",
+    "rustfmt-1.54.0-x86_64-unknown-linux-musl.tar.xz": "90f7c589a35d6c9ef64aed76c0ad32ec64481773fe1efd3da5bd72e2cfe8c287",
+    "rustfmt-1.55.0-aarch64-apple-darwin.tar.gz": "dad1bcea851e509f289178c7bbd8fca5152efd1876450e353cc77fe5fccd2f46",
+    "rustfmt-1.55.0-aarch64-apple-darwin.tar.xz": "7be531d22ffe63368058dc243f1d92cf1efd5c7f436b823c6a8bef7d61a53355",
+    "rustfmt-1.55.0-aarch64-unknown-linux-gnu.tar.gz": "a0a24a0e5618997218cced0632dfe776315225ee394e8412ef5dcf9e21325b9c",
+    "rustfmt-1.55.0-aarch64-unknown-linux-gnu.tar.xz": "14ad85e17e799e4353a1f3ee21336d8a20ab8fb297a08069f6ecb3a16051f5ae",
+    "rustfmt-1.55.0-aarch64-unknown-linux-musl.tar.gz": "736208df67d87b3ced05764d52de07470f44502c901c48ab6cc6dfe3cab6046f",
+    "rustfmt-1.55.0-aarch64-unknown-linux-musl.tar.xz": "242e5b185a0e3a2349f2cc1d69024d1afa8c1fecc0d5b4b64792384bdf1b0c6f",
+    "rustfmt-1.55.0-x86_64-apple-darwin.tar.gz": "b38a096a59ecc6309bcbea67ed4e50de6d48cdc124ff5b721bf7e929ef4c4fa7",
+    "rustfmt-1.55.0-x86_64-apple-darwin.tar.xz": "6507b8da1c76cc326c82080db8ccfca747ee5b173c2ba9dfefd9b8ff81cd6545",
+    "rustfmt-1.55.0-x86_64-pc-windows-msvc.tar.gz": "49f58043700b33578963faa22dcb993b5d604d7d8cc852ff53f11138f9a20f35",
+    "rustfmt-1.55.0-x86_64-pc-windows-msvc.tar.xz": "1ef0bc9436d37086a3f76ccc958292b8f6dd4ea6c068bfc40e103a3a2ce8e3cd",
+    "rustfmt-1.55.0-x86_64-unknown-freebsd.tar.gz": "5317af05afbcfde0fae7ba4ad5404901b0c611d826c7dd38926a8b08ade53c72",
+    "rustfmt-1.55.0-x86_64-unknown-freebsd.tar.xz": "0e053233b1d400639ae96efbd77f7e08558e4b40f0e679a04c92c8a58ea6d467",
+    "rustfmt-1.55.0-x86_64-unknown-linux-gnu.tar.gz": "ecb58add71d3f3cf8a213fe7b531bc230f8da5cecd835cee6429e76798b548cc",
+    "rustfmt-1.55.0-x86_64-unknown-linux-gnu.tar.xz": "165ee593b88b511b0b6b72dd35f9bb0b060d0f8aa4f4cfafa2f7936658c4021c",
+    "rustfmt-1.55.0-x86_64-unknown-linux-musl.tar.gz": "33bd862bbc9b54745c3e1d400440996fd0e6759c4d482f1a888ba8fafab29c3a",
+    "rustfmt-1.55.0-x86_64-unknown-linux-musl.tar.xz": "83e7afa47c0e0edae31f888c1a776957c7f6a6c47ec334d4ed93719c8c313a13",
+    "rustfmt-1.56.0-aarch64-apple-darwin.tar.gz": "0c1dcc80d2028748c38a4c3360048940a887ca899af577e9f3026c3d1a359469",
+    "rustfmt-1.56.0-aarch64-apple-darwin.tar.xz": "59b98eed11b97dcd4005cd10315a15d222e41b418775e5d19a42c589390e2d6c",
+    "rustfmt-1.56.0-aarch64-unknown-linux-gnu.tar.gz": "3dabc693866f74a956b99f8cac1f1beca6dbc38de6cc095ccdacbdccc18b4350",
+    "rustfmt-1.56.0-aarch64-unknown-linux-gnu.tar.xz": "37775efd58dbd0039164051b207fe98e3ea89bdd5bbd32126ee7247635f15e51",
+    "rustfmt-1.56.0-aarch64-unknown-linux-musl.tar.gz": "9d1b9405dc2cbeb7ff7f2ecb468a42d7a36429e642714de1605eb242947afc88",
+    "rustfmt-1.56.0-aarch64-unknown-linux-musl.tar.xz": "bcce6238e41ab8d503a5a3db7f02d30ab11f4c3d663809b2a6f4e2f760e17db3",
+    "rustfmt-1.56.0-x86_64-apple-darwin.tar.gz": "f8fc28492af2fece8915db0959bb5af354706d63556854f4c149e6dbc9f3c11b",
+    "rustfmt-1.56.0-x86_64-apple-darwin.tar.xz": "d26f83735f516d9cb157b6277ddfd9b8b4607838cc9e4a8a55c6e911a192e617",
+    "rustfmt-1.56.0-x86_64-pc-windows-msvc.tar.gz": "1080a5e5f3957eed2799ce65adf93b8bd8c0a9233c5149d8992c339fe7acab31",
+    "rustfmt-1.56.0-x86_64-pc-windows-msvc.tar.xz": "498ec539ef0a8dde2ec5ad1f4a0ee0e3e25d99f3d19773cad6fa0c1620bbd5d6",
+    "rustfmt-1.56.0-x86_64-unknown-freebsd.tar.gz": "a5e58bbf9407ac7da18df4d385f0988d299b1a71d18ce39fb7d1de15c007f5a6",
+    "rustfmt-1.56.0-x86_64-unknown-freebsd.tar.xz": "ae4967b8bace84a80bec93cd1c601b3eb75370c1e92f42e91e4d0b93f4d6ff24",
+    "rustfmt-1.56.0-x86_64-unknown-linux-gnu.tar.gz": "ce14465427e5919e407af9e58fea0a638aa02515f182a1a1c0b740cbd52a5e5a",
+    "rustfmt-1.56.0-x86_64-unknown-linux-gnu.tar.xz": "3478487fadfff567126889d754373a8c8646b0b683bfdc7e4318cdab0ff7b361",
+    "rustfmt-1.56.0-x86_64-unknown-linux-musl.tar.gz": "98dbc11edb80de0c1303823f890434406c36501d89ee45ba2137d4ef4220db8a",
+    "rustfmt-1.56.0-x86_64-unknown-linux-musl.tar.xz": "bea5ad9e1d607b9afd01777b2f7f1f5294d34d75ab629940da56d85f98334ff0",
+    "rustfmt-1.56.1-aarch64-apple-darwin.tar.gz": "25e64095594e6aa4c25b2dfb8830108ba32af2917c1b1a4a1a966114d85199d2",
+    "rustfmt-1.56.1-aarch64-apple-darwin.tar.xz": "610c0d0d07e5e7e9cd5e2844b396e7d3fa86b4becbb20cf6fcce33788e7872c5",
+    "rustfmt-1.56.1-aarch64-unknown-linux-gnu.tar.gz": "b6d1479d66c16eabcd708246521539a60eee31b1b3b492c20676ebbbcbca23fd",
+    "rustfmt-1.56.1-aarch64-unknown-linux-gnu.tar.xz": "db9b22028fd3244ac37bb585ad0a0b1f0c77fc9ff9a60fb7ce161db486c3c231",
+    "rustfmt-1.56.1-aarch64-unknown-linux-musl.tar.gz": "441f9df760f65a79ce15d79938cf984961cb712639d85e91765abadfc616002f",
+    "rustfmt-1.56.1-aarch64-unknown-linux-musl.tar.xz": "e508feb826b188eba7715e751bd94669f94d8e282a1dcbecc2aa337b8f096cc8",
+    "rustfmt-1.56.1-x86_64-apple-darwin.tar.gz": "fa4e086107b5219228cdd928fd4671f5ab7a1165c39ca79874fd99a0f865b12b",
+    "rustfmt-1.56.1-x86_64-apple-darwin.tar.xz": "8f7b96bf3f5f33b24ee922f28130ed36c70bb312650b35a978c4d3575790dd15",
+    "rustfmt-1.56.1-x86_64-pc-windows-msvc.tar.gz": "a18c253e6d29ea8575e9b25a1fe43c913082c0036e2532f372e376b8d0c0e15a",
+    "rustfmt-1.56.1-x86_64-pc-windows-msvc.tar.xz": "6518c61c7118336adb26710acb7ea135fafe8cec316ee43c8a2211ab17ceca98",
+    "rustfmt-1.56.1-x86_64-unknown-freebsd.tar.gz": "b3f184b3cbe2139407e977838e98a843d90409cdebe86d64338841fb919281c9",
+    "rustfmt-1.56.1-x86_64-unknown-freebsd.tar.xz": "fef2cb36fec20fc2653cfb5b27e799e13dcaaf6220dd2f4e80c573081851bd8f",
+    "rustfmt-1.56.1-x86_64-unknown-linux-gnu.tar.gz": "6dce6eced612048180892fa9016a06a901c9fc275da046d8e229986f4dd97115",
+    "rustfmt-1.56.1-x86_64-unknown-linux-gnu.tar.xz": "36ea7b6fb8ac93960090ae76997e8f5dae147bd65a5098d43fecd6810800c52a",
+    "rustfmt-1.56.1-x86_64-unknown-linux-musl.tar.gz": "0a307bd9a4b08a91f1fee0e90e412d92c9b55b75084c2e9b24ed99dd9469f4fb",
+    "rustfmt-1.56.1-x86_64-unknown-linux-musl.tar.xz": "a852ff829fd442dbb01fa2e2330f60e9d89121016e9d989641dc6315c717b0c3",
+    "rustfmt-1.57.0-aarch64-apple-darwin.tar.gz": "85fc5eedb0bb4d6ac599e567ae84debc05a3a5d2c162f73c59df5bf0d5d3fb19",
+    "rustfmt-1.57.0-aarch64-apple-darwin.tar.xz": "b8bf7dbc7f10592803f652ffc307aba2ed5df5afd5acb8fcb6aa557a552a885d",
+    "rustfmt-1.57.0-aarch64-unknown-linux-gnu.tar.gz": "f8f4c4c16a24aaf4e0b9752395bf8b20154832ef6d0b9e98687de44b699ff5ff",
+    "rustfmt-1.57.0-aarch64-unknown-linux-gnu.tar.xz": "bfe47d7651948438fec11bce0fb56bb4489d4c05b8652c2f3c5513a5aed47e02",
+    "rustfmt-1.57.0-aarch64-unknown-linux-musl.tar.gz": "093bda1fc0c087dffbdddafb9a2fe9f67e49cfc7794aaca22a92aab5d0f0c789",
+    "rustfmt-1.57.0-aarch64-unknown-linux-musl.tar.xz": "87eb4d53e8210308ad5e16033f374d76ec4242930b723ebcdbae86bbcc1825d0",
+    "rustfmt-1.57.0-x86_64-apple-darwin.tar.gz": "83a928a03d484121531852a591b76a13c631e275ef376d57b9b23cf6e855f6b1",
+    "rustfmt-1.57.0-x86_64-apple-darwin.tar.xz": "6cdd0023d068e5698ce18d02d9a60f4023c4d751480cda5e0e53f2a854e101e5",
+    "rustfmt-1.57.0-x86_64-pc-windows-msvc.tar.gz": "7c61a46df59d6c9386a5647df54a1a725d81dc924fb24fa7f7e1b51ad7ced047",
+    "rustfmt-1.57.0-x86_64-pc-windows-msvc.tar.xz": "ab7667e3c48e5fc8b55ac514acace55b1614dca6aa7d5fb06c7ee465624fdb7b",
+    "rustfmt-1.57.0-x86_64-unknown-freebsd.tar.gz": "0d0bd640445e1e45a93ca0d0f5b0f03c464f6a91c9b5353c3ac136ba366bbf36",
+    "rustfmt-1.57.0-x86_64-unknown-freebsd.tar.xz": "190f07a85428dbb00c2a4a8734ac3175e430e87103cb058c1196c09acda640a9",
+    "rustfmt-1.57.0-x86_64-unknown-linux-gnu.tar.gz": "48b09dbf1c7fc16e31123e8c83eede18c3577811762f574a5b24a2f759a172bb",
+    "rustfmt-1.57.0-x86_64-unknown-linux-gnu.tar.xz": "0e8192ad1fd00725991f243f43e08a451d74132c3a2fc6c4d0edca73a6aeefe6",
+    "rustfmt-1.57.0-x86_64-unknown-linux-musl.tar.gz": "6ed302cafc1363c8ba0bb789467a80be8558b3ed712331a0da2477f8d53f0794",
+    "rustfmt-1.57.0-x86_64-unknown-linux-musl.tar.xz": "164c6d41322df9c6c03ed37d65b920e9d643d74a05ead5e3e47462966f215122",
+    "rustfmt-1.58.0-aarch64-apple-darwin.tar.gz": "79f391f725e598163407df09570c3c2bfffc89250a08b3143c7f72db8ec0c632",
+    "rustfmt-1.58.0-aarch64-apple-darwin.tar.xz": "b48a43d57e2c403b7117b33b9e19222dc10df7034ec108925a92ce669a41f184",
+    "rustfmt-1.58.0-aarch64-unknown-linux-gnu.tar.gz": "ddb03ea92c4274b2eccb43d0f25bb6ccd8beab53123715c3c51de7220b60b21e",
+    "rustfmt-1.58.0-aarch64-unknown-linux-gnu.tar.xz": "2bd0d068e8bcaa79639e351b98aa5c28dc15631db78ac3fec14e2f18418a27a6",
+    "rustfmt-1.58.0-aarch64-unknown-linux-musl.tar.gz": "8749c82a655e2f99bfc7b8c3d1f12c384edb8cee7b26078a7ddf87da57a31429",
+    "rustfmt-1.58.0-aarch64-unknown-linux-musl.tar.xz": "e7e965ea5da8445d95ada6aa1f5c3324e45c788e93b6f50247575f13c1fd3047",
+    "rustfmt-1.58.0-x86_64-apple-darwin.tar.gz": "83fb3514eec03049daadb2623f27b92d029b292c0ed6102c06f1a4a39f81b1f8",
+    "rustfmt-1.58.0-x86_64-apple-darwin.tar.xz": "8c997a4484686efac3e639f4180372b116b24f242c60f9fe042de1976e4d6d99",
+    "rustfmt-1.58.0-x86_64-pc-windows-msvc.tar.gz": "661a53930cfd8b74f9a66df0871a0bd8534829d845d5253292f7f223d17f0aa8",
+    "rustfmt-1.58.0-x86_64-pc-windows-msvc.tar.xz": "cad374805d04deac0a3ce47d33af29ff59419528258698fbcf660d6e1ffb82f0",
+    "rustfmt-1.58.0-x86_64-unknown-freebsd.tar.gz": "a91b4561ca1cb756da40e17a2d270c464bb177289c2cc8352e2b5fcd26c0c63a",
+    "rustfmt-1.58.0-x86_64-unknown-freebsd.tar.xz": "39a93179b53bd8d128f8bb2f5174090924ce611b348b74564fe5c188a1ac8fd1",
+    "rustfmt-1.58.0-x86_64-unknown-linux-gnu.tar.gz": "4c4f0972406bf4a0a83be4cf2ee0a3556db1aa6aefedab4851ed19a3dd2e88bc",
+    "rustfmt-1.58.0-x86_64-unknown-linux-gnu.tar.xz": "2c33675a7ac25c8512fb8bfe8333c6fdfdee4c55662f16c80910390dc433f97d",
+    "rustfmt-1.58.0-x86_64-unknown-linux-musl.tar.gz": "7075b11ab68bbdebce0884e42432d7599680fe023ea2ab4e81c2629d25fd32e7",
+    "rustfmt-1.58.0-x86_64-unknown-linux-musl.tar.xz": "d51b55ff4544655ea110da8d510b5f554830d3fbeaf8ae9908b1a34d65f60a84",
+    "rustfmt-1.58.1-aarch64-apple-darwin.tar.gz": "ede8f0bb46047e3e106b20bdd4e181fc81f810eed26d5f1816b0b0b4a9a5458a",
+    "rustfmt-1.58.1-aarch64-apple-darwin.tar.xz": "1b71c31ce87c3aba90ec140027264641cb4e213aaec24aa89eb7a90de22f1c46",
+    "rustfmt-1.58.1-aarch64-unknown-linux-gnu.tar.gz": "71dec8f396d87ec57e353000331e62c7ab0e431e26c42644d43d78fd8d6df3f5",
+    "rustfmt-1.58.1-aarch64-unknown-linux-gnu.tar.xz": "91ce4fe97d80bd5247a4f49bf7aedc052fb19e9f4b0a1f9f912e09c2cb23058f",
+    "rustfmt-1.58.1-aarch64-unknown-linux-musl.tar.gz": "f605d5cf81369a51cacb6ce17d57dd553096b6843c249c37f996d0c768476429",
+    "rustfmt-1.58.1-aarch64-unknown-linux-musl.tar.xz": "a4d63477fc9ef3447816bf4482b4fbc8a917456a29f9ad533b77df157b2876c3",
+    "rustfmt-1.58.1-x86_64-apple-darwin.tar.gz": "6ec7ef5c492531714f42936f7e03ffa9b428953692c64575b45da1dfaa3905b4",
+    "rustfmt-1.58.1-x86_64-apple-darwin.tar.xz": "b6fec2a4298150ac5ae3428af0819b31ffdf75f05f0b0e52b4a80f3d5d8f4add",
+    "rustfmt-1.58.1-x86_64-pc-windows-msvc.tar.gz": "c2d30d3791e612f2f2a6e9eef52707ce79e7bf2ff5c6150bdf91039686988eda",
+    "rustfmt-1.58.1-x86_64-pc-windows-msvc.tar.xz": "7de88861cbe6563ed276d7725d698bbe78f3d887dc16034a45e987b734690a14",
+    "rustfmt-1.58.1-x86_64-unknown-freebsd.tar.gz": "d2a32f7479dcb5bb71ec8151912cfa315bfaeb7c3b45ad10afcb6bb7b9652d75",
+    "rustfmt-1.58.1-x86_64-unknown-freebsd.tar.xz": "a67b7d53a0a9d901f143fce8c1b040bdb26580001d2a55467c9f7052d86b7aaa",
+    "rustfmt-1.58.1-x86_64-unknown-linux-gnu.tar.gz": "09328241bd46a21793a5a76ba6a1a5b862c6bfa29afdabdc9c889b08c81ee8ba",
+    "rustfmt-1.58.1-x86_64-unknown-linux-gnu.tar.xz": "63bb44c5b8637069944db613dd5d008ecdc60546896e9d56119df005c2e85fb3",
+    "rustfmt-1.58.1-x86_64-unknown-linux-musl.tar.gz": "8189d38bdd1225241ecbd75b0869c1945450a5c28b675713892ae32cf0b77750",
+    "rustfmt-1.58.1-x86_64-unknown-linux-musl.tar.xz": "86198698fff6b0f1c4bdc249af0d77ca650301ae3cc07a18daab41519eb8ef0b",
+    "rustfmt-1.59.0-aarch64-apple-darwin.tar.gz": "70a677515845f9b22b464d022958a2d0ba7c927a4979f3631b1f851ea2e9b2a8",
+    "rustfmt-1.59.0-aarch64-apple-darwin.tar.xz": "450ecea7d3848b61cdead69262cba3c7bbe6f9644ea84453729a0463dea7bc47",
+    "rustfmt-1.59.0-aarch64-unknown-linux-gnu.tar.gz": "e79b98a6bb51ed225436375fd095610b88093f287404836949d394a5d315e834",
+    "rustfmt-1.59.0-aarch64-unknown-linux-gnu.tar.xz": "4d1ffb1fb0b6009b5fb39001a19115fda4e9142fe91af5ccf0d96235f071e528",
+    "rustfmt-1.59.0-aarch64-unknown-linux-musl.tar.gz": "dc977d6459b1d4d9e761dc20a60f1f734e6081b1b17670eb4bbe9d2fc292b9de",
+    "rustfmt-1.59.0-aarch64-unknown-linux-musl.tar.xz": "b569e2473046425f9f73fb6396e72e8e47caf36578fcb99594029765a0d6253e",
+    "rustfmt-1.59.0-x86_64-apple-darwin.tar.gz": "52d5579999e146e999426d57be78a8b26ace6ab7810aefb968f69e6b2c9ecf53",
+    "rustfmt-1.59.0-x86_64-apple-darwin.tar.xz": "8d0c1f9de1de65d56964577fe05a423e4a09f187484770d5852d4f7429b40b3d",
+    "rustfmt-1.59.0-x86_64-pc-windows-msvc.tar.gz": "cd923eae91c5652fa983abbc07ceb67d6f5b8f98664f86cfc1bff7ec1374e0c1",
+    "rustfmt-1.59.0-x86_64-pc-windows-msvc.tar.xz": "3dc42011e0420d9d79dab9a00e973a4b5cd59fbd2e300e55442901a0949b25e5",
+    "rustfmt-1.59.0-x86_64-unknown-freebsd.tar.gz": "026abe662bf0ca734796e93224bed7ad9015a3e2613ca7db59c9b89e3d6088bb",
+    "rustfmt-1.59.0-x86_64-unknown-freebsd.tar.xz": "ee6069af61c04b0da975bcb52f3f795a02f65b1bb43c191864ab971635421846",
+    "rustfmt-1.59.0-x86_64-unknown-linux-gnu.tar.gz": "2932efec54b152e094e557c351aa5844b87e61bbcb4d4b7bf0a2dd7ad457df39",
+    "rustfmt-1.59.0-x86_64-unknown-linux-gnu.tar.xz": "9933a856b8241b28740b936320107e1f3e6039fd77825db8c33d9de1110c88cc",
+    "rustfmt-1.59.0-x86_64-unknown-linux-musl.tar.gz": "868aebea8792baa964b5300e6c34b5006660abd4d7aeb93f2d7104de1cfad134",
+    "rustfmt-1.59.0-x86_64-unknown-linux-musl.tar.xz": "d4d0fe0a49fb515388b65a49b816833dec22ef2bd59e6dbe372f50c702f0913a",
+    "rustfmt-1.60.0-aarch64-apple-darwin.tar.gz": "65ed07cf59ffc4500c17adad97c0dfd7dfce2a0867edc4b47646fd148fd3a447",
+    "rustfmt-1.60.0-aarch64-apple-darwin.tar.xz": "8f205c068320b33678c622371b3ddf75ed88dd68fd6cb570eb688ee8912267cd",
+    "rustfmt-1.60.0-aarch64-unknown-linux-gnu.tar.gz": "d66a0e3edd2c38ed8074c1469bdf14c16bbc65d65ea935de1786d2cb10718f59",
+    "rustfmt-1.60.0-aarch64-unknown-linux-gnu.tar.xz": "2da687089157840f53b088d533c187ee4c8c8d760f43df296d9187ce8042d1d6",
+    "rustfmt-1.60.0-aarch64-unknown-linux-musl.tar.gz": "be78a7c815aec2cb7e94958e3c572212716c286a644f073732b3486892f8a836",
+    "rustfmt-1.60.0-aarch64-unknown-linux-musl.tar.xz": "ac082de0e3ccd45c0c38ccf18981423f88885b592731c423c3992bd7f446bed8",
+    "rustfmt-1.60.0-x86_64-apple-darwin.tar.gz": "b18c6d1d58fbe310c1d98174ecedb5c853cc553263fa1063a83d6d581fdbb62a",
+    "rustfmt-1.60.0-x86_64-apple-darwin.tar.xz": "2f9c590cbd3eb79c774539773a67e7e0a430ca54ced147dcb5c703fdc018b2c3",
+    "rustfmt-1.60.0-x86_64-pc-windows-msvc.tar.gz": "68d112cde3e81bbb0781cba074610a745713abd887c4307b5c2a32b3c19e2bab",
+    "rustfmt-1.60.0-x86_64-pc-windows-msvc.tar.xz": "c47d9cd5a37f775d88fccf44197fbab1712c5f4b588721aae788cb659f0ddc2b",
+    "rustfmt-1.60.0-x86_64-unknown-freebsd.tar.gz": "93f3c028222400150dc85bf0384610e25db28c0d37c83d06bd2b8054ecbef9ab",
+    "rustfmt-1.60.0-x86_64-unknown-freebsd.tar.xz": "895ae9b97e335c2641ab2ca4d88ec17100e233434c6c3bdfa037ebafc362a998",
+    "rustfmt-1.60.0-x86_64-unknown-linux-gnu.tar.gz": "b7274665681979076beec5ffc7ecc6e40bb93250b7f861c51a83098400cab71c",
+    "rustfmt-1.60.0-x86_64-unknown-linux-gnu.tar.xz": "d061216684482963521b1559c8043fab5d73096057f315a5beb0cda05992afea",
+    "rustfmt-1.60.0-x86_64-unknown-linux-musl.tar.gz": "95df41bb7a5d94b09e0a635dee56377cfb5b5e85129d066a81be8df7b1fba2da",
+    "rustfmt-1.60.0-x86_64-unknown-linux-musl.tar.xz": "6f0fb15475d5194b54d52443985c2a2fd04d91d3a90f7108ede0fb1d10b7e76e",
+    "rustfmt-1.61.0-aarch64-apple-darwin.tar.gz": "5ebd73eaeacba857ebf116f98efb54c81c8d96a3992e57c56aa4e5273bab3338",
+    "rustfmt-1.61.0-aarch64-apple-darwin.tar.xz": "d5820065554ddca2e7699a8ded224c14b522748d18efd1347767caeb48bc1714",
+    "rustfmt-1.61.0-aarch64-unknown-linux-gnu.tar.gz": "0f9ece2e261a5579c5fb601446520fea31d7502b9a0df589cb69173f0fab487a",
+    "rustfmt-1.61.0-aarch64-unknown-linux-gnu.tar.xz": "b8e77edf664ea129e305acc6269bb1cec96cc65eaead7f8de591086ff2205dc2",
+    "rustfmt-1.61.0-aarch64-unknown-linux-musl.tar.gz": "48a0cfa5b37deb62a118cc0a7daf95d245bb3bfb71588974c6d70ab53a9b510a",
+    "rustfmt-1.61.0-aarch64-unknown-linux-musl.tar.xz": "bbec49e8a64e226964057a6661037cb3e4e009e0f6454e3b73ca2ac2c79db33a",
+    "rustfmt-1.61.0-x86_64-apple-darwin.tar.gz": "52015dbd70ee8257b2036e98f6b9640f804f76661816c6cf4c46f4176c5f2c89",
+    "rustfmt-1.61.0-x86_64-apple-darwin.tar.xz": "2dd619b8a7487407092ddb23702931dbb0ed3bdd6c29d90461b3d3e69407f763",
+    "rustfmt-1.61.0-x86_64-pc-windows-msvc.tar.gz": "5285a47b2d303ca66ec6cc36bdadf7f0b0ffa1427be3b21fd9f8322f0105a235",
+    "rustfmt-1.61.0-x86_64-pc-windows-msvc.tar.xz": "f07e78af5bba00f8254952b04b1a366bc16c3e4ae4785b2f270c14002584c46f",
+    "rustfmt-1.61.0-x86_64-unknown-freebsd.tar.gz": "6bf532ffda0e4dc749229dd29648a061471a6284b003112f911f015d70898bd2",
+    "rustfmt-1.61.0-x86_64-unknown-freebsd.tar.xz": "9aa07794734e4d7e8e57798178d309bac30a421d2e6f2223eb0bde721e440dec",
+    "rustfmt-1.61.0-x86_64-unknown-linux-gnu.tar.gz": "36efcc9794e2aa5a8b0069b192fddc041d12cf8175519e3853ea724bdf5ce0af",
+    "rustfmt-1.61.0-x86_64-unknown-linux-gnu.tar.xz": "9b7efd72655f23261b4b784f31eb1174d288b7a71a5f28ed7ffe26608125f06b",
+    "rustfmt-1.61.0-x86_64-unknown-linux-musl.tar.gz": "9621d6b3999f5a8661ccac1ef7ece034022fc514f59785faf9552cc43545d1d5",
+    "rustfmt-1.61.0-x86_64-unknown-linux-musl.tar.xz": "7ffb1b8a561d32cdd19811cd807cfd379bea4a65f815b0e5b9ebbb049ad50185",
+    "rustfmt-1.62.0-aarch64-apple-darwin.tar.gz": "21b3ec04a0708fb76846a563b4e5070dd1e01941b4148250ff2840698abedd3e",
+    "rustfmt-1.62.0-aarch64-apple-darwin.tar.xz": "8fae81004f32f08c4fb3f502ef9b31bbd7b98bee8c9d07963f8dea24fde5c129",
+    "rustfmt-1.62.0-aarch64-unknown-linux-gnu.tar.gz": "ec8346c711e33cc3e41cdfed210acc441104ce1699bb8bdb307fe6581419dfda",
+    "rustfmt-1.62.0-aarch64-unknown-linux-gnu.tar.xz": "0eb9eb9c002bf394600dcef1fb7782685597a298f4d017f13a3c1524ef53ef78",
+    "rustfmt-1.62.0-aarch64-unknown-linux-musl.tar.gz": "f9dac60e0243c9c5fc4216463981cd089827c65695089026148d8332c5011668",
+    "rustfmt-1.62.0-aarch64-unknown-linux-musl.tar.xz": "6f7b3f4a913628feece60b3e19dc8ccd6c5e66a9ac4809609400fbc38c4c07ea",
+    "rustfmt-1.62.0-x86_64-apple-darwin.tar.gz": "1c2fc7d78bfa78f784c86d32645f1f2db14cc2e272b6ae49bf687b4c5266865e",
+    "rustfmt-1.62.0-x86_64-apple-darwin.tar.xz": "7d05c7f77807fc082b6bcfae8727aa92c84a90b6a91c16965e2f04612651342b",
+    "rustfmt-1.62.0-x86_64-pc-windows-msvc.tar.gz": "8d99bd0f349bd050ae505f2e4064eafbbbfd03a18f34bade60a2d4e1ad78d8ed",
+    "rustfmt-1.62.0-x86_64-pc-windows-msvc.tar.xz": "2c08b36be1bf744f926c214a0c4912454bc3de97950d21b3a312656a26a58bf1",
+    "rustfmt-1.62.0-x86_64-unknown-freebsd.tar.gz": "8bf773b74705c2fd6b0ddaaf28c865bfb2a513a45f5f1785ef0d1dcc050968d1",
+    "rustfmt-1.62.0-x86_64-unknown-freebsd.tar.xz": "5be4591a37658e5b5df17462c38620d4545470e3549b111207994cfd103a5812",
+    "rustfmt-1.62.0-x86_64-unknown-linux-gnu.tar.gz": "cd345cece3637a16c7a1b3655851c4a20e7a414796f71c5f32381a0632045e58",
+    "rustfmt-1.62.0-x86_64-unknown-linux-gnu.tar.xz": "9965c766b9fdfe9e1ccdf5e20a858431af3c44fba267f9e6c989c6a8f1e838dc",
+    "rustfmt-1.62.0-x86_64-unknown-linux-musl.tar.gz": "ca4c279976ee947a3291be4fe889fc8d152ce29386443a22e8ae6892dd75402c",
+    "rustfmt-1.62.0-x86_64-unknown-linux-musl.tar.xz": "3a8feb1d61d0fa3df2cae89e2a6fdefcb058b63729965372c1f729aed88e42de",
+    "rustfmt-1.62.1-aarch64-apple-darwin.tar.gz": "dd6918faec4bf0cd1ffc9de875f21f618ee27cf2dd3cc5091deaf1015cc43581",
+    "rustfmt-1.62.1-aarch64-apple-darwin.tar.xz": "98b5e97d87c06b3472346f8cf4ca7f9be2d0030a4e9ec008228f22b6cdd96a23",
+    "rustfmt-1.62.1-aarch64-unknown-linux-gnu.tar.gz": "6bcbd041ad22f175acb9e4c6742d388af70b49f95340dd904239f10ff334bb75",
+    "rustfmt-1.62.1-aarch64-unknown-linux-gnu.tar.xz": "7461f2409e7359ae053d0056fb7fd665e3141e4ba0692669dfdeb598286fc58c",
+    "rustfmt-1.62.1-aarch64-unknown-linux-musl.tar.gz": "0a9aed3505fbebeded519aee67bb146196f015c33ebb43457257195a0d6baa4b",
+    "rustfmt-1.62.1-aarch64-unknown-linux-musl.tar.xz": "28a9e92ed3838088ca2e65c0287174eb812d60eb80774cc8f0cb579dacf9858f",
+    "rustfmt-1.62.1-x86_64-apple-darwin.tar.gz": "f0aedaa8908e52d55ba6e2192b83d3ba9e97fdf7f2f019ac6d7cf1f99563cc44",
+    "rustfmt-1.62.1-x86_64-apple-darwin.tar.xz": "e863609d722e3abd72770e3adbfdf3ea4611b29a02dbd6d842bf9676dfb69f3b",
+    "rustfmt-1.62.1-x86_64-pc-windows-msvc.tar.gz": "c1a2c19f9d612a60fca67b698f2a34534cd228d6858a473b73b855037bcf8d94",
+    "rustfmt-1.62.1-x86_64-pc-windows-msvc.tar.xz": "0ee7dee204843bf6539c8333a60205222eaf92af52d7b9515c4333be17ecec3f",
+    "rustfmt-1.62.1-x86_64-unknown-freebsd.tar.gz": "c25671f7e3f6cac76fd2c33a7f42f1dcf03328c38be097005b00d0fc175fd8d8",
+    "rustfmt-1.62.1-x86_64-unknown-freebsd.tar.xz": "42c41f892970344be643817daff74ccca234021d2cfeb2d2c0142d8031cbe3a6",
+    "rustfmt-1.62.1-x86_64-unknown-linux-gnu.tar.gz": "8edcbd6e7af5fc6bb78a9e4446bc04914d777ecf94d171a26383058140f729ca",
+    "rustfmt-1.62.1-x86_64-unknown-linux-gnu.tar.xz": "572c0176b1333f06995f52ec85a3a4afd742fe2cff92d8aa7a4a168b64f4a773",
+    "rustfmt-1.62.1-x86_64-unknown-linux-musl.tar.gz": "b4d0187b841b8fdb68f05d36d1febf5150abf00dff887042012bafc3f05020b1",
+    "rustfmt-1.62.1-x86_64-unknown-linux-musl.tar.xz": "7e73643b6a376d3bb82671a6204df5c47bc191e317e7a697cbe09c113cf053a4",
 }
diff --git a/third_party/rules_rust/rust/platform/BUILD.bazel b/third_party/rules_rust/rust/platform/BUILD.bazel
index 459b9fb..56ed346 100644
--- a/third_party/rules_rust/rust/platform/BUILD.bazel
+++ b/third_party/rules_rust/rust/platform/BUILD.bazel
@@ -17,10 +17,3 @@
     srcs = glob(["**/*.bzl"]),
     visibility = ["//rust:__subpackages__"],
 )
-
-alias(
-    name = "rules",
-    actual = ":bzl_lib",
-    deprecation = "Please use the `@rules_rust//platform:bzl_lib` target instead",
-    visibility = ["//rust:__subpackages__"],
-)
diff --git a/third_party/rules_rust/rust/platform/platform.bzl b/third_party/rules_rust/rust/platform/platform.bzl
index de02a89..98e295a 100644
--- a/third_party/rules_rust/rust/platform/platform.bzl
+++ b/third_party/rules_rust/rust/platform/platform.bzl
@@ -17,6 +17,7 @@
     "powerpc",
     "s390x",
     "x86_64",
+    "riscv32",
 ]
 
 _SUPPORTED_SYSTEMS = [
diff --git a/third_party/rules_rust/rust/platform/triple.bzl b/third_party/rules_rust/rust/platform/triple.bzl
index 13a59a4..2c42704 100644
--- a/third_party/rules_rust/rust/platform/triple.bzl
+++ b/third_party/rules_rust/rust/platform/triple.bzl
@@ -1,6 +1,7 @@
 """Triples are a way to define information about a platform/system. This module provides
 a way to convert a triple string into a well structured object to avoid constant string
-parsing in starlark code.
+parsing in starlark code, and a way for a repository_rule to extract the target triple
+of the host platform.
 
 Triples can be described at the following link: 
 https://clang.llvm.org/docs/CrossCompilation.html#target-triple
@@ -18,7 +19,7 @@
             - vendor (str): The vendor of the system
             - system (str): The name of the system
             - abi (str, optional): The abi to use or None if abi does not apply.
-            - triple (str): The original triple
+            - str (str): Original string representation of the triple
     """
     if triple == "wasm32-wasi":
         return struct(
@@ -26,7 +27,7 @@
             system = "wasi",
             vendor = "wasi",
             abi = None,
-            triple = triple,
+            str = triple,
         )
 
     component_parts = triple.split("-")
@@ -50,5 +51,125 @@
         vendor = vendor,
         system = system,
         abi = abi,
-        triple = triple,
+        str = triple,
     )
+
+_CPU_ARCH_ERROR_MSG = """\
+Command failed with exit code '{code}': {args}
+----------stdout:
+{stdout}
+----------stderr:
+{stderr}
+"""
+
+def _query_cpu_architecture(repository_ctx, expected_archs, is_windows = False):
+    """Detect the host CPU architecture
+
+    Args:
+        repository_ctx (repository_ctx): The repository_rule's context object
+        expected_archs (list): A list of expected architecture strings
+        is_windows (bool, optional): If true, the cpu lookup will use the windows method (`wmic` vs `uname`)
+
+    Returns:
+        str: The host's CPU architecture
+    """
+    if is_windows:
+        arguments = ["wmic", "os", "get", "osarchitecture"]
+    else:
+        arguments = ["uname", "-m"]
+
+    result = repository_ctx.execute(arguments)
+
+    if result.return_code:
+        fail(_CPU_ARCH_ERROR_MSG.format(
+            code = result.return_code,
+            args = arguments,
+            stdout = result.stdout,
+            stderr = result.stderr,
+        ))
+
+    if is_windows:
+        # Example output:
+        # OSArchitecture
+        # 64-bit
+        lines = result.stdout.split("\n")
+        arch = lines[1].strip()
+
+        # Translate 64-bit to a compatible rust platform
+        # https://doc.rust-lang.org/nightly/rustc/platform-support.html
+        if arch == "64-bit":
+            arch = "x86_64"
+    else:
+        arch = result.stdout.strip("\n")
+
+        # Correct the arm architecture for macos
+        if "mac" in repository_ctx.os.name and arch == "arm64":
+            arch = "aarch64"
+
+    if not arch in expected_archs:
+        fail("{} is not a expected cpu architecture {}\n{}".format(
+            arch,
+            expected_archs,
+            result.stdout,
+        ))
+
+    return arch
+
+def get_host_triple(repository_ctx, abi = None):
+    """Query host information for the appropriate triple to use with load_arbitrary_tool or the crate_universe resolver
+
+    Example:
+
+    ```python
+    load("@rules_rust//rust:repositories.bzl", "load_arbitrary_tool")
+    load("@rules_rust//rust/platform:triple.bzl", "get_host_triple")
+
+    def _impl(repository_ctx):
+        host_triple = get_host_triple(repository_ctx)
+
+        load_arbitrary_tool(
+            ctx = repository_ctx,
+            tool_name = "cargo",
+            tool_subdirectories = ["cargo"],
+            target_triple = host_triple.str,
+        )
+
+    example = repository_rule(implementation = _impl)
+    ```
+
+    Args:
+        repository_ctx (repository_ctx): The repository_rule's context object
+        abi (str): Since there's no consistent way to check for ABI, this info
+            may be explicitly provided
+
+    Returns:
+        struct: A triple struct; see the `triple` function in this module
+    """
+
+    # Detect the host's cpu architecture
+
+    supported_architectures = {
+        "linux": ["aarch64", "x86_64"],
+        "macos": ["aarch64", "x86_64"],
+        "windows": ["x86_64"],
+    }
+
+    if "linux" in repository_ctx.os.name:
+        cpu = _query_cpu_architecture(repository_ctx, supported_architectures["linux"])
+        return triple("{}-unknown-linux-{}".format(
+            cpu,
+            abi or "gnu",
+        ))
+
+    if "mac" in repository_ctx.os.name:
+        cpu = _query_cpu_architecture(repository_ctx, supported_architectures["macos"])
+        return triple("{}-apple-darwin".format(cpu))
+
+    if "win" in repository_ctx.os.name:
+        cpu = _query_cpu_architecture(repository_ctx, supported_architectures["windows"], True)
+        return triple("{}-pc-windows-{}".format(
+            cpu,
+            abi or "msvc",
+        ))
+
+    fail("Unhandled host os: {}", repository_ctx.os.name)
diff --git a/third_party/rules_rust/rust/platform/triple_mappings.bzl b/third_party/rules_rust/rust/platform/triple_mappings.bzl
index 644f973..4cd00b4 100644
--- a/third_party/rules_rust/rust/platform/triple_mappings.bzl
+++ b/third_party/rules_rust/rust/platform/triple_mappings.bzl
@@ -22,12 +22,14 @@
 SUPPORTED_T2_PLATFORM_TRIPLES = [
     "aarch64-apple-darwin",
     "aarch64-apple-ios",
+    "aarch64-apple-ios-sim",
     "aarch64-linux-android",
     "aarch64-unknown-linux-gnu",
     "arm-unknown-linux-gnueabi",
     "armv7-unknown-linux-gnueabi",
     "arm-unknown-linux-gnueabihf",
     "armv7-unknown-linux-gnueabihf",
+    "armv7-linux-androideabi",
     "i686-linux-android",
     "i686-unknown-freebsd",
     "powerpc-unknown-linux-gnu",
@@ -37,6 +39,7 @@
     "x86_64-apple-ios",
     "x86_64-linux-android",
     "x86_64-unknown-freebsd",
+    "riscv32imc-unknown-none-elf",
 ]
 
 SUPPORTED_PLATFORM_TRIPLES = SUPPORTED_T1_PLATFORM_TRIPLES + SUPPORTED_T2_PLATFORM_TRIPLES
@@ -57,6 +60,8 @@
     "powerpc": "ppc",
     "powerpc64": None,
     "powerpc64le": None,
+    "riscv32": "riscv32",
+    "riscv32imc": "riscv32",
     "s390": None,
     "s390x": "s390x",
     "thumbv7m": "armv7",
@@ -77,6 +82,7 @@
     "linux": "linux",
     "nacl": None,
     "netbsd": None,
+    "none": "none",
     "openbsd": "openbsd",
     "solaris": None,
     "unknown": None,
@@ -92,6 +98,7 @@
     "freebsd": "",
     "ios": "",
     "linux": "",
+    "none": "",
     # This is currently a hack allowing us to have the proper
     # generated extension for the wasm target, similarly to the
     # windows target
@@ -108,6 +115,7 @@
     "freebsd": ".a",
     "ios": ".a",
     "linux": ".a",
+    "none": ".a",
     "unknown": "",
     "wasi": "",
     "windows": ".lib",
@@ -121,6 +129,7 @@
     "freebsd": ".so",
     "ios": ".dylib",
     "linux": ".so",
+    "none": ".so",
     "unknown": ".wasm",
     "wasi": ".wasm",
     "windows": ".dll",
@@ -155,17 +164,18 @@
     "freebsd": ["-lexecinfo", "-lpthread"],
     "fuchsia": ["-lzircon", "-lfdio"],
     "illumos": ["-lsocket", "-lposix4", "-lpthread", "-lresolv", "-lnsl", "-lumem"],
-    "ios": ["-lSystem", "-lobjc", "-framework Security", "-framework Foundation", "-lresolv"],
+    "ios": ["-lSystem", "-lobjc", "-Wl,-framework,Security", "-Wl,-framework,Foundation", "-lresolv"],
     # TODO: This ignores musl. Longer term what does Bazel think about musl?
     "linux": ["-ldl", "-lpthread"],
     "nacl": [],
     "netbsd": ["-lpthread", "-lrt"],
+    "none": [],
     "openbsd": ["-lpthread"],
     "solaris": ["-lsocket", "-lposix4", "-lpthread", "-lresolv"],
     "unknown": [],
     "uwp": ["ws2_32.lib"],
     "wasi": [],
-    "windows": ["advapi32.lib", "ws2_32.lib", "userenv.lib"],
+    "windows": ["advapi32.lib", "ws2_32.lib", "userenv.lib", "Bcrypt.lib"],
 }
 
 def cpu_arch_to_constraints(cpu_arch):
@@ -191,13 +201,29 @@
 
     return ["@platforms//os:{}".format(sys_suffix)]
 
-def abi_to_constraints(abi):
-    # iOS simulator
-    if abi == "sim":
+def abi_to_constraints(_abi):
+    # TODO(acmcarther): Implement when C++ toolchain is more mature and we
+    # figure out how they're doing this
+    return []
+
+def extra_ios_constraints(triple):
+    """Add constraints specific to iOS targets.
+
+    Args:
+        triple: The full triple struct for the target
+
+    Returns:
+        A list of constraints to add to the target
+    """
+
+    # TODO: Simplify if https://github.com/bazelbuild/bazel/issues/11454 is fixed
+    if triple.system != "ios":
+        return []
+    if triple.abi == "sim":
         return ["@build_bazel_apple_support//constraints:simulator"]
+    elif triple.arch == "aarch64":  # Only add device for archs that have both
+        return ["@build_bazel_apple_support//constraints:device"]
     else:
-        # TODO(acmcarther): Implement when C++ toolchain is more mature and we
-        # figure out how they're doing this
         return []
 
 def triple_to_system(target_triple):
@@ -278,5 +304,6 @@
     constraint_set += vendor_to_constraints(triple_struct.vendor)
     constraint_set += system_to_constraints(triple_struct.system)
     constraint_set += abi_to_constraints(triple_struct.abi)
+    constraint_set += extra_ios_constraints(triple_struct)
 
     return constraint_set
diff --git a/third_party/rules_rust/rust/private/BUILD.bazel b/third_party/rules_rust/rust/private/BUILD.bazel
index 929a39e..d175b28 100644
--- a/third_party/rules_rust/rust/private/BUILD.bazel
+++ b/third_party/rules_rust/rust/private/BUILD.bazel
@@ -1,5 +1,6 @@
 load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
 load("//rust/private:rust_analyzer.bzl", "rust_analyzer_detect_sysroot")
+load("//rust/private:rustfmt.bzl", "rustfmt_workspace_name")
 load("//rust/private:stamp.bzl", "stamp_build_setting")
 
 bzl_library(
@@ -9,16 +10,14 @@
     deps = ["//rust/platform:bzl_lib"],
 )
 
-alias(
-    name = "rules",
-    actual = ":bzl_lib",
-    deprecation = "Please use the `@rules_rust//private:bzl_lib` target instead",
-    visibility = ["//rust:__subpackages__"],
-)
-
 stamp_build_setting(name = "stamp")
 
 rust_analyzer_detect_sysroot(
     name = "rust_analyzer_detect_sysroot",
     visibility = ["//visibility:public"],
 )
+
+rustfmt_workspace_name(
+    name = "rustfmt_workspace_name",
+    visibility = ["//visibility:public"],
+)
diff --git a/third_party/rules_rust/rust/private/clippy.bzl b/third_party/rules_rust/rust/private/clippy.bzl
index d1464e9..21f3965 100644
--- a/third_party/rules_rust/rust/private/clippy.bzl
+++ b/third_party/rules_rust/rust/private/clippy.bzl
@@ -29,6 +29,22 @@
     "find_toolchain",
 )
 
+ClippyFlagsInfo = provider(
+    doc = "Pass each value as an additional flag to clippy invocations",
+    fields = {"clippy_flags": "List[string] Flags to pass to clippy"},
+)
+
+def _clippy_flags_impl(ctx):
+    return ClippyFlagsInfo(clippy_flags = ctx.build_setting_value)
+
+clippy_flags = rule(
+    doc = (
+        "Add custom clippy flags from the command line with `--@rules_rust//:clippy_flags`."
+    ),
+    implementation = _clippy_flags_impl,
+    build_setting = config.string_list(flag = True),
+)
+
 def _get_clippy_ready_crate_info(target, aspect_ctx):
     """Check that a target is suitable for clippy and extract the `CrateInfo` provider from it.
 
@@ -44,9 +60,16 @@
     if target.label.workspace_root.startswith("external"):
         return None
 
-    # Targets annotated with `noclippy` will not be formatted
-    if aspect_ctx and "noclippy" in aspect_ctx.rule.attr.tags:
-        return None
+    # Targets with specific tags will not be formatted
+    if aspect_ctx:
+        ignore_tags = [
+            "noclippy",
+            "no-clippy",
+        ]
+
+        for tag in ignore_tags:
+            if tag in aspect_ctx.rule.attr.tags:
+                return None
 
     # Obviously ignore any targets that don't contain `CrateInfo`
     if rust_common.crate_info not in target:
@@ -106,12 +129,18 @@
     if crate_info.is_test:
         args.rustc_flags.add("--test")
 
+    clippy_flags = ctx.attr._clippy_flags[ClippyFlagsInfo].clippy_flags
+
     # For remote execution purposes, the clippy_out file must be a sibling of crate_info.output
     # or rustc may fail to create intermediate output files because the directory does not exist.
     if ctx.attr._capture_output[CaptureClippyOutputInfo].capture_output:
         clippy_out = ctx.actions.declare_file(ctx.label.name + ".clippy.out", sibling = crate_info.output)
         args.process_wrapper_flags.add("--stderr-file", clippy_out.path)
 
+        if clippy_flags:
+            fail("""Combining @rules_rust//:clippy_flags with @rules_rust//:capture_clippy_output=true is currently not supported.
+See https://github.com/bazelbuild/rules_rust/pull/1264#discussion_r853241339 for more detail.""")
+
         # If we are capturing the output, we want the build system to be able to keep going
         # and consume the output. Some clippy lints are denials, so we treat them as warnings.
         args.rustc_flags.add("-Wclippy::all")
@@ -121,18 +150,14 @@
         clippy_out = ctx.actions.declare_file(ctx.label.name + ".clippy.ok", sibling = crate_info.output)
         args.process_wrapper_flags.add("--touch-file", clippy_out.path)
 
-        # Turn any warnings from clippy or rustc into an error, as otherwise
-        # Bazel will consider the execution result of the aspect to be "success",
-        # and Clippy won't be re-triggered unless the source file is modified.
-        if "__bindgen" in ctx.rule.attr.tags:
-            # bindgen-generated content is likely to trigger warnings, so
-            # only fail on clippy warnings
-            args.rustc_flags.add("-Dclippy::style")
-            args.rustc_flags.add("-Dclippy::correctness")
-            args.rustc_flags.add("-Dclippy::complexity")
-            args.rustc_flags.add("-Dclippy::perf")
+        if clippy_flags:
+            args.rustc_flags.add_all(clippy_flags)
         else:
-            # fail on any warning
+            # The user didn't provide any clippy flags explicitly so we apply conservative defaults.
+
+            # Turn any warnings from clippy or rustc into an error, as otherwise
+            # Bazel will consider the execution result of the aspect to be "success",
+            # and Clippy won't be re-triggered unless the source file is modified.
             args.rustc_flags.add("-Dwarnings")
 
     # Upstream clippy requires one of these two filenames or it silently uses
@@ -177,6 +202,10 @@
             ),
             default = Label("@bazel_tools//tools/cpp:current_cc_toolchain"),
         ),
+        "_clippy_flags": attr.label(
+            doc = "Arguments to pass to clippy",
+            default = Label("//:clippy_flags"),
+        ),
         "_config": attr.label(
             doc = "The `clippy.toml` file used for configuration",
             allow_single_file = True,
@@ -186,6 +215,7 @@
             doc = "The desired `--error-format` flags for clippy",
             default = "//:error_format",
         ),
+        "_extra_rustc_flag": attr.label(default = "//:extra_rustc_flag"),
         "_extra_rustc_flags": attr.label(default = "//:extra_rustc_flags"),
         "_process_wrapper": attr.label(
             doc = "A process wrapper for running clippy on all platforms",
@@ -196,7 +226,7 @@
     },
     provides = [ClippyInfo],
     toolchains = [
-        str(Label("//rust:toolchain")),
+        str(Label("//rust:toolchain_type")),
         "@bazel_tools//tools/cpp:toolchain_type",
     ],
     incompatible_use_toolchain_transition = True,
diff --git a/third_party/rules_rust/rust/private/common.bzl b/third_party/rules_rust/rust/private/common.bzl
index 66425d2..025c4d7 100644
--- a/third_party/rules_rust/rust/private/common.bzl
+++ b/third_party/rules_rust/rust/private/common.bzl
@@ -23,16 +23,15 @@
 In the Bazel lingo, `rust_common` gives the access to the Rust Sandwich API.
 """
 
-load(":providers.bzl", "CrateInfo", "DepInfo", "StdLibInfo")
+load(":providers.bzl", "CrateInfo", "DepInfo", "StdLibInfo", "TestCrateInfo")
 
-# These constants only represent the default value for attributes and macros
-# defiend in `rules_rust`. Like any attribute public attribute, they can be
-# overwritten by the user on the rules they're defiend on.
+# This constant only represents the default value for attributes and macros
+# defined in `rules_rust`. Like any attribute public attribute, it can be
+# overwritten by the user on the rules they're defined on.
 #
 # Note: Code in `.github/workflows/crate_universe.yaml` looks for this line, if
 # you remove it or change its format, you will also need to update that code.
-DEFAULT_RUST_VERSION = "1.59.0"
-DEFAULT_RUST_EDITION = "2018"
+DEFAULT_RUST_VERSION = "1.62.1"
 
 def _create_crate_info(**kwargs):
     """A constructor for a `CrateInfo` provider
@@ -48,6 +47,8 @@
     """
     if not "wrapped_crate_type" in kwargs:
         kwargs.update({"wrapped_crate_type": None})
+    if not "metadata" in kwargs:
+        kwargs.update({"metadata": None})
     if not "rustc_env_files" in kwargs:
         kwargs.update({"rustc_env_files": []})
     return CrateInfo(**kwargs)
@@ -57,6 +58,6 @@
     crate_info = CrateInfo,
     dep_info = DepInfo,
     stdlib_info = StdLibInfo,
-    default_edition = DEFAULT_RUST_EDITION,
+    test_crate_info = TestCrateInfo,
     default_version = DEFAULT_RUST_VERSION,
 )
diff --git a/third_party/rules_rust/rust/private/providers.bzl b/third_party/rules_rust/rust/private/providers.bzl
index 0846498..464444b 100644
--- a/third_party/rules_rust/rust/private/providers.bzl
+++ b/third_party/rules_rust/rust/private/providers.bzl
@@ -22,6 +22,7 @@
         "deps": "depset[DepVariantInfo]: This crate's (rust or cc) dependencies' providers.",
         "edition": "str: The edition of this crate.",
         "is_test": "bool: If the crate is being compiled in a test context",
+        "metadata": "File: The rmeta file produced for this crate. It is optional.",
         "name": "str: The name of this crate.",
         "output": "File: The output File that will be produced, depends on crate type.",
         "owner": "Label: The label of the target that produced this CrateInfo",
@@ -50,6 +51,7 @@
         "transitive_build_infos": "depset[BuildInfo]",
         "transitive_crate_outputs": "depset[File]: All transitive crate outputs.",
         "transitive_crates": "depset[CrateInfo]",
+        "transitive_metadata_outputs": "depset[File]: All transitive metadata dependencies (.rmeta, for crates that provide them) and all transitive object dependencies (.rlib) for crates that don't provide metadata.",
         "transitive_noncrates": "depset[LinkerInput]: All transitive dependencies that aren't crates.",
     },
 )
@@ -95,6 +97,7 @@
         "srcs": "List[Target]: All targets from the original `srcs` attribute.",
         "std_files": "Depset[File]: `.a` files associated with the `std` module.",
         "std_rlibs": "List[File]: All `.rlib` files",
+        "test_files": "Depset[File]: `.a` files associated with the `test` module.",
     },
 )
 
@@ -109,3 +112,15 @@
         "output": "File with the clippy output.",
     },
 )
+
+TestCrateInfo = provider(
+    doc = "A wrapper around a CrateInfo. " +
+          "Certain rule types, like rust_static_library and rust_shared_library " +
+          "are not intended for consumption by other Rust targets, and should not " +
+          "provide a CrateInfo. However, one should still be able to write a rust_test " +
+          "for them. Thus, we create a CrateInfo, but do not advertise it as such, " +
+          "but rather through this provider, that rust_test understands.",
+    fields = {
+        "crate": "CrateInfo: The underlying CrateInfo of the dependency",
+    },
+)
diff --git a/third_party/rules_rust/rust/private/repository_utils.bzl b/third_party/rules_rust/rust/private/repository_utils.bzl
index 1c33331..86d3f78 100644
--- a/third_party/rules_rust/rust/private/repository_utils.bzl
+++ b/third_party/rules_rust/rust/private/repository_utils.bzl
@@ -7,7 +7,6 @@
     "system_to_dylib_ext",
     "system_to_staticlib_ext",
     "system_to_stdlib_linkflags",
-    "triple_to_constraint_set",
     "triple_to_system",
 )
 
@@ -15,8 +14,6 @@
 DEFAULT_STATIC_RUST_URL_TEMPLATES = ["https://static.rust-lang.org/dist/{}.tar.gz"]
 
 _build_file_for_compiler_template = """\
-load("@rules_rust//rust:toolchain.bzl", "rust_toolchain")
-
 filegroup(
     name = "rustc",
     srcs = ["bin/rustc{binary_ext}"],
@@ -46,7 +43,7 @@
 """
 
 def BUILD_for_compiler(target_triple):
-    """Emits a BUILD file the compiler `.tar.gz`.
+    """Emits a BUILD file the compiler archive.
 
     Args:
         target_triple (str): The triple of the target platform
@@ -63,8 +60,6 @@
     )
 
 _build_file_for_cargo_template = """\
-load("@rules_rust//rust:toolchain.bzl", "rust_toolchain")
-
 filegroup(
     name = "cargo",
     srcs = ["bin/cargo{binary_ext}"],
@@ -72,7 +67,7 @@
 )"""
 
 def BUILD_for_cargo(target_triple):
-    """Emits a BUILD file the cargo `.tar.gz`.
+    """Emits a BUILD file the cargo archive.
 
     Args:
         target_triple (str): The triple of the target platform
@@ -86,8 +81,6 @@
     )
 
 _build_file_for_rustfmt_template = """\
-load("@rules_rust//rust:toolchain.bzl", "rust_toolchain")
-
 filegroup(
     name = "rustfmt_bin",
     srcs = ["bin/rustfmt{binary_ext}"],
@@ -102,7 +95,7 @@
 """
 
 def BUILD_for_rustfmt(target_triple):
-    """Emits a BUILD file the rustfmt `.tar.gz`.
+    """Emits a BUILD file the rustfmt archive.
 
     Args:
         target_triple (str): The triple of the target platform
@@ -116,8 +109,6 @@
     )
 
 _build_file_for_clippy_template = """\
-load("@rules_rust//rust:toolchain.bzl", "rust_toolchain")
-
 filegroup(
     name = "clippy_driver_bin",
     srcs = ["bin/clippy-driver{binary_ext}"],
@@ -126,7 +117,7 @@
 """
 
 def BUILD_for_clippy(target_triple):
-    """Emits a BUILD file the clippy `.tar.gz`.
+    """Emits a BUILD file the clippy archive.
 
     Args:
         target_triple (str): The triple of the target platform
@@ -137,6 +128,35 @@
     system = triple_to_system(target_triple)
     return _build_file_for_clippy_template.format(binary_ext = system_to_binary_ext(system))
 
+_build_file_for_llvm_tools = """\
+filegroup(
+    name = "llvm_cov_bin",
+    srcs = ["lib/rustlib/{target_triple}/bin/llvm-cov{binary_ext}"],
+    visibility = ["//visibility:public"],
+)
+
+filegroup(
+    name = "llvm_profdata_bin",
+    srcs = ["lib/rustlib/{target_triple}/bin/llvm-profdata{binary_ext}"],
+    visibility = ["//visibility:public"],
+)
+"""
+
+def BUILD_for_llvm_tools(target_triple):
+    """Emits a BUILD file the llvm-tools binaries.
+
+    Args:
+        target_triple (str): The triple of the target platform
+
+    Returns:
+        str: The contents of a BUILD file
+    """
+    system = triple_to_system(target_triple)
+    return _build_file_for_llvm_tools.format(
+        binary_ext = system_to_binary_ext(system),
+        target_triple = target_triple,
+    )
+
 _build_file_for_stdlib_template = """\
 load("@rules_rust//rust:toolchain.bzl", "rust_stdlib_filegroup")
 
@@ -164,7 +184,7 @@
 """
 
 def BUILD_for_stdlib(target_triple):
-    """Emits a BUILD file the stdlib `.tar.gz`.
+    """Emits a BUILD file the stdlib archive.
 
     Args:
         target_triple (str): The triple of the target platform
@@ -181,14 +201,18 @@
     )
 
 _build_file_for_rust_toolchain_template = """\
+load("@rules_rust//rust:toolchain.bzl", "rust_toolchain")
+
 rust_toolchain(
-    name = "{toolchain_name}_impl",
+    name = "{toolchain_name}",
     rust_doc = "@{workspace_name}//:rustdoc",
     rust_std = "@{workspace_name}//:rust_std-{target_triple}",
     rustc = "@{workspace_name}//:rustc",
     rustfmt = {rustfmt_label},
     cargo = "@{workspace_name}//:cargo",
     clippy_driver = "@{workspace_name}//:clippy_driver_bin",
+    llvm_cov = {llvm_cov_label},
+    llvm_profdata = {llvm_profdata_label},
     rustc_lib = "@{workspace_name}//:rustc_lib",
     rustc_srcs = {rustc_srcs},
     allocator_library = {allocator_library},
@@ -213,6 +237,7 @@
         allocator_library,
         default_edition,
         include_rustfmt,
+        include_llvm_tools,
         stdlib_linkflags = None):
     """Emits a toolchain declaration to match an existing compiler and stdlib.
 
@@ -225,6 +250,7 @@
         allocator_library (str, optional): Target that provides allocator functions when rust_library targets are embedded in a cc_binary.
         default_edition (str): Default Rust edition.
         include_rustfmt (bool): Whether rustfmt is present in the toolchain.
+        include_llvm_tools (bool): Whether llvm-tools are present in the toolchain.
         stdlib_linkflags (list, optional): Overriden flags needed for linking to rust
                                            stdlib, akin to BAZEL_LINKLIBS. Defaults to
                                            None.
@@ -243,6 +269,11 @@
     rustfmt_label = "None"
     if include_rustfmt:
         rustfmt_label = "\"@{workspace_name}//:rustfmt_bin\"".format(workspace_name = workspace_name)
+    llvm_cov_label = "None"
+    llvm_profdata_label = "None"
+    if include_llvm_tools:
+        llvm_cov_label = "\"@{workspace_name}//:llvm_cov_bin\"".format(workspace_name = workspace_name)
+        llvm_profdata_label = "\"@{workspace_name}//:llvm_profdata_bin\"".format(workspace_name = workspace_name)
     allocator_library_label = "None"
     if allocator_library:
         allocator_library_label = "\"{allocator_library}\"".format(allocator_library = allocator_library)
@@ -261,6 +292,8 @@
         exec_triple = exec_triple,
         target_triple = target_triple,
         rustfmt_label = rustfmt_label,
+        llvm_cov_label = llvm_cov_label,
+        llvm_profdata_label = llvm_profdata_label,
     )
 
 _build_file_for_toolchain_template = """\
@@ -268,17 +301,23 @@
     name = "{name}",
     exec_compatible_with = {exec_constraint_sets_serialized},
     target_compatible_with = {target_constraint_sets_serialized},
-    toolchain = "@{parent_workspace_name}//:{name}_impl",
-    toolchain_type = "@rules_rust//rust:toolchain",
+    toolchain = "{toolchain}",
+    toolchain_type = "{toolchain_type}",
 )
 """
 
-def BUILD_for_toolchain(name, parent_workspace_name, exec_triple, target_triple):
+def BUILD_for_toolchain(
+        name,
+        toolchain,
+        toolchain_type,
+        target_compatible_with,
+        exec_compatible_with):
     return _build_file_for_toolchain_template.format(
         name = name,
-        exec_constraint_sets_serialized = serialized_constraint_set_from_triple(exec_triple),
-        target_constraint_sets_serialized = serialized_constraint_set_from_triple(target_triple),
-        parent_workspace_name = parent_workspace_name,
+        exec_constraint_sets_serialized = exec_compatible_with,
+        target_constraint_sets_serialized = target_compatible_with,
+        toolchain = toolchain,
+        toolchain_type = toolchain_type,
     )
 
 def load_rustfmt(ctx):
@@ -318,14 +357,56 @@
         ctx,
         iso_date = ctx.attr.iso_date,
         target_triple = target_triple,
-        tool_name = "rust",
-        tool_subdirectories = ["rustc", "clippy-preview", "cargo"],
+        tool_name = "rustc",
+        tool_subdirectories = ["rustc"],
         version = ctx.attr.version,
     )
 
-    compiler_build_file = BUILD_for_compiler(target_triple) + BUILD_for_clippy(target_triple) + BUILD_for_cargo(target_triple)
+    return BUILD_for_compiler(target_triple)
 
-    return compiler_build_file
+def load_clippy(ctx):
+    """Loads Clippy and yields corresponding BUILD for it
+
+    Args:
+        ctx (repository_ctx): A repository_ctx.
+
+    Returns:
+        str: The BUILD file contents for Clippy
+    """
+
+    target_triple = ctx.attr.exec_triple
+    load_arbitrary_tool(
+        ctx,
+        iso_date = ctx.attr.iso_date,
+        target_triple = target_triple,
+        tool_name = "clippy",
+        tool_subdirectories = ["clippy-preview"],
+        version = ctx.attr.version,
+    )
+
+    return BUILD_for_clippy(target_triple)
+
+def load_cargo(ctx):
+    """Loads Cargo and yields corresponding BUILD for it
+
+    Args:
+        ctx (repository_ctx): A repository_ctx.
+
+    Returns:
+        str: The BUILD file contents for Cargo
+    """
+
+    target_triple = ctx.attr.exec_triple
+    load_arbitrary_tool(
+        ctx,
+        iso_date = ctx.attr.iso_date,
+        target_triple = target_triple,
+        tool_name = "cargo",
+        tool_subdirectories = ["cargo"],
+        version = ctx.attr.version,
+    )
+
+    return BUILD_for_cargo(target_triple)
 
 def should_include_rustc_srcs(repository_ctx):
     """Determing whether or not to include rustc sources in the toolchain.
@@ -344,27 +425,24 @@
 
     return getattr(repository_ctx.attr, "include_rustc_srcs", False)
 
-def load_rust_src(ctx):
+def load_rust_src(ctx, sha256 = ""):
     """Loads the rust source code. Used by the rust-analyzer rust-project.json generator.
 
     Args:
         ctx (ctx): A repository_ctx.
+        sha256 (str): The sha256 value for the `rust-src` artifact
     """
     tool_suburl = produce_tool_suburl("rust-src", None, ctx.attr.version, ctx.attr.iso_date)
-    static_rust = ctx.os.environ.get("STATIC_RUST_URL", "https://static.rust-lang.org")
-    url = "{}/dist/{}.tar.gz".format(static_rust, tool_suburl)
+    url = ctx.attr.urls[0].format(tool_suburl)
 
     tool_path = produce_tool_path("rust-src", None, ctx.attr.version)
-    archive_path = tool_path + ".tar.gz"
-    ctx.download(
+    archive_path = tool_path + _get_tool_extension(ctx)
+    sha256 = sha256 or getattr(ctx.attr, "sha256s", {}).get(archive_path) or FILE_KEY_TO_SHA.get(archive_path) or ""
+    ctx.download_and_extract(
         url,
-        output = archive_path,
-        sha256 = ctx.attr.sha256s.get(tool_suburl) or FILE_KEY_TO_SHA.get(tool_suburl) or "",
-        auth = _make_auth_dict(ctx, [url]),
-    )
-    ctx.extract(
-        archive_path,
         output = "lib/rustlib/src",
+        sha256 = sha256,
+        auth = _make_auth_dict(ctx, [url]),
         stripPrefix = "{}/rust-src/lib/rustlib/src/rust".format(tool_path),
     )
     ctx.file(
@@ -377,6 +455,21 @@
 )""",
     )
 
+_build_file_for_rust_analyzer_toolchain_template = """\
+load("@rules_rust//rust:toolchain.bzl", "rust_analyzer_toolchain")
+
+rust_analyzer_toolchain(
+    name = "{name}",
+    rustc_srcs = "//lib/rustlib/src:rustc_srcs",
+    visibility = ["//visibility:public"],
+)
+"""
+
+def BUILD_for_rust_analyzer_toolchain(name):
+    return _build_file_for_rust_analyzer_toolchain_template.format(
+        name = name,
+    )
+
 def load_rust_stdlib(ctx, target_triple):
     """Loads a rust standard library and yields corresponding BUILD for it
 
@@ -385,7 +478,7 @@
         target_triple (str): The rust-style target triple of the tool
 
     Returns:
-        str: The BUILD file contents for this stdlib, and a toolchain decl to match
+        str: The BUILD file contents for this stdlib
     """
 
     load_arbitrary_tool(
@@ -397,29 +490,7 @@
         version = ctx.attr.version,
     )
 
-    toolchain_prefix = ctx.attr.toolchain_name_prefix or DEFAULT_TOOLCHAIN_NAME_PREFIX
-    stdlib_build_file = BUILD_for_stdlib(target_triple)
-
-    stdlib_linkflags = None
-    if "BAZEL_RUST_STDLIB_LINKFLAGS" in ctx.os.environ:
-        stdlib_linkflags = ctx.os.environ["BAZEL_RUST_STDLIB_LINKFLAGS"].split(":")
-
-    toolchain_build_file = BUILD_for_rust_toolchain(
-        name = "{toolchain_prefix}_{target_triple}".format(
-            toolchain_prefix = toolchain_prefix,
-            target_triple = target_triple,
-        ),
-        exec_triple = ctx.attr.exec_triple,
-        include_rustc_srcs = should_include_rustc_srcs(ctx),
-        allocator_library = ctx.attr.allocator_library,
-        target_triple = target_triple,
-        stdlib_linkflags = stdlib_linkflags,
-        workspace_name = ctx.attr.name,
-        default_edition = ctx.attr.edition,
-        include_rustfmt = not (not ctx.attr.rustfmt_version),
-    )
-
-    return stdlib_build_file + toolchain_build_file
+    return BUILD_for_stdlib(target_triple)
 
 def load_rustc_dev_nightly(ctx, target_triple):
     """Loads the nightly rustc dev component
@@ -458,6 +529,8 @@
         version = ctx.attr.version,
     )
 
+    return BUILD_for_llvm_tools(target_triple)
+
 def check_version_valid(version, iso_date, param_prefix = ""):
     """Verifies that the provided rust version and iso_date make sense.
 
@@ -473,21 +546,6 @@
     if version in ("beta", "nightly") and not iso_date:
         fail("{param_prefix}iso_date must be specified if version is 'beta' or 'nightly'".format(param_prefix = param_prefix))
 
-def serialized_constraint_set_from_triple(target_triple):
-    """Returns a string representing a set of constraints
-
-    Args:
-        target_triple (str): The target triple of the constraint set
-
-    Returns:
-        str: Formatted string representing the serialized constraint
-    """
-    constraint_set = triple_to_constraint_set(target_triple)
-    constraint_set_strs = []
-    for constraint in constraint_set:
-        constraint_set_strs.append("\"{}\"".format(constraint))
-    return "[{}]".format(", ".join(constraint_set_strs))
-
 def produce_tool_suburl(tool_name, target_triple, version, iso_date = None):
     """Produces a fully qualified Rust tool name for URL
 
@@ -528,10 +586,6 @@
     - https://static.rust-lang.org/dist/channel-rust-beta.toml
     - https://static.rust-lang.org/dist/channel-rust-nightly.toml
 
-    The environment variable `STATIC_RUST_URL` can be used to replace the schema and hostname of
-    the URLs used for fetching assets. `https://static.rust-lang.org/dist/channel-rust-stable.toml`
-    becomes `${STATIC_RUST_URL}/dist/channel-rust-stable.toml`
-
     Args:
         ctx (repository_ctx): A repository_ctx (no attrs required).
         tool_name (str): The name of the given tool per the archive naming.
@@ -559,32 +613,30 @@
     tool_suburl = produce_tool_suburl(tool_name, target_triple, version, iso_date)
     urls = []
 
-    static_rust_url_from_env = ctx.os.environ.get("STATIC_RUST_URL")
-    if static_rust_url_from_env:
-        urls.append("{}/dist/{}.tar.gz".format(static_rust_url_from_env, tool_suburl))
-
     for url in getattr(ctx.attr, "urls", DEFAULT_STATIC_RUST_URL_TEMPLATES):
         new_url = url.format(tool_suburl)
         if new_url not in urls:
             urls.append(new_url)
 
     tool_path = produce_tool_path(tool_name, target_triple, version)
-    archive_path = "{}.tar.gz".format(tool_path)
-    ctx.download(
-        urls,
-        output = archive_path,
-        sha256 = getattr(ctx.attr, "sha256s", dict()).get(tool_suburl) or
-                 FILE_KEY_TO_SHA.get(tool_suburl) or
-                 sha256,
-        auth = _make_auth_dict(ctx, urls),
-    )
+    archive_path = tool_path + _get_tool_extension(ctx)
+    sha256 = getattr(ctx.attr, "sha256s", dict()).get(archive_path) or FILE_KEY_TO_SHA.get(archive_path) or sha256
+
     for subdirectory in tool_subdirectories:
-        ctx.extract(
-            archive_path,
-            output = "",
+        # As long as the sha256 value is consistent accross calls here the
+        # cost of downloading an artifact is negated as by Bazel's caching.
+        result = ctx.download_and_extract(
+            urls,
+            sha256 = sha256,
+            auth = _make_auth_dict(ctx, urls),
             stripPrefix = "{}/{}".format(tool_path, subdirectory),
         )
 
+        # In the event no sha256 was provided, set it to the value of the first
+        # downloaded item so subsequent downloads use a cached artifact.
+        if not sha256:
+            sha256 = result.sha256
+
 def _make_auth_dict(ctx, urls):
     auth = getattr(ctx.attr, "auth", {})
     if not auth:
@@ -593,3 +645,12 @@
     for url in urls:
         ret[url] = auth
     return ret
+
+def _get_tool_extension(ctx):
+    urls = getattr(ctx.attr, "urls", DEFAULT_STATIC_RUST_URL_TEMPLATES)
+    if urls[0][-7:] == ".tar.gz":
+        return ".tar.gz"
+    elif urls[0][-7:] == ".tar.xz":
+        return ".tar.xz"
+    else:
+        return ""
diff --git a/third_party/rules_rust/rust/private/rust.bzl b/third_party/rules_rust/rust/private/rust.bzl
index 688d9bf..571813b 100644
--- a/third_party/rules_rust/rust/private/rust.bzl
+++ b/third_party/rules_rust/rust/private/rust.bzl
@@ -13,10 +13,12 @@
 # limitations under the License.
 
 # buildifier: disable=module-docstring
+load("@bazel_skylib//lib:paths.bzl", "paths")
 load("//rust/private:common.bzl", "rust_common")
 load("//rust/private:rustc.bzl", "rustc_compile_action")
 load(
     "//rust/private:utils.bzl",
+    "can_build_metadata",
     "compute_crate_name",
     "dedent",
     "determine_output_hash",
@@ -25,7 +27,6 @@
     "get_import_macro_deps",
     "transform_deps",
 )
-
 # TODO(marco): Separate each rule into its own file.
 
 def _assert_no_deprecated_attributes(_ctx):
@@ -105,26 +106,84 @@
         extension = extension,
     )
 
-def get_edition(attr, toolchain):
+def get_edition(attr, toolchain, label):
     """Returns the Rust edition from either the current rule's attirbutes or the current `rust_toolchain`
 
     Args:
         attr (struct): The current rule's attributes
         toolchain (rust_toolchain): The `rust_toolchain` for the current target
+        label (Label): The label of the target being built
 
     Returns:
         str: The target Rust edition
     """
     if getattr(attr, "edition"):
         return attr.edition
+    elif not toolchain.default_edition:
+        fail("Attribute `edition` is required for {}.".format(label))
     else:
         return toolchain.default_edition
 
-def crate_root_src(attr, srcs, crate_type):
-    """Finds the source file for the crate root.
+def _transform_sources(ctx, srcs, crate_root):
+    """Creates symlinks of the source files if needed.
+
+    Rustc assumes that the source files are located next to the crate root.
+    In case of a mix between generated and non-generated source files, this
+    we violate this assumption, as part of the sources will be located under
+    bazel-out/... . In order to allow for targets that contain both generated
+    and non-generated source files, we generate symlinks for all non-generated
+    files.
 
     Args:
-        attr (struct): The attributes of the current target
+        ctx (struct): The current rule's context.
+        srcs (List[File]): The sources listed in the `srcs` attribute
+        crate_root (File): The file specified in the `crate_root` attribute,
+                           if it exists, otherwise None
+
+    Returns:
+        Tuple(List[File], File): The transformed srcs and crate_root
+    """
+    has_generated_sources = len([src for src in srcs if not src.is_source]) > 0
+
+    if not has_generated_sources:
+        return srcs, crate_root
+
+    generated_sources = []
+
+    generated_root = crate_root
+
+    if crate_root and (crate_root.is_source or crate_root.root.path != ctx.bin_dir.path):
+        generated_root = ctx.actions.declare_file(crate_root.basename)
+        ctx.actions.symlink(
+            output = generated_root,
+            target_file = crate_root,
+            progress_message = "Creating symlink to source file: {}".format(crate_root.path),
+        )
+    if generated_root:
+        generated_sources.append(generated_root)
+
+    for src in srcs:
+        # We took care of the crate root above.
+        if src == crate_root:
+            continue
+        if src.is_source or src.root.path != ctx.bin_dir.path:
+            src_symlink = ctx.actions.declare_file(src.basename)
+            ctx.actions.symlink(
+                output = src_symlink,
+                target_file = src,
+                progress_message = "Creating symlink to source file: {}".format(src.path),
+            )
+            generated_sources.append(src_symlink)
+        else:
+            generated_sources.append(src)
+
+    return generated_sources, generated_root
+
+def crate_root_src(name, srcs, crate_type):
+    """Determines the source file for the crate root, should it not be specified in `attr.crate_root`.
+
+    Args:
+        name (str): The name of the target.
         srcs (list): A list of all sources for the target Crate.
         crate_type (str): The type of this crate ("bin", "lib", "rlib", "cdylib", etc).
 
@@ -135,19 +194,13 @@
     """
     default_crate_root_filename = "main.rs" if crate_type == "bin" else "lib.rs"
 
-    crate_root = None
-    if hasattr(attr, "crate_root"):
-        if attr.crate_root:
-            crate_root = attr.crate_root.files.to_list()[0]
-
+    crate_root = (
+        (srcs[0] if len(srcs) == 1 else None) or
+        _shortest_src_with_basename(srcs, default_crate_root_filename) or
+        _shortest_src_with_basename(srcs, name + ".rs")
+    )
     if not crate_root:
-        crate_root = (
-            (srcs[0] if len(srcs) == 1 else None) or
-            _shortest_src_with_basename(srcs, default_crate_root_filename) or
-            _shortest_src_with_basename(srcs, attr.name + ".rs")
-        )
-    if not crate_root:
-        file_names = [default_crate_root_filename, attr.name + ".rs"]
+        file_names = [default_crate_root_filename, name + ".rs"]
         fail("No {} source file found.".format(" or ".join(file_names)), "srcs")
     return crate_root
 
@@ -237,22 +290,23 @@
         list: A list of providers. See `rustc_compile_action`
     """
 
-    # Find lib.rs
-    crate_root = crate_root_src(ctx.attr, ctx.files.srcs, "lib")
+    srcs, crate_root = _transform_sources(ctx, ctx.files.srcs, getattr(ctx.file, "crate_root", None))
+    if not crate_root:
+        crate_root = crate_root_src(ctx.attr.name, srcs, "lib")
     _assert_no_deprecated_attributes(ctx)
     _assert_correct_dep_mapping(ctx)
 
     toolchain = find_toolchain(ctx)
 
     # Determine unique hash for this rlib.
-    # Note that we don't include a hash for `cdylib` since they are meant to be consumed externally and having a
-    # deterministic name is important since it ends up embedded in the executable. This is problematic when one needs
-    # to include the library with a specific filename into a larger application.
+    # Note that we don't include a hash for `cdylib` and `staticlib` since they are meant to be consumed externally
+    # and having a deterministic name is important since it ends up embedded in the executable. This is problematic
+    # when one needs to include the library with a specific filename into a larger application.
     # (see https://github.com/bazelbuild/rules_rust/issues/405#issuecomment-993089889 for more details)
-    if crate_type != "cdylib":
-        output_hash = determine_output_hash(crate_root, ctx.label)
-    else:
+    if crate_type in ["cdylib", "staticlib"]:
         output_hash = None
+    else:
+        output_hash = determine_output_hash(crate_root, ctx.label)
 
     crate_name = compute_crate_name(ctx.workspace_name, ctx.label, toolchain, ctx.attr.crate_name)
     rust_lib_name = _determine_lib_name(
@@ -263,6 +317,13 @@
     )
     rust_lib = ctx.actions.declare_file(rust_lib_name)
 
+    rust_metadata = None
+    if can_build_metadata(toolchain, ctx, crate_type) and not ctx.attr.disable_pipelining:
+        rust_metadata = ctx.actions.declare_file(
+            paths.replace_extension(rust_lib_name, ".rmeta"),
+            sibling = rust_lib,
+        )
+
     deps = transform_deps(ctx.attr.deps)
     proc_macro_deps = transform_deps(ctx.attr.proc_macro_deps + get_import_macro_deps(ctx))
 
@@ -270,17 +331,17 @@
         ctx = ctx,
         attr = ctx.attr,
         toolchain = toolchain,
-        dep_env_files = ctx.files.dep_env_files,
         crate_info = rust_common.create_crate_info(
             name = crate_name,
             type = crate_type,
             root = crate_root,
-            srcs = depset(ctx.files.srcs),
+            srcs = depset(srcs),
             deps = depset(deps),
             proc_macro_deps = depset(proc_macro_deps),
             aliases = ctx.attr.aliases,
             output = rust_lib,
-            edition = get_edition(ctx.attr, toolchain),
+            metadata = rust_metadata,
+            edition = get_edition(ctx.attr, toolchain, ctx.label),
             rustc_env = ctx.attr.rustc_env,
             rustc_env_files = ctx.files.rustc_env_files,
             is_test = False,
@@ -308,6 +369,10 @@
     deps = transform_deps(ctx.attr.deps)
     proc_macro_deps = transform_deps(ctx.attr.proc_macro_deps + get_import_macro_deps(ctx))
 
+    srcs, crate_root = _transform_sources(ctx, ctx.files.srcs, getattr(ctx.file, "crate_root", None))
+    if not crate_root:
+        crate_root = crate_root_src(ctx.attr.name, srcs, ctx.attr.crate_type)
+
     return rustc_compile_action(
         ctx = ctx,
         attr = ctx.attr,
@@ -315,13 +380,13 @@
         crate_info = rust_common.create_crate_info(
             name = crate_name,
             type = ctx.attr.crate_type,
-            root = crate_root_src(ctx.attr, ctx.files.srcs, ctx.attr.crate_type),
-            srcs = depset(ctx.files.srcs),
+            root = crate_root,
+            srcs = depset(srcs),
             deps = depset(deps),
             proc_macro_deps = depset(proc_macro_deps),
             aliases = ctx.attr.aliases,
             output = output,
-            edition = get_edition(ctx.attr, toolchain),
+            edition = get_edition(ctx.attr, toolchain, ctx.label),
             rustc_env = ctx.attr.rustc_env,
             rustc_env_files = ctx.files.rustc_env_files,
             is_test = False,
@@ -330,13 +395,11 @@
         ),
     )
 
-def _rust_test_common(ctx, toolchain, output):
-    """Builds a Rust test binary.
+def _rust_test_impl(ctx):
+    """The implementation of the `rust_test` rule.
 
     Args:
         ctx (ctx): The ctx object for the current target.
-        toolchain (rust_toolchain): The current `rust_toolchain`
-        output (File): The output File that will be produced, depends on crate type.
 
     Returns:
         list: The list of providers. See `rustc_compile_action`
@@ -344,7 +407,9 @@
     _assert_no_deprecated_attributes(ctx)
     _assert_correct_dep_mapping(ctx)
 
-    crate_name = compute_crate_name(ctx.workspace_name, ctx.label, toolchain, ctx.attr.crate_name)
+    toolchain = find_toolchain(ctx)
+
+    srcs, crate_root = _transform_sources(ctx, ctx.files.srcs, getattr(ctx.file, "crate_root", None))
     crate_type = "bin"
 
     deps = transform_deps(ctx.attr.deps)
@@ -352,7 +417,16 @@
 
     if ctx.attr.crate:
         # Target is building the crate in `test` config
-        crate = ctx.attr.crate[rust_common.crate_info]
+        crate = ctx.attr.crate[rust_common.crate_info] if rust_common.crate_info in ctx.attr.crate else ctx.attr.crate[rust_common.test_crate_info].crate
+
+        output_hash = determine_output_hash(crate.root, ctx.label)
+        output = ctx.actions.declare_file(
+            "test-%s/%s%s" % (
+                output_hash,
+                ctx.label.name,
+                toolchain.binary_ext,
+            ),
+        )
 
         # Optionally join compile data
         if crate.compile_data:
@@ -365,10 +439,10 @@
 
         # Build the test binary using the dependency's srcs.
         crate_info = rust_common.create_crate_info(
-            name = crate_name,
+            name = crate.name,
             type = crate_type,
             root = crate.root,
-            srcs = depset(ctx.files.srcs, transitive = [crate.srcs]),
+            srcs = depset(srcs, transitive = [crate.srcs]),
             deps = depset(deps, transitive = [crate.deps]),
             proc_macro_deps = depset(proc_macro_deps, transitive = [crate.proc_macro_deps]),
             aliases = ctx.attr.aliases,
@@ -382,17 +456,29 @@
             owner = ctx.label,
         )
     else:
+        if not crate_root:
+            crate_root = crate_root_src(ctx.attr.name, ctx.files.srcs, "lib")
+
+        output_hash = determine_output_hash(crate_root, ctx.label)
+        output = ctx.actions.declare_file(
+            "test-%s/%s%s" % (
+                output_hash,
+                ctx.label.name,
+                toolchain.binary_ext,
+            ),
+        )
+
         # Target is a standalone crate. Build the test binary as its own crate.
         crate_info = rust_common.create_crate_info(
-            name = crate_name,
+            name = compute_crate_name(ctx.workspace_name, ctx.label, toolchain, ctx.attr.crate_name),
             type = crate_type,
-            root = crate_root_src(ctx.attr, ctx.files.srcs, "lib"),
-            srcs = depset(ctx.files.srcs),
+            root = crate_root,
+            srcs = depset(srcs),
             deps = depset(deps),
             proc_macro_deps = depset(proc_macro_deps),
             aliases = ctx.attr.aliases,
             output = output,
-            edition = get_edition(ctx.attr, toolchain),
+            edition = get_edition(ctx.attr, toolchain, ctx.label),
             rustc_env = ctx.attr.rustc_env,
             rustc_env_files = ctx.files.rustc_env_files,
             is_test = True,
@@ -414,27 +500,42 @@
         getattr(ctx.attr, "env", {}),
         data,
     )
+    if toolchain.llvm_cov and ctx.configuration.coverage_enabled:
+        if not toolchain.llvm_profdata:
+            fail("toolchain.llvm_profdata is required if toolchain.llvm_cov is set.")
+
+        env["RUST_LLVM_COV"] = toolchain.llvm_cov.path
+        env["RUST_LLVM_PROFDATA"] = toolchain.llvm_profdata.path
     providers.append(testing.TestEnvironment(env))
 
     return providers
 
-def _rust_test_impl(ctx):
-    """The implementation of the `rust_test` rule
+def _stamp_attribute(default_value):
+    return attr.int(
+        doc = dedent("""\
+            Whether to encode build information into the `Rustc` action. Possible values:
 
-    Args:
-        ctx (ctx): The rule's context object
+            - `stamp = 1`: Always stamp the build information into the `Rustc` action, even in \
+            [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds. \
+            This setting should be avoided, since it potentially kills remote caching for the target and \
+            any downstream actions that depend on it.
 
-    Returns:
-        list: A list of providers. See `_rust_test_common`
-    """
-    toolchain = find_toolchain(ctx)
+            - `stamp = 0`: Always replace build information by constant values. This gives good build result caching.
 
-    output = ctx.actions.declare_file(
-        ctx.label.name + toolchain.binary_ext,
+            - `stamp = -1`: Embedding of build information is controlled by the \
+            [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.
+
+            Stamped targets are not rebuilt unless their dependencies change.
+
+            For example if a `rust_library` is stamped, and a `rust_binary` depends on that library, the stamped
+            library won't be rebuilt when we change sources of the `rust_binary`. This is different from how
+            [`cc_library.linkstamps`](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp)
+            behaves.
+        """),
+        default = default_value,
+        values = [1, 0, -1],
     )
 
-    return _rust_test_common(ctx, toolchain, output)
-
 _common_attrs = {
     "aliases": attr.label_keyed_string_dict(
         doc = dedent("""\
@@ -542,14 +643,6 @@
         """),
         allow_files = True,
     ),
-    "dep_env_files": attr.label_list(
-        doc = dedent("""\
-            Files containing additional environment variables to set for build scripts of direct dependencies.
-
-            See `rustc_env_files` for formatting details.
-        """),
-        allow_files = True,
-    ),
     "rustc_flags": attr.string_list(
         doc = dedent("""\
             List of compiler flags passed to `rustc`.
@@ -574,44 +667,51 @@
         """),
         allow_files = [".rs"],
     ),
-    "stamp": attr.int(
-        doc = dedent("""\
-            Whether to encode build information into the `Rustc` action. Possible values:
-
-            - `stamp = 1`: Always stamp the build information into the `Rustc` action, even in \
-            [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds. \
-            This setting should be avoided, since it potentially kills remote caching for the target and \
-            any downstream actions that depend on it.
-
-            - `stamp = 0`: Always replace build information by constant values. This gives good build result caching.
-
-            - `stamp = -1`: Embedding of build information is controlled by the \
-            [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.
-
-            Stamped targets are not rebuilt unless their dependencies change.
-
-            For example if a `rust_library` is stamped, and a `rust_binary` depends on that library, the stamped
-            library won't be rebuilt when we change sources of the `rust_binary`. This is different from how
-            [`cc_library.linkstamps`](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.linkstamp)
-            behaves.
-        """),
-        default = -1,
-        values = [1, 0, -1],
-    ),
+    "stamp": _stamp_attribute(default_value = 0),
     "version": attr.string(
         doc = "A version to inject in the cargo environment variable.",
         default = "0.0.0",
     ),
     "_cc_toolchain": attr.label(
-        default = "@bazel_tools//tools/cpp:current_cc_toolchain",
+        doc = (
+            "In order to use find_cc_toolchain, your rule has to depend " +
+            "on C++ toolchain. See `@rules_cc//cc:find_cc_toolchain.bzl` " +
+            "docs for details."
+        ),
+        default = Label("@bazel_tools//tools/cpp:current_cc_toolchain"),
     ),
-    "_error_format": attr.label(default = "//:error_format"),
-    "_extra_exec_rustc_flags": attr.label(default = "//:extra_exec_rustc_flags"),
-    "_extra_rustc_flags": attr.label(default = "//:extra_rustc_flags"),
+    "_collect_cc_coverage": attr.label(
+        default = Label("//util:collect_coverage"),
+        executable = True,
+        cfg = "exec",
+    ),
+    "_error_format": attr.label(
+        default = Label("//:error_format"),
+    ),
+    "_extra_exec_rustc_flag": attr.label(
+        default = Label("//:extra_exec_rustc_flag"),
+    ),
+    "_extra_exec_rustc_flags": attr.label(
+        default = Label("//:extra_exec_rustc_flags"),
+    ),
+    "_extra_rustc_flag": attr.label(
+        default = Label("//:extra_rustc_flag"),
+    ),
+    "_extra_rustc_flags": attr.label(
+        default = Label("//:extra_rustc_flags"),
+    ),
     "_import_macro_dep": attr.label(
-        default = "@rules_rust//util/import",
+        default = Label("//util/import"),
+        cfg = "exec",
+    ),
+    "_is_proc_macro_dep": attr.label(
+        default = Label("//:is_proc_macro_dep"),
+    ),
+    "_is_proc_macro_dep_enabled": attr.label(
+        default = Label("//:is_proc_macro_dep_enabled"),
     ),
     "_process_wrapper": attr.label(
+        doc = "A process wrapper for running rustc on all platforms.",
         default = Label("//util/process_wrapper"),
         executable = True,
         allow_single_file = True,
@@ -623,7 +723,22 @@
     ),
 }
 
-_rust_test_attrs = {
+_experimental_use_cc_common_link_attrs = {
+    "experimental_use_cc_common_link": attr.int(
+        doc = (
+            "Whether to use cc_common.link to link rust binaries. " +
+            "Possible values: [-1, 0, 1]. " +
+            "-1 means use the value of the toolchain.experimental_use_cc_common_link " +
+            "boolean build setting to determine. " +
+            "0 means do not use cc_common.link (use rustc instead). " +
+            "1 means use cc_common.link."
+        ),
+        values = [-1, 0, 1],
+        default = -1,
+    ),
+}
+
+_rust_test_attrs = dict({
     "crate": attr.label(
         mandatory = False,
         doc = dedent("""\
@@ -660,7 +775,7 @@
         default = Label("@bazel_tools//tools/cpp:grep-includes"),
         executable = True,
     ),
-}
+}.items() + _experimental_use_cc_common_link_attrs.items())
 
 _common_providers = [
     rust_common.crate_info,
@@ -671,11 +786,20 @@
 rust_library = rule(
     implementation = _rust_library_impl,
     provides = _common_providers,
-    attrs = dict(_common_attrs.items()),
+    attrs = dict(_common_attrs.items() + {
+        "disable_pipelining": attr.bool(
+            default = False,
+            doc = dedent("""\
+                Disables pipelining for this rule if it is globally enabled.
+                This will cause this rule to not produce a `.rmeta` file and all the dependent
+                crates will instead use the `.rlib` file.
+            """),
+        ),
+    }.items()),
     fragments = ["cpp"],
     host_fragments = ["cpp"],
     toolchains = [
-        str(Label("//rust:toolchain")),
+        str(Label("//rust:toolchain_type")),
         "@bazel_tools//tools/cpp:toolchain_type",
     ],
     incompatible_use_toolchain_transition = True,
@@ -747,12 +871,11 @@
 
 rust_static_library = rule(
     implementation = _rust_static_library_impl,
-    provides = _common_providers,
     attrs = dict(_common_attrs.items()),
     fragments = ["cpp"],
     host_fragments = ["cpp"],
     toolchains = [
-        str(Label("//rust:toolchain")),
+        str(Label("//rust:toolchain_type")),
         "@bazel_tools//tools/cpp:toolchain_type",
     ],
     incompatible_use_toolchain_transition = True,
@@ -771,12 +894,11 @@
 
 rust_shared_library = rule(
     implementation = _rust_shared_library_impl,
-    provides = _common_providers,
     attrs = dict(_common_attrs.items()),
     fragments = ["cpp"],
     host_fragments = ["cpp"],
     toolchains = [
-        str(Label("//rust:toolchain")),
+        str(Label("//rust:toolchain_type")),
         "@bazel_tools//tools/cpp:toolchain_type",
     ],
     incompatible_use_toolchain_transition = True,
@@ -793,14 +915,42 @@
         """),
 )
 
+def _proc_macro_dep_transition_impl(settings, _attr):
+    if settings["//:is_proc_macro_dep_enabled"]:
+        return {"//:is_proc_macro_dep": True}
+    else:
+        return []
+
+_proc_macro_dep_transition = transition(
+    inputs = ["//:is_proc_macro_dep_enabled"],
+    outputs = ["//:is_proc_macro_dep"],
+    implementation = _proc_macro_dep_transition_impl,
+)
+
 rust_proc_macro = rule(
     implementation = _rust_proc_macro_impl,
     provides = _common_providers,
-    attrs = dict(_common_attrs.items()),
+    # Start by copying the common attributes, then override the `deps` attribute
+    # to apply `_proc_macro_dep_transition`. To add this transition we additionally
+    # need to declare `_allowlist_function_transition`, see
+    # https://docs.bazel.build/versions/main/skylark/config.html#user-defined-transitions.
+    attrs = dict(
+        _common_attrs.items(),
+        _allowlist_function_transition = attr.label(default = Label("//tools/allowlists/function_transition_allowlist")),
+        deps = attr.label_list(
+            doc = dedent("""\
+            List of other libraries to be linked to this library target.
+
+            These can be either other `rust_library` targets or `cc_library` targets if
+            linking a native library.
+        """),
+            cfg = _proc_macro_dep_transition,
+        ),
+    ),
     fragments = ["cpp"],
     host_fragments = ["cpp"],
     toolchains = [
-        str(Label("//rust:toolchain")),
+        str(Label("//rust:toolchain_type")),
         "@bazel_tools//tools/cpp:toolchain_type",
     ],
     incompatible_use_toolchain_transition = True,
@@ -809,7 +959,7 @@
         """),
 )
 
-_rust_binary_attrs = {
+_rust_binary_attrs = dict({
     "crate_type": attr.string(
         doc = dedent("""\
             Crate type that will be passed to `rustc` to be used for building this crate.
@@ -834,13 +984,14 @@
         ),
         default = False,
     ),
+    "stamp": _stamp_attribute(default_value = -1),
     "_grep_includes": attr.label(
         allow_single_file = True,
         cfg = "exec",
         default = Label("@bazel_tools//tools/cpp:grep-includes"),
         executable = True,
     ),
-}
+}.items() + _experimental_use_cc_common_link_attrs.items())
 
 rust_binary = rule(
     implementation = _rust_binary_impl,
@@ -850,7 +1001,7 @@
     fragments = ["cpp"],
     host_fragments = ["cpp"],
     toolchains = [
-        str(Label("//rust:toolchain")),
+        str(Label("//rust:toolchain_type")),
         "@bazel_tools//tools/cpp:toolchain_type",
     ],
     incompatible_use_toolchain_transition = True,
@@ -944,6 +1095,59 @@
 """),
 )
 
+def _common_attrs_for_binary_without_process_wrapper(attrs):
+    new_attr = dict(attrs)
+
+    # use a fake process wrapper
+    new_attr["_process_wrapper"] = attr.label(
+        default = None,
+        executable = True,
+        allow_single_file = True,
+        cfg = "exec",
+    )
+
+    # fix stamp = 0
+    new_attr["stamp"] = attr.int(
+        doc = dedent("""\
+            Fix `stamp = 0` as stamping is not supported when building without process_wrapper:
+            https://github.com/bazelbuild/rules_rust/blob/8df4517d370b0c543a01ba38b63e1d5a4104b035/rust/private/rustc.bzl#L955
+        """),
+        default = 0,
+        values = [0],
+    )
+
+    return new_attr
+
+# Provides an internal rust_{binary,library} to use that we can use to build the process
+# wrapper, this breaks the dependency of rust_* on the process wrapper by
+# setting it to None, which the functions in rustc detect and build accordingly.
+rust_binary_without_process_wrapper = rule(
+    implementation = _rust_binary_impl,
+    provides = _common_providers,
+    attrs = _common_attrs_for_binary_without_process_wrapper(_common_attrs.items() + _rust_binary_attrs.items()),
+    executable = True,
+    fragments = ["cpp"],
+    host_fragments = ["cpp"],
+    toolchains = [
+        str(Label("//rust:toolchain_type")),
+        "@bazel_tools//tools/cpp:toolchain_type",
+    ],
+    incompatible_use_toolchain_transition = True,
+)
+
+rust_library_without_process_wrapper = rule(
+    implementation = _rust_library_impl,
+    provides = _common_providers,
+    attrs = dict(_common_attrs_for_binary_without_process_wrapper(_common_attrs).items()),
+    fragments = ["cpp"],
+    host_fragments = ["cpp"],
+    toolchains = [
+        str(Label("//rust:toolchain_type")),
+        "@bazel_tools//tools/cpp:toolchain_type",
+    ],
+    incompatible_use_toolchain_transition = True,
+)
+
 rust_test = rule(
     implementation = _rust_test_impl,
     provides = _common_providers,
@@ -954,7 +1158,7 @@
     host_fragments = ["cpp"],
     test = True,
     toolchains = [
-        str(Label("//rust:toolchain")),
+        str(Label("//rust:toolchain_type")),
         "@bazel_tools//tools/cpp:toolchain_type",
     ],
     incompatible_use_toolchain_transition = True,
@@ -1003,8 +1207,9 @@
         }
         ```
 
-        To build and run the tests, simply add a `rust_test` rule with no `srcs` and \
-        only depends on the `hello_lib` `rust_library` target:
+        To build and run the tests, simply add a `rust_test` rule with no `srcs`
+        and only depends on the `hello_lib` `rust_library` target via the
+        `crate` attribute:
 
         `hello_lib/BUILD`:
         ```python
@@ -1017,24 +1222,15 @@
 
         rust_test(
             name = "hello_lib_test",
-            deps = [":hello_lib"],
-        )
-        ```
-
-        Run the test with `bazel build //hello_lib:hello_lib_test`.
-
-        To run a crate or lib with the `#[cfg(test)]` configuration, handling inline \
-        tests, you should specify the crate directly like so.
-
-        ```python
-        rust_test(
-            name = "hello_lib_test",
             crate = ":hello_lib",
             # You may add other deps that are specific to the test configuration
             deps = ["//some/dev/dep"],
-        )
         ```
 
+        Run the test with `bazel test //hello_lib:hello_lib_test`. The crate
+        will be built using the same crate name as the underlying ":hello_lib"
+        crate.
+
         ### Example: `test` directory
 
         Integration tests that live in the [`tests` directory][int-tests], they are \
@@ -1087,7 +1283,7 @@
         )
         ```
 
-        Run the test with `bazel build //hello_lib:hello_lib_test`.
+        Run the test with `bazel test //hello_lib:greeting_test`.
 """),
 )
 
@@ -1154,7 +1350,6 @@
         test_name = name + "_" + src[:-3]
         rust_test(
             name = test_name,
-            crate_name = test_name.replace("/", "_"),
             srcs = [src],
             **kwargs
         )
diff --git a/third_party/rules_rust/rust/private/rust_analyzer.bzl b/third_party/rules_rust/rust/private/rust_analyzer.bzl
index e28ca30..7515fd7 100644
--- a/third_party/rules_rust/rust/private/rust_analyzer.bzl
+++ b/third_party/rules_rust/rust/private/rust_analyzer.bzl
@@ -39,7 +39,7 @@
 )
 
 def _rust_analyzer_aspect_impl(target, ctx):
-    if rust_common.crate_info not in target:
+    if rust_common.crate_info not in target and rust_common.test_crate_info not in target:
         return []
 
     toolchain = find_toolchain(ctx)
@@ -52,21 +52,30 @@
     if hasattr(ctx.rule.attr, "rustc_flags"):
         cfgs += [f[6:] for f in ctx.rule.attr.rustc_flags if f.startswith("--cfg ") or f.startswith("--cfg=")]
 
-    # Save BuildInfo if we find any (for build script output)
     build_info = None
-    for dep in ctx.rule.attr.deps:
-        if BuildInfo in dep:
-            build_info = dep[BuildInfo]
+    dep_infos = []
+    if hasattr(ctx.rule.attr, "deps"):
+        for dep in ctx.rule.attr.deps:
+            # Save BuildInfo if we find any (for build script output)
+            if BuildInfo in dep:
+                build_info = dep[BuildInfo]
+        dep_infos = [dep[RustAnalyzerInfo] for dep in ctx.rule.attr.deps if RustAnalyzerInfo in dep]
 
-    dep_infos = [dep[RustAnalyzerInfo] for dep in ctx.rule.attr.deps if RustAnalyzerInfo in dep]
     if hasattr(ctx.rule.attr, "proc_macro_deps"):
         dep_infos += [dep[RustAnalyzerInfo] for dep in ctx.rule.attr.proc_macro_deps if RustAnalyzerInfo in dep]
     if hasattr(ctx.rule.attr, "crate") and ctx.rule.attr.crate != None:
         dep_infos.append(ctx.rule.attr.crate[RustAnalyzerInfo])
+    if hasattr(ctx.rule.attr, "actual") and ctx.rule.attr.actual != None and RustAnalyzerInfo in ctx.rule.attr.actual:
+        dep_infos.append(ctx.rule.attr.actual[RustAnalyzerInfo])
 
     crate_spec = ctx.actions.declare_file(ctx.label.name + ".rust_analyzer_crate_spec")
 
-    crate_info = target[rust_common.crate_info]
+    if rust_common.crate_info in target:
+        crate_info = target[rust_common.crate_info]
+    elif rust_common.test_crate_info in target:
+        crate_info = target[rust_common.test_crate_info].crate
+    else:
+        fail("Unexpected target type: {}".format(target))
 
     rust_analyzer_info = RustAnalyzerInfo(
         crate = crate_info,
@@ -97,7 +106,14 @@
     Returns:
         (path): The path to the proc macro dylib, or None if this crate is not a proc-macro.
     """
-    if target[rust_common.crate_info].type != "proc-macro":
+    if rust_common.crate_info in target:
+        crate_info = target[rust_common.crate_info]
+    elif rust_common.test_crate_info in target:
+        crate_info = target[rust_common.test_crate_info].crate
+    else:
+        return None
+
+    if crate_info.type != "proc-macro":
         return None
 
     dylib_ext = system_to_dylib_ext(triple_to_system(toolchain.target_triple))
@@ -111,14 +127,15 @@
     return None
 
 rust_analyzer_aspect = aspect(
-    attr_aspects = ["deps", "proc_macro_deps", "crate"],
+    attr_aspects = ["deps", "proc_macro_deps", "crate", "actual"],
     implementation = _rust_analyzer_aspect_impl,
-    toolchains = [str(Label("//rust:toolchain"))],
+    toolchains = [str(Label("//rust:toolchain_type"))],
     incompatible_use_toolchain_transition = True,
     doc = "Annotates rust rules with RustAnalyzerInfo later used to build a rust-project.json",
 )
 
-_exec_root_tmpl = "__EXEC_ROOT__/"
+_EXEC_ROOT_TEMPLATE = "__EXEC_ROOT__/"
+_OUTPUT_BASE_TEMPLATE = "__OUTPUT_BASE__/"
 
 def _crate_id(crate_info):
     """Returns a unique stable identifier for a crate
@@ -149,24 +166,20 @@
 
     # Switch on external/ to determine if crates are in the workspace or remote.
     # TODO: Some folks may want to override this for vendored dependencies.
-    root_path = info.crate.root.path
-    root_dirname = info.crate.root.dirname
-    if root_path.startswith("external/"):
-        crate["is_workspace_member"] = False
-        crate["root_module"] = _exec_root_tmpl + root_path
-        crate_root = _exec_root_tmpl + root_dirname
-    else:
-        crate["is_workspace_member"] = True
-        crate["root_module"] = root_path
-        crate_root = root_dirname
+    is_external = info.crate.root.path.startswith("external/")
+    is_generated = not info.crate.root.is_source
+    path_prefix = _EXEC_ROOT_TEMPLATE if is_external or is_generated else ""
+    crate["is_workspace_member"] = not is_external
+    crate["root_module"] = path_prefix + info.crate.root.path
+    crate_root = path_prefix + info.crate.root.dirname
 
     if info.build_info != None:
         out_dir_path = info.build_info.out_dir.path
-        crate["env"].update({"OUT_DIR": _exec_root_tmpl + out_dir_path})
+        crate["env"].update({"OUT_DIR": _EXEC_ROOT_TEMPLATE + out_dir_path})
         crate["source"] = {
             # We have to tell rust-analyzer about our out_dir since it's not under the crate root.
             "exclude_dirs": [],
-            "include_dirs": [crate_root, _exec_root_tmpl + out_dir_path],
+            "include_dirs": [crate_root, _EXEC_ROOT_TEMPLATE + out_dir_path],
         }
 
     # TODO: The only imagined use case is an env var holding a filename in the workspace passed to a
@@ -188,21 +201,42 @@
     crate["cfg"] = info.cfgs
     crate["target"] = find_toolchain(ctx).target_triple
     if info.proc_macro_dylib_path != None:
-        crate["proc_macro_dylib_path"] = _exec_root_tmpl + info.proc_macro_dylib_path
+        crate["proc_macro_dylib_path"] = _EXEC_ROOT_TEMPLATE + info.proc_macro_dylib_path
     return crate
 
-def _rust_analyzer_detect_sysroot_impl(ctx):
-    rust_toolchain = find_toolchain(ctx)
+def _rust_analyzer_toolchain_impl(ctx):
+    toolchain = platform_common.ToolchainInfo(
+        rustc_srcs = ctx.attr.rustc_srcs,
+    )
 
-    if not rust_toolchain.rustc_srcs:
+    return [toolchain]
+
+rust_analyzer_toolchain = rule(
+    implementation = _rust_analyzer_toolchain_impl,
+    doc = "A toolchain for [rust-analyzer](https://rust-analyzer.github.io/).",
+    attrs = {
+        "rustc_srcs": attr.label(
+            doc = "The source code of rustc.",
+            mandatory = True,
+        ),
+    },
+    incompatible_use_toolchain_transition = True,
+)
+
+def _rust_analyzer_detect_sysroot_impl(ctx):
+    rust_analyzer_toolchain = ctx.toolchains[Label("@rules_rust//rust/rust_analyzer:toolchain_type")]
+
+    if not rust_analyzer_toolchain.rustc_srcs:
         fail(
-            "Current Rust toolchain doesn't contain rustc sources in `rustc_srcs` attribute.",
-            "These are needed by rust analyzer.",
-            "If you are using the default Rust toolchain, add `rust_repositories(include_rustc_srcs = True, ...).` to your WORKSPACE file.",
+            "Current Rust-Analyzer toolchain doesn't contain rustc sources in `rustc_srcs` attribute.",
+            "These are needed by rust-analyzer. If you are using the default Rust toolchain, add `rust_repositories(include_rustc_srcs = True, ...).` to your WORKSPACE file.",
         )
-    sysroot_src = rust_toolchain.rustc_srcs.label.package + "/library"
-    if rust_toolchain.rustc_srcs.label.workspace_root:
-        sysroot_src = _exec_root_tmpl + rust_toolchain.rustc_srcs.label.workspace_root + "/" + sysroot_src
+
+    rustc_srcs = rust_analyzer_toolchain.rustc_srcs
+
+    sysroot_src = rustc_srcs.label.package + "/library"
+    if rustc_srcs.label.workspace_root:
+        sysroot_src = _OUTPUT_BASE_TEMPLATE + rustc_srcs.label.workspace_root + "/" + sysroot_src
 
     sysroot_src_file = ctx.actions.declare_file(ctx.label.name + ".rust_analyzer_sysroot_src")
     ctx.actions.write(
@@ -214,27 +248,12 @@
 
 rust_analyzer_detect_sysroot = rule(
     implementation = _rust_analyzer_detect_sysroot_impl,
-    toolchains = ["@rules_rust//rust:toolchain"],
+    toolchains = [
+        "@rules_rust//rust:toolchain_type",
+        "@rules_rust//rust/rust_analyzer:toolchain_type",
+    ],
     incompatible_use_toolchain_transition = True,
     doc = dedent("""\
         Detect the sysroot and store in a file for use by the gen_rust_project tool.
     """),
 )
-
-def _rust_analyzer_impl(_ctx):
-    pass
-
-rust_analyzer = rule(
-    attrs = {
-        "targets": attr.label_list(
-            aspects = [rust_analyzer_aspect],
-            doc = "List of all targets to be included in the index",
-        ),
-    },
-    implementation = _rust_analyzer_impl,
-    toolchains = [str(Label("//rust:toolchain"))],
-    incompatible_use_toolchain_transition = True,
-    doc = dedent("""\
-        Deprecated: gen_rust_project can now create a rust-project.json without a rust_analyzer rule.
-    """),
-)
diff --git a/third_party/rules_rust/rust/private/rustc.bzl b/third_party/rules_rust/rust/private/rustc.bzl
index fc7c5f6..490bfa1 100644
--- a/third_party/rules_rust/rust/private/rustc.bzl
+++ b/third_party/rules_rust/rust/private/rustc.bzl
@@ -27,7 +27,8 @@
     "expand_dict_value_locations",
     "expand_list_element_locations",
     "find_cc_toolchain",
-    "get_lib_name",
+    "get_lib_name_default",
+    "get_lib_name_for_windows",
     "get_preferred_artifact",
     "is_exec_configuration",
     "make_static_lib_symlink",
@@ -61,6 +62,34 @@
     fields = {"extra_exec_rustc_flags": "List[string] Extra flags to pass to rustc in exec configuration"},
 )
 
+IsProcMacroDepInfo = provider(
+    doc = "Records if this is a transitive dependency of a proc-macro.",
+    fields = {"is_proc_macro_dep": "Boolean"},
+)
+
+def _is_proc_macro_dep_impl(ctx):
+    return IsProcMacroDepInfo(is_proc_macro_dep = ctx.build_setting_value)
+
+is_proc_macro_dep = rule(
+    doc = "Records if this is a transitive dependency of a proc-macro.",
+    implementation = _is_proc_macro_dep_impl,
+    build_setting = config.bool(flag = True),
+)
+
+IsProcMacroDepEnabledInfo = provider(
+    doc = "Enables the feature to record if a library is a transitive dependency of a proc-macro.",
+    fields = {"enabled": "Boolean"},
+)
+
+def _is_proc_macro_dep_enabled_impl(ctx):
+    return IsProcMacroDepEnabledInfo(enabled = ctx.build_setting_value)
+
+is_proc_macro_dep_enabled = rule(
+    doc = "Enables the feature to record if a library is a transitive dependency of a proc-macro.",
+    implementation = _is_proc_macro_dep_enabled_impl,
+    build_setting = config.bool(flag = True),
+)
+
 def _get_rustc_env(attr, toolchain, crate_name):
     """Gathers rustc environment variables
 
@@ -78,7 +107,7 @@
         patch, pre = patch.split("-", 1)
     else:
         pre = ""
-    return {
+    result = {
         "CARGO_CFG_TARGET_ARCH": toolchain.target_arch,
         "CARGO_CFG_TARGET_OS": toolchain.os,
         "CARGO_CRATE_NAME": crate_name,
@@ -92,6 +121,12 @@
         "CARGO_PKG_VERSION_PATCH": patch,
         "CARGO_PKG_VERSION_PRE": pre,
     }
+    if hasattr(attr, "_is_proc_macro_dep_enabled") and attr._is_proc_macro_dep_enabled[IsProcMacroDepEnabledInfo].enabled:
+        is_proc_macro_dep = "0"
+        if hasattr(attr, "_is_proc_macro_dep") and attr._is_proc_macro_dep[IsProcMacroDepInfo].is_proc_macro_dep:
+            is_proc_macro_dep = "1"
+        result["BAZEL_RULES_RUST_IS_PROC_MACRO_DEP"] = is_proc_macro_dep
+    return result
 
 def get_compilation_mode_opts(ctx, toolchain):
     """Gathers rustc flags for the current compilation mode (opt/debug)
@@ -119,12 +154,26 @@
             has_grep_includes)
 
 def _should_use_pic(cc_toolchain, feature_configuration, crate_type):
-    if crate_type in ("cdylib" or "dylib"):
+    """Whether or not [PIC][pic] should be enabled
+
+    [pic]: https://en.wikipedia.org/wiki/Position-independent_code
+
+    Args:
+        cc_toolchain (CcToolchainInfo): The current `cc_toolchain`.
+        feature_configuration (FeatureConfiguration): Feature configuration to be queried.
+        crate_type (str): A Rust target's crate type.
+
+    Returns:
+        bool: Whether or not [PIC][pic] should be enabled.
+    """
+    if crate_type in ("cdylib", "dylib"):
         return cc_toolchain.needs_pic_for_dynamic_libraries(feature_configuration = feature_configuration)
     return False
 
+def _is_proc_macro(crate_info):
+    return "proc-macro" in (crate_info.type, crate_info.wrapped_crate_type)
+
 def collect_deps(
-        ctx,
         deps,
         proc_macro_deps,
         aliases,
@@ -152,6 +201,7 @@
     build_info = None
     linkstamps = []
     transitive_crate_outputs = []
+    transitive_metadata_outputs = []
 
     aliases = {k.label: v for k, v in aliases.items()}
     for dep in depset(transitive = [deps, proc_macro_deps]).to_list():
@@ -174,16 +224,42 @@
                 dep = crate_info,
             ))
 
-            transitive_crates.append(depset([crate_info], transitive = [dep_info.transitive_crates]))
+            transitive_crates.append(
+                depset(
+                    [crate_info],
+                    transitive = [] if _is_proc_macro(crate_info) else [dep_info.transitive_crates],
+                ),
+            )
+
+            # If this dependency produces metadata, add it to the metadata outputs.
+            # If it doesn't (for example a custom library that exports crate_info),
+            # we depend on crate_info.output.
+            depend_on = crate_info.metadata
+            if not crate_info.metadata:
+                depend_on = crate_info.output
+
+            # If this dependency is a proc_macro, it still can be used for lib crates
+            # that produce metadata.
+            # In that case, we don't depend on its metadata dependencies.
+            transitive_metadata_outputs.append(
+                depset(
+                    [depend_on],
+                    transitive = [] if _is_proc_macro(crate_info) else [dep_info.transitive_metadata_outputs],
+                ),
+            )
+
             transitive_crate_outputs.append(
                 depset(
                     [crate_info.output],
-                    transitive = [dep_info.transitive_crate_outputs],
+                    transitive = [] if _is_proc_macro(crate_info) else [dep_info.transitive_crate_outputs],
                 ),
             )
-            transitive_noncrates.append(dep_info.transitive_noncrates)
+
+            if "proc-macro" not in [crate_info.type, crate_info.wrapped_crate_type]:
+                transitive_noncrates.append(dep_info.transitive_noncrates)
+                transitive_link_search_paths.append(dep_info.link_search_path_files)
+
             transitive_build_infos.append(dep_info.transitive_build_infos)
-            transitive_link_search_paths.append(dep_info.link_search_path_files)
 
         elif cc_info:
             # This dependency is a cc_library
@@ -201,21 +277,6 @@
 
     transitive_crates_depset = depset(transitive = transitive_crates)
 
-    dep_env = None
-    dep_env_files = list(ctx.files.dep_env_files)
-    if build_info:
-        if build_info.dep_env:
-            dep_env_files.append(build_info.dep_env)
-    if len(dep_env_files) > 1:
-        dep_env = ctx.actions.declare_file("_depenv/" + crate_info.output.basename)
-        ctx.actions.run_shell(
-            outputs = [dep_env],
-            inputs = dep_env_files,
-            cmd = ["cat"] + [f.path for f in dep_env_files] + [">", dep_env.path],
-        )
-    elif dep_env_files:
-        dep_env = dep_env_files[0]
-
     return (
         rust_common.dep_info(
             direct_crates = depset(direct_crates),
@@ -225,9 +286,10 @@
                 order = "topological",  # dylib link flag ordering matters.
             ),
             transitive_crate_outputs = depset(transitive = transitive_crate_outputs),
+            transitive_metadata_outputs = depset(transitive = transitive_metadata_outputs),
             transitive_build_infos = depset(transitive = transitive_build_infos),
             link_search_path_files = depset(transitive = transitive_link_search_paths),
-            dep_env = dep_env,
+            dep_env = build_info.dep_env if build_info else None,
         ),
         build_info,
         depset(transitive = linkstamps),
@@ -364,7 +426,7 @@
 
     # Take the absolute value of hash() since it could be negative.
     path_hash = abs(hash(lib.path))
-    lib_name = get_lib_name(lib)
+    lib_name = get_lib_name_for_windows(lib) if toolchain.os.startswith("windows") else get_lib_name_default(lib)
 
     prefix = "lib"
     extension = ".a"
@@ -427,7 +489,7 @@
             if _is_dylib(lib):
                 continue
             artifact = get_preferred_artifact(lib, use_pic)
-            name = get_lib_name(artifact)
+            name = get_lib_name_for_windows(artifact) if toolchain.os.startswith("windows") else get_lib_name_default(artifact)
 
             # On Linux-like platforms, normally library base names start with
             # `lib`, following the pattern `lib[name].(a|lo)` and we pass
@@ -461,6 +523,28 @@
             visited_libs[name] = artifact
     return ambiguous_libs
 
+def _depend_on_metadata(crate_info, force_depend_on_objects):
+    """Determines if we can depend on metadata for this crate.
+
+    By default (when pipelining is disabled or when the crate type needs to link against
+    objects) we depend on the set of object files (.rlib).
+    When pipelining is enabled and the crate type supports depending on metadata,
+    we depend on metadata files only (.rmeta).
+    In some rare cases, even if both of those conditions are true, we still want to
+    depend on objects. This is what force_depend_on_objects is.
+
+    Args:
+        crate_info (CrateInfo): The Crate to determine this for.
+        force_depend_on_objects (bool): if set we will not depend on metadata.
+
+    Returns:
+        Whether we can depend on metadata for this crate.
+    """
+    if force_depend_on_objects:
+        return False
+
+    return crate_info.type in ("rlib", "lib")
+
 def collect_inputs(
         ctx,
         file,
@@ -472,7 +556,9 @@
         crate_info,
         dep_info,
         build_info,
-        stamp = False):
+        stamp = False,
+        force_depend_on_objects = False,
+        experimental_use_cc_common_link = False):
     """Gather's the inputs and required input information for a rustc action
 
     Args:
@@ -488,6 +574,10 @@
         build_info (BuildInfo): The target Crate's build settings.
         stamp (bool, optional): Whether or not workspace status stamping is enabled. For more details see
             https://docs.bazel.build/versions/main/user-manual.html#flag--stamp
+        force_depend_on_objects (bool, optional): Forces dependencies of this rule to be objects rather than
+            metadata, even for libraries. This is used in rustdoc tests.
+        experimental_use_cc_common_link (bool, optional): Whether rules_rust uses cc_common.link to link
+	    rust binaries.
 
     Returns:
         tuple: A tuple: A tuple of the following items:
@@ -528,6 +618,10 @@
     # change.
     linkstamp_outs = []
 
+    transitive_crate_outputs = dep_info.transitive_crate_outputs
+    if _depend_on_metadata(crate_info, force_depend_on_objects):
+        transitive_crate_outputs = dep_info.transitive_metadata_outputs
+
     nolinkstamp_compile_inputs = depset(
         getattr(files, "data", []) +
         ([build_info.rustc_env, build_info.flags] if build_info else []) +
@@ -536,14 +630,16 @@
         transitive = [
             linker_depset,
             crate_info.srcs,
-            dep_info.transitive_crate_outputs,
+            transitive_crate_outputs,
             depset(additional_transitive_inputs),
             crate_info.compile_data,
             toolchain.all_files,
         ],
     )
 
-    if crate_info.type in ("bin", "cdylib"):
+    # Register linkstamps when linking with rustc (when linking with
+    # cc_common.link linkstamps are handled by cc_common.link itself).
+    if not experimental_use_cc_common_link and crate_info.type in ("bin", "cdylib"):
         # There is no other way to register an action for each member of a depset than
         # flattening the depset as of 2021-10-12. Luckily, usually there is only one linkstamp
         # in a build, and we only flatten the list on binary targets that perform transitive linking,
@@ -571,8 +667,8 @@
                 output_replacement = crate_info.output.path,
             )
 
-    # If stamping is enabled include the volatile status info file
-    stamp_info = [ctx.version_file] if stamp else []
+    # If stamping is enabled include the volatile and stable status info file
+    stamp_info = [ctx.version_file, ctx.info_file] if stamp else []
 
     compile_inputs = depset(
         linkstamp_outs + stamp_info,
@@ -581,7 +677,9 @@
         ],
     )
 
-    build_env_files = getattr(files, "rustc_env_files", []) + crate_info.rustc_env_files
+    # For backwards compatibility, we also check the value of the `rustc_env_files` attribute when
+    # `crate_info.rustc_env_files` is not populated.
+    build_env_files = crate_info.rustc_env_files if crate_info.rustc_env_files else getattr(files, "rustc_env_files", [])
     compile_inputs, out_dir, build_env_file, build_flags_files = _process_build_scripts(build_info, dep_info, compile_inputs)
     if build_env_file:
         build_env_files = [f for f in build_env_files] + [build_env_file]
@@ -610,7 +708,10 @@
         force_all_deps_direct = False,
         force_link = False,
         stamp = False,
-        remap_path_prefix = "."):
+        remap_path_prefix = ".",
+        use_json_output = False,
+        build_metadata = False,
+        force_depend_on_objects = False):
     """Builds an Args object containing common rustc flags
 
     Args:
@@ -637,6 +738,9 @@
         stamp (bool, optional): Whether or not workspace status stamping is enabled. For more details see
             https://docs.bazel.build/versions/main/user-manual.html#flag--stamp
         remap_path_prefix (str, optional): A value used to remap `${pwd}` to. If set to a falsey value, no prefix will be set.
+        use_json_output (bool): Have rustc emit json and process_wrapper parse json messages to output rendered output.
+        build_metadata (bool): Generate CLI arguments for building *only* .rmeta files. This requires use_json_output.
+        force_depend_on_objects (bool): Force using `.rlib` object files instead of metadata (`.rmeta`) files even if they are available.
 
     Returns:
         tuple: A tuple of the following items
@@ -648,6 +752,9 @@
                     This is to be passed to the `arguments` parameter of actions
             - (dict): Common rustc environment variables
     """
+    if build_metadata and not use_json_output:
+        fail("build_metadata requires parse_json_output")
+
     output_dir = getattr(crate_info.output, "dirname", None)
     linker_script = getattr(file, "linker_script", None)
 
@@ -678,6 +785,7 @@
     # If stamping is enabled, enable the functionality in the process wrapper
     if stamp:
         process_wrapper_flags.add("--volatile-status-file", ctx.version_file)
+        process_wrapper_flags.add("--stable-status-file", ctx.info_file)
 
     # Both ctx.label.workspace_root and ctx.label.package are relative paths
     # and either can be empty strings. Avoid trailing/double slashes in the path.
@@ -716,15 +824,50 @@
     rustc_flags.add(crate_info.root)
     rustc_flags.add("--crate-name=" + crate_info.name)
     rustc_flags.add("--crate-type=" + crate_info.type)
-    if hasattr(attr, "_error_format"):
-        rustc_flags.add("--error-format=" + attr._error_format[ErrorFormatInfo].error_format)
 
-    # Mangle symbols to disambiguate crates with the same name
-    extra_filename = "-" + output_hash if output_hash else ""
-    rustc_flags.add("--codegen=metadata=" + extra_filename)
+    error_format = "human"
+    if hasattr(attr, "_error_format"):
+        error_format = attr._error_format[ErrorFormatInfo].error_format
+
+    if use_json_output:
+        # If --error-format was set to json, we just pass the output through
+        # Otherwise process_wrapper uses the "rendered" field.
+        process_wrapper_flags.add("--rustc-output-format", "json" if error_format == "json" else "rendered")
+
+        # Configure rustc json output by adding artifact notifications.
+        # These will always be filtered out by process_wrapper and will be use to terminate
+        # rustc when appropriate.
+        json = ["artifacts"]
+        if error_format == "short":
+            json.append("diagnostic-short")
+        elif error_format == "human" and toolchain.os != "windows":
+            # If the os is not windows, we can get colorized output.
+            json.append("diagnostic-rendered-ansi")
+
+        rustc_flags.add("--json=" + ",".join(json))
+
+        error_format = "json"
+
+    if build_metadata:
+        # Configure process_wrapper to terminate rustc when metadata are emitted
+        process_wrapper_flags.add("--rustc-quit-on-rmeta", "true")
+
+    rustc_flags.add("--error-format=" + error_format)
+
+    # Mangle symbols to disambiguate crates with the same name. This could
+    # happen only for non-final artifacts where we compute an output_hash,
+    # e.g., rust_library.
+    #
+    # For "final" artifacts and ones intended for distribution outside of
+    # Bazel, such as rust_binary, rust_static_library and rust_shared_library,
+    # where output_hash is None we don't need to add these flags.
+    if output_hash:
+        extra_filename = "-" + output_hash
+        rustc_flags.add("--codegen=metadata=" + extra_filename)
+        rustc_flags.add("--codegen=extra-filename=" + extra_filename)
+
     if output_dir:
         rustc_flags.add("--out-dir=" + output_dir)
-    rustc_flags.add("--codegen=extra-filename=" + extra_filename)
 
     compilation_mode = get_compilation_mode_opts(ctx, toolchain)
     rustc_flags.add("--codegen=opt-level=" + compilation_mode.opt_level)
@@ -736,7 +879,9 @@
 
     if emit:
         rustc_flags.add("--emit=" + ",".join(emit_with_paths))
-    rustc_flags.add("--color=always")
+    if error_format != "json":
+        # Color is not compatible with json output.
+        rustc_flags.add("--color=always")
     rustc_flags.add("--target=" + toolchain.target_flag_value)
     if hasattr(attr, "crate_features"):
         rustc_flags.add_all(getattr(attr, "crate_features"), before_each = "--cfg", format_each = 'feature="%s"')
@@ -779,15 +924,19 @@
 
         _add_native_link_flags(rustc_flags, dep_info, linkstamp_outs, ambiguous_libs, crate_info.type, toolchain, cc_toolchain, feature_configuration)
 
-    # These always need to be added, even if not linking this crate.
-    add_crate_link_flags(rustc_flags, dep_info, force_all_deps_direct)
+    use_metadata = _depend_on_metadata(crate_info, force_depend_on_objects)
 
-    needs_extern_proc_macro_flag = "proc-macro" in [crate_info.type, crate_info.wrapped_crate_type] and \
-                                   crate_info.edition != "2015"
+    # These always need to be added, even if not linking this crate.
+    add_crate_link_flags(rustc_flags, dep_info, force_all_deps_direct, use_metadata)
+
+    needs_extern_proc_macro_flag = _is_proc_macro(crate_info) and crate_info.edition != "2015"
     if needs_extern_proc_macro_flag:
         rustc_flags.add("--extern")
         rustc_flags.add("proc_macro")
 
+    if toolchain.llvm_cov and ctx.configuration.coverage_enabled:
+        rustc_flags.add("--codegen=instrument-coverage")
+
     # Make bin crate data deps available to tests.
     for data in getattr(attr, "data", []):
         if rust_common.crate_info in data:
@@ -797,6 +946,9 @@
                 env_basename = dep_crate_info.output.basename[:-(1 + len(dep_crate_info.output.extension))] if len(dep_crate_info.output.extension) > 0 else dep_crate_info.output.basename
                 env["CARGO_BIN_EXE_" + env_basename] = dep_crate_info.output.short_path
 
+    # Add environment variables from the Rust toolchain.
+    env.update(toolchain.env)
+
     # Update environment with user provided variables.
     env.update(expand_dict_value_locations(
         ctx,
@@ -814,9 +966,15 @@
     if hasattr(ctx.attr, "_extra_rustc_flags") and not is_exec_configuration(ctx):
         rustc_flags.add_all(ctx.attr._extra_rustc_flags[ExtraRustcFlagsInfo].extra_rustc_flags)
 
+    if hasattr(ctx.attr, "_extra_rustc_flag") and not is_exec_configuration(ctx):
+        rustc_flags.add_all(ctx.attr._extra_rustc_flag[ExtraRustcFlagsInfo].extra_rustc_flags)
+
     if hasattr(ctx.attr, "_extra_exec_rustc_flags") and is_exec_configuration(ctx):
         rustc_flags.add_all(ctx.attr._extra_exec_rustc_flags[ExtraExecRustcFlagsInfo].extra_exec_rustc_flags)
 
+    if hasattr(ctx.attr, "_extra_exec_rustc_flag") and is_exec_configuration(ctx):
+        rustc_flags.add_all(ctx.attr._extra_exec_rustc_flag[ExtraExecRustcFlagsInfo].extra_exec_rustc_flags)
+
     # Create a struct which keeps the arguments separate so each may be tuned or
     # replaced where necessary
     args = struct(
@@ -835,7 +993,6 @@
         crate_info,
         output_hash = None,
         rust_flags = [],
-        dep_env_files = [],
         force_all_deps_direct = False):
     """Create and run a rustc compile action based on the current rule's attributes
 
@@ -855,10 +1012,24 @@
             - (DepInfo): The transitive dependencies of this crate.
             - (DefaultInfo): The output file for this crate, and its runfiles.
     """
+    build_metadata = getattr(crate_info, "metadata", None)
+
     cc_toolchain, feature_configuration = find_cc_toolchain(ctx)
 
+    # Determine whether to use cc_common.link:
+    #  * either if experimental_use_cc_common_link is 1,
+    #  * or if experimental_use_cc_common_link is -1 and
+    #    the toolchain experimental_use_cc_common_link is true.
+    experimental_use_cc_common_link = False
+    if hasattr(ctx.attr, "experimental_use_cc_common_link"):
+        if ctx.attr.experimental_use_cc_common_link == 0:
+            experimental_use_cc_common_link = False
+        elif ctx.attr.experimental_use_cc_common_link == 1:
+            experimental_use_cc_common_link = True
+        elif ctx.attr.experimental_use_cc_common_link == -1:
+            experimental_use_cc_common_link = toolchain._experimental_use_cc_common_link
+
     dep_info, build_info, linkstamps = collect_deps(
-        ctx = ctx,
         deps = crate_info.deps,
         proc_macro_deps = crate_info.proc_macro_deps,
         aliases = crate_info.aliases,
@@ -883,8 +1054,23 @@
         dep_info = dep_info,
         build_info = build_info,
         stamp = stamp,
+        experimental_use_cc_common_link = experimental_use_cc_common_link,
     )
 
+    # The types of rustc outputs to emit.
+    # If we build metadata, we need to keep the command line of the two invocations
+    # (rlib and rmeta) as similar as possible, otherwise rustc rejects the rmeta as
+    # a candidate.
+    # Because of that we need to add emit=metadata to both the rlib and rmeta invocation.
+    #
+    # When cc_common linking is enabled, emit a `.o` file, which is later
+    # passed to the cc_common.link action.
+    emit = ["dep-info", "link"]
+    if build_metadata:
+        emit.append("metadata")
+    if experimental_use_cc_common_link:
+        emit = ["obj"]
+
     args, env_from_args = construct_arguments(
         ctx = ctx,
         attr = attr,
@@ -892,6 +1078,7 @@
         toolchain = toolchain,
         tool_path = toolchain.rustc.path,
         cc_toolchain = cc_toolchain,
+        emit = emit,
         feature_configuration = feature_configuration,
         crate_info = crate_info,
         dep_info = dep_info,
@@ -904,8 +1091,35 @@
         build_flags_files = build_flags_files,
         force_all_deps_direct = force_all_deps_direct,
         stamp = stamp,
+        use_json_output = bool(build_metadata),
     )
 
+    args_metadata = None
+    if build_metadata:
+        args_metadata, _ = construct_arguments(
+            ctx = ctx,
+            attr = attr,
+            file = ctx.file,
+            toolchain = toolchain,
+            tool_path = toolchain.rustc.path,
+            cc_toolchain = cc_toolchain,
+            emit = emit,
+            feature_configuration = feature_configuration,
+            crate_info = crate_info,
+            dep_info = dep_info,
+            linkstamp_outs = linkstamp_outs,
+            ambiguous_libs = ambiguous_libs,
+            output_hash = output_hash,
+            rust_flags = rust_flags,
+            out_dir = out_dir,
+            build_env_files = build_env_files,
+            build_flags_files = build_flags_files,
+            force_all_deps_direct = force_all_deps_direct,
+            stamp = stamp,
+            use_json_output = True,
+            build_metadata = True,
+        )
+
     env = dict(ctx.configuration.default_shell_env)
     env.update(env_from_args)
 
@@ -914,15 +1128,25 @@
     else:
         formatted_version = ""
 
+    # Declares the outputs of the rustc compile action.
+    # By default this is the binary output; if cc_common.link is used, this is
+    # the main `.o` file (`output_o` below).
     outputs = [crate_info.output]
 
+    # The `.o` output file, only used for linking via cc_common.link.
+    output_o = None
+    if experimental_use_cc_common_link:
+        obj_ext = ".o"
+        output_o = ctx.actions.declare_file(crate_info.name + obj_ext, sibling = crate_info.output)
+        outputs = [output_o]
+
     # For a cdylib that might be added as a dependency to a cc_* target on Windows, it is important to include the
     # interface library that rustc generates in the output files.
     interface_library = None
     if toolchain.os == "windows" and crate_info.type == "cdylib":
         # Rustc generates the import library with a `.dll.lib` extension rather than the usual `.lib` one that msvc
         # expects (see https://github.com/rust-lang/rust/pull/29520 for more context).
-        interface_library = ctx.actions.declare_file(crate_info.output.basename + ".lib")
+        interface_library = ctx.actions.declare_file(crate_info.output.basename + ".lib", sibling = crate_info.output)
         outputs.append(interface_library)
 
     # The action might generate extra output that we don't want to include in the `DefaultInfo` files.
@@ -934,14 +1158,13 @@
     dsym_folder = None
     if crate_info.type in ("cdylib", "bin") and not crate_info.is_test:
         if toolchain.os == "windows":
-            pdb_file = ctx.actions.declare_file(crate_info.output.basename[:-len(crate_info.output.extension)] + "pdb")
+            pdb_file = ctx.actions.declare_file(crate_info.output.basename[:-len(crate_info.output.extension)] + "pdb", sibling = crate_info.output)
             action_outputs.append(pdb_file)
         elif toolchain.os == "darwin":
-            dsym_folder = ctx.actions.declare_directory(crate_info.output.basename + ".dSYM")
+            dsym_folder = ctx.actions.declare_directory(crate_info.output.basename + ".dSYM", sibling = crate_info.output)
             action_outputs.append(dsym_folder)
 
-    # This uses startswith as on windows the basename will be process_wrapper_fake.exe.
-    if not ctx.executable._process_wrapper.basename.startswith("process_wrapper_fake"):
+    if ctx.executable._process_wrapper:
         # Run as normal
         ctx.actions.run(
             executable = ctx.executable._process_wrapper,
@@ -957,10 +1180,25 @@
                 len(crate_info.srcs.to_list()),
             ),
         )
+        if args_metadata:
+            ctx.actions.run(
+                executable = ctx.executable._process_wrapper,
+                inputs = compile_inputs,
+                outputs = [build_metadata],
+                env = env,
+                arguments = args_metadata.all,
+                mnemonic = "RustcMetadata",
+                progress_message = "Compiling Rust metadata {} {}{} ({} files)".format(
+                    crate_info.type,
+                    ctx.label.name,
+                    formatted_version,
+                    len(crate_info.srcs.to_list()),
+                ),
+            )
     else:
         # Run without process_wrapper
-        if build_env_files or build_flags_files or stamp:
-            fail("build_env_files, build_flags_files, stamp are not supported if use_process_wrapper is False")
+        if build_env_files or build_flags_files or stamp or build_metadata:
+            fail("build_env_files, build_flags_files, stamp, build_metadata are not supported when building without process_wrapper")
         ctx.actions.run(
             executable = toolchain.rustc,
             inputs = compile_inputs,
@@ -976,8 +1214,58 @@
             ),
         )
 
+    if experimental_use_cc_common_link:
+        # Wrap the main `.o` file into a compilation output suitable for
+        # cc_common.link. The main `.o` file is useful in both PIC and non-PIC
+        # modes.
+        compilation_outputs = cc_common.create_compilation_outputs(
+            objects = depset([output_o]),
+            pic_objects = depset([output_o]),
+        )
+
+        # Collect the linking contexts of the standard library and dependencies.
+        linking_contexts = [toolchain.libstd_and_allocator_ccinfo.linking_context, toolchain.stdlib_linkflags.linking_context]
+
+        for dep in crate_info.deps.to_list():
+            if dep.cc_info:
+                linking_contexts.append(dep.cc_info.linking_context)
+
+        # In the cc_common.link action we need to pass the name of the final
+        # binary (output) relative to the package of this target.
+        # We compute it by stripping the path to the package directory,
+        # which is a prefix of the path of `crate_info.output`.
+
+        # The path to the package dir, including a trailing "/".
+        package_dir = ctx.bin_dir.path + "/"
+        if ctx.label.workspace_root:
+            package_dir = package_dir + ctx.label.workspace_root + "/"
+        if ctx.label.package:
+            package_dir = package_dir + ctx.label.package + "/"
+
+        if not crate_info.output.path.startswith(package_dir):
+            fail("The package dir path {} should be a prefix of the crate_info.output.path {}", package_dir, crate_info.output.path)
+
+        output_relative_to_package = crate_info.output.path[len(package_dir):]
+
+        cc_common.link(
+            actions = ctx.actions,
+            feature_configuration = feature_configuration,
+            cc_toolchain = cc_toolchain,
+            linking_contexts = linking_contexts,
+            compilation_outputs = compilation_outputs,
+            name = output_relative_to_package,
+            grep_includes = ctx.file._grep_includes,
+            stamp = ctx.attr.stamp,
+        )
+
+        outputs = [crate_info.output]
+
+    coverage_runfiles = []
+    if toolchain.llvm_cov and ctx.configuration.coverage_enabled and crate_info.is_test:
+        coverage_runfiles = [toolchain.llvm_cov, toolchain.llvm_profdata]
+
     runfiles = ctx.runfiles(
-        files = getattr(ctx.files, "data", []),
+        files = getattr(ctx.files, "data", []) + coverage_runfiles,
         collect_data = True,
     )
 
@@ -986,15 +1274,29 @@
     out_binary = getattr(attr, "out_binary", False)
 
     providers = [
-        crate_info,
-        dep_info,
         DefaultInfo(
             # nb. This field is required for cc_library to depend on our output.
             files = depset(outputs),
             runfiles = runfiles,
             executable = crate_info.output if crate_info.type == "bin" or crate_info.is_test or out_binary else None,
         ),
+        coverage_common.instrumented_files_info(
+            ctx,
+            dependency_attributes = ["deps", "crate"],
+            extensions = ["rs"],
+            source_attributes = ["srcs"],
+        ),
     ]
+
+    if crate_info.type in ["staticlib", "cdylib"]:
+        # These rules are not supposed to be depended on by other rust targets, and
+        # as such they shouldn't provide a CrateInfo. However, one may still want to
+        # write a rust_test for them, so we provide the CrateInfo wrapped in a provider
+        # that rust_test understands.
+        providers.extend([rust_common.test_crate_info(crate = crate_info), dep_info])
+    else:
+        providers.extend([crate_info, dep_info])
+
     if toolchain.target_arch != "wasm32":
         providers += establish_cc_info(ctx, attr, crate_info, toolchain, cc_toolchain, feature_configuration, interface_library)
     if pdb_file:
@@ -1007,6 +1309,21 @@
 def _is_dylib(dep):
     return not bool(dep.static_library or dep.pic_static_library)
 
+def _collect_nonstatic_linker_inputs(cc_info):
+    shared_linker_inputs = []
+    for linker_input in cc_info.linking_context.linker_inputs.to_list():
+        dylibs = [
+            lib
+            for lib in linker_input.libraries
+            if _is_dylib(lib)
+        ]
+        if dylibs:
+            shared_linker_inputs.append(cc_common.create_linker_input(
+                owner = linker_input.owner,
+                libraries = depset(dylibs),
+            ))
+    return shared_linker_inputs
+
 def establish_cc_info(ctx, attr, crate_info, toolchain, cc_toolchain, feature_configuration, interface_library):
     """If the produced crate is suitable yield a CcInfo to allow for interop with cc rules
 
@@ -1085,9 +1402,20 @@
         CcInfo(linking_context = linking_context),
         toolchain.stdlib_linkflags,
     ]
+
     for dep in getattr(attr, "deps", []):
         if CcInfo in dep:
-            cc_infos.append(dep[CcInfo])
+            # A Rust staticlib or shared library doesn't need to propagate linker inputs
+            # of its dependencies, except for shared libraries.
+            if crate_info.type in ["cdylib", "staticlib"]:
+                shared_linker_inputs = _collect_nonstatic_linker_inputs(dep[CcInfo])
+                if shared_linker_inputs:
+                    linking_context = cc_common.create_linking_context(
+                        linker_inputs = depset(shared_linker_inputs),
+                    )
+                    cc_infos.append(CcInfo(linking_context = linking_context))
+            else:
+                cc_infos.append(dep[CcInfo])
 
     if crate_info.type in ("rlib", "lib") and toolchain.libstd_and_allocator_ccinfo:
         # TODO: if we already have an rlib in our deps, we could skip this
@@ -1156,7 +1484,8 @@
     """
 
     # Windows has no rpath equivalent, so always return an empty depset.
-    if toolchain.os == "windows":
+    # Fuchsia assembles shared libraries during packaging.
+    if toolchain.os == "windows" or toolchain.os == "fuchsia":
         return depset([])
 
     dylibs = [
@@ -1198,7 +1527,7 @@
         dirs[f.dirname] = None
     return dirs.keys()
 
-def add_crate_link_flags(args, dep_info, force_all_deps_direct = False):
+def add_crate_link_flags(args, dep_info, force_all_deps_direct = False, use_metadata = False):
     """Adds link flags to an Args object reference
 
     Args:
@@ -1206,22 +1535,19 @@
         dep_info (DepInfo): The current target's dependency info
         force_all_deps_direct (bool, optional): Whether to pass the transitive rlibs with --extern
             to the commandline as opposed to -L.
+        use_metadata (bool, optional): Build command line arugments using metadata for crates that provide it.
     """
 
-    if force_all_deps_direct:
-        args.add_all(
-            depset(
-                transitive = [
-                    dep_info.direct_crates,
-                    dep_info.transitive_crates,
-                ],
-            ),
-            uniquify = True,
-            map_each = _crate_to_link_flag,
-        )
-    else:
-        # nb. Direct crates are linked via --extern regardless of their crate_type
-        args.add_all(dep_info.direct_crates, map_each = _crate_to_link_flag)
+    direct_crates = depset(
+        transitive = [
+            dep_info.direct_crates,
+            dep_info.transitive_crates,
+        ],
+    ) if force_all_deps_direct else dep_info.direct_crates
+
+    crate_to_link_flags = _crate_to_link_flag_metadata if use_metadata else _crate_to_link_flag
+    args.add_all(direct_crates, uniquify = True, map_each = crate_to_link_flags)
+
     args.add_all(
         dep_info.transitive_crates,
         map_each = _get_crate_dirname,
@@ -1229,6 +1555,29 @@
         format_each = "-Ldependency=%s",
     )
 
+def _crate_to_link_flag_metadata(crate):
+    """A helper macro used by `add_crate_link_flags` for adding crate link flags to a Arg object
+
+    Args:
+        crate (CrateInfo|AliasableDepInfo): A CrateInfo or an AliasableDepInfo provider
+
+    Returns:
+        list: Link flags for the given provider
+    """
+
+    # This is AliasableDepInfo, we should use the alias as a crate name
+    if hasattr(crate, "dep"):
+        name = crate.name
+        crate_info = crate.dep
+    else:
+        name = crate.name
+        crate_info = crate
+
+    lib_or_meta = crate_info.metadata
+    if not crate_info.metadata:
+        lib_or_meta = crate_info.output
+    return ["--extern={}={}".format(name, lib_or_meta.path)]
+
 def _crate_to_link_flag(crate):
     """A helper macro used by `add_crate_link_flags` for adding crate link flags to a Arg object
 
@@ -1259,13 +1608,48 @@
     """
     return crate.output.dirname
 
-def _portable_link_flags(lib, use_pic, ambiguous_libs):
+def _portable_link_flags(lib, use_pic, ambiguous_libs, get_lib_name, for_windows):
     artifact = get_preferred_artifact(lib, use_pic)
     if ambiguous_libs and artifact.path in ambiguous_libs:
         artifact = ambiguous_libs[artifact.path]
     if lib.static_library or lib.pic_static_library:
+        # To ensure appropriate linker library argument order, in the presence
+        # of both native libraries that depend on rlibs and rlibs that depend
+        # on native libraries, we use an approach where we "sandwich" the
+        # rust libraries between two similar sections of all of native
+        # libraries:
+        # n1 n2 ... r1 r2 ... n1 n2 ...
+        # A         B         C
+        # This way any dependency from a native library to a rust library
+        # is resolved from A to B, and any dependency from a rust library to
+        # a native one is resolved from B to C.
+        # The question of resolving dependencies from a native library from A
+        # to any rust library is addressed in a different place, where we
+        # create symlinks to the rlibs, pretending they are native libraries,
+        # and adding references to these symlinks in the native section A.
+        # We rely in the behavior of -Clink-arg to put the linker args
+        # at the end of the linker invocation constructed by rustc.
+
+        # We skip adding `-Clink-arg=-l` for libstd and libtest from the standard library, as
+        # these two libraries are present both as an `.rlib` and a `.so` format.
+        # On linux, Rustc adds a -Bdynamic to the linker command line before the libraries specified
+        # with `-Clink-arg`, which leads to us linking against the `.so`s but not putting the
+        # corresponding value to the runtime library search paths, which results in a
+        # "cannot open shared object file: No such file or directory" error at exectuion time.
+        # We can fix this by adding a `-Clink-arg=-Bstatic` on linux, but we don't have that option for
+        # macos. The proper solution for this issue would be to remove `libtest-{hash}.so` and `libstd-{hash}.so`
+        # from the toolchain. However, it is not enough to change the toolchain's `rust_std_{...}` filegroups
+        # here: https://github.com/bazelbuild/rules_rust/blob/a9d5d894ad801002d007b858efd154e503796b9f/rust/private/repository_utils.bzl#L144
+        # because rustc manages to escape the sandbox and still finds them at linking time.
+        # We need to modify the repository rules to erase those files completely.
+        if "lib/rustlib" in artifact.path and (
+            artifact.basename.startswith("libtest-") or artifact.basename.startswith("libstd-") or
+            artifact.basename.startswith("test-") or artifact.basename.startswith("std-")
+        ):
+            return ["-lstatic=%s" % get_lib_name(artifact)]
         return [
             "-lstatic=%s" % get_lib_name(artifact),
+            "-Clink-arg=-l%s" % (get_lib_name(artifact) if not for_windows else artifact.basename),
         ]
     elif _is_dylib(lib):
         return [
@@ -1281,7 +1665,7 @@
         if lib.alwayslink:
             ret.extend(["-C", "link-arg=/WHOLEARCHIVE:%s" % get_preferred_artifact(lib, use_pic).path])
         else:
-            ret.extend(_portable_link_flags(lib, use_pic, ambiguous_libs))
+            ret.extend(_portable_link_flags(lib, use_pic, ambiguous_libs, get_lib_name_for_windows, for_windows = True))
     return ret
 
 def _make_link_flags_darwin(linker_input_and_use_pic_and_ambiguous_libs):
@@ -1294,7 +1678,7 @@
                 ("link-arg=-Wl,-force_load,%s" % get_preferred_artifact(lib, use_pic).path),
             ])
         else:
-            ret.extend(_portable_link_flags(lib, use_pic, ambiguous_libs))
+            ret.extend(_portable_link_flags(lib, use_pic, ambiguous_libs, get_lib_name_default, for_windows = False))
     return ret
 
 def _make_link_flags_default(linker_input_and_use_pic_and_ambiguous_libs):
@@ -1311,7 +1695,7 @@
                 "link-arg=-Wl,--no-whole-archive",
             ])
         else:
-            ret.extend(_portable_link_flags(lib, use_pic, ambiguous_libs))
+            ret.extend(_portable_link_flags(lib, use_pic, ambiguous_libs, get_lib_name_default, for_windows = False))
     return ret
 
 def _libraries_dirnames(linker_input_and_use_pic_and_ambiguous_libs):
@@ -1332,7 +1716,6 @@
         toolchain (rust_toolchain): The current `rust_toolchain`
         cc_toolchain (CcToolchainInfo): The current `cc_toolchain`
         feature_configuration (FeatureConfiguration): feature configuration to use with cc_toolchain
-
     """
     if crate_type in ["lib", "rlib"]:
         return
@@ -1341,10 +1724,13 @@
 
     if toolchain.os == "windows":
         make_link_flags = _make_link_flags_windows
+        get_lib_name = get_lib_name_for_windows
     elif toolchain.os.startswith("mac") or toolchain.os.startswith("darwin"):
         make_link_flags = _make_link_flags_darwin
+        get_lib_name = get_lib_name_default
     else:
         make_link_flags = _make_link_flags_default
+        get_lib_name = get_lib_name_default
 
     # TODO(hlopko): Remove depset flattening by using lambdas once we are on >=Bazel 5.0
     args_and_pic_and_ambiguous_libs = [(arg, use_pic, ambiguous_libs) for arg in dep_info.transitive_noncrates.to_list()]
@@ -1440,6 +1826,18 @@
     build_setting = config.string_list(flag = True),
 )
 
+def _extra_rustc_flag_impl(ctx):
+    return ExtraRustcFlagsInfo(extra_rustc_flags = [f for f in ctx.build_setting_value if f != ""])
+
+extra_rustc_flag = rule(
+    doc = (
+        "Add additional rustc_flag from the command line with `--@rules_rust//:extra_rustc_flag`. " +
+        "Multiple uses are accumulated and appended after the extra_rustc_flags."
+    ),
+    implementation = _extra_rustc_flag_impl,
+    build_setting = config.string(flag = True, allow_multiple = True),
+)
+
 def _extra_exec_rustc_flags_impl(ctx):
     return ExtraExecRustcFlagsInfo(extra_exec_rustc_flags = ctx.build_setting_value)
 
@@ -1452,3 +1850,15 @@
     implementation = _extra_exec_rustc_flags_impl,
     build_setting = config.string_list(flag = True),
 )
+
+def _extra_exec_rustc_flag_impl(ctx):
+    return ExtraExecRustcFlagsInfo(extra_exec_rustc_flags = [f for f in ctx.build_setting_value if f != ""])
+
+extra_exec_rustc_flag = rule(
+    doc = (
+        "Add additional rustc_flags in the exec configuration from the command line with `--@rules_rust//:extra_exec_rustc_flag`. " +
+        "Multiple uses are accumulated and appended after the extra_exec_rustc_flags."
+    ),
+    implementation = _extra_exec_rustc_flag_impl,
+    build_setting = config.string(flag = True, allow_multiple = True),
+)
diff --git a/third_party/rules_rust/rust/private/rustdoc.bzl b/third_party/rules_rust/rust/private/rustdoc.bzl
index ca91ff0..ba3a12c 100644
--- a/third_party/rules_rust/rust/private/rustdoc.bzl
+++ b/third_party/rules_rust/rust/private/rustdoc.bzl
@@ -37,6 +37,7 @@
         aliases = crate_info.aliases,
         # This crate info should have no output
         output = None,
+        metadata = None,
         edition = crate_info.edition,
         rustc_env = crate_info.rustc_env,
         rustc_env_files = crate_info.rustc_env_files,
@@ -91,6 +92,8 @@
         crate_info = crate_info,
         dep_info = dep_info,
         build_info = build_info,
+        # If this is a rustdoc test, we need to depend on rlibs rather than .rmeta.
+        force_depend_on_objects = is_test,
     )
 
     # Since this crate is not actually producing the output described by the
@@ -119,6 +122,7 @@
         emit = [],
         remap_path_prefix = None,
         force_link = True,
+        force_depend_on_objects = is_test,
     )
 
     # Because rustdoc tests compile tests outside of the sandbox, the sysroot
@@ -282,9 +286,19 @@
             doc = "CSS files to include via `<link>` in a rendered Markdown file.",
             allow_files = [".css"],
         ),
+        "rustc_flags": attr.string_list(
+            doc = dedent("""\
+                List of compiler flags passed to `rustc`.
+
+                These strings are subject to Make variable expansion for predefined
+                source/output path variables like `$location`, `$execpath`, and
+                `$rootpath`. This expansion is useful if you wish to pass a generated
+                file of arguments to rustc: `@$(location //package:target)`.
+            """),
+        ),
         "_cc_toolchain": attr.label(
             doc = "In order to use find_cpp_toolchain, you must define the '_cc_toolchain' attribute on your rule or aspect.",
-            default = "@bazel_tools//tools/cpp:current_cc_toolchain",
+            default = Label("@bazel_tools//tools/cpp:current_cc_toolchain"),
         ),
         "_dir_zipper": attr.label(
             doc = "A tool that orchestrates the creation of zip archives for rustdoc outputs.",
@@ -312,7 +326,7 @@
         "rust_doc_zip": "%{name}.zip",
     },
     toolchains = [
-        str(Label("//rust:toolchain")),
+        str(Label("//rust:toolchain_type")),
         "@bazel_tools//tools/cpp:toolchain_type",
     ],
     incompatible_use_toolchain_transition = True,
diff --git a/third_party/rules_rust/rust/private/rustdoc_test.bzl b/third_party/rules_rust/rust/private/rustdoc_test.bzl
index 663c65f..525838e 100644
--- a/third_party/rules_rust/rust/private/rustdoc_test.bzl
+++ b/third_party/rules_rust/rust/private/rustdoc_test.bzl
@@ -15,10 +15,11 @@
 """Rules for performing `rustdoc --test` on Bazel built crates"""
 
 load("//rust/private:common.bzl", "rust_common")
+load("//rust/private:providers.bzl", "CrateInfo")
 load("//rust/private:rustdoc.bzl", "rustdoc_compile_action")
-load("//rust/private:utils.bzl", "dedent", "find_toolchain")
+load("//rust/private:utils.bzl", "dedent", "find_toolchain", "transform_deps")
 
-def _construct_writer_arguments(ctx, test_runner, action, crate_info):
+def _construct_writer_arguments(ctx, test_runner, opt_test_params, action, crate_info):
     """Construct arguments and environment variables specific to `rustdoc_test_writer`.
 
     This is largely solving for the fact that tests run from a runfiles directory
@@ -28,6 +29,7 @@
     Args:
         ctx (ctx): The rule's context object.
         test_runner (File): The test_runner output file declared by `rustdoc_test`.
+        opt_test_params (File): An output file we can optionally use to store params for `rustdoc`.
         action (struct): Action arguments generated by `rustdoc_compile_action`.
         crate_info (CrateInfo): The provider of the crate who's docs are being tested.
 
@@ -42,6 +44,9 @@
     # Track the output path where the test writer should write the test
     writer_args.add("--output={}".format(test_runner.path))
 
+    # Track where the test writer should move "spilled" Args to
+    writer_args.add("--optional_test_params={}".format(opt_test_params.path))
+
     # Track what environment variables should be written to the test runner
     writer_args.add("--action_env=DEVELOPER_DIR")
     writer_args.add("--action_env=PATHEXT")
@@ -55,19 +60,29 @@
     # files. To ensure rustdoc can find the appropriate dependencies, the
     # file roots are identified and tracked for each dependency so it can be
     # stripped from the test runner.
+
+    # Collect and dedupe all of the file roots in a list before appending
+    # them to args to prevent generating a large amount of identical args
+    roots = []
     for dep in crate_info.deps.to_list():
         dep_crate_info = getattr(dep, "crate_info", None)
         dep_dep_info = getattr(dep, "dep_info", None)
         if dep_crate_info:
             root = dep_crate_info.output.root.path
-            writer_args.add("--strip_substring={}/".format(root))
+            if not root in roots:
+                roots.append(root)
         if dep_dep_info:
             for direct_dep in dep_dep_info.direct_crates.to_list():
                 root = direct_dep.dep.output.root.path
-                writer_args.add("--strip_substring={}/".format(root))
+                if not root in roots:
+                    roots.append(root)
             for transitive_dep in dep_dep_info.transitive_crates.to_list():
                 root = transitive_dep.output.root.path
-                writer_args.add("--strip_substring={}/".format(root))
+                if not root in roots:
+                    roots.append(root)
+
+    for root in roots:
+        writer_args.add("--strip_substring={}/".format(root))
 
     # Indicate that the rustdoc_test args are over.
     writer_args.add("--")
@@ -90,14 +105,38 @@
 
     toolchain = find_toolchain(ctx)
 
-    crate = ctx.attr.crate
-    crate_info = crate[rust_common.crate_info]
+    crate = ctx.attr.crate[rust_common.crate_info]
+    deps = transform_deps(ctx.attr.deps)
+
+    crate_info = rust_common.create_crate_info(
+        name = crate.name,
+        type = crate.type,
+        root = crate.root,
+        srcs = crate.srcs,
+        deps = depset(deps, transitive = [crate.deps]),
+        proc_macro_deps = crate.proc_macro_deps,
+        aliases = {},
+        output = crate.output,
+        edition = crate.edition,
+        rustc_env = crate.rustc_env,
+        rustc_env_files = crate.rustc_env_files,
+        is_test = True,
+        compile_data = crate.compile_data,
+        wrapped_crate_type = crate.type,
+        owner = ctx.label,
+    )
 
     if toolchain.os == "windows":
         test_runner = ctx.actions.declare_file(ctx.label.name + ".rustdoc_test.bat")
     else:
         test_runner = ctx.actions.declare_file(ctx.label.name + ".rustdoc_test.sh")
 
+    # Bazel will auto-magically spill params to a file, if they are too many for a given OSes shell
+    # (e.g. Windows ~32k, Linux ~2M). The executable script (aka test_runner) that gets generated,
+    # is run from the runfiles, which is separate from the params_file Bazel generates. To handle
+    # this case, we declare our own params file, that the test_writer will populate, if necessary
+    opt_test_params = ctx.actions.declare_file(ctx.label.name + ".rustdoc_opt_params", sibling = test_runner)
+
     # Add the current crate as an extern for the compile action
     rustdoc_flags = [
         "--extern",
@@ -118,6 +157,7 @@
     writer_args, env = _construct_writer_arguments(
         ctx = ctx,
         test_runner = test_runner,
+        opt_test_params = opt_test_params,
         action = action,
         crate_info = crate_info,
     )
@@ -127,18 +167,18 @@
 
     ctx.actions.run(
         mnemonic = "RustdocTestWriter",
-        progress_message = "Generating Rustdoc test runner for {}".format(crate.label),
+        progress_message = "Generating Rustdoc test runner for {}".format(ctx.attr.crate.label),
         executable = ctx.executable._test_writer,
         inputs = action.inputs,
         tools = tools,
         arguments = [writer_args] + action.arguments,
         env = action.env,
-        outputs = [test_runner],
+        outputs = [test_runner, opt_test_params],
     )
 
     return [DefaultInfo(
         files = depset([test_runner]),
-        runfiles = ctx.runfiles(files = tools, transitive_files = action.inputs),
+        runfiles = ctx.runfiles(files = tools + [opt_test_params], transitive_files = action.inputs),
         executable = test_runner,
     )]
 
@@ -154,13 +194,22 @@
             providers = [rust_common.crate_info],
             mandatory = True,
         ),
+        "deps": attr.label_list(
+            doc = dedent("""\
+                List of other libraries to be linked to this library target.
+
+                These can be either other `rust_library` targets or `cc_library` targets if
+                linking a native library.
+            """),
+            providers = [CrateInfo, CcInfo],
+        ),
         "_cc_toolchain": attr.label(
             doc = (
                 "In order to use find_cc_toolchain, your rule has to depend " +
                 "on C++ toolchain. See @rules_cc//cc:find_cc_toolchain.bzl " +
                 "docs for details."
             ),
-            default = "@bazel_tools//tools/cpp:current_cc_toolchain",
+            default = Label("@bazel_tools//tools/cpp:current_cc_toolchain"),
         ),
         "_process_wrapper": attr.label(
             doc = "A process wrapper for running rustdoc on all platforms",
@@ -179,7 +228,7 @@
     fragments = ["cpp"],
     host_fragments = ["cpp"],
     toolchains = [
-        str(Label("//rust:toolchain")),
+        str(Label("//rust:toolchain_type")),
         "@bazel_tools//tools/cpp:toolchain_type",
     ],
     incompatible_use_toolchain_transition = True,
diff --git a/third_party/rules_rust/rust/private/rustfmt.bzl b/third_party/rules_rust/rust/private/rustfmt.bzl
index 9c59f48..db5ef43 100644
--- a/third_party/rules_rust/rust/private/rustfmt.bzl
+++ b/third_party/rules_rust/rust/private/rustfmt.bzl
@@ -20,9 +20,17 @@
     if target.label.workspace_root.startswith("external"):
         return []
 
-    # Targets annotated with `norustfmt` will not be formatted
-    if aspect_ctx and "norustfmt" in aspect_ctx.rule.attr.tags:
-        return []
+    if aspect_ctx:
+        # Targets with specifc tags will not be formatted
+        ignore_tags = [
+            "no-format",
+            "no-rustfmt",
+            "norustfmt",
+        ]
+
+        for tag in ignore_tags:
+            if tag in aspect_ctx.rule.attr.tags:
+                return []
 
     crate_info = target[rust_common.crate_info]
 
@@ -110,8 +118,8 @@
 [cs]: https://rust-lang.github.io/rustfmt/
 
 This aspect is executed on any target which provides the `CrateInfo` provider. However
-users may tag a target with `norustfmt` to have it skipped. Additionally, generated
-source files are also ignored by this aspect.
+users may tag a target with `no-rustfmt` or `no-format` to have it skipped. Additionally,
+generated source files are also ignored by this aspect.
 """,
     attrs = {
         "_config": attr.label(
@@ -130,7 +138,7 @@
     fragments = ["cpp"],
     host_fragments = ["cpp"],
     toolchains = [
-        str(Label("//rust:toolchain")),
+        str(Label("//rust:toolchain_type")),
     ],
 )
 
@@ -138,9 +146,10 @@
     # The executable of a test target must be the output of an action in
     # the rule implementation. This file is simply a symlink to the real
     # rustfmt test runner.
+    is_windows = ctx.executable._runner.extension == ".exe"
     runner = ctx.actions.declare_file("{}{}".format(
         ctx.label.name,
-        ctx.executable._runner.extension,
+        ".exe" if is_windows else "",
     ))
 
     ctx.actions.symlink(
@@ -149,22 +158,33 @@
         is_executable = True,
     )
 
-    manifests = [target[OutputGroupInfo].rustfmt_manifest for target in ctx.attr.targets]
+    manifests = depset(transitive = [target[OutputGroupInfo].rustfmt_manifest for target in ctx.attr.targets])
     srcs = [depset(_find_rustfmtable_srcs(target)) for target in ctx.attr.targets]
 
     runfiles = ctx.runfiles(
-        transitive_files = depset(transitive = manifests + srcs),
+        transitive_files = depset(transitive = srcs + [manifests]),
     )
 
     runfiles = runfiles.merge(
         ctx.attr._runner[DefaultInfo].default_runfiles,
     )
 
-    return [DefaultInfo(
-        files = depset([runner]),
-        runfiles = runfiles,
-        executable = runner,
-    )]
+    path_env_sep = ";" if is_windows else ":"
+
+    return [
+        DefaultInfo(
+            files = depset([runner]),
+            runfiles = runfiles,
+            executable = runner,
+        ),
+        testing.TestEnvironment({
+            "RUSTFMT_MANIFESTS": path_env_sep.join([
+                manifest.short_path
+                for manifest in sorted(manifests.to_list())
+            ]),
+            "RUST_BACKTRACE": "1",
+        }),
+    ]
 
 rustfmt_test = rule(
     implementation = _rustfmt_test_impl,
@@ -184,3 +204,22 @@
     },
     test = True,
 )
+
+def _rustfmt_workspace_name_impl(ctx):
+    output = ctx.actions.declare_file(ctx.label.name)
+
+    ctx.actions.write(
+        output = output,
+        content = "RUSTFMT_WORKSPACE={}".format(
+            ctx.workspace_name,
+        ),
+    )
+
+    return [DefaultInfo(
+        files = depset([output]),
+    )]
+
+rustfmt_workspace_name = rule(
+    implementation = _rustfmt_workspace_name_impl,
+    doc = "A rule for detecting the workspace name for Rustfmt runfiles.",
+)
diff --git a/third_party/rules_rust/rust/private/toolchain_utils.bzl b/third_party/rules_rust/rust/private/toolchain_utils.bzl
index fcd4fb7..13c94ac 100644
--- a/third_party/rules_rust/rust/private/toolchain_utils.bzl
+++ b/third_party/rules_rust/rust/private/toolchain_utils.bzl
@@ -1,7 +1,7 @@
 """A module defining toolchain utilities"""
 
 def _toolchain_files_impl(ctx):
-    toolchain = ctx.toolchains[str(Label("//rust:toolchain"))]
+    toolchain = ctx.toolchains[str(Label("//rust:toolchain_type"))]
 
     runfiles = None
     if ctx.attr.tool == "cargo":
@@ -42,8 +42,6 @@
         )
     elif ctx.attr.tool == "rustc_lib":
         files = toolchain.rustc_lib
-    elif ctx.attr.tool == "rustc_srcs":
-        files = toolchain.rustc_srcs.files
     elif ctx.attr.tool == "rust_std" or ctx.attr.tool == "rust_stdlib" or ctx.attr.tool == "rust_lib":
         files = toolchain.rust_std
     else:
@@ -67,7 +65,6 @@
                 "rust_std",
                 "rust_stdlib",
                 "rustc_lib",
-                "rustc_srcs",
                 "rustc",
                 "rustdoc",
                 "rustfmt",
@@ -76,7 +73,32 @@
         ),
     },
     toolchains = [
-        str(Label("//rust:toolchain")),
+        str(Label("//rust:toolchain_type")),
+    ],
+    incompatible_use_toolchain_transition = True,
+)
+
+def _current_rust_toolchain_impl(ctx):
+    toolchain = ctx.toolchains[str(Label("@rules_rust//rust:toolchain_type"))]
+
+    return [
+        toolchain,
+        toolchain.make_variables,
+        DefaultInfo(
+            files = depset([
+                toolchain.rustc,
+                toolchain.rust_doc,
+                toolchain.rustfmt,
+                toolchain.cargo,
+            ]),
+        ),
+    ]
+
+current_rust_toolchain = rule(
+    doc = "A rule for exposing the current registered `rust_toolchain`.",
+    implementation = _current_rust_toolchain_impl,
+    toolchains = [
+        str(Label("@rules_rust//rust:toolchain_type")),
     ],
     incompatible_use_toolchain_transition = True,
 )
diff --git a/third_party/rules_rust/rust/private/transitions.bzl b/third_party/rules_rust/rust/private/transitions.bzl
index cd28efd..23336f4 100644
--- a/third_party/rules_rust/rust/private/transitions.bzl
+++ b/third_party/rules_rust/rust/private/transitions.bzl
@@ -46,63 +46,19 @@
     outputs = ["@rules_rust//rust/settings:use_real_import_macro"],
 )
 
-def _with_import_macro_bootstrapping_mode_impl(ctx):
-    target = ctx.attr.target[0]
-    return [target[rust_common.crate_info], target[rust_common.dep_info]]
+def _alias_with_import_macro_bootstrapping_mode_impl(ctx):
+    actual = ctx.attr.actual[0]
+    return [actual[rust_common.crate_info], actual[rust_common.dep_info]]
 
-with_import_macro_bootstrapping_mode = rule(
-    implementation = _with_import_macro_bootstrapping_mode_impl,
+alias_with_import_macro_bootstrapping_mode = rule(
+    implementation = _alias_with_import_macro_bootstrapping_mode_impl,
+    doc = "Alias-like rule to build the `actual` with `use_real_import_macro` setting disabled. Not to be used outside of the import macro bootstrap.",
     attrs = {
-        "target": attr.label(
+        # Using `actual` so tooling such as rust analyzer aspect traverses the target.
+        "actual": attr.label(
+            doc = "The target this alias refers to.",
             cfg = import_macro_dep_bootstrap_transition,
-            allow_single_file = True,
             mandatory = True,
-            executable = False,
-        ),
-        "_allowlist_function_transition": attr.label(
-            default = Label("//tools/allowlists/function_transition_allowlist"),
-        ),
-    },
-)
-
-def _without_process_wrapper_transition_impl(_settings, _attr):
-    """This transition allows rust_* rules to invoke rustc without process_wrapper."""
-    return {
-        "//rust/settings:use_process_wrapper": False,
-    }
-
-without_process_wrapper_transition = transition(
-    implementation = _without_process_wrapper_transition_impl,
-    inputs = [],
-    outputs = ["//rust/settings:use_process_wrapper"],
-)
-
-def _without_process_wrapper_impl(ctx):
-    executable = ctx.executable.target
-    link_name = ctx.label.name
-
-    # Append .exe if on windows
-    if executable.extension:
-        link_name = link_name + "." + executable.extension
-    link = ctx.actions.declare_file(link_name)
-    ctx.actions.symlink(
-        output = link,
-        target_file = executable,
-    )
-    return [
-        DefaultInfo(
-            executable = link,
-        ),
-    ]
-
-without_process_wrapper = rule(
-    implementation = _without_process_wrapper_impl,
-    attrs = {
-        "target": attr.label(
-            cfg = without_process_wrapper_transition,
-            allow_single_file = True,
-            mandatory = True,
-            executable = True,
         ),
         "_allowlist_function_transition": attr.label(
             default = Label("//tools/allowlists/function_transition_allowlist"),
diff --git a/third_party/rules_rust/rust/private/utils.bzl b/third_party/rules_rust/rust/private/utils.bzl
index fa7318b..583dc6e 100644
--- a/third_party/rules_rust/rust/private/utils.bzl
+++ b/third_party/rules_rust/rust/private/utils.bzl
@@ -17,6 +17,14 @@
 load("@bazel_tools//tools/cpp:toolchain_utils.bzl", find_rules_cc_toolchain = "find_cpp_toolchain")
 load(":providers.bzl", "BuildInfo", "CrateInfo", "DepInfo", "DepVariantInfo")
 
+UNSUPPORTED_FEATURES = [
+    "thin_lto",
+    "module_maps",
+    "use_header_modules",
+    "fdo_instrument",
+    "fdo_optimize",
+]
+
 def find_toolchain(ctx):
     """Finds the first rust toolchain that is configured.
 
@@ -26,7 +34,7 @@
     Returns:
         rust_toolchain: A Rust toolchain context.
     """
-    return ctx.toolchains[Label("//rust:toolchain")]
+    return ctx.toolchains[Label("//rust:toolchain_type")]
 
 def find_cc_toolchain(ctx):
     """Extracts a CcToolchain from the current target's context
@@ -43,7 +51,7 @@
         ctx = ctx,
         cc_toolchain = cc_toolchain,
         requested_features = ctx.features,
-        unsupported_features = ctx.disabled_features,
+        unsupported_features = UNSUPPORTED_FEATURES + ctx.disabled_features,
     )
     return cc_toolchain, feature_configuration
 
@@ -89,8 +97,8 @@
     path_parts = path.split("/")
     return [part for part in path_parts if part != "."]
 
-def get_lib_name(lib):
-    """Returns the name of a library artifact, eg. libabc.a -> abc
+def get_lib_name_default(lib):
+    """Returns the name of a library artifact.
 
     Args:
         lib (File): A library file
@@ -122,6 +130,44 @@
     else:
         return libname
 
+# TODO: Could we remove this function in favor of a "windows" parameter in the
+# above function? It looks like currently lambdas cannot accept local parameters
+# so the following doesn't work:
+#     args.add_all(
+#         cc_toolchain.dynamic_runtime_lib(feature_configuration = feature_configuration),
+#         map_each = lambda x: get_lib_name(x, for_windows = toolchain.os.startswith("windows)),
+#         format_each = "-ldylib=%s",
+#     )
+def get_lib_name_for_windows(lib):
+    """Returns the name of a library artifact for Windows builds.
+
+    Args:
+        lib (File): A library file
+
+    Returns:
+        str: The name of the library
+    """
+    # On macos and windows, dynamic/static libraries always end with the
+    # extension and potential versions will be before the extension, and should
+    # be part of the library name.
+    # On linux, the version usually comes after the extension.
+    # So regardless of the platform we want to find the extension and make
+    # everything left to it the library name.
+
+    # Search for the extension - starting from the right - by removing any
+    # trailing digit.
+    comps = lib.basename.split(".")
+    for comp in reversed(comps):
+        if comp.isdigit():
+            comps.pop()
+        else:
+            break
+
+    # The library name is now everything minus the extension.
+    libname = ".".join(comps[:-1])
+
+    return libname
+
 def abs(value):
     """Returns the absolute value of a number.
 
@@ -162,8 +208,10 @@
         File: Returns the first valid library type (only one is expected)
     """
     if use_pic:
+        # Order consistent with https://github.com/bazelbuild/bazel/blob/815dfdabb7df31d4e99b6fc7616ff8e2f9385d98/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java#L437.
         return (
             library_to_link.pic_static_library or
+            library_to_link.static_library or
             library_to_link.interface_library or
             library_to_link.dynamic_library
         )
@@ -176,12 +224,12 @@
         )
 
 def _expand_location(ctx, env, data):
-    """A trivial helper for `_expand_locations`
+    """A trivial helper for `expand_dict_value_locations` and `expand_list_element_locations`
 
     Args:
         ctx (ctx): The rule's context object
         env (str): The value possibly containing location macros to expand.
-        data (sequence of Targets): see `_expand_locations`
+        data (sequence of Targets): See one of the parent functions.
 
     Returns:
         string: The location-macro expanded version of the string.
@@ -189,8 +237,12 @@
     for directive in ("$(execpath ", "$(location "):
         if directive in env:
             # build script runner will expand pwd to execroot for us
-            env = env.replace(directive, "${pwd}/" + directive)
-    return ctx.expand_location(env, data)
+            env = env.replace(directive, "$${pwd}/" + directive)
+    return ctx.expand_make_variables(
+        env,
+        ctx.expand_location(env, data),
+        {},
+    )
 
 def expand_dict_value_locations(ctx, env, data):
     """Performs location-macro expansion on string values.
@@ -207,7 +259,9 @@
     as compilation happens in a separate sandbox folder, so when it comes time
     to read the file at runtime, the path is no longer valid.
 
-    See [`expand_location`](https://docs.bazel.build/versions/main/skylark/lib/ctx.html#expand_location) for detailed documentation.
+    For detailed documentation, see:
+    - [`expand_location`](https://bazel.build/rules/lib/ctx#expand_location)
+    - [`expand_make_variables`](https://bazel.build/rules/lib/ctx#expand_make_variables)
 
     Args:
         ctx (ctx): The rule's context object
@@ -228,7 +282,9 @@
     which process_wrapper and build_script_runner will expand at run time
     to the absolute path.
 
-    See [`expand_location`](https://docs.bazel.build/versions/main/skylark/lib/ctx.html#expand_location) for detailed documentation.
+    For detailed documentation, see:
+    - [`expand_location`](https://bazel.build/rules/lib/ctx#expand_location)
+    - [`expand_make_variables`](https://bazel.build/rules/lib/ctx#expand_make_variables)
 
     Args:
         ctx (ctx): The rule's context object
@@ -262,7 +318,9 @@
     Returns:
         str: The name of the crate for this target.
     """
-    return name.replace("-", "_")
+    for illegal in ("-", "/"):
+        name = name.replace(illegal, "_")
+    return name
 
 def _invalid_chars_in_crate_name(name):
     """Returns any invalid chars in the given crate name.
@@ -451,37 +509,37 @@
 # the second element is an encoding of that char suitable for use in a crate
 # name.
 _encodings = (
-    (":", "colon"),
-    ("!", "bang"),
-    ("%", "percent"),
-    ("@", "at"),
+    (":", "x"),
+    ("!", "excl"),
+    ("%", "prc"),
+    ("@", "ao"),
     ("^", "caret"),
-    ("`", "backtick"),
-    (" ", "space"),
-    ("\"", "quote"),
-    ("#", "hash"),
-    ("$", "dollar"),
-    ("&", "ampersand"),
-    ("'", "backslash"),
-    ("(", "lparen"),
-    (")", "rparen"),
-    ("*", "star"),
-    ("-", "dash"),
-    ("+", "plus"),
-    (",", "comma"),
-    (";", "semicolon"),
-    ("<", "langle"),
-    ("=", "equal"),
-    (">", "rangle"),
-    ("?", "question"),
-    ("[", "lbracket"),
-    ("]", "rbracket"),
-    ("{", "lbrace"),
-    ("|", "pipe"),
-    ("}", "rbrace"),
-    ("~", "tilde"),
-    ("/", "slash"),
-    (".", "dot"),
+    ("`", "bt"),
+    (" ", "sp"),
+    ("\"", "dq"),
+    ("#", "octo"),
+    ("$", "dllr"),
+    ("&", "amp"),
+    ("'", "sq"),
+    ("(", "lp"),
+    (")", "rp"),
+    ("*", "astr"),
+    ("-", "d"),
+    ("+", "pl"),
+    (",", "cm"),
+    (";", "sm"),
+    ("<", "la"),
+    ("=", "eq"),
+    (">", "ra"),
+    ("?", "qm"),
+    ("[", "lbk"),
+    ("]", "rbk"),
+    ("{", "lbe"),
+    ("|", "pp"),
+    ("}", "rbe"),
+    ("~", "td"),
+    ("/", "y"),
+    (".", "pd"),
 )
 
 # For each of the above encodings, we generate two substitution rules: one that
@@ -489,15 +547,18 @@
 # aren't clobbered by this translation, and one that does the encoding itself.
 # We also include a rule that protects the clobbering-protection rules from
 # getting clobbered.
-_substitutions = [("_quote", "_quotequote_")] + [
+_substitutions = [("_z", "_zz_")] + [
     subst
     for (pattern, replacement) in _encodings
     for subst in (
-        ("_{}_".format(replacement), "_quote{}_".format(replacement)),
+        ("_{}_".format(replacement), "_z{}_".format(replacement)),
         (pattern, "_{}_".format(replacement)),
     )
 ]
 
+# Expose the substitutions for testing only.
+substitutions_for_testing = _substitutions
+
 def encode_label_as_crate_name(package, name):
     """Encodes the package and target names in a format suitable for a crate name.
 
@@ -508,8 +569,21 @@
     Returns:
         A string that encodes the package and target name, to be used as the crate's name.
     """
-    full_name = package + ":" + name
-    return _replace_all(full_name, _substitutions)
+    return _encode_raw_string(package + ":" + name)
+
+def _encode_raw_string(str):
+    """Encodes a string using the above encoding format.
+
+    Args:
+        str (string): The string to be encoded.
+
+    Returns:
+        An encoded version of the input string.
+    """
+    return _replace_all(str, _substitutions)
+
+# Expose the underlying encoding function for testing only.
+encode_raw_string_for_testing = _encode_raw_string
 
 def decode_crate_name_as_label_for_testing(crate_name):
     """Decodes a crate_name that was encoded by encode_label_as_crate_name.
@@ -574,3 +648,25 @@
         string = string[:pattern_start] + replacement + string[after_pattern:]
 
     return string
+
+def can_build_metadata(toolchain, ctx, crate_type):
+    """Can we build metadata for this rust_library?
+
+    Args:
+        toolchain (toolchain): The rust toolchain
+        ctx (ctx): The rule's context object
+        crate_type (String): one of lib|rlib|dylib|staticlib|cdylib|proc-macro
+
+    Returns:
+        bool: whether we can build metadata for this rule.
+    """
+
+    # In order to enable pipelined compilation we require that:
+    # 1) The _pipelined_compilation flag is enabled,
+    # 2) the OS running the rule is something other than windows as we require sandboxing (for now),
+    # 3) process_wrapper is enabled (this is disabled when compiling process_wrapper itself),
+    # 4) the crate_type is rlib or lib.
+    return toolchain._pipelined_compilation and \
+           toolchain.os != "windows" and \
+           ctx.attr._process_wrapper and \
+           crate_type in ("rlib", "lib")
diff --git a/third_party/rules_rust/rust/repositories.bzl b/third_party/rules_rust/rust/repositories.bzl
index de5cb47..77b4bac 100644
--- a/third_party/rules_rust/rust/repositories.bzl
+++ b/third_party/rules_rust/rust/repositories.bzl
@@ -1,13 +1,20 @@
 # buildifier: disable=module-docstring
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+load(
+    "//rust/platform:triple_mappings.bzl",
+    "triple_to_constraint_set",
+)
 load("//rust/private:common.bzl", "rust_common")
 load(
     "//rust/private:repository_utils.bzl",
+    "BUILD_for_rust_analyzer_toolchain",
+    "BUILD_for_rust_toolchain",
     "BUILD_for_toolchain",
     "DEFAULT_STATIC_RUST_URL_TEMPLATES",
-    "DEFAULT_TOOLCHAIN_NAME_PREFIX",
     "check_version_valid",
+    "load_cargo",
+    "load_clippy",
     "load_llvm_tools",
     "load_rust_compiler",
     "load_rust_src",
@@ -33,6 +40,16 @@
 
 def rules_rust_dependencies():
     """Dependencies used in the implementation of `rules_rust`."""
+
+    maybe(
+        http_archive,
+        name = "platforms",
+        urls = [
+            "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/0.0.5/platforms-0.0.5.tar.gz",
+            "https://github.com/bazelbuild/platforms/releases/download/0.0.5/platforms-0.0.5.tar.gz",
+        ],
+        sha256 = "379113459b0feaf6bfbb584a91874c065078aa673222846ac765f86661c27407",
+    )
     maybe(
         http_archive,
         name = "rules_cc",
@@ -55,8 +72,19 @@
     maybe(
         http_archive,
         name = "build_bazel_apple_support",
-        sha256 = "76df040ade90836ff5543888d64616e7ba6c3a7b33b916aa3a4b68f342d1b447",
-        url = "https://github.com/bazelbuild/apple_support/releases/download/0.11.0/apple_support.0.11.0.tar.gz",
+        sha256 = "5bbce1b2b9a3d4b03c0697687023ef5471578e76f994363c641c5f50ff0c7268",
+        url = "https://github.com/bazelbuild/apple_support/releases/download/0.13.0/apple_support.0.13.0.tar.gz",
+    )
+
+    # process_wrapper needs a low-dependency way to process json.
+    maybe(
+        http_archive,
+        name = "rules_rust_tinyjson",
+        sha256 = "1a8304da9f9370f6a6f9020b7903b044aa9ce3470f300a1fba5bc77c78145a16",
+        url = "https://crates.io/api/v1/crates/tinyjson/2.3.0/download",
+        strip_prefix = "tinyjson-2.3.0",
+        type = "tar.gz",
+        build_file = "@rules_rust//util/process_wrapper:BUILD.tinyjson.bazel",
     )
 
 # buildifier: disable=unnamed-macro
@@ -92,7 +120,7 @@
 
     Args:
         dev_components (bool, optional): Whether to download the rustc-dev components (defaults to False). Requires version to be "nightly".
-        edition (str, optional): The rust edition to be used by default (2015, 2018 (default), or 2021)
+        edition (str, optional): The rust edition to be used by default (2015, 2018, or 2021). If absent, every target is required to specify its `edition` attribute.
         include_rustc_srcs (bool, optional): Whether to download rustc's src code. This is required in order to use rust-analyzer support.
             See [rust_toolchain_repository.include_rustc_srcs](#rust_toolchain_repository-include_rustc_srcs). for more details
         allocator_library (str, optional): Target that provides allocator functions when rust_library targets are embedded in a cc_binary.
@@ -110,6 +138,27 @@
     if not rustfmt_version:
         rustfmt_version = version
 
+    rust_analyzer_repo_name = "rust_analyzer_{}".format(version)
+    if iso_date:
+        rust_analyzer_repo_name = "{}-{}".format(
+            rust_analyzer_repo_name,
+            iso_date,
+        )
+
+    maybe(
+        rust_analyzer_toolchain_repository,
+        name = rust_analyzer_repo_name,
+        version = version,
+        urls = urls,
+        sha256s = sha256s,
+        iso_date = iso_date,
+    )
+
+    if register_toolchains:
+        native.register_toolchains("@{}//:toolchain".format(
+            rust_analyzer_repo_name,
+        ))
+
     for exec_triple, name in DEFAULT_TOOLCHAIN_TRIPLES.items():
         maybe(
             rust_repository_set,
@@ -140,8 +189,8 @@
 
     rust_register_toolchains(**kwargs)
 
-def _rust_toolchain_repository_impl(ctx):
-    """The implementation of the rust toolchain repository rule."""
+def _rust_toolchain_tools_repository_impl(ctx):
+    """The implementation of the rust toolchain tools repository rule."""
 
     check_version_valid(ctx.attr.version, ctx.attr.iso_date)
 
@@ -149,47 +198,52 @@
     if should_include_rustc_srcs(ctx):
         load_rust_src(ctx)
 
-    build_components = [load_rust_compiler(ctx)]
+    build_components = [
+        load_rust_compiler(ctx),
+        load_clippy(ctx),
+        load_cargo(ctx),
+    ]
 
     if ctx.attr.rustfmt_version:
         build_components.append(load_rustfmt(ctx))
 
     # Rust 1.45.0 and nightly builds after 2020-05-22 need the llvm-tools gzip to get the libLLVM dylib
-    if ctx.attr.version >= "1.45.0" or (ctx.attr.version == "nightly" and ctx.attr.iso_date > "2020-05-22"):
-        load_llvm_tools(ctx, ctx.attr.exec_triple)
+    include_llvm_tools = ctx.attr.version >= "1.45.0" or (ctx.attr.version == "nightly" and ctx.attr.iso_date > "2020-05-22")
+    if include_llvm_tools:
+        build_components.append(load_llvm_tools(ctx, ctx.attr.exec_triple))
 
-    for target_triple in [ctx.attr.exec_triple] + ctx.attr.extra_target_triples:
-        build_components.append(load_rust_stdlib(ctx, target_triple))
+    build_components.append(load_rust_stdlib(ctx, ctx.attr.target_triple))
 
-        # extra_target_triples contains targets such as wasm, which don't have rustc_dev components
-        if ctx.attr.dev_components and target_triple not in ctx.attr.extra_target_triples:
-            load_rustc_dev_nightly(ctx, target_triple)
+    stdlib_linkflags = None
+    if "BAZEL_RUST_STDLIB_LINKFLAGS" in ctx.os.environ:
+        stdlib_linkflags = ctx.os.environ["BAZEL_RUST_STDLIB_LINKFLAGS"].split(":")
+
+    build_components.append(BUILD_for_rust_toolchain(
+        name = "rust_toolchain",
+        exec_triple = ctx.attr.exec_triple,
+        include_rustc_srcs = should_include_rustc_srcs(ctx),
+        allocator_library = ctx.attr.allocator_library,
+        target_triple = ctx.attr.target_triple,
+        stdlib_linkflags = stdlib_linkflags,
+        workspace_name = ctx.attr.name,
+        default_edition = ctx.attr.edition,
+        include_rustfmt = not (not ctx.attr.rustfmt_version),
+        include_llvm_tools = include_llvm_tools,
+    ))
+
+    # Not all target triples are expected to have dev components
+    if ctx.attr.dev_components:
+        load_rustc_dev_nightly(ctx, ctx.attr.target_triple)
 
     ctx.file("WORKSPACE.bazel", "")
     ctx.file("BUILD.bazel", "\n".join(build_components))
 
-def _rust_toolchain_repository_proxy_impl(ctx):
-    build_components = []
-    for target_triple in [ctx.attr.exec_triple] + ctx.attr.extra_target_triples:
-        build_components.append(BUILD_for_toolchain(
-            name = "{toolchain_prefix}_{target_triple}".format(
-                toolchain_prefix = ctx.attr.toolchain_name_prefix,
-                target_triple = target_triple,
-            ),
-            exec_triple = ctx.attr.exec_triple,
-            parent_workspace_name = ctx.attr.parent_workspace_name,
-            target_triple = target_triple,
-        ))
-
-    ctx.file("WORKSPACE.bazel", "")
-    ctx.file("BUILD.bazel", "\n".join(build_components))
-
-rust_toolchain_repository = repository_rule(
+rust_toolchain_tools_repository = repository_rule(
     doc = (
         "Composes a single workspace containing the toolchain components for compiling on a given " +
         "platform to a series of target platforms.\n" +
         "\n" +
-        "A given instance of this rule should be accompanied by a rust_toolchain_repository_proxy " +
+        "A given instance of this rule should be accompanied by a toolchain_repository_proxy " +
         "invocation to declare its toolchains to Bazel; the indirection allows separating toolchain " +
         "selection from toolchain fetching."
     ),
@@ -208,16 +262,15 @@
             default = False,
         ),
         "edition": attr.string(
-            doc = "The rust edition to be used by default.",
-            default = rust_common.default_edition,
+            doc = (
+                "The rust edition to be used by default (2015, 2018, or 2021). " +
+                "If absent, every rule is required to specify its `edition` attribute."
+            ),
         ),
         "exec_triple": attr.string(
             doc = "The Rust-style target that this compiler runs on",
             mandatory = True,
         ),
-        "extra_target_triples": attr.string_list(
-            doc = "Additional rust-style targets that this set of toolchains should support.",
-        ),
         "include_rustc_srcs": attr.bool(
             doc = (
                 "Whether to download and unpack the rustc source files. These are very large, and " +
@@ -237,8 +290,9 @@
         "sha256s": attr.string_dict(
             doc = "A dict associating tool subdirectories to sha256 hashes. See [rust_repositories](#rust_repositories) for more details.",
         ),
-        "toolchain_name_prefix": attr.string(
-            doc = "The per-target prefix expected for the rust_toolchain declarations in the parent workspace.",
+        "target_triple": attr.string(
+            doc = "The Rust-style target that this compiler builds for",
+            mandatory = True,
         ),
         "urls": attr.string_list(
             doc = "A list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format).",
@@ -249,32 +303,238 @@
             mandatory = True,
         ),
     },
-    implementation = _rust_toolchain_repository_impl,
+    implementation = _rust_toolchain_tools_repository_impl,
     environ = ["RULES_RUST_TOOLCHAIN_INCLUDE_RUSTC_SRCS"],
 )
 
-rust_toolchain_repository_proxy = repository_rule(
+def _toolchain_repository_proxy_impl(repository_ctx):
+    repository_ctx.file("WORKSPACE.bazel", """workspace(name = "{}")""".format(
+        repository_ctx.name,
+    ))
+
+    repository_ctx.file("BUILD.bazel", BUILD_for_toolchain(
+        name = "toolchain",
+        toolchain = repository_ctx.attr.toolchain,
+        toolchain_type = repository_ctx.attr.toolchain_type,
+        target_compatible_with = json.encode(repository_ctx.attr.target_compatible_with),
+        exec_compatible_with = json.encode(repository_ctx.attr.exec_compatible_with),
+    ))
+
+toolchain_repository_proxy = repository_rule(
     doc = (
         "Generates a toolchain-bearing repository that declares the toolchains from some other " +
         "rust_toolchain_repository."
     ),
     attrs = {
-        "exec_triple": attr.string(
-            doc = "The Rust-style target triple for the compilation platform",
+        "exec_compatible_with": attr.string_list(
+            doc = "A list of constraints for the execution platform for this toolchain.",
+        ),
+        "target_compatible_with": attr.string_list(
+            doc = "A list of constraints for the target platform for this toolchain.",
+        ),
+        "toolchain": attr.string(
+            doc = "The name of the toolchain implementation target.",
             mandatory = True,
         ),
-        "extra_target_triples": attr.string_list(
-            doc = "The Rust-style triples for extra compilation targets",
-        ),
-        "parent_workspace_name": attr.string(
-            doc = "The name of the other rust_toolchain_repository",
+        "toolchain_type": attr.string(
+            doc = "The toolchain type of the toolchain to declare",
             mandatory = True,
         ),
-        "toolchain_name_prefix": attr.string(
-            doc = "The per-target prefix expected for the rust_toolchain declarations in the parent workspace.",
-        ),
     },
-    implementation = _rust_toolchain_repository_proxy_impl,
+    implementation = _toolchain_repository_proxy_impl,
+)
+
+# For legacy support
+rust_toolchain_repository_proxy = toolchain_repository_proxy
+
+def rust_toolchain_repository(
+        name,
+        version,
+        exec_triple,
+        target_triple,
+        exec_compatible_with = None,
+        target_compatible_with = None,
+        include_rustc_srcs = False,
+        allocator_library = None,
+        iso_date = None,
+        rustfmt_version = None,
+        edition = None,
+        dev_components = False,
+        sha256s = None,
+        urls = DEFAULT_STATIC_RUST_URL_TEMPLATES,
+        auth = None):
+    """Assembles a remote repository for the given toolchain params, produces a proxy repository \
+    to contain the toolchain declaration, and registers the toolchains.
+
+    N.B. A "proxy repository" is needed to allow for registering the toolchain (with constraints) \
+    without actually downloading the toolchain.
+
+    Args:
+        name (str): The name of the generated repository
+        version (str): The version of the tool among "nightly", "beta', or an exact version.
+        exec_triple (str): The Rust-style target that this compiler runs on.
+        target_triple (str): The Rust-style target to build for.
+        exec_compatible_with (list, optional): A list of constraints for the execution platform for this toolchain.
+        target_compatible_with (list, optional): A list of constraints for the target platform for this toolchain.
+        include_rustc_srcs (bool, optional): Whether to download rustc's src code. This is required in order to use rust-analyzer support.
+        allocator_library (str, optional): Target that provides allocator functions when rust_library targets are embedded in a cc_binary.
+        iso_date (str, optional): The date of the tool.
+        rustfmt_version (str, optional):  The version of rustfmt to be associated with the
+            toolchain.
+        edition (str, optional): The rust edition to be used by default (2015, 2018, or 2021). If absent, every rule is required to specify its `edition` attribute.
+        dev_components (bool, optional): Whether to download the rustc-dev components.
+            Requires version to be "nightly". Defaults to False.
+        sha256s (str, optional): A dict associating tool subdirectories to sha256 hashes. See
+            [rust_repositories](#rust_repositories) for more details.
+        urls (list, optional): A list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format). Defaults to ['https://static.rust-lang.org/dist/{}.tar.gz']
+        auth (dict): Auth object compatible with repository_ctx.download to use when downloading files.
+            See [repository_ctx.download](https://docs.bazel.build/versions/main/skylark/lib/repository_ctx.html#download) for more details.
+
+    Returns:
+        str: The name of the registerable toolchain created by this rule.
+    """
+
+    if exec_compatible_with == None:
+        exec_compatible_with = triple_to_constraint_set(exec_triple)
+
+    if target_compatible_with == None:
+        target_compatible_with = triple_to_constraint_set(target_triple)
+
+    rust_toolchain_tools_repository(
+        name = name + "_tools",
+        exec_triple = exec_triple,
+        include_rustc_srcs = include_rustc_srcs,
+        allocator_library = allocator_library,
+        target_triple = target_triple,
+        iso_date = iso_date,
+        version = version,
+        rustfmt_version = rustfmt_version,
+        edition = edition,
+        dev_components = dev_components,
+        sha256s = sha256s,
+        urls = urls,
+        auth = auth,
+    )
+
+    toolchain_repository_proxy(
+        name = name,
+        toolchain = "@{}//:{}".format(name + "_tools", "rust_toolchain"),
+        toolchain_type = "@rules_rust//rust:toolchain",
+        exec_compatible_with = exec_compatible_with,
+        target_compatible_with = target_compatible_with,
+    )
+
+    return "@{name}//:toolchain".format(
+        name = name,
+    )
+
+def _rust_analyzer_toolchain_srcs_repository_impl(repository_ctx):
+    load_rust_src(repository_ctx)
+
+    repository_ctx.file("WORKSPACE.bazel", """workspace(name = "{}")""".format(
+        repository_ctx.name,
+    ))
+
+    repository_ctx.file("BUILD.bazel", BUILD_for_rust_analyzer_toolchain(
+        name = "rust_analyzer_toolchain",
+    ))
+
+rust_analyzer_toolchain_srcs_repository = repository_rule(
+    doc = "A repository rule for defining a rust_analyzer_toolchain with a `rust-src` artifact.",
+    attrs = {
+        "auth": attr.string_dict(
+            doc = (
+                "Auth object compatible with repository_ctx.download to use when downloading files. " +
+                "See [repository_ctx.download](https://docs.bazel.build/versions/main/skylark/lib/repository_ctx.html#download) for more details."
+            ),
+        ),
+        "iso_date": attr.string(
+            doc = "The date of the tool (or None, if the version is a specific version).",
+        ),
+        "sha256s": attr.string_dict(
+            doc = "A dict associating tool subdirectories to sha256 hashes. See [rust_repositories](#rust_repositories) for more details.",
+        ),
+        "urls": attr.string_list(
+            doc = "A list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format).",
+            default = DEFAULT_STATIC_RUST_URL_TEMPLATES,
+        ),
+        "version": attr.string(
+            doc = "The version of the tool among \"nightly\", \"beta\", or an exact version.",
+            mandatory = True,
+        ),
+    },
+    implementation = _rust_analyzer_toolchain_srcs_repository_impl,
+)
+
+def rust_analyzer_toolchain_repository(
+        name,
+        version,
+        exec_compatible_with = [],
+        target_compatible_with = [],
+        iso_date = None,
+        sha256s = None,
+        urls = None,
+        auth = None):
+    """Assemble a remote rust_analyzer_toolchain target based on the given params.
+
+    Args:
+        name (str): The name of the toolchain proxy repository contianing the registerable toolchain.
+        version (str): The version of the tool among "nightly", "beta', or an exact version.
+        exec_compatible_with (list, optional): A list of constraints for the execution platform for this toolchain.
+        target_compatible_with (list, optional): A list of constraints for the target platform for this toolchain.
+        iso_date (str, optional): The date of the tool.
+        sha256s (str, optional): A dict associating tool subdirectories to sha256 hashes. See
+            [rust_repositories](#rust_repositories) for more details.
+        urls (list, optional): A list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format). Defaults to ['https://static.rust-lang.org/dist/{}.tar.gz']
+        auth (dict): Auth object compatible with repository_ctx.download to use when downloading files.
+            See [repository_ctx.download](https://docs.bazel.build/versions/main/skylark/lib/repository_ctx.html#download) for more details.
+
+    Returns:
+        str: The name of a registerable rust_analyzer_toolchain.
+    """
+    rust_analyzer_toolchain_srcs_repository(
+        name = name + "_srcs",
+        version = version,
+        iso_date = iso_date,
+        sha256s = sha256s,
+        urls = urls,
+        auth = auth,
+    )
+
+    toolchain_repository_proxy(
+        name = name,
+        toolchain = "@{}//:{}".format(name + "_srcs", "rust_analyzer_toolchain"),
+        toolchain_type = "@rules_rust//rust/rust_analyzer:toolchain_type",
+        exec_compatible_with = exec_compatible_with,
+        target_compatible_with = target_compatible_with,
+    )
+
+    return "@{}//:toolchain".format(
+        name,
+    )
+
+def _rust_toolchain_set_repository_impl(repository_ctx):
+    repository_ctx.file("WORKSPACE.bazel", """workspace(name = "{}")""".format(
+        repository_ctx.name,
+    ))
+
+    repository_ctx.file("BUILD.bazel", """exports_files(["defs.bzl"])""")
+    repository_ctx.file("defs.bzl", "ALL_TOOLCHAINS = {}\n".format(
+        json.encode_indent(repository_ctx.attr.toolchains, indent = " " * 4),
+    ))
+
+rust_toolchain_set_repository = repository_rule(
+    doc = (
+        "Generates a toolchain-bearing repository that declares the toolchains from some other " +
+        "rust_toolchain_repository."
+    ),
+    attrs = {
+        "toolchains": attr.string_list(
+            doc = "The list of all toolchains created by the current `rust_toolchain_set`",
+            mandatory = True,
+        ),
+    },
+    implementation = _rust_toolchain_set_repository_impl,
 )
 
 def rust_repository_set(
@@ -309,7 +569,7 @@
         iso_date (str, optional): The date of the tool. Defaults to None.
         rustfmt_version (str, optional):  The version of rustfmt to be associated with the
             toolchain. Defaults to None.
-        edition (str, optional): The rust edition to be used by default (2015, 2018 (if None), or 2021).
+        edition (str, optional): The rust edition to be used by default (2015, 2018, or 2021). If absent, every rule is required to specify its `edition` attribute.
         dev_components (bool, optional): Whether to download the rustc-dev components.
             Requires version to be "nightly". Defaults to False.
         sha256s (str, optional): A dict associating tool subdirectories to sha256 hashes. See
@@ -320,39 +580,31 @@
         register_toolchain (bool): If True, the generated `rust_toolchain` target will become a registered toolchain.
     """
 
-    rust_toolchain_repository(
-        name = name,
-        exec_triple = exec_triple,
-        include_rustc_srcs = include_rustc_srcs,
-        allocator_library = allocator_library,
-        extra_target_triples = extra_target_triples,
-        iso_date = iso_date,
-        toolchain_name_prefix = DEFAULT_TOOLCHAIN_NAME_PREFIX,
-        version = version,
-        rustfmt_version = rustfmt_version,
-        edition = edition,
-        dev_components = dev_components,
-        sha256s = sha256s,
-        urls = urls,
-        auth = auth,
-    )
-
-    rust_toolchain_repository_proxy(
-        name = name + "_toolchains",
-        exec_triple = exec_triple,
-        extra_target_triples = extra_target_triples,
-        parent_workspace_name = name,
-        toolchain_name_prefix = DEFAULT_TOOLCHAIN_NAME_PREFIX,
-    )
-
     all_toolchain_names = []
     for target_triple in [exec_triple] + extra_target_triples:
-        all_toolchain_names.append("@{name}_toolchains//:{toolchain_name_prefix}_{triple}".format(
-            name = name,
-            toolchain_name_prefix = DEFAULT_TOOLCHAIN_NAME_PREFIX,
-            triple = target_triple,
+        toolchain_name = "{}__{}".format(name, target_triple)
+        all_toolchain_names.append(rust_toolchain_repository(
+            name = toolchain_name,
+            exec_triple = exec_triple,
+            include_rustc_srcs = include_rustc_srcs,
+            allocator_library = allocator_library,
+            target_triple = target_triple,
+            iso_date = iso_date,
+            version = version,
+            rustfmt_version = rustfmt_version,
+            edition = edition,
+            dev_components = dev_components,
+            sha256s = sha256s,
+            urls = urls,
+            auth = auth,
         ))
 
+    # This repository exists to allow `rust_repository_set` to work with the `maybe` wrapper.
+    rust_toolchain_set_repository(
+        name = name,
+        toolchains = all_toolchain_names,
+    )
+
     # Register toolchains
     if register_toolchain:
         native.register_toolchains(*all_toolchain_names)
diff --git a/third_party/rules_rust/rust/rust_analyzer/BUILD.bazel b/third_party/rules_rust/rust/rust_analyzer/BUILD.bazel
new file mode 100644
index 0000000..04e6c60
--- /dev/null
+++ b/third_party/rules_rust/rust/rust_analyzer/BUILD.bazel
@@ -0,0 +1,5 @@
+package(default_visibility = ["//visibility:public"])
+
+toolchain_type(
+    name = "toolchain_type",
+)
diff --git a/third_party/rules_rust/rust/settings/BUILD.bazel b/third_party/rules_rust/rust/settings/BUILD.bazel
index 474237a..3171bc9 100644
--- a/third_party/rules_rust/rust/settings/BUILD.bazel
+++ b/third_party/rules_rust/rust/settings/BUILD.bazel
@@ -29,21 +29,22 @@
     build_setting_default = False,
 )
 
-# A flag that enables/disables the use of process_wrapper when invoking rustc.
-# This is useful for building process_wrapper itself without causing dependency cycles.
+# When set, this flag causes rustc to emit .rmeta files and use them for rlib -> rlib dependencies.
+# While this involves one extra (short) rustc invocation to build the rmeta file,
+# it allows library dependencies to be unlocked much sooner, increasing parallelism during compilation.
 bool_flag(
-    name = "use_process_wrapper",
-    build_setting_default = True,
+    name = "pipelined_compilation",
+    build_setting_default = False,
+)
+
+# A flag to control whether to link rust_binary and rust_test targets using
+# cc_common.link instead of rustc.
+bool_flag(
+    name = "experimental_use_cc_common_link",
+    build_setting_default = False,
 )
 
 bzl_library(
     name = "bzl_lib",
     srcs = glob(["**/*.bzl"]),
 )
-
-alias(
-    name = "rules",
-    actual = ":bzl_lib",
-    deprecation = "Please use the `@rules_rust//settings:bzl_lib` target instead",
-    visibility = ["//rust:__subpackages__"],
-)
diff --git a/third_party/rules_rust/rust/toolchain.bzl b/third_party/rules_rust/rust/toolchain.bzl
index 083991a..45fd892 100644
--- a/third_party/rules_rust/rust/toolchain.bzl
+++ b/third_party/rules_rust/rust/toolchain.bzl
@@ -2,8 +2,11 @@
 
 load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo")
 load("//rust/private:common.bzl", "rust_common")
+load("//rust/private:rust_analyzer.bzl", _rust_analyzer_toolchain = "rust_analyzer_toolchain")
 load("//rust/private:utils.bzl", "dedent", "find_cc_toolchain", "make_static_lib_symlink")
 
+rust_analyzer_toolchain = _rust_analyzer_toolchain
+
 def _rust_stdlib_filegroup_impl(ctx):
     rust_std = ctx.files.srcs
     dot_a_files = []
@@ -11,6 +14,7 @@
     core_files = []
     between_core_and_std_files = []
     std_files = []
+    test_files = []
     memchr_files = []
     alloc_files = []
     self_contained_files = [
@@ -21,7 +25,8 @@
 
     std_rlibs = [f for f in rust_std if f.basename.endswith(".rlib")]
     if std_rlibs:
-        # std depends on everything
+        # test depends on std
+        # std depends on everything except test
         #
         # core only depends on alloc, but we poke adler in there
         # because that needs to be before miniz_oxide
@@ -36,14 +41,15 @@
         between_core_and_std_files = [
             f
             for f in dot_a_files
-            if "alloc" not in f.basename and "compiler_builtins" not in f.basename and "core" not in f.basename and "adler" not in f.basename and "std" not in f.basename and "memchr" not in f.basename
+            if "alloc" not in f.basename and "compiler_builtins" not in f.basename and "core" not in f.basename and "adler" not in f.basename and "std" not in f.basename and "memchr" not in f.basename and "test" not in f.basename
         ]
         memchr_files = [f for f in dot_a_files if "memchr" in f.basename]
         std_files = [f for f in dot_a_files if "std" in f.basename]
+        test_files = [f for f in dot_a_files if "test" in f.basename]
 
-        partitioned_files_len = len(alloc_files) + len(between_alloc_and_core_files) + len(core_files) + len(between_core_and_std_files) + len(memchr_files) + len(std_files)
+        partitioned_files_len = len(alloc_files) + len(between_alloc_and_core_files) + len(core_files) + len(between_core_and_std_files) + len(memchr_files) + len(std_files) + len(test_files)
         if partitioned_files_len != len(dot_a_files):
-            partitioned = alloc_files + between_alloc_and_core_files + core_files + between_core_and_std_files + memchr_files + std_files
+            partitioned = alloc_files + between_alloc_and_core_files + core_files + between_core_and_std_files + memchr_files + std_files + test_files
             for f in sorted(partitioned):
                 # buildifier: disable=print
                 print("File partitioned: {}".format(f.basename))
@@ -60,6 +66,7 @@
             core_files = core_files,
             between_core_and_std_files = between_core_and_std_files,
             std_files = std_files,
+            test_files = test_files,
             memchr_files = memchr_files,
             alloc_files = alloc_files,
             self_contained_files = self_contained_files,
@@ -195,21 +202,29 @@
             transitive = [between_core_and_std_inputs],
             order = "topological",
         )
+        test_inputs = depset(
+            [
+                _ltl(f, ctx, cc_toolchain, feature_configuration)
+                for f in rust_stdlib_info.test_files
+            ],
+            transitive = [std_inputs],
+            order = "topological",
+        )
 
-        link_inputs = [depset([cc_common.create_linker_input(
+        link_inputs = cc_common.create_linker_input(
             owner = rust_std.label,
-            libraries = std_inputs,
-        )])]
+            libraries = test_inputs,
+        )
 
-        allocator_inputs = []
+        allocator_inputs = None
         if allocator_library:
-            allocator_inputs = allocator_library[CcInfo].linking_context.linker_inputs.to_list()
+            allocator_inputs = [allocator_library[CcInfo].linking_context.linker_inputs]
 
         cc_infos.append(CcInfo(
             linking_context = cc_common.create_linking_context(
                 linker_inputs = depset(
-                    allocator_inputs,
-                    transitive = link_inputs,
+                    [link_inputs],
+                    transitive = allocator_inputs,
                     order = "topological",
                 ),
             ),
@@ -411,6 +426,11 @@
 
     rename_first_party_crates = ctx.attr._rename_first_party_crates[BuildSettingInfo].value
     third_party_dir = ctx.attr._third_party_dir[BuildSettingInfo].value
+    pipelined_compilation = ctx.attr._pipelined_compilation[BuildSettingInfo].value
+
+    experimental_use_cc_common_link = ctx.attr.experimental_use_cc_common_link[BuildSettingInfo].value
+    if experimental_use_cc_common_link and not ctx.attr.allocator_library:
+        fail("rust_toolchain.experimental_use_cc_common_link requires rust_toolchain.allocator_library to be set")
 
     if ctx.attr.rust_lib:
         # buildifier: disable=print
@@ -465,6 +485,26 @@
     sysroot_path = sysroot.sysroot_anchor.dirname
     sysroot_short_path, _, _ = sysroot.sysroot_anchor.short_path.rpartition("/")
 
+    # Variables for make variable expansion
+    make_variables = {
+        "RUSTC": sysroot.rustc.path,
+        "RUSTDOC": sysroot.rustdoc.path,
+        "RUST_DEFAULT_EDITION": ctx.attr.default_edition or "",
+        "RUST_SYSROOT": sysroot_path,
+    }
+
+    if sysroot.cargo:
+        make_variables.update({
+            "CARGO": sysroot.cargo.path,
+        })
+
+    if sysroot.rustfmt:
+        make_variables.update({
+            "RUSTFMT": sysroot.rustfmt.path,
+        })
+
+    make_variable_info = platform_common.TemplateVariableInfo(make_variables)
+
     toolchain = platform_common.ToolchainInfo(
         all_files = sysroot.all_files,
         binary_ext = ctx.attr.binary_ext,
@@ -474,8 +514,12 @@
         crosstool_files = ctx.files._cc_toolchain,
         default_edition = ctx.attr.default_edition,
         dylib_ext = ctx.attr.dylib_ext,
+        env = ctx.attr.env,
         exec_triple = ctx.attr.exec_triple,
         libstd_and_allocator_ccinfo = _make_libstd_and_allocator_ccinfo(ctx, rust_std, ctx.attr.allocator_library),
+        llvm_cov = ctx.file.llvm_cov,
+        llvm_profdata = ctx.file.llvm_profdata,
+        make_variables = make_variable_info,
         os = ctx.attr.os,
         rust_doc = sysroot.rustdoc,
         rust_lib = sysroot.rust_std,  # `rust_lib` is deprecated and only exists for legacy support.
@@ -497,8 +541,13 @@
         # Experimental and incompatible flags
         _rename_first_party_crates = rename_first_party_crates,
         _third_party_dir = third_party_dir,
+        _pipelined_compilation = pipelined_compilation,
+        _experimental_use_cc_common_link = experimental_use_cc_common_link,
     )
-    return [toolchain]
+    return [
+        toolchain,
+        make_variable_info,
+    ]
 
 rust_toolchain = rule(
     implementation = _rust_toolchain_impl,
@@ -530,13 +579,18 @@
             },
         ),
         "default_edition": attr.string(
-            doc = "The edition to use for rust_* rules that don't specify an edition.",
-            default = rust_common.default_edition,
+            doc = (
+                "The edition to use for rust_* rules that don't specify an edition. " +
+                "If absent, every rule is required to specify its `edition` attribute."
+            ),
         ),
         "dylib_ext": attr.string(
             doc = "The extension for dynamic libraries created from rustc.",
             mandatory = True,
         ),
+        "env": attr.string_dict(
+            doc = "Environment variables to set in actions.",
+        ),
         "exec_triple": attr.string(
             doc = (
                 "The platform triple for the toolchains execution environment. " +
@@ -544,6 +598,20 @@
             ),
             mandatory = True,
         ),
+        "experimental_use_cc_common_link": attr.label(
+            default = Label("//rust/settings:experimental_use_cc_common_link"),
+            doc = "Label to a boolean build setting that controls whether cc_common.link is used to link rust binaries.",
+        ),
+        "llvm_cov": attr.label(
+            doc = "The location of the `llvm-cov` binary. Can be a direct source or a filegroup containing one item. If None, rust code is not instrumented for coverage.",
+            allow_single_file = True,
+            cfg = "exec",
+        ),
+        "llvm_profdata": attr.label(
+            doc = "The location of the `llvm-profdata` binary. Can be a direct source or a filegroup containing one item. If `llvm_cov` is None, this can be None as well and rust code is not instrumented for coverage.",
+            allow_single_file = True,
+            cfg = "exec",
+        ),
         "llvm_tools": attr.label(
             doc = "LLVM tools that are shipped with the Rust toolchain.",
             allow_files = True,
@@ -614,13 +682,16 @@
             ),
         ),
         "_cc_toolchain": attr.label(
-            default = "@bazel_tools//tools/cpp:current_cc_toolchain",
+            default = Label("@bazel_tools//tools/cpp:current_cc_toolchain"),
+        ),
+        "_pipelined_compilation": attr.label(
+            default = "@rules_rust//rust/settings:pipelined_compilation",
         ),
         "_rename_first_party_crates": attr.label(
-            default = "@rules_rust//rust/settings:rename_first_party_crates",
+            default = Label("//rust/settings:rename_first_party_crates"),
         ),
         "_third_party_dir": attr.label(
-            default = "@rules_rust//rust/settings:third_party_dir",
+            default = Label("//rust/settings:third_party_dir"),
         ),
     },
     toolchains = [
diff --git a/third_party/rules_rust/rust/toolchain/BUILD.bazel b/third_party/rules_rust/rust/toolchain/BUILD.bazel
index daccd08..766f1e5 100644
--- a/third_party/rules_rust/rust/toolchain/BUILD.bazel
+++ b/third_party/rules_rust/rust/toolchain/BUILD.bazel
@@ -1,43 +1,42 @@
-load("//rust/private:toolchain_utils.bzl", "toolchain_files")
+load("//rust/private:toolchain_utils.bzl", "current_rust_toolchain", "toolchain_files")
 
 package(default_visibility = ["//visibility:public"])
 
 toolchain_files(
-    name = "current_exec_cargo_files",
+    name = "current_cargo_files",
     tool = "cargo",
 )
 
 toolchain_files(
-    name = "current_exec_clippy_files",
+    name = "current_clippy_files",
     tool = "clippy",
 )
 
 toolchain_files(
-    name = "current_exec_rustc_files",
+    name = "current_rustc_files",
     tool = "rustc",
 )
 
 toolchain_files(
-    name = "current_exec_rustdoc_files",
+    name = "current_rustdoc_files",
     tool = "rustdoc",
 )
 
 toolchain_files(
-    name = "current_exec_rustfmt_files",
+    name = "current_rustfmt_files",
     tool = "rustfmt",
 )
 
 toolchain_files(
-    name = "current_exec_rustc_lib_files",
+    name = "current_rustc_lib_files",
     tool = "rustc_lib",
 )
 
 toolchain_files(
-    name = "current_exec_rustc_srcs_files",
-    tool = "rustc_srcs",
+    name = "current_rust_stdlib_files",
+    tool = "rust_stdlib",
 )
 
-toolchain_files(
-    name = "current_exec_rust_stdlib_files",
-    tool = "rust_stdlib",
+current_rust_toolchain(
+    name = "current_rust_toolchain",
 )
diff --git a/third_party/rules_rust/test/build_env/BUILD.bazel b/third_party/rules_rust/test/build_env/BUILD.bazel
index 511d23a..b4e1a92 100644
--- a/third_party/rules_rust/test/build_env/BUILD.bazel
+++ b/third_party/rules_rust/test/build_env/BUILD.bazel
@@ -10,6 +10,7 @@
     name = "conflicting_deps_test",
     srcs = ["tests/manifest_dir.rs"],
     data = ["src/manifest_dir_file.txt"],
+    edition = "2018",
 )
 
 rust_library(
@@ -27,9 +28,28 @@
     edition = "2018",
 )
 
+rust_library(
+    name = "arbitrary_env_lib_in_test",
+    srcs = ["tests/arbitrary_env_lib.rs"],
+    edition = "2018",
+    rustc_env = {
+        "USER_DEFINED_KEY": "DIFFERENT_USER_DEFINED_VALUE",
+    },
+)
+
+rust_test(
+    name = "arbitrary_env_lib_test_in_test",
+    crate = ":arbitrary_env_lib_in_test",
+    edition = "2018",
+    rustc_env = {
+        "USER_DEFINED_KEY": "USER_DEFINED_VALUE",
+    },
+)
+
 rust_test(
     name = "arbitrary_env_test",
     srcs = ["tests/arbitrary_env.rs"],
+    edition = "2018",
     rustc_env = {
         "USER_DEFINED_KEY": "USER_DEFINED_VALUE",
     },
@@ -39,6 +59,7 @@
     # Intentionally uses a mix of -s and _s because those normalisations are part of what is being tested.
     name = "cargo_env-vars_test",
     srcs = ["tests/cargo.rs"],
+    edition = "2018",
     deps = [":cargo_build_script_env-vars_build_script"],
 )
 
@@ -46,10 +67,12 @@
     name = "cargo-env-vars-custom-crate-name-test",
     srcs = ["tests/custom_crate_name.rs"],
     crate_name = "custom_crate_name",
+    edition = "2018",
     deps = [":cargo_build_script_env-vars_build_script"],
 )
 
 cargo_build_script(
     name = "cargo_build_script_env-vars_build_script",
     srcs = ["src/build.rs"],
+    edition = "2018",
 )
diff --git a/third_party/rules_rust/test/cargo_build_script/BUILD.bazel b/third_party/rules_rust/test/cargo_build_script/BUILD.bazel
index 34744cb..31bff6c 100644
--- a/third_party/rules_rust/test/cargo_build_script/BUILD.bazel
+++ b/third_party/rules_rust/test/cargo_build_script/BUILD.bazel
@@ -1,5 +1,6 @@
 """Tests for the cargo_build_script rule"""
 
+load("@bazel_skylib//rules:write_file.bzl", "write_file")
 load("//cargo:cargo_build_script.bzl", "cargo_build_script")
 load("//rust:defs.bzl", "rust_test")
 
@@ -8,20 +9,21 @@
     name = "tools_exec_build_rs",
     srcs = ["build.rs"],
     build_script_env = {"TOOL": "$(execpath :tool)"},
+    edition = "2018",
     # Add a flag to test that they're exposed to the build script
     rustc_flags = ["--verbose"],
     tools = [":tool"],
 )
 
-genrule(
+write_file(
     name = "tool",
-    srcs = [],
-    outs = ["tool-file"],
-    cmd = "touch $@",
+    out = "tool-file",
+    content = [""],
 )
 
 rust_test(
     name = "tools_exec",
     srcs = ["tools_exec.rs"],
+    edition = "2018",
     deps = [":tools_exec_build_rs"],
 )
diff --git a/third_party/rules_rust/test/cargo_build_script/build.rs b/third_party/rules_rust/test/cargo_build_script/build.rs
index 12d1b53..72e07bb 100644
--- a/third_party/rules_rust/test/cargo_build_script/build.rs
+++ b/third_party/rules_rust/test/cargo_build_script/build.rs
@@ -28,23 +28,17 @@
         std::env::var("TOOL").unwrap()
     );
 
-    // Assert that the CC and CXX env vars existed and were executable.
+    // Assert that the CC, CXX and LD env vars existed and were executable.
     // We don't assert what happens when they're executed (in particular, we don't check for a
     // non-zero exit code), but this asserts that it's an existing file which is executable.
-    //
-    // Unfortunately we need to shlex the path, because we add a `--sysroot=...` arg to the env var.
-    for env_var in &["CC", "CXX"] {
-        let v = std::env::var(env_var)
+    for env_var in &["CC", "CXX", "LD"] {
+        let path = std::env::var(env_var)
             .unwrap_or_else(|err| panic!("Error getting {}: {}", env_var, err));
-        let (path, args) = if let Some(index) = v.find("--sysroot") {
-            let (path, args) = v.split_at(index);
-            (path, Some(args))
-        } else {
-            (v.as_str(), None)
-        };
-        std::process::Command::new(path)
-            .args(args.into_iter())
-            .status()
-            .unwrap();
+        std::process::Command::new(path).status().unwrap();
+    }
+
+    // Assert that some env variables are set.
+    for env_var in &["CFLAGS", "CXXFLAGS", "LDFLAGS"] {
+        assert!(std::env::var(env_var).is_ok());
     }
 }
diff --git a/third_party/rules_rust/test/cc_common_link/BUILD.bazel b/third_party/rules_rust/test/cc_common_link/BUILD.bazel
new file mode 100644
index 0000000..e996993
--- /dev/null
+++ b/third_party/rules_rust/test/cc_common_link/BUILD.bazel
@@ -0,0 +1,36 @@
+load("@rules_cc//cc:defs.bzl", "cc_library")
+load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_library", "rust_test")
+
+cc_library(
+    name = "allocator_library",
+    srcs = ["allocator_library.cc"],
+    visibility = ["//visibility:public"],
+)
+
+cc_library(
+    name = "cclinkstampdep",
+    linkstamp = "cclinkstampdep.cc",
+)
+
+rust_library(
+    name = "rdep",
+    srcs = ["rdep.rs"],
+    edition = "2021",
+)
+
+rust_binary(
+    name = "bin",
+    srcs = ["bin.rs"],
+    edition = "2021",
+    deps = [
+        ":cclinkstampdep",
+        ":rdep",
+    ],
+)
+
+rust_test(
+    name = "test",
+    srcs = ["test.rs"],
+    edition = "2021",
+    deps = [":rdep"],
+)
diff --git a/third_party/rules_rust/test/cc_common_link/WORKSPACE.bazel b/third_party/rules_rust/test/cc_common_link/WORKSPACE.bazel
new file mode 100644
index 0000000..b213876
--- /dev/null
+++ b/third_party/rules_rust/test/cc_common_link/WORKSPACE.bazel
@@ -0,0 +1,15 @@
+workspace(name = "test_cc_common_link")
+
+local_repository(
+    name = "rules_rust",
+    path = "../../",
+)
+
+load("@rules_rust//rust:repositories.bzl", "rules_rust_dependencies", "rust_register_toolchains")
+
+rules_rust_dependencies()
+
+rust_register_toolchains(
+    allocator_library = "@test_cc_common_link//:allocator_library",
+    edition = "2018",
+)
diff --git a/third_party/rules_rust/test/cc_common_link/allocator_library.cc b/third_party/rules_rust/test/cc_common_link/allocator_library.cc
new file mode 100644
index 0000000..be82631
--- /dev/null
+++ b/third_party/rules_rust/test/cc_common_link/allocator_library.cc
@@ -0,0 +1,52 @@
+#include <stdint.h>
+
+// This file has some exciting magic to get Rust code linking in a cc_binary.
+// The Rust compiler generates some similar symbol aliases when it links, so we
+// have to do it manually. We mark all our symbols as weak so that linking this
+// via Rust tooling to produce a binary with a Rust main works.
+//
+// It is intended to be used in rust_toolchain.allocator_library.
+//
+// https://github.com/rust-lang/rust/blob/master/library/alloc/src/alloc.rs
+// and https://github.com/rust-lang/rust/blob/master/library/std/src/alloc.rs
+// are the best source of docs I've found on these functions and variables.
+// https://doc.rust-lang.org/std/alloc/index.html talks about how this is
+// intended to be used.
+//
+// Also note
+// https://rust-lang.github.io/unsafe-code-guidelines/layout/scalars.html for
+// the sizes of the various integer types.
+//
+// This file strongly assumes that the default allocator is used. It will
+// not work with any other allocated switched in via `#[global_allocator]`.
+
+// New feature as of https://github.com/rust-lang/rust/pull/88098.
+__attribute__((weak)) uint8_t __rust_alloc_error_handler_should_panic = 0;
+
+extern "C" uint8_t *__rdl_alloc(uintptr_t size, uintptr_t align);
+extern "C" __attribute__((weak))
+uint8_t *__rust_alloc(uintptr_t size, uintptr_t align) {
+  return __rdl_alloc(size, align);
+}
+extern "C" void __rdl_dealloc(uint8_t *ptr, uintptr_t size, uintptr_t align);
+extern "C" __attribute__((weak))
+void __rust_dealloc(uint8_t *ptr, uintptr_t size, uintptr_t align) {
+  __rdl_dealloc(ptr, size, align);
+}
+extern "C" uint8_t *__rdl_realloc(uint8_t *ptr, uintptr_t old_size, uintptr_t align,
+                       uintptr_t new_size);
+extern "C" __attribute__((weak))
+uint8_t *__rust_realloc(uint8_t *ptr, uintptr_t old_size, uintptr_t align,
+                        uintptr_t new_size) {
+  return __rdl_realloc(ptr, old_size, align, new_size);
+}
+extern "C" uint8_t *__rdl_alloc_zeroed(uintptr_t size, uintptr_t align);
+extern "C" __attribute__((weak))
+uint8_t *__rust_alloc_zeroed(uintptr_t size, uintptr_t align) {
+  return __rdl_alloc_zeroed(size, align);
+}
+extern "C" void __rdl_oom(uintptr_t size, uintptr_t align);
+extern "C" __attribute__((weak))
+void __rust_alloc_error_handler(uintptr_t size, uintptr_t align) {
+  __rdl_oom(size, align);
+}
diff --git a/third_party/rules_rust/test/cc_common_link/bin.rs b/third_party/rules_rust/test/cc_common_link/bin.rs
new file mode 100644
index 0000000..b50ff14
--- /dev/null
+++ b/third_party/rules_rust/test/cc_common_link/bin.rs
@@ -0,0 +1,10 @@
+use std::os::raw::c_int;
+
+extern "C" {
+    pub fn cclinkstampdep() -> c_int;
+}
+
+fn main() {
+    println!("bin rdep: {}", rdep::rdep());
+    println!("cclinkstampdep: {}", unsafe { cclinkstampdep() });
+}
diff --git a/third_party/rules_rust/test/cc_common_link/cclinkstampdep.cc b/third_party/rules_rust/test/cc_common_link/cclinkstampdep.cc
new file mode 100644
index 0000000..eda3948
--- /dev/null
+++ b/third_party/rules_rust/test/cc_common_link/cclinkstampdep.cc
@@ -0,0 +1,3 @@
+extern "C" int cclinkstampdep() {
+  return 121;
+}
diff --git a/third_party/rules_rust/test/cc_common_link/rdep.rs b/third_party/rules_rust/test/cc_common_link/rdep.rs
new file mode 100644
index 0000000..249953f
--- /dev/null
+++ b/third_party/rules_rust/test/cc_common_link/rdep.rs
@@ -0,0 +1,3 @@
+pub fn rdep() -> i32 {
+    43
+}
diff --git a/third_party/rules_rust/test/cc_common_link/test.rs b/third_party/rules_rust/test/cc_common_link/test.rs
new file mode 100644
index 0000000..4dfb909
--- /dev/null
+++ b/third_party/rules_rust/test/cc_common_link/test.rs
@@ -0,0 +1,4 @@
+#[test]
+fn test() {
+    assert_eq!(43, rdep::rdep());
+}
diff --git a/third_party/rules_rust/test/chained_direct_deps/BUILD.bazel b/third_party/rules_rust/test/chained_direct_deps/BUILD.bazel
index 8460d22..6f1e952 100644
--- a/third_party/rules_rust/test/chained_direct_deps/BUILD.bazel
+++ b/third_party/rules_rust/test/chained_direct_deps/BUILD.bazel
@@ -3,17 +3,20 @@
 rust_library(
     name = "mod1",
     srcs = ["mod1.rs"],
+    edition = "2018",
 )
 
 rust_library(
     name = "mod2",
     srcs = ["mod2.rs"],
+    edition = "2018",
     deps = [":mod1"],
 )
 
 rust_library(
     name = "mod3",
     srcs = ["mod3.rs"],
+    edition = "2018",
     deps = [
         ":mod1",
         ":mod2",
@@ -23,16 +26,19 @@
 rust_test(
     name = "mod1_test",
     crate = ":mod1",
+    edition = "2018",
 )
 
 rust_test(
     name = "mod2_test",
     crate = ":mod2",
+    edition = "2018",
 )
 
 rust_test(
     name = "mod3_test",
     crate = ":mod3",
+    edition = "2018",
 )
 
 rust_doc_test(
diff --git a/third_party/rules_rust/test/current_toolchain_files/BUILD.bazel b/third_party/rules_rust/test/current_toolchain_files/BUILD.bazel
index e617417..f0fbdc9 100644
--- a/third_party/rules_rust/test/current_toolchain_files/BUILD.bazel
+++ b/third_party/rules_rust/test/current_toolchain_files/BUILD.bazel
@@ -15,9 +15,9 @@
 [
     genrule(
         name = "{}_manifest_genrule".format(files),
-        srcs = ["//rust/toolchain:current_exec_{}_files".format(files)],
+        srcs = ["//rust/toolchain:current_{}_files".format(files)],
         outs = ["{}_manifest".format(files)],
-        cmd = "for file in $(rootpaths //rust/toolchain:current_exec_{}_files); do echo $$file >> $@; done".format(files),
+        cmd = "for file in $(rootpaths //rust/toolchain:current_{}_files); do echo $$file >> $@; done".format(files),
     )
     for files in _FILES
     if "--files" in _FILES[files]
@@ -29,12 +29,12 @@
         name = tool + "_test",
         srcs = ["current_exec_files_test.sh"],
         args = [
-            "$(rootpath //rust/toolchain:current_exec_{}_files)".format(tool) if "--executable" == arg else "$(rootpath {}_manifest)".format(tool),
+            "$(rootpath //rust/toolchain:current_{}_files)".format(tool) if "--executable" == arg else "$(rootpath {}_manifest)".format(tool),
             arg,
             "'{}'".format(pattern),
         ],
         data = [
-            "//rust/toolchain:current_exec_{}_files".format(tool),
+            "//rust/toolchain:current_{}_files".format(tool),
         ] + (
             ["{}_manifest".format(tool)] if "--files" == arg else []
         ),
diff --git a/third_party/rules_rust/test/dep_env/BUILD.bazel b/third_party/rules_rust/test/dep_env/BUILD.bazel
new file mode 100644
index 0000000..64addcd
--- /dev/null
+++ b/third_party/rules_rust/test/dep_env/BUILD.bazel
@@ -0,0 +1,51 @@
+"""Tests for passing configuration to cargo_build_script rules"""
+
+load("//cargo:cargo_build_script.bzl", "cargo_build_script", "cargo_dep_env")
+load("//rust:defs.bzl", "rust_binary", "rust_library")
+
+cargo_build_script(
+    name = "set_a_build",
+    srcs = ["set_a.rs"],
+    edition = "2018",
+    links = "X",
+)
+
+rust_library(
+    name = "set_a",
+    srcs = ["empty.rs"],
+    edition = "2018",
+    deps = [":set_a_build"],
+)
+
+cargo_dep_env(
+    name = "set_b",
+    src = "set_b.env",
+)
+
+cargo_build_script(
+    name = "read_a",
+    srcs = ["read_a.rs"],
+    edition = "2018",
+    deps = [":set_a"],
+)
+
+cargo_build_script(
+    name = "read_b",
+    srcs = ["read_b.rs"],
+    edition = "2018",
+    deps = [":set_b"],
+)
+
+rust_binary(
+    name = "build_read_a",
+    srcs = ["empty_main.rs"],
+    edition = "2018",
+    deps = [":read_a"],
+)
+
+rust_binary(
+    name = "build_read_b",
+    srcs = ["empty_main.rs"],
+    edition = "2018",
+    deps = [":read_b"],
+)
diff --git a/third_party/rules_rust/test/dep_env/empty.rs b/third_party/rules_rust/test/dep_env/empty.rs
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/third_party/rules_rust/test/dep_env/empty.rs
@@ -0,0 +1 @@
+
diff --git a/third_party/rules_rust/test/dep_env/empty_main.rs b/third_party/rules_rust/test/dep_env/empty_main.rs
new file mode 100644
index 0000000..f328e4d
--- /dev/null
+++ b/third_party/rules_rust/test/dep_env/empty_main.rs
@@ -0,0 +1 @@
+fn main() {}
diff --git a/third_party/rules_rust/test/dep_env/read_a.rs b/third_party/rules_rust/test/dep_env/read_a.rs
new file mode 100644
index 0000000..8775f81
--- /dev/null
+++ b/third_party/rules_rust/test/dep_env/read_a.rs
@@ -0,0 +1,5 @@
+use std::env::var;
+
+fn main() {
+    assert_eq!(var("DEP_X_A").unwrap(), "a_value");
+}
diff --git a/third_party/rules_rust/test/dep_env/read_b.rs b/third_party/rules_rust/test/dep_env/read_b.rs
new file mode 100644
index 0000000..b63db42
--- /dev/null
+++ b/third_party/rules_rust/test/dep_env/read_b.rs
@@ -0,0 +1,5 @@
+use std::env::var;
+
+fn main() {
+    assert_eq!(var("DEP_Y_B").unwrap(), "b_value");
+}
diff --git a/third_party/rules_rust/test/dep_env/set_a.rs b/third_party/rules_rust/test/dep_env/set_a.rs
new file mode 100644
index 0000000..7e8082a
--- /dev/null
+++ b/third_party/rules_rust/test/dep_env/set_a.rs
@@ -0,0 +1,3 @@
+fn main() {
+    println!("cargo:A=a_value");
+}
diff --git a/third_party/rules_rust/test/dep_env/set_b.env b/third_party/rules_rust/test/dep_env/set_b.env
new file mode 100644
index 0000000..4657007
--- /dev/null
+++ b/third_party/rules_rust/test/dep_env/set_b.env
@@ -0,0 +1 @@
+DEP_Y_B=b_value
diff --git a/third_party/rules_rust/test/deps.bzl b/third_party/rules_rust/test/deps.bzl
index 58c09bc..96223dd 100644
--- a/third_party/rules_rust/test/deps.bzl
+++ b/third_party/rules_rust/test/deps.bzl
@@ -11,6 +11,13 @@
     name = "libc",
     srcs = glob(["src/**/*.rs"]),
     edition = "2015",
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
     visibility = ["//visibility:public"],
 )
 """
diff --git a/third_party/rules_rust/test/extra_exec_rustc_flags/BUILD.bazel b/third_party/rules_rust/test/extra_exec_rustc_flags/BUILD.bazel
index a1b401e..7a7b6ef 100644
--- a/third_party/rules_rust/test/extra_exec_rustc_flags/BUILD.bazel
+++ b/third_party/rules_rust/test/extra_exec_rustc_flags/BUILD.bazel
@@ -14,21 +14,36 @@
 rust_library(
     name = "lib_do_not_build_directly",
     srcs = ["lib.rs"],
+    edition = "2018",
     tags = ["manual"],
 )
 
 with_extra_exec_rustc_flags_cfg(
     name = "lib_with_exec_flags_do_not_build_directly",
     srcs = ["lib_do_not_build_directly"],
+    extra_exec_rustc_flag = [],
     extra_exec_rustc_flags = ["--cfg=bazel_exec"],
     tags = ["manual"],
 )
 
+with_extra_exec_rustc_flags_cfg(
+    name = "lib_with_singular_exec_flags_do_not_build_directly",
+    srcs = ["lib_do_not_build_directly"],
+    extra_exec_rustc_flag = ["--cfg=bazel_exec"],
+    extra_exec_rustc_flags = [],
+    tags = ["manual"],
+)
+
 with_exec_cfg(
     name = "lib",
     srcs = ["lib_with_exec_flags_do_not_build_directly"],
 )
 
+with_exec_cfg(
+    name = "lib_singular",
+    srcs = ["lib_with_singular_exec_flags_do_not_build_directly"],
+)
+
 # Checks that extra_exec_rustc_flags are not passed in non-exec configurations.
 # lib_no_exec.rs is a sample source file that fails to build if
 # `--cfg=bazel_exec` is present. The targets below are built in non-exec configurations,
@@ -36,19 +51,30 @@
 rust_library(
     name = "lib_no_exec",
     srcs = ["lib_no_exec.rs"],
+    edition = "2018",
 )
 
 with_extra_exec_rustc_flags_cfg(
     name = "lib_no_exec_with_extra_build_flags",
     srcs = ["lib_no_exec"],
+    extra_exec_rustc_flag = [],
     extra_exec_rustc_flags = ["--cfg=bazel_exec"],
 )
 
+with_extra_exec_rustc_flags_cfg(
+    name = "lib_no_exec_with_singular_extra_build_flags",
+    srcs = ["lib_no_exec"],
+    extra_exec_rustc_flag = ["--cfg=bazel_exec"],
+    extra_exec_rustc_flags = [],
+)
+
 build_test(
     name = "lib_build",
     targets = [
         ":lib",
+        ":lib_singular",
         ":lib_no_exec",
         ":lib_no_exec_with_extra_build_flags",
+        ":lib_no_exec_with_singular_extra_build_flags",
     ],
 )
diff --git a/third_party/rules_rust/test/extra_exec_rustc_flags/defs.bzl b/third_party/rules_rust/test/extra_exec_rustc_flags/defs.bzl
index 790cdc5..e12998d 100644
--- a/third_party/rules_rust/test/extra_exec_rustc_flags/defs.bzl
+++ b/third_party/rules_rust/test/extra_exec_rustc_flags/defs.bzl
@@ -2,13 +2,14 @@
 
 def _extra_exec_rustc_flags_transition_impl(_settings, attr):
     return {
+        "//:extra_exec_rustc_flag": attr.extra_exec_rustc_flag,
         "//:extra_exec_rustc_flags": attr.extra_exec_rustc_flags,
     }
 
 _extra_exec_rustc_flags_transition = transition(
     implementation = _extra_exec_rustc_flags_transition_impl,
     inputs = [],
-    outputs = ["//:extra_exec_rustc_flags"],
+    outputs = ["//:extra_exec_rustc_flags", "//:extra_exec_rustc_flag"],
 )
 
 def _with_extra_exec_rustc_flags_cfg_impl(ctx):
@@ -17,6 +18,9 @@
 with_extra_exec_rustc_flags_cfg = rule(
     implementation = _with_extra_exec_rustc_flags_cfg_impl,
     attrs = {
+        "extra_exec_rustc_flag": attr.string_list(
+            mandatory = True,
+        ),
         "extra_exec_rustc_flags": attr.string_list(
             mandatory = True,
         ),
diff --git a/third_party/rules_rust/test/generated_inputs/BUILD.bazel b/third_party/rules_rust/test/generated_inputs/BUILD.bazel
new file mode 100644
index 0000000..2820282
--- /dev/null
+++ b/third_party/rules_rust/test/generated_inputs/BUILD.bazel
@@ -0,0 +1,133 @@
+load("@bazel_skylib//rules:common_settings.bzl", "bool_flag")
+load("@bazel_skylib//rules:write_file.bzl", "write_file")
+load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_library", "rust_test")
+load(":input_from_different_cfg.bzl", "input_from_different_cfg")
+
+write_file(
+    name = "generate_src",
+    out = "src.rs",
+    content = """
+#[cfg(not(generated_file_as_root))]
+pub fn forty_two() -> i32 { 42 }
+
+#[cfg(generated_file_as_root)]
+mod lib_for_src;
+
+#[cfg(generated_file_as_root)]
+pub fn get_forty_two_as_string() -> String {
+    format!("{}", lib_for_src::forty_two())
+}
+""".splitlines(),
+    newline = "unix",
+)
+
+rust_library(
+    name = "use_generated_src",
+    srcs = [
+        "lib.rs",
+        ":src.rs",
+    ],
+    edition = "2018",
+    tags = ["norustfmt"],
+)
+
+rust_library(
+    name = "use_generated_src_with_crate_root_defined",
+    srcs = [
+        "lib.rs",
+        ":src.rs",
+    ],
+    crate_root = "lib.rs",
+    edition = "2018",
+    tags = ["norustfmt"],
+)
+
+rust_library(
+    name = "use_generated_src_as_crate_root",
+    srcs = [
+        "lib.rs",
+        "lib_for_src.rs",
+        ":src.rs",
+    ],
+    crate_root = ":src.rs",
+    edition = "2018",
+    rustc_flags = ["--cfg=generated_file_as_root"],
+    tags = ["norustfmt"],
+)
+
+# When no lib.rs, main.rs file exists, we try to use the file that carries
+# the target's name as a crate_root.
+rust_library(
+    name = "src",
+    srcs = [
+        "lib_for_src.rs",
+        ":src.rs",
+    ],
+    edition = "2018",
+    rustc_flags = ["--cfg=generated_file_as_root"],
+    tags = ["norustfmt"],
+)
+
+rust_test(
+    name = "generated_src_test",
+    crate = ":use_generated_src_with_crate_root_defined",
+    edition = "2018",
+    tags = ["norustfmt"],
+)
+
+rust_binary(
+    name = "print_42",
+    srcs = [
+        "main.rs",
+        ":src.rs",
+    ],
+    edition = "2018",
+    tags = ["norustfmt"],
+)
+
+input_from_different_cfg(
+    name = "generated_in_different_cfg",
+)
+
+filegroup(
+    name = "input_from_different_cfg",
+    srcs = [":generated_in_different_cfg"],
+    output_group = "generated_file",
+)
+
+rust_library(
+    name = "generated_src_in_different_cfg_as_root",
+    srcs = [":input_from_different_cfg"],
+    edition = "2018",
+    tags = ["norustfmt"],
+)
+
+rust_test(
+    name = "generated_src_in_different_cfg_as_root_test",
+    crate = "generated_src_in_different_cfg_as_root",
+    edition = "2018",
+    tags = ["norustfmt"],
+)
+
+rust_library(
+    name = "generated_src_in_different_cfg",
+    srcs = [
+        "root.rs",
+        ":input_from_different_cfg",
+    ],
+    crate_root = "root.rs",
+    edition = "2018",
+    tags = ["norustfmt"],
+)
+
+rust_test(
+    name = "generated_src_in_different_cfg_test",
+    crate = "generated_src_in_different_cfg",
+    edition = "2018",
+    tags = ["norustfmt"],
+)
+
+bool_flag(
+    name = "change_cfg",
+    build_setting_default = False,
+)
diff --git a/third_party/rules_rust/test/generated_inputs/input_from_different_cfg.bzl b/third_party/rules_rust/test/generated_inputs/input_from_different_cfg.bzl
new file mode 100644
index 0000000..5fb2a68
--- /dev/null
+++ b/third_party/rules_rust/test/generated_inputs/input_from_different_cfg.bzl
@@ -0,0 +1,42 @@
+"""A custom rule that generates a .rs file in a different configuration."""
+
+def _change_cfg_impl(_settings, _attr):
+    return {"//test/generated_inputs:change_cfg": True}
+
+change_cfg_transition = transition(
+    implementation = _change_cfg_impl,
+    inputs = [],
+    outputs = ["//test/generated_inputs:change_cfg"],
+)
+
+def _input_from_different_cfg_impl(ctx):
+    rs_file = ctx.actions.declare_file(ctx.label.name + ".rs")
+
+    ctx.actions.write(
+        output = rs_file,
+        content = """
+pub fn generated_fn() -> String {
+    "Generated".to_owned()
+}
+
+#[cfg(test)]
+mod tests {
+    #[test]
+    fn test_generated() {
+        assert_eq!(super::generated_fn(), "Generated".to_owned());
+    }
+}
+""",
+    )
+
+    return OutputGroupInfo(generated_file = depset([rs_file]))
+
+input_from_different_cfg = rule(
+    implementation = _input_from_different_cfg_impl,
+    attrs = {
+        "_allowlist_function_transition": attr.label(
+            default = Label("@bazel_tools//tools/allowlists/function_transition_allowlist"),
+        ),
+    },
+    cfg = change_cfg_transition,
+)
diff --git a/third_party/rules_rust/test/generated_inputs/lib.rs b/third_party/rules_rust/test/generated_inputs/lib.rs
new file mode 100644
index 0000000..5982f9d
--- /dev/null
+++ b/third_party/rules_rust/test/generated_inputs/lib.rs
@@ -0,0 +1,18 @@
+mod src;
+
+pub fn forty_two_as_string() -> String {
+    format!("{}", src::forty_two())
+}
+
+#[cfg(test)]
+mod test {
+    #[test]
+    fn test_forty_two() {
+        assert_eq!(super::src::forty_two(), 42);
+    }
+
+    #[test]
+    fn test_forty_two_as_string() {
+        assert_eq!(super::forty_two_as_string(), "42");
+    }
+}
diff --git a/third_party/rules_rust/test/generated_inputs/lib_for_src.rs b/third_party/rules_rust/test/generated_inputs/lib_for_src.rs
new file mode 100644
index 0000000..6d2a037
--- /dev/null
+++ b/third_party/rules_rust/test/generated_inputs/lib_for_src.rs
@@ -0,0 +1,3 @@
+pub fn forty_two() -> i32 {
+    42
+}
diff --git a/third_party/rules_rust/test/generated_inputs/main.rs b/third_party/rules_rust/test/generated_inputs/main.rs
new file mode 100644
index 0000000..5fa52c3
--- /dev/null
+++ b/third_party/rules_rust/test/generated_inputs/main.rs
@@ -0,0 +1,4 @@
+mod src;
+fn main() {
+    println!("{}", &src::forty_two());
+}
diff --git a/third_party/rules_rust/test/generated_inputs/root.rs b/third_party/rules_rust/test/generated_inputs/root.rs
new file mode 100644
index 0000000..3c59428
--- /dev/null
+++ b/third_party/rules_rust/test/generated_inputs/root.rs
@@ -0,0 +1,13 @@
+mod generated_in_different_cfg;
+
+pub fn use_generated_fn() -> String {
+    "Using generated function: ".to_owned() + &generated_in_different_cfg::generated_fn() 
+}
+
+#[cfg(test)]
+mod tests {
+    #[test]
+    fn test_use_generated_fn() {
+        assert_eq!(super::use_generated_fn(), "Using generated function: Generated".to_owned());
+    }
+}
diff --git a/third_party/rules_rust/test/inline_test_with_deps/dep/BUILD.bazel b/third_party/rules_rust/test/inline_test_with_deps/dep/BUILD.bazel
index 3435e68..8064c26 100644
--- a/third_party/rules_rust/test/inline_test_with_deps/dep/BUILD.bazel
+++ b/third_party/rules_rust/test/inline_test_with_deps/dep/BUILD.bazel
@@ -5,4 +5,5 @@
 rust_library(
     name = "dep",
     srcs = ["src/lib.rs"],
+    edition = "2018",
 )
diff --git a/third_party/rules_rust/test/inline_test_with_deps/test/BUILD.bazel b/third_party/rules_rust/test/inline_test_with_deps/test/BUILD.bazel
index 372199c..20754c6 100644
--- a/third_party/rules_rust/test/inline_test_with_deps/test/BUILD.bazel
+++ b/third_party/rules_rust/test/inline_test_with_deps/test/BUILD.bazel
@@ -11,5 +11,6 @@
 rust_test(
     name = "inline_test",
     crate = ":inline",
+    edition = "2018",
     deps = ["//test/inline_test_with_deps/dep"],
 )
diff --git a/third_party/rules_rust/test/linker_inputs_propagation/BUILD.bazel b/third_party/rules_rust/test/linker_inputs_propagation/BUILD.bazel
new file mode 100644
index 0000000..5ff0945
--- /dev/null
+++ b/third_party/rules_rust/test/linker_inputs_propagation/BUILD.bazel
@@ -0,0 +1,155 @@
+load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_import", "cc_library", "cc_test")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+    "rust_shared_library",
+    "rust_static_library",
+)
+
+package(default_visibility = ["//test/unit/linker_inputs_propagation:__pkg__"])
+
+rust_library(
+    name = "foo",
+    srcs = ["foo.rs"],
+    edition = "2018",
+)
+
+cc_library(
+    name = "foo_shared",
+    srcs = [
+        "foo_shared.cc",
+    ],
+    hdrs = ["foo_shared.h"],
+    target_compatible_with = [
+        "@platforms//os:linux",
+    ],
+)
+
+cc_binary(
+    name = "foo_shared.dll",
+    srcs = [
+        "foo_shared.cc",
+        "foo_shared.h",
+    ],
+    features = ["windows_export_all_symbols"],
+    linkshared = True,
+    target_compatible_with = [
+        "@platforms//os:windows",
+    ],
+)
+
+filegroup(
+    name = "shared_library_file",
+    srcs = [":foo_shared"],
+    output_group = "dynamic_library",
+)
+
+filegroup(
+    name = "interface_library_file",
+    srcs = [":foo_shared.dll"],
+    output_group = "interface_library",
+)
+
+filegroup(
+    name = "empty",
+    srcs = ["empty.so"],
+)
+
+cc_import(
+    name = "import_foo_shared",
+    hdrs = ["foo_shared.h"],
+    interface_library = select({
+        "@platforms//os:linux": "shared_library_file",
+        "@platforms//os:windows": "interface_library_file",
+        "//conditions:default": ":empty",
+    }),
+    shared_library = select({
+        "@platforms//os:linux": "shared_library_file",
+        "@platforms//os:windows": "foo_shared.dll",
+        "//conditions:default": ":empty",
+    }),
+)
+
+rust_static_library(
+    name = "staticlib_uses_foo",
+    srcs = ["bar_uses_foo.rs"],
+    edition = "2018",
+    target_compatible_with = [
+        "@platforms//os:linux",
+        "@platforms//os:windows",
+    ],
+    deps = [":foo"],
+)
+
+rust_shared_library(
+    name = "sharedlib_uses_foo",
+    srcs = ["bar_uses_foo.rs"],
+    edition = "2018",
+    target_compatible_with = [
+        "@platforms//os:linux",
+        "@platforms//os:windows",
+    ],
+    deps = [":foo"],
+)
+
+rust_static_library(
+    name = "staticlib_uses_shared_foo",
+    srcs = ["bar_uses_shared_foo.rs"],
+    edition = "2018",
+    target_compatible_with = [
+        "@platforms//os:linux",
+        "@platforms//os:windows",
+    ],
+    deps = [":import_foo_shared"],
+)
+
+rust_static_library(
+    name = "sharedlib_uses_shared_foo",
+    srcs = ["bar_uses_shared_foo.rs"],
+    edition = "2018",
+    target_compatible_with = [
+        "@platforms//os:linux",
+        "@platforms//os:windows",
+    ],
+    deps = [":import_foo_shared"],
+)
+
+cc_test(
+    name = "depends_on_foo_via_staticlib",
+    srcs = ["baz.cc"],
+    target_compatible_with = [
+        "@platforms//os:linux",
+        "@platforms//os:windows",
+    ],
+    deps = [":staticlib_uses_foo"],
+)
+
+cc_test(
+    name = "depends_on_foo_via_sharedlib",
+    srcs = ["baz.cc"],
+    target_compatible_with = [
+        "@platforms//os:linux",
+        "@platforms//os:windows",
+    ],
+    deps = [":sharedlib_uses_foo"],
+)
+
+cc_test(
+    name = "depends_on_shared_foo_via_sharedlib",
+    srcs = ["baz.cc"],
+    target_compatible_with = [
+        "@platforms//os:linux",
+        "@platforms//os:windows",
+    ],
+    deps = [":sharedlib_uses_shared_foo"],
+)
+
+cc_test(
+    name = "depends_on_shared_foo_via_staticlib",
+    srcs = ["baz.cc"],
+    target_compatible_with = [
+        "@platforms//os:linux",
+        "@platforms//os:windows",
+    ],
+    deps = [":staticlib_uses_shared_foo"],
+)
diff --git a/third_party/rules_rust/test/linker_inputs_propagation/bar_uses_foo.rs b/third_party/rules_rust/test/linker_inputs_propagation/bar_uses_foo.rs
new file mode 100644
index 0000000..3dc7995
--- /dev/null
+++ b/third_party/rules_rust/test/linker_inputs_propagation/bar_uses_foo.rs
@@ -0,0 +1,9 @@
+/** Safety doc.
+
+  # Safety
+
+*/
+#[no_mangle]
+pub unsafe extern "C" fn double_foo() -> i32 {
+    2 * foo::foo()
+}
diff --git a/third_party/rules_rust/test/linker_inputs_propagation/bar_uses_shared_foo.rs b/third_party/rules_rust/test/linker_inputs_propagation/bar_uses_shared_foo.rs
new file mode 100644
index 0000000..75c232d
--- /dev/null
+++ b/third_party/rules_rust/test/linker_inputs_propagation/bar_uses_shared_foo.rs
@@ -0,0 +1,13 @@
+extern "C" {
+    pub fn foo() -> i32;
+}
+
+/** Safety doc.
+
+  # Safety
+
+*/
+#[no_mangle]
+pub unsafe extern "C" fn double_foo() -> i32 {
+    2 * foo()
+}
diff --git a/third_party/rules_rust/test/linker_inputs_propagation/baz.cc b/third_party/rules_rust/test/linker_inputs_propagation/baz.cc
new file mode 100644
index 0000000..a46b501
--- /dev/null
+++ b/third_party/rules_rust/test/linker_inputs_propagation/baz.cc
@@ -0,0 +1,10 @@
+#include <assert.h>
+#include <inttypes.h>
+#include <stdlib.h>
+
+extern "C" int32_t double_foo();
+
+int main(int argc, char** argv) {
+  assert(double_foo() == 84);
+  return EXIT_SUCCESS;
+}
diff --git a/third_party/rules_rust/test/linker_inputs_propagation/empty.so b/third_party/rules_rust/test/linker_inputs_propagation/empty.so
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/third_party/rules_rust/test/linker_inputs_propagation/empty.so
@@ -0,0 +1 @@
+
diff --git a/third_party/rules_rust/test/linker_inputs_propagation/foo.rs b/third_party/rules_rust/test/linker_inputs_propagation/foo.rs
new file mode 100644
index 0000000..185ce22
--- /dev/null
+++ b/third_party/rules_rust/test/linker_inputs_propagation/foo.rs
@@ -0,0 +1,3 @@
+pub fn foo() -> i32 {
+    42
+}
diff --git a/third_party/rules_rust/test/linker_inputs_propagation/foo_shared.cc b/third_party/rules_rust/test/linker_inputs_propagation/foo_shared.cc
new file mode 100644
index 0000000..f569afb
--- /dev/null
+++ b/third_party/rules_rust/test/linker_inputs_propagation/foo_shared.cc
@@ -0,0 +1,5 @@
+#include <stdint.h>
+
+extern "C" {
+int32_t foo() { return 42; }
+}
diff --git a/third_party/rules_rust/test/linker_inputs_propagation/foo_shared.h b/third_party/rules_rust/test/linker_inputs_propagation/foo_shared.h
new file mode 100644
index 0000000..40acc2d
--- /dev/null
+++ b/third_party/rules_rust/test/linker_inputs_propagation/foo_shared.h
@@ -0,0 +1,5 @@
+#include <stdint.h>
+
+extern "C" {
+int32_t foo();
+}
diff --git a/third_party/rules_rust/test/load_arbitrary_tool/load_arbitrary_tool_test.bzl b/third_party/rules_rust/test/load_arbitrary_tool/load_arbitrary_tool_test.bzl
index 8906329..495b6bb 100644
--- a/third_party/rules_rust/test/load_arbitrary_tool/load_arbitrary_tool_test.bzl
+++ b/third_party/rules_rust/test/load_arbitrary_tool/load_arbitrary_tool_test.bzl
@@ -1,16 +1,11 @@
 # buildifier: disable=module-docstring
 load("//rust:repositories.bzl", "load_arbitrary_tool")
+load("//rust/platform:triple.bzl", "get_host_triple")
+load("//rust/platform:triple_mappings.bzl", "system_to_binary_ext")
 
 def _load_arbitrary_tool_test_impl(repository_ctx):
-    if "mac" in repository_ctx.os.name:
-        target_triple = "x86_64-apple-darwin"
-        cargo_bin = "bin/cargo"
-    elif "windows" in repository_ctx.os.name:
-        target_triple = "x86_64-pc-windows-msvc"
-        cargo_bin = "bin/cargo.exe"
-    else:
-        target_triple = "x86_64-unknown-linux-gnu"
-        cargo_bin = "bin/cargo"
+    host_triple = get_host_triple(repository_ctx)
+    cargo_bin = "bin/cargo" + system_to_binary_ext(host_triple.system)
 
     # Download cargo
     load_arbitrary_tool(
@@ -19,7 +14,7 @@
         tool_subdirectories = ["cargo"],
         version = "1.53.0",
         iso_date = None,
-        target_triple = target_triple,
+        target_triple = host_triple.str,
     )
 
     repo_path = repository_ctx.path(".")
diff --git a/third_party/rules_rust/test/native_deps/BUILD.bazel b/third_party/rules_rust/test/native_deps/BUILD.bazel
new file mode 100644
index 0000000..5c5d57a
--- /dev/null
+++ b/third_party/rules_rust/test/native_deps/BUILD.bazel
@@ -0,0 +1,26 @@
+load("@rules_cc//cc:defs.bzl", "cc_library")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+    "rust_test",
+)
+
+rust_library(
+    name = "transitive",
+    srcs = ["transitive.rs"],
+    edition = "2018",
+)
+
+cc_library(
+    name = "direct",
+    srcs = ["direct.cc"],
+    hdrs = ["direct.h"],
+    deps = ["transitive"],
+)
+
+rust_test(
+    name = "main",
+    srcs = ["main.rs"],
+    edition = "2018",
+    deps = ["direct"],
+)
diff --git a/third_party/rules_rust/test/native_deps/direct.cc b/third_party/rules_rust/test/native_deps/direct.cc
new file mode 100644
index 0000000..a809ae8
--- /dev/null
+++ b/third_party/rules_rust/test/native_deps/direct.cc
@@ -0,0 +1,6 @@
+#include "direct.h"
+
+RustStruct MakeRustStruct() {
+  RustStruct result;
+  return result;
+}
diff --git a/third_party/rules_rust/test/native_deps/direct.h b/third_party/rules_rust/test/native_deps/direct.h
new file mode 100644
index 0000000..f4f4b92
--- /dev/null
+++ b/third_party/rules_rust/test/native_deps/direct.h
@@ -0,0 +1,4 @@
+struct RustStruct{};
+
+extern "C" RustStruct MakeRustStruct();
+
diff --git a/third_party/rules_rust/test/native_deps/main.rs b/third_party/rules_rust/test/native_deps/main.rs
new file mode 100644
index 0000000..103d374
--- /dev/null
+++ b/third_party/rules_rust/test/native_deps/main.rs
@@ -0,0 +1,3 @@
+fn main() {
+    println!("Done!");
+}
diff --git a/third_party/rules_rust/test/native_deps/transitive.rs b/third_party/rules_rust/test/native_deps/transitive.rs
new file mode 100644
index 0000000..987bc30
--- /dev/null
+++ b/third_party/rules_rust/test/native_deps/transitive.rs
@@ -0,0 +1,2 @@
+#[repr(C)]
+pub struct RustStruct {}
diff --git a/third_party/rules_rust/proto/raze/remote/BUILD.bazel b/third_party/rules_rust/test/native_deps/user.rs
similarity index 100%
rename from third_party/rules_rust/proto/raze/remote/BUILD.bazel
rename to third_party/rules_rust/test/native_deps/user.rs
diff --git a/third_party/rules_rust/test/out_dir_in_tests/BUILD.bazel b/third_party/rules_rust/test/out_dir_in_tests/BUILD.bazel
index 1ee4ce9..c3d8d99 100644
--- a/third_party/rules_rust/test/out_dir_in_tests/BUILD.bazel
+++ b/third_party/rules_rust/test/out_dir_in_tests/BUILD.bazel
@@ -4,6 +4,7 @@
 cargo_build_script(
     name = "build_script",
     srcs = ["build.rs"],
+    edition = "2018",
 )
 
 rust_library(
@@ -11,12 +12,14 @@
     srcs = [
         "src/lib.rs",
     ],
+    edition = "2018",
     deps = [":build_script"],
 )
 
 rust_test(
     name = "demo_lib_test",
     crate = ":demo_lib",
+    edition = "2018",
 )
 
 rust_test_suite(
@@ -26,4 +29,5 @@
     # to the underlying rust_test rules. This will make OUT_DIR
     # available when compiling integration tests.
     crate = ":demo_lib",
+    edition = "2018",
 )
diff --git a/third_party/rules_rust/test/process_wrapper/BUILD.bazel b/third_party/rules_rust/test/process_wrapper/BUILD.bazel
index a9f2189..dcce878 100644
--- a/third_party/rules_rust/test/process_wrapper/BUILD.bazel
+++ b/third_party/rules_rust/test/process_wrapper/BUILD.bazel
@@ -1,6 +1,7 @@
 load("@bazel_skylib//rules:build_test.bzl", "build_test")
 load("@bazel_skylib//rules:diff_test.bzl", "diff_test")
 load("@rules_cc//cc:defs.bzl", "cc_binary")
+load("//rust:defs.bzl", "rust_binary", "rust_test")
 load("//test/process_wrapper:process_wrapper_tester.bzl", "process_wrapper_tester")
 
 cc_binary(
@@ -148,3 +149,20 @@
         ":process_wrapper_combined",
     ],
 )
+
+rust_binary(
+    name = "fake_rustc",
+    srcs = ["fake_rustc.rs"],
+    edition = "2018",
+)
+
+rust_test(
+    name = "rustc_quit_on_rmeta",
+    srcs = ["rustc_quit_on_rmeta.rs"],
+    data = [
+        ":fake_rustc",
+        "//util/process_wrapper",
+    ],
+    edition = "2018",
+    deps = ["//tools/runfiles"],
+)
diff --git a/third_party/rules_rust/test/process_wrapper/fake_rustc.rs b/third_party/rules_rust/test/process_wrapper/fake_rustc.rs
new file mode 100755
index 0000000..d7937c6
--- /dev/null
+++ b/third_party/rules_rust/test/process_wrapper/fake_rustc.rs
@@ -0,0 +1,8 @@
+//! This binary mocks the output of rustc when run with `--error-format=json` and `--json=artifacts`.
+
+fn main() {
+    eprintln!(r#"{{"rendered": "should be\nin output"}}"#);
+    eprintln!(r#"{{"emit": "metadata"}}"#);
+    std::thread::sleep(std::time::Duration::from_secs(1));
+    eprintln!(r#"{{"rendered": "should not be in output"}}"#);
+}
diff --git a/third_party/rules_rust/test/process_wrapper/process_wrapper_tester.bzl b/third_party/rules_rust/test/process_wrapper/process_wrapper_tester.bzl
index 9a102a8..cf7e519 100644
--- a/third_party/rules_rust/test/process_wrapper/process_wrapper_tester.bzl
+++ b/third_party/rules_rust/test/process_wrapper/process_wrapper_tester.bzl
@@ -83,7 +83,7 @@
             cfg = "exec",
         ),
         "_process_wrapper_tester": attr.label(
-            default = "//test/process_wrapper:process_wrapper_tester",
+            default = Label("//test/process_wrapper:process_wrapper_tester"),
             executable = True,
             cfg = "exec",
         ),
diff --git a/third_party/rules_rust/test/process_wrapper/process_wrapper_tester.cc b/third_party/rules_rust/test/process_wrapper/process_wrapper_tester.cc
index 7cf1c02..ab4e96e 100644
--- a/third_party/rules_rust/test/process_wrapper/process_wrapper_tester.cc
+++ b/third_party/rules_rust/test/process_wrapper/process_wrapper_tester.cc
@@ -53,7 +53,8 @@
     if (env.rfind("CURRENT_DIR", 0) == 0) {
       found = true;
       if (env.find("${pwd}") != std::string::npos) {
-        std::cerr << "error: environment variable ${pwd} substitution failed.\n";
+        std::cerr
+            << "error: environment variable ${pwd} substitution failed.\n";
         std::exit(1);
       }
       break;
@@ -131,9 +132,7 @@
   }
 }
 
-void test_stderr() {
-  std::cerr << "This is the stderr output";
-}
+void test_stderr() { std::cerr << "This is the stderr output"; }
 
 int main(int argc, const char* argv[], const char* envp[]) {
   if (argc < 4) {
diff --git a/third_party/rules_rust/test/process_wrapper/rustc_quit_on_rmeta.rs b/third_party/rules_rust/test/process_wrapper/rustc_quit_on_rmeta.rs
new file mode 100644
index 0000000..5559508
--- /dev/null
+++ b/third_party/rules_rust/test/process_wrapper/rustc_quit_on_rmeta.rs
@@ -0,0 +1,99 @@
+#[cfg(test)]
+mod test {
+    use std::path::PathBuf;
+    use std::process::Command;
+    use std::str;
+
+    use runfiles::Runfiles;
+
+    /// fake_rustc runs the fake_rustc binary under process_wrapper with the specified
+    /// process wrapper arguments. No arguments are passed to fake_rustc itself.
+    fn fake_rustc(process_wrapper_args: &[&'static str]) -> String {
+        let r = Runfiles::create().unwrap();
+        let fake_rustc = r.rlocation(
+            &[
+                "rules_rust",
+                "test",
+                "process_wrapper",
+                if cfg!(unix) {
+                    "fake_rustc"
+                } else {
+                    "fake_rustc.exe"
+                },
+            ]
+            .iter()
+            .collect::<PathBuf>(),
+        );
+
+        let process_wrapper = r.rlocation(
+            &[
+                "rules_rust",
+                "util",
+                "process_wrapper",
+                if cfg!(unix) {
+                    "process_wrapper"
+                } else {
+                    "process_wrapper.exe"
+                },
+            ]
+            .iter()
+            .collect::<PathBuf>(),
+        );
+
+        let output = Command::new(process_wrapper)
+            .args(process_wrapper_args)
+            .arg("--")
+            .arg(fake_rustc)
+            .output()
+            .unwrap();
+
+        assert!(
+            output.status.success(),
+            "unable to run process_wrapper: {} {}",
+            str::from_utf8(&output.stdout).unwrap(),
+            str::from_utf8(&output.stderr).unwrap(),
+        );
+
+        String::from_utf8(output.stderr).unwrap()
+    }
+
+    #[test]
+    fn test_rustc_quit_on_rmeta_quits() {
+        let out_content = fake_rustc(&[
+            "--rustc-quit-on-rmeta",
+            "true",
+            "--rustc-output-format",
+            "rendered",
+        ]);
+        assert!(
+            !out_content.contains("should not be in output"),
+            "output should not contain 'should not be in output' but did: {}",
+            out_content
+        );
+    }
+
+    #[test]
+    fn test_rustc_quit_on_rmeta_output_json() {
+        let json_content = fake_rustc(&[
+            "--rustc-quit-on-rmeta",
+            "true",
+            "--rustc-output-format",
+            "json",
+        ]);
+        assert_eq!(
+            json_content,
+            concat!(r#"{"rendered": "should be\nin output"}"#, "\n")
+        );
+    }
+
+    #[test]
+    fn test_rustc_quit_on_rmeta_output_rendered() {
+        let rendered_content = fake_rustc(&[
+            "--rustc-quit-on-rmeta",
+            "true",
+            "--rustc-output-format",
+            "rendered",
+        ]);
+        assert_eq!(rendered_content, "should be\nin output");
+    }
+}
diff --git a/third_party/rules_rust/test/renamed_deps/BUILD.bazel b/third_party/rules_rust/test/renamed_deps/BUILD.bazel
index 9209888..e7dc187 100644
--- a/third_party/rules_rust/test/renamed_deps/BUILD.bazel
+++ b/third_party/rules_rust/test/renamed_deps/BUILD.bazel
@@ -3,11 +3,13 @@
 rust_library(
     name = "mod1",
     srcs = ["mod1.rs"],
+    edition = "2018",
 )
 
 rust_library(
     name = "mod2",
     srcs = ["mod2.rs"],
+    edition = "2018",
     deps = [":mod1"],
 )
 
@@ -18,6 +20,7 @@
         ":mod1": "alias_a",
         ":mod2": "alias_b",
     },
+    edition = "2018",
     deps = [
         ":mod1",
         ":mod2",
@@ -27,11 +30,13 @@
 rust_test(
     name = "mod1_test",
     crate = ":mod1",
+    edition = "2018",
 )
 
 rust_test(
     name = "mod2_test",
     crate = ":mod2",
+    edition = "2018",
 )
 
 rust_test(
@@ -41,4 +46,5 @@
         ":mod2": "alias_b",
     },
     crate = ":mod3",
+    edition = "2018",
 )
diff --git a/third_party/rules_rust/test/rust/BUILD.bazel b/third_party/rules_rust/test/rust/BUILD.bazel
index ddb0110..1977aed 100644
--- a/third_party/rules_rust/test/rust/BUILD.bazel
+++ b/third_party/rules_rust/test/rust/BUILD.bazel
@@ -1,4 +1,4 @@
-load("//rust:defs.bzl", "rust_binary", "rust_library")
+load("//rust:defs.bzl", "rust_binary", "rust_library", "rust_test")
 
 package(default_visibility = ["//visibility:public"])
 
@@ -8,10 +8,17 @@
         "src/greeter.rs",
         "src/lib.rs",
     ],
+    edition = "2018",
 )
 
 rust_binary(
     name = "hello_world",
     srcs = ["src/main.rs"],
+    edition = "2018",
     deps = [":hello_lib"],
 )
+
+rust_test(
+    name = "hello_lib_test",
+    crate = ":hello_lib",
+)
diff --git a/third_party/rules_rust/test/rust/src/lib.rs b/third_party/rules_rust/test/rust/src/lib.rs
index 9dc6089..bee47c9 100644
--- a/third_party/rules_rust/test/rust/src/lib.rs
+++ b/third_party/rules_rust/test/rust/src/lib.rs
@@ -12,4 +12,5 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#![crate_name = "hello_lib"]
 pub mod greeter;
diff --git a/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/BUILD.bazel b/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/BUILD.bazel
index 2a79bbe..899fa0e 100644
--- a/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/BUILD.bazel
+++ b/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/BUILD.bazel
@@ -1,25 +1,70 @@
 load("@rules_rust//rust:defs.bzl", "rust_library", "rust_proc_macro", "rust_test")
+load(":custom_alias.bzl", "custom_alias")
 
 rust_library(
     name = "mylib",
     srcs = ["mylib.rs"],
+    edition = "2018",
     proc_macro_deps = [":proc_macro_dep"],
-    deps = [":lib_dep"],
+    deps = [
+        ":alias_dep",
+        ":custom_alias_dep",
+        ":lib_dep",
+    ],
 )
 
 rust_library(
     name = "lib_dep",
     srcs = ["lib_dep.rs"],
+    edition = "2018",
+)
+
+alias(
+    name = "alias_dep",
+    actual = ":actual_dep",
+)
+
+rust_library(
+    name = "actual_dep",
+    srcs = ["actual_dep.rs"],
+    edition = "2018",
+    deps = [":dep_of_aliased_dep"],
+)
+
+rust_library(
+    name = "dep_of_aliased_dep",
+    srcs = ["dep_of_aliased_dep.rs"],
+    edition = "2018",
+)
+
+custom_alias(
+    name = "custom_alias_dep",
+    actual = ":custom_actual_dep",
+)
+
+rust_library(
+    name = "custom_actual_dep",
+    srcs = ["custom_actual_dep.rs"],
+    edition = "2018",
+    deps = [":dep_of_custom_aliased_dep"],
+)
+
+rust_library(
+    name = "dep_of_custom_aliased_dep",
+    srcs = ["dep_of_custom_aliased_dep.rs"],
+    edition = "2018",
 )
 
 rust_proc_macro(
     name = "proc_macro_dep",
     srcs = ["proc_macro_dep.rs"],
+    edition = "2018",
 )
 
 rust_test(
     name = "mylib_test",
     crate = ":mylib",
+    edition = "2018",
     proc_macro_deps = [":extra_proc_macro_dep"],
     deps = [":extra_test_dep"],
 )
@@ -27,11 +72,13 @@
 rust_library(
     name = "extra_test_dep",
     srcs = ["extra_test_dep.rs"],
+    edition = "2018",
 )
 
 rust_proc_macro(
     name = "extra_proc_macro_dep",
     srcs = ["extra_proc_macro_dep.rs"],
+    edition = "2018",
 )
 
 rust_test(
diff --git a/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/actual_dep.rs b/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/actual_dep.rs
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/actual_dep.rs
@@ -0,0 +1 @@
+
diff --git a/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/custom_actual_dep.rs b/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/custom_actual_dep.rs
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/custom_actual_dep.rs
@@ -0,0 +1 @@
+
diff --git a/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/custom_alias.bzl b/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/custom_alias.bzl
new file mode 100644
index 0000000..cbf1bbe
--- /dev/null
+++ b/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/custom_alias.bzl
@@ -0,0 +1,17 @@
+"""Alias-like rule for testing."""
+
+load("@rules_rust//rust:defs.bzl", "rust_common")
+
+def _custom_alias_impl(ctx):
+    actual = ctx.attr.actual
+    return [actual[rust_common.crate_info], actual[rust_common.dep_info]]
+
+custom_alias = rule(
+    implementation = _custom_alias_impl,
+    attrs = {
+        "actual": attr.label(
+            allow_single_file = True,
+            mandatory = True,
+        ),
+    },
+)
diff --git a/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/dep_of_aliased_dep.rs b/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/dep_of_aliased_dep.rs
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/dep_of_aliased_dep.rs
@@ -0,0 +1 @@
+
diff --git a/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/dep_of_custom_aliased_dep.rs b/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/dep_of_custom_aliased_dep.rs
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/dep_of_custom_aliased_dep.rs
@@ -0,0 +1 @@
+
diff --git a/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/rust_project_json_test.rs b/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/rust_project_json_test.rs
index b934ac2..f347948 100644
--- a/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/rust_project_json_test.rs
+++ b/third_party/rules_rust/test/rust_analyzer/aspect_traversal_test/rust_project_json_test.rs
@@ -12,6 +12,10 @@
 
         for dep in &[
             "lib_dep",
+            "actual_dep",
+            "dep_of_aliased_dep",
+            "custom_actual_dep",
+            "dep_of_custom_aliased_dep",
             "extra_test_dep",
             "proc_macro_dep",
             "extra_proc_macro_dep",
diff --git a/third_party/rules_rust/test/rust_analyzer/merging_crates_test/BUILD.bazel b/third_party/rules_rust/test/rust_analyzer/merging_crates_test/BUILD.bazel
index 4a7eb3d..5023e0a 100644
--- a/third_party/rules_rust/test/rust_analyzer/merging_crates_test/BUILD.bazel
+++ b/third_party/rules_rust/test/rust_analyzer/merging_crates_test/BUILD.bazel
@@ -3,23 +3,27 @@
 rust_library(
     name = "mylib",
     srcs = ["mylib.rs"],
+    edition = "2018",
     deps = [":lib_dep"],
 )
 
 rust_library(
     name = "lib_dep",
     srcs = ["lib_dep.rs"],
+    edition = "2018",
 )
 
 rust_test(
     name = "mylib_test",
     crate = ":mylib",
+    edition = "2018",
     deps = [":extra_test_dep"],
 )
 
 rust_library(
     name = "extra_test_dep",
     srcs = ["extra_test_dep.rs"],
+    edition = "2018",
 )
 
 rust_test(
diff --git a/third_party/rules_rust/test/rust_analyzer/rust_analyzer_test_runner.sh b/third_party/rules_rust/test/rust_analyzer/rust_analyzer_test_runner.sh
index 69f9a91..1696506 100755
--- a/third_party/rules_rust/test/rust_analyzer/rust_analyzer_test_runner.sh
+++ b/third_party/rules_rust/test/rust_analyzer/rust_analyzer_test_runner.sh
@@ -21,7 +21,7 @@
     local new_workspace="${temp_dir}/rules_rust_test_rust_analyzer"
 
     mkdir -p "${new_workspace}"
-    cat << EOF > "${new_workspace}/WORKSPACE.bazel"
+    cat <<EOF >"${new_workspace}/WORKSPACE.bazel"
 workspace(name = "rules_rust_test_rust_analyzer")
 local_repository(
     name = "rules_rust",
@@ -29,11 +29,11 @@
 )
 load("@rules_rust//rust:repositories.bzl", "rust_repositories")
 rust_repositories(include_rustc_srcs = True)
-load("@rules_rust//tools/rust_analyzer:deps.bzl", "rust_analyzer_deps")
-rust_analyzer_deps()
+load("@rules_rust//tools/rust_analyzer:deps.bzl", "rust_analyzer_dependencies")
+rust_analyzer_dependencies()
 EOF
 
-cat << EOF > "${new_workspace}/.bazelrc"
+    cat <<EOF >"${new_workspace}/.bazelrc"
 build --keep_going
 test --test_output=errors
 # The 'strict' config is used to ensure extra checks are run on the test
@@ -45,17 +45,18 @@
 build:strict --output_groups=+clippy_checks
 EOF
 
-  echo "${new_workspace}"
+    echo "${new_workspace}"
 }
 
 function rust_analyzer_test() {
     local source_dir="$1"
     local workspace="$2"
-    
+    local generator_arg="$3"
+
     echo "Testing '$(basename "${source_dir}")'"
-    rm -f "${workspace}"/*.rs "${workspace}"/*.json "${workspace}/BUILD.bazel"
+    rm -f "${workspace}"/*.rs "${workspace}"/*.json "${workspace}"/*.bzl "${workspace}/BUILD.bazel" "${workspace}/BUILD.bazel-e"
     cp -r "${source_dir}"/* "${workspace}"
-    
+
     # Drop the 'manual' tags
     if [ "$(uname)" == "Darwin" ]; then
         SEDOPTS=(-i '' -e)
@@ -63,17 +64,29 @@
         SEDOPTS=(-i)
     fi
     sed ${SEDOPTS[@]} 's/"manual"//' "${workspace}/BUILD.bazel"
-    
-    pushd "${workspace}" &> /dev/null
+
+    pushd "${workspace}" &>/dev/null
     echo "Generating rust-project.json..."
-    bazel run "@rules_rust//tools/rust_analyzer:gen_rust_project"
+    if [[ -n "${generator_arg}" ]]; then
+        bazel run "@rules_rust//tools/rust_analyzer:gen_rust_project" -- "${generator_arg}"
+    else
+        bazel run "@rules_rust//tools/rust_analyzer:gen_rust_project"
+    fi
     echo "Building..."
     bazel build //...
     echo "Testing..."
     bazel test //...
     echo "Building with Aspects..."
     bazel build //... --config=strict
-    popd &> /dev/null
+    popd &>/dev/null
+}
+
+function cleanup() {
+    local workspace="$1"
+    pushd "${workspace}" &>/dev/null
+    bazel clean --async
+    popd &>/dev/null
+    rm -rf "${workspace}"
 }
 
 function run_test_suite() {
@@ -86,10 +99,20 @@
             continue
         fi
 
-        rust_analyzer_test "${test_dir}" "${temp_workspace}"
+        # Some tests have arguments that need to be passed to the rust-project.json generator.
+        if [[ "${test_dir}" = "aspect_traversal_test" ]]; then
+            test_arg="//mylib_test"
+        elif [[ "${test_dir}" = "merging_crates_test" ]]; then
+            test_arg="//mylib_test"
+        else
+            test_arg=""
+        fi
+
+        rust_analyzer_test "${test_dir}" "${temp_workspace}" "${test_arg}"
     done
 
-    rm -rf "${temp_workspace}"
+    echo "Done"
+    cleanup "${temp_workspace}"
 }
 
 run_test_suite
diff --git a/third_party/rules_rust/test/rust_analyzer/static_and_shared_lib_test/BUILD.bazel b/third_party/rules_rust/test/rust_analyzer/static_and_shared_lib_test/BUILD.bazel
new file mode 100644
index 0000000..7efd036
--- /dev/null
+++ b/third_party/rules_rust/test/rust_analyzer/static_and_shared_lib_test/BUILD.bazel
@@ -0,0 +1,38 @@
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_shared_library",
+    "rust_static_library",
+    "rust_test",
+)
+
+rust_shared_library(
+    name = "greeter_cdylib",
+    srcs = [
+        "greeter.rs",
+        "shared_lib.rs",
+    ],
+    crate_root = "shared_lib.rs",
+    edition = "2018",
+)
+
+rust_static_library(
+    name = "greeter_staticlib",
+    srcs = [
+        "greeter.rs",
+        "static_lib.rs",
+    ],
+    crate_root = "static_lib.rs",
+    edition = "2018",
+)
+
+rust_test(
+    name = "rust_project_json_test",
+    srcs = ["rust_project_json_test.rs"],
+    data = [":rust-project.json"],
+    edition = "2018",
+    env = {"RUST_PROJECT_JSON": "$(rootpath :rust-project.json)"},
+    # This target is tagged as manual since it's not expected to pass in
+    # contexts outside of `//test/rust_analyzer:rust_analyzer_test`. Run
+    # that target to execute this test.
+    tags = ["manual"],
+)
diff --git a/third_party/rules_rust/test/rust_analyzer/static_and_shared_lib_test/greeter.rs b/third_party/rules_rust/test/rust_analyzer/static_and_shared_lib_test/greeter.rs
new file mode 100644
index 0000000..ac87521
--- /dev/null
+++ b/third_party/rules_rust/test/rust_analyzer/static_and_shared_lib_test/greeter.rs
@@ -0,0 +1,61 @@
+/// Object that displays a greeting.
+pub struct Greeter {
+    greeting: String,
+}
+
+/// Implementation of Greeter.
+impl Greeter {
+    /// Constructs a new `Greeter`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use hello_lib::greeter::Greeter;
+    ///
+    /// let greeter = Greeter::new("Hello");
+    /// ```
+    pub fn new(greeting: &str) -> Greeter {
+        Greeter {
+            greeting: greeting.to_string(),
+        }
+    }
+
+    /// Returns the greeting as a string.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use hello_lib::greeter::Greeter;
+    ///
+    /// let greeter = Greeter::new("Hello");
+    /// let greeting = greeter.greeting("World");
+    /// ```
+    pub fn greeting(&self, thing: &str) -> String {
+        format!("{} {}", &self.greeting, thing)
+    }
+
+    /// Prints the greeting.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use hello_lib::greeter::Greeter;
+    ///
+    /// let greeter = Greeter::new("Hello");
+    /// greeter.greet("World");
+    /// ```
+    pub fn greet(&self, thing: &str) {
+        println!("{} {}", &self.greeting, thing);
+    }
+}
+
+#[cfg(test)]
+mod test {
+    use super::Greeter;
+
+    #[test]
+    fn test_greeting() {
+        let hello = Greeter::new("Hi");
+        assert_eq!("Hi Rust", hello.greeting("Rust"));
+    }
+}
diff --git a/third_party/rules_rust/test/rust_analyzer/static_and_shared_lib_test/rust_project_json_test.rs b/third_party/rules_rust/test/rust_analyzer/static_and_shared_lib_test/rust_project_json_test.rs
new file mode 100644
index 0000000..fc573d6
--- /dev/null
+++ b/third_party/rules_rust/test/rust_analyzer/static_and_shared_lib_test/rust_project_json_test.rs
@@ -0,0 +1,22 @@
+#[cfg(test)]
+mod tests {
+    use std::env;
+    use std::path::PathBuf;
+
+    #[test]
+    fn test_deps_of_crate_and_its_test_are_merged() {
+        let rust_project_path = PathBuf::from(env::var("RUST_PROJECT_JSON").unwrap());
+
+        let content = std::fs::read_to_string(&rust_project_path)
+            .unwrap_or_else(|_| panic!("couldn't open {:?}", &rust_project_path));
+
+        assert!(
+            content.contains(r#"{"display_name":"greeter_cdylib","root_module":"shared_lib.rs"#),
+            "expected rust-project.json to contain a rust_shared_library target."
+        );
+        assert!(
+            content.contains(r#"{"display_name":"greeter_staticlib","root_module":"static_lib.rs"#),
+            "expected rust-project.json to contain a rust_static_library target."
+        );
+    }
+}
diff --git a/third_party/rules_rust/test/rust_analyzer/static_and_shared_lib_test/shared_lib.rs b/third_party/rules_rust/test/rust_analyzer/static_and_shared_lib_test/shared_lib.rs
new file mode 100644
index 0000000..44969c6
--- /dev/null
+++ b/third_party/rules_rust/test/rust_analyzer/static_and_shared_lib_test/shared_lib.rs
@@ -0,0 +1 @@
+pub mod greeter;
diff --git a/third_party/rules_rust/test/rust_analyzer/static_and_shared_lib_test/static_lib.rs b/third_party/rules_rust/test/rust_analyzer/static_and_shared_lib_test/static_lib.rs
new file mode 100644
index 0000000..44969c6
--- /dev/null
+++ b/third_party/rules_rust/test/rust_analyzer/static_and_shared_lib_test/static_lib.rs
@@ -0,0 +1 @@
+pub mod greeter;
diff --git a/third_party/rules_rust/test/rust_test_suite/BUILD.bazel b/third_party/rules_rust/test/rust_test_suite/BUILD.bazel
index 8490f8b..df8ed74 100644
--- a/third_party/rules_rust/test/rust_test_suite/BUILD.bazel
+++ b/third_party/rules_rust/test/rust_test_suite/BUILD.bazel
@@ -7,7 +7,7 @@
 )
 
 rust_test_suite(
-    name = "integrated_tests_suite",
+    name = "tests_suite",
     srcs = glob(["tests/**"]),
     edition = "2018",
     deps = [":math_lib"],
diff --git a/third_party/rules_rust/test/rustc_env_files/BUILD.bazel b/third_party/rules_rust/test/rustc_env_files/BUILD.bazel
index efb21b7..cb48b2e 100644
--- a/third_party/rules_rust/test/rustc_env_files/BUILD.bazel
+++ b/third_party/rules_rust/test/rustc_env_files/BUILD.bazel
@@ -1,3 +1,4 @@
+load("@bazel_skylib//rules:write_file.bzl", "write_file")
 load("//rust:defs.bzl", "rust_binary", "rust_library", "rust_test")
 
 package(default_visibility = ["//visibility:public"])
@@ -5,19 +6,24 @@
 rust_binary(
     name = "hello_env",
     srcs = ["src/main.rs"],
+    edition = "2018",
     rustc_env_files = [":generate_rustc_env_file"],
 )
 
-genrule(
+write_file(
     name = "generate_rustc_env_file",
-    outs = ["rustc_env_file"],
-    cmd = "echo CARGO_PKG_VERSION=1.2.3 >> $@ && echo GREETING=Howdy >> $@",
+    out = "rustc_env_file",
+    content = [
+        "CARGO_PKG_VERSION=1.2.3",
+        "GREETING=Howdy",
+        "",
+    ],
 )
 
 sh_test(
     name = "output_test",
     srcs = ["output_test.sh"],
-    args = ["$(location :hello_env)"],
+    args = ["$(rootpath :hello_env)"],
     data = [":hello_env"],
 )
 
diff --git a/third_party/rules_rust/test/test_env_launcher/tests/run.rs b/third_party/rules_rust/test/test_env_launcher/tests/run.rs
index 7089671..4db9052 100644
--- a/third_party/rules_rust/test/test_env_launcher/tests/run.rs
+++ b/third_party/rules_rust/test/test_env_launcher/tests/run.rs
@@ -28,6 +28,6 @@
 
     // Ensure `execpath` expanded variables map to real files and have absolute paths
     let hello_world_src = std::path::PathBuf::from(std::env::var("HELLO_WORLD_SRC").unwrap());
-    assert!(!hello_world_bin.is_absolute());
+    assert!(!hello_world_src.is_absolute());
     assert!(hello_world_src.exists());
 }
diff --git a/third_party/rules_rust/test/unit/cc_info/cc_info_test.bzl b/third_party/rules_rust/test/unit/cc_info/cc_info_test.bzl
index 9873a1f..443a90a 100644
--- a/third_party/rules_rust/test/unit/cc_info/cc_info_test.bzl
+++ b/third_party/rules_rust/test/unit/cc_info/cc_info_test.bzl
@@ -105,27 +105,32 @@
     rust_library(
         name = "rlib",
         srcs = ["foo.rs"],
+        edition = "2018",
     )
 
     rust_library(
         name = "rlib_with_dep",
         srcs = ["foo.rs"],
+        edition = "2018",
         deps = [":rlib"],
     )
 
     rust_binary(
         name = "bin",
         srcs = ["foo.rs"],
+        edition = "2018",
     )
 
     rust_static_library(
         name = "staticlib",
         srcs = ["foo.rs"],
+        edition = "2018",
     )
 
     rust_shared_library(
         name = "cdylib",
         srcs = ["foo.rs"],
+        edition = "2018",
     )
 
     rust_proc_macro(
diff --git a/third_party/rules_rust/test/unit/cdylib_name/cdylib_name_analysis_test.bzl b/third_party/rules_rust/test/unit/cdylib_name/cdylib_name_analysis_test.bzl
index 7aefdda..731e84d 100644
--- a/third_party/rules_rust/test/unit/cdylib_name/cdylib_name_analysis_test.bzl
+++ b/third_party/rules_rust/test/unit/cdylib_name/cdylib_name_analysis_test.bzl
@@ -35,6 +35,7 @@
     rust_shared_library(
         name = "something",
         srcs = ["lib.rs"],
+        edition = "2018",
     )
 
     cdylib_name_test(
diff --git a/third_party/rules_rust/test/unit/check_runfiles/check_runfiles_test.bzl b/third_party/rules_rust/test/unit/check_runfiles/check_runfiles_test.bzl
index 94ee3d7..8dfb2ed 100644
--- a/third_party/rules_rust/test/unit/check_runfiles/check_runfiles_test.bzl
+++ b/third_party/rules_rust/test/unit/check_runfiles/check_runfiles_test.bzl
@@ -30,24 +30,28 @@
     rust_library(
         name = "foo_lib",
         srcs = ["foo.rs"],
+        edition = "2018",
         deps = [":libbar.so"],
     )
 
     rust_binary(
         name = "foo_bin",
         srcs = ["foo_main.rs"],
+        edition = "2018",
         deps = [":libbar.so"],
     )
 
     rust_shared_library(
         name = "foo_dylib",
         srcs = ["foo.rs"],
+        edition = "2018",
         deps = [":libbar.so"],
     )
 
     rust_static_library(
         name = "foo_static",
         srcs = ["foo.rs"],
+        edition = "2018",
         deps = [":libbar.so"],
     )
 
diff --git a/third_party/rules_rust/test/unit/clippy/clippy_test.bzl b/third_party/rules_rust/test/unit/clippy/clippy_test.bzl
index f08cb6c..37e9592 100644
--- a/third_party/rules_rust/test/unit/clippy/clippy_test.bzl
+++ b/third_party/rules_rust/test/unit/clippy/clippy_test.bzl
@@ -62,15 +62,29 @@
         ],
     )
 
-def make_clippy_aspect_unittest(impl):
+_CLIPPY_EXPLICIT_FLAGS = [
+    "-Dwarnings",
+    "-A",
+    "clippy::needless_return",
+]
+
+def _clippy_aspect_with_explicit_flags_test_impl(ctx):
+    return _clippy_aspect_action_has_flag_impl(
+        ctx,
+        _CLIPPY_EXPLICIT_FLAGS,
+    )
+
+def make_clippy_aspect_unittest(impl, **kwargs):
     return analysistest.make(
         impl,
         extra_target_under_test_aspects = [rust_clippy_aspect],
+        **kwargs
     )
 
 binary_clippy_aspect_action_has_warnings_flag_test = make_clippy_aspect_unittest(_binary_clippy_aspect_action_has_warnings_flag_test_impl)
 library_clippy_aspect_action_has_warnings_flag_test = make_clippy_aspect_unittest(_library_clippy_aspect_action_has_warnings_flag_test_impl)
 test_clippy_aspect_action_has_warnings_flag_test = make_clippy_aspect_unittest(_test_clippy_aspect_action_has_warnings_flag_test_impl)
+clippy_aspect_with_explicit_flags_test = make_clippy_aspect_unittest(_clippy_aspect_with_explicit_flags_test_impl, config_settings = {"@//:clippy_flags": _CLIPPY_EXPLICIT_FLAGS})
 
 def clippy_test_suite(name):
     """Entry-point macro called from the BUILD file.
@@ -91,6 +105,18 @@
         name = "test_clippy_aspect_action_has_warnings_flag_test",
         target_under_test = Label("//test/clippy:ok_test"),
     )
+    clippy_aspect_with_explicit_flags_test(
+        name = "binary_clippy_aspect_with_explicit_flags_test",
+        target_under_test = Label("//test/clippy:ok_binary"),
+    )
+    clippy_aspect_with_explicit_flags_test(
+        name = "library_clippy_aspect_with_explicit_flags_test",
+        target_under_test = Label("//test/clippy:ok_library"),
+    )
+    clippy_aspect_with_explicit_flags_test(
+        name = "test_clippy_aspect_with_explicit_flags_test",
+        target_under_test = Label("//test/clippy:ok_test"),
+    )
 
     native.test_suite(
         name = name,
@@ -98,5 +124,8 @@
             ":binary_clippy_aspect_action_has_warnings_flag_test",
             ":library_clippy_aspect_action_has_warnings_flag_test",
             ":test_clippy_aspect_action_has_warnings_flag_test",
+            ":binary_clippy_aspect_with_explicit_flags_test",
+            ":library_clippy_aspect_with_explicit_flags_test",
+            ":test_clippy_aspect_with_explicit_flags_test",
         ],
     )
diff --git a/third_party/rules_rust/test/unit/consistent_crate_name/with_modified_crate_name.bzl b/third_party/rules_rust/test/unit/consistent_crate_name/with_modified_crate_name.bzl
index f30d8be..dee1321 100644
--- a/third_party/rules_rust/test/unit/consistent_crate_name/with_modified_crate_name.bzl
+++ b/third_party/rules_rust/test/unit/consistent_crate_name/with_modified_crate_name.bzl
@@ -9,7 +9,7 @@
 load("//rust/private:rustc.bzl", "rustc_compile_action")
 
 def _with_modified_crate_name_impl(ctx):
-    toolchain = ctx.toolchains[Label("//rust:toolchain")]
+    toolchain = ctx.toolchains[Label("//rust:toolchain_type")]
 
     crate_root = ctx.attr.src.files.to_list()[0]
     output_hash = repr(hash(crate_root.path))
@@ -57,19 +57,26 @@
     implementation = _with_modified_crate_name_impl,
     attrs = {
         "deps": attr.label_list(),
-        "src": attr.label(allow_single_file = [".rs"]),
-        "_cc_toolchain": attr.label(
-            default = "@bazel_tools//tools/cpp:current_cc_toolchain",
+        "src": attr.label(
+            allow_single_file = [".rs"],
         ),
-        "_error_format": attr.label(default = "@rules_rust//:error_format"),
+        "_cc_toolchain": attr.label(
+            default = Label("@bazel_tools//tools/cpp:current_cc_toolchain"),
+        ),
+        "_error_format": attr.label(
+            default = Label("//:error_format"),
+        ),
         "_process_wrapper": attr.label(
-            default = Label("@rules_rust//util/process_wrapper"),
+            default = Label("//util/process_wrapper"),
             executable = True,
             allow_single_file = True,
             cfg = "exec",
         ),
     },
-    toolchains = ["@rules_rust//rust:toolchain", "@bazel_tools//tools/cpp:toolchain_type"],
+    toolchains = [
+        "@rules_rust//rust:toolchain_type",
+        "@bazel_tools//tools/cpp:toolchain_type",
+    ],
     incompatible_use_toolchain_transition = True,
     fragments = ["cpp"],
 )
diff --git a/third_party/rules_rust/test/unit/crate_info/BUILD.bazel b/third_party/rules_rust/test/unit/crate_info/BUILD.bazel
new file mode 100644
index 0000000..98a3ef0
--- /dev/null
+++ b/third_party/rules_rust/test/unit/crate_info/BUILD.bazel
@@ -0,0 +1,4 @@
+load(":crate_info_test.bzl", "crate_info_test_suite")
+
+############################ UNIT TESTS #############################
+crate_info_test_suite(name = "crate_info_test_suite")
diff --git a/third_party/rules_rust/test/unit/crate_info/crate_info_test.bzl b/third_party/rules_rust/test/unit/crate_info/crate_info_test.bzl
new file mode 100644
index 0000000..0f6dfd0
--- /dev/null
+++ b/third_party/rules_rust/test/unit/crate_info/crate_info_test.bzl
@@ -0,0 +1,102 @@
+"""Unittests for rust rules."""
+
+load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
+load(
+    "//rust:defs.bzl",
+    "rust_common",
+    "rust_library",
+    "rust_proc_macro",
+    "rust_shared_library",
+    "rust_static_library",
+)
+
+def _rule_provides_crate_info_test_impl(ctx):
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+    asserts.true(
+        env,
+        rust_common.crate_info in tut,
+        "{} should provide CrateInfo".format(tut.label.name),
+    )
+    return analysistest.end(env)
+
+def _rule_does_not_provide_crate_info_test_impl(ctx):
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+    asserts.false(
+        env,
+        rust_common.crate_info in tut,
+        "{} should not provide CrateInfo".format(tut.label.name),
+    )
+    asserts.true(
+        env,
+        rust_common.test_crate_info in tut,
+        "{} should provide a TestCrateInfo".format(tut.label.name),
+    )
+    return analysistest.end(env)
+
+rule_provides_crate_info_test = analysistest.make(_rule_provides_crate_info_test_impl)
+rule_does_not_provide_crate_info_test = analysistest.make(_rule_does_not_provide_crate_info_test_impl)
+
+def _crate_info_test():
+    rust_library(
+        name = "rlib",
+        srcs = ["lib.rs"],
+        edition = "2018",
+    )
+
+    rust_proc_macro(
+        name = "proc_macro",
+        srcs = ["lib.rs"],
+        edition = "2018",
+    )
+
+    rust_static_library(
+        name = "staticlib",
+        srcs = ["lib.rs"],
+        edition = "2018",
+    )
+
+    rust_shared_library(
+        name = "cdylib",
+        srcs = ["lib.rs"],
+        edition = "2018",
+    )
+
+    rule_provides_crate_info_test(
+        name = "rlib_provides_crate_info_test",
+        target_under_test = ":rlib",
+    )
+
+    rule_provides_crate_info_test(
+        name = "proc_macro_provides_crate_info_test",
+        target_under_test = ":proc_macro",
+    )
+
+    rule_does_not_provide_crate_info_test(
+        name = "cdylib_does_not_provide_crate_info_test",
+        target_under_test = ":cdylib",
+    )
+
+    rule_does_not_provide_crate_info_test(
+        name = "staticlib_does_not_provide_crate_info_test",
+        target_under_test = ":staticlib",
+    )
+
+def crate_info_test_suite(name):
+    """Entry-point macro called from the BUILD file.
+
+    Args:
+        name: Name of the macro.
+    """
+    _crate_info_test()
+
+    native.test_suite(
+        name = name,
+        tests = [
+            ":rlib_provides_crate_info_test",
+            ":proc_macro_provides_crate_info_test",
+            ":cdylib_does_not_provide_crate_info_test",
+            ":staticlib_does_not_provide_crate_info_test",
+        ],
+    )
diff --git a/third_party/rules_rust/test/unit/crate_info/lib.rs b/third_party/rules_rust/test/unit/crate_info/lib.rs
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/third_party/rules_rust/test/unit/crate_info/lib.rs
@@ -0,0 +1 @@
+
diff --git a/third_party/rules_rust/test/unit/crate_name/crate_name_test.bzl b/third_party/rules_rust/test/unit/crate_name/crate_name_test.bzl
index ccc7a18..8671951 100644
--- a/third_party/rules_rust/test/unit/crate_name/crate_name_test.bzl
+++ b/third_party/rules_rust/test/unit/crate_name/crate_name_test.bzl
@@ -1,8 +1,8 @@
 """Unit tests for crate names."""
 
 load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
-load("//rust:defs.bzl", "rust_binary", "rust_library", "rust_test")
-load("//test/unit:common.bzl", "assert_argv_contains")
+load("//rust:defs.bzl", "rust_binary", "rust_library", "rust_shared_library", "rust_static_library", "rust_test")
+load("//test/unit:common.bzl", "assert_argv_contains", "assert_argv_contains_prefix_not")
 
 def _default_crate_name_library_test_impl(ctx):
     env = analysistest.begin(ctx)
@@ -48,7 +48,7 @@
 
 def _invalid_default_crate_name_test_impl(ctx):
     env = analysistest.begin(ctx)
-    asserts.expect_failure(env, "contains invalid character(s): /")
+    asserts.expect_failure(env, "contains invalid character(s): @")
     return analysistest.end(env)
 
 def _invalid_custom_crate_name_test_impl(ctx):
@@ -68,9 +68,22 @@
     """
     env = analysistest.begin(ctx)
     tut = analysistest.target_under_test(env)
+    assert_argv_contains(env, tut.actions[0], "--codegen=metadata=-2102077805")
     assert_argv_contains(env, tut.actions[0], "--codegen=extra-filename=-2102077805")
     return analysistest.end(env)
 
+def _no_extra_filename_test_impl(ctx):
+    """Check that no extra filename is used.
+
+    Args:
+      ctx: rule context.
+    """
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+    assert_argv_contains_prefix_not(env, tut.actions[0], "--codegen=metadata=")
+    assert_argv_contains_prefix_not(env, tut.actions[0], "--codegen=extra-filename=")
+    return analysistest.end(env)
+
 default_crate_name_library_test = analysistest.make(
     _default_crate_name_library_test_impl,
 )
@@ -100,44 +113,54 @@
 slib_library_name_test = analysistest.make(
     _slib_library_name_test_impl,
 )
+no_extra_filename_test = analysistest.make(
+    _no_extra_filename_test_impl,
+)
 
 def _crate_name_test():
     rust_library(
-        name = "default-crate-name-library",
+        name = "default/crate-name-library",
         srcs = ["lib.rs"],
+        edition = "2018",
     )
 
     rust_library(
         name = "custom-crate-name-library",
         crate_name = "custom_name",
         srcs = ["lib.rs"],
+        edition = "2018",
     )
 
     rust_binary(
-        name = "default-crate-name-binary",
+        name = "default/crate-name-binary",
         srcs = ["main.rs"],
+        edition = "2018",
     )
 
     rust_binary(
         name = "custom-crate-name-binary",
         crate_name = "custom_name",
         srcs = ["main.rs"],
+        edition = "2018",
     )
 
     rust_test(
-        name = "default-crate-name-test",
+        name = "default/crate-name-test",
         srcs = ["main.rs"],
+        edition = "2018",
     )
 
     rust_test(
         name = "custom-crate-name-test",
         crate_name = "custom_name",
         srcs = ["main.rs"],
+        edition = "2018",
     )
 
     rust_library(
-        name = "invalid/default-crate-name",
+        name = "invalid@default-crate-name",
         srcs = ["lib.rs"],
+        edition = "2018",
         tags = ["manual", "norustfmt"],
     )
 
@@ -145,12 +168,26 @@
         name = "invalid-custom-crate-name",
         crate_name = "hyphens-not-allowed",
         srcs = ["lib.rs"],
+        edition = "2018",
         tags = ["manual", "norustfmt"],
     )
 
     rust_library(
         name = "slib",
         srcs = ["slib.rs"],
+        edition = "2018",
+    )
+
+    rust_shared_library(
+        name = "shared_lib",
+        srcs = ["lib.rs"],
+        edition = "2018",
+    )
+
+    rust_static_library(
+        name = "static_lib",
+        srcs = ["lib.rs"],
+        edition = "2018",
     )
 
     slib_library_name_test(
@@ -160,7 +197,7 @@
 
     default_crate_name_library_test(
         name = "default_crate_name_library_test",
-        target_under_test = ":default-crate-name-library",
+        target_under_test = ":default/crate-name-library",
     )
 
     custom_crate_name_library_test(
@@ -170,7 +207,7 @@
 
     default_crate_name_binary_test(
         name = "default_crate_name_binary_test",
-        target_under_test = ":default-crate-name-binary",
+        target_under_test = ":default/crate-name-binary",
     )
 
     custom_crate_name_binary_test(
@@ -180,7 +217,7 @@
 
     default_crate_name_test_test(
         name = "default_crate_name_test_test",
-        target_under_test = ":default-crate-name-test",
+        target_under_test = ":default/crate-name-test",
     )
 
     custom_crate_name_test_test(
@@ -190,7 +227,7 @@
 
     invalid_default_crate_name_test(
         name = "invalid_default_crate_name_test",
-        target_under_test = ":invalid/default-crate-name",
+        target_under_test = ":invalid@default-crate-name",
     )
 
     invalid_custom_crate_name_test(
@@ -198,6 +235,16 @@
         target_under_test = ":invalid-custom-crate-name",
     )
 
+    no_extra_filename_test(
+        name = "no_extra_filename_for_shared_library_test",
+        target_under_test = ":shared_lib",
+    )
+
+    no_extra_filename_test(
+        name = "no_extra_filename_for_static_library_test",
+        target_under_test = ":static_lib",
+    )
+
 def crate_name_test_suite(name):
     """Entry-point macro called from the BUILD file.
 
diff --git a/third_party/rules_rust/test/unit/crate_variants/crate_variants.bzl b/third_party/rules_rust/test/unit/crate_variants/crate_variants.bzl
index 2fcd6ef..e8cddab 100644
--- a/third_party/rules_rust/test/unit/crate_variants/crate_variants.bzl
+++ b/third_party/rules_rust/test/unit/crate_variants/crate_variants.bzl
@@ -18,17 +18,20 @@
     rust_library(
         name = "foo",
         srcs = ["foo.rs"],
+        edition = "2018",
     )
 
     rust_library(
         name = "foo2",
         crate_name = "foo",
         srcs = ["foo.rs"],
+        edition = "2018",
     )
 
     rust_library(
         name = "bar",
         srcs = ["bar.rs"],
+        edition = "2018",
         deps = [":foo", ":foo2"],
     )
 
diff --git a/third_party/rules_rust/test/unit/debug_info/debug_info_analysis_test.bzl b/third_party/rules_rust/test/unit/debug_info/debug_info_analysis_test.bzl
index 9dd5ec1..ac5a1c2 100644
--- a/third_party/rules_rust/test/unit/debug_info/debug_info_analysis_test.bzl
+++ b/third_party/rules_rust/test/unit/debug_info/debug_info_analysis_test.bzl
@@ -38,6 +38,7 @@
     rust_shared_library(
         name = "mylib",
         srcs = ["lib.rs"],
+        edition = "2018",
     )
 
     native.filegroup(
@@ -67,6 +68,7 @@
     rust_binary(
         name = "myrustbin",
         srcs = ["main.rs"],
+        edition = "2018",
     )
 
     native.filegroup(
diff --git a/third_party/rules_rust/test/unit/extra_rustc_flags/extra_rustc_flags_test.bzl b/third_party/rules_rust/test/unit/extra_rustc_flags/extra_rustc_flags_test.bzl
index 87eb3b5..8e24580 100644
--- a/third_party/rules_rust/test/unit/extra_rustc_flags/extra_rustc_flags_test.bzl
+++ b/third_party/rules_rust/test/unit/extra_rustc_flags/extra_rustc_flags_test.bzl
@@ -58,6 +58,20 @@
     },
 )
 
+extra_rustc_flag_present_test = analysistest.make(
+    _extra_rustc_flags_present_test,
+    attrs = {
+        "lib_exec": attr.label(
+            mandatory = True,
+            cfg = "exec",
+        ),
+    },
+    config_settings = {
+        "@//:extra_rustc_flag": [EXTRA_FLAG],
+        "@//:extra_rustc_flags": [],
+    },
+)
+
 def _define_test_targets():
     rust_library(
         name = "lib",
@@ -85,6 +99,12 @@
         lib_exec = ":lib",
     )
 
+    extra_rustc_flag_present_test(
+        name = "extra_rustc_flag_present_test",
+        target_under_test = ":lib",
+        lib_exec = ":lib",
+    )
+
     native.test_suite(
         name = name,
         tests = [
diff --git a/third_party/rules_rust/test/unit/force_all_deps_direct/generator.bzl b/third_party/rules_rust/test/unit/force_all_deps_direct/generator.bzl
index e8ab445..2ca3195 100644
--- a/third_party/rules_rust/test/unit/force_all_deps_direct/generator.bzl
+++ b/third_party/rules_rust/test/unit/force_all_deps_direct/generator.bzl
@@ -26,7 +26,7 @@
         mnemonic = "WriteRsFile",
     )
 
-    toolchain = ctx.toolchains[Label("//rust:toolchain")]
+    toolchain = ctx.toolchains[Label("//rust:toolchain_type")]
 
     # Determine unique hash for this rlib
     output_hash = repr(hash(rs_file.path))
@@ -76,17 +76,22 @@
     attrs = {
         "deps": attr.label_list(),
         "_cc_toolchain": attr.label(
-            default = "@bazel_tools//tools/cpp:current_cc_toolchain",
+            default = Label("@bazel_tools//tools/cpp:current_cc_toolchain"),
         ),
-        "_error_format": attr.label(default = "@rules_rust//:error_format"),
+        "_error_format": attr.label(
+            default = Label("//:error_format"),
+        ),
         "_process_wrapper": attr.label(
-            default = Label("@rules_rust//util/process_wrapper"),
+            default = Label("//util/process_wrapper"),
             executable = True,
             allow_single_file = True,
             cfg = "exec",
         ),
     },
-    toolchains = ["@rules_rust//rust:toolchain", "@bazel_tools//tools/cpp:toolchain_type"],
+    toolchains = [
+        "@rules_rust//rust:toolchain_type",
+        "@bazel_tools//tools/cpp:toolchain_type",
+    ],
     incompatible_use_toolchain_transition = True,
     fragments = ["cpp"],
 )
diff --git a/third_party/rules_rust/test/unit/interleaved_cc_info/interleaved_cc_info_test.bzl b/third_party/rules_rust/test/unit/interleaved_cc_info/interleaved_cc_info_test.bzl
index 6afe604..ba88e4c 100644
--- a/third_party/rules_rust/test/unit/interleaved_cc_info/interleaved_cc_info_test.bzl
+++ b/third_party/rules_rust/test/unit/interleaved_cc_info/interleaved_cc_info_test.bzl
@@ -29,6 +29,7 @@
     rust_library(
         name = "a",
         srcs = ["a.rs"],
+        edition = "2018",
         deps = [":b"],
     )
     cc_library(
@@ -39,6 +40,7 @@
     rust_library(
         name = "c",
         srcs = ["c.rs"],
+        edition = "2018",
         deps = [":d"],
     )
     cc_library(
@@ -49,6 +51,7 @@
     rust_library(
         name = "e",
         srcs = ["e.rs"],
+        edition = "2018",
     )
 
     interleaving_cc_link_order_test(
diff --git a/third_party/rules_rust/test/unit/is_proc_macro_dep/BUILD.bazel b/third_party/rules_rust/test/unit/is_proc_macro_dep/BUILD.bazel
new file mode 100644
index 0000000..ac655a5
--- /dev/null
+++ b/third_party/rules_rust/test/unit/is_proc_macro_dep/BUILD.bazel
@@ -0,0 +1,5 @@
+load(":is_proc_macro_dep_test.bzl", "is_proc_macro_dep_test_suite")
+
+is_proc_macro_dep_test_suite(
+    name = "is_proc_macro_dep_test_suite",
+)
diff --git a/third_party/rules_rust/test/unit/is_proc_macro_dep/is_proc_macro_dep_test.bzl b/third_party/rules_rust/test/unit/is_proc_macro_dep/is_proc_macro_dep_test.bzl
new file mode 100644
index 0000000..eb947bd
--- /dev/null
+++ b/third_party/rules_rust/test/unit/is_proc_macro_dep/is_proc_macro_dep_test.bzl
@@ -0,0 +1,169 @@
+"""Unittests for the is_proc_macro_dep setting."""
+
+load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
+load("//rust:defs.bzl", "rust_library", "rust_proc_macro")
+
+DepActionsInfo = provider(
+    "Contains information about dependencies actions.",
+    fields = {"actions": "List[Action]"},
+)
+
+def _collect_dep_actions_aspect_impl(target, ctx):
+    actions = []
+    actions.extend(target.actions)
+    for dep in ctx.rule.attr.deps:
+        actions.extend(dep[DepActionsInfo].actions)
+    return [DepActionsInfo(actions = actions)]
+
+collect_dep_actions_aspect = aspect(
+    implementation = _collect_dep_actions_aspect_impl,
+    attr_aspects = ["deps"],
+)
+
+def _attach_dep_actions_aspect_impl(ctx):
+    return [ctx.attr.dep[DepActionsInfo]]
+
+attach_dep_actions_aspect = rule(
+    implementation = _attach_dep_actions_aspect_impl,
+    attrs = {
+        "dep": attr.label(aspects = [collect_dep_actions_aspect]),
+    },
+)
+
+def _enable_is_proc_macro_dep_transition_impl(_settings, _attr):
+    return {"//:is_proc_macro_dep_enabled": True}
+
+enable_is_proc_macro_dep_transition = transition(
+    inputs = [],
+    outputs = ["//:is_proc_macro_dep_enabled"],
+    implementation = _enable_is_proc_macro_dep_transition_impl,
+)
+
+attach_dep_actions_and_enable_is_proc_macro_dep_aspect = rule(
+    implementation = _attach_dep_actions_aspect_impl,
+    attrs = {
+        "dep": attr.label(aspects = [collect_dep_actions_aspect]),
+        "_allowlist_function_transition": attr.label(default = Label("//tools/allowlists/function_transition_allowlist")),
+    },
+    cfg = enable_is_proc_macro_dep_transition,
+)
+
+def _is_proc_macro_dep_is_not_in_env_for_top_level_action(ctx):
+    env = analysistest.begin(ctx)
+    top_level_action = analysistest.target_under_test(env).actions[0]
+    asserts.false(env, "BAZEL_RULES_RUST_IS_PROC_MACRO_DEP" in top_level_action.env)
+    return analysistest.end(env)
+
+is_proc_macro_dep_is_not_in_env_for_top_level_action_test = analysistest.make(_is_proc_macro_dep_is_not_in_env_for_top_level_action)
+
+def _is_proc_macro_dep_is_false_for_proc_macro(ctx):
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+    proc_macro_dep_action = [a for a in tut[DepActionsInfo].actions if str(a) == "action 'Compiling Rust proc-macro proc_macro_crate (1 files)'"][0]
+    asserts.equals(env, proc_macro_dep_action.env["BAZEL_RULES_RUST_IS_PROC_MACRO_DEP"], "0")
+    return analysistest.end(env)
+
+is_proc_macro_dep_is_false_for_proc_macro_test = analysistest.make(_is_proc_macro_dep_is_false_for_proc_macro)
+
+def _is_proc_macro_dep_is_false_for_top_level_library(ctx):
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+    top_level_library_action = [a for a in tut[DepActionsInfo].actions if str(a) == "action 'Compiling Rust rlib top_level_library (1 files)'"][0]
+    asserts.equals(env, top_level_library_action.env["BAZEL_RULES_RUST_IS_PROC_MACRO_DEP"], "0")
+    return analysistest.end(env)
+
+is_proc_macro_dep_is_false_for_top_level_library_test = analysistest.make(_is_proc_macro_dep_is_false_for_top_level_library)
+
+def _is_proc_macro_dep_is_true_for_proc_macro_dep(ctx):
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+    proc_macro_dep_action = [a for a in tut[DepActionsInfo].actions if str(a) == "action 'Compiling Rust rlib proc_macro_dep (1 files)'"][0]
+    asserts.equals(env, proc_macro_dep_action.env["BAZEL_RULES_RUST_IS_PROC_MACRO_DEP"], "1")
+    return analysistest.end(env)
+
+is_proc_macro_dep_is_true_for_proc_macro_dep_test = analysistest.make(_is_proc_macro_dep_is_true_for_proc_macro_dep)
+
+def _is_proc_macro_dep_is_not_in_env_for_proc_macro_dep(ctx):
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+    proc_macro_dep_action = [a for a in tut[DepActionsInfo].actions if str(a) == "action 'Compiling Rust rlib proc_macro_dep (1 files)'"][0]
+    asserts.true(env, "BAZEL_RULES_RUST_IS_PROC_MACRO_DEP" not in proc_macro_dep_action.env)
+    return analysistest.end(env)
+
+is_proc_macro_dep_is_not_in_env_for_proc_macro_dep_test = analysistest.make(_is_proc_macro_dep_is_not_in_env_for_proc_macro_dep)
+
+def _is_proc_macro_dep_test():
+    """Generate targets and tests."""
+
+    rust_library(
+        name = "proc_macro_dep",
+        srcs = ["proc_macro_dep.rs"],
+        edition = "2018",
+    )
+
+    rust_proc_macro(
+        name = "proc_macro_crate",
+        srcs = ["proc_macro_crate.rs"],
+        deps = ["proc_macro_dep"],
+        edition = "2018",
+    )
+
+    is_proc_macro_dep_is_not_in_env_for_top_level_action_test(
+        name = "is_proc_macro_dep_is_not_in_env_for_top_level_proc_macro",
+        target_under_test = ":proc_macro_crate",
+    )
+
+    is_proc_macro_dep_is_not_in_env_for_top_level_action_test(
+        name = "is_proc_macro_dep_is_not_in_env_for_top_level_library",
+        target_under_test = ":proc_macro_dep",
+    )
+
+    attach_dep_actions_and_enable_is_proc_macro_dep_aspect(
+        name = "proc_macro_crate_enabled_with_actions",
+        dep = ":proc_macro_crate",
+    )
+
+    is_proc_macro_dep_is_false_for_proc_macro_test(
+        name = "is_proc_macro_dep_is_false_for_proc_macro",
+        target_under_test = ":proc_macro_crate_enabled_with_actions",
+    )
+
+    is_proc_macro_dep_is_true_for_proc_macro_dep_test(
+        name = "is_proc_macro_dep_is_true_for_proc_macro_dep",
+        target_under_test = ":proc_macro_crate_enabled_with_actions",
+    )
+
+    rust_library(
+        name = "top_level_library",
+        srcs = ["proc_macro_dep.rs"],
+        edition = "2018",
+    )
+
+    attach_dep_actions_and_enable_is_proc_macro_dep_aspect(
+        name = "top_level_library_enabled_with_actions",
+        dep = ":top_level_library",
+    )
+
+    is_proc_macro_dep_is_false_for_top_level_library_test(
+        name = "is_proc_macro_dep_is_false_for_top_level_library",
+        target_under_test = ":top_level_library_enabled_with_actions",
+    )
+
+def is_proc_macro_dep_test_suite(name):
+    """Entry-point macro called from the BUILD file.
+
+    Args:
+        name: Name of the macro.
+    """
+    _is_proc_macro_dep_test()
+
+    native.test_suite(
+        name = name,
+        tests = [
+            "is_proc_macro_dep_is_not_in_env_for_top_level_proc_macro",
+            "is_proc_macro_dep_is_not_in_env_for_top_level_library",
+            "is_proc_macro_dep_is_false_for_proc_macro",
+            "is_proc_macro_dep_is_false_for_top_level_library",
+            "is_proc_macro_dep_is_true_for_proc_macro_dep",
+        ],
+    )
diff --git a/third_party/rules_rust/test/unit/is_proc_macro_dep/proc_macro_crate.rs b/third_party/rules_rust/test/unit/is_proc_macro_dep/proc_macro_crate.rs
new file mode 100644
index 0000000..8830ab5
--- /dev/null
+++ b/third_party/rules_rust/test/unit/is_proc_macro_dep/proc_macro_crate.rs
@@ -0,0 +1,11 @@
+extern crate proc_macro;
+
+use proc_macro::TokenStream;
+
+#[proc_macro]
+pub fn make_answer(_item: TokenStream) -> TokenStream {
+    let answer = proc_macro_dep::proc_macro_dep();
+    format!("fn answer() -> u32 {{ {} }}", answer)
+        .parse()
+        .unwrap()
+}
diff --git a/third_party/rules_rust/test/unit/is_proc_macro_dep/proc_macro_dep.rs b/third_party/rules_rust/test/unit/is_proc_macro_dep/proc_macro_dep.rs
new file mode 100644
index 0000000..3358e72
--- /dev/null
+++ b/third_party/rules_rust/test/unit/is_proc_macro_dep/proc_macro_dep.rs
@@ -0,0 +1,3 @@
+pub fn proc_macro_dep() -> i64 {
+    42
+}
diff --git a/third_party/rules_rust/test/unit/linker_inputs_propagation/BUILD.bazel b/third_party/rules_rust/test/unit/linker_inputs_propagation/BUILD.bazel
new file mode 100644
index 0000000..b3cdf15
--- /dev/null
+++ b/third_party/rules_rust/test/unit/linker_inputs_propagation/BUILD.bazel
@@ -0,0 +1,4 @@
+load(":linker_inputs_propagation_test.bzl", "linker_inputs_propagation_test_suite")
+
+############################ UNIT TESTS #############################
+linker_inputs_propagation_test_suite(name = "linker_inputs_propagation_test_suite")
diff --git a/third_party/rules_rust/test/unit/linker_inputs_propagation/linker_inputs_propagation_test.bzl b/third_party/rules_rust/test/unit/linker_inputs_propagation/linker_inputs_propagation_test.bzl
new file mode 100644
index 0000000..3341acd
--- /dev/null
+++ b/third_party/rules_rust/test/unit/linker_inputs_propagation/linker_inputs_propagation_test.bzl
@@ -0,0 +1,91 @@
+"""Unittests for propagation of linker inputs through Rust libraries"""
+
+load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
+
+def _shared_lib_is_propagated_test_impl(ctx):
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+    link_action = [action for action in tut.actions if action.mnemonic == "CppLink"][0]
+
+    lib_name = _get_lib_name(ctx, name = "foo_shared")
+    asserts.true(env, _contains_input(link_action.inputs, lib_name))
+
+    return analysistest.end(env)
+
+def _static_lib_is_not_propagated_test_impl(ctx):
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+    link_action = [action for action in tut.actions if action.mnemonic == "CppLink"][0]
+
+    lib_name = _get_lib_name(ctx, name = "foo")
+    asserts.false(env, _contains_input(link_action.inputs, lib_name))
+
+    return analysistest.end(env)
+
+def _contains_input(inputs, name):
+    for input in inputs.to_list():
+        # We cannot check for name equality because rlib outputs contain
+        # a hash in their name.
+        if input.basename.startswith(name):
+            return True
+    return False
+
+def _get_lib_name(ctx, name):
+    if ctx.target_platform_has_constraint(ctx.attr._windows_constraint[platform_common.ConstraintValueInfo]):
+        return name
+    else:
+        return "lib{}".format(name)
+
+static_lib_is_not_propagated_test = analysistest.make(
+    _static_lib_is_not_propagated_test_impl,
+    attrs = {
+        "_windows_constraint": attr.label(default = Label("@platforms//os:windows")),
+    },
+)
+
+shared_lib_is_propagated_test = analysistest.make(
+    _shared_lib_is_propagated_test_impl,
+    attrs = {
+        "_macos_constraint": attr.label(default = Label("@platforms//os:macos")),
+        "_windows_constraint": attr.label(default = Label("@platforms//os:windows")),
+    },
+)
+
+def _linker_inputs_propagation_test():
+    static_lib_is_not_propagated_test(
+        name = "depends_on_foo_via_staticlib",
+        target_under_test = "//test/linker_inputs_propagation:depends_on_foo_via_staticlib",
+    )
+
+    shared_lib_is_propagated_test(
+        name = "depends_on_shared_foo_via_staticlib",
+        target_under_test = "//test/linker_inputs_propagation:depends_on_shared_foo_via_staticlib",
+    )
+
+    static_lib_is_not_propagated_test(
+        name = "depends_on_foo_via_sharedlib",
+        target_under_test = "//test/linker_inputs_propagation:depends_on_foo_via_sharedlib",
+    )
+
+    shared_lib_is_propagated_test(
+        name = "depends_on_shared_foo_via_sharedlib",
+        target_under_test = "//test/linker_inputs_propagation:depends_on_shared_foo_via_sharedlib",
+    )
+
+def linker_inputs_propagation_test_suite(name):
+    """Entry-point macro called from the BUILD file.
+
+    Args:
+        name: Name of the macro.
+    """
+    _linker_inputs_propagation_test()
+
+    native.test_suite(
+        name = name,
+        tests = [
+            ":depends_on_foo_via_staticlib",
+            ":depends_on_shared_foo_via_staticlib",
+            ":depends_on_foo_via_sharedlib",
+            ":depends_on_shared_foo_via_sharedlib",
+        ],
+    )
diff --git a/third_party/rules_rust/test/unit/linkstamps/linkstamps_test.bzl b/third_party/rules_rust/test/unit/linkstamps/linkstamps_test.bzl
index d7423f3..a0ae6fe 100644
--- a/third_party/rules_rust/test/unit/linkstamps/linkstamps_test.bzl
+++ b/third_party/rules_rust/test/unit/linkstamps/linkstamps_test.bzl
@@ -2,7 +2,7 @@
 
 load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
 load("@rules_cc//cc:defs.bzl", "cc_library")
-load("//rust:defs.bzl", "rust_binary", "rust_library", "rust_test")
+load("//rust:defs.bzl", "rust_binary", "rust_common", "rust_library", "rust_test")
 load("//test/unit:common.bzl", "assert_action_mnemonic")
 
 def _is_running_on_linux(ctx):
@@ -20,7 +20,13 @@
     linkstamp_out = linkstamp_action.outputs.to_list()[0]
     asserts.equals(env, linkstamp_out.basename, "linkstamp.o")
     tut_out = tut.files.to_list()[0]
-    expected_linkstamp_path = tut_out.dirname + "/_objs/" + tut_out.basename + "/test/unit/linkstamps/linkstamp.o"
+    is_test = tut[rust_common.crate_info].is_test
+    workspace_prefix = "" if ctx.workspace_name == "rules_rust" else "/external/rules_rust"
+
+    # Rust compilation outputs coming from a test are put in test-{hash} directory
+    # which we need to remove in order to obtain the linkstamp file path.
+    dirname = "/".join(tut_out.dirname.split("/")[:-1]) if is_test else tut_out.dirname
+    expected_linkstamp_path = dirname + "/_objs/" + tut_out.basename + workspace_prefix + "/test/unit/linkstamps/linkstamp.o"
     asserts.equals(
         env,
         linkstamp_out.path,
@@ -67,6 +73,7 @@
     rust_binary(
         name = "some_rust_binary",
         srcs = ["foo.rs"],
+        edition = "2018",
         deps = [":cc_lib_with_linkstamp"],
     )
 
@@ -78,12 +85,14 @@
     rust_library(
         name = "some_rust_library_with_linkstamp_transitively",
         srcs = ["foo.rs"],
+        edition = "2018",
         deps = [":cc_lib_with_linkstamp"],
     )
 
     rust_binary(
         name = "some_rust_binary_with_linkstamp_transitively",
         srcs = ["foo.rs"],
+        edition = "2018",
         deps = [":some_rust_library_with_linkstamp_transitively"],
     )
 
@@ -100,6 +109,7 @@
     rust_binary(
         name = "some_rust_binary_with_multiple_paths_to_a_linkstamp",
         srcs = ["foo.rs"],
+        edition = "2018",
         deps = [":cc_lib_with_linkstamp", ":cc_lib_with_linkstamp_transitively"],
     )
 
@@ -111,6 +121,7 @@
     rust_test(
         name = "some_rust_test1",
         srcs = ["foo.rs"],
+        edition = "2018",
         deps = [":cc_lib_with_linkstamp"],
     )
 
@@ -122,6 +133,7 @@
     rust_test(
         name = "some_rust_test2",
         srcs = ["foo.rs"],
+        edition = "2018",
         deps = [":cc_lib_with_linkstamp"],
     )
 
diff --git a/third_party/rules_rust/test/unit/location_expansion/location_expansion_test.bzl b/third_party/rules_rust/test/unit/location_expansion/location_expansion_test.bzl
index caec57c..a58d974 100644
--- a/third_party/rules_rust/test/unit/location_expansion/location_expansion_test.bzl
+++ b/third_party/rules_rust/test/unit/location_expansion/location_expansion_test.bzl
@@ -26,6 +26,7 @@
     rust_library(
         name = "mylibrary",
         srcs = ["mylibrary.rs"],
+        edition = "2018",
         rustc_flags = [
             "@$(location :flag_generator)",
         ],
diff --git a/third_party/rules_rust/test/unit/native_deps/native_action_inputs_test.bzl b/third_party/rules_rust/test/unit/native_deps/native_action_inputs_test.bzl
index 2363e1e..1281809 100644
--- a/third_party/rules_rust/test/unit/native_deps/native_action_inputs_test.bzl
+++ b/third_party/rules_rust/test/unit/native_deps/native_action_inputs_test.bzl
@@ -77,30 +77,35 @@
     rust_library(
         name = "foo_lib",
         srcs = ["foo.rs"],
+        edition = "2018",
         deps = [":bar"],
     )
 
     rust_binary(
         name = "foo_bin",
         srcs = ["foo_main.rs"],
+        edition = "2018",
         deps = [":bar"],
     )
 
     rust_shared_library(
         name = "foo_dylib",
         srcs = ["foo.rs"],
+        edition = "2018",
         deps = [":bar"],
     )
 
     rust_static_library(
         name = "foo_static",
         srcs = ["foo.rs"],
+        edition = "2018",
         deps = [":bar"],
     )
 
     rust_proc_macro(
         name = "foo_proc_macro",
         srcs = ["foo.rs"],
+        edition = "2018",
         deps = [":bar"],
     )
 
diff --git a/third_party/rules_rust/test/unit/native_deps/native_deps_test.bzl b/third_party/rules_rust/test/unit/native_deps/native_deps_test.bzl
index 5a91881..43b1c07 100644
--- a/third_party/rules_rust/test/unit/native_deps/native_deps_test.bzl
+++ b/third_party/rules_rust/test/unit/native_deps/native_deps_test.bzl
@@ -30,6 +30,8 @@
     assert_argv_contains_prefix_suffix(env, action, "-Lnative=", "/native_deps")
     assert_argv_contains(env, action, "--crate-type=cdylib")
     assert_argv_contains(env, action, "-lstatic=native_dep")
+    native_link_arg = "-Clink-arg=-lnative_dep.lib" if ctx.target_platform_has_constraint(ctx.attr._windows_constraint[platform_common.ConstraintValueInfo]) else "-Clink-arg=-lnative_dep"
+    assert_argv_contains(env, action, native_link_arg)
     assert_argv_contains_prefix(env, action, "--codegen=linker=")
     return analysistest.end(env)
 
@@ -40,17 +42,20 @@
     assert_argv_contains_prefix_suffix(env, action, "-Lnative=", "/native_deps")
     assert_argv_contains(env, action, "--crate-type=staticlib")
     assert_argv_contains(env, action, "-lstatic=native_dep")
+    native_link_arg = "-Clink-arg=-lnative_dep.lib" if ctx.target_platform_has_constraint(ctx.attr._windows_constraint[platform_common.ConstraintValueInfo]) else "-Clink-arg=-lnative_dep"
+    assert_argv_contains(env, action, native_link_arg)
     assert_argv_contains_prefix(env, action, "--codegen=linker=")
     return analysistest.end(env)
 
 def _proc_macro_has_native_libs_test_impl(ctx):
     env = analysistest.begin(ctx)
     tut = analysistest.target_under_test(env)
-    asserts.equals(env, 1, len(tut.actions))
     action = tut.actions[0]
     assert_argv_contains_prefix_suffix(env, action, "-Lnative=", "/native_deps")
     assert_argv_contains(env, action, "--crate-type=proc-macro")
     assert_argv_contains(env, action, "-lstatic=native_dep")
+    native_link_arg = "-Clink-arg=-lnative_dep.lib" if ctx.target_platform_has_constraint(ctx.attr._windows_constraint[platform_common.ConstraintValueInfo]) else "-Clink-arg=-lnative_dep"
+    assert_argv_contains(env, action, native_link_arg)
     assert_argv_contains_prefix(env, action, "--codegen=linker=")
     return analysistest.end(env)
 
@@ -60,6 +65,8 @@
     action = tut.actions[0]
     assert_argv_contains_prefix_suffix(env, action, "-Lnative=", "/native_deps")
     assert_argv_contains(env, action, "-lstatic=native_dep")
+    native_link_arg = "-Clink-arg=-lnative_dep.lib" if ctx.target_platform_has_constraint(ctx.attr._windows_constraint[platform_common.ConstraintValueInfo]) else "-Clink-arg=-lnative_dep"
+    assert_argv_contains(env, action, native_link_arg)
     assert_argv_contains_prefix(env, action, "--codegen=linker=")
     return analysistest.end(env)
 
@@ -78,21 +85,22 @@
     action = tut.actions[0]
 
     compilation_mode = ctx.var["COMPILATION_MODE"]
+    workspace_prefix = "" if ctx.workspace_name == "rules_rust" else "external/rules_rust/"
     if ctx.target_platform_has_constraint(ctx.attr._macos_constraint[platform_common.ConstraintValueInfo]):
         want = [
             "-lstatic=native_dep",
-            "link-arg=-Wl,-force_load,bazel-out/darwin-{}/bin/test/unit/native_deps/libalwayslink.lo".format(compilation_mode),
+            "link-arg=-Wl,-force_load,bazel-out/darwin-{}/bin/{}test/unit/native_deps/libalwayslink.lo".format(compilation_mode, workspace_prefix),
         ]
     elif ctx.target_platform_has_constraint(ctx.attr._windows_constraint[platform_common.ConstraintValueInfo]):
         want = [
             "-lstatic=native_dep",
-            "link-arg=/WHOLEARCHIVE:bazel-out/x64_windows-{}/bin/test/unit/native_deps/alwayslink.lo.lib".format(compilation_mode),
+            "link-arg=/WHOLEARCHIVE:bazel-out/x64_windows-{}/bin/{}test/unit/native_deps/alwayslink.lo.lib".format(compilation_mode, workspace_prefix),
         ]
     else:
         want = [
             "-lstatic=native_dep",
             "link-arg=-Wl,--whole-archive",
-            "link-arg=bazel-out/k8-{}/bin/test/unit/native_deps/libalwayslink.lo".format(compilation_mode),
+            "link-arg=bazel-out/k8-{}/bin/{}test/unit/native_deps/libalwayslink.lo".format(compilation_mode, workspace_prefix),
             "link-arg=-Wl,--no-whole-archive",
         ]
     individual_link_args = [
@@ -112,32 +120,41 @@
     linker_args = _extract_linker_args(action.argv)[1:]
 
     compilation_mode = ctx.var["COMPILATION_MODE"]
+    workspace_prefix = "" if ctx.workspace_name == "rules_rust" else "external/rules_rust/"
     pic_suffix = ".pic" if compilation_mode == "opt" else ""
     if ctx.target_platform_has_constraint(ctx.attr._macos_constraint[platform_common.ConstraintValueInfo]):
         want = [
             "-lstatic=native_dep",
-            "link-arg=-Wl,-force_load,bazel-out/darwin-{}/bin/test/unit/native_deps/libalwayslink{}.lo".format(compilation_mode, pic_suffix),
+            "link-arg=-Wl,-force_load,bazel-out/darwin-{}/bin/{}test/unit/native_deps/libalwayslink{}.lo".format(compilation_mode, workspace_prefix, pic_suffix),
         ]
     elif ctx.target_platform_has_constraint(ctx.attr._windows_constraint[platform_common.ConstraintValueInfo]):
         want = [
             "-lstatic=native_dep",
-            "link-arg=/WHOLEARCHIVE:bazel-out/x64_windows-{}/bin/test/unit/native_deps/alwayslink.lo.lib".format(compilation_mode),
+            "link-arg=/WHOLEARCHIVE:bazel-out/x64_windows-{}/bin/{}test/unit/native_deps/alwayslink.lo.lib".format(compilation_mode, workspace_prefix),
         ]
     else:
         want = [
             "-lstatic=native_dep",
             "link-arg=-Wl,--whole-archive",
-            "link-arg=bazel-out/k8-{}/bin/test/unit/native_deps/libalwayslink{}.lo".format(compilation_mode, pic_suffix),
+            "link-arg=bazel-out/k8-{}/bin/{}test/unit/native_deps/libalwayslink{}.lo".format(compilation_mode, workspace_prefix, pic_suffix),
             "link-arg=-Wl,--no-whole-archive",
         ]
     asserts.equals(env, want, linker_args)
     return analysistest.end(env)
 
 rlib_has_no_native_libs_test = analysistest.make(_rlib_has_no_native_libs_test_impl)
-staticlib_has_native_libs_test = analysistest.make(_staticlib_has_native_libs_test_impl)
-cdylib_has_native_libs_test = analysistest.make(_cdylib_has_native_libs_test_impl)
-proc_macro_has_native_libs_test = analysistest.make(_proc_macro_has_native_libs_test_impl)
-bin_has_native_libs_test = analysistest.make(_bin_has_native_libs_test_impl)
+staticlib_has_native_libs_test = analysistest.make(_staticlib_has_native_libs_test_impl, attrs = {
+    "_windows_constraint": attr.label(default = Label("@platforms//os:windows")),
+})
+cdylib_has_native_libs_test = analysistest.make(_cdylib_has_native_libs_test_impl, attrs = {
+    "_windows_constraint": attr.label(default = Label("@platforms//os:windows")),
+})
+proc_macro_has_native_libs_test = analysistest.make(_proc_macro_has_native_libs_test_impl, attrs = {
+    "_windows_constraint": attr.label(default = Label("@platforms//os:windows")),
+})
+bin_has_native_libs_test = analysistest.make(_bin_has_native_libs_test_impl, attrs = {
+    "_windows_constraint": attr.label(default = Label("@platforms//os:windows")),
+})
 bin_has_native_dep_and_alwayslink_test = analysistest.make(_bin_has_native_dep_and_alwayslink_test_impl, attrs = {
     "_macos_constraint": attr.label(default = Label("@platforms//os:macos")),
     "_windows_constraint": attr.label(default = Label("@platforms//os:windows")),
@@ -151,37 +168,42 @@
     rust_library(
         name = "rlib_has_no_native_dep",
         srcs = ["lib_using_native_dep.rs"],
+        edition = "2018",
         deps = [":native_dep"],
     )
 
     rust_static_library(
         name = "staticlib_has_native_dep",
         srcs = ["lib_using_native_dep.rs"],
+        edition = "2018",
         deps = [":native_dep"],
     )
 
     rust_shared_library(
         name = "cdylib_has_native_dep",
         srcs = ["lib_using_native_dep.rs"],
+        edition = "2018",
         deps = [":native_dep"],
     )
 
     rust_proc_macro(
         name = "proc_macro_has_native_dep",
         srcs = ["proc_macro_using_native_dep.rs"],
-        deps = [":native_dep"],
         edition = "2018",
+        deps = [":native_dep"],
     )
 
     rust_binary(
         name = "bin_has_native_dep",
         srcs = ["bin_using_native_dep.rs"],
+        edition = "2018",
         deps = [":native_dep"],
     )
 
     rust_binary(
         name = "bin_has_native_dep_and_alwayslink",
         srcs = ["bin_using_native_dep.rs"],
+        edition = "2018",
         deps = [":native_dep", ":alwayslink"],
     )
 
@@ -200,6 +222,7 @@
     rust_shared_library(
         name = "cdylib_has_native_dep_and_alwayslink",
         srcs = ["lib_using_native_dep.rs"],
+        edition = "2018",
         deps = [":native_dep", ":alwayslink"],
     )
 
@@ -260,6 +283,7 @@
     rust_binary(
         name = "linkopts_rust_bin",
         srcs = ["bin_using_native_dep.rs"],
+        edition = "2018",
         deps = [":linkopts_native_dep_a"],
     )
 
@@ -301,18 +325,21 @@
     rust_binary(
         name = "bin_additional_deps",
         srcs = ["bin_using_native_dep.rs"],
+        edition = "2018",
         deps = [":additional_deps_cc"],
     )
 
     rust_shared_library(
         name = "cdylib_additional_deps",
         srcs = ["lib_using_native_dep.rs"],
+        edition = "2018",
         deps = [":additional_deps_cc"],
     )
 
     rust_library(
         name = "lib_additional_deps",
         srcs = ["lib_using_native_dep.rs"],
+        edition = "2018",
         deps = ["additional_deps_cc"],
     )
 
diff --git a/third_party/rules_rust/test/unit/pipelined_compilation/BUILD.bazel b/third_party/rules_rust/test/unit/pipelined_compilation/BUILD.bazel
new file mode 100644
index 0000000..8d363e0
--- /dev/null
+++ b/third_party/rules_rust/test/unit/pipelined_compilation/BUILD.bazel
@@ -0,0 +1,4 @@
+load(":pipelined_compilation_test.bzl", "pipelined_compilation_test_suite")
+
+############################ UNIT TESTS #############################
+pipelined_compilation_test_suite(name = "pipelined_compilation_test_suite")
diff --git a/third_party/rules_rust/test/unit/pipelined_compilation/bin.rs b/third_party/rules_rust/test/unit/pipelined_compilation/bin.rs
new file mode 100644
index 0000000..aa32dd2
--- /dev/null
+++ b/third_party/rules_rust/test/unit/pipelined_compilation/bin.rs
@@ -0,0 +1,5 @@
+use second::fun;
+
+fn main() {
+    fun()
+}
diff --git a/third_party/rules_rust/test/unit/pipelined_compilation/custom_rule_test/to_wrap.rs b/third_party/rules_rust/test/unit/pipelined_compilation/custom_rule_test/to_wrap.rs
new file mode 100644
index 0000000..5fee30b
--- /dev/null
+++ b/third_party/rules_rust/test/unit/pipelined_compilation/custom_rule_test/to_wrap.rs
@@ -0,0 +1,3 @@
+pub fn to_wrap() {
+    eprintln!("something");
+}
diff --git a/third_party/rules_rust/test/unit/pipelined_compilation/custom_rule_test/uses_wrapper.rs b/third_party/rules_rust/test/unit/pipelined_compilation/custom_rule_test/uses_wrapper.rs
new file mode 100644
index 0000000..d932467
--- /dev/null
+++ b/third_party/rules_rust/test/unit/pipelined_compilation/custom_rule_test/uses_wrapper.rs
@@ -0,0 +1,5 @@
+use wrapper::wrap;
+
+pub fn calls_wrap() {
+    wrap();
+}
diff --git a/third_party/rules_rust/test/unit/pipelined_compilation/first.rs b/third_party/rules_rust/test/unit/pipelined_compilation/first.rs
new file mode 100644
index 0000000..30c0129
--- /dev/null
+++ b/third_party/rules_rust/test/unit/pipelined_compilation/first.rs
@@ -0,0 +1,4 @@
+pub fn first_fun() -> u8 {
+    4 // chosen by fair dice roll.
+      // guaranteed to be random.
+}
diff --git a/third_party/rules_rust/test/unit/pipelined_compilation/my_macro.rs b/third_party/rules_rust/test/unit/pipelined_compilation/my_macro.rs
new file mode 100644
index 0000000..035c761
--- /dev/null
+++ b/third_party/rules_rust/test/unit/pipelined_compilation/my_macro.rs
@@ -0,0 +1,6 @@
+use proc_macro::TokenStream;
+
+#[proc_macro_attribute]
+pub fn noop(_attr: TokenStream, item: TokenStream) -> TokenStream {
+    item
+}
diff --git a/third_party/rules_rust/test/unit/pipelined_compilation/pipelined_compilation_test.bzl b/third_party/rules_rust/test/unit/pipelined_compilation/pipelined_compilation_test.bzl
new file mode 100644
index 0000000..71f538c
--- /dev/null
+++ b/third_party/rules_rust/test/unit/pipelined_compilation/pipelined_compilation_test.bzl
@@ -0,0 +1,257 @@
+"""Unittests for rust rules."""
+
+load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
+load("//rust:defs.bzl", "rust_binary", "rust_library", "rust_proc_macro")
+load("//test/unit:common.bzl", "assert_argv_contains", "assert_list_contains_adjacent_elements", "assert_list_contains_adjacent_elements_not")
+load(":wrap.bzl", "wrap")
+
+NOT_WINDOWS = select({
+    "@platforms//os:linux": [],
+    "@platforms//os:macos": [],
+    "//conditions:default": ["@platforms//:incompatible"],
+})
+
+ENABLE_PIPELINING = {
+    "@//rust/settings:pipelined_compilation": True,
+}
+
+def _second_lib_test_impl(ctx):
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+    rlib_action = [act for act in tut.actions if act.mnemonic == "Rustc"][0]
+    metadata_action = [act for act in tut.actions if act.mnemonic == "RustcMetadata"][0]
+
+    # Both actions should use the same --emit=
+    assert_argv_contains(env, rlib_action, "--emit=dep-info,link,metadata")
+    assert_argv_contains(env, metadata_action, "--emit=dep-info,link,metadata")
+
+    # The metadata action should have a .rmeta as output and the rlib action a .rlib
+    path = rlib_action.outputs.to_list()[0].path
+    asserts.true(
+        env,
+        path.endswith(".rlib"),
+        "expected Rustc to output .rlib, got " + path,
+    )
+    path = metadata_action.outputs.to_list()[0].path
+    asserts.true(
+        env,
+        path.endswith(".rmeta"),
+        "expected RustcMetadata to output .rmeta, got " + path,
+    )
+
+    # Only the action building metadata should contain --rustc-quit-on-rmeta
+    assert_list_contains_adjacent_elements_not(env, rlib_action.argv, ["--rustc-quit-on-rmeta", "true"])
+    assert_list_contains_adjacent_elements(env, metadata_action.argv, ["--rustc-quit-on-rmeta", "true"])
+
+    # Check that both actions refer to the metadata of :first, not the rlib
+    extern_metadata = [arg for arg in metadata_action.argv if arg.startswith("--extern=first=") and "libfirst" in arg and arg.endswith(".rmeta")]
+    asserts.true(
+        env,
+        len(extern_metadata) == 1,
+        "did not find a --extern=first=*.rmeta but expected one",
+    )
+    extern_rlib = [arg for arg in rlib_action.argv if arg.startswith("--extern=first=") and "libfirst" in arg and arg.endswith(".rmeta")]
+    asserts.true(
+        env,
+        len(extern_rlib) == 1,
+        "did not find a --extern=first=*.rlib but expected one",
+    )
+
+    # Check that the input to both actions is the metadata of :first
+    input_metadata = [i for i in metadata_action.inputs.to_list() if i.basename.startswith("libfirst")]
+    asserts.true(env, len(input_metadata) == 1, "expected only one libfirst input, found " + str([i.path for i in input_metadata]))
+    asserts.true(env, input_metadata[0].extension == "rmeta", "expected libfirst dependency to be rmeta, found " + input_metadata[0].path)
+    input_rlib = [i for i in rlib_action.inputs.to_list() if i.basename.startswith("libfirst")]
+    asserts.true(env, len(input_rlib) == 1, "expected only one libfirst input, found " + str([i.path for i in input_rlib]))
+    asserts.true(env, input_rlib[0].extension == "rmeta", "expected libfirst dependency to be rmeta, found " + input_rlib[0].path)
+
+    return analysistest.end(env)
+
+def _bin_test_impl(ctx):
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+    bin_action = [act for act in tut.actions if act.mnemonic == "Rustc"][0]
+
+    # Check that no inputs to this binary are .rmeta files.
+    metadata_inputs = [i.path for i in bin_action.inputs.to_list() if i.path.endswith(".rmeta")]
+    asserts.false(env, metadata_inputs, "expected no metadata inputs, found " + str(metadata_inputs))
+
+    return analysistest.end(env)
+
+bin_test = analysistest.make(_bin_test_impl, config_settings = ENABLE_PIPELINING)
+second_lib_test = analysistest.make(_second_lib_test_impl, config_settings = ENABLE_PIPELINING)
+
+def _pipelined_compilation_test():
+    rust_proc_macro(
+        name = "my_macro",
+        edition = "2021",
+        srcs = ["my_macro.rs"],
+    )
+
+    rust_library(
+        name = "first",
+        edition = "2021",
+        srcs = ["first.rs"],
+    )
+
+    rust_library(
+        name = "second",
+        edition = "2021",
+        srcs = ["second.rs"],
+        deps = [":first"],
+        proc_macro_deps = [":my_macro"],
+    )
+
+    rust_binary(
+        name = "bin",
+        edition = "2021",
+        srcs = ["bin.rs"],
+        deps = [":second"],
+    )
+
+    second_lib_test(name = "second_lib_test", target_under_test = ":second", target_compatible_with = NOT_WINDOWS)
+    bin_test(name = "bin_test", target_under_test = ":bin", target_compatible_with = NOT_WINDOWS)
+
+def _rmeta_is_propagated_through_custom_rule_test_impl(ctx):
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+
+    # This is the metadata-generating action. It should depend on metadata for the library and, if generate_metadata is set
+    # also depend on metadata for 'wrapper'.
+    rust_action = [act for act in tut.actions if act.mnemonic == "RustcMetadata"][0]
+
+    metadata_inputs = [i for i in rust_action.inputs.to_list() if i.path.endswith(".rmeta")]
+    rlib_inputs = [i for i in rust_action.inputs.to_list() if i.path.endswith(".rlib")]
+
+    seen_wrapper_metadata = False
+    seen_to_wrap_metadata = False
+    for mi in metadata_inputs:
+        if "libwrapper" in mi.path:
+            seen_wrapper_metadata = True
+        if "libto_wrap" in mi.path:
+            seen_to_wrap_metadata = True
+
+    seen_wrapper_rlib = False
+    seen_to_wrap_rlib = False
+    for ri in rlib_inputs:
+        if "libwrapper" in ri.path:
+            seen_wrapper_rlib = True
+        if "libto_wrap" in ri.path:
+            seen_to_wrap_rlib = True
+
+    if ctx.attr.generate_metadata:
+        asserts.true(env, seen_wrapper_metadata, "expected dependency on metadata for 'wrapper' but not found")
+        asserts.false(env, seen_wrapper_rlib, "expected no dependency on object for 'wrapper' but it was found")
+    else:
+        asserts.true(env, seen_wrapper_rlib, "expected dependency on object for 'wrapper' but not found")
+        asserts.false(env, seen_wrapper_metadata, "expected no dependency on metadata for 'wrapper' but it was found")
+
+    asserts.true(env, seen_to_wrap_metadata, "expected dependency on metadata for 'to_wrap' but not found")
+    asserts.false(env, seen_to_wrap_rlib, "expected no dependency on object for 'to_wrap' but it was found")
+
+    return analysistest.end(env)
+
+def _rmeta_is_used_when_building_custom_rule_test_impl(ctx):
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+
+    # This is the custom rule invocation of rustc.
+    rust_action = [act for act in tut.actions if act.mnemonic == "Rustc"][0]
+
+    # We want to check that the action depends on metadata, regardless of ctx.attr.generate_metadata
+    seen_to_wrap_rlib = False
+    seen_to_wrap_rmeta = False
+    for act in rust_action.inputs.to_list():
+        if "libto_wrap" in act.path and act.path.endswith(".rlib"):
+            seen_to_wrap_rlib = True
+        elif "libto_wrap" in act.path and act.path.endswith(".rmeta"):
+            seen_to_wrap_rmeta = True
+
+    asserts.true(env, seen_to_wrap_rmeta, "expected dependency on metadata for 'to_wrap' but not found")
+    asserts.false(env, seen_to_wrap_rlib, "expected no dependency on object for 'to_wrap' but it was found")
+
+    return analysistest.end(env)
+
+rmeta_is_propagated_through_custom_rule_test = analysistest.make(_rmeta_is_propagated_through_custom_rule_test_impl, attrs = {"generate_metadata": attr.bool()}, config_settings = ENABLE_PIPELINING)
+rmeta_is_used_when_building_custom_rule_test = analysistest.make(_rmeta_is_used_when_building_custom_rule_test_impl, config_settings = ENABLE_PIPELINING)
+
+def _rmeta_not_produced_if_pipelining_disabled_test_impl(ctx):
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+
+    rust_action = [act for act in tut.actions if act.mnemonic == "RustcMetadata"]
+    asserts.true(env, len(rust_action) == 0, "expected no metadata to be produced, but found a metadata action")
+
+    return analysistest.end(env)
+
+rmeta_not_produced_if_pipelining_disabled_test = analysistest.make(_rmeta_not_produced_if_pipelining_disabled_test_impl, config_settings = ENABLE_PIPELINING)
+
+def _disable_pipelining_test():
+    rust_library(
+        name = "lib",
+        srcs = ["custom_rule_test/to_wrap.rs"],
+        edition = "2021",
+        disable_pipelining = True,
+    )
+    rmeta_not_produced_if_pipelining_disabled_test(
+        name = "rmeta_not_produced_if_pipelining_disabled_test",
+        target_compatible_with = NOT_WINDOWS,
+        target_under_test = ":lib",
+    )
+
+def _custom_rule_test(generate_metadata, suffix):
+    rust_library(
+        name = "to_wrap" + suffix,
+        crate_name = "to_wrap",
+        srcs = ["custom_rule_test/to_wrap.rs"],
+        edition = "2021",
+    )
+    wrap(
+        name = "wrapper" + suffix,
+        crate_name = "wrapper",
+        target = ":to_wrap" + suffix,
+        generate_metadata = generate_metadata,
+    )
+    rust_library(
+        name = "uses_wrapper" + suffix,
+        srcs = ["custom_rule_test/uses_wrapper.rs"],
+        deps = [":wrapper" + suffix],
+        edition = "2021",
+    )
+
+    rmeta_is_propagated_through_custom_rule_test(
+        name = "rmeta_is_propagated_through_custom_rule_test" + suffix,
+        generate_metadata = generate_metadata,
+        target_compatible_with = NOT_WINDOWS,
+        target_under_test = ":uses_wrapper" + suffix,
+    )
+
+    rmeta_is_used_when_building_custom_rule_test(
+        name = "rmeta_is_used_when_building_custom_rule_test" + suffix,
+        target_compatible_with = NOT_WINDOWS,
+        target_under_test = ":wrapper" + suffix,
+    )
+
+def pipelined_compilation_test_suite(name):
+    """Entry-point macro called from the BUILD file.
+
+    Args:
+        name: Name of the macro.
+    """
+    _pipelined_compilation_test()
+    _disable_pipelining_test()
+    _custom_rule_test(generate_metadata = True, suffix = "_with_metadata")
+    _custom_rule_test(generate_metadata = False, suffix = "_without_metadata")
+
+    native.test_suite(
+        name = name,
+        tests = [
+            ":bin_test",
+            ":second_lib_test",
+            ":rmeta_is_propagated_through_custom_rule_test_with_metadata",
+            ":rmeta_is_propagated_through_custom_rule_test_without_metadata",
+            ":rmeta_is_used_when_building_custom_rule_test_with_metadata",
+            ":rmeta_is_used_when_building_custom_rule_test_without_metadata",
+            ":rmeta_not_produced_if_pipelining_disabled_test",
+        ],
+    )
diff --git a/third_party/rules_rust/test/unit/pipelined_compilation/second.rs b/third_party/rules_rust/test/unit/pipelined_compilation/second.rs
new file mode 100644
index 0000000..b42e0b4
--- /dev/null
+++ b/third_party/rules_rust/test/unit/pipelined_compilation/second.rs
@@ -0,0 +1,7 @@
+use first::first_fun;
+use my_macro::noop;
+
+#[noop]
+pub fn fun() {
+    println!("{}", first_fun())
+}
diff --git a/third_party/rules_rust/test/unit/pipelined_compilation/wrap.bzl b/third_party/rules_rust/test/unit/pipelined_compilation/wrap.bzl
new file mode 100644
index 0000000..11b8480
--- /dev/null
+++ b/third_party/rules_rust/test/unit/pipelined_compilation/wrap.bzl
@@ -0,0 +1,105 @@
+"""A custom rule that wraps a crate called to_wrap."""
+
+# buildifier: disable=bzl-visibility
+load("//rust/private:common.bzl", "rust_common")
+
+# buildifier: disable=bzl-visibility
+load("//rust/private:providers.bzl", "BuildInfo", "CrateInfo", "DepInfo", "DepVariantInfo")
+
+# buildifier: disable=bzl-visibility
+load("//rust/private:rustc.bzl", "rustc_compile_action")
+
+def _wrap_impl(ctx):
+    rs_file = ctx.actions.declare_file(ctx.label.name + "_wrapped.rs")
+    crate_name = ctx.attr.crate_name if ctx.attr.crate_name else ctx.label.name
+    ctx.actions.run_shell(
+        outputs = [rs_file],
+        command = """cat <<EOF > {}
+// crate_name: {}
+use to_wrap::to_wrap;
+
+pub fn wrap() {{
+    to_wrap();
+}}
+EOF
+""".format(rs_file.path, crate_name),
+        mnemonic = "WriteWrapperRsFile",
+    )
+
+    toolchain = ctx.toolchains[Label("//rust:toolchain")]
+
+    # Determine unique hash for this rlib
+    output_hash = repr(hash(rs_file.path))
+    crate_type = "rlib"
+
+    rust_lib_name = "{prefix}{name}-{lib_hash}{extension}".format(
+        prefix = "lib",
+        name = crate_name,
+        lib_hash = output_hash,
+        extension = ".rlib",
+    )
+    rust_metadata_name = "{prefix}{name}-{lib_hash}{extension}".format(
+        prefix = "lib",
+        name = crate_name,
+        lib_hash = output_hash,
+        extension = ".rmeta",
+    )
+
+    tgt = ctx.attr.target
+    deps = [DepVariantInfo(
+        crate_info = tgt[CrateInfo] if CrateInfo in tgt else None,
+        dep_info = tgt[DepInfo] if DepInfo in tgt else None,
+        build_info = tgt[BuildInfo] if BuildInfo in tgt else None,
+        cc_info = tgt[CcInfo] if CcInfo in tgt else None,
+    )]
+
+    rust_lib = ctx.actions.declare_file(rust_lib_name)
+    rust_metadata = None
+    if ctx.attr.generate_metadata:
+        rust_metadata = ctx.actions.declare_file(rust_metadata_name)
+    return rustc_compile_action(
+        ctx = ctx,
+        attr = ctx.attr,
+        toolchain = toolchain,
+        crate_info = rust_common.create_crate_info(
+            name = crate_name,
+            type = crate_type,
+            root = rs_file,
+            srcs = depset([rs_file]),
+            deps = depset(deps),
+            proc_macro_deps = depset([]),
+            aliases = {},
+            output = rust_lib,
+            metadata = rust_metadata,
+            owner = ctx.label,
+            edition = "2018",
+            compile_data = depset([]),
+            rustc_env = {},
+            is_test = False,
+        ),
+        output_hash = output_hash,
+    )
+
+wrap = rule(
+    implementation = _wrap_impl,
+    attrs = {
+        "crate_name": attr.string(),
+        "generate_metadata": attr.bool(default = False),
+        "target": attr.label(),
+        "_cc_toolchain": attr.label(
+            default = Label("@bazel_tools//tools/cpp:current_cc_toolchain"),
+        ),
+        "_error_format": attr.label(
+            default = Label("//:error_format"),
+        ),
+        "_process_wrapper": attr.label(
+            default = Label("//util/process_wrapper"),
+            executable = True,
+            allow_single_file = True,
+            cfg = "exec",
+        ),
+    },
+    toolchains = ["@rules_rust//rust:toolchain", "@bazel_tools//tools/cpp:toolchain_type"],
+    incompatible_use_toolchain_transition = True,
+    fragments = ["cpp"],
+)
diff --git a/third_party/rules_rust/test/unit/proc_macro/BUILD.bazel b/third_party/rules_rust/test/unit/proc_macro/BUILD.bazel
index e2d56c1..1927309 100644
--- a/third_party/rules_rust/test/unit/proc_macro/BUILD.bazel
+++ b/third_party/rules_rust/test/unit/proc_macro/BUILD.bazel
@@ -1,5 +1,13 @@
+load(
+    "//test/unit/proc_macro:leaks_deps/proc_macro_does_not_leak_deps.bzl",
+    "proc_macro_does_not_leak_deps_test_suite",
+)
 load(":proc_macro_test.bzl", "proc_macro_test_suite")
 
 proc_macro_test_suite(
     name = "proc_macro_test_suite",
 )
+
+proc_macro_does_not_leak_deps_test_suite(
+    name = "proc_macro_does_not_leak_deps_test_suite",
+)
diff --git a/third_party/rules_rust/test/unit/proc_macro/leaks_deps/lib/a.rs b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/lib/a.rs
new file mode 100644
index 0000000..7d1a54e
--- /dev/null
+++ b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/lib/a.rs
@@ -0,0 +1,5 @@
+use my_macro::greet;
+
+pub fn use_macro() -> &'static str {
+    greet!()
+}
diff --git a/third_party/rules_rust/test/unit/proc_macro/leaks_deps/lib/b.rs b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/lib/b.rs
new file mode 100644
index 0000000..8fd0518
--- /dev/null
+++ b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/lib/b.rs
@@ -0,0 +1,3 @@
+pub fn hello() -> &'static str {
+    "hello"
+}
diff --git a/third_party/rules_rust/test/unit/proc_macro/leaks_deps/lib/my_macro.rs b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/lib/my_macro.rs
new file mode 100644
index 0000000..f8b6f2a
--- /dev/null
+++ b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/lib/my_macro.rs
@@ -0,0 +1,7 @@
+use b::hello;
+use proc_macro::{Literal, TokenStream, TokenTree};
+
+#[proc_macro]
+pub fn greet(_item: TokenStream) -> TokenStream {
+    TokenTree::Literal(Literal::string(hello())).into()
+}
diff --git a/third_party/rules_rust/test/unit/proc_macro/leaks_deps/native/BUILD.bazel b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/native/BUILD.bazel
new file mode 100644
index 0000000..988cfa3
--- /dev/null
+++ b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/native/BUILD.bazel
@@ -0,0 +1,8 @@
+load("@rules_cc//cc:defs.bzl", "cc_library")
+
+package(default_visibility = ["//test:__subpackages__"])
+
+cc_library(
+    name = "native",
+    srcs = ["native.cc"],
+)
diff --git a/third_party/rules_rust/test/unit/proc_macro/leaks_deps/native/native.cc b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/native/native.cc
new file mode 100644
index 0000000..04db727
--- /dev/null
+++ b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/native/native.cc
@@ -0,0 +1,5 @@
+#include <stdint.h>
+
+extern "C" {
+int32_t forty_two_from_cc() { return 42; }
+}
diff --git a/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_definition.rs b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_definition.rs
new file mode 100644
index 0000000..9fcad75
--- /dev/null
+++ b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_definition.rs
@@ -0,0 +1,7 @@
+use proc_macro::TokenStream;
+use proc_macro_dep::forty_two;
+
+#[proc_macro]
+pub fn make_forty_two(_item: TokenStream) -> TokenStream {
+    forty_two().to_string().parse().unwrap()
+}
diff --git a/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_definition_with_native_dependency.rs b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_definition_with_native_dependency.rs
new file mode 100644
index 0000000..a4e368e
--- /dev/null
+++ b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_definition_with_native_dependency.rs
@@ -0,0 +1,7 @@
+use proc_macro::TokenStream;
+use proc_macro_dep_with_native_dep::forty_two;
+
+#[proc_macro]
+pub fn make_forty_two_from_native_dep(_item: TokenStream) -> TokenStream {
+    forty_two().to_string().parse().unwrap()
+}
diff --git a/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_dep/BUILD.bazel b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_dep/BUILD.bazel
new file mode 100644
index 0000000..8bee950
--- /dev/null
+++ b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_dep/BUILD.bazel
@@ -0,0 +1,16 @@
+load("//rust:defs.bzl", "rust_library")
+
+package(default_visibility = ["//test:__subpackages__"])
+
+rust_library(
+    name = "proc_macro_dep",
+    srcs = ["proc_macro_dep.rs"],
+    edition = "2018",
+)
+
+rust_library(
+    name = "proc_macro_dep_with_native_dep",
+    srcs = ["proc_macro_dep_with_native_dep.rs"],
+    edition = "2018",
+    deps = ["//test/unit/proc_macro/leaks_deps/native"],
+)
diff --git a/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_dep/proc_macro_dep.rs b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_dep/proc_macro_dep.rs
new file mode 100644
index 0000000..6d2a037
--- /dev/null
+++ b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_dep/proc_macro_dep.rs
@@ -0,0 +1,3 @@
+pub fn forty_two() -> i32 {
+    42
+}
diff --git a/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_dep/proc_macro_dep_with_native_dep.rs b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_dep/proc_macro_dep_with_native_dep.rs
new file mode 100644
index 0000000..dd925eb
--- /dev/null
+++ b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_dep/proc_macro_dep_with_native_dep.rs
@@ -0,0 +1,7 @@
+extern "C" {
+    pub fn forty_two_from_cc() -> i32;
+}
+
+pub fn forty_two() -> i32 {
+    unsafe { forty_two_from_cc() }
+}
diff --git a/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_does_not_leak_deps.bzl b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_does_not_leak_deps.bzl
new file mode 100644
index 0000000..db86506
--- /dev/null
+++ b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_does_not_leak_deps.bzl
@@ -0,0 +1,148 @@
+"""Unittest to verify proc-macro targets"""
+
+load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
+load("//rust:defs.bzl", "rust_library", "rust_proc_macro", "rust_test")
+
+def _proc_macro_does_not_leak_deps_impl(ctx):
+    env = analysistest.begin(ctx)
+    actions = analysistest.target_under_test(env).actions
+    rustc_action = None
+    for action in actions:
+        if action.mnemonic == "Rustc":
+            rustc_action = action
+            break
+
+    asserts.false(env, rustc_action == None)
+
+    # Our test target has a dependency on "proc_macro_dep" via a rust_proc_macro target,
+    # so the proc_macro_dep rlib should not appear as an input to the Rustc action, nor as -Ldependency on the command line.
+    proc_macro_dep_inputs = [i for i in rustc_action.inputs.to_list() if "proc_macro_dep" in i.path]
+    proc_macro_dep_args = [arg for arg in rustc_action.argv if "proc_macro_dep" in arg]
+
+    asserts.equals(env, 0, len(proc_macro_dep_inputs))
+    asserts.equals(env, 0, len(proc_macro_dep_args))
+
+    # Our test target depends on proc_macro_dep:native directly, as well as transitively through the
+    # proc_macro. The proc_macro should not leak its dependency, so we should only get the "native"
+    # library once on the command line.
+    native_deps = [arg for arg in rustc_action.argv if arg.startswith("-Clink-arg=-lnative")]
+    asserts.equals(env, 1, len(native_deps))
+
+    return analysistest.end(env)
+
+def _proc_macro_does_not_leak_deps_test():
+    rust_proc_macro(
+        name = "proc_macro_definition",
+        srcs = ["leaks_deps/proc_macro_definition.rs"],
+        edition = "2018",
+        deps = ["//test/unit/proc_macro/leaks_deps/proc_macro_dep"],
+    )
+
+    rust_proc_macro(
+        name = "proc_macro_with_native_dep",
+        srcs = ["leaks_deps/proc_macro_definition_with_native_dependency.rs"],
+        edition = "2018",
+        deps = [
+            "//test/unit/proc_macro/leaks_deps/proc_macro_dep:proc_macro_dep_with_native_dep",
+            "//test/unit/proc_macro/leaks_deps/native",
+        ],
+    )
+
+    rust_test(
+        name = "deps_not_leaked",
+        srcs = ["leaks_deps/proc_macro_user.rs"],
+        edition = "2018",
+        deps = [
+            "//test/unit/proc_macro/leaks_deps/native",
+        ],
+        proc_macro_deps = [
+            ":proc_macro_definition",
+            ":proc_macro_with_native_dep",
+        ],
+    )
+
+    proc_macro_does_not_leak_deps_test(
+        name = "proc_macro_does_not_leak_deps_test",
+        target_under_test = ":deps_not_leaked",
+    )
+
+proc_macro_does_not_leak_deps_test = analysistest.make(_proc_macro_does_not_leak_deps_impl)
+
+# Tests that a lib_a -> proc_macro -> lib_b does not propagate lib_b to the inputs of lib_a
+def _proc_macro_does_not_leak_lib_deps_impl(ctx):
+    env = analysistest.begin(ctx)
+    actions = analysistest.target_under_test(env).actions
+    rustc_actions = []
+    for action in actions:
+        if action.mnemonic == "Rustc" or action.mnemonic == "RustcMetadata":
+            rustc_actions.append(action)
+
+    # We should have a RustcMetadata and a Rustc action.
+    asserts.true(env, len(rustc_actions) == 2, "expected 2 actions, got %d" % len(rustc_actions))
+
+    for rustc_action in rustc_actions:
+        # lib :a has a dependency on :my_macro via a rust_proc_macro target.
+        # lib :b (which is a dependency of :my_macro) should not appear in the inputs of :a
+        b_inputs = [i for i in rustc_action.inputs.to_list() if "libb" in i.path]
+        b_args = [arg for arg in rustc_action.argv if "libb" in arg]
+
+        asserts.equals(env, 0, len(b_inputs))
+        asserts.equals(env, 0, len(b_args))
+
+    return analysistest.end(env)
+
+def _proc_macro_does_not_leak_lib_deps_test():
+    rust_library(
+        name = "b",
+        srcs = ["leaks_deps/lib/b.rs"],
+        edition = "2018",
+    )
+
+    rust_proc_macro(
+        name = "my_macro",
+        srcs = ["leaks_deps/lib/my_macro.rs"],
+        edition = "2018",
+        deps = [
+            ":b",
+        ],
+    )
+
+    rust_library(
+        name = "a",
+        srcs = ["leaks_deps/lib/a.rs"],
+        edition = "2018",
+        proc_macro_deps = [
+            ":my_macro",
+        ],
+    )
+
+    NOT_WINDOWS = select({
+        "@platforms//os:linux": [],
+        "@platforms//os:macos": [],
+        "//conditions:default": ["@platforms//:incompatible"],
+    })
+
+    proc_macro_does_not_leak_lib_deps_test(
+        name = "proc_macro_does_not_leak_lib_deps_test",
+        target_under_test = ":a",
+        target_compatible_with = NOT_WINDOWS,
+    )
+
+proc_macro_does_not_leak_lib_deps_test = analysistest.make(_proc_macro_does_not_leak_lib_deps_impl, config_settings = {"@//rust/settings:pipelined_compilation": True})
+
+def proc_macro_does_not_leak_deps_test_suite(name):
+    """Entry-point macro called from the BUILD file.
+
+    Args:
+        name: Name of the macro.
+    """
+    _proc_macro_does_not_leak_deps_test()
+    _proc_macro_does_not_leak_lib_deps_test()
+
+    native.test_suite(
+        name = name,
+        tests = [
+            ":proc_macro_does_not_leak_deps_test",
+            ":proc_macro_does_not_leak_lib_deps_test",
+        ],
+    )
diff --git a/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_user.rs b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_user.rs
new file mode 100644
index 0000000..c038dd5
--- /dev/null
+++ b/third_party/rules_rust/test/unit/proc_macro/leaks_deps/proc_macro_user.rs
@@ -0,0 +1,17 @@
+use proc_macro_definition::make_forty_two;
+use proc_macro_with_native_dep::make_forty_two_from_native_dep;
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn test_forty_two() {
+        assert_eq!(make_forty_two!(), 42);
+    }
+
+    #[test]
+    fn test_forty_two_from_native_dep() {
+        assert_eq!(make_forty_two_from_native_dep!(), 42);
+    }
+}
diff --git a/third_party/rules_rust/test/unit/rust_test_outputs_are_in_subdirectory/BUILD.bazel b/third_party/rules_rust/test/unit/rust_test_outputs_are_in_subdirectory/BUILD.bazel
new file mode 100644
index 0000000..bf00a3a
--- /dev/null
+++ b/third_party/rules_rust/test/unit/rust_test_outputs_are_in_subdirectory/BUILD.bazel
@@ -0,0 +1,4 @@
+load(":rust_test_outputs.bzl", "rust_test_outputs_test_suite")
+
+############################ UNIT TESTS #############################
+rust_test_outputs_test_suite(name = "rust_test_outputs_test_suite")
diff --git a/third_party/rules_rust/test/unit/rust_test_outputs_are_in_subdirectory/foo.rs b/third_party/rules_rust/test/unit/rust_test_outputs_are_in_subdirectory/foo.rs
new file mode 100644
index 0000000..da0f5d9
--- /dev/null
+++ b/third_party/rules_rust/test/unit/rust_test_outputs_are_in_subdirectory/foo.rs
@@ -0,0 +1 @@
+pub fn main() {}
diff --git a/third_party/rules_rust/test/unit/rust_test_outputs_are_in_subdirectory/rust_test_outputs.bzl b/third_party/rules_rust/test/unit/rust_test_outputs_are_in_subdirectory/rust_test_outputs.bzl
new file mode 100644
index 0000000..8c0f480
--- /dev/null
+++ b/third_party/rules_rust/test/unit/rust_test_outputs_are_in_subdirectory/rust_test_outputs.bzl
@@ -0,0 +1,64 @@
+"""Tests for rust_test outputs directory."""
+
+load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
+load("//rust:defs.bzl", "rust_binary", "rust_common", "rust_test")
+
+def _rust_test_outputs_test(ctx):
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+
+    output = tut[rust_common.crate_info].output
+
+    asserts.true(env, output.dirname.split("/")[-1].startswith("test-"))
+
+    return analysistest.end(env)
+
+rust_test_outputs_test = analysistest.make(
+    _rust_test_outputs_test,
+)
+
+def _rust_test_outputs_targets():
+    rust_binary(
+        name = "bin_outputs",
+        srcs = ["foo.rs"],
+        edition = "2018",
+    )
+
+    rust_test(
+        name = "test_outputs_with_srcs",
+        srcs = ["foo.rs"],
+        edition = "2018",
+    )
+
+    rust_test_outputs_test(
+        name = "rust_test_outputs_using_srcs_attr",
+        target_under_test = ":test_outputs_with_srcs",
+    )
+
+    rust_test(
+        name = "test_outputs_with_crate",
+        crate = "bin_outputs",
+        edition = "2018",
+    )
+
+    rust_test_outputs_test(
+        name = "rust_test_outputs_using_crate_attr",
+        target_under_test = ":test_outputs_with_crate",
+    )
+
+def rust_test_outputs_test_suite(name):
+    """Entry-point macro called from the BUILD file.
+
+    Args:
+      name: Name of the macro.
+    """
+
+    _rust_test_outputs_targets()
+
+    native.test_suite(
+        name = name,
+        tests = [
+            ":rust_test_outputs_using_srcs_attr",
+            ":rust_test_outputs_using_crate_attr",
+        ],
+    )
diff --git a/third_party/rules_rust/test/unit/rustdoc/adder.rs b/third_party/rules_rust/test/unit/rustdoc/adder.rs
new file mode 100644
index 0000000..7211f1a
--- /dev/null
+++ b/third_party/rules_rust/test/unit/rustdoc/adder.rs
@@ -0,0 +1,18 @@
+// Copyright 2022 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+/// Increments the input.
+pub fn inc(n: u32) -> u32 {
+    n + 1
+}
diff --git a/third_party/rules_rust/test/unit/rustdoc/rustdoc_lib.rs b/third_party/rules_rust/test/unit/rustdoc/rustdoc_lib.rs
index f7b4652..6ab3234 100644
--- a/third_party/rules_rust/test/unit/rustdoc/rustdoc_lib.rs
+++ b/third_party/rules_rust/test/unit/rustdoc/rustdoc_lib.rs
@@ -9,6 +9,11 @@
 /// fn answer() -> u32 { 42 }
 /// assert_eq!(answer(), 42);
 /// ```
+///
+/// ```
+/// use adder::inc;
+/// assert_eq!(inc(41), 42);
+/// ```
 #[cfg(not(feature = "with_proc_macro"))]
 pub fn answer() -> u32 {
     42
diff --git a/third_party/rules_rust/test/unit/rustdoc/rustdoc_unit_test.bzl b/third_party/rules_rust/test/unit/rustdoc/rustdoc_unit_test.bzl
index 6d7a6ed..e6a122a 100644
--- a/third_party/rules_rust/test/unit/rustdoc/rustdoc_unit_test.bzl
+++ b/third_party/rules_rust/test/unit/rustdoc/rustdoc_unit_test.bzl
@@ -74,15 +74,17 @@
 rustdoc_for_bin_with_transitive_proc_macro_test = analysistest.make(_rustdoc_for_bin_with_transitive_proc_macro_test_impl)
 rustdoc_for_lib_with_cc_lib_test = analysistest.make(_rustdoc_for_lib_with_cc_lib_test_impl)
 
-def _target_maker(rule_fn, name, **kwargs):
+def _target_maker(rule_fn, name, rustdoc_deps = [], **kwargs):
     rule_fn(
         name = name,
+        edition = "2018",
         **kwargs
     )
 
     rust_test(
         name = "{}_test".format(name),
         crate = ":{}".format(name),
+        edition = "2018",
     )
 
     rust_doc(
@@ -93,9 +95,16 @@
     rust_doc_test(
         name = "{}_doctest".format(name),
         crate = ":{}".format(name),
+        deps = rustdoc_deps,
     )
 
 def _define_targets():
+    rust_library(
+        name = "adder",
+        srcs = ["adder.rs"],
+        edition = "2018",
+    )
+
     _target_maker(
         rust_binary,
         name = "bin",
@@ -106,19 +115,20 @@
         rust_library,
         name = "lib",
         srcs = ["rustdoc_lib.rs"],
+        rustdoc_deps = [":adder"],
     )
 
     _target_maker(
         rust_proc_macro,
         name = "rustdoc_proc_macro",
         srcs = ["rustdoc_proc_macro.rs"],
-        edition = "2018",
     )
 
     _target_maker(
         rust_library,
         name = "lib_with_proc_macro",
         srcs = ["rustdoc_lib.rs"],
+        rustdoc_deps = [":adder"],
         proc_macro_deps = [":rustdoc_proc_macro"],
         crate_features = ["with_proc_macro"],
     )
@@ -142,6 +152,7 @@
         rust_library,
         name = "lib_with_cc",
         srcs = ["rustdoc_lib.rs"],
+        rustdoc_deps = [":adder"],
         crate_features = ["with_cc"],
         deps = [":cc_lib"],
     )
diff --git a/third_party/rules_rust/test/unit/stamp/stamp.rs b/third_party/rules_rust/test/unit/stamp/stamp.rs
index cb80052..ec98749 100644
--- a/third_party/rules_rust/test/unit/stamp/stamp.rs
+++ b/third_party/rules_rust/test/unit/stamp/stamp.rs
@@ -12,26 +12,55 @@
 mod test {
     use super::*;
 
-    #[cfg(feature = "force_stamp")]
+    #[cfg(any(
+        feature = "always_stamp",
+        feature = "consult_cmdline_value_is_true",
+        feature = "always_stamp_build_flag_true",
+        feature = "always_stamp_build_flag_false"
+    ))]
     #[test]
-    fn stamp_resolved() {
+    fn stamp_resolved_for_library() {
         assert!(!build_timestamp().contains("BUILD_TIMESTAMP"));
         assert!(build_timestamp().chars().all(char::is_numeric));
+
+        assert!(!build_user().contains("BUILD_USER"));
     }
 
-    #[cfg(feature = "skip_stamp")]
+    #[cfg(any(
+        feature = "always_stamp",
+        feature = "consult_cmdline_value_is_true",
+        feature = "always_stamp_build_flag_true",
+        feature = "always_stamp_build_flag_false"
+    ))]
     #[test]
-    fn stamp_not_resolved() {
+    fn stamp_resolved_for_test() {
+        assert!(!env!("BUILD_TIMESTAMP").contains("BUILD_TIMESTAMP"));
+        assert!(env!("BUILD_TIMESTAMP").chars().all(char::is_numeric));
+
+        assert!(!env!("BUILD_USER").contains("BUILD_USER"));
+    }
+
+    #[cfg(any(
+        feature = "never_stamp",
+        feature = "consult_cmdline_value_is_false",
+        feature = "never_stamp_build_flag_true",
+        feature = "never_stamp_build_flag_false"
+    ))]
+    #[test]
+    fn stamp_not_resolved_for_library() {
         assert!(build_timestamp().contains("BUILD_TIMESTAMP"));
+        assert!(build_user().contains("BUILD_USER"));
     }
 
+    #[cfg(any(
+        feature = "never_stamp",
+        feature = "consult_cmdline_value_is_false",
+        feature = "never_stamp_build_flag_true",
+        feature = "never_stamp_build_flag_false"
+    ))]
     #[test]
-    fn lib_volatile_stamp_matches() {
-        assert_eq!(build_timestamp(), env!("BUILD_TIMESTAMP"));
-    }
-
-    #[test]
-    fn lib_stable_stamp_not_stamped() {
-        assert_eq!(build_user(), "{BUILD_USER}");
+    fn stamp_not_resolved_for_test() {
+        assert!(env!("BUILD_TIMESTAMP").contains("BUILD_TIMESTAMP"));
+        assert!(env!("BUILD_USER").contains("BUILD_USER"));
     }
 }
diff --git a/third_party/rules_rust/test/unit/stamp/stamp_main.rs b/third_party/rules_rust/test/unit/stamp/stamp_main.rs
index 0e8b963..ae547c4 100644
--- a/third_party/rules_rust/test/unit/stamp/stamp_main.rs
+++ b/third_party/rules_rust/test/unit/stamp/stamp_main.rs
@@ -1,10 +1,47 @@
-#[cfg(feature = "force_stamp")]
-use force_stamp::build_timestamp;
+#[cfg(feature = "always_stamp")]
+use default_with_build_flag_on_lib::build_timestamp;
+#[cfg(feature = "always_stamp")]
+use default_with_build_flag_on_lib::build_user;
 
-#[cfg(feature = "skip_stamp")]
-use skip_stamp::build_timestamp;
+#[cfg(feature = "never_stamp")]
+use default_with_build_flag_off_lib::build_timestamp;
+#[cfg(feature = "never_stamp")]
+use default_with_build_flag_off_lib::build_user;
+
+#[cfg(feature = "always_stamp_build_flag_true")]
+use always_stamp_build_flag_true_lib::build_timestamp;
+#[cfg(feature = "always_stamp_build_flag_true")]
+use always_stamp_build_flag_true_lib::build_user;
+
+#[cfg(feature = "always_stamp_build_flag_false")]
+use always_stamp_build_flag_false_lib::build_timestamp;
+#[cfg(feature = "always_stamp_build_flag_false")]
+use always_stamp_build_flag_false_lib::build_user;
+
+#[cfg(feature = "never_stamp_build_flag_true")]
+use never_stamp_build_flag_true_lib::build_timestamp;
+#[cfg(feature = "never_stamp_build_flag_true")]
+use never_stamp_build_flag_true_lib::build_user;
+
+#[cfg(feature = "never_stamp_build_flag_false")]
+use never_stamp_build_flag_false_lib::build_timestamp;
+#[cfg(feature = "never_stamp_build_flag_false")]
+use never_stamp_build_flag_false_lib::build_user;
+
+#[cfg(feature = "consult_cmdline_value_is_true")]
+use consult_cmdline_value_is_true_lib::build_timestamp;
+#[cfg(feature = "consult_cmdline_value_is_true")]
+use consult_cmdline_value_is_true_lib::build_user;
+
+#[cfg(feature = "consult_cmdline_value_is_false")]
+use consult_cmdline_value_is_false_lib::build_timestamp;
+#[cfg(feature = "consult_cmdline_value_is_false")]
+use consult_cmdline_value_is_false_lib::build_user;
 
 fn main() {
     println!("bin stamp: {}", env!("BUILD_TIMESTAMP"));
     println!("lib stamp: {}", build_timestamp());
+
+    println!("bin stamp: {}", env!("BUILD_USER"));
+    println!("lib stamp: {}", build_user());
 }
diff --git a/third_party/rules_rust/test/unit/stamp/stamp_test.bzl b/third_party/rules_rust/test/unit/stamp/stamp_test.bzl
index 18251e1..871808d 100644
--- a/third_party/rules_rust/test/unit/stamp/stamp_test.bzl
+++ b/third_party/rules_rust/test/unit/stamp/stamp_test.bzl
@@ -1,7 +1,7 @@
 """Unittest to verify workspace status stamping is applied to environment files"""
 
 load("@bazel_skylib//lib:unittest.bzl", "analysistest")
-load("//rust:defs.bzl", "rust_binary", "rust_library", "rust_test")
+load("//rust:defs.bzl", "rust_binary", "rust_common", "rust_library", "rust_test")
 load(
     "//test/unit:common.bzl",
     "assert_action_mnemonic",
@@ -9,112 +9,307 @@
     "assert_argv_contains_not",
 )
 
-def _stamp_test_impl(ctx, force_stamp):
+_STAMP_ATTR_VALUES = (0, 1, -1)
+_BUILD_FLAG_VALUES = ("true", "false")
+
+def _assert_stamped(env, action):
+    assert_argv_contains(env, action, "--volatile-status-file")
+    assert_argv_contains(env, action, "bazel-out/volatile-status.txt")
+
+    assert_argv_contains(env, action, "--stable-status-file")
+    assert_argv_contains(env, action, "bazel-out/stable-status.txt")
+
+def _assert_not_stamped(env, action):
+    assert_argv_contains_not(env, action, "--volatile-status-file")
+    assert_argv_contains_not(env, action, "bazel-out/volatile-status.txt")
+
+    assert_argv_contains_not(env, action, "--stable-status-file")
+    assert_argv_contains_not(env, action, "bazel-out/stable-status.txt")
+
+def _stamp_build_flag_test_impl(ctx, flag_value):
     env = analysistest.begin(ctx)
     target = analysistest.target_under_test(env)
 
     action = target.actions[0]
     assert_action_mnemonic(env, action, "Rustc")
 
-    if force_stamp:
-        assert_argv_contains(env, action, "--volatile-status-file")
-        assert_argv_contains(env, action, "bazel-out/volatile-status.txt")
-    else:
-        assert_argv_contains_not(env, action, "--volatile-status-file")
-        assert_argv_contains_not(env, action, "bazel-out/volatile-status.txt")
+    is_test = target[rust_common.crate_info].is_test
+    is_bin = target[rust_common.crate_info].type == "bin"
 
-    # Note that use of stable status invalidates targets any time it's updated.
-    # This is undesirable behavior so it's intended to be excluded from the
-    # Rustc action. In general this should be fine as other rules can be used
-    # to produce template files for stamping in this action (ie. genrule).
-    assert_argv_contains_not(env, action, "bazel-out/stable-status.txt")
+    # bazel build --stamp should lead to stamped rust binaries, but not
+    # libraries and tests.
+    if flag_value:
+        if is_bin and not is_test:
+            _assert_stamped(env, action)
+        else:
+            _assert_not_stamped(env, action)
+    else:
+        _assert_not_stamped(env, action)
 
     return analysistest.end(env)
 
-def _force_stamp_test_impl(ctx):
-    return _stamp_test_impl(ctx, True)
+def _stamp_build_flag_is_true_impl(ctx):
+    return _stamp_build_flag_test_impl(ctx, True)
 
-def _skip_stamp_test_impl(ctx):
-    return _stamp_test_impl(ctx, False)
+def _stamp_build_flag_is_false_impl(ctx):
+    return _stamp_build_flag_test_impl(ctx, False)
 
-force_stamp_test = analysistest.make(_force_stamp_test_impl)
-skip_stamp_test = analysistest.make(_skip_stamp_test_impl)
+stamp_build_flag_is_true_test = analysistest.make(
+    _stamp_build_flag_is_true_impl,
+    config_settings = {
+        "//command_line_option:stamp": True,
+    },
+)
 
-_STAMP_VALUES = (0, 1)
+stamp_build_flag_is_false_test = analysistest.make(
+    _stamp_build_flag_is_false_impl,
+    config_settings = {
+        "//command_line_option:stamp": False,
+    },
+)
 
-def _define_test_targets():
-    for stamp_value in _STAMP_VALUES:
-        if stamp_value == 1:
-            name = "force_stamp"
-            features = ["force_stamp"]
+def _build_flag_tests():
+    tests = []
+    for stamp_value in _BUILD_FLAG_VALUES:
+        if stamp_value == "true":
+            name = "default_with_build_flag_on"
+            features = ["always_stamp"]
+            build_flag_stamp_test = stamp_build_flag_is_true_test
         else:
-            name = "skip_stamp"
-            features = ["skip_stamp"]
+            name = "default_with_build_flag_off"
+            features = ["never_stamp"]
+            build_flag_stamp_test = stamp_build_flag_is_false_test
 
         rust_library(
-            name = name,
+            name = "{}_lib".format(name),
             srcs = ["stamp.rs"],
+            rustc_env_files = ["stamp.env"],
             edition = "2018",
-            rustc_env_files = [":stamp.env"],
-            stamp = stamp_value,
-            crate_features = features,
-        )
-
-        rust_test(
-            name = "{}_unit_test".format(name),
-            crate = ":{}".format(name),
-            rustc_env_files = [":stamp.env"],
-            stamp = stamp_value,
-            crate_features = features,
+            # Building with --stamp should not affect rust libraries
+            crate_features = ["never_stamp"],
         )
 
         rust_binary(
             name = "{}_bin".format(name),
             srcs = ["stamp_main.rs"],
-            deps = [":{}".format(name)],
-            rustc_env_files = [":stamp.env"],
-            stamp = stamp_value,
+            edition = "2018",
+            deps = ["{}_lib".format(name)],
+            rustc_env_files = ["stamp.env"],
             crate_features = features,
         )
 
+        rust_test(
+            name = "{}_test".format(name),
+            crate = "{}_lib".format(name),
+            edition = "2018",
+            rustc_env_files = ["stamp.env"],
+            # Building with --stamp should not affect tests
+            crate_features = ["never_stamp"],
+        )
+
+        build_flag_stamp_test(
+            name = "lib_{}_test".format(name),
+            target_under_test = "{}_lib".format(name),
+        )
+        build_flag_stamp_test(
+            name = "bin_{}_test".format(name),
+            target_under_test = "{}_bin".format(name),
+        )
+
+        build_flag_stamp_test(
+            name = "test_{}_test".format(name),
+            target_under_test = "{}_test".format(name),
+        )
+
+        tests.extend([
+            "lib_{}_test".format(name),
+            "bin_{}_test".format(name),
+            "test_{}_test".format(name),
+        ])
+    return tests
+
+def _attribute_stamp_test_impl(ctx, attribute_value, build_flag_value):
+    env = analysistest.begin(ctx)
+    target = analysistest.target_under_test(env)
+
+    action = target.actions[0]
+    assert_action_mnemonic(env, action, "Rustc")
+
+    if attribute_value == 1:
+        _assert_stamped(env, action)
+    elif attribute_value == 0:
+        _assert_not_stamped(env, action)
+    elif build_flag_value:
+        _assert_stamped(env, action)
+    else:
+        _assert_not_stamped(env, action)
+
+    return analysistest.end(env)
+
+def _always_stamp_build_flag_is_true_test_impl(ctx):
+    return _attribute_stamp_test_impl(ctx, attribute_value = 1, build_flag_value = True)
+
+def _always_stamp_build_flag_is_false_test_impl(ctx):
+    return _attribute_stamp_test_impl(ctx, attribute_value = 1, build_flag_value = False)
+
+def _never_stamp_build_flag_is_true_test_impl(ctx):
+    return _attribute_stamp_test_impl(ctx, attribute_value = 0, build_flag_value = True)
+
+def _never_stamp_build_flag_is_false_test_impl(ctx):
+    return _attribute_stamp_test_impl(ctx, attribute_value = 0, build_flag_value = False)
+
+def _consult_build_flag_value_is_true_test_impl(ctx):
+    return _attribute_stamp_test_impl(ctx, attribute_value = -1, build_flag_value = True)
+
+def _consult_build_flag_value_is_false_test_impl(ctx):
+    return _attribute_stamp_test_impl(ctx, attribute_value = -1, build_flag_value = False)
+
+always_stamp_test_build_flag_is_true_test = analysistest.make(
+    _always_stamp_build_flag_is_true_test_impl,
+    config_settings = {
+        "//command_line_option:stamp": True,
+    },
+)
+
+always_stamp_test_build_flag_is_false_test = analysistest.make(
+    _always_stamp_build_flag_is_false_test_impl,
+    config_settings = {
+        "//command_line_option:stamp": False,
+    },
+)
+
+never_stamp_test_build_flag_is_true_test = analysistest.make(
+    _never_stamp_build_flag_is_true_test_impl,
+    config_settings = {
+        "//command_line_option:stamp": True,
+    },
+)
+
+never_stamp_test_build_flag_is_false_test = analysistest.make(
+    _never_stamp_build_flag_is_false_test_impl,
+    config_settings = {
+        "//command_line_option:stamp": False,
+    },
+)
+
+consult_build_flag_value_is_true_test = analysistest.make(
+    _consult_build_flag_value_is_true_test_impl,
+    config_settings = {
+        "//command_line_option:stamp": True,
+    },
+)
+
+consult_build_flag_value_is_false_test = analysistest.make(
+    _consult_build_flag_value_is_false_test_impl,
+    config_settings = {
+        "//command_line_option:stamp": False,
+    },
+)
+
+def _stamp_attribute_tests():
+    tests = []
+
+    for stamp_value in _STAMP_ATTR_VALUES:
+        for flag_value in _BUILD_FLAG_VALUES:
+            if stamp_value == 1:
+                name = "always_stamp_build_flag_{}".format(flag_value)
+                features = ["always_stamp_build_flag_{}".format(flag_value)]
+                stamp_attr_test = always_stamp_test_build_flag_is_true_test if flag_value == "true" else always_stamp_test_build_flag_is_false_test
+            elif stamp_value == 0:
+                name = "never_stamp_build_flag_{}".format(flag_value)
+                features = ["never_stamp_build_flag_{}".format(flag_value)]
+                stamp_attr_test = never_stamp_test_build_flag_is_true_test if flag_value == "true" else never_stamp_test_build_flag_is_false_test
+            else:
+                name = "consult_cmdline_value_is_{}".format(flag_value)
+                features = ["consult_cmdline_value_is_{}".format(flag_value)]
+                stamp_attr_test = consult_build_flag_value_is_true_test if flag_value == "true" else consult_build_flag_value_is_false_test
+
+            rust_library(
+                name = "{}_lib".format(name),
+                srcs = ["stamp.rs"],
+                edition = "2018",
+                rustc_env_files = [":stamp.env"],
+                stamp = stamp_value,
+                crate_features = features,
+            )
+
+            rust_test(
+                name = "{}_unit_test".format(name),
+                crate = ":{}_lib".format(name),
+                edition = "2018",
+                rustc_env_files = [":stamp.env"],
+                stamp = stamp_value,
+                crate_features = features,
+                # We disable this test so that it doesn't try to run with bazel test //test/...
+                # The reason for this is because then it is sensitive to the --stamp value which
+                # we override in the unit test implementation.
+                tags = ["manual"],
+            )
+
+            rust_binary(
+                name = "{}_bin".format(name),
+                srcs = ["stamp_main.rs"],
+                edition = "2018",
+                deps = [":{}_lib".format(name)],
+                rustc_env_files = [":stamp.env"],
+                stamp = stamp_value,
+                crate_features = features,
+            )
+
+            stamp_attr_test(
+                name = "lib_{}_test".format(name),
+                target_under_test = "{}_lib".format(name),
+            )
+            stamp_attr_test(
+                name = "bin_{}_test".format(name),
+                target_under_test = "{}_bin".format(name),
+            )
+
+            stamp_attr_test(
+                name = "test_{}_test".format(name),
+                target_under_test = "{}_unit_test".format(name),
+            )
+
+            tests.extend([
+                "lib_{}_test".format(name),
+                "bin_{}_test".format(name),
+                "test_{}_test".format(name),
+            ])
+    return tests
+
+def _process_wrapper_with_stamp_test_impl(ctx):
+    env = analysistest.begin(ctx)
+    target = analysistest.target_under_test(env)
+
+    action = target.actions[0]
+    assert_action_mnemonic(env, action, "Rustc")
+
+    _assert_not_stamped(env, action)
+
+    return analysistest.end(env)
+
+process_wrapper_with_stamp_test = analysistest.make(
+    _process_wrapper_with_stamp_test_impl,
+    config_settings = {
+        "//command_line_option:stamp": True,
+    },
+)
+
+def _process_wrapper_tests():
+    process_wrapper_with_stamp_test(
+        name = "test_process_wrapper_with_stamp_test",
+        target_under_test = "//util/process_wrapper:process_wrapper",
+    )
+
+    return ["test_process_wrapper_with_stamp_test"]
+
 def stamp_test_suite(name):
     """Entry-point macro called from the BUILD file.
 
     Args:
         name (str): Name of the macro.
     """
-    _define_test_targets()
-
-    tests = []
-
-    for stamp_value in _STAMP_VALUES:
-        if stamp_value == 1:
-            test_name = "force_stamp"
-            stamp_test = force_stamp_test
-        else:
-            test_name = "skip_stamp"
-            stamp_test = skip_stamp_test
-
-        stamp_test(
-            name = "lib_{}_test".format(test_name),
-            target_under_test = Label("//test/unit/stamp:{}".format(test_name)),
-        )
-
-        stamp_test(
-            name = "test_{}_test".format(test_name),
-            target_under_test = Label("//test/unit/stamp:{}_unit_test".format(test_name)),
-        )
-
-        stamp_test(
-            name = "bin_{}_test".format(test_name),
-            target_under_test = Label("//test/unit/stamp:{}_bin".format(test_name)),
-        )
-
-        tests.extend([
-            "lib_{}_test".format(test_name),
-            "test_{}_test".format(test_name),
-            "bin_{}_test".format(test_name),
-        ])
+    tests = _build_flag_tests() + _stamp_attribute_tests() + _process_wrapper_tests()
 
     native.test_suite(
         name = name,
diff --git a/third_party/rules_rust/test/unit/stdlib/stdlib.bzl b/third_party/rules_rust/test/unit/stdlib/stdlib.bzl
index 9d83190..6a46634 100644
--- a/third_party/rules_rust/test/unit/stdlib/stdlib.bzl
+++ b/third_party/rules_rust/test/unit/stdlib/stdlib.bzl
@@ -65,6 +65,7 @@
     rust_library(
         name = "some_rlib",
         srcs = ["some_rlib.rs"],
+        edition = "2018",
     )
 
     libstd_ordering_test(
diff --git a/third_party/rules_rust/test/unit/toolchain_make_variables/BUILD.bazel b/third_party/rules_rust/test/unit/toolchain_make_variables/BUILD.bazel
new file mode 100644
index 0000000..2534bd8
--- /dev/null
+++ b/third_party/rules_rust/test/unit/toolchain_make_variables/BUILD.bazel
@@ -0,0 +1,5 @@
+load(":toolchain_make_variables_test.bzl", "toolchain_make_variable_test_suite")
+
+toolchain_make_variable_test_suite(
+    name = "toolchain_make_variable_test_suite",
+)
diff --git a/third_party/rules_rust/test/unit/toolchain_make_variables/main.rs b/third_party/rules_rust/test/unit/toolchain_make_variables/main.rs
new file mode 100644
index 0000000..997d772
--- /dev/null
+++ b/third_party/rules_rust/test/unit/toolchain_make_variables/main.rs
@@ -0,0 +1,8 @@
+use std::env;
+use std::fs;
+
+pub fn main() {
+    let argv1 = env::args().nth(1).expect("Missing output argument");
+
+    fs::write(argv1, "").unwrap();
+}
diff --git a/third_party/rules_rust/test/unit/toolchain_make_variables/test.rs b/third_party/rules_rust/test/unit/toolchain_make_variables/test.rs
new file mode 100644
index 0000000..f328e4d
--- /dev/null
+++ b/third_party/rules_rust/test/unit/toolchain_make_variables/test.rs
@@ -0,0 +1 @@
+fn main() {}
diff --git a/third_party/rules_rust/test/unit/toolchain_make_variables/toolchain_make_variables_test.bzl b/third_party/rules_rust/test/unit/toolchain_make_variables/toolchain_make_variables_test.bzl
new file mode 100644
index 0000000..02f6d9e
--- /dev/null
+++ b/third_party/rules_rust/test/unit/toolchain_make_variables/toolchain_make_variables_test.bzl
@@ -0,0 +1,240 @@
+"""Tests for make variables provided by `rust_toolchain`"""
+
+load("@bazel_skylib//lib:unittest.bzl", "analysistest")
+load("//rust:defs.bzl", "rust_binary", "rust_library", "rust_test")
+load("//test/unit:common.bzl", "assert_action_mnemonic", "assert_env_value")
+
+_ENV = {
+    "ENV_VAR_CARGO": "$(CARGO)",
+    "ENV_VAR_RUSTC": "$(RUSTC)",
+    "ENV_VAR_RUSTDOC": "$(RUSTDOC)",
+    "ENV_VAR_RUSTFMT": "$(RUSTFMT)",
+    "ENV_VAR_RUST_DEFAULT_EDITION": "$(RUST_DEFAULT_EDITION)",
+    "ENV_VAR_RUST_SYSROOT": "$(RUST_SYSROOT)",
+}
+
+def _rust_toolchain_make_variable_expansion_test_common_impl(ctx, mnemonic):
+    env = analysistest.begin(ctx)
+    target = analysistest.target_under_test(env)
+    action = target.actions[0]
+
+    assert_action_mnemonic(
+        env = env,
+        action = action,
+        mnemonic = mnemonic,
+    )
+
+    toolchain = ctx.attr._current_rust_toolchain[platform_common.ToolchainInfo]
+
+    expected_values = {
+        "ENV_VAR_CARGO": toolchain.cargo.path,
+        "ENV_VAR_RUSTC": toolchain.rustc.path,
+        "ENV_VAR_RUSTDOC": toolchain.rust_doc.path,
+        "ENV_VAR_RUSTFMT": toolchain.rustfmt.path,
+        "ENV_VAR_RUST_DEFAULT_EDITION": toolchain.default_edition or "",
+        "ENV_VAR_RUST_SYSROOT": toolchain.sysroot,
+    }
+
+    for key in _ENV:
+        assert_env_value(
+            env = env,
+            action = action,
+            key = key,
+            value = expected_values[key],
+        )
+
+    return analysistest.end(env)
+
+def make_toolchain_make_variable_test(impl):
+    return analysistest.make(
+        impl = impl,
+        attrs = {
+            "_current_rust_toolchain": attr.label(
+                doc = "The currently registered rust toolchain",
+                default = Label("//rust/toolchain:current_rust_toolchain"),
+            ),
+        },
+    )
+
+def _rustc_env_variable_expansion_test_impl(ctx):
+    return _rust_toolchain_make_variable_expansion_test_common_impl(ctx, "Rustc")
+
+rustc_env_variable_expansion_test = make_toolchain_make_variable_test(
+    impl = _rustc_env_variable_expansion_test_impl,
+)
+
+def _rust_toolchain_make_variable_expansion_test(ctx):
+    return _rust_toolchain_make_variable_expansion_test_common_impl(ctx, "RustToolchainConsumer")
+
+rust_toolchain_make_variable_expansion_test = make_toolchain_make_variable_test(
+    impl = _rust_toolchain_make_variable_expansion_test,
+)
+
+def _current_rust_toolchain_make_variable_expansion_test_impl(ctx):
+    return _rust_toolchain_make_variable_expansion_test_common_impl(ctx, "CurrentRustToolchainConsumer")
+
+current_rust_toolchain_make_variable_expansion_test = make_toolchain_make_variable_test(
+    impl = _current_rust_toolchain_make_variable_expansion_test_impl,
+)
+
+def _rust_toolchain_consumer_common_impl(ctx, mnemonic):
+    output = ctx.actions.declare_file(ctx.label.name)
+
+    args = ctx.actions.args()
+    args.add(output)
+
+    # Expand make variables
+    env = {
+        key: ctx.expand_make_variables(
+            key,
+            val,
+            {},
+        )
+        for key, val in ctx.attr.env.items()
+    }
+
+    ctx.actions.run(
+        outputs = [output],
+        executable = ctx.executable.writer,
+        mnemonic = mnemonic,
+        env = env,
+        arguments = [args],
+    )
+
+    return DefaultInfo(
+        files = depset([output]),
+    )
+
+def _rust_toolchain_consumer_impl(ctx):
+    return _rust_toolchain_consumer_common_impl(ctx, "RustToolchainConsumer")
+
+rust_toolchain_consumer = rule(
+    implementation = _rust_toolchain_consumer_impl,
+    doc = "A helper rule to test make variable expansion of rules that depend on `rust_toolchain`.",
+    attrs = {
+        "env": attr.string_dict(
+            doc = "Environment variables used for expansion",
+            mandatory = True,
+        ),
+        "writer": attr.label(
+            doc = "An executable for creating an action output",
+            cfg = "exec",
+            executable = True,
+            mandatory = True,
+        ),
+    },
+    toolchains = [
+        "@rules_rust//rust:toolchain_type",
+    ],
+)
+
+def _current_rust_toolchain_consumer_impl(ctx):
+    return _rust_toolchain_consumer_common_impl(ctx, "CurrentRustToolchainConsumer")
+
+current_rust_toolchain_consumer = rule(
+    implementation = _current_rust_toolchain_consumer_impl,
+    doc = "A helper rule to test make variable expansion of `current_rust_toolchain`.",
+    attrs = {
+        "env": attr.string_dict(
+            doc = "Environment variables used for expansion",
+            mandatory = True,
+        ),
+        "writer": attr.label(
+            doc = "An executable for creating an action output",
+            cfg = "exec",
+            executable = True,
+            mandatory = True,
+        ),
+    },
+)
+
+def _define_targets():
+    rust_library(
+        name = "library",
+        srcs = ["main.rs"],
+        rustc_env = _ENV,
+        edition = "2018",
+    )
+
+    rust_binary(
+        name = "binary",
+        srcs = ["main.rs"],
+        rustc_env = _ENV,
+        edition = "2018",
+    )
+
+    rust_test(
+        name = "integration_test",
+        srcs = ["test.rs"],
+        rustc_env = _ENV,
+        edition = "2018",
+    )
+
+    rust_test(
+        name = "unit_test",
+        crate = "library",
+        rustc_env = _ENV,
+    )
+
+    rust_toolchain_consumer(
+        name = "rust_toolchain_consumer",
+        env = _ENV,
+        writer = ":binary",
+    )
+
+    current_rust_toolchain_consumer(
+        name = "current_rust_toolchain_consumer",
+        env = _ENV,
+        toolchains = ["//rust/toolchain:current_rust_toolchain"],
+        writer = ":binary",
+    )
+
+def toolchain_make_variable_test_suite(name):
+    """Defines a test suite
+
+    Args:
+        name (str): The name of the test suite
+    """
+    _define_targets()
+
+    rustc_env_variable_expansion_test(
+        name = "rustc_env_variable_expansion_library_test",
+        target_under_test = ":library",
+    )
+
+    rustc_env_variable_expansion_test(
+        name = "rustc_env_variable_expansion_binary_test",
+        target_under_test = ":binary",
+    )
+
+    rustc_env_variable_expansion_test(
+        name = "rustc_env_variable_expansion_integration_test_test",
+        target_under_test = ":integration_test",
+    )
+
+    rustc_env_variable_expansion_test(
+        name = "rustc_env_variable_expansion_unit_test_test",
+        target_under_test = ":unit_test",
+    )
+
+    rust_toolchain_make_variable_expansion_test(
+        name = "rust_toolchain_make_variable_expansion_test",
+        target_under_test = ":rust_toolchain_consumer",
+    )
+
+    current_rust_toolchain_make_variable_expansion_test(
+        name = "current_rust_toolchain_make_variable_expansion_test",
+        target_under_test = ":current_rust_toolchain_consumer",
+    )
+
+    native.test_suite(
+        name = name,
+        tests = [
+            ":rustc_env_variable_expansion_library_test",
+            ":rustc_env_variable_expansion_binary_test",
+            ":rustc_env_variable_expansion_integration_test_test",
+            ":rustc_env_variable_expansion_unit_test_test",
+            ":rust_toolchain_make_variable_expansion_test",
+            ":current_rust_toolchain_make_variable_expansion_test",
+        ],
+    )
diff --git a/third_party/rules_rust/test/unit/transitive_crate_outputs/transitive_crate_outputs_test.bzl b/third_party/rules_rust/test/unit/transitive_crate_outputs/transitive_crate_outputs_test.bzl
index 8662185..031f83e 100644
--- a/third_party/rules_rust/test/unit/transitive_crate_outputs/transitive_crate_outputs_test.bzl
+++ b/third_party/rules_rust/test/unit/transitive_crate_outputs/transitive_crate_outputs_test.bzl
@@ -21,12 +21,14 @@
     rust_library(
         name = "foo",
         srcs = ["foo.rs"],
+        edition = "2018",
         deps = [":bar", ":baz"],
     )
 
     rust_library(
         name = "bar",
         srcs = ["bar.rs"],
+        edition = "2018",
     )
 
     # buildifier: disable=native-cc
diff --git a/third_party/rules_rust/test/unit/transitive_link_search_paths/BUILD.bazel b/third_party/rules_rust/test/unit/transitive_link_search_paths/BUILD.bazel
new file mode 100644
index 0000000..df20a92
--- /dev/null
+++ b/third_party/rules_rust/test/unit/transitive_link_search_paths/BUILD.bazel
@@ -0,0 +1,4 @@
+load(":transitive_link_search_paths_test.bzl", "transitive_link_search_paths_test_suite")
+
+############################ UNIT TESTS #############################
+transitive_link_search_paths_test_suite(name = "transitive_link_search_paths_test_suite")
diff --git a/third_party/rules_rust/test/unit/transitive_link_search_paths/dep.rs b/third_party/rules_rust/test/unit/transitive_link_search_paths/dep.rs
new file mode 100644
index 0000000..cf74a9a
--- /dev/null
+++ b/third_party/rules_rust/test/unit/transitive_link_search_paths/dep.rs
@@ -0,0 +1,3 @@
+pub fn f() -> i64 {
+    42
+}
diff --git a/third_party/rules_rust/test/unit/transitive_link_search_paths/dep_build.rs b/third_party/rules_rust/test/unit/transitive_link_search_paths/dep_build.rs
new file mode 100644
index 0000000..29fec91
--- /dev/null
+++ b/third_party/rules_rust/test/unit/transitive_link_search_paths/dep_build.rs
@@ -0,0 +1,3 @@
+fn main() {
+    println!("yolo");
+}
diff --git a/third_party/rules_rust/test/unit/transitive_link_search_paths/proc_macro.rs b/third_party/rules_rust/test/unit/transitive_link_search_paths/proc_macro.rs
new file mode 100644
index 0000000..2803ddb
--- /dev/null
+++ b/third_party/rules_rust/test/unit/transitive_link_search_paths/proc_macro.rs
@@ -0,0 +1,8 @@
+extern crate proc_macro;
+
+use proc_macro::TokenStream;
+
+#[proc_macro_attribute]
+pub fn yolo(args: TokenStream, _input: TokenStream) -> TokenStream {
+    args
+}
diff --git a/third_party/rules_rust/test/unit/transitive_link_search_paths/proc_macro_build.rs b/third_party/rules_rust/test/unit/transitive_link_search_paths/proc_macro_build.rs
new file mode 100644
index 0000000..29fec91
--- /dev/null
+++ b/third_party/rules_rust/test/unit/transitive_link_search_paths/proc_macro_build.rs
@@ -0,0 +1,3 @@
+fn main() {
+    println!("yolo");
+}
diff --git a/third_party/rules_rust/test/unit/transitive_link_search_paths/transitive_link_search_paths_test.bzl b/third_party/rules_rust/test/unit/transitive_link_search_paths/transitive_link_search_paths_test.bzl
new file mode 100644
index 0000000..ac76547
--- /dev/null
+++ b/third_party/rules_rust/test/unit/transitive_link_search_paths/transitive_link_search_paths_test.bzl
@@ -0,0 +1,67 @@
+"""Unittests for rust rules."""
+
+load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
+load("//cargo:defs.bzl", "cargo_build_script")
+load("//rust:defs.bzl", "rust_common", "rust_library", "rust_proc_macro")
+
+def _transitive_link_search_paths_test_impl(ctx):
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+    link_search_path_files = tut[rust_common.dep_info].link_search_path_files.to_list()
+    link_search_path_basenames = [f.basename for f in link_search_path_files]
+
+    # Checks that this contains the dep build script, but not the build script
+    # of the dep of the proc_macro.
+    asserts.equals(env, link_search_path_basenames, ["dep_build_script.linksearchpaths"])
+
+    return analysistest.end(env)
+
+transitive_link_search_paths_test = analysistest.make(_transitive_link_search_paths_test_impl)
+
+def _transitive_link_search_paths_test():
+    cargo_build_script(
+        name = "proc_macro_build_script",
+        srcs = ["proc_macro_build.rs"],
+        edition = "2018",
+    )
+
+    rust_proc_macro(
+        name = "proc_macro",
+        srcs = ["proc_macro.rs"],
+        edition = "2018",
+        deps = [":proc_macro_build_script"],
+    )
+
+    cargo_build_script(
+        name = "dep_build_script",
+        srcs = ["dep_build.rs"],
+        edition = "2018",
+    )
+
+    rust_library(
+        name = "dep",
+        srcs = ["dep.rs"],
+        edition = "2018",
+        proc_macro_deps = [":proc_macro"],
+        deps = [":dep_build_script"],
+    )
+
+    transitive_link_search_paths_test(
+        name = "transitive_link_search_paths_test",
+        target_under_test = ":dep",
+    )
+
+def transitive_link_search_paths_test_suite(name):
+    """Entry-point macro called from the BUILD file.
+
+    Args:
+        name: Name of the macro.
+    """
+    _transitive_link_search_paths_test()
+
+    native.test_suite(
+        name = name,
+        tests = [
+            ":transitive_link_search_paths_test",
+        ],
+    )
diff --git a/third_party/rules_rust/test/unit/use_libtest_harness/use_libtest_harness_test.bzl b/third_party/rules_rust/test/unit/use_libtest_harness/use_libtest_harness_test.bzl
index fd7907d..87296a5 100644
--- a/third_party/rules_rust/test/unit/use_libtest_harness/use_libtest_harness_test.bzl
+++ b/third_party/rules_rust/test/unit/use_libtest_harness/use_libtest_harness_test.bzl
@@ -31,11 +31,13 @@
     rust_test(
         name = "mytest",
         srcs = ["mytest.rs"],
+        edition = "2018",
     )
 
     rust_test(
         name = "mytest_noharness",
         srcs = ["mytest_noharness.rs"],
+        edition = "2018",
         use_libtest_harness = False,
     )
 
diff --git a/third_party/rules_rust/test/unit/utils/utils_test.bzl b/third_party/rules_rust/test/unit/utils/utils_test.bzl
index dd7bbe5..7e995a1 100644
--- a/third_party/rules_rust/test/unit/utils/utils_test.bzl
+++ b/third_party/rules_rust/test/unit/utils/utils_test.bzl
@@ -3,7 +3,7 @@
 load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest")
 
 # buildifier: disable=bzl-visibility
-load("//rust/private:utils.bzl", "decode_crate_name_as_label_for_testing", "encode_label_as_crate_name", "should_encode_label_in_crate_name")
+load("//rust/private:utils.bzl", "decode_crate_name_as_label_for_testing", "encode_label_as_crate_name", "encode_raw_string_for_testing", "should_encode_label_in_crate_name", "substitutions_for_testing")
 
 def _encode_label_as_crate_name_test_impl(ctx):
     env = unittest.begin(ctx)
@@ -11,50 +11,88 @@
     # Typical cases.
     asserts.equals(
         env,
-        "x_slash_y_colon_z",
+        "x_y_y_x_z",
         encode_label_as_crate_name("x/y", "z"),
     )
     asserts.equals(
         env,
-        "some_slash_package_colon_target",
+        "some_y_package_x_target",
         encode_label_as_crate_name("some/package", "target"),
     )
 
     # Target name includes a character illegal in crate names.
     asserts.equals(
         env,
-        "some_slash_package_colon_foo_slash_target",
+        "some_y_package_x_foo_y_target",
         encode_label_as_crate_name("some/package", "foo/target"),
     )
 
     # Package/target includes some of the encodings.
     asserts.equals(
         env,
-        "some_quoteslash__slash_package_colon_target_quotedot_foo",
-        encode_label_as_crate_name("some_slash_/package", "target_dot_foo"),
+        "some_zy__y_package_x_target_zpd_foo",
+        encode_label_as_crate_name("some_y_/package", "target_pd_foo"),
     )
 
     # Some pathological cases: test that round-tripping the encoding works as
     # expected.
 
     # Label includes a quoted encoding.
-    package = "_quotedot_"
+    package = "_zpd_"
     target = "target"
-    asserts.equals(env, "_quotequote_dot__colon_target", encode_label_as_crate_name(package, target))
+    asserts.equals(env, "_zz_pd__x_target", encode_label_as_crate_name(package, target))
     asserts.equals(env, package + ":" + target, decode_crate_name_as_label_for_testing(encode_label_as_crate_name(package, target)))
 
-    package = "x_slash_y"
+    package = "x_y_y"
     target = "z"
-    asserts.equals(env, "x_quoteslash_y_colon_z", encode_label_as_crate_name(package, target))
+    asserts.equals(env, "x_zy_y_x_z", encode_label_as_crate_name(package, target))
     asserts.equals(env, package + ":" + target, decode_crate_name_as_label_for_testing(encode_label_as_crate_name(package, target)))
 
     # Package is identical to a valid encoding already.
-    package = "_quotequote_dot__colon_target"
+    package = "_zz_pd__x_target"
     target = "target"
-    asserts.equals(env, "_quotequote_quote_quotedot__quotecolon_target_colon_target", encode_label_as_crate_name(package, target))
+    asserts.equals(env, "_zz_z_zpd__zx_target_x_target", encode_label_as_crate_name(package, target))
     asserts.equals(env, package + ":" + target, decode_crate_name_as_label_for_testing(encode_label_as_crate_name(package, target)))
     return unittest.end(env)
 
+def _substitutions_concatenate_test_impl(ctx):
+    env = unittest.begin(ctx)
+
+    # Every combination of orig + orig, orig + encoded, encoded + orig, and
+    # encoded + encoded round trips the encoding successfully.
+    all_symbols = [s for pair in substitutions_for_testing for s in pair]
+    for s in all_symbols:
+        for t in all_symbols:
+            concatenated = s + t
+            asserts.equals(env, decode_crate_name_as_label_for_testing(encode_raw_string_for_testing(concatenated)), concatenated)
+
+    return unittest.end(env)
+
+def _encode_raw_string_test_impl(ctx):
+    env = unittest.begin(ctx)
+    asserts.equals(env, encode_raw_string_for_testing("some_project:utils"), "some_project_x_utils")
+    asserts.equals(env, encode_raw_string_for_testing("_zpd_"), "_zz_pd_")
+
+    # No surprises in the application of the substitutions, everything is
+    # encoded as expected.
+    for (orig, encoded) in substitutions_for_testing:
+        asserts.equals(env, encode_raw_string_for_testing(orig), encoded)
+
+    return unittest.end(env)
+
+#
+def _decode_test_impl(ctx):
+    env = unittest.begin(ctx)
+    asserts.equals(env, decode_crate_name_as_label_for_testing("some_project_x_utils"), "some_project:utils")
+    asserts.equals(env, decode_crate_name_as_label_for_testing("_zz_pd_"), "_zpd_")
+
+    # No surprises in the application of the substitutions, everything is
+    # decoded as expected.
+    for (orig, encoded) in substitutions_for_testing:
+        asserts.equals(env, decode_crate_name_as_label_for_testing(encoded), orig)
+
+    return unittest.end(env)
+
 def _is_third_party_crate_test_impl(ctx):
     env = unittest.begin(ctx)
 
@@ -79,10 +117,16 @@
 
 encode_label_as_crate_name_test = unittest.make(_encode_label_as_crate_name_test_impl)
 is_third_party_crate_test = unittest.make(_is_third_party_crate_test_impl)
+substitutions_concatenate_test = unittest.make(_substitutions_concatenate_test_impl)
+encode_raw_string_test = unittest.make(_encode_raw_string_test_impl)
+decode_test = unittest.make(_decode_test_impl)
 
 def utils_test_suite(name):
     unittest.suite(
         name,
         encode_label_as_crate_name_test,
         is_third_party_crate_test,
+        substitutions_concatenate_test,
+        encode_raw_string_test,
+        decode_test,
     )
diff --git a/third_party/rules_rust/test/unit/versioned_libs/versioned_libs_analysis_test.bzl b/third_party/rules_rust/test/unit/versioned_libs/versioned_libs_analysis_test.bzl
index f31d390..4545b14 100644
--- a/third_party/rules_rust/test/unit/versioned_libs/versioned_libs_analysis_test.bzl
+++ b/third_party/rules_rust/test/unit/versioned_libs/versioned_libs_analysis_test.bzl
@@ -45,6 +45,7 @@
     rust_shared_library(
         name = "linux_no_version",
         srcs = ["a.rs"],
+        edition = "2018",
         deps = [":import_libsterling.so"],
         target_compatible_with = ["@platforms//os:linux"],
     )
@@ -66,6 +67,7 @@
     rust_shared_library(
         name = "linux_suffix_version",
         srcs = ["a.rs"],
+        edition = "2018",
         deps = [":import_libcheryl.so.3.8", ":import_libcheryl.so"],
         target_compatible_with = ["@platforms//os:linux"],
     )
@@ -102,6 +104,7 @@
     rust_shared_library(
         name = "no_version",
         srcs = ["a.rs"],
+        edition = "2018",
         deps = [":import_liblana.dylib"],
         target_compatible_with = ["@platforms//os:macos"],
     )
@@ -123,6 +126,7 @@
     rust_shared_library(
         name = "prefix_version",
         srcs = ["a.rs"],
+        edition = "2018",
         deps = [":import_libpam3.8.dylib"],
         target_compatible_with = ["@platforms//os:macos"],
     )
@@ -150,6 +154,7 @@
     rust_shared_library(
         name = "windows_no_version",
         srcs = ["a.rs"],
+        edition = "2018",
         deps = [":import_malory.dll"],
         target_compatible_with = ["@platforms//os:windows"],
     )
@@ -182,6 +187,7 @@
     rust_shared_library(
         name = "windows_prefix_version",
         srcs = ["a.rs"],
+        edition = "2018",
         deps = [":import_cyril3.8.dll"],
         target_compatible_with = ["@platforms//os:windows"],
     )
diff --git a/third_party/rules_rust/test/unit/versioned_libs/versioned_libs_unit_test.bzl b/third_party/rules_rust/test/unit/versioned_libs/versioned_libs_unit_test.bzl
index 0a30525..1ede046 100644
--- a/third_party/rules_rust/test/unit/versioned_libs/versioned_libs_unit_test.bzl
+++ b/third_party/rules_rust/test/unit/versioned_libs/versioned_libs_unit_test.bzl
@@ -3,32 +3,32 @@
 load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest")
 
 # buildifier: disable=bzl-visibility
-load("//rust/private:utils.bzl", "get_lib_name")
+load("//rust/private:utils.bzl", "get_lib_name_default", "get_lib_name_for_windows")
 
 def _produced_expected_lib_name_test_impl(ctx):
     env = unittest.begin(ctx)
 
-    asserts.equals(env, "python", get_lib_name(struct(basename = "libpython.dylib")))
-    asserts.equals(env, "python", get_lib_name(struct(basename = "libpython.so")))
-    asserts.equals(env, "python", get_lib_name(struct(basename = "libpython.a")))
-    asserts.equals(env, "python", get_lib_name(struct(basename = "python.dll")))
-    asserts.equals(env, "python", get_lib_name(struct(basename = "python.lib")))
+    asserts.equals(env, "python", get_lib_name_default(struct(basename = "libpython.dylib")))
+    asserts.equals(env, "python", get_lib_name_default(struct(basename = "libpython.so")))
+    asserts.equals(env, "python", get_lib_name_default(struct(basename = "libpython.a")))
+    asserts.equals(env, "python", get_lib_name_for_windows(struct(basename = "python.dll")))
+    asserts.equals(env, "python", get_lib_name_for_windows(struct(basename = "python.lib")))
 
-    asserts.equals(env, "python3", get_lib_name(struct(basename = "libpython3.dylib")))
-    asserts.equals(env, "python3.8", get_lib_name(struct(basename = "libpython3.8.dylib")))
-    asserts.equals(env, "python3", get_lib_name(struct(basename = "libpython3.a")))
-    asserts.equals(env, "python3.8", get_lib_name(struct(basename = "libpython3.8.a")))
+    asserts.equals(env, "python3", get_lib_name_default(struct(basename = "libpython3.dylib")))
+    asserts.equals(env, "python3.8", get_lib_name_default(struct(basename = "libpython3.8.dylib")))
+    asserts.equals(env, "python3", get_lib_name_default(struct(basename = "libpython3.a")))
+    asserts.equals(env, "python3.8", get_lib_name_default(struct(basename = "libpython3.8.a")))
 
-    asserts.equals(env, "python38", get_lib_name(struct(basename = "python38.dll")))
-    asserts.equals(env, "python38m", get_lib_name(struct(basename = "python38m.dll")))
+    asserts.equals(env, "python38", get_lib_name_for_windows(struct(basename = "python38.dll")))
+    asserts.equals(env, "python38m", get_lib_name_for_windows(struct(basename = "python38m.dll")))
 
-    asserts.equals(env, "python", get_lib_name(struct(basename = "libpython.so.3")))
-    asserts.equals(env, "python", get_lib_name(struct(basename = "libpython.so.3.8")))
-    asserts.equals(env, "python", get_lib_name(struct(basename = "libpython.so.3.8.0")))
-    asserts.equals(env, "python", get_lib_name(struct(basename = "libpython.a.3")))
-    asserts.equals(env, "python", get_lib_name(struct(basename = "libpython.a.3.8")))
-    asserts.equals(env, "python", get_lib_name(struct(basename = "libpython.a.3.8.0")))
-    asserts.equals(env, "python-3.8.0", get_lib_name(struct(basename = "libpython-3.8.0.so.3.8.0")))
+    asserts.equals(env, "python", get_lib_name_default(struct(basename = "libpython.so.3")))
+    asserts.equals(env, "python", get_lib_name_default(struct(basename = "libpython.so.3.8")))
+    asserts.equals(env, "python", get_lib_name_default(struct(basename = "libpython.so.3.8.0")))
+    asserts.equals(env, "python", get_lib_name_default(struct(basename = "libpython.a.3")))
+    asserts.equals(env, "python", get_lib_name_default(struct(basename = "libpython.a.3.8")))
+    asserts.equals(env, "python", get_lib_name_default(struct(basename = "libpython.a.3.8.0")))
+    asserts.equals(env, "python-3.8.0", get_lib_name_default(struct(basename = "libpython-3.8.0.so.3.8.0")))
 
     return unittest.end(env)
 
diff --git a/third_party/rules_rust/test/unit/win_interface_library/bin.cc b/third_party/rules_rust/test/unit/win_interface_library/bin.cc
index a3c073a..b8bd84e 100644
--- a/third_party/rules_rust/test/unit/win_interface_library/bin.cc
+++ b/third_party/rules_rust/test/unit/win_interface_library/bin.cc
@@ -1,6 +1,6 @@
 extern "C" void hello(void);
 
 int main(int argc, char **argv) {
-    hello();
-    return 0;
+  hello();
+  return 0;
 }
diff --git a/third_party/rules_rust/test/unit/win_interface_library/win_interface_library_analysis_test.bzl b/third_party/rules_rust/test/unit/win_interface_library/win_interface_library_analysis_test.bzl
index fef00f2..69072fa 100644
--- a/third_party/rules_rust/test/unit/win_interface_library/win_interface_library_analysis_test.bzl
+++ b/third_party/rules_rust/test/unit/win_interface_library/win_interface_library_analysis_test.bzl
@@ -33,6 +33,7 @@
     rust_shared_library(
         name = "mylib",
         srcs = ["lib.rs"],
+        edition = "2018",
         target_compatible_with = ["@platforms//os:windows"],
     )
 
@@ -46,6 +47,7 @@
     rust_binary(
         name = "myrustbin",
         srcs = ["main.rs"],
+        edition = "2018",
         target_compatible_with = ["@platforms//os:windows"],
     )
 
diff --git a/third_party/rules_rust/test/versioned_dylib/BUILD.bazel b/third_party/rules_rust/test/versioned_dylib/BUILD.bazel
index a8804e4..fd0298f 100644
--- a/third_party/rules_rust/test/versioned_dylib/BUILD.bazel
+++ b/third_party/rules_rust/test/versioned_dylib/BUILD.bazel
@@ -7,6 +7,7 @@
     srcs = [
         "src/main.rs",
     ],
+    edition = "2018",
     tags = ["manual"],
     deps = [
         "//test/versioned_dylib/c:libreturn_zero",
@@ -17,5 +18,6 @@
 rust_test(
     name = "versioned_dylib_test",
     crate = "versioned_dylib",
+    edition = "2018",
     tags = ["manual"],
 )
diff --git a/third_party/rules_rust/test/versioned_dylib/c/return_zero.c b/third_party/rules_rust/test/versioned_dylib/c/return_zero.c
index ea3e6d8..ef72eaa 100644
--- a/third_party/rules_rust/test/versioned_dylib/c/return_zero.c
+++ b/third_party/rules_rust/test/versioned_dylib/c/return_zero.c
@@ -1,5 +1,3 @@
 #include "return_zero.h"
 
-int return_zero() {
-    return 0;
-}
\ No newline at end of file
+int return_zero() { return 0; }
diff --git a/third_party/rules_rust/test/versioned_dylib/c/return_zero.h b/third_party/rules_rust/test/versioned_dylib/c/return_zero.h
index 4e7cb4a..5f55f77 100644
--- a/third_party/rules_rust/test/versioned_dylib/c/return_zero.h
+++ b/third_party/rules_rust/test/versioned_dylib/c/return_zero.h
@@ -1,6 +1,6 @@
 #ifndef versioned_lib_h__
 #define versioned_lib_h__
- 
+
 extern int return_zero();
- 
-#endif  // versioned_lib_h__
\ No newline at end of file
+
+#endif  // versioned_lib_h__
diff --git a/third_party/rules_rust/tools/runfiles/BUILD.bazel b/third_party/rules_rust/tools/runfiles/BUILD.bazel
index 7a2eceb..aa3414d 100644
--- a/third_party/rules_rust/tools/runfiles/BUILD.bazel
+++ b/third_party/rules_rust/tools/runfiles/BUILD.bazel
@@ -8,6 +8,7 @@
 rust_library(
     name = "runfiles",
     srcs = ["runfiles.rs"],
+    edition = "2018",
     visibility = ["//visibility:public"],
 )
 
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/BUILD.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/BUILD.bazel
new file mode 100644
index 0000000..b642169
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/BUILD.bazel
@@ -0,0 +1,47 @@
+load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
+load("//crate_universe:defs.bzl", "crate", "crates_vendor")
+
+crates_vendor(
+    name = "crates_vendor",
+    cargo_lockfile = "Cargo.Bazel.lock",
+    mode = "remote",
+    packages = {
+        "anyhow": crate.spec(
+            version = "1.0.58",
+        ),
+        "clap": crate.spec(
+            features = [
+                "derive",
+                "env",
+            ],
+            version = "3.2.12",
+        ),
+        "env_logger": crate.spec(
+            version = "0.9.0",
+        ),
+        "itertools": crate.spec(
+            version = "0.10.3",
+        ),
+        "log": crate.spec(
+            version = "0.4.17",
+        ),
+        "serde": crate.spec(
+            features = ["derive"],
+            version = "1.0.139",
+        ),
+        "serde_json": crate.spec(
+            version = "1.0.82",
+        ),
+    },
+    repository_name = "rules_rust_rust_analyzer",
+    tags = ["manual"],
+)
+
+bzl_library(
+    name = "bzl_lib",
+    srcs = glob(["**/*.bzl"]) + [
+        "//tools/rust_analyzer/3rdparty/crates:defs.bzl",
+        "//tools/rust_analyzer/3rdparty/crates:crates.bzl",
+    ],
+    visibility = ["//tools/rust_analyzer:__pkg__"],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/Cargo.Bazel.lock b/third_party/rules_rust/tools/rust_analyzer/3rdparty/Cargo.Bazel.lock
new file mode 100644
index 0000000..cf953a7
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/Cargo.Bazel.lock
@@ -0,0 +1,374 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "3.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab8b79fe3946ceb4a0b1c080b4018992b8d27e9ff363644c1c9b6387c854614d"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_derive",
+ "clap_lex",
+ "indexmap",
+ "once_cell",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "direct-cargo-bazel-deps"
+version = "0.0.1"
+dependencies = [
+ "anyhow",
+ "clap",
+ "env_logger",
+ "itertools",
+ "log",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "either"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be"
+
+[[package]]
+name = "env_logger"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "heck"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "indexmap"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "once_cell"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
+
+[[package]]
+name = "os_str_bytes"
+version = "6.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "648001efe5d5c0102d8cea768e348da85d90af8ba91f0bea908f157951493cd4"
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "regex"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+
+[[package]]
+name = "ryu"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
+
+[[package]]
+name = "serde"
+version = "1.0.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0171ebb889e45aa68b44aee0859b3eede84c6f5f5c228e6f140c0b2a0a46cad6"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc1d3230c1de7932af58ad8ffbe1d784bd55efd5a9d84ac24f69c72d83543dfb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.98"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel
new file mode 100644
index 0000000..27abe22
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "aho_corasick",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.7.18",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__memchr-2.5.0//:memchr",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.anyhow-1.0.58.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.anyhow-1.0.58.bazel
new file mode 100644
index 0000000..7ddb72a
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.anyhow-1.0.58.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "anyhow",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.58",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__anyhow-1.0.58//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "anyhow_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.58",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "anyhow_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.atty-0.2.14.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.atty-0.2.14.bazel
new file mode 100644
index 0000000..5735d73
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.atty-0.2.14.bazel
@@ -0,0 +1,132 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "atty",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.14",
+    deps = [
+    ] + select_with_or({
+        # cfg(target_os = "hermit")
+        #
+        # No supported platform triples for cfg: 'cfg(target_os = "hermit")'
+        # Skipped dependencies: [{"id":"hermit-abi 0.1.19","target":"hermit_abi"}]
+        #
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_rust_analyzer__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_rust_analyzer__winapi-0.3.9//:winapi",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.autocfg-1.1.0.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.autocfg-1.1.0.bazel
new file mode 100644
index 0000000..bcf233a
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.autocfg-1.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "autocfg",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.bazel
new file mode 100644
index 0000000..d89f0ea
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.bazel
@@ -0,0 +1,77 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+package(default_visibility = ["//visibility:public"])
+
+exports_files(
+    [
+        "cargo-bazel.json",
+        "defs.bzl",
+        "crates.bzl",
+    ] + glob([
+        "*.bazel",
+    ]),
+)
+
+filegroup(
+    name = "srcs",
+    srcs = glob([
+        "*.bazel",
+        "*.bzl",
+    ]),
+)
+
+# Workspace Member Dependencies
+alias(
+    name = "anyhow",
+    actual = "@rules_rust_rust_analyzer__anyhow-1.0.58//:anyhow",
+    tags = ["manual"],
+)
+
+alias(
+    name = "clap",
+    actual = "@rules_rust_rust_analyzer__clap-3.2.12//:clap",
+    tags = ["manual"],
+)
+
+alias(
+    name = "env_logger",
+    actual = "@rules_rust_rust_analyzer__env_logger-0.9.0//:env_logger",
+    tags = ["manual"],
+)
+
+alias(
+    name = "itertools",
+    actual = "@rules_rust_rust_analyzer__itertools-0.10.3//:itertools",
+    tags = ["manual"],
+)
+
+alias(
+    name = "log",
+    actual = "@rules_rust_rust_analyzer__log-0.4.17//:log",
+    tags = ["manual"],
+)
+
+alias(
+    name = "serde",
+    actual = "@rules_rust_rust_analyzer__serde-1.0.139//:serde",
+    tags = ["manual"],
+)
+
+alias(
+    name = "serde_json",
+    actual = "@rules_rust_rust_analyzer__serde_json-1.0.82//:serde_json",
+    tags = ["manual"],
+)
+
+# Binaries
+alias(
+    name = "clap__stdio-fixture",
+    actual = "@rules_rust_rust_analyzer__clap-3.2.12//:stdio-fixture__bin",
+    tags = ["manual"],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.bitflags-1.3.2.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.bitflags-1.3.2.bazel
new file mode 100644
index 0000000..7c25f32
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.bitflags-1.3.2.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "bitflags",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.3.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
new file mode 100644
index 0000000..20256bf
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "cfg_if",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.clap-3.2.12.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.clap-3.2.12.bazel
new file mode 100644
index 0000000..852e149
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.clap-3.2.12.bazel
@@ -0,0 +1,197 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "clap",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "atty",
+        "clap_derive",
+        "color",
+        "default",
+        "derive",
+        "env",
+        "once_cell",
+        "std",
+        "strsim",
+        "suggestions",
+        "termcolor",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__clap_derive-3.2.7//:clap_derive",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "3.2.12",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__atty-0.2.14//:atty",
+            "@rules_rust_rust_analyzer__bitflags-1.3.2//:bitflags",
+            "@rules_rust_rust_analyzer__clap_lex-0.2.4//:clap_lex",
+            "@rules_rust_rust_analyzer__indexmap-1.9.1//:indexmap",
+            "@rules_rust_rust_analyzer__once_cell-1.13.0//:once_cell",
+            "@rules_rust_rust_analyzer__strsim-0.10.0//:strsim",
+            "@rules_rust_rust_analyzer__termcolor-1.1.3//:termcolor",
+            "@rules_rust_rust_analyzer__textwrap-0.15.0//:textwrap",
+        ],
+    }),
+)
+
+rust_binary(
+    name = "stdio-fixture__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "atty",
+        "clap_derive",
+        "color",
+        "default",
+        "derive",
+        "env",
+        "once_cell",
+        "std",
+        "strsim",
+        "suggestions",
+        "termcolor",
+    ],
+    crate_root = "src/bin/stdio-fixture.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__clap_derive-3.2.7//:clap_derive",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "3.2.12",
+    deps = [
+        ":clap",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__atty-0.2.14//:atty",
+            "@rules_rust_rust_analyzer__bitflags-1.3.2//:bitflags",
+            "@rules_rust_rust_analyzer__clap_lex-0.2.4//:clap_lex",
+            "@rules_rust_rust_analyzer__indexmap-1.9.1//:indexmap",
+            "@rules_rust_rust_analyzer__once_cell-1.13.0//:once_cell",
+            "@rules_rust_rust_analyzer__strsim-0.10.0//:strsim",
+            "@rules_rust_rust_analyzer__termcolor-1.1.3//:termcolor",
+            "@rules_rust_rust_analyzer__textwrap-0.15.0//:textwrap",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.clap_derive-3.2.7.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.clap_derive-3.2.7.bazel
new file mode 100644
index 0000000..128996e
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.clap_derive-3.2.7.bazel
@@ -0,0 +1,96 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_proc_macro(
+    name = "clap_derive",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "3.2.7",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__heck-0.4.0//:heck",
+            "@rules_rust_rust_analyzer__proc-macro-error-1.0.4//:proc_macro_error",
+            "@rules_rust_rust_analyzer__proc-macro2-1.0.40//:proc_macro2",
+            "@rules_rust_rust_analyzer__quote-1.0.20//:quote",
+            "@rules_rust_rust_analyzer__syn-1.0.98//:syn",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.clap_lex-0.2.4.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.clap_lex-0.2.4.bazel
new file mode 100644
index 0000000..f7c5b04
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.clap_lex-0.2.4.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "clap_lex",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__os_str_bytes-6.2.0//:os_str_bytes",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.either-1.7.0.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.either-1.7.0.bazel
new file mode 100644
index 0000000..ea68aca
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.either-1.7.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "either",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.7.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.env_logger-0.9.0.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.env_logger-0.9.0.bazel
new file mode 100644
index 0000000..5067e58
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.env_logger-0.9.0.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "env_logger",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "atty",
+        "default",
+        "humantime",
+        "regex",
+        "termcolor",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.9.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__atty-0.2.14//:atty",
+            "@rules_rust_rust_analyzer__humantime-2.1.0//:humantime",
+            "@rules_rust_rust_analyzer__log-0.4.17//:log",
+            "@rules_rust_rust_analyzer__regex-1.6.0//:regex",
+            "@rules_rust_rust_analyzer__termcolor-1.1.3//:termcolor",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.hashbrown-0.12.3.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.hashbrown-0.12.3.bazel
new file mode 100644
index 0000000..69925a1
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.hashbrown-0.12.3.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "hashbrown",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "raw",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.12.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.heck-0.4.0.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.heck-0.4.0.bazel
new file mode 100644
index 0000000..2098d03
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.heck-0.4.0.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "heck",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel
new file mode 100644
index 0000000..1bbda72
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "hermit_abi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.19",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__libc-0.2.126//:libc",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.humantime-2.1.0.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.humantime-2.1.0.bazel
new file mode 100644
index 0000000..af2f5ef
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.humantime-2.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "humantime",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.indexmap-1.9.1.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.indexmap-1.9.1.bazel
new file mode 100644
index 0000000..790ccd9
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.indexmap-1.9.1.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "indexmap",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.9.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__hashbrown-0.12.3//:hashbrown",
+            "@rules_rust_rust_analyzer__indexmap-1.9.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "indexmap_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.9.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "indexmap_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.itertools-0.10.3.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.itertools-0.10.3.bazel
new file mode 100644
index 0000000..e671062
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.itertools-0.10.3.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "itertools",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "use_alloc",
+        "use_std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.10.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__either-1.7.0//:either",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.itoa-1.0.2.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.itoa-1.0.2.bazel
new file mode 100644
index 0000000..18cf467
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.itoa-1.0.2.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "itoa",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.libc-0.2.126.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.libc-0.2.126.bazel
new file mode 100644
index 0000000..3b30254
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.libc-0.2.126.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.126",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__libc-0.2.126//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "libc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.126",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "libc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.log-0.4.17.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.log-0.4.17.bazel
new file mode 100644
index 0000000..ef5fcb9
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.log-0.4.17.bazel
@@ -0,0 +1,177 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "log",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.17",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__cfg-if-1.0.0//:cfg_if",
+            "@rules_rust_rust_analyzer__log-0.4.17//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "log_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.17",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "log_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.memchr-2.5.0.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.memchr-2.5.0.bazel
new file mode 100644
index 0000000..8e71063
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.memchr-2.5.0.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "memchr",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.5.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__memchr-2.5.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "memchr_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "2.5.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "memchr_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.once_cell-1.13.0.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.once_cell-1.13.0.bazel
new file mode 100644
index 0000000..4f4b425
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.once_cell-1.13.0.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "once_cell",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "default",
+        "race",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.13.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.os_str_bytes-6.2.0.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.os_str_bytes-6.2.0.bazel
new file mode 100644
index 0000000..a53f242
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.os_str_bytes-6.2.0.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "os_str_bytes",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "raw_os_str",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "6.2.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.proc-macro-error-1.0.4.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.proc-macro-error-1.0.4.bazel
new file mode 100644
index 0000000..030a606
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.proc-macro-error-1.0.4.bazel
@@ -0,0 +1,185 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "proc_macro_error",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "syn",
+        "syn-error",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__proc-macro-error-attr-1.0.4//:proc_macro_error_attr",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__proc-macro-error-1.0.4//:build_script_build",
+            "@rules_rust_rust_analyzer__proc-macro2-1.0.40//:proc_macro2",
+            "@rules_rust_rust_analyzer__quote-1.0.20//:quote",
+            "@rules_rust_rust_analyzer__syn-1.0.98//:syn",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "proc-macro-error_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "syn",
+        "syn-error",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.4",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__version_check-0.9.4//:version_check",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "proc-macro-error_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.proc-macro-error-attr-1.0.4.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.proc-macro-error-attr-1.0.4.bazel
new file mode 100644
index 0000000..45a9cb5
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.proc-macro-error-attr-1.0.4.bazel
@@ -0,0 +1,177 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_proc_macro(
+    name = "proc_macro_error_attr",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__proc-macro-error-attr-1.0.4//:build_script_build",
+            "@rules_rust_rust_analyzer__proc-macro2-1.0.40//:proc_macro2",
+            "@rules_rust_rust_analyzer__quote-1.0.20//:quote",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "proc-macro-error-attr_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.4",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__version_check-0.9.4//:version_check",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "proc-macro-error-attr_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.proc-macro2-1.0.40.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.proc-macro2-1.0.40.bazel
new file mode 100644
index 0000000..9544ed2
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.proc-macro2-1.0.40.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "proc_macro2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.40",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__proc-macro2-1.0.40//:build_script_build",
+            "@rules_rust_rust_analyzer__unicode-ident-1.0.2//:unicode_ident",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "proc-macro2_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.40",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "proc-macro2_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.quote-1.0.20.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.quote-1.0.20.bazel
new file mode 100644
index 0000000..9b5f548
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.quote-1.0.20.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "quote",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.20",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__proc-macro2-1.0.40//:proc_macro2",
+            "@rules_rust_rust_analyzer__quote-1.0.20//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "quote_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.20",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "quote_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.regex-1.6.0.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.regex-1.6.0.bazel
new file mode 100644
index 0000000..84fba50
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.regex-1.6.0.bazel
@@ -0,0 +1,101 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "regex",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "aho-corasick",
+        "memchr",
+        "perf",
+        "perf-cache",
+        "perf-dfa",
+        "perf-inline",
+        "perf-literal",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.6.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__aho-corasick-0.7.18//:aho_corasick",
+            "@rules_rust_rust_analyzer__memchr-2.5.0//:memchr",
+            "@rules_rust_rust_analyzer__regex-syntax-0.6.27//:regex_syntax",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel
new file mode 100644
index 0000000..edd66d7
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "regex_syntax",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.27",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.ryu-1.0.10.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.ryu-1.0.10.bazel
new file mode 100644
index 0000000..ea6e126
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.ryu-1.0.10.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR BSL-1.0
+# ])
+
+rust_library(
+    name = "ryu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.10",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.serde-1.0.139.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.serde-1.0.139.bazel
new file mode 100644
index 0000000..d31617e
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.serde-1.0.139.bazel
@@ -0,0 +1,183 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "serde",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "derive",
+        "serde_derive",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__serde_derive-1.0.139//:serde_derive",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.139",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__serde-1.0.139//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "serde_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "derive",
+        "serde_derive",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.139",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "serde_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.serde_derive-1.0.139.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.serde_derive-1.0.139.bazel
new file mode 100644
index 0000000..3be28ca
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.serde_derive-1.0.139.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_proc_macro(
+    name = "serde_derive",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.139",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__proc-macro2-1.0.40//:proc_macro2",
+            "@rules_rust_rust_analyzer__quote-1.0.20//:quote",
+            "@rules_rust_rust_analyzer__serde_derive-1.0.139//:build_script_build",
+            "@rules_rust_rust_analyzer__syn-1.0.98//:syn",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "serde_derive_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.139",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "serde_derive_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.serde_json-1.0.82.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.serde_json-1.0.82.bazel
new file mode 100644
index 0000000..9039e2b
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.serde_json-1.0.82.bazel
@@ -0,0 +1,181 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "serde_json",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.82",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__itoa-1.0.2//:itoa",
+            "@rules_rust_rust_analyzer__ryu-1.0.10//:ryu",
+            "@rules_rust_rust_analyzer__serde-1.0.139//:serde",
+            "@rules_rust_rust_analyzer__serde_json-1.0.82//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "serde_json_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.82",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "serde_json_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.strsim-0.10.0.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.strsim-0.10.0.bazel
new file mode 100644
index 0000000..7cfa3f3
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.strsim-0.10.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "strsim",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.10.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.syn-1.0.98.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.syn-1.0.98.bazel
new file mode 100644
index 0000000..f4c648f
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.syn-1.0.98.bazel
@@ -0,0 +1,193 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "syn",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "full",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.98",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__proc-macro2-1.0.40//:proc_macro2",
+            "@rules_rust_rust_analyzer__quote-1.0.20//:quote",
+            "@rules_rust_rust_analyzer__syn-1.0.98//:build_script_build",
+            "@rules_rust_rust_analyzer__unicode-ident-1.0.2//:unicode_ident",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "syn_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "full",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.98",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "syn_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.termcolor-1.1.3.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.termcolor-1.1.3.bazel
new file mode 100644
index 0000000..09ff98b
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.termcolor-1.1.3.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense OR MIT
+# ])
+
+rust_library(
+    name = "termcolor",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.3",
+    deps = [
+    ] + select_with_or({
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_rust_analyzer__winapi-util-0.1.5//:winapi_util",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.textwrap-0.15.0.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.textwrap-0.15.0.bazel
new file mode 100644
index 0000000..1205a91
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.textwrap-0.15.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "textwrap",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.15.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.unicode-ident-1.0.2.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.unicode-ident-1.0.2.bazel
new file mode 100644
index 0000000..fec6cf6
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.unicode-ident-1.0.2.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # (MIT OR Apache-2.0) AND Unicode-DFS-2016
+# ])
+
+rust_library(
+    name = "unicode_ident",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.version_check-0.9.4.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.version_check-0.9.4.bazel
new file mode 100644
index 0000000..d277e71
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.version_check-0.9.4.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "version_check",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.9.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.winapi-0.3.9.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.winapi-0.3.9.bazel
new file mode 100644
index 0000000..310c379
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.winapi-0.3.9.bazel
@@ -0,0 +1,206 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "winapi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "consoleapi",
+        "errhandlingapi",
+        "fileapi",
+        "minwinbase",
+        "minwindef",
+        "processenv",
+        "std",
+        "winbase",
+        "wincon",
+        "winerror",
+        "winnt",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.9",
+    deps = [
+    ] + select_with_or({
+        # i686-pc-windows-gnu
+        #
+        # No supported platform triples for cfg: 'i686-pc-windows-gnu'
+        # Skipped dependencies: [{"id":"winapi-i686-pc-windows-gnu 0.4.0","target":"winapi_i686_pc_windows_gnu"}]
+        #
+        # x86_64-pc-windows-gnu
+        #
+        # No supported platform triples for cfg: 'x86_64-pc-windows-gnu'
+        # Skipped dependencies: [{"id":"winapi-x86_64-pc-windows-gnu 0.4.0","target":"winapi_x86_64_pc_windows_gnu"}]
+        #
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__winapi-0.3.9//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "winapi_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "consoleapi",
+        "errhandlingapi",
+        "fileapi",
+        "minwinbase",
+        "minwindef",
+        "processenv",
+        "std",
+        "winbase",
+        "wincon",
+        "winerror",
+        "winnt",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.3.9",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "winapi_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
new file mode 100644
index 0000000..a6680ab
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "winapi_i686_pc_windows_gnu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__winapi-i686-pc-windows-gnu-0.4.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "winapi-i686-pc-windows-gnu_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "winapi-i686-pc-windows-gnu_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel
new file mode 100644
index 0000000..4c0fd1a
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "winapi_util",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.5",
+    deps = [
+    ] + select_with_or({
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_rust_analyzer__winapi-0.3.9//:winapi",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
new file mode 100644
index 0000000..a62ba1e
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "winapi_x86_64_pc_windows_gnu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_rust_analyzer__winapi-x86_64-pc-windows-gnu-0.4.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "winapi-x86_64-pc-windows-gnu_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "winapi-x86_64-pc-windows-gnu_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/crates.bzl b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/crates.bzl
new file mode 100644
index 0000000..db27807
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/crates.bzl
@@ -0,0 +1,25 @@
+###############################################################################
+# @generated
+# This file is auto-generated by the cargo-bazel tool.
+#
+# DO NOT MODIFY: Local changes may be replaced in future executions.
+###############################################################################
+"""Rules for defining repositories for remote `crates_vendor` repositories"""
+
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:crates_vendor.bzl", "crates_vendor_remote_repository")
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//tools/rust_analyzer/3rdparty/crates:defs.bzl", _crate_repositories = "crate_repositories")
+
+def crate_repositories():
+    maybe(
+        crates_vendor_remote_repository,
+        name = "rules_rust_rust_analyzer",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.bazel"),
+        defs_module = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:defs.bzl"),
+    )
+
+    _crate_repositories()
diff --git a/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/defs.bzl b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/defs.bzl
new file mode 100644
index 0000000..f7e6b3c
--- /dev/null
+++ b/third_party/rules_rust/tools/rust_analyzer/3rdparty/crates/defs.bzl
@@ -0,0 +1,802 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //tools/rust_analyzer/3rdparty:crates_vendor
+###############################################################################
+"""
+# `crates_repository` API
+
+- [aliases](#aliases)
+- [crate_deps](#crate_deps)
+- [all_crate_deps](#all_crate_deps)
+- [crate_repositories](#crate_repositories)
+
+"""
+
+load("@bazel_skylib//lib:selects.bzl", "selects")
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+###############################################################################
+# MACROS API
+###############################################################################
+
+# An identifier that represent common dependencies (unconditional).
+_COMMON_CONDITION = ""
+
+def _flatten_dependency_maps(all_dependency_maps):
+    """Flatten a list of dependency maps into one dictionary.
+
+    Dependency maps have the following structure:
+
+    ```python
+    DEPENDENCIES_MAP = {
+        # The first key in the map is a Bazel package
+        # name of the workspace this file is defined in.
+        "workspace_member_package": {
+
+            # Not all dependnecies are supported for all platforms.
+            # the condition key is the condition required to be true
+            # on the host platform.
+            "condition": {
+
+                # An alias to a crate target.     # The label of the crate target the
+                # Aliases are only crate names.   # package name refers to.
+                "package_name":                   "@full//:label",
+            }
+        }
+    }
+    ```
+
+    Args:
+        all_dependency_maps (list): A list of dicts as described above
+
+    Returns:
+        dict: A dictionary as described above
+    """
+    dependencies = {}
+
+    for workspace_deps_map in all_dependency_maps:
+        for pkg_name, conditional_deps_map in workspace_deps_map.items():
+            if pkg_name not in dependencies:
+                non_frozen_map = dict()
+                for key, values in conditional_deps_map.items():
+                    non_frozen_map.update({key: dict(values.items())})
+                dependencies.setdefault(pkg_name, non_frozen_map)
+                continue
+
+            for condition, deps_map in conditional_deps_map.items():
+                # If the condition has not been recorded, do so and continue
+                if condition not in dependencies[pkg_name]:
+                    dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))
+                    continue
+
+                # Alert on any miss-matched dependencies
+                inconsistent_entries = []
+                for crate_name, crate_label in deps_map.items():
+                    existing = dependencies[pkg_name][condition].get(crate_name)
+                    if existing and existing != crate_label:
+                        inconsistent_entries.append((crate_name, existing, crate_label))
+                    dependencies[pkg_name][condition].update({crate_name: crate_label})
+
+    return dependencies
+
+def crate_deps(deps, package_name = None):
+    """Finds the fully qualified label of the requested crates for the package where this macro is called.
+
+    Args:
+        deps (list): The desired list of crate targets.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()`.
+
+    Returns:
+        list: A list of labels to generated rust targets (str)
+    """
+
+    if not deps:
+        return []
+
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Join both sets of dependencies
+    dependencies = _flatten_dependency_maps([
+        _NORMAL_DEPENDENCIES,
+        _NORMAL_DEV_DEPENDENCIES,
+        _PROC_MACRO_DEPENDENCIES,
+        _PROC_MACRO_DEV_DEPENDENCIES,
+        _BUILD_DEPENDENCIES,
+        _BUILD_PROC_MACRO_DEPENDENCIES,
+    ]).pop(package_name, {})
+
+    # Combine all conditional packages so we can easily index over a flat list
+    # TODO: Perhaps this should actually return select statements and maintain
+    # the conditionals of the dependencies
+    flat_deps = {}
+    for deps_set in dependencies.values():
+        for crate_name, crate_label in deps_set.items():
+            flat_deps.update({crate_name: crate_label})
+
+    missing_crates = []
+    crate_targets = []
+    for crate_target in deps:
+        if crate_target not in flat_deps:
+            missing_crates.append(crate_target)
+        else:
+            crate_targets.append(flat_deps[crate_target])
+
+    if missing_crates:
+        fail("Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`".format(
+            missing_crates,
+            package_name,
+            dependencies,
+        ))
+
+    return crate_targets
+
+def all_crate_deps(
+        normal = False,
+        normal_dev = False,
+        proc_macro = False,
+        proc_macro_dev = False,
+        build = False,
+        build_proc_macro = False,
+        package_name = None):
+    """Finds the fully qualified label of all requested direct crate dependencies \
+    for the package where this macro is called.
+
+    If no parameters are set, all normal dependencies are returned. Setting any one flag will
+    otherwise impact the contents of the returned list.
+
+    Args:
+        normal (bool, optional): If True, normal dependencies are included in the
+            output list.
+        normal_dev (bool, optional): If True, normla dev dependencies will be
+            included in the output list..
+        proc_macro (bool, optional): If True, proc_macro dependencies are included
+            in the output list.
+        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
+            included in the output list.
+        build (bool, optional): If True, build dependencies are included
+            in the output list.
+        build_proc_macro (bool, optional): If True, build proc_macro dependencies are
+            included in the output list.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()` when unset.
+
+    Returns:
+        list: A list of labels to generated rust targets (str)
+    """
+
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Determine the relevant maps to use
+    all_dependency_maps = []
+    if normal:
+        all_dependency_maps.append(_NORMAL_DEPENDENCIES)
+    if normal_dev:
+        all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)
+    if proc_macro:
+        all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)
+    if proc_macro_dev:
+        all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)
+    if build:
+        all_dependency_maps.append(_BUILD_DEPENDENCIES)
+    if build_proc_macro:
+        all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)
+
+    # Default to always using normal dependencies
+    if not all_dependency_maps:
+        all_dependency_maps.append(_NORMAL_DEPENDENCIES)
+
+    dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
+
+    if not dependencies:
+        if dependencies == None:
+            fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
+        else:
+            return []
+
+    crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
+    for condition, deps in dependencies.items():
+        crate_deps += selects.with_or({_CONDITIONS[condition]: deps.values()})
+
+    return crate_deps
+
+def aliases(
+        normal = False,
+        normal_dev = False,
+        proc_macro = False,
+        proc_macro_dev = False,
+        build = False,
+        build_proc_macro = False,
+        package_name = None):
+    """Produces a map of Crate alias names to their original label
+
+    If no dependency kinds are specified, `normal` and `proc_macro` are used by default.
+    Setting any one flag will otherwise determine the contents of the returned dict.
+
+    Args:
+        normal (bool, optional): If True, normal dependencies are included in the
+            output list.
+        normal_dev (bool, optional): If True, normla dev dependencies will be
+            included in the output list..
+        proc_macro (bool, optional): If True, proc_macro dependencies are included
+            in the output list.
+        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
+            included in the output list.
+        build (bool, optional): If True, build dependencies are included
+            in the output list.
+        build_proc_macro (bool, optional): If True, build proc_macro dependencies are
+            included in the output list.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()` when unset.
+
+    Returns:
+        dict: The aliases of all associated packages
+    """
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Determine the relevant maps to use
+    all_aliases_maps = []
+    if normal:
+        all_aliases_maps.append(_NORMAL_ALIASES)
+    if normal_dev:
+        all_aliases_maps.append(_NORMAL_DEV_ALIASES)
+    if proc_macro:
+        all_aliases_maps.append(_PROC_MACRO_ALIASES)
+    if proc_macro_dev:
+        all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)
+    if build:
+        all_aliases_maps.append(_BUILD_ALIASES)
+    if build_proc_macro:
+        all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)
+
+    # Default to always using normal aliases
+    if not all_aliases_maps:
+        all_aliases_maps.append(_NORMAL_ALIASES)
+        all_aliases_maps.append(_PROC_MACRO_ALIASES)
+
+    aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)
+
+    if not aliases:
+        return dict()
+
+    common_items = aliases.pop(_COMMON_CONDITION, {}).items()
+
+    # If there are only common items in the dictionary, immediately return them
+    if not len(aliases.keys()) == 1:
+        return dict(common_items)
+
+    # Build a single select statement where each conditional has accounted for the
+    # common set of aliases.
+    crate_aliases = {"//conditions:default": common_items}
+    for condition, deps in aliases.items():
+        condition_triples = _CONDITIONS[condition]
+        if condition_triples in crate_aliases:
+            crate_aliases[condition_triples].update(deps)
+        else:
+            crate_aliases.update({_CONDITIONS[condition]: dict(deps.items() + common_items)})
+
+    return selects.with_or(crate_aliases)
+
+###############################################################################
+# WORKSPACE MEMBER DEPS AND ALIASES
+###############################################################################
+
+_NORMAL_DEPENDENCIES = {
+    "": {
+        _COMMON_CONDITION: {
+            "anyhow": "@rules_rust_rust_analyzer__anyhow-1.0.58//:anyhow",
+            "clap": "@rules_rust_rust_analyzer__clap-3.2.12//:clap",
+            "env_logger": "@rules_rust_rust_analyzer__env_logger-0.9.0//:env_logger",
+            "itertools": "@rules_rust_rust_analyzer__itertools-0.10.3//:itertools",
+            "log": "@rules_rust_rust_analyzer__log-0.4.17//:log",
+            "serde": "@rules_rust_rust_analyzer__serde-1.0.139//:serde",
+            "serde_json": "@rules_rust_rust_analyzer__serde_json-1.0.82//:serde_json",
+        },
+    },
+}
+
+_NORMAL_ALIASES = {
+    "": {
+        _COMMON_CONDITION: {
+        },
+    },
+}
+
+_NORMAL_DEV_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_NORMAL_DEV_ALIASES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_ALIASES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEV_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEV_ALIASES = {
+    "": {
+    },
+}
+
+_BUILD_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_BUILD_ALIASES = {
+    "": {
+    },
+}
+
+_BUILD_PROC_MACRO_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_BUILD_PROC_MACRO_ALIASES = {
+    "": {
+    },
+}
+
+_CONDITIONS = {
+    "cfg(target_os = \"hermit\")": [],
+    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(windows)": ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc"],
+    "i686-pc-windows-gnu": [],
+    "x86_64-pc-windows-gnu": [],
+}
+
+###############################################################################
+
+def crate_repositories():
+    """A macro for defining repositories for all generated crates"""
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__aho-corasick-0.7.18",
+        sha256 = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/aho-corasick/0.7.18/download"],
+        strip_prefix = "aho-corasick-0.7.18",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.aho-corasick-0.7.18.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__anyhow-1.0.58",
+        sha256 = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/anyhow/1.0.58/download"],
+        strip_prefix = "anyhow-1.0.58",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.anyhow-1.0.58.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__atty-0.2.14",
+        sha256 = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/atty/0.2.14/download"],
+        strip_prefix = "atty-0.2.14",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.atty-0.2.14.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__autocfg-1.1.0",
+        sha256 = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/autocfg/1.1.0/download"],
+        strip_prefix = "autocfg-1.1.0",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.autocfg-1.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__bitflags-1.3.2",
+        sha256 = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/bitflags/1.3.2/download"],
+        strip_prefix = "bitflags-1.3.2",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.bitflags-1.3.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__cfg-if-1.0.0",
+        sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/cfg-if/1.0.0/download"],
+        strip_prefix = "cfg-if-1.0.0",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.cfg-if-1.0.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__clap-3.2.12",
+        sha256 = "ab8b79fe3946ceb4a0b1c080b4018992b8d27e9ff363644c1c9b6387c854614d",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/clap/3.2.12/download"],
+        strip_prefix = "clap-3.2.12",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.clap-3.2.12.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__clap_derive-3.2.7",
+        sha256 = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/clap_derive/3.2.7/download"],
+        strip_prefix = "clap_derive-3.2.7",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.clap_derive-3.2.7.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__clap_lex-0.2.4",
+        sha256 = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/clap_lex/0.2.4/download"],
+        strip_prefix = "clap_lex-0.2.4",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.clap_lex-0.2.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__either-1.7.0",
+        sha256 = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/either/1.7.0/download"],
+        strip_prefix = "either-1.7.0",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.either-1.7.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__env_logger-0.9.0",
+        sha256 = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/env_logger/0.9.0/download"],
+        strip_prefix = "env_logger-0.9.0",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.env_logger-0.9.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__hashbrown-0.12.3",
+        sha256 = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/hashbrown/0.12.3/download"],
+        strip_prefix = "hashbrown-0.12.3",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.hashbrown-0.12.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__heck-0.4.0",
+        sha256 = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/heck/0.4.0/download"],
+        strip_prefix = "heck-0.4.0",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.heck-0.4.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__hermit-abi-0.1.19",
+        sha256 = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/hermit-abi/0.1.19/download"],
+        strip_prefix = "hermit-abi-0.1.19",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.hermit-abi-0.1.19.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__humantime-2.1.0",
+        sha256 = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/humantime/2.1.0/download"],
+        strip_prefix = "humantime-2.1.0",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.humantime-2.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__indexmap-1.9.1",
+        sha256 = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/indexmap/1.9.1/download"],
+        strip_prefix = "indexmap-1.9.1",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.indexmap-1.9.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__itertools-0.10.3",
+        sha256 = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/itertools/0.10.3/download"],
+        strip_prefix = "itertools-0.10.3",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.itertools-0.10.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__itoa-1.0.2",
+        sha256 = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/itoa/1.0.2/download"],
+        strip_prefix = "itoa-1.0.2",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.itoa-1.0.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__libc-0.2.126",
+        sha256 = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/libc/0.2.126/download"],
+        strip_prefix = "libc-0.2.126",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.libc-0.2.126.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__log-0.4.17",
+        sha256 = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/log/0.4.17/download"],
+        strip_prefix = "log-0.4.17",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.log-0.4.17.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__memchr-2.5.0",
+        sha256 = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/memchr/2.5.0/download"],
+        strip_prefix = "memchr-2.5.0",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.memchr-2.5.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__once_cell-1.13.0",
+        sha256 = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/once_cell/1.13.0/download"],
+        strip_prefix = "once_cell-1.13.0",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.once_cell-1.13.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__os_str_bytes-6.2.0",
+        sha256 = "648001efe5d5c0102d8cea768e348da85d90af8ba91f0bea908f157951493cd4",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/os_str_bytes/6.2.0/download"],
+        strip_prefix = "os_str_bytes-6.2.0",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.os_str_bytes-6.2.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__proc-macro-error-1.0.4",
+        sha256 = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/proc-macro-error/1.0.4/download"],
+        strip_prefix = "proc-macro-error-1.0.4",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.proc-macro-error-1.0.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__proc-macro-error-attr-1.0.4",
+        sha256 = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/proc-macro-error-attr/1.0.4/download"],
+        strip_prefix = "proc-macro-error-attr-1.0.4",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.proc-macro-error-attr-1.0.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__proc-macro2-1.0.40",
+        sha256 = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/proc-macro2/1.0.40/download"],
+        strip_prefix = "proc-macro2-1.0.40",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.proc-macro2-1.0.40.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__quote-1.0.20",
+        sha256 = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/quote/1.0.20/download"],
+        strip_prefix = "quote-1.0.20",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.quote-1.0.20.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__regex-1.6.0",
+        sha256 = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/regex/1.6.0/download"],
+        strip_prefix = "regex-1.6.0",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.regex-1.6.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__regex-syntax-0.6.27",
+        sha256 = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/regex-syntax/0.6.27/download"],
+        strip_prefix = "regex-syntax-0.6.27",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.regex-syntax-0.6.27.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__ryu-1.0.10",
+        sha256 = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/ryu/1.0.10/download"],
+        strip_prefix = "ryu-1.0.10",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.ryu-1.0.10.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__serde-1.0.139",
+        sha256 = "0171ebb889e45aa68b44aee0859b3eede84c6f5f5c228e6f140c0b2a0a46cad6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/serde/1.0.139/download"],
+        strip_prefix = "serde-1.0.139",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.serde-1.0.139.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__serde_derive-1.0.139",
+        sha256 = "dc1d3230c1de7932af58ad8ffbe1d784bd55efd5a9d84ac24f69c72d83543dfb",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/serde_derive/1.0.139/download"],
+        strip_prefix = "serde_derive-1.0.139",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.serde_derive-1.0.139.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__serde_json-1.0.82",
+        sha256 = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/serde_json/1.0.82/download"],
+        strip_prefix = "serde_json-1.0.82",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.serde_json-1.0.82.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__strsim-0.10.0",
+        sha256 = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/strsim/0.10.0/download"],
+        strip_prefix = "strsim-0.10.0",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.strsim-0.10.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__syn-1.0.98",
+        sha256 = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/syn/1.0.98/download"],
+        strip_prefix = "syn-1.0.98",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.syn-1.0.98.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__termcolor-1.1.3",
+        sha256 = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/termcolor/1.1.3/download"],
+        strip_prefix = "termcolor-1.1.3",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.termcolor-1.1.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__textwrap-0.15.0",
+        sha256 = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/textwrap/0.15.0/download"],
+        strip_prefix = "textwrap-0.15.0",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.textwrap-0.15.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__unicode-ident-1.0.2",
+        sha256 = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unicode-ident/1.0.2/download"],
+        strip_prefix = "unicode-ident-1.0.2",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.unicode-ident-1.0.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__version_check-0.9.4",
+        sha256 = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/version_check/0.9.4/download"],
+        strip_prefix = "version_check-0.9.4",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.version_check-0.9.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__winapi-0.3.9",
+        sha256 = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi/0.3.9/download"],
+        strip_prefix = "winapi-0.3.9",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.winapi-0.3.9.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__winapi-i686-pc-windows-gnu-0.4.0",
+        sha256 = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download"],
+        strip_prefix = "winapi-i686-pc-windows-gnu-0.4.0",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__winapi-util-0.1.5",
+        sha256 = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi-util/0.1.5/download"],
+        strip_prefix = "winapi-util-0.1.5",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.winapi-util-0.1.5.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_rust_analyzer__winapi-x86_64-pc-windows-gnu-0.4.0",
+        sha256 = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download"],
+        strip_prefix = "winapi-x86_64-pc-windows-gnu-0.4.0",
+        build_file = Label("@rules_rust//tools/rust_analyzer/3rdparty/crates:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel"),
+    )
diff --git a/third_party/rules_rust/tools/rust_analyzer/BUILD.bazel b/third_party/rules_rust/tools/rust_analyzer/BUILD.bazel
index d73ea63..54f5436 100644
--- a/third_party/rules_rust/tools/rust_analyzer/BUILD.bazel
+++ b/third_party/rules_rust/tools/rust_analyzer/BUILD.bazel
@@ -1,3 +1,4 @@
+load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
 load("//rust:defs.bzl", "rust_binary", "rust_clippy", "rust_library", "rust_test")
 load("//tools:tool_utils.bzl", "aspect_repository")
 
@@ -11,10 +12,10 @@
     visibility = ["//visibility:public"],
     deps = [
         ":gen_rust_project_lib",
-        "//tools/rust_analyzer/raze:anyhow",
-        "//tools/rust_analyzer/raze:env_logger",
-        "//tools/rust_analyzer/raze:log",
-        "//tools/rust_analyzer/raze:structopt",
+        "//tools/rust_analyzer/3rdparty/crates:anyhow",
+        "//tools/rust_analyzer/3rdparty/crates:clap",
+        "//tools/rust_analyzer/3rdparty/crates:env_logger",
+        "//tools/rust_analyzer/3rdparty/crates:log",
         "//util/label",
     ],
 )
@@ -31,10 +32,10 @@
     edition = "2018",
     deps = [
         "//tools/runfiles",
-        "//tools/rust_analyzer/raze:anyhow",
-        "//tools/rust_analyzer/raze:log",
-        "//tools/rust_analyzer/raze:serde",
-        "//tools/rust_analyzer/raze:serde_json",
+        "//tools/rust_analyzer/3rdparty/crates:anyhow",
+        "//tools/rust_analyzer/3rdparty/crates:log",
+        "//tools/rust_analyzer/3rdparty/crates:serde",
+        "//tools/rust_analyzer/3rdparty/crates:serde_json",
     ],
 )
 
@@ -42,7 +43,7 @@
     name = "gen_rust_project_lib_test",
     crate = ":gen_rust_project_lib",
     deps = [
-        "//tools/rust_analyzer/raze:itertools",
+        "//tools/rust_analyzer/3rdparty/crates:itertools",
     ],
 )
 
@@ -54,3 +55,10 @@
         ":gen_rust_project",
     ],
 )
+
+bzl_library(
+    name = "bzl_lib",
+    srcs = glob(["**/*.bzl"]),
+    visibility = ["//visibility:public"],
+    deps = ["//tools/rust_analyzer/3rdparty:bzl_lib"],
+)
diff --git a/third_party/rules_rust/tools/rust_analyzer/aquery.rs b/third_party/rules_rust/tools/rust_analyzer/aquery.rs
index 12164ab..7a04599 100644
--- a/third_party/rules_rust/tools/rust_analyzer/aquery.rs
+++ b/third_party/rules_rust/tools/rust_analyzer/aquery.rs
@@ -164,11 +164,14 @@
 /// a rust_test depends on a rust_library, for example.
 fn consolidate_crate_specs(crate_specs: Vec<CrateSpec>) -> anyhow::Result<BTreeSet<CrateSpec>> {
     let mut consolidated_specs: BTreeMap<String, CrateSpec> = BTreeMap::new();
-    for spec in crate_specs.into_iter() {
+    for mut spec in crate_specs.into_iter() {
         log::debug!("{:?}", spec);
         if let Some(existing) = consolidated_specs.get_mut(&spec.crate_id) {
             existing.deps.extend(spec.deps);
 
+            spec.cfg.retain(|cfg| !existing.cfg.contains(cfg));
+            existing.cfg.extend(spec.cfg);
+
             // display_name should match the library's crate name because Rust Analyzer
             // seems to use display_name for matching crate entries in rust-project.json
             // against symbols in source files. For more details, see
diff --git a/third_party/rules_rust/tools/rust_analyzer/deps.bzl b/third_party/rules_rust/tools/rust_analyzer/deps.bzl
index 0d2b4a5..c957340 100644
--- a/third_party/rules_rust/tools/rust_analyzer/deps.bzl
+++ b/third_party/rules_rust/tools/rust_analyzer/deps.bzl
@@ -2,10 +2,12 @@
 The dependencies for running the gen_rust_project binary.
 """
 
-load("//tools/rust_analyzer/raze:crates.bzl", "rules_rust_tools_rust_analyzer_fetch_remote_crates")
+load("//tools/rust_analyzer/3rdparty/crates:defs.bzl", "crate_repositories")
 
-def rust_analyzer_deps():
-    rules_rust_tools_rust_analyzer_fetch_remote_crates()
+def rust_analyzer_dependencies():
+    """Define dependencies of the `rust_analyzer` Bazel tools"""
+    crate_repositories()
 
 # For legacy support
-gen_rust_project_dependencies = rust_analyzer_deps
+gen_rust_project_dependencies = rust_analyzer_dependencies
+rust_analyzer_deps = rust_analyzer_dependencies
diff --git a/third_party/rules_rust/tools/rust_analyzer/lib.rs b/third_party/rules_rust/tools/rust_analyzer/lib.rs
index 68db7e0..61f9688 100644
--- a/third_party/rules_rust/tools/rust_analyzer/lib.rs
+++ b/third_party/rules_rust/tools/rust_analyzer/lib.rs
@@ -45,6 +45,7 @@
     rules_rust_name: &impl AsRef<str>,
     targets: &[String],
     execution_root: impl AsRef<Path>,
+    output_base: impl AsRef<Path>,
     rust_project_path: impl AsRef<Path>,
 ) -> anyhow::Result<()> {
     let crate_specs = aquery::get_crate_specs(
@@ -72,6 +73,7 @@
     rust_project::write_rust_project(
         rust_project_path.as_ref(),
         execution_root.as_ref(),
+        output_base.as_ref(),
         &rust_project,
     )?;
 
diff --git a/third_party/rules_rust/tools/rust_analyzer/main.rs b/third_party/rules_rust/tools/rust_analyzer/main.rs
index 2bad0e9..6f13d91 100644
--- a/third_party/rules_rust/tools/rust_analyzer/main.rs
+++ b/third_party/rules_rust/tools/rust_analyzer/main.rs
@@ -4,9 +4,9 @@
 use std::process::Command;
 
 use anyhow::anyhow;
+use clap::Parser;
 use gen_rust_project_lib::generate_crate_info;
 use gen_rust_project_lib::write_rust_project;
-use structopt::StructOpt;
 
 // TODO(david): This shells out to an expected rule in the workspace root //:rust_analyzer that the user must define.
 // It would be more convenient if it could automatically discover all the rust code in the workspace if this target
@@ -26,6 +26,11 @@
         .as_ref()
         .expect("failed to find execution root, is --execution-root set correctly?");
 
+    let output_base = config
+        .output_base
+        .as_ref()
+        .expect("failed to find output base, is -output-base set correctly?");
+
     let rules_rust_name = env!("ASPECT_REPOSITORY");
 
     // Generate the crate specs.
@@ -43,6 +48,7 @@
         &rules_rust_name,
         &config.targets,
         &execution_root,
+        &output_base,
         &workspace_root.join("rust-project.json"),
     )?;
 
@@ -51,15 +57,7 @@
 
 // Parse the configuration flags and supplement with bazel info as needed.
 fn parse_config() -> anyhow::Result<Config> {
-    let mut config = Config::from_args();
-
-    // Ensure we know the workspace. If we are under `bazel run`, the
-    // BUILD_WORKSPACE_DIR environment variable will be present.
-    if config.workspace.is_none() {
-        if let Some(ws_dir) = env::var_os("BUILD_WORKSPACE_DIRECTORY") {
-            config.workspace = Some(PathBuf::from(ws_dir));
-        }
-    }
+    let mut config = Config::parse();
 
     if config.workspace.is_some() && config.execution_root.is_some() {
         return Ok(config);
@@ -97,24 +95,32 @@
     if config.execution_root.is_none() {
         config.execution_root = bazel_info.get("execution_root").map(Into::into);
     }
+    if config.output_base.is_none() {
+        config.output_base = bazel_info.get("output_base").map(Into::into);
+    }
 
     Ok(config)
 }
 
-#[derive(Debug, StructOpt)]
+#[derive(Debug, Parser)]
 struct Config {
-    // If not specified, uses the result of `bazel info workspace`.
-    #[structopt(long)]
+    /// The path to the Bazel workspace directory. If not specified, uses the result of `bazel info workspace`.
+    #[clap(long, env = "BUILD_WORKSPACE_DIRECTORY")]
     workspace: Option<PathBuf>,
 
-    // If not specified, uses the result of `bazel info execution_root`.
-    #[structopt(long)]
+    /// The path to the Bazel execution root. If not specified, uses the result of `bazel info execution_root`.
+    #[clap(long)]
     execution_root: Option<PathBuf>,
 
-    #[structopt(long, default_value = "bazel")]
+    /// The path to the Bazel output user root. If not specified, uses the result of `bazel info output_base`.
+    #[clap(long, env = "OUTPUT_BASE")]
+    output_base: Option<PathBuf>,
+
+    /// The path to a Bazel binary
+    #[clap(long, default_value = "bazel")]
     bazel: PathBuf,
 
-    // Space separated list of target patterns that comes after all other args.
-    #[structopt(default_value = "@//...")]
+    /// Space separated list of target patterns that comes after all other args.
+    #[clap(default_value = "@//...")]
     targets: Vec<String>,
 }
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/BUILD.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/BUILD.bazel
deleted file mode 100644
index a494da4..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/BUILD.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-"""
-@generated
-cargo-raze generated Bazel file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-package(default_visibility = ["//visibility:public"])
-
-licenses([
-    "notice",  # See individual crates for specific licenses
-])
-
-# Aliased targets
-alias(
-    name = "anyhow",
-    actual = "@rules_rust_tools_rust_analyzer__anyhow__1_0_45//:anyhow",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "env_logger",
-    actual = "@rules_rust_tools_rust_analyzer__env_logger__0_9_0//:env_logger",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "itertools",
-    actual = "@rules_rust_tools_rust_analyzer__itertools__0_10_1//:itertools",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "log",
-    actual = "@rules_rust_tools_rust_analyzer__log__0_4_14//:log",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "serde",
-    actual = "@rules_rust_tools_rust_analyzer__serde__1_0_130//:serde",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "serde_json",
-    actual = "@rules_rust_tools_rust_analyzer__serde_json__1_0_69//:serde_json",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "structopt",
-    actual = "@rules_rust_tools_rust_analyzer__structopt__0_3_25//:structopt",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-# Export file for Stardoc support
-exports_files(
-    [
-        "crates.bzl",
-    ],
-    visibility = ["//visibility:public"],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/Cargo.raze.lock b/third_party/rules_rust/tools/rust_analyzer/raze/Cargo.raze.lock
deleted file mode 100644
index d78e906..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/Cargo.raze.lock
+++ /dev/null
@@ -1,377 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-[[package]]
-name = "aho-corasick"
-version = "0.7.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "ansi_term"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
-dependencies = [
- "winapi",
-]
-
-[[package]]
-name = "anyhow"
-version = "1.0.45"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee10e43ae4a853c0a3591d4e2ada1719e553be18199d9da9d4a83f5927c2f5c7"
-
-[[package]]
-name = "atty"
-version = "0.2.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
-dependencies = [
- "hermit-abi",
- "libc",
- "winapi",
-]
-
-[[package]]
-name = "bitflags"
-version = "1.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-
-[[package]]
-name = "cfg-if"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-
-[[package]]
-name = "clap"
-version = "2.33.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
-dependencies = [
- "ansi_term",
- "atty",
- "bitflags",
- "strsim",
- "textwrap",
- "unicode-width",
- "vec_map",
-]
-
-[[package]]
-name = "compile_with_bazel"
-version = "0.0.0"
-dependencies = [
- "anyhow",
- "env_logger",
- "itertools",
- "log",
- "serde",
- "serde_json",
- "structopt",
-]
-
-[[package]]
-name = "either"
-version = "1.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
-
-[[package]]
-name = "env_logger"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
-dependencies = [
- "atty",
- "humantime",
- "log",
- "regex",
- "termcolor",
-]
-
-[[package]]
-name = "heck"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
-dependencies = [
- "unicode-segmentation",
-]
-
-[[package]]
-name = "hermit-abi"
-version = "0.1.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "humantime"
-version = "2.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
-
-[[package]]
-name = "itertools"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
-dependencies = [
- "either",
-]
-
-[[package]]
-name = "itoa"
-version = "0.4.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
-
-[[package]]
-name = "lazy_static"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-
-[[package]]
-name = "libc"
-version = "0.2.107"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219"
-
-[[package]]
-name = "log"
-version = "0.4.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
-name = "memchr"
-version = "2.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
-
-[[package]]
-name = "proc-macro-error"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
-dependencies = [
- "proc-macro-error-attr",
- "proc-macro2",
- "quote",
- "syn",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro-error-attr"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
-dependencies = [
- "proc-macro2",
- "quote",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.32"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43"
-dependencies = [
- "unicode-xid",
-]
-
-[[package]]
-name = "quote"
-version = "1.0.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "regex"
-version = "1.5.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-syntax"
-version = "0.6.25"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
-
-[[package]]
-name = "ryu"
-version = "1.0.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
-
-[[package]]
-name = "serde"
-version = "1.0.130"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913"
-dependencies = [
- "serde_derive",
-]
-
-[[package]]
-name = "serde_derive"
-version = "1.0.130"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "serde_json"
-version = "1.0.69"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e466864e431129c7e0d3476b92f20458e5879919a0596c6472738d9fa2d342f8"
-dependencies = [
- "itoa",
- "ryu",
- "serde",
-]
-
-[[package]]
-name = "strsim"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
-
-[[package]]
-name = "structopt"
-version = "0.3.25"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "40b9788f4202aa75c240ecc9c15c65185e6a39ccdeb0fd5d008b98825464c87c"
-dependencies = [
- "clap",
- "lazy_static",
- "structopt-derive",
-]
-
-[[package]]
-name = "structopt-derive"
-version = "0.4.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
-dependencies = [
- "heck",
- "proc-macro-error",
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "syn"
-version = "1.0.81"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-xid",
-]
-
-[[package]]
-name = "termcolor"
-version = "1.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
-dependencies = [
- "winapi-util",
-]
-
-[[package]]
-name = "textwrap"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
-dependencies = [
- "unicode-width",
-]
-
-[[package]]
-name = "unicode-segmentation"
-version = "1.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
-
-[[package]]
-name = "unicode-width"
-version = "0.1.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
-
-[[package]]
-name = "unicode-xid"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
-
-[[package]]
-name = "vec_map"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
-
-[[package]]
-name = "version_check"
-version = "0.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
-
-[[package]]
-name = "winapi"
-version = "0.3.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-dependencies = [
- "winapi-i686-pc-windows-gnu",
- "winapi-x86_64-pc-windows-gnu",
-]
-
-[[package]]
-name = "winapi-i686-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-
-[[package]]
-name = "winapi-util"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
-dependencies = [
- "winapi",
-]
-
-[[package]]
-name = "winapi-x86_64-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/Cargo.toml b/third_party/rules_rust/tools/rust_analyzer/raze/Cargo.toml
deleted file mode 100644
index 4a9b0ee..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/Cargo.toml
+++ /dev/null
@@ -1,26 +0,0 @@
-[package]
-name = "compile_with_bazel"
-version = "0.0.0"
-edition="2018"
-
-[lib]
-path = "fake_lib.rs"
-
-[dependencies]
-anyhow = "1.0"
-log = "0.4"
-env_logger = "0.9"
-serde = { version = "1.0", features = ["derive"] } 
-serde_json = "1.0"
-structopt = "0.3"
-
-[dev-dependencies]
-itertools = "0.10"
-
-[package.metadata.raze]
-genmode = "Remote"
-workspace_path = "//tools/rust_analyzer/raze"
-gen_workspace_prefix = "rules_rust_tools_rust_analyzer"
-rust_rules_workspace_name = "rules_rust"
-package_aliases_dir = "."
-default_gen_buildrs = true
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/crates.bzl b/third_party/rules_rust/tools/rust_analyzer/raze/crates.bzl
deleted file mode 100644
index 336972e..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/crates.bzl
+++ /dev/null
@@ -1,442 +0,0 @@
-"""
-@generated
-cargo-raze generated Bazel file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-load("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository")  # buildifier: disable=load
-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")  # buildifier: disable=load
-load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")  # buildifier: disable=load
-
-def rules_rust_tools_rust_analyzer_fetch_remote_crates():
-    """This function defines a collection of repos and should be called in a WORKSPACE file"""
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__aho_corasick__0_7_18",
-        url = "https://crates.io/api/v1/crates/aho-corasick/0.7.18/download",
-        type = "tar.gz",
-        sha256 = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f",
-        strip_prefix = "aho-corasick-0.7.18",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.aho-corasick-0.7.18.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__ansi_term__0_11_0",
-        url = "https://crates.io/api/v1/crates/ansi_term/0.11.0/download",
-        type = "tar.gz",
-        sha256 = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b",
-        strip_prefix = "ansi_term-0.11.0",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.ansi_term-0.11.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__anyhow__1_0_45",
-        url = "https://crates.io/api/v1/crates/anyhow/1.0.45/download",
-        type = "tar.gz",
-        sha256 = "ee10e43ae4a853c0a3591d4e2ada1719e553be18199d9da9d4a83f5927c2f5c7",
-        strip_prefix = "anyhow-1.0.45",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.anyhow-1.0.45.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__atty__0_2_14",
-        url = "https://crates.io/api/v1/crates/atty/0.2.14/download",
-        type = "tar.gz",
-        sha256 = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8",
-        strip_prefix = "atty-0.2.14",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.atty-0.2.14.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__bitflags__1_3_2",
-        url = "https://crates.io/api/v1/crates/bitflags/1.3.2/download",
-        type = "tar.gz",
-        sha256 = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a",
-        strip_prefix = "bitflags-1.3.2",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.bitflags-1.3.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__cfg_if__1_0_0",
-        url = "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
-        type = "tar.gz",
-        sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd",
-        strip_prefix = "cfg-if-1.0.0",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.cfg-if-1.0.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__clap__2_33_3",
-        url = "https://crates.io/api/v1/crates/clap/2.33.3/download",
-        type = "tar.gz",
-        sha256 = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002",
-        strip_prefix = "clap-2.33.3",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.clap-2.33.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__either__1_6_1",
-        url = "https://crates.io/api/v1/crates/either/1.6.1/download",
-        type = "tar.gz",
-        sha256 = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457",
-        strip_prefix = "either-1.6.1",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.either-1.6.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__env_logger__0_9_0",
-        url = "https://crates.io/api/v1/crates/env_logger/0.9.0/download",
-        type = "tar.gz",
-        sha256 = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3",
-        strip_prefix = "env_logger-0.9.0",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.env_logger-0.9.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__heck__0_3_3",
-        url = "https://crates.io/api/v1/crates/heck/0.3.3/download",
-        type = "tar.gz",
-        sha256 = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c",
-        strip_prefix = "heck-0.3.3",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.heck-0.3.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__hermit_abi__0_1_19",
-        url = "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download",
-        type = "tar.gz",
-        sha256 = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33",
-        strip_prefix = "hermit-abi-0.1.19",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.hermit-abi-0.1.19.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__humantime__2_1_0",
-        url = "https://crates.io/api/v1/crates/humantime/2.1.0/download",
-        type = "tar.gz",
-        sha256 = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4",
-        strip_prefix = "humantime-2.1.0",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.humantime-2.1.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__itertools__0_10_1",
-        url = "https://crates.io/api/v1/crates/itertools/0.10.1/download",
-        type = "tar.gz",
-        sha256 = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf",
-        strip_prefix = "itertools-0.10.1",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.itertools-0.10.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__itoa__0_4_8",
-        url = "https://crates.io/api/v1/crates/itoa/0.4.8/download",
-        type = "tar.gz",
-        sha256 = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4",
-        strip_prefix = "itoa-0.4.8",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.itoa-0.4.8.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__lazy_static__1_4_0",
-        url = "https://crates.io/api/v1/crates/lazy_static/1.4.0/download",
-        type = "tar.gz",
-        sha256 = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646",
-        strip_prefix = "lazy_static-1.4.0",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.lazy_static-1.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__libc__0_2_107",
-        url = "https://crates.io/api/v1/crates/libc/0.2.107/download",
-        type = "tar.gz",
-        sha256 = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219",
-        strip_prefix = "libc-0.2.107",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.libc-0.2.107.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__log__0_4_14",
-        url = "https://crates.io/api/v1/crates/log/0.4.14/download",
-        type = "tar.gz",
-        sha256 = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710",
-        strip_prefix = "log-0.4.14",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.log-0.4.14.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__memchr__2_4_1",
-        url = "https://crates.io/api/v1/crates/memchr/2.4.1/download",
-        type = "tar.gz",
-        sha256 = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a",
-        strip_prefix = "memchr-2.4.1",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.memchr-2.4.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__proc_macro_error__1_0_4",
-        url = "https://crates.io/api/v1/crates/proc-macro-error/1.0.4/download",
-        type = "tar.gz",
-        sha256 = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c",
-        strip_prefix = "proc-macro-error-1.0.4",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.proc-macro-error-1.0.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__proc_macro_error_attr__1_0_4",
-        url = "https://crates.io/api/v1/crates/proc-macro-error-attr/1.0.4/download",
-        type = "tar.gz",
-        sha256 = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869",
-        strip_prefix = "proc-macro-error-attr-1.0.4",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.proc-macro-error-attr-1.0.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__proc_macro2__1_0_32",
-        url = "https://crates.io/api/v1/crates/proc-macro2/1.0.32/download",
-        type = "tar.gz",
-        sha256 = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43",
-        strip_prefix = "proc-macro2-1.0.32",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.proc-macro2-1.0.32.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__quote__1_0_10",
-        url = "https://crates.io/api/v1/crates/quote/1.0.10/download",
-        type = "tar.gz",
-        sha256 = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05",
-        strip_prefix = "quote-1.0.10",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.quote-1.0.10.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__regex__1_5_4",
-        url = "https://crates.io/api/v1/crates/regex/1.5.4/download",
-        type = "tar.gz",
-        sha256 = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461",
-        strip_prefix = "regex-1.5.4",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.regex-1.5.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__regex_syntax__0_6_25",
-        url = "https://crates.io/api/v1/crates/regex-syntax/0.6.25/download",
-        type = "tar.gz",
-        sha256 = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b",
-        strip_prefix = "regex-syntax-0.6.25",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.regex-syntax-0.6.25.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__ryu__1_0_5",
-        url = "https://crates.io/api/v1/crates/ryu/1.0.5/download",
-        type = "tar.gz",
-        sha256 = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e",
-        strip_prefix = "ryu-1.0.5",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.ryu-1.0.5.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__serde__1_0_130",
-        url = "https://crates.io/api/v1/crates/serde/1.0.130/download",
-        type = "tar.gz",
-        sha256 = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913",
-        strip_prefix = "serde-1.0.130",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.serde-1.0.130.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__serde_derive__1_0_130",
-        url = "https://crates.io/api/v1/crates/serde_derive/1.0.130/download",
-        type = "tar.gz",
-        sha256 = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b",
-        strip_prefix = "serde_derive-1.0.130",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.serde_derive-1.0.130.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__serde_json__1_0_69",
-        url = "https://crates.io/api/v1/crates/serde_json/1.0.69/download",
-        type = "tar.gz",
-        sha256 = "e466864e431129c7e0d3476b92f20458e5879919a0596c6472738d9fa2d342f8",
-        strip_prefix = "serde_json-1.0.69",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.serde_json-1.0.69.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__strsim__0_8_0",
-        url = "https://crates.io/api/v1/crates/strsim/0.8.0/download",
-        type = "tar.gz",
-        sha256 = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a",
-        strip_prefix = "strsim-0.8.0",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.strsim-0.8.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__structopt__0_3_25",
-        url = "https://crates.io/api/v1/crates/structopt/0.3.25/download",
-        type = "tar.gz",
-        sha256 = "40b9788f4202aa75c240ecc9c15c65185e6a39ccdeb0fd5d008b98825464c87c",
-        strip_prefix = "structopt-0.3.25",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.structopt-0.3.25.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__structopt_derive__0_4_18",
-        url = "https://crates.io/api/v1/crates/structopt-derive/0.4.18/download",
-        type = "tar.gz",
-        sha256 = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0",
-        strip_prefix = "structopt-derive-0.4.18",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.structopt-derive-0.4.18.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__syn__1_0_81",
-        url = "https://crates.io/api/v1/crates/syn/1.0.81/download",
-        type = "tar.gz",
-        sha256 = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966",
-        strip_prefix = "syn-1.0.81",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.syn-1.0.81.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__termcolor__1_1_2",
-        url = "https://crates.io/api/v1/crates/termcolor/1.1.2/download",
-        type = "tar.gz",
-        sha256 = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4",
-        strip_prefix = "termcolor-1.1.2",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.termcolor-1.1.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__textwrap__0_11_0",
-        url = "https://crates.io/api/v1/crates/textwrap/0.11.0/download",
-        type = "tar.gz",
-        sha256 = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060",
-        strip_prefix = "textwrap-0.11.0",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.textwrap-0.11.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__unicode_segmentation__1_8_0",
-        url = "https://crates.io/api/v1/crates/unicode-segmentation/1.8.0/download",
-        type = "tar.gz",
-        sha256 = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b",
-        strip_prefix = "unicode-segmentation-1.8.0",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.unicode-segmentation-1.8.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__unicode_width__0_1_9",
-        url = "https://crates.io/api/v1/crates/unicode-width/0.1.9/download",
-        type = "tar.gz",
-        sha256 = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973",
-        strip_prefix = "unicode-width-0.1.9",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.unicode-width-0.1.9.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__unicode_xid__0_2_2",
-        url = "https://crates.io/api/v1/crates/unicode-xid/0.2.2/download",
-        type = "tar.gz",
-        sha256 = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3",
-        strip_prefix = "unicode-xid-0.2.2",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.unicode-xid-0.2.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__vec_map__0_8_2",
-        url = "https://crates.io/api/v1/crates/vec_map/0.8.2/download",
-        type = "tar.gz",
-        sha256 = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191",
-        strip_prefix = "vec_map-0.8.2",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.vec_map-0.8.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__version_check__0_9_3",
-        url = "https://crates.io/api/v1/crates/version_check/0.9.3/download",
-        type = "tar.gz",
-        sha256 = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe",
-        strip_prefix = "version_check-0.9.3",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.version_check-0.9.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__winapi__0_3_9",
-        url = "https://crates.io/api/v1/crates/winapi/0.3.9/download",
-        type = "tar.gz",
-        sha256 = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419",
-        strip_prefix = "winapi-0.3.9",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.winapi-0.3.9.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__winapi_i686_pc_windows_gnu__0_4_0",
-        url = "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
-        type = "tar.gz",
-        sha256 = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6",
-        strip_prefix = "winapi-i686-pc-windows-gnu-0.4.0",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__winapi_util__0_1_5",
-        url = "https://crates.io/api/v1/crates/winapi-util/0.1.5/download",
-        type = "tar.gz",
-        sha256 = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178",
-        strip_prefix = "winapi-util-0.1.5",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.winapi-util-0.1.5.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_tools_rust_analyzer__winapi_x86_64_pc_windows_gnu__0_4_0",
-        url = "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
-        type = "tar.gz",
-        sha256 = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f",
-        strip_prefix = "winapi-x86_64-pc-windows-gnu-0.4.0",
-        build_file = Label("//tools/rust_analyzer/raze/remote:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel"),
-    )
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.aho-corasick-0.7.18.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.aho-corasick-0.7.18.bazel
deleted file mode 100644
index d0d1788..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.aho-corasick-0.7.18.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "aho_corasick",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.7.18",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_tools_rust_analyzer__memchr__2_4_1//:memchr",
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.ansi_term-0.11.0.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.ansi_term-0.11.0.bazel
deleted file mode 100644
index e742b36..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.ansi_term-0.11.0.bazel
+++ /dev/null
@@ -1,66 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "colours" with type "example" omitted
-
-rust_library(
-    name = "ansi_term",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.11.0",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(target_os = "windows")
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_tools_rust_analyzer__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.anyhow-1.0.45.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.anyhow-1.0.45.bazel
deleted file mode 100644
index 737d7df..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.anyhow-1.0.45.bazel
+++ /dev/null
@@ -1,113 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "anyhow_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.45",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "anyhow",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.45",
-    # buildifier: leave-alone
-    deps = [
-        ":anyhow_build_script",
-    ],
-)
-
-# Unsupported target "compiletest" with type "test" omitted
-
-# Unsupported target "test_autotrait" with type "test" omitted
-
-# Unsupported target "test_backtrace" with type "test" omitted
-
-# Unsupported target "test_boxed" with type "test" omitted
-
-# Unsupported target "test_chain" with type "test" omitted
-
-# Unsupported target "test_context" with type "test" omitted
-
-# Unsupported target "test_convert" with type "test" omitted
-
-# Unsupported target "test_downcast" with type "test" omitted
-
-# Unsupported target "test_ffi" with type "test" omitted
-
-# Unsupported target "test_fmt" with type "test" omitted
-
-# Unsupported target "test_macros" with type "test" omitted
-
-# Unsupported target "test_repr" with type "test" omitted
-
-# Unsupported target "test_source" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.atty-0.2.14.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.atty-0.2.14.bazel
deleted file mode 100644
index c8b5efa..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.atty-0.2.14.bazel
+++ /dev/null
@@ -1,89 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "atty" with type "example" omitted
-
-rust_library(
-    name = "atty",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.14",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_tools_rust_analyzer__libc__0_2_107//:libc",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_tools_rust_analyzer__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.bazel
deleted file mode 100644
index e69de29..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.bazel
+++ /dev/null
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.bitflags-1.3.2.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.bitflags-1.3.2.bazel
deleted file mode 100644
index 417aee7..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.bitflags-1.3.2.bazel
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "bitflags",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.3.2",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "basic" with type "test" omitted
-
-# Unsupported target "compile" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.cfg-if-1.0.0.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.cfg-if-1.0.0.bazel
deleted file mode 100644
index 84595a6..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.cfg-if-1.0.0.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "cfg_if",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "xcrate" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.clap-2.33.3.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.clap-2.33.3.bazel
deleted file mode 100644
index 0ecdf7a..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.clap-2.33.3.bazel
+++ /dev/null
@@ -1,93 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "clap",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-        "ansi_term",
-        "atty",
-        "color",
-        "default",
-        "strsim",
-        "suggestions",
-        "vec_map",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.33.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_tools_rust_analyzer__atty__0_2_14//:atty",
-        "@rules_rust_tools_rust_analyzer__bitflags__1_3_2//:bitflags",
-        "@rules_rust_tools_rust_analyzer__strsim__0_8_0//:strsim",
-        "@rules_rust_tools_rust_analyzer__textwrap__0_11_0//:textwrap",
-        "@rules_rust_tools_rust_analyzer__unicode_width__0_1_9//:unicode_width",
-        "@rules_rust_tools_rust_analyzer__vec_map__0_8_2//:vec_map",
-    ] + selects.with_or({
-        # cfg(not(windows))
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:wasm32-unknown-unknown",
-            "@rules_rust//rust/platform:wasm32-wasi",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_tools_rust_analyzer__ansi_term__0_11_0//:ansi_term",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.either-1.6.1.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.either-1.6.1.bazel
deleted file mode 100644
index 0af0135..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.either-1.6.1.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "either",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.6.1",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.env_logger-0.9.0.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.env_logger-0.9.0.bazel
deleted file mode 100644
index 4d35482..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.env_logger-0.9.0.bazel
+++ /dev/null
@@ -1,71 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "env_logger",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "atty",
-        "default",
-        "humantime",
-        "regex",
-        "termcolor",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.9.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_tools_rust_analyzer__atty__0_2_14//:atty",
-        "@rules_rust_tools_rust_analyzer__humantime__2_1_0//:humantime",
-        "@rules_rust_tools_rust_analyzer__log__0_4_14//:log",
-        "@rules_rust_tools_rust_analyzer__regex__1_5_4//:regex",
-        "@rules_rust_tools_rust_analyzer__termcolor__1_1_2//:termcolor",
-    ],
-)
-
-# Unsupported target "init-twice-retains-filter" with type "test" omitted
-
-# Unsupported target "log-in-log" with type "test" omitted
-
-# Unsupported target "log_tls_dtors" with type "test" omitted
-
-# Unsupported target "regexp_filter" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.heck-0.3.3.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.heck-0.3.3.bazel
deleted file mode 100644
index 7aac083..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.heck-0.3.3.bazel
+++ /dev/null
@@ -1,54 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "heck",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_tools_rust_analyzer__unicode_segmentation__1_8_0//:unicode_segmentation",
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.hermit-abi-0.1.19.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.hermit-abi-0.1.19.bazel
deleted file mode 100644
index 99cba1b..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.hermit-abi-0.1.19.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "hermit_abi",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.19",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_tools_rust_analyzer__libc__0_2_107//:libc",
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.humantime-2.1.0.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.humantime-2.1.0.bazel
deleted file mode 100644
index 9905a0d..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.humantime-2.1.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "datetime_format" with type "bench" omitted
-
-# Unsupported target "datetime_parse" with type "bench" omitted
-
-rust_library(
-    name = "humantime",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.1.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.itertools-0.10.1.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.itertools-0.10.1.bazel
deleted file mode 100644
index 20935bf..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.itertools-0.10.1.bazel
+++ /dev/null
@@ -1,99 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "bench1" with type "bench" omitted
-
-# Unsupported target "combinations" with type "bench" omitted
-
-# Unsupported target "combinations_with_replacement" with type "bench" omitted
-
-# Unsupported target "fold_specialization" with type "bench" omitted
-
-# Unsupported target "powerset" with type "bench" omitted
-
-# Unsupported target "tree_fold1" with type "bench" omitted
-
-# Unsupported target "tuple_combinations" with type "bench" omitted
-
-# Unsupported target "tuples" with type "bench" omitted
-
-# Unsupported target "iris" with type "example" omitted
-
-rust_library(
-    name = "itertools",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "use_alloc",
-        "use_std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.10.1",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_tools_rust_analyzer__either__1_6_1//:either",
-    ],
-)
-
-# Unsupported target "adaptors_no_collect" with type "test" omitted
-
-# Unsupported target "flatten_ok" with type "test" omitted
-
-# Unsupported target "fold_specialization" with type "test" omitted
-
-# Unsupported target "macros_hygiene" with type "test" omitted
-
-# Unsupported target "merge_join" with type "test" omitted
-
-# Unsupported target "peeking_take_while" with type "test" omitted
-
-# Unsupported target "quick" with type "test" omitted
-
-# Unsupported target "specializations" with type "test" omitted
-
-# Unsupported target "test_core" with type "test" omitted
-
-# Unsupported target "test_std" with type "test" omitted
-
-# Unsupported target "tuples" with type "test" omitted
-
-# Unsupported target "zip" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.itoa-0.4.8.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.itoa-0.4.8.bazel
deleted file mode 100644
index 27868c7..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.itoa-0.4.8.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "bench" with type "bench" omitted
-
-rust_library(
-    name = "itoa",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.8",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.lazy_static-1.4.0.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.lazy_static-1.4.0.bazel
deleted file mode 100644
index ba88ed7..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.lazy_static-1.4.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "lazy_static",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.4.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "no_std" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.libc-0.2.107.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.libc-0.2.107.bazel
deleted file mode 100644
index bfb4b82..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.libc-0.2.107.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "libc_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.107",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "libc",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.107",
-    # buildifier: leave-alone
-    deps = [
-        ":libc_build_script",
-    ],
-)
-
-# Unsupported target "const_fn" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.log-0.4.14.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.log-0.4.14.bazel
deleted file mode 100644
index 79cad4d..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.log-0.4.14.bazel
+++ /dev/null
@@ -1,92 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "log_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.14",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-# Unsupported target "value" with type "bench" omitted
-
-rust_library(
-    name = "log",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.14",
-    # buildifier: leave-alone
-    deps = [
-        ":log_build_script",
-        "@rules_rust_tools_rust_analyzer__cfg_if__1_0_0//:cfg_if",
-    ],
-)
-
-# Unsupported target "filters" with type "test" omitted
-
-# Unsupported target "macros" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.memchr-2.4.1.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.memchr-2.4.1.bazel
deleted file mode 100644
index 2016ce4..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.memchr-2.4.1.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "memchr_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.4.1",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "memchr",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.4.1",
-    # buildifier: leave-alone
-    deps = [
-        ":memchr_build_script",
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.proc-macro-error-1.0.4.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.proc-macro-error-1.0.4.bazel
deleted file mode 100644
index c6c622c..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.proc-macro-error-1.0.4.bazel
+++ /dev/null
@@ -1,102 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "proc_macro_error_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "syn",
-        "syn-error",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.4",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@rules_rust_tools_rust_analyzer__version_check__0_9_3//:version_check",
-    ],
-)
-
-rust_library(
-    name = "proc_macro_error",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "syn",
-        "syn-error",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    proc_macro_deps = [
-        "@rules_rust_tools_rust_analyzer__proc_macro_error_attr__1_0_4//:proc_macro_error_attr",
-    ],
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.4",
-    # buildifier: leave-alone
-    deps = [
-        ":proc_macro_error_build_script",
-        "@rules_rust_tools_rust_analyzer__proc_macro2__1_0_32//:proc_macro2",
-        "@rules_rust_tools_rust_analyzer__quote__1_0_10//:quote",
-        "@rules_rust_tools_rust_analyzer__syn__1_0_81//:syn",
-    ],
-)
-
-# Unsupported target "macro-errors" with type "test" omitted
-
-# Unsupported target "ok" with type "test" omitted
-
-# Unsupported target "runtime-errors" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.proc-macro-error-attr-1.0.4.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.proc-macro-error-attr-1.0.4.bazel
deleted file mode 100644
index ba807a8..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.proc-macro-error-attr-1.0.4.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "proc_macro_error_attr_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.4",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@rules_rust_tools_rust_analyzer__version_check__0_9_3//:version_check",
-    ],
-)
-
-rust_proc_macro(
-    name = "proc_macro_error_attr",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.4",
-    # buildifier: leave-alone
-    deps = [
-        ":proc_macro_error_attr_build_script",
-        "@rules_rust_tools_rust_analyzer__proc_macro2__1_0_32//:proc_macro2",
-        "@rules_rust_tools_rust_analyzer__quote__1_0_10//:quote",
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.proc-macro2-1.0.32.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.proc-macro2-1.0.32.bazel
deleted file mode 100644
index 9252841..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.proc-macro2-1.0.32.bazel
+++ /dev/null
@@ -1,98 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "proc_macro2_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.32",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "proc_macro2",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.32",
-    # buildifier: leave-alone
-    deps = [
-        ":proc_macro2_build_script",
-        "@rules_rust_tools_rust_analyzer__unicode_xid__0_2_2//:unicode_xid",
-    ],
-)
-
-# Unsupported target "comments" with type "test" omitted
-
-# Unsupported target "features" with type "test" omitted
-
-# Unsupported target "marker" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
-
-# Unsupported target "test_fmt" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.quote-1.0.10.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.quote-1.0.10.bazel
deleted file mode 100644
index 77f5236..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.quote-1.0.10.bazel
+++ /dev/null
@@ -1,62 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "bench" with type "bench" omitted
-
-rust_library(
-    name = "quote",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.10",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_tools_rust_analyzer__proc_macro2__1_0_32//:proc_macro2",
-    ],
-)
-
-# Unsupported target "compiletest" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.regex-1.5.4.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.regex-1.5.4.bazel
deleted file mode 100644
index 8ba41a8..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.regex-1.5.4.bazel
+++ /dev/null
@@ -1,94 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "shootout-regex-dna" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-bytes" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-cheat" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-replace" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-single" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-single-cheat" with type "example" omitted
-
-rust_library(
-    name = "regex",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "aho-corasick",
-        "memchr",
-        "perf",
-        "perf-cache",
-        "perf-dfa",
-        "perf-inline",
-        "perf-literal",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.5.4",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_tools_rust_analyzer__aho_corasick__0_7_18//:aho_corasick",
-        "@rules_rust_tools_rust_analyzer__memchr__2_4_1//:memchr",
-        "@rules_rust_tools_rust_analyzer__regex_syntax__0_6_25//:regex_syntax",
-    ],
-)
-
-# Unsupported target "backtrack" with type "test" omitted
-
-# Unsupported target "backtrack-bytes" with type "test" omitted
-
-# Unsupported target "backtrack-utf8bytes" with type "test" omitted
-
-# Unsupported target "crates-regex" with type "test" omitted
-
-# Unsupported target "default" with type "test" omitted
-
-# Unsupported target "default-bytes" with type "test" omitted
-
-# Unsupported target "nfa" with type "test" omitted
-
-# Unsupported target "nfa-bytes" with type "test" omitted
-
-# Unsupported target "nfa-utf8bytes" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.regex-syntax-0.6.25.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.regex-syntax-0.6.25.bazel
deleted file mode 100644
index d4e0b56..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.regex-syntax-0.6.25.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "bench" with type "bench" omitted
-
-rust_library(
-    name = "regex_syntax",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.25",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.ryu-1.0.5.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.ryu-1.0.5.bazel
deleted file mode 100644
index d4df380..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.ryu-1.0.5.bazel
+++ /dev/null
@@ -1,101 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR BSL-1.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "ryu_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.5",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-# Unsupported target "bench" with type "bench" omitted
-
-# Unsupported target "upstream_benchmark" with type "example" omitted
-
-rust_library(
-    name = "ryu",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.5",
-    # buildifier: leave-alone
-    deps = [
-        ":ryu_build_script",
-    ],
-)
-
-# Unsupported target "common_test" with type "test" omitted
-
-# Unsupported target "d2s_table_test" with type "test" omitted
-
-# Unsupported target "d2s_test" with type "test" omitted
-
-# Unsupported target "exhaustive" with type "test" omitted
-
-# Unsupported target "f2s_test" with type "test" omitted
-
-# Unsupported target "s2d_test" with type "test" omitted
-
-# Unsupported target "s2f_test" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.serde-1.0.130.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.serde-1.0.130.bazel
deleted file mode 100644
index 7b5cb8c..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.serde-1.0.130.bazel
+++ /dev/null
@@ -1,94 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "serde_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "derive",
-        "serde_derive",
-        "std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.130",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "serde",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "derive",
-        "serde_derive",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    proc_macro_deps = [
-        "@rules_rust_tools_rust_analyzer__serde_derive__1_0_130//:serde_derive",
-    ],
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.130",
-    # buildifier: leave-alone
-    deps = [
-        ":serde_build_script",
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.serde_derive-1.0.130.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.serde_derive-1.0.130.bazel
deleted file mode 100644
index 2d84e1d..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.serde_derive-1.0.130.bazel
+++ /dev/null
@@ -1,88 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "serde_derive_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.130",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_proc_macro(
-    name = "serde_derive",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.130",
-    # buildifier: leave-alone
-    deps = [
-        ":serde_derive_build_script",
-        "@rules_rust_tools_rust_analyzer__proc_macro2__1_0_32//:proc_macro2",
-        "@rules_rust_tools_rust_analyzer__quote__1_0_10//:quote",
-        "@rules_rust_tools_rust_analyzer__syn__1_0_81//:syn",
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.serde_json-1.0.69.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.serde_json-1.0.69.bazel
deleted file mode 100644
index 2f4105f..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.serde_json-1.0.69.bazel
+++ /dev/null
@@ -1,90 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "serde_json_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.69",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "serde_json",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.69",
-    # buildifier: leave-alone
-    deps = [
-        ":serde_json_build_script",
-        "@rules_rust_tools_rust_analyzer__itoa__0_4_8//:itoa",
-        "@rules_rust_tools_rust_analyzer__ryu__1_0_5//:ryu",
-        "@rules_rust_tools_rust_analyzer__serde__1_0_130//:serde",
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.strsim-0.8.0.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.strsim-0.8.0.bazel
deleted file mode 100644
index a4df21a..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.strsim-0.8.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "benches" with type "bench" omitted
-
-rust_library(
-    name = "strsim",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.8.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "lib" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.structopt-0.3.25.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.structopt-0.3.25.bazel
deleted file mode 100644
index 24b86f7..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.structopt-0.3.25.bazel
+++ /dev/null
@@ -1,155 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "after_help" with type "example" omitted
-
-# Unsupported target "at_least_two" with type "example" omitted
-
-# Unsupported target "basic" with type "example" omitted
-
-# Unsupported target "deny_missing_docs" with type "example" omitted
-
-# Unsupported target "doc_comments" with type "example" omitted
-
-# Unsupported target "enum_in_args" with type "example" omitted
-
-# Unsupported target "enum_in_args_with_strum" with type "example" omitted
-
-# Unsupported target "enum_tuple" with type "example" omitted
-
-# Unsupported target "env" with type "example" omitted
-
-# Unsupported target "example" with type "example" omitted
-
-# Unsupported target "flatten" with type "example" omitted
-
-# Unsupported target "gen_completions" with type "example" omitted
-
-# Unsupported target "git" with type "example" omitted
-
-# Unsupported target "group" with type "example" omitted
-
-# Unsupported target "keyvalue" with type "example" omitted
-
-# Unsupported target "negative_flag" with type "example" omitted
-
-# Unsupported target "no_version" with type "example" omitted
-
-# Unsupported target "rename_all" with type "example" omitted
-
-# Unsupported target "required_if" with type "example" omitted
-
-# Unsupported target "skip" with type "example" omitted
-
-# Unsupported target "subcommand_aliases" with type "example" omitted
-
-# Unsupported target "true_or_false" with type "example" omitted
-
-rust_library(
-    name = "structopt",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    proc_macro_deps = [
-        "@rules_rust_tools_rust_analyzer__structopt_derive__0_4_18//:structopt_derive",
-    ],
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.25",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_tools_rust_analyzer__clap__2_33_3//:clap",
-        "@rules_rust_tools_rust_analyzer__lazy_static__1_4_0//:lazy_static",
-    ],
-)
-
-# Unsupported target "argument_naming" with type "test" omitted
-
-# Unsupported target "arguments" with type "test" omitted
-
-# Unsupported target "author_version_about" with type "test" omitted
-
-# Unsupported target "custom-string-parsers" with type "test" omitted
-
-# Unsupported target "default_value" with type "test" omitted
-
-# Unsupported target "deny-warnings" with type "test" omitted
-
-# Unsupported target "doc-comments-help" with type "test" omitted
-
-# Unsupported target "explicit_name_no_renaming" with type "test" omitted
-
-# Unsupported target "flags" with type "test" omitted
-
-# Unsupported target "flatten" with type "test" omitted
-
-# Unsupported target "generics" with type "test" omitted
-
-# Unsupported target "issues" with type "test" omitted
-
-# Unsupported target "macro-errors" with type "test" omitted
-
-# Unsupported target "nested-subcommands" with type "test" omitted
-
-# Unsupported target "non_literal_attributes" with type "test" omitted
-
-# Unsupported target "options" with type "test" omitted
-
-# Unsupported target "privacy" with type "test" omitted
-
-# Unsupported target "raw_bool_literal" with type "test" omitted
-
-# Unsupported target "raw_idents" with type "test" omitted
-
-# Unsupported target "regressions" with type "test" omitted
-
-# Unsupported target "rename_all_env" with type "test" omitted
-
-# Unsupported target "skip" with type "test" omitted
-
-# Unsupported target "special_types" with type "test" omitted
-
-# Unsupported target "subcommands" with type "test" omitted
-
-# Unsupported target "utils" with type "test" omitted
-
-# Unsupported target "we_need_syn_full" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.structopt-derive-0.4.18.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.structopt-derive-0.4.18.bazel
deleted file mode 100644
index 8c8dfd8..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.structopt-derive-0.4.18.bazel
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-
-rust_proc_macro(
-    name = "structopt_derive",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.18",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_tools_rust_analyzer__heck__0_3_3//:heck",
-        "@rules_rust_tools_rust_analyzer__proc_macro2__1_0_32//:proc_macro2",
-        "@rules_rust_tools_rust_analyzer__proc_macro_error__1_0_4//:proc_macro_error",
-        "@rules_rust_tools_rust_analyzer__quote__1_0_10//:quote",
-        "@rules_rust_tools_rust_analyzer__syn__1_0_81//:syn",
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.syn-1.0.81.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.syn-1.0.81.bazel
deleted file mode 100644
index efd5cfe..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.syn-1.0.81.bazel
+++ /dev/null
@@ -1,158 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "syn_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "clone-impls",
-        "default",
-        "derive",
-        "full",
-        "parsing",
-        "printing",
-        "proc-macro",
-        "quote",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.81",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-# Unsupported target "file" with type "bench" omitted
-
-# Unsupported target "rust" with type "bench" omitted
-
-rust_library(
-    name = "syn",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "clone-impls",
-        "default",
-        "derive",
-        "full",
-        "parsing",
-        "printing",
-        "proc-macro",
-        "quote",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.81",
-    # buildifier: leave-alone
-    deps = [
-        ":syn_build_script",
-        "@rules_rust_tools_rust_analyzer__proc_macro2__1_0_32//:proc_macro2",
-        "@rules_rust_tools_rust_analyzer__quote__1_0_10//:quote",
-        "@rules_rust_tools_rust_analyzer__unicode_xid__0_2_2//:unicode_xid",
-    ],
-)
-
-# Unsupported target "test_asyncness" with type "test" omitted
-
-# Unsupported target "test_attribute" with type "test" omitted
-
-# Unsupported target "test_derive_input" with type "test" omitted
-
-# Unsupported target "test_expr" with type "test" omitted
-
-# Unsupported target "test_generics" with type "test" omitted
-
-# Unsupported target "test_grouping" with type "test" omitted
-
-# Unsupported target "test_ident" with type "test" omitted
-
-# Unsupported target "test_item" with type "test" omitted
-
-# Unsupported target "test_iterators" with type "test" omitted
-
-# Unsupported target "test_lit" with type "test" omitted
-
-# Unsupported target "test_meta" with type "test" omitted
-
-# Unsupported target "test_parse_buffer" with type "test" omitted
-
-# Unsupported target "test_parse_stream" with type "test" omitted
-
-# Unsupported target "test_pat" with type "test" omitted
-
-# Unsupported target "test_path" with type "test" omitted
-
-# Unsupported target "test_precedence" with type "test" omitted
-
-# Unsupported target "test_receiver" with type "test" omitted
-
-# Unsupported target "test_round_trip" with type "test" omitted
-
-# Unsupported target "test_shebang" with type "test" omitted
-
-# Unsupported target "test_should_parse" with type "test" omitted
-
-# Unsupported target "test_size" with type "test" omitted
-
-# Unsupported target "test_stmt" with type "test" omitted
-
-# Unsupported target "test_token_trees" with type "test" omitted
-
-# Unsupported target "test_ty" with type "test" omitted
-
-# Unsupported target "test_visibility" with type "test" omitted
-
-# Unsupported target "zzz_stable" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.termcolor-1.1.2.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.termcolor-1.1.2.bazel
deleted file mode 100644
index 7605e0c..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.termcolor-1.1.2.bazel
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "termcolor",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.1.2",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_tools_rust_analyzer__winapi_util__0_1_5//:winapi_util",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.textwrap-0.11.0.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.textwrap-0.11.0.bazel
deleted file mode 100644
index 38a4138..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.textwrap-0.11.0.bazel
+++ /dev/null
@@ -1,62 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "linear" with type "bench" omitted
-
-# Unsupported target "layout" with type "example" omitted
-
-# Unsupported target "termwidth" with type "example" omitted
-
-rust_library(
-    name = "textwrap",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.11.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_tools_rust_analyzer__unicode_width__0_1_9//:unicode_width",
-    ],
-)
-
-# Unsupported target "version-numbers" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.unicode-segmentation-1.8.0.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.unicode-segmentation-1.8.0.bazel
deleted file mode 100644
index 126a432..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.unicode-segmentation-1.8.0.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "graphemes" with type "bench" omitted
-
-# Unsupported target "unicode_words" with type "bench" omitted
-
-# Unsupported target "word_bounds" with type "bench" omitted
-
-rust_library(
-    name = "unicode_segmentation",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.8.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.unicode-width-0.1.9.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.unicode-width-0.1.9.bazel
deleted file mode 100644
index 1b1b356..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.unicode-width-0.1.9.bazel
+++ /dev/null
@@ -1,54 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "unicode_width",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.9",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.unicode-xid-0.2.2.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.unicode-xid-0.2.2.bazel
deleted file mode 100644
index 9b7936d..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.unicode-xid-0.2.2.bazel
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "xid" with type "bench" omitted
-
-rust_library(
-    name = "unicode_xid",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.2",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "exhaustive_tests" with type "test" omitted
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.vec_map-0.8.2.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.vec_map-0.8.2.bazel
deleted file mode 100644
index a9ca9b9..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.vec_map-0.8.2.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "vec_map",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.8.2",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.version_check-0.9.3.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.version_check-0.9.3.bazel
deleted file mode 100644
index 2d24b1f..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.version_check-0.9.3.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "version_check",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.9.3",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.winapi-0.3.9.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.winapi-0.3.9.bazel
deleted file mode 100644
index 89fc3a8..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.winapi-0.3.9.bazel
+++ /dev/null
@@ -1,105 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "winapi_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "consoleapi",
-        "errhandlingapi",
-        "fileapi",
-        "minwinbase",
-        "minwindef",
-        "processenv",
-        "std",
-        "winbase",
-        "wincon",
-        "winerror",
-        "winnt",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.9",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "winapi",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "consoleapi",
-        "errhandlingapi",
-        "fileapi",
-        "minwinbase",
-        "minwindef",
-        "processenv",
-        "std",
-        "winbase",
-        "wincon",
-        "winerror",
-        "winnt",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.9",
-    # buildifier: leave-alone
-    deps = [
-        ":winapi_build_script",
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
deleted file mode 100644
index 0920950..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
+++ /dev/null
@@ -1,83 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "winapi_i686_pc_windows_gnu_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.0",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "winapi_i686_pc_windows_gnu",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.0",
-    # buildifier: leave-alone
-    deps = [
-        ":winapi_i686_pc_windows_gnu_build_script",
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.winapi-util-0.1.5.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.winapi-util-0.1.5.bazel
deleted file mode 100644
index d72f51f..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.winapi-util-0.1.5.bazel
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "winapi_util",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.5",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_tools_rust_analyzer__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
deleted file mode 100644
index b6b2804..0000000
--- a/third_party/rules_rust/tools/rust_analyzer/raze/remote/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
+++ /dev/null
@@ -1,83 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//tools/rust_analyzer/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "winapi_x86_64_pc_windows_gnu_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.0",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "winapi_x86_64_pc_windows_gnu",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.0",
-    # buildifier: leave-alone
-    deps = [
-        ":winapi_x86_64_pc_windows_gnu_build_script",
-    ],
-)
diff --git a/third_party/rules_rust/tools/rust_analyzer/rust_project.rs b/third_party/rules_rust/tools/rust_analyzer/rust_project.rs
index 0cc9378..30bb377 100644
--- a/third_party/rules_rust/tools/rust_analyzer/rust_project.rs
+++ b/third_party/rules_rust/tools/rust_analyzer/rust_project.rs
@@ -177,12 +177,17 @@
 pub fn write_rust_project(
     rust_project_path: &Path,
     execution_root: &Path,
+    output_base: &Path,
     rust_project: &RustProject,
 ) -> anyhow::Result<()> {
     let execution_root = execution_root
         .to_str()
         .ok_or_else(|| anyhow!("execution_root is not valid UTF-8"))?;
 
+    let output_base = output_base
+        .to_str()
+        .ok_or_else(|| anyhow!("output_base is not valid UTF-8"))?;
+
     // Try to remove the existing rust-project.json. It's OK if the file doesn't exist.
     match std::fs::remove_file(rust_project_path) {
         Ok(_) => {}
@@ -197,8 +202,9 @@
 
     // Render the `rust-project.json` file and replace the exec root
     // placeholders with the path to the local exec root.
-    let rust_project_content =
-        serde_json::to_string(rust_project)?.replace("__EXEC_ROOT__", execution_root);
+    let rust_project_content = serde_json::to_string(rust_project)?
+        .replace("__EXEC_ROOT__", execution_root)
+        .replace("__OUTPUT_BASE__", output_base);
 
     // Write the new rust-project.json file.
     std::fs::write(rust_project_path, rust_project_content)?;
diff --git a/third_party/rules_rust/tools/rustdoc/rustdoc_test_writer.rs b/third_party/rules_rust/tools/rustdoc/rustdoc_test_writer.rs
index 6803e8b..0920c74 100644
--- a/third_party/rules_rust/tools/rustdoc/rustdoc_test_writer.rs
+++ b/third_party/rules_rust/tools/rustdoc/rustdoc_test_writer.rs
@@ -6,6 +6,7 @@
 use std::collections::{BTreeMap, BTreeSet};
 use std::env;
 use std::fs;
+use std::io::{BufRead, BufReader};
 use std::path::{Path, PathBuf};
 
 #[derive(Debug)]
@@ -19,6 +20,10 @@
     /// The path where the script should be written.
     output: PathBuf,
 
+    /// If Bazel generated a params file, we may need to strip roots from it.
+    /// This is the path where we will output our stripped params file.
+    optional_output_params_file: PathBuf,
+
     /// The `argv` of the configured rustdoc build action.
     action_argv: Vec<String>,
 }
@@ -50,6 +55,13 @@
         .map(PathBuf::from)
         .expect("Missing `--output` argument");
 
+    let optional_output_params_file = writer_args
+        .iter()
+        .find(|arg| arg.starts_with("--optional_test_params="))
+        .and_then(|arg| arg.splitn(2, '=').last())
+        .map(PathBuf::from)
+        .expect("Missing `--optional_test_params` argument");
+
     let (strip_substring_args, writer_args): (Vec<String>, Vec<String>) = writer_args
         .into_iter()
         .partition(|arg| arg.starts_with("--strip_substring="));
@@ -85,10 +97,73 @@
         env_keys,
         strip_substrings,
         output,
+        optional_output_params_file,
         action_argv,
     }
 }
 
+/// Expand the Bazel Arg file and write it into our manually defined params file
+fn expand_params_file(mut options: Options) -> Options {
+    let params_extension = if cfg!(target_family = "windows") {
+        ".rustdoc_test.bat-0.params"
+    } else {
+        ".rustdoc_test.sh-0.params"
+    };
+
+    // We always need to produce the params file, we might overwrite this later though
+    fs::write(&options.optional_output_params_file, b"unused")
+        .expect("Failed to write params file");
+
+    // extract the path for the params file, if it exists
+    let params_path = match options.action_argv.pop() {
+        // Found the params file!
+        Some(arg) if arg.starts_with('@') && arg.ends_with(params_extension) => {
+            let path_str = arg
+                .strip_prefix('@')
+                .expect("Checked that there is an @ prefix");
+            PathBuf::from(path_str)
+        }
+        // No params file present, exit early
+        Some(arg) => {
+            options.action_argv.push(arg);
+            return options;
+        }
+        None => return options,
+    };
+
+    // read the params file
+    let params_file = fs::File::open(params_path).expect("Failed to read the rustdoc params file");
+    let content: Vec<_> = BufReader::new(params_file)
+        .lines()
+        .map(|line| line.expect("failed to parse param as String"))
+        // Remove any substrings found in the argument
+        .map(|arg| {
+            let mut stripped_arg = arg;
+            options
+                .strip_substrings
+                .iter()
+                .for_each(|substring| stripped_arg = stripped_arg.replace(substring, ""));
+            stripped_arg
+        })
+        .collect();
+
+    // add all arguments
+    fs::write(&options.optional_output_params_file, content.join("\n"))
+        .expect("Failed to write test runner");
+
+    // append the path of our new params file
+    let formatted_params_path = format!(
+        "@{}",
+        options
+            .optional_output_params_file
+            .to_str()
+            .expect("invalid UTF-8")
+    );
+    options.action_argv.push(formatted_params_path);
+
+    options
+}
+
 /// Write a unix compatible test runner
 fn write_test_runner_unix(
     path: &Path,
@@ -195,6 +270,7 @@
 
 fn main() {
     let opt = parse_args();
+    let opt = expand_params_file(opt);
 
     let env: BTreeMap<String, String> = env::vars()
         .into_iter()
diff --git a/third_party/rules_rust/tools/rustfmt/BUILD.bazel b/third_party/rules_rust/tools/rustfmt/BUILD.bazel
index 1456eb1..1721301 100644
--- a/third_party/rules_rust/tools/rustfmt/BUILD.bazel
+++ b/third_party/rules_rust/tools/rustfmt/BUILD.bazel
@@ -11,24 +11,33 @@
 rust_library(
     name = "rustfmt_lib",
     srcs = glob(
-        ["srcs/**/*.rs"],
-        exclude = ["srcs/**/*main.rs"],
+        include = ["src/**/*.rs"],
+        exclude = [
+            "src/**/*main.rs",
+            "src/bin/**",
+        ],
     ),
     data = [
         "//:rustfmt.toml",
-        "//rust/toolchain:current_exec_rustfmt_files",
+        "//rust/toolchain:current_rustfmt_files",
     ],
     edition = "2018",
     rustc_env = {
-        "RUSTFMT": "$(rootpath //rust/toolchain:current_exec_rustfmt_files)",
+        "RUSTFMT": "$(rootpath //rust/toolchain:current_rustfmt_files)",
         "RUSTFMT_CONFIG": "$(rootpath //:rustfmt.toml)",
     },
+    rustc_env_files = [
+        "@rules_rust//rust/private:rustfmt_workspace_name",
+    ],
+    deps = [
+        "//tools/runfiles",
+    ],
 )
 
 rust_binary(
     name = "rustfmt",
     srcs = [
-        "srcs/main.rs",
+        "src/main.rs",
     ],
     data = [
         "//:rustfmt.toml",
@@ -36,7 +45,11 @@
     edition = "2018",
     rustc_env = {
         "ASPECT_REPOSITORY": aspect_repository(),
+        "RUST_DEFAULT_EDITION": "$(RUST_DEFAULT_EDITION)",
     },
+    toolchains = [
+        "@rules_rust//rust/toolchain:current_rust_toolchain",
+    ],
     deps = [
         ":rustfmt_lib",
         "//util/label",
@@ -46,7 +59,7 @@
 rust_binary(
     name = "rustfmt_test",
     srcs = [
-        "srcs/test_main.rs",
+        "src/bin/test_main.rs",
     ],
     edition = "2018",
     deps = [
diff --git a/third_party/rules_rust/tools/rustfmt/src/bin/test_main.rs b/third_party/rules_rust/tools/rustfmt/src/bin/test_main.rs
new file mode 100644
index 0000000..57cd203
--- /dev/null
+++ b/third_party/rules_rust/tools/rustfmt/src/bin/test_main.rs
@@ -0,0 +1,72 @@
+use std::path::PathBuf;
+use std::process::Command;
+
+fn main() {
+    // Gather all and environment settings
+    let options = parse_args();
+
+    // Perform rustfmt for each manifest available
+    run_rustfmt(&options);
+}
+
+/// Run rustfmt on a set of Bazel targets
+fn run_rustfmt(options: &Config) {
+    // In order to ensure the test parses all sources, we separately
+    // track whether or not a failure has occured when checking formatting.
+    let mut is_failure: bool = false;
+
+    for manifest in options.manifests.iter() {
+        // Ignore any targets which do not have source files. This can
+        // occur in cases where all source files are generated.
+        if manifest.sources.is_empty() {
+            continue;
+        }
+
+        // Run rustfmt
+        let status = Command::new(&options.rustfmt_config.rustfmt)
+            .arg("--check")
+            .arg("--edition")
+            .arg(&manifest.edition)
+            .arg("--config-path")
+            .arg(&options.rustfmt_config.config)
+            .args(&manifest.sources)
+            .status()
+            .expect("Failed to run rustfmt");
+
+        if !status.success() {
+            is_failure = true;
+        }
+    }
+
+    if is_failure {
+        std::process::exit(1);
+    }
+}
+
+/// A struct containing details used for executing rustfmt.
+#[derive(Debug)]
+struct Config {
+    /// Information about the current rustfmt binary to run.
+    pub rustfmt_config: rustfmt_lib::RustfmtConfig,
+
+    /// A list of manifests containing information about sources
+    /// to check using rustfmt.
+    pub manifests: Vec<rustfmt_lib::RustfmtManifest>,
+}
+
+/// Parse settings from the environment into a config struct
+fn parse_args() -> Config {
+    let manifests: Vec<PathBuf> = rustfmt_lib::find_manifests();
+
+    if manifests.is_empty() {
+        panic!("No manifests were found");
+    }
+
+    Config {
+        rustfmt_config: rustfmt_lib::parse_rustfmt_config(),
+        manifests: manifests
+            .iter()
+            .map(|manifest| rustfmt_lib::parse_rustfmt_manifest(manifest))
+            .collect(),
+    }
+}
diff --git a/third_party/rules_rust/tools/rustfmt/src/lib.rs b/third_party/rules_rust/tools/rustfmt/src/lib.rs
new file mode 100644
index 0000000..2d8accc
--- /dev/null
+++ b/third_party/rules_rust/tools/rustfmt/src/lib.rs
@@ -0,0 +1,102 @@
+use std::env;
+use std::fs;
+use std::path::{Path, PathBuf};
+
+/// The expected extension of rustfmt manifest files generated by `rustfmt_aspect`.
+pub const RUSTFMT_MANIFEST_EXTENSION: &str = "rustfmt";
+
+/// A struct containing details used for executing rustfmt.
+#[derive(Debug)]
+pub struct RustfmtConfig {
+    /// The rustfmt binary from the currently active toolchain
+    pub rustfmt: PathBuf,
+
+    /// The rustfmt config file containing rustfmt settings.
+    /// https://rust-lang.github.io/rustfmt/
+    pub config: PathBuf,
+}
+
+/// Parse command line arguments and environment variables to
+/// produce config data for running rustfmt.
+pub fn parse_rustfmt_config() -> RustfmtConfig {
+    let runfiles = runfiles::Runfiles::create().unwrap();
+
+    let rustfmt = runfiles.rlocation(concat!(env!("RUSTFMT_WORKSPACE"), "/", env!("RUSTFMT")));
+    if !rustfmt.exists() {
+        panic!("rustfmt does not exist at: {}", rustfmt.display());
+    }
+
+    let config = runfiles.rlocation(concat!(
+        env!("RUSTFMT_WORKSPACE"),
+        "/",
+        env!("RUSTFMT_CONFIG")
+    ));
+    if !config.exists() {
+        panic!(
+            "rustfmt config file does not exist at: {}",
+            config.display()
+        );
+    }
+
+    RustfmtConfig { rustfmt, config }
+}
+
+/// A struct of target specific information for use in running `rustfmt`.
+#[derive(Debug)]
+pub struct RustfmtManifest {
+    /// The Rust edition of the Bazel target
+    pub edition: String,
+
+    /// A list of all (non-generated) source files for formatting.
+    pub sources: Vec<PathBuf>,
+}
+
+/// Parse rustfmt flags from a manifest generated by builds using `rustfmt_aspect`.
+pub fn parse_rustfmt_manifest(manifest: &Path) -> RustfmtManifest {
+    let content = fs::read_to_string(manifest)
+        .unwrap_or_else(|_| panic!("Failed to read rustfmt manifest: {}", manifest.display()));
+
+    let mut lines: Vec<String> = content
+        .split('\n')
+        .into_iter()
+        .filter(|s| !s.is_empty())
+        .map(|s| s.to_owned())
+        .collect();
+
+    let edition = lines
+        .pop()
+        .expect("There should always be at least 1 line in the manifest");
+    edition
+        .parse::<i32>()
+        .expect("The edition should be a numeric value. eg `2018`.");
+
+    let runfiles = runfiles::Runfiles::create().unwrap();
+
+    RustfmtManifest {
+        edition,
+        sources: lines
+            .into_iter()
+            .map(|src| runfiles.rlocation(format!("{}/{}", env!("RUSTFMT_WORKSPACE"), src)))
+            .collect(),
+    }
+}
+
+#[cfg(target_family = "windows")]
+const PATH_ENV_SEP: &str = ";";
+
+#[cfg(target_family = "unix")]
+const PATH_ENV_SEP: &str = ":";
+
+/// Parse the runfiles of the current executable for manifests generated
+/// by the `rustfmt_aspect` aspect.
+pub fn find_manifests() -> Vec<PathBuf> {
+    let runfiles = runfiles::Runfiles::create().unwrap();
+
+    std::env::var("RUSTFMT_MANIFESTS")
+        .map(|var| {
+            var.split(PATH_ENV_SEP)
+                .map(|path| runfiles.rlocation(format!("{}/{}", env!("RUSTFMT_WORKSPACE"), path)))
+                .collect()
+        })
+        .unwrap_or_default()
+}
diff --git a/third_party/rules_rust/tools/rustfmt/src/main.rs b/third_party/rules_rust/tools/rustfmt/src/main.rs
new file mode 100644
index 0000000..5ca10f8
--- /dev/null
+++ b/third_party/rules_rust/tools/rustfmt/src/main.rs
@@ -0,0 +1,195 @@
+//! A tool for querying Rust source files wired into Bazel and running Rustfmt on them.
+
+use std::collections::HashMap;
+use std::env;
+use std::path::{Path, PathBuf};
+use std::process::{Command, Stdio};
+use std::str;
+
+/// The Bazel Rustfmt tool entry point
+fn main() {
+    // Gather all command line and environment settings
+    let options = parse_args();
+
+    // Gather a list of all formattable targets
+    let targets = query_rustfmt_targets(&options);
+
+    // Run rustfmt on these targets
+    apply_rustfmt(&options, &targets);
+}
+
+/// The edition to use in cases where the default edition is unspecified by Bazel
+const FALLBACK_EDITION: &str = "2018";
+
+/// Determine the Rust edition to use in cases where a target has not explicitly
+/// specified the edition via an `edition` attribute.
+fn get_default_edition() -> &'static str {
+    if !env!("RUST_DEFAULT_EDITION").is_empty() {
+        env!("RUST_DEFAULT_EDITION")
+    } else {
+        FALLBACK_EDITION
+    }
+}
+
+/// Get a list of all editions to run formatting for
+fn get_editions() -> Vec<String> {
+    vec!["2015".to_owned(), "2018".to_owned(), "2021".to_owned()]
+}
+
+/// Run a bazel command, capturing stdout while streaming stderr to surface errors
+fn bazel_command(bazel_bin: &Path, args: &[String], current_dir: &Path) -> Vec<String> {
+    let child = Command::new(bazel_bin)
+        .current_dir(current_dir)
+        .args(args)
+        .stdout(Stdio::piped())
+        .stderr(Stdio::inherit())
+        .spawn()
+        .expect("Failed to spawn bazel command");
+
+    let output = child
+        .wait_with_output()
+        .expect("Failed to wait on spawned command");
+
+    if !output.status.success() {
+        eprintln!("Failed to perform `bazel query` command.");
+        std::process::exit(output.status.code().unwrap_or(1));
+    }
+
+    str::from_utf8(&output.stdout)
+        .expect("Invalid stream from command")
+        .split('\n')
+        .filter(|line| !line.is_empty())
+        .map(|line| line.to_string())
+        .collect()
+}
+
+/// The regex representation of an empty `edition` attribute
+const EMPTY_EDITION: &str = "^$";
+
+/// Query for all `*.rs` files in a workspace that are dependencies of targets with the requested edition.
+fn edition_query(bazel_bin: &Path, edition: &str, scope: &str, current_dir: &Path) -> Vec<String> {
+    let query_args = vec![
+        "query".to_owned(),
+        // Query explanation:
+        // Filter all local targets ending in `*.rs`.
+        //     Get all source files.
+        //         Get direct dependencies.
+        //             Get all targets with the specified `edition` attribute.
+        //             Except for targets tagged with `norustfmt`.
+        //             And except for targets with a populated `crate` attribute since `crate` defines edition for this target
+        format!(
+            r#"let scope = set({scope}) in filter("^//.*\.rs$", kind("source file", deps(attr(edition, "{edition}", $scope) except attr(tags, "(^\[|, )(no-format|no-rustfmt|norustfmt)(, |\]$)", $scope) + attr(crate, ".*", $scope), 1)))"#,
+            edition = edition,
+            scope = scope,
+        ),
+        "--keep_going".to_owned(),
+        "--noimplicit_deps".to_owned(),
+    ];
+
+    bazel_command(bazel_bin, &query_args, current_dir)
+}
+
+/// Perform a `bazel` query to determine all source files which are to be
+/// formatted for particular Rust editions.
+fn query_rustfmt_targets(options: &Config) -> HashMap<String, Vec<String>> {
+    let scope = options
+        .packages
+        .clone()
+        .into_iter()
+        .reduce(|acc, item| acc + " " + &item)
+        .unwrap_or_else(|| "//...:all".to_owned());
+
+    let editions = get_editions();
+    let default_edition = get_default_edition();
+
+    editions
+        .into_iter()
+        .map(|edition| {
+            let mut targets = edition_query(&options.bazel, &edition, &scope, &options.workspace);
+
+            // For all targets relying on the toolchain for it's edition,
+            // query anything with an unset edition
+            if edition == default_edition {
+                targets.extend(edition_query(
+                    &options.bazel,
+                    EMPTY_EDITION,
+                    &scope,
+                    &options.workspace,
+                ))
+            }
+
+            (edition, targets)
+        })
+        .collect()
+}
+
+/// Run rustfmt on a set of Bazel targets
+fn apply_rustfmt(options: &Config, editions_and_targets: &HashMap<String, Vec<String>>) {
+    // There is no work to do if the list of targets is empty
+    if editions_and_targets.is_empty() {
+        return;
+    }
+
+    for (edition, targets) in editions_and_targets.iter() {
+        if targets.is_empty() {
+            continue;
+        }
+
+        // Get paths to all formattable sources
+        let sources: Vec<String> = targets
+            .iter()
+            .map(|target| target.replace(':', "/").trim_start_matches('/').to_owned())
+            .collect();
+
+        // Run rustfmt
+        let status = Command::new(&options.rustfmt_config.rustfmt)
+            .current_dir(&options.workspace)
+            .arg("--edition")
+            .arg(edition)
+            .arg("--config-path")
+            .arg(&options.rustfmt_config.config)
+            .args(sources)
+            .status()
+            .expect("Failed to run rustfmt");
+
+        if !status.success() {
+            std::process::exit(status.code().unwrap_or(1));
+        }
+    }
+}
+
+/// A struct containing details used for executing rustfmt.
+#[derive(Debug)]
+struct Config {
+    /// The path of the Bazel workspace root.
+    pub workspace: PathBuf,
+
+    /// The Bazel executable to use for builds and queries.
+    pub bazel: PathBuf,
+
+    /// Information about the current rustfmt binary to run.
+    pub rustfmt_config: rustfmt_lib::RustfmtConfig,
+
+    /// Optionally, users can pass a list of targets/packages/scopes
+    /// (eg `//my:target` or `//my/pkg/...`) to control the targets
+    /// to be formatted. If empty, all targets in the workspace will
+    /// be formatted.
+    pub packages: Vec<String>,
+}
+
+/// Parse command line arguments and environment variables to
+/// produce config data for running rustfmt.
+fn parse_args() -> Config {
+    Config{
+        workspace: PathBuf::from(
+            env::var("BUILD_WORKSPACE_DIRECTORY")
+            .expect("The environment variable BUILD_WORKSPACE_DIRECTORY is required for finding the workspace root")
+        ),
+        bazel: PathBuf::from(
+            env::var("BAZEL_REAL")
+            .unwrap_or_else(|_| "bazel".to_owned())
+        ),
+        rustfmt_config: rustfmt_lib::parse_rustfmt_config(),
+        packages: env::args().skip(1).collect(),
+    }
+}
diff --git a/third_party/rules_rust/tools/rustfmt/srcs/lib.rs b/third_party/rules_rust/tools/rustfmt/srcs/lib.rs
deleted file mode 100644
index ad2e86a..0000000
--- a/third_party/rules_rust/tools/rustfmt/srcs/lib.rs
+++ /dev/null
@@ -1,74 +0,0 @@
-use std::env;
-use std::fs;
-use std::path::{Path, PathBuf};
-
-/// The expected extension of rustfmt manifest files generated by `rustfmt_aspect`.
-pub const RUSTFMT_MANIFEST_EXTENSION: &str = "rustfmt";
-
-/// Generate an absolute path to a file without resolving symlinks
-fn absolutify_existing<T: AsRef<Path>>(path: &T) -> std::io::Result<PathBuf> {
-    let absolute_path = if path.as_ref().is_absolute() {
-        path.as_ref().to_owned()
-    } else {
-        std::env::current_dir()
-            .expect("Failed to get working directory")
-            .join(path)
-    };
-    std::fs::metadata(&absolute_path).map(|_| absolute_path)
-}
-
-/// A struct containing details used for executing rustfmt.
-#[derive(Debug)]
-pub struct RustfmtConfig {
-    /// The rustfmt binary from the currently active toolchain
-    pub rustfmt: PathBuf,
-
-    /// The rustfmt config file containing rustfmt settings.
-    /// https://rust-lang.github.io/rustfmt/
-    pub config: PathBuf,
-}
-
-/// Parse command line arguments and environment variables to
-/// produce config data for running rustfmt.
-pub fn parse_rustfmt_config() -> RustfmtConfig {
-    RustfmtConfig {
-        rustfmt: absolutify_existing(&env!("RUSTFMT")).expect("Unable to find rustfmt binary"),
-        config: absolutify_existing(&env!("RUSTFMT_CONFIG"))
-            .expect("Unable to find rustfmt config file"),
-    }
-}
-
-/// A struct of target specific information for use in running `rustfmt`.
-#[derive(Debug)]
-pub struct RustfmtManifest {
-    /// The Rust edition of the Bazel target
-    pub edition: String,
-
-    /// A list of all (non-generated) source files for formatting.
-    pub sources: Vec<String>,
-}
-
-/// Parse rustfmt flags from a manifest generated by builds using `rustfmt_aspect`.
-pub fn parse_rustfmt_manifest(manifest: &Path) -> RustfmtManifest {
-    let content = fs::read_to_string(manifest)
-        .unwrap_or_else(|_| panic!("Failed to read rustfmt manifest: {}", manifest.display()));
-
-    let mut lines: Vec<String> = content
-        .split('\n')
-        .into_iter()
-        .filter(|s| !s.is_empty())
-        .map(|s| s.to_owned())
-        .collect();
-
-    let edition = lines
-        .pop()
-        .expect("There should always be at least 1 line in the manifest");
-    edition
-        .parse::<i32>()
-        .expect("The edition should be a numeric value. eg `2018`.");
-
-    RustfmtManifest {
-        edition,
-        sources: lines,
-    }
-}
diff --git a/third_party/rules_rust/tools/rustfmt/srcs/main.rs b/third_party/rules_rust/tools/rustfmt/srcs/main.rs
deleted file mode 100644
index 4e4419f..0000000
--- a/third_party/rules_rust/tools/rustfmt/srcs/main.rs
+++ /dev/null
@@ -1,185 +0,0 @@
-use std::env;
-use std::path::PathBuf;
-use std::process::{Command, Stdio};
-use std::str;
-
-fn main() {
-    // Gather all command line and environment settings
-    let options = parse_args();
-
-    // Gather a list of all formattable targets
-    let targets = query_rustfmt_targets(&options);
-
-    // Run rustfmt on these targets
-    apply_rustfmt(&options, &targets);
-}
-
-/// Perform a `bazel` query to determine a list of Bazel targets which are to be formatted.
-fn query_rustfmt_targets(options: &Config) -> Vec<String> {
-    // Determine what packages to query
-    let scope = match options.packages.is_empty() {
-        true => "//...:all".to_owned(),
-        false => {
-            // Check to see if all the provided packages are actually targets
-            let is_all_targets = options
-                .packages
-                .iter()
-                .all(|pkg| match label::analyze(pkg) {
-                    Ok(tgt) => tgt.name != "all",
-                    Err(_) => false,
-                });
-
-            // Early return if a list of targets and not packages were provided
-            if is_all_targets {
-                return options.packages.clone();
-            }
-
-            options.packages.join(" + ")
-        }
-    };
-
-    let query_args = vec![
-        "query".to_owned(),
-        format!(
-            r#"kind('{types}', {scope}) except attr(tags, 'norustfmt', kind('{types}', {scope}))"#,
-            types = "^rust_",
-            scope = scope
-        ),
-    ];
-
-    let child = Command::new(&options.bazel)
-        .current_dir(&options.workspace)
-        .args(query_args)
-        .stdout(Stdio::piped())
-        .stderr(Stdio::inherit())
-        .spawn()
-        .expect("Failed to spawn bazel query command");
-
-    let output = child
-        .wait_with_output()
-        .expect("Failed to wait on spawned command");
-
-    if !output.status.success() {
-        std::process::exit(output.status.code().unwrap_or(1));
-    }
-
-    str::from_utf8(&output.stdout)
-        .expect("Invalid stream from command")
-        .split('\n')
-        .filter(|line| !line.is_empty())
-        .map(|line| line.to_string())
-        .collect()
-}
-
-/// Build a list of Bazel targets using the `rustfmt_aspect` to produce the
-/// arguments to use when formatting the sources of those targets.
-fn generate_rustfmt_target_manifests(options: &Config, targets: &[String]) {
-    let build_args = vec![
-        "build".to_owned(),
-        format!(
-            "--aspects={}//rust:defs.bzl%rustfmt_aspect",
-            env!("ASPECT_REPOSITORY")
-        ),
-        "--output_groups=rustfmt_manifest".to_owned(),
-    ];
-
-    let child = Command::new(&options.bazel)
-        .current_dir(&options.workspace)
-        .args(build_args)
-        .args(targets)
-        .stdout(Stdio::piped())
-        .stderr(Stdio::inherit())
-        .spawn()
-        .expect("Failed to spawn command");
-
-    let output = child
-        .wait_with_output()
-        .expect("Failed to wait on spawned command");
-
-    if !output.status.success() {
-        std::process::exit(output.status.code().unwrap_or(1));
-    }
-}
-
-/// Run rustfmt on a set of Bazel targets
-fn apply_rustfmt(options: &Config, targets: &[String]) {
-    // Ensure the targets are first built and a manifest containing `rustfmt`
-    // arguments are generated before formatting source files.
-    generate_rustfmt_target_manifests(options, targets);
-
-    for target in targets.iter() {
-        // Replace any `:` characters and strip leading slashes
-        let target_path = target.replace(':', "/").trim_start_matches('/').to_owned();
-
-        // Find a manifest for the current target. Not all targets will have one
-        let manifest = options.workspace.join("bazel-bin").join(format!(
-            "{}.{}",
-            &target_path,
-            rustfmt_lib::RUSTFMT_MANIFEST_EXTENSION,
-        ));
-
-        if !manifest.exists() {
-            continue;
-        }
-
-        // Load the manifest containing rustfmt arguments
-        let rustfmt_config = rustfmt_lib::parse_rustfmt_manifest(&manifest);
-
-        // Ignore any targets which do not have source files. This can
-        // occur in cases where all source files are generated.
-        if rustfmt_config.sources.is_empty() {
-            continue;
-        }
-
-        // Run rustfmt
-        let status = Command::new(&options.rustfmt_config.rustfmt)
-            .current_dir(&options.workspace)
-            .arg("--edition")
-            .arg(rustfmt_config.edition)
-            .arg("--config-path")
-            .arg(&options.rustfmt_config.config)
-            .args(rustfmt_config.sources)
-            .status()
-            .expect("Failed to run rustfmt");
-
-        if !status.success() {
-            std::process::exit(status.code().unwrap_or(1));
-        }
-    }
-}
-
-/// A struct containing details used for executing rustfmt.
-#[derive(Debug)]
-struct Config {
-    /// The path of the Bazel workspace root.
-    pub workspace: PathBuf,
-
-    /// The Bazel executable to use for builds and queries.
-    pub bazel: PathBuf,
-
-    /// Information about the current rustfmt binary to run.
-    pub rustfmt_config: rustfmt_lib::RustfmtConfig,
-
-    /// Optionally, users can pass a list of targets/packages/scopes
-    /// (eg `//my:target` or `//my/pkg/...`) to control the targets
-    /// to be formatted. If empty, all targets in the workspace will
-    /// be formatted.
-    pub packages: Vec<String>,
-}
-
-/// Parse command line arguments and environment variables to
-/// produce config data for running rustfmt.
-fn parse_args() -> Config {
-    Config{
-        workspace: PathBuf::from(
-            env::var("BUILD_WORKSPACE_DIRECTORY")
-            .expect("The environment variable BUILD_WORKSPACE_DIRECTORY is required for finding the workspace root")
-        ),
-        bazel: PathBuf::from(
-            env::var("BAZEL_REAL")
-            .unwrap_or_else(|_| "bazel".to_owned())
-        ),
-        rustfmt_config: rustfmt_lib::parse_rustfmt_config(),
-        packages: env::args().skip(1).collect(),
-    }
-}
diff --git a/third_party/rules_rust/tools/rustfmt/srcs/test_main.rs b/third_party/rules_rust/tools/rustfmt/srcs/test_main.rs
deleted file mode 100644
index ea2adba..0000000
--- a/third_party/rules_rust/tools/rustfmt/srcs/test_main.rs
+++ /dev/null
@@ -1,95 +0,0 @@
-use std::fs;
-use std::path::{Path, PathBuf};
-use std::process::Command;
-
-fn main() {
-    // Gather all and environment settings
-    let options = parse_args();
-
-    // Perform rustfmt for each manifest available
-    run_rustfmt(&options);
-}
-
-/// Run rustfmt on a set of Bazel targets
-fn run_rustfmt(options: &Config) {
-    // In order to ensure the test parses all sources, we separately
-    // track whether or not a failure has occured when checking formatting.
-    let mut is_failure: bool = false;
-
-    for manifest in options.manifests.iter() {
-        // Ignore any targets which do not have source files. This can
-        // occur in cases where all source files are generated.
-        if manifest.sources.is_empty() {
-            continue;
-        }
-
-        // Run rustfmt
-        let status = Command::new(&options.rustfmt_config.rustfmt)
-            .arg("--check")
-            .arg("--edition")
-            .arg(&manifest.edition)
-            .arg("--config-path")
-            .arg(&options.rustfmt_config.config)
-            .args(&manifest.sources)
-            .status()
-            .expect("Failed to run rustfmt");
-
-        if !status.success() {
-            is_failure = true;
-        }
-    }
-
-    if is_failure {
-        std::process::exit(1);
-    }
-}
-
-/// A struct containing details used for executing rustfmt.
-#[derive(Debug)]
-struct Config {
-    /// Information about the current rustfmt binary to run.
-    pub rustfmt_config: rustfmt_lib::RustfmtConfig,
-
-    /// A list of manifests containing information about sources
-    /// to check using rustfmt.
-    pub manifests: Vec<rustfmt_lib::RustfmtManifest>,
-}
-
-/// Parse the runfiles of the current executable for manifests generated
-/// but the `rustfmt_aspect` aspect.
-fn find_manifests(dir: &Path, manifests: &mut Vec<PathBuf>) {
-    if dir.is_dir() {
-        for entry in fs::read_dir(dir).expect("Failed to read directory contents") {
-            let entry = entry.expect("Failed to read directory entry");
-            let path = entry.path();
-            if path.is_dir() {
-                find_manifests(&path, manifests);
-            } else if let Some(ext) = path.extension() {
-                if ext == rustfmt_lib::RUSTFMT_MANIFEST_EXTENSION {
-                    manifests.extend(vec![path]);
-                }
-            }
-        }
-    }
-}
-
-/// Parse settings from the environment into a config struct
-fn parse_args() -> Config {
-    let mut manifests: Vec<PathBuf> = Vec::new();
-    find_manifests(
-        &runfiles::find_runfiles_dir().expect("Failed to find runfiles directory"),
-        &mut manifests,
-    );
-
-    if manifests.is_empty() {
-        panic!("No manifests were found");
-    }
-
-    Config {
-        rustfmt_config: rustfmt_lib::parse_rustfmt_config(),
-        manifests: manifests
-            .iter()
-            .map(|manifest| rustfmt_lib::parse_rustfmt_manifest(manifest))
-            .collect(),
-    }
-}
diff --git a/third_party/rules_rust/util/BUILD.bazel b/third_party/rules_rust/util/BUILD.bazel
index 217f1db..8502870 100644
--- a/third_party/rules_rust/util/BUILD.bazel
+++ b/third_party/rules_rust/util/BUILD.bazel
@@ -1,4 +1,11 @@
 sh_binary(
     name = "fetch_shas",
     srcs = ["fetch_shas.sh"],
+    tags = ["manual"],
+)
+
+filegroup(
+    name = "collect_coverage",
+    srcs = ["collect_coverage.sh"],
+    visibility = ["//visibility:public"],
 )
diff --git a/third_party/rules_rust/util/collect_coverage.sh b/third_party/rules_rust/util/collect_coverage.sh
new file mode 100755
index 0000000..328a5c6
--- /dev/null
+++ b/third_party/rules_rust/util/collect_coverage.sh
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+if [[ -n "${VERBOSE_COVERAGE:-}" ]]; then
+  set -x
+fi
+
+readonly profdata_file=$COVERAGE_DIR/coverage.profdata
+
+"$RUNFILES_DIR/$TEST_WORKSPACE/$RUST_LLVM_PROFDATA" \
+  merge \
+  --sparse "$COVERAGE_DIR"/*.profraw \
+  -output "$profdata_file"
+
+"$RUNFILES_DIR/$TEST_WORKSPACE/$RUST_LLVM_COV" \
+  export \
+  -format=lcov \
+  -instr-profile "$profdata_file" \
+  -ignore-filename-regex='.*external/.+' \
+  -ignore-filename-regex='/tmp/.+' \
+  -path-equivalence=.,"$ROOT" \
+  "$RUNFILES_DIR/$TEST_WORKSPACE/$TEST_BINARY" \
+  @"$COVERAGE_MANIFEST" \
+  | sed 's#/proc/self/cwd/##' > "$COVERAGE_OUTPUT_FILE"
diff --git a/third_party/rules_rust/util/fetch_shas.sh b/third_party/rules_rust/util/fetch_shas.sh
index 2a538c1..50fe137 100755
--- a/third_party/rules_rust/util/fetch_shas.sh
+++ b/third_party/rules_rust/util/fetch_shas.sh
@@ -18,7 +18,12 @@
 BETA_ISO_DATES="$(cat "${BUILD_WORKSPACE_DIRECTORY}/util/fetch_shas_BETA_ISO_DATES.txt")"
 NIGHTLY_ISO_DATES="$(cat "${BUILD_WORKSPACE_DIRECTORY}/util/fetch_shas_NIGHTLY_ISO_DATES.txt")"
 
-enumerate_keys() {
+EXTENSIONS=(
+   tar.gz
+   tar.xz
+)
+
+function enumerate_keys() {
   for TOOL in $TOOLS
   do
     for TARGET in $TARGETS
@@ -49,12 +54,29 @@
   done
 }
 
-emit_bzl_file_contents() {
-  echo "$@" \
-    | parallel --trim lr -d ' ' --will-cite 'printf "%s %s\n", {}, $(curl --fail https://static.rust-lang.org/dist/{}.tar.gz.sha256 | cut -f1 -d" ")' \
-    | sed "s/,//g" \
-    | grep -v " $" \
-    > /tmp/reload_shas_shalist.txt
+function emit_bzl_file_contents() {
+  local out_dir="${TMPDIR}/outs"
+  mkdir "${out_dir}"
+
+  echo "--parallel" >> "${TMPDIR}/curl_config"
+  echo "--fail" >> "${TMPDIR}/curl_config"
+  echo "--silent" >> "${TMPDIR}/curl_config"
+  echo "--create-dirs" >> "${TMPDIR}/curl_config"
+  for key in "$@"; do
+    for ext in "${EXTENSIONS[@]}"; do
+      echo "--output ${out_dir}/${key}.${ext}" >> "${TMPDIR}/curl_config"
+      echo "--url https://static.rust-lang.org/dist/${key}.${ext}.sha256" >> "${TMPDIR}/curl_config"
+    done
+  done
+  curl --config "${TMPDIR}/curl_config"
+
+  pushd "${out_dir}" > /dev/null
+  for file in $(find . -type f)
+  do
+    echo "$(echo ${file} | sed 's|./||') $(cat ${file} | awk '{ print $1 }')" >> "${TMPDIR}/shas.txt"
+  done
+  
+  popd > /dev/null
 
   echo "\"\"\"A module containing a mapping of Rust tools to checksums"
   echo ""
@@ -62,9 +84,12 @@
   echo "\"\"\""
   echo ""
   echo "FILE_KEY_TO_SHA = {"
-  cat /tmp/reload_shas_shalist.txt | sed '/^[[:space:]]*$/d' | sort | awk '{print "    \"" $1 "\": \"" $2 "\","}'
+  cat "${TMPDIR}/shas.txt" | sed '/^[[:space:]]*$/d' | sort | awk '{print "    \"" $1 "\": \"" $2 "\","}'
   echo "}"
-  rm /tmp/reload_shas_shalist.txt
 }
 
+export TMPDIR="$(mktemp -d -t bazel_reload_shas_shalists)"
+echo "Fetching known shas..."
 echo "$(emit_bzl_file_contents $(enumerate_keys))" > "${BUILD_WORKSPACE_DIRECTORY}/rust/known_shas.bzl"
+echo "Done"
+rm -rf "${TMPDIR}"
diff --git a/third_party/rules_rust/util/fetch_shas_NIGHTLY_ISO_DATES.txt b/third_party/rules_rust/util/fetch_shas_NIGHTLY_ISO_DATES.txt
index 2d9a94e..ce46ada 100644
--- a/third_party/rules_rust/util/fetch_shas_NIGHTLY_ISO_DATES.txt
+++ b/third_party/rules_rust/util/fetch_shas_NIGHTLY_ISO_DATES.txt
@@ -12,3 +12,7 @@
 2022-01-12
 2022-01-19
 2022-02-23
+2022-04-06
+2022-05-19
+2022-06-30
+2022-07-18
diff --git a/third_party/rules_rust/util/fetch_shas_VERSIONS.txt b/third_party/rules_rust/util/fetch_shas_VERSIONS.txt
index 18ad30c..26ef26d 100644
--- a/third_party/rules_rust/util/fetch_shas_VERSIONS.txt
+++ b/third_party/rules_rust/util/fetch_shas_VERSIONS.txt
@@ -43,3 +43,7 @@
 1.58.0
 1.58.1
 1.59.0
+1.60.0
+1.61.0
+1.62.0
+1.62.1
diff --git a/third_party/rules_rust/util/import/3rdparty/BUILD.bazel b/third_party/rules_rust/util/import/3rdparty/BUILD.bazel
new file mode 100644
index 0000000..cb29b20
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/BUILD.bazel
@@ -0,0 +1,40 @@
+load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
+load("//crate_universe:defs.bzl", "crate", "crates_vendor")
+
+crates_vendor(
+    name = "crates_vendor",
+    cargo_lockfile = "Cargo.Bazel.lock",
+    generate_build_scripts = True,
+    mode = "remote",
+    packages = {
+        "aho-corasick": crate.spec(
+            version = "=0.7.15",
+        ),
+        "lazy_static": crate.spec(
+            version = "=1.4.0",
+        ),
+        "proc-macro2": crate.spec(
+            version = "=1.0.33",
+        ),
+        "quickcheck": crate.spec(
+            version = "=1.0.3",
+        ),
+        "quote": crate.spec(
+            version = "=1.0.10",
+        ),
+        "syn": crate.spec(
+            version = "=1.0.82",
+        ),
+    },
+    repository_name = "rules_rust_util_import",
+    tags = ["manual"],
+)
+
+bzl_library(
+    name = "bzl_lib",
+    srcs = glob(["**/*.bzl"]) + [
+        "//util/import/3rdparty/crates:defs.bzl",
+        "//util/import/3rdparty/crates:crates.bzl",
+    ],
+    visibility = ["//util/import:__pkg__"],
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/Cargo.Bazel.lock b/third_party/rules_rust/util/import/3rdparty/Cargo.Bazel.lock
new file mode 100644
index 0000000..102e136
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/Cargo.Bazel.lock
@@ -0,0 +1,165 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "direct-cargo-bazel-deps"
+version = "0.0.1"
+dependencies = [
+ "aho-corasick",
+ "lazy_static",
+ "proc-macro2",
+ "quickcheck",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
+dependencies = [
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb37d2df5df740e582f28f8560cf425f52bb267d872fe58358eadb554909f07a"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quickcheck"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
+dependencies = [
+ "env_logger",
+ "log",
+ "rand",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "regex"
+version = "1.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a26af418b574bd56588335b3a3659a65725d4e636eb1016c2f9e3b38c7cc759"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+
+[[package]]
+name = "syn"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8daf5dd0bb60cbd4137b1b587d2fc0ae729bc07cf01cd70b36a1ed5ade3b9d59"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.aho-corasick-0.7.15.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.aho-corasick-0.7.15.bazel
new file mode 100644
index 0000000..e502cde
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.aho-corasick-0.7.15.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "aho_corasick",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.7.15",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_util_import__memchr-2.5.0//:memchr",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.bazel
new file mode 100644
index 0000000..4674880
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.bazel
@@ -0,0 +1,66 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+package(default_visibility = ["//visibility:public"])
+
+exports_files(
+    [
+        "cargo-bazel.json",
+        "defs.bzl",
+        "crates.bzl",
+    ] + glob([
+        "*.bazel",
+    ]),
+)
+
+filegroup(
+    name = "srcs",
+    srcs = glob([
+        "*.bazel",
+        "*.bzl",
+    ]),
+)
+
+# Workspace Member Dependencies
+alias(
+    name = "aho-corasick",
+    actual = "@rules_rust_util_import__aho-corasick-0.7.15//:aho_corasick",
+    tags = ["manual"],
+)
+
+alias(
+    name = "lazy_static",
+    actual = "@rules_rust_util_import__lazy_static-1.4.0//:lazy_static",
+    tags = ["manual"],
+)
+
+alias(
+    name = "proc-macro2",
+    actual = "@rules_rust_util_import__proc-macro2-1.0.33//:proc_macro2",
+    tags = ["manual"],
+)
+
+alias(
+    name = "quickcheck",
+    actual = "@rules_rust_util_import__quickcheck-1.0.3//:quickcheck",
+    tags = ["manual"],
+)
+
+alias(
+    name = "quote",
+    actual = "@rules_rust_util_import__quote-1.0.10//:quote",
+    tags = ["manual"],
+)
+
+alias(
+    name = "syn",
+    actual = "@rules_rust_util_import__syn-1.0.82//:syn",
+    tags = ["manual"],
+)
+
+# Binaries
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
new file mode 100644
index 0000000..33352ad
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "cfg_if",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.env_logger-0.8.4.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.env_logger-0.8.4.bazel
new file mode 100644
index 0000000..4bab83f
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.env_logger-0.8.4.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "env_logger",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "regex",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.8.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_util_import__log-0.4.17//:log",
+            "@rules_rust_util_import__regex-1.4.6//:regex",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.getrandom-0.2.7.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.getrandom-0.2.7.bazel
new file mode 100644
index 0000000..533dc8c
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.getrandom-0.2.7.bazel
@@ -0,0 +1,129 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "getrandom",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.7",
+    deps = [
+    ] + select_with_or({
+        # cfg(target_os = "wasi")
+        (
+            "@rules_rust//rust/platform:wasm32-wasi",
+        ): [
+            # Target Deps
+            "@rules_rust_util_import__wasi-0.11.0-wasi-snapshot-preview1//:wasi",
+
+            # Common Deps
+            "@rules_rust_util_import__cfg-if-1.0.0//:cfg_if",
+        ],
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_util_import__libc-0.2.126//:libc",
+
+            # Common Deps
+            "@rules_rust_util_import__cfg-if-1.0.0//:cfg_if",
+        ],
+        "//conditions:default": [
+            "@rules_rust_util_import__cfg-if-1.0.0//:cfg_if",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel
new file mode 100644
index 0000000..9c7761e
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "lazy_static",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.libc-0.2.126.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.libc-0.2.126.bazel
new file mode 100644
index 0000000..723908e
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.libc-0.2.126.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.126",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_util_import__libc-0.2.126//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "libc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.126",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "libc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.log-0.4.17.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.log-0.4.17.bazel
new file mode 100644
index 0000000..a9f2f72
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.log-0.4.17.bazel
@@ -0,0 +1,177 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "log",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.17",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_util_import__cfg-if-1.0.0//:cfg_if",
+            "@rules_rust_util_import__log-0.4.17//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "log_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.17",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "log_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.memchr-2.5.0.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.memchr-2.5.0.bazel
new file mode 100644
index 0000000..4880289
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.memchr-2.5.0.bazel
@@ -0,0 +1,180 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "memchr",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+        "use_std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.5.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_util_import__memchr-2.5.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "memchr_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+        "use_std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "2.5.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "memchr_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.proc-macro2-1.0.33.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.proc-macro2-1.0.33.bazel
new file mode 100644
index 0000000..85ab9a4
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.proc-macro2-1.0.33.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "proc_macro2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.33",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_util_import__proc-macro2-1.0.33//:build_script_build",
+            "@rules_rust_util_import__unicode-xid-0.2.3//:unicode_xid",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "proc-macro2_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.33",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "proc-macro2_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.quickcheck-1.0.3.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.quickcheck-1.0.3.bazel
new file mode 100644
index 0000000..d516d60
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.quickcheck-1.0.3.bazel
@@ -0,0 +1,98 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "quickcheck",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "env_logger",
+        "log",
+        "regex",
+        "use_logging",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_util_import__env_logger-0.8.4//:env_logger",
+            "@rules_rust_util_import__log-0.4.17//:log",
+            "@rules_rust_util_import__rand-0.8.5//:rand",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.quote-1.0.10.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.quote-1.0.10.bazel
new file mode 100644
index 0000000..c94b5b5
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.quote-1.0.10.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "quote",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.10",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_util_import__proc-macro2-1.0.33//:proc_macro2",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.rand-0.8.5.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.rand-0.8.5.bazel
new file mode 100644
index 0000000..890cfd6
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.rand-0.8.5.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "rand",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "getrandom",
+        "small_rng",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.8.5",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_util_import__rand_core-0.6.3//:rand_core",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.rand_core-0.6.3.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.rand_core-0.6.3.bazel
new file mode 100644
index 0000000..6376096
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.rand_core-0.6.3.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "rand_core",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "getrandom",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_util_import__getrandom-0.2.7//:getrandom",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.regex-1.4.6.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.regex-1.4.6.bazel
new file mode 100644
index 0000000..4968002
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.regex-1.4.6.bazel
@@ -0,0 +1,101 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "regex",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "aho-corasick",
+        "memchr",
+        "perf",
+        "perf-cache",
+        "perf-dfa",
+        "perf-inline",
+        "perf-literal",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.4.6",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_util_import__aho-corasick-0.7.15//:aho_corasick",
+            "@rules_rust_util_import__memchr-2.5.0//:memchr",
+            "@rules_rust_util_import__regex-syntax-0.6.27//:regex_syntax",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel
new file mode 100644
index 0000000..cadf7fe
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "regex_syntax",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.27",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.syn-1.0.82.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.syn-1.0.82.bazel
new file mode 100644
index 0000000..c2cc5c8
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.syn-1.0.82.bazel
@@ -0,0 +1,191 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "syn",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.82",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_util_import__proc-macro2-1.0.33//:proc_macro2",
+            "@rules_rust_util_import__quote-1.0.10//:quote",
+            "@rules_rust_util_import__syn-1.0.82//:build_script_build",
+            "@rules_rust_util_import__unicode-xid-0.2.3//:unicode_xid",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "syn_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.82",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "syn_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.unicode-xid-0.2.3.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.unicode-xid-0.2.3.bazel
new file mode 100644
index 0000000..5405857
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.unicode-xid-0.2.3.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "unicode_xid",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel
new file mode 100644
index 0000000..02de946
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "wasi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.11.0+wasi-snapshot-preview1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/crates.bzl b/third_party/rules_rust/util/import/3rdparty/crates/crates.bzl
new file mode 100644
index 0000000..fc608af
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/crates.bzl
@@ -0,0 +1,25 @@
+###############################################################################
+# @generated
+# This file is auto-generated by the cargo-bazel tool.
+#
+# DO NOT MODIFY: Local changes may be replaced in future executions.
+###############################################################################
+"""Rules for defining repositories for remote `crates_vendor` repositories"""
+
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:crates_vendor.bzl", "crates_vendor_remote_repository")
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//util/import/3rdparty/crates:defs.bzl", _crate_repositories = "crate_repositories")
+
+def crate_repositories():
+    maybe(
+        crates_vendor_remote_repository,
+        name = "rules_rust_util_import",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.bazel"),
+        defs_module = Label("@rules_rust//util/import/3rdparty/crates:defs.bzl"),
+    )
+
+    _crate_repositories()
diff --git a/third_party/rules_rust/util/import/3rdparty/crates/defs.bzl b/third_party/rules_rust/util/import/3rdparty/crates/defs.bzl
new file mode 100644
index 0000000..8bf2778
--- /dev/null
+++ b/third_party/rules_rust/util/import/3rdparty/crates/defs.bzl
@@ -0,0 +1,548 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //util/import/3rdparty:crates_vendor
+###############################################################################
+"""
+# `crates_repository` API
+
+- [aliases](#aliases)
+- [crate_deps](#crate_deps)
+- [all_crate_deps](#all_crate_deps)
+- [crate_repositories](#crate_repositories)
+
+"""
+
+load("@bazel_skylib//lib:selects.bzl", "selects")
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+###############################################################################
+# MACROS API
+###############################################################################
+
+# An identifier that represent common dependencies (unconditional).
+_COMMON_CONDITION = ""
+
+def _flatten_dependency_maps(all_dependency_maps):
+    """Flatten a list of dependency maps into one dictionary.
+
+    Dependency maps have the following structure:
+
+    ```python
+    DEPENDENCIES_MAP = {
+        # The first key in the map is a Bazel package
+        # name of the workspace this file is defined in.
+        "workspace_member_package": {
+
+            # Not all dependnecies are supported for all platforms.
+            # the condition key is the condition required to be true
+            # on the host platform.
+            "condition": {
+
+                # An alias to a crate target.     # The label of the crate target the
+                # Aliases are only crate names.   # package name refers to.
+                "package_name":                   "@full//:label",
+            }
+        }
+    }
+    ```
+
+    Args:
+        all_dependency_maps (list): A list of dicts as described above
+
+    Returns:
+        dict: A dictionary as described above
+    """
+    dependencies = {}
+
+    for workspace_deps_map in all_dependency_maps:
+        for pkg_name, conditional_deps_map in workspace_deps_map.items():
+            if pkg_name not in dependencies:
+                non_frozen_map = dict()
+                for key, values in conditional_deps_map.items():
+                    non_frozen_map.update({key: dict(values.items())})
+                dependencies.setdefault(pkg_name, non_frozen_map)
+                continue
+
+            for condition, deps_map in conditional_deps_map.items():
+                # If the condition has not been recorded, do so and continue
+                if condition not in dependencies[pkg_name]:
+                    dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))
+                    continue
+
+                # Alert on any miss-matched dependencies
+                inconsistent_entries = []
+                for crate_name, crate_label in deps_map.items():
+                    existing = dependencies[pkg_name][condition].get(crate_name)
+                    if existing and existing != crate_label:
+                        inconsistent_entries.append((crate_name, existing, crate_label))
+                    dependencies[pkg_name][condition].update({crate_name: crate_label})
+
+    return dependencies
+
+def crate_deps(deps, package_name = None):
+    """Finds the fully qualified label of the requested crates for the package where this macro is called.
+
+    Args:
+        deps (list): The desired list of crate targets.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()`.
+
+    Returns:
+        list: A list of labels to generated rust targets (str)
+    """
+
+    if not deps:
+        return []
+
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Join both sets of dependencies
+    dependencies = _flatten_dependency_maps([
+        _NORMAL_DEPENDENCIES,
+        _NORMAL_DEV_DEPENDENCIES,
+        _PROC_MACRO_DEPENDENCIES,
+        _PROC_MACRO_DEV_DEPENDENCIES,
+        _BUILD_DEPENDENCIES,
+        _BUILD_PROC_MACRO_DEPENDENCIES,
+    ]).pop(package_name, {})
+
+    # Combine all conditional packages so we can easily index over a flat list
+    # TODO: Perhaps this should actually return select statements and maintain
+    # the conditionals of the dependencies
+    flat_deps = {}
+    for deps_set in dependencies.values():
+        for crate_name, crate_label in deps_set.items():
+            flat_deps.update({crate_name: crate_label})
+
+    missing_crates = []
+    crate_targets = []
+    for crate_target in deps:
+        if crate_target not in flat_deps:
+            missing_crates.append(crate_target)
+        else:
+            crate_targets.append(flat_deps[crate_target])
+
+    if missing_crates:
+        fail("Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`".format(
+            missing_crates,
+            package_name,
+            dependencies,
+        ))
+
+    return crate_targets
+
+def all_crate_deps(
+        normal = False,
+        normal_dev = False,
+        proc_macro = False,
+        proc_macro_dev = False,
+        build = False,
+        build_proc_macro = False,
+        package_name = None):
+    """Finds the fully qualified label of all requested direct crate dependencies \
+    for the package where this macro is called.
+
+    If no parameters are set, all normal dependencies are returned. Setting any one flag will
+    otherwise impact the contents of the returned list.
+
+    Args:
+        normal (bool, optional): If True, normal dependencies are included in the
+            output list.
+        normal_dev (bool, optional): If True, normla dev dependencies will be
+            included in the output list..
+        proc_macro (bool, optional): If True, proc_macro dependencies are included
+            in the output list.
+        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
+            included in the output list.
+        build (bool, optional): If True, build dependencies are included
+            in the output list.
+        build_proc_macro (bool, optional): If True, build proc_macro dependencies are
+            included in the output list.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()` when unset.
+
+    Returns:
+        list: A list of labels to generated rust targets (str)
+    """
+
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Determine the relevant maps to use
+    all_dependency_maps = []
+    if normal:
+        all_dependency_maps.append(_NORMAL_DEPENDENCIES)
+    if normal_dev:
+        all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)
+    if proc_macro:
+        all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)
+    if proc_macro_dev:
+        all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)
+    if build:
+        all_dependency_maps.append(_BUILD_DEPENDENCIES)
+    if build_proc_macro:
+        all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)
+
+    # Default to always using normal dependencies
+    if not all_dependency_maps:
+        all_dependency_maps.append(_NORMAL_DEPENDENCIES)
+
+    dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
+
+    if not dependencies:
+        if dependencies == None:
+            fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
+        else:
+            return []
+
+    crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
+    for condition, deps in dependencies.items():
+        crate_deps += selects.with_or({_CONDITIONS[condition]: deps.values()})
+
+    return crate_deps
+
+def aliases(
+        normal = False,
+        normal_dev = False,
+        proc_macro = False,
+        proc_macro_dev = False,
+        build = False,
+        build_proc_macro = False,
+        package_name = None):
+    """Produces a map of Crate alias names to their original label
+
+    If no dependency kinds are specified, `normal` and `proc_macro` are used by default.
+    Setting any one flag will otherwise determine the contents of the returned dict.
+
+    Args:
+        normal (bool, optional): If True, normal dependencies are included in the
+            output list.
+        normal_dev (bool, optional): If True, normla dev dependencies will be
+            included in the output list..
+        proc_macro (bool, optional): If True, proc_macro dependencies are included
+            in the output list.
+        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
+            included in the output list.
+        build (bool, optional): If True, build dependencies are included
+            in the output list.
+        build_proc_macro (bool, optional): If True, build proc_macro dependencies are
+            included in the output list.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()` when unset.
+
+    Returns:
+        dict: The aliases of all associated packages
+    """
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Determine the relevant maps to use
+    all_aliases_maps = []
+    if normal:
+        all_aliases_maps.append(_NORMAL_ALIASES)
+    if normal_dev:
+        all_aliases_maps.append(_NORMAL_DEV_ALIASES)
+    if proc_macro:
+        all_aliases_maps.append(_PROC_MACRO_ALIASES)
+    if proc_macro_dev:
+        all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)
+    if build:
+        all_aliases_maps.append(_BUILD_ALIASES)
+    if build_proc_macro:
+        all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)
+
+    # Default to always using normal aliases
+    if not all_aliases_maps:
+        all_aliases_maps.append(_NORMAL_ALIASES)
+        all_aliases_maps.append(_PROC_MACRO_ALIASES)
+
+    aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)
+
+    if not aliases:
+        return dict()
+
+    common_items = aliases.pop(_COMMON_CONDITION, {}).items()
+
+    # If there are only common items in the dictionary, immediately return them
+    if not len(aliases.keys()) == 1:
+        return dict(common_items)
+
+    # Build a single select statement where each conditional has accounted for the
+    # common set of aliases.
+    crate_aliases = {"//conditions:default": common_items}
+    for condition, deps in aliases.items():
+        condition_triples = _CONDITIONS[condition]
+        if condition_triples in crate_aliases:
+            crate_aliases[condition_triples].update(deps)
+        else:
+            crate_aliases.update({_CONDITIONS[condition]: dict(deps.items() + common_items)})
+
+    return selects.with_or(crate_aliases)
+
+###############################################################################
+# WORKSPACE MEMBER DEPS AND ALIASES
+###############################################################################
+
+_NORMAL_DEPENDENCIES = {
+    "": {
+        _COMMON_CONDITION: {
+            "aho-corasick": "@rules_rust_util_import__aho-corasick-0.7.15//:aho_corasick",
+            "lazy_static": "@rules_rust_util_import__lazy_static-1.4.0//:lazy_static",
+            "proc-macro2": "@rules_rust_util_import__proc-macro2-1.0.33//:proc_macro2",
+            "quickcheck": "@rules_rust_util_import__quickcheck-1.0.3//:quickcheck",
+            "quote": "@rules_rust_util_import__quote-1.0.10//:quote",
+            "syn": "@rules_rust_util_import__syn-1.0.82//:syn",
+        },
+    },
+}
+
+_NORMAL_ALIASES = {
+    "": {
+        _COMMON_CONDITION: {
+        },
+    },
+}
+
+_NORMAL_DEV_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_NORMAL_DEV_ALIASES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_ALIASES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEV_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEV_ALIASES = {
+    "": {
+    },
+}
+
+_BUILD_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_BUILD_ALIASES = {
+    "": {
+    },
+}
+
+_BUILD_PROC_MACRO_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_BUILD_PROC_MACRO_ALIASES = {
+    "": {
+    },
+}
+
+_CONDITIONS = {
+    "cfg(target_os = \"wasi\")": ["wasm32-wasi"],
+    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+}
+
+###############################################################################
+
+def crate_repositories():
+    """A macro for defining repositories for all generated crates"""
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__aho-corasick-0.7.15",
+        sha256 = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/aho-corasick/0.7.15/download"],
+        strip_prefix = "aho-corasick-0.7.15",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.aho-corasick-0.7.15.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__cfg-if-1.0.0",
+        sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/cfg-if/1.0.0/download"],
+        strip_prefix = "cfg-if-1.0.0",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.cfg-if-1.0.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__env_logger-0.8.4",
+        sha256 = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/env_logger/0.8.4/download"],
+        strip_prefix = "env_logger-0.8.4",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.env_logger-0.8.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__getrandom-0.2.7",
+        sha256 = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/getrandom/0.2.7/download"],
+        strip_prefix = "getrandom-0.2.7",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.getrandom-0.2.7.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__lazy_static-1.4.0",
+        sha256 = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/lazy_static/1.4.0/download"],
+        strip_prefix = "lazy_static-1.4.0",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.lazy_static-1.4.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__libc-0.2.126",
+        sha256 = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/libc/0.2.126/download"],
+        strip_prefix = "libc-0.2.126",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.libc-0.2.126.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__log-0.4.17",
+        sha256 = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/log/0.4.17/download"],
+        strip_prefix = "log-0.4.17",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.log-0.4.17.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__memchr-2.5.0",
+        sha256 = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/memchr/2.5.0/download"],
+        strip_prefix = "memchr-2.5.0",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.memchr-2.5.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__proc-macro2-1.0.33",
+        sha256 = "fb37d2df5df740e582f28f8560cf425f52bb267d872fe58358eadb554909f07a",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/proc-macro2/1.0.33/download"],
+        strip_prefix = "proc-macro2-1.0.33",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.proc-macro2-1.0.33.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__quickcheck-1.0.3",
+        sha256 = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/quickcheck/1.0.3/download"],
+        strip_prefix = "quickcheck-1.0.3",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.quickcheck-1.0.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__quote-1.0.10",
+        sha256 = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/quote/1.0.10/download"],
+        strip_prefix = "quote-1.0.10",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.quote-1.0.10.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__rand-0.8.5",
+        sha256 = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/rand/0.8.5/download"],
+        strip_prefix = "rand-0.8.5",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.rand-0.8.5.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__rand_core-0.6.3",
+        sha256 = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/rand_core/0.6.3/download"],
+        strip_prefix = "rand_core-0.6.3",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.rand_core-0.6.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__regex-1.4.6",
+        sha256 = "2a26af418b574bd56588335b3a3659a65725d4e636eb1016c2f9e3b38c7cc759",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/regex/1.4.6/download"],
+        strip_prefix = "regex-1.4.6",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.regex-1.4.6.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__regex-syntax-0.6.27",
+        sha256 = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/regex-syntax/0.6.27/download"],
+        strip_prefix = "regex-syntax-0.6.27",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.regex-syntax-0.6.27.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__syn-1.0.82",
+        sha256 = "8daf5dd0bb60cbd4137b1b587d2fc0ae729bc07cf01cd70b36a1ed5ade3b9d59",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/syn/1.0.82/download"],
+        strip_prefix = "syn-1.0.82",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.syn-1.0.82.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__unicode-xid-0.2.3",
+        sha256 = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unicode-xid/0.2.3/download"],
+        strip_prefix = "unicode-xid-0.2.3",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.unicode-xid-0.2.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_util_import__wasi-0.11.0-wasi-snapshot-preview1",
+        sha256 = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasi/0.11.0+wasi-snapshot-preview1/download"],
+        strip_prefix = "wasi-0.11.0+wasi-snapshot-preview1",
+        build_file = Label("@rules_rust//util/import/3rdparty/crates:BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel"),
+    )
diff --git a/third_party/rules_rust/util/import/BUILD.bazel b/third_party/rules_rust/util/import/BUILD.bazel
index 7cb0395..898a82f 100644
--- a/third_party/rules_rust/util/import/BUILD.bazel
+++ b/third_party/rules_rust/util/import/BUILD.bazel
@@ -1,11 +1,12 @@
+load("@rules_cc//cc:defs.bzl", "cc_binary")
 load("//rust:defs.bzl", "rust_library", "rust_proc_macro", "rust_test")
 
 # buildifier: disable=bzl-visibility
-load("//rust/private:transitions.bzl", "with_import_macro_bootstrapping_mode")
+load("//rust/private:transitions.bzl", "alias_with_import_macro_bootstrapping_mode")
 
-with_import_macro_bootstrapping_mode(
+alias_with_import_macro_bootstrapping_mode(
     name = "import_macro",
-    target = "import_macro_impl",
+    actual = ":import_macro_impl",
 )
 
 rust_proc_macro(
@@ -14,9 +15,10 @@
         "import.rs",
     ],
     crate_name = "import",
+    edition = "2018",
     deps = [
         ":import_internal",
-        "//util/import/raze:syn",
+        "//util/import/3rdparty/crates:syn",
     ],
 )
 
@@ -25,12 +27,13 @@
     srcs = [
         "import_internal.rs",
     ],
+    edition = "2018",
     deps = [
-        "//util/import/raze:aho_corasick",
-        "//util/import/raze:lazy_static",
-        "//util/import/raze:proc_macro2",
-        "//util/import/raze:quote",
-        "//util/import/raze:syn",
+        "//util/import/3rdparty/crates:aho-corasick",
+        "//util/import/3rdparty/crates:lazy_static",
+        "//util/import/3rdparty/crates:proc-macro2",
+        "//util/import/3rdparty/crates:quote",
+        "//util/import/3rdparty/crates:syn",
         "//util/label",
     ],
 )
@@ -38,8 +41,9 @@
 rust_test(
     name = "import_internal_test",
     crate = ":import_internal",
+    edition = "2018",
     deps = [
-        "//util/import/raze:quickcheck",
+        "//util/import/3rdparty/crates:quickcheck",
     ],
 )
 
@@ -67,7 +71,7 @@
     },
 )
 
-sh_binary(
+cc_binary(
     name = "fake_import_macro_impl",
-    srcs = ["fake_import_macro_impl.sh"],
+    srcs = ["fake_import_macro_impl.cc"],
 )
diff --git a/third_party/rules_rust/util/import/deps.bzl b/third_party/rules_rust/util/import/deps.bzl
index be49b06..ffce2b3 100644
--- a/third_party/rules_rust/util/import/deps.bzl
+++ b/third_party/rules_rust/util/import/deps.bzl
@@ -2,10 +2,10 @@
 The dependencies for running the gen_rust_project binary.
 """
 
-load("//util/import/raze:crates.bzl", "rules_rust_util_import_fetch_remote_crates")
+load("//util/import/3rdparty/crates:defs.bzl", "crate_repositories")
 
 def import_deps():
-    rules_rust_util_import_fetch_remote_crates()
+    crate_repositories()
 
 # For legacy support
 gen_rust_project_dependencies = import_deps
diff --git a/third_party/rules_rust/util/import/fake_import_macro_impl.cc b/third_party/rules_rust/util/import/fake_import_macro_impl.cc
new file mode 100755
index 0000000..5b0b32a
--- /dev/null
+++ b/third_party/rules_rust/util/import/fake_import_macro_impl.cc
@@ -0,0 +1,3 @@
+//! A noop import macro handler.
+
+int main(int argc, char** argv) { return 0; }
diff --git a/third_party/rules_rust/util/import/fake_import_macro_impl.sh b/third_party/rules_rust/util/import/fake_import_macro_impl.sh
deleted file mode 100755
index 1fa77d8..0000000
--- a/third_party/rules_rust/util/import/fake_import_macro_impl.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-# Does nothing.
\ No newline at end of file
diff --git a/third_party/rules_rust/util/import/import_internal.rs b/third_party/rules_rust/util/import/import_internal.rs
index 1d44fe6..8b6e061 100644
--- a/third_party/rules_rust/util/import/import_internal.rs
+++ b/third_party/rules_rust/util/import/import_internal.rs
@@ -73,6 +73,43 @@
 }
 
 lazy_static! {
+    // The (unencoded, encoded) pairings here must match those in
+    // //rust/private/utils.bzl exactly.
+    static ref ENCODINGS: Vec<(&'static str, &'static str)> =
+            vec![
+                    (":", "x"),
+                    ("!", "excl"),
+                    ("%", "prc"),
+                    ("@", "ao"),
+                    ("^", "caret"),
+                    ("`", "bt"),
+                    (" ", "sp"),
+                    ("\"", "dq"),
+                    ("#", "octo"),
+                    ("$", "dllr"),
+                    ("&", "amp"),
+                    ("'", "sq"),
+                    ("(", "lp"),
+                    (")", "rp"),
+                    ("*", "astr"),
+                    ("-", "d"),
+                    ("+", "pl"),
+                    (",", "cm"),
+                    (";", "sm"),
+                    ("<", "la"),
+                    ("=", "eq"),
+                    (">", "ra"),
+                    ("?", "qm"),
+                    ("[", "lbk"),
+                    ("]", "rbk"),
+                    ("{", "lbe"),
+                    ("|", "pp"),
+                    ("}", "rbe"),
+                    ("~", "td"),
+                    ("/", "y"),
+                    (".", "pd"),
+            ];
+
     // Transformations are stored as "(unencoded, encoded)" tuples.
     // Target names can include:
     // !%-@^_` "#$&'()*-+,;<=>?[]{|}~/.
@@ -81,44 +118,11 @@
     //
     // Packages and targets are separated by colons.
     static ref SUBSTITUTIONS: (Vec<String>, Vec<String>) =
-        iter::once(("_quote".to_string(), "_quotequote_".to_string()))
-        .chain(
-            vec![
-                    (":", "colon"),
-                    ("!", "bang"),
-                    ("%", "percent"),
-                    ("@", "at"),
-                    ("^", "caret"),
-                    ("`", "backtick"),
-                    (" ", "space"),
-                    ("\"", "quote"),
-                    ("#", "hash"),
-                    ("$", "dollar"),
-                    ("&", "ampersand"),
-                    ("'", "backslash"),
-                    ("(", "lparen"),
-                    (")", "rparen"),
-                    ("*", "star"),
-                    ("-", "dash"),
-                    ("+", "plus"),
-                    (",", "comma"),
-                    (";", "semicolon"),
-                    ("<", "langle"),
-                    ("=", "equal"),
-                    (">", "rangle"),
-                    ("?", "question"),
-                    ("[", "lbracket"),
-                    ("]", "rbracket"),
-                    ("{", "lbrace"),
-                    ("|", "pipe"),
-                    ("}", "rbrace"),
-                    ("~", "tilde"),
-                    ("/", "slash"),
-                    (".", "dot"),
-            ].into_iter()
+        iter::once(("_z".to_string(), "_zz_".to_string()))
+        .chain(ENCODINGS.iter()
             .flat_map(|pair| {
                 vec![
-                    (format!("_{}_", &pair.1), format!("_quote{}_", &pair.1)),
+                    (format!("_{}_", &pair.1), format!("_z{}_", &pair.1)),
                     (pair.0.to_string(), format!("_{}_", &pair.1)),
                 ].into_iter()
             })
@@ -307,42 +311,42 @@
         let expanded = expand_imports(parse_quote! { "//some_project:utils"; }, &mode)?;
         assert_eq!(
             expanded.to_string(),
-            "extern crate some_project_colon_utils as utils ;"
+            "extern crate some_project_x_utils as utils ;"
         );
 
         // Package and a target, with a no-op alias.
         let expanded = expand_imports(parse_quote! { "//some_project:utils" as utils; }, &mode)?;
         assert_eq!(
             expanded.to_string(),
-            "extern crate some_project_colon_utils as utils ;"
+            "extern crate some_project_x_utils as utils ;"
         );
 
         // Package and a target, with an alias.
         let expanded = expand_imports(parse_quote! { "//some_project:utils" as my_utils; }, &mode)?;
         assert_eq!(
             expanded.to_string(),
-            "extern crate some_project_colon_utils as my_utils ;"
+            "extern crate some_project_x_utils as my_utils ;"
         );
 
         // Package and an implicit target.
         let expanded = expand_imports(parse_quote! { "//some_project/utils"; }, &mode)?;
         assert_eq!(
             expanded.to_string(),
-            "extern crate some_project_slash_utils_colon_utils as utils ;"
+            "extern crate some_project_y_utils_x_utils as utils ;"
         );
 
         // Package and an implicit target, with a no-op alias.
         let expanded = expand_imports(parse_quote! { "//some_project/utils" as utils; }, &mode)?;
         assert_eq!(
             expanded.to_string(),
-            "extern crate some_project_slash_utils_colon_utils as utils ;"
+            "extern crate some_project_y_utils_x_utils as utils ;"
         );
 
         // Package and an implicit target, with an alias.
         let expanded = expand_imports(parse_quote! { "//some_project/utils" as my_utils; }, &mode)?;
         assert_eq!(
             expanded.to_string(),
-            "extern crate some_project_slash_utils_colon_utils as my_utils ;"
+            "extern crate some_project_y_utils_x_utils as my_utils ;"
         );
 
         // A third-party target.
@@ -371,14 +375,14 @@
         )?;
         assert_eq!(
             expanded.to_string(),
-            "extern crate some_project_colon_utils as utils ; extern crate serde ;"
+            "extern crate some_project_x_utils as utils ; extern crate serde ;"
         );
 
         // Problematic target name.
         let expanded = expand_imports(parse_quote! { "//some_project:thing-types"; }, &mode)?;
         assert_eq!(
             expanded.to_string(),
-            "extern crate some_project_colon_thing_dash_types as thing_dash_types ;"
+            "extern crate some_project_x_thing_d_types as thing_d_types ;"
         );
 
         // Problematic target name with alias.
@@ -388,14 +392,14 @@
         )?;
         assert_eq!(
             expanded.to_string(),
-            "extern crate some_project_colon_thing_dash_types as types ;"
+            "extern crate some_project_x_thing_d_types as types ;"
         );
 
         // Problematic package name.
         let expanded = expand_imports(parse_quote! { "//some_project-prototype:utils"; }, &mode)?;
         assert_eq!(
             expanded.to_string(),
-            "extern crate some_project_dash_prototype_colon_utils as utils ;"
+            "extern crate some_project_d_prototype_x_utils as utils ;"
         );
 
         // Problematic package and target names.
@@ -405,7 +409,7 @@
         )?;
         assert_eq!(
             expanded.to_string(),
-            "extern crate some_project_dash_prototype_colon_thing_dash_types as thing_dash_types ;"
+            "extern crate some_project_d_prototype_x_thing_d_types as thing_d_types ;"
         );
 
         Ok(())
@@ -522,17 +526,41 @@
     }
 
     #[test]
+    fn test_substitutions_concatenate() -> Result<()> {
+        // Every combination of orig + orig, orig + encoded, encoded + orig, and
+        // encoded + encoded round trips the encoding successfully.
+        for s in SUBSTITUTIONS.0.iter().chain(SUBSTITUTIONS.1.iter()) {
+            for t in SUBSTITUTIONS.0.iter().chain(SUBSTITUTIONS.1.iter()) {
+                let concatenated = format!("{}{}", s, t);
+                assert_eq!(&decode(&encode(&concatenated)), &concatenated);
+            }
+        }
+
+        Ok(())
+    }
+
+    #[test]
     fn test_encode() -> Result<()> {
-        assert_eq!(encode("some_project:utils"), "some_project_colon_utils");
-        assert_eq!(&encode("_quotedot_"), "_quotequote_dot_");
+        assert_eq!(encode("some_project:utils"), "some_project_x_utils");
+        assert_eq!(&encode("_zpd_"), "_zz_pd_");
+
+        // All the encodings should be what we expect.
+        for (orig, encoded) in SUBSTITUTIONS.0.iter().zip(SUBSTITUTIONS.1.iter()) {
+            assert_eq!(&encode(orig), encoded);
+        }
 
         Ok(())
     }
 
     #[test]
     fn test_decode() -> Result<()> {
-        assert_eq!(decode("some_project_colon_utils"), "some_project:utils");
-        assert_eq!(decode("_quotequote_dot_"), "_quotedot_");
+        assert_eq!(decode("some_project_x_utils"), "some_project:utils");
+        assert_eq!(decode("_zz_pd_"), "_zpd_");
+
+        // All the decodings should be what we expect.
+        for (orig, encoded) in SUBSTITUTIONS.0.iter().zip(SUBSTITUTIONS.1.iter()) {
+            assert_eq!(&decode(encoded), orig);
+        }
 
         Ok(())
     }
diff --git a/third_party/rules_rust/util/import/raze/BUILD.bazel b/third_party/rules_rust/util/import/raze/BUILD.bazel
deleted file mode 100644
index 2f14d0e..0000000
--- a/third_party/rules_rust/util/import/raze/BUILD.bazel
+++ /dev/null
@@ -1,75 +0,0 @@
-"""
-@generated
-cargo-raze generated Bazel file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-package(default_visibility = ["//visibility:public"])
-
-licenses([
-    "notice",  # See individual crates for specific licenses
-])
-
-# Aliased targets
-alias(
-    name = "aho_corasick",
-    actual = "@rules_rust_util_import__aho_corasick__0_7_15//:aho_corasick",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "lazy_static",
-    actual = "@rules_rust_util_import__lazy_static__1_4_0//:lazy_static",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "proc_macro2",
-    actual = "@rules_rust_util_import__proc_macro2__1_0_33//:proc_macro2",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "quickcheck",
-    actual = "@rules_rust_util_import__quickcheck__1_0_3//:quickcheck",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "quote",
-    actual = "@rules_rust_util_import__quote__1_0_10//:quote",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "syn",
-    actual = "@rules_rust_util_import__syn__1_0_82//:syn",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-# Export file for Stardoc support
-exports_files(
-    [
-        "crates.bzl",
-    ],
-    visibility = ["//visibility:public"],
-)
diff --git a/third_party/rules_rust/util/import/raze/Cargo.raze.lock b/third_party/rules_rust/util/import/raze/Cargo.raze.lock
deleted file mode 100644
index 72b143b..0000000
--- a/third_party/rules_rust/util/import/raze/Cargo.raze.lock
+++ /dev/null
@@ -1,163 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-[[package]]
-name = "aho-corasick"
-version = "0.7.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "cfg-if"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-
-[[package]]
-name = "compile_with_bazel"
-version = "0.0.0"
-dependencies = [
- "aho-corasick",
- "lazy_static",
- "proc-macro2",
- "quickcheck",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "env_logger"
-version = "0.8.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
-dependencies = [
- "log",
- "regex",
-]
-
-[[package]]
-name = "getrandom"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
-dependencies = [
- "cfg-if",
- "libc",
- "wasi",
-]
-
-[[package]]
-name = "lazy_static"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-
-[[package]]
-name = "libc"
-version = "0.2.112"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125"
-
-[[package]]
-name = "log"
-version = "0.4.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
-name = "memchr"
-version = "2.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.33"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb37d2df5df740e582f28f8560cf425f52bb267d872fe58358eadb554909f07a"
-dependencies = [
- "unicode-xid",
-]
-
-[[package]]
-name = "quickcheck"
-version = "1.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
-dependencies = [
- "env_logger",
- "log",
- "rand",
-]
-
-[[package]]
-name = "quote"
-version = "1.0.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "rand"
-version = "0.8.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8"
-dependencies = [
- "rand_core",
-]
-
-[[package]]
-name = "rand_core"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
-dependencies = [
- "getrandom",
-]
-
-[[package]]
-name = "regex"
-version = "1.4.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a26af418b574bd56588335b3a3659a65725d4e636eb1016c2f9e3b38c7cc759"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-syntax"
-version = "0.6.25"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
-
-[[package]]
-name = "syn"
-version = "1.0.82"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8daf5dd0bb60cbd4137b1b587d2fc0ae729bc07cf01cd70b36a1ed5ade3b9d59"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-xid",
-]
-
-[[package]]
-name = "unicode-xid"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
-
-[[package]]
-name = "wasi"
-version = "0.10.2+wasi-snapshot-preview1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
diff --git a/third_party/rules_rust/util/import/raze/Cargo.toml b/third_party/rules_rust/util/import/raze/Cargo.toml
deleted file mode 100644
index b942944..0000000
--- a/third_party/rules_rust/util/import/raze/Cargo.toml
+++ /dev/null
@@ -1,25 +0,0 @@
-[package]
-name = "compile_with_bazel"
-version = "0.0.0"
-
-# Mandatory (or Cargo tooling is unhappy)
-[lib]
-path = "fake_lib.rs"
-
-[dependencies]
-aho-corasick = "=0.7.15"
-lazy_static = "=1.4.0"
-proc-macro2 = "=1.0.33"
-quote = "=1.0.10"
-syn = "=1.0.82"
-
-[dev-dependencies]
-quickcheck = "=1.0.3"
-
-[package.metadata.raze]
-genmode = "Remote"
-workspace_path = "//util/import/raze"
-gen_workspace_prefix = "rules_rust_util_import"
-rust_rules_workspace_name = "rules_rust"
-package_aliases_dir = "."
-default_gen_buildrs = true
\ No newline at end of file
diff --git a/third_party/rules_rust/util/import/raze/crates.bzl b/third_party/rules_rust/util/import/raze/crates.bzl
deleted file mode 100644
index 7da9f98..0000000
--- a/third_party/rules_rust/util/import/raze/crates.bzl
+++ /dev/null
@@ -1,192 +0,0 @@
-"""
-@generated
-cargo-raze generated Bazel file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-load("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository")  # buildifier: disable=load
-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")  # buildifier: disable=load
-load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")  # buildifier: disable=load
-
-def rules_rust_util_import_fetch_remote_crates():
-    """This function defines a collection of repos and should be called in a WORKSPACE file"""
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__aho_corasick__0_7_15",
-        url = "https://crates.io/api/v1/crates/aho-corasick/0.7.15/download",
-        type = "tar.gz",
-        sha256 = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5",
-        strip_prefix = "aho-corasick-0.7.15",
-        build_file = Label("//util/import/raze/remote:BUILD.aho-corasick-0.7.15.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__cfg_if__1_0_0",
-        url = "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
-        type = "tar.gz",
-        sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd",
-        strip_prefix = "cfg-if-1.0.0",
-        build_file = Label("//util/import/raze/remote:BUILD.cfg-if-1.0.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__env_logger__0_8_4",
-        url = "https://crates.io/api/v1/crates/env_logger/0.8.4/download",
-        type = "tar.gz",
-        sha256 = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3",
-        strip_prefix = "env_logger-0.8.4",
-        build_file = Label("//util/import/raze/remote:BUILD.env_logger-0.8.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__getrandom__0_2_3",
-        url = "https://crates.io/api/v1/crates/getrandom/0.2.3/download",
-        type = "tar.gz",
-        sha256 = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753",
-        strip_prefix = "getrandom-0.2.3",
-        build_file = Label("//util/import/raze/remote:BUILD.getrandom-0.2.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__lazy_static__1_4_0",
-        url = "https://crates.io/api/v1/crates/lazy_static/1.4.0/download",
-        type = "tar.gz",
-        sha256 = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646",
-        strip_prefix = "lazy_static-1.4.0",
-        build_file = Label("//util/import/raze/remote:BUILD.lazy_static-1.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__libc__0_2_112",
-        url = "https://crates.io/api/v1/crates/libc/0.2.112/download",
-        type = "tar.gz",
-        sha256 = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125",
-        strip_prefix = "libc-0.2.112",
-        build_file = Label("//util/import/raze/remote:BUILD.libc-0.2.112.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__log__0_4_14",
-        url = "https://crates.io/api/v1/crates/log/0.4.14/download",
-        type = "tar.gz",
-        sha256 = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710",
-        strip_prefix = "log-0.4.14",
-        build_file = Label("//util/import/raze/remote:BUILD.log-0.4.14.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__memchr__2_4_1",
-        url = "https://crates.io/api/v1/crates/memchr/2.4.1/download",
-        type = "tar.gz",
-        sha256 = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a",
-        strip_prefix = "memchr-2.4.1",
-        build_file = Label("//util/import/raze/remote:BUILD.memchr-2.4.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__proc_macro2__1_0_33",
-        url = "https://crates.io/api/v1/crates/proc-macro2/1.0.33/download",
-        type = "tar.gz",
-        sha256 = "fb37d2df5df740e582f28f8560cf425f52bb267d872fe58358eadb554909f07a",
-        strip_prefix = "proc-macro2-1.0.33",
-        build_file = Label("//util/import/raze/remote:BUILD.proc-macro2-1.0.33.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__quickcheck__1_0_3",
-        url = "https://crates.io/api/v1/crates/quickcheck/1.0.3/download",
-        type = "tar.gz",
-        sha256 = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6",
-        strip_prefix = "quickcheck-1.0.3",
-        build_file = Label("//util/import/raze/remote:BUILD.quickcheck-1.0.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__quote__1_0_10",
-        url = "https://crates.io/api/v1/crates/quote/1.0.10/download",
-        type = "tar.gz",
-        sha256 = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05",
-        strip_prefix = "quote-1.0.10",
-        build_file = Label("//util/import/raze/remote:BUILD.quote-1.0.10.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__rand__0_8_4",
-        url = "https://crates.io/api/v1/crates/rand/0.8.4/download",
-        type = "tar.gz",
-        sha256 = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8",
-        strip_prefix = "rand-0.8.4",
-        build_file = Label("//util/import/raze/remote:BUILD.rand-0.8.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__rand_core__0_6_3",
-        url = "https://crates.io/api/v1/crates/rand_core/0.6.3/download",
-        type = "tar.gz",
-        sha256 = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7",
-        strip_prefix = "rand_core-0.6.3",
-        build_file = Label("//util/import/raze/remote:BUILD.rand_core-0.6.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__regex__1_4_6",
-        url = "https://crates.io/api/v1/crates/regex/1.4.6/download",
-        type = "tar.gz",
-        sha256 = "2a26af418b574bd56588335b3a3659a65725d4e636eb1016c2f9e3b38c7cc759",
-        strip_prefix = "regex-1.4.6",
-        build_file = Label("//util/import/raze/remote:BUILD.regex-1.4.6.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__regex_syntax__0_6_25",
-        url = "https://crates.io/api/v1/crates/regex-syntax/0.6.25/download",
-        type = "tar.gz",
-        sha256 = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b",
-        strip_prefix = "regex-syntax-0.6.25",
-        build_file = Label("//util/import/raze/remote:BUILD.regex-syntax-0.6.25.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__syn__1_0_82",
-        url = "https://crates.io/api/v1/crates/syn/1.0.82/download",
-        type = "tar.gz",
-        sha256 = "8daf5dd0bb60cbd4137b1b587d2fc0ae729bc07cf01cd70b36a1ed5ade3b9d59",
-        strip_prefix = "syn-1.0.82",
-        build_file = Label("//util/import/raze/remote:BUILD.syn-1.0.82.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__unicode_xid__0_2_2",
-        url = "https://crates.io/api/v1/crates/unicode-xid/0.2.2/download",
-        type = "tar.gz",
-        sha256 = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3",
-        strip_prefix = "unicode-xid-0.2.2",
-        build_file = Label("//util/import/raze/remote:BUILD.unicode-xid-0.2.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_util_import__wasi__0_10_2_wasi_snapshot_preview1",
-        url = "https://crates.io/api/v1/crates/wasi/0.10.2+wasi-snapshot-preview1/download",
-        type = "tar.gz",
-        sha256 = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6",
-        strip_prefix = "wasi-0.10.2+wasi-snapshot-preview1",
-        build_file = Label("//util/import/raze/remote:BUILD.wasi-0.10.2+wasi-snapshot-preview1.bazel"),
-    )
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.aho-corasick-0.7.15.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.aho-corasick-0.7.15.bazel
deleted file mode 100644
index 4fc8c0d..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.aho-corasick-0.7.15.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "aho_corasick",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=aho_corasick",
-        "manual",
-    ],
-    version = "0.7.15",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_util_import__memchr__2_4_1//:memchr",
-    ],
-)
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.bazel
deleted file mode 100644
index e69de29..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.bazel
+++ /dev/null
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.cfg-if-1.0.0.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.cfg-if-1.0.0.bazel
deleted file mode 100644
index 1a5adcf..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.cfg-if-1.0.0.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "cfg_if",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=cfg-if",
-        "manual",
-    ],
-    version = "1.0.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "xcrate" with type "test" omitted
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.env_logger-0.8.4.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.env_logger-0.8.4.bazel
deleted file mode 100644
index a04b02c..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.env_logger-0.8.4.bazel
+++ /dev/null
@@ -1,65 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "env_logger",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "regex",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=env_logger",
-        "manual",
-    ],
-    version = "0.8.4",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_util_import__log__0_4_14//:log",
-        "@rules_rust_util_import__regex__1_4_6//:regex",
-    ],
-)
-
-# Unsupported target "init-twice-retains-filter" with type "test" omitted
-
-# Unsupported target "log-in-log" with type "test" omitted
-
-# Unsupported target "log_tls_dtors" with type "test" omitted
-
-# Unsupported target "regexp_filter" with type "test" omitted
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.getrandom-0.2.3.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.getrandom-0.2.3.bazel
deleted file mode 100644
index 8333757..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.getrandom-0.2.3.bazel
+++ /dev/null
@@ -1,96 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "mod" with type "bench" omitted
-
-rust_library(
-    name = "getrandom",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=getrandom",
-        "manual",
-    ],
-    version = "0.2.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_util_import__cfg_if__1_0_0//:cfg_if",
-    ] + selects.with_or({
-        # cfg(target_os = "wasi")
-        (
-            "@rules_rust//rust/platform:wasm32-wasi",
-        ): [
-            "@rules_rust_util_import__wasi__0_10_2_wasi_snapshot_preview1//:wasi",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_util_import__libc__0_2_112//:libc",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-# Unsupported target "custom" with type "test" omitted
-
-# Unsupported target "normal" with type "test" omitted
-
-# Unsupported target "rdrand" with type "test" omitted
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.lazy_static-1.4.0.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.lazy_static-1.4.0.bazel
deleted file mode 100644
index 5542226..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.lazy_static-1.4.0.bazel
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "lazy_static",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=lazy_static",
-        "manual",
-    ],
-    version = "1.4.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "no_std" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.libc-0.2.112.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.libc-0.2.112.bazel
deleted file mode 100644
index 2d8a3fe..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.libc-0.2.112.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "libc_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.112",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "libc",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=libc",
-        "manual",
-    ],
-    version = "0.2.112",
-    # buildifier: leave-alone
-    deps = [
-        ":libc_build_script",
-    ],
-)
-
-# Unsupported target "const_fn" with type "test" omitted
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.log-0.4.14.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.log-0.4.14.bazel
deleted file mode 100644
index 02efe53..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.log-0.4.14.bazel
+++ /dev/null
@@ -1,93 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "log_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.14",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-# Unsupported target "value" with type "bench" omitted
-
-rust_library(
-    name = "log",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=log",
-        "manual",
-    ],
-    version = "0.4.14",
-    # buildifier: leave-alone
-    deps = [
-        ":log_build_script",
-        "@rules_rust_util_import__cfg_if__1_0_0//:cfg_if",
-    ],
-)
-
-# Unsupported target "filters" with type "test" omitted
-
-# Unsupported target "macros" with type "test" omitted
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.memchr-2.4.1.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.memchr-2.4.1.bazel
deleted file mode 100644
index c8e37c3..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.memchr-2.4.1.bazel
+++ /dev/null
@@ -1,90 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "memchr_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "std",
-        "use_std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.4.1",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "memchr",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-        "use_std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=memchr",
-        "manual",
-    ],
-    version = "2.4.1",
-    # buildifier: leave-alone
-    deps = [
-        ":memchr_build_script",
-    ],
-)
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.proc-macro2-1.0.33.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.proc-macro2-1.0.33.bazel
deleted file mode 100644
index 0e479f2..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.proc-macro2-1.0.33.bazel
+++ /dev/null
@@ -1,99 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "proc_macro2_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.33",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "proc_macro2",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=proc-macro2",
-        "manual",
-    ],
-    version = "1.0.33",
-    # buildifier: leave-alone
-    deps = [
-        ":proc_macro2_build_script",
-        "@rules_rust_util_import__unicode_xid__0_2_2//:unicode_xid",
-    ],
-)
-
-# Unsupported target "comments" with type "test" omitted
-
-# Unsupported target "features" with type "test" omitted
-
-# Unsupported target "marker" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
-
-# Unsupported target "test_fmt" with type "test" omitted
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.quickcheck-1.0.3.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.quickcheck-1.0.3.bazel
deleted file mode 100644
index a9db2b4..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.quickcheck-1.0.3.bazel
+++ /dev/null
@@ -1,74 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "btree_set_range" with type "example" omitted
-
-# Unsupported target "out_of_bounds" with type "example" omitted
-
-# Unsupported target "reverse" with type "example" omitted
-
-# Unsupported target "reverse_single" with type "example" omitted
-
-# Unsupported target "sieve" with type "example" omitted
-
-# Unsupported target "sort" with type "example" omitted
-
-rust_library(
-    name = "quickcheck",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "env_logger",
-        "log",
-        "regex",
-        "use_logging",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=quickcheck",
-        "manual",
-    ],
-    version = "1.0.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_util_import__env_logger__0_8_4//:env_logger",
-        "@rules_rust_util_import__log__0_4_14//:log",
-        "@rules_rust_util_import__rand__0_8_4//:rand",
-    ],
-)
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.quote-1.0.10.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.quote-1.0.10.bazel
deleted file mode 100644
index 040d8cb..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.quote-1.0.10.bazel
+++ /dev/null
@@ -1,63 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "bench" with type "bench" omitted
-
-rust_library(
-    name = "quote",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=quote",
-        "manual",
-    ],
-    version = "1.0.10",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_util_import__proc_macro2__1_0_33//:proc_macro2",
-    ],
-)
-
-# Unsupported target "compiletest" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.rand-0.8.4.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.rand-0.8.4.bazel
deleted file mode 100644
index ebbb9e3..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.rand-0.8.4.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "rand",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "getrandom",
-        "small_rng",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=rand",
-        "manual",
-    ],
-    version = "0.8.4",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_util_import__rand_core__0_6_3//:rand_core",
-    ],
-)
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.rand_core-0.6.3.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.rand_core-0.6.3.bazel
deleted file mode 100644
index 1cc93d3..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.rand_core-0.6.3.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "rand_core",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "getrandom",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=rand_core",
-        "manual",
-    ],
-    version = "0.6.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_util_import__getrandom__0_2_3//:getrandom",
-    ],
-)
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.regex-1.4.6.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.regex-1.4.6.bazel
deleted file mode 100644
index 0957c94..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.regex-1.4.6.bazel
+++ /dev/null
@@ -1,95 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "shootout-regex-dna" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-bytes" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-cheat" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-replace" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-single" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-single-cheat" with type "example" omitted
-
-rust_library(
-    name = "regex",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "aho-corasick",
-        "memchr",
-        "perf",
-        "perf-cache",
-        "perf-dfa",
-        "perf-inline",
-        "perf-literal",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=regex",
-        "manual",
-    ],
-    version = "1.4.6",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_util_import__aho_corasick__0_7_15//:aho_corasick",
-        "@rules_rust_util_import__memchr__2_4_1//:memchr",
-        "@rules_rust_util_import__regex_syntax__0_6_25//:regex_syntax",
-    ],
-)
-
-# Unsupported target "backtrack" with type "test" omitted
-
-# Unsupported target "backtrack-bytes" with type "test" omitted
-
-# Unsupported target "backtrack-utf8bytes" with type "test" omitted
-
-# Unsupported target "crates-regex" with type "test" omitted
-
-# Unsupported target "default" with type "test" omitted
-
-# Unsupported target "default-bytes" with type "test" omitted
-
-# Unsupported target "nfa" with type "test" omitted
-
-# Unsupported target "nfa-bytes" with type "test" omitted
-
-# Unsupported target "nfa-utf8bytes" with type "test" omitted
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.regex-syntax-0.6.25.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.regex-syntax-0.6.25.bazel
deleted file mode 100644
index 71324e7..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.regex-syntax-0.6.25.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "bench" with type "bench" omitted
-
-rust_library(
-    name = "regex_syntax",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=regex-syntax",
-        "manual",
-    ],
-    version = "0.6.25",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.syn-1.0.82.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.syn-1.0.82.bazel
deleted file mode 100644
index 8031e00..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.syn-1.0.82.bazel
+++ /dev/null
@@ -1,157 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "syn_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "clone-impls",
-        "default",
-        "derive",
-        "parsing",
-        "printing",
-        "proc-macro",
-        "quote",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.82",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-# Unsupported target "file" with type "bench" omitted
-
-# Unsupported target "rust" with type "bench" omitted
-
-rust_library(
-    name = "syn",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "clone-impls",
-        "default",
-        "derive",
-        "parsing",
-        "printing",
-        "proc-macro",
-        "quote",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=syn",
-        "manual",
-    ],
-    version = "1.0.82",
-    # buildifier: leave-alone
-    deps = [
-        ":syn_build_script",
-        "@rules_rust_util_import__proc_macro2__1_0_33//:proc_macro2",
-        "@rules_rust_util_import__quote__1_0_10//:quote",
-        "@rules_rust_util_import__unicode_xid__0_2_2//:unicode_xid",
-    ],
-)
-
-# Unsupported target "test_asyncness" with type "test" omitted
-
-# Unsupported target "test_attribute" with type "test" omitted
-
-# Unsupported target "test_derive_input" with type "test" omitted
-
-# Unsupported target "test_expr" with type "test" omitted
-
-# Unsupported target "test_generics" with type "test" omitted
-
-# Unsupported target "test_grouping" with type "test" omitted
-
-# Unsupported target "test_ident" with type "test" omitted
-
-# Unsupported target "test_item" with type "test" omitted
-
-# Unsupported target "test_iterators" with type "test" omitted
-
-# Unsupported target "test_lit" with type "test" omitted
-
-# Unsupported target "test_meta" with type "test" omitted
-
-# Unsupported target "test_parse_buffer" with type "test" omitted
-
-# Unsupported target "test_parse_stream" with type "test" omitted
-
-# Unsupported target "test_pat" with type "test" omitted
-
-# Unsupported target "test_path" with type "test" omitted
-
-# Unsupported target "test_precedence" with type "test" omitted
-
-# Unsupported target "test_receiver" with type "test" omitted
-
-# Unsupported target "test_round_trip" with type "test" omitted
-
-# Unsupported target "test_shebang" with type "test" omitted
-
-# Unsupported target "test_should_parse" with type "test" omitted
-
-# Unsupported target "test_size" with type "test" omitted
-
-# Unsupported target "test_stmt" with type "test" omitted
-
-# Unsupported target "test_token_trees" with type "test" omitted
-
-# Unsupported target "test_ty" with type "test" omitted
-
-# Unsupported target "test_visibility" with type "test" omitted
-
-# Unsupported target "zzz_stable" with type "test" omitted
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.unicode-xid-0.2.2.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.unicode-xid-0.2.2.bazel
deleted file mode 100644
index a62237c..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.unicode-xid-0.2.2.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "xid" with type "bench" omitted
-
-rust_library(
-    name = "unicode_xid",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=unicode-xid",
-        "manual",
-    ],
-    version = "0.2.2",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "exhaustive_tests" with type "test" omitted
diff --git a/third_party/rules_rust/util/import/raze/remote/BUILD.wasi-0.10.2+wasi-snapshot-preview1.bazel b/third_party/rules_rust/util/import/raze/remote/BUILD.wasi-0.10.2+wasi-snapshot-preview1.bazel
deleted file mode 100644
index f4229fe..0000000
--- a/third_party/rules_rust/util/import/raze/remote/BUILD.wasi-0.10.2+wasi-snapshot-preview1.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//util/import/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR (Apache-2.0 OR MIT)"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "wasi",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "crate-name=wasi",
-        "manual",
-    ],
-    version = "0.10.2+wasi-snapshot-preview1",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/util/process_wrapper/BUILD.bazel b/third_party/rules_rust/util/process_wrapper/BUILD.bazel
index c26d9a6..c5276dd 100644
--- a/third_party/rules_rust/util/process_wrapper/BUILD.bazel
+++ b/third_party/rules_rust/util/process_wrapper/BUILD.bazel
@@ -1,45 +1,20 @@
-load("@rules_cc//cc:defs.bzl", "cc_binary")
-load("//rust:defs.bzl", "rust_binary", "rust_test")
+load("//rust:defs.bzl", "rust_test")
 
 # buildifier: disable=bzl-visibility
-load("//rust/private:transitions.bzl", "without_process_wrapper")
+load("//rust/private:rust.bzl", "rust_binary_without_process_wrapper")
 
-alias(
+rust_binary_without_process_wrapper(
     name = "process_wrapper",
-    actual = select({
-        # This will never get used, it's only here to break the circular dependency to allow building process_wrapper
-        ":use_fake_process_wrapper": ":process_wrapper_fake",
-        "//conditions:default": ":process_wrapper_impl",
-    }),
-    visibility = ["//visibility:public"],
-)
-
-cc_binary(
-    name = "process_wrapper_fake",
-    srcs = ["fake.cc"],
-)
-
-config_setting(
-    name = "use_fake_process_wrapper",
-    flag_values = {
-        "//rust/settings:use_process_wrapper": "False",
-    },
-)
-
-# Changing the name of this rule requires a corresponding
-# change in //rust/private/rustc.bzl:925
-without_process_wrapper(
-    name = "process_wrapper_impl",
-    target = ":process_wrapper_bin",
-    visibility = ["//visibility:public"],
-)
-
-rust_binary(
-    name = "process_wrapper_bin",
     srcs = glob(["*.rs"]),
+    edition = "2018",
+    visibility = ["//visibility:public"],
+    deps = [
+        "@rules_rust_tinyjson//:tinyjson",
+    ],
 )
 
 rust_test(
     name = "process_wrapper_test",
-    crate = ":process_wrapper_bin",
+    crate = ":process_wrapper",
+    edition = "2018",
 )
diff --git a/third_party/rules_rust/util/process_wrapper/BUILD.tinyjson.bazel b/third_party/rules_rust/util/process_wrapper/BUILD.tinyjson.bazel
new file mode 100644
index 0000000..31f9da2
--- /dev/null
+++ b/third_party/rules_rust/util/process_wrapper/BUILD.tinyjson.bazel
@@ -0,0 +1,9 @@
+# buildifier: disable=bzl-visibility
+load("@rules_rust//rust/private:rust.bzl", "rust_library_without_process_wrapper")
+
+rust_library_without_process_wrapper(
+    name = "tinyjson",
+    srcs = glob(["src/*.rs"]),
+    edition = "2018",
+    visibility = ["@rules_rust//util/process_wrapper:__pkg__"],
+)
diff --git a/third_party/rules_rust/util/process_wrapper/main.rs b/third_party/rules_rust/util/process_wrapper/main.rs
index 41140a3..6d985b3 100644
--- a/third_party/rules_rust/util/process_wrapper/main.rs
+++ b/third_party/rules_rust/util/process_wrapper/main.rs
@@ -14,50 +14,115 @@
 
 mod flags;
 mod options;
+mod output;
+mod rustc;
 mod util;
 
 use std::fs::{copy, OpenOptions};
-use std::process::{exit, Command, Stdio};
+use std::io;
+use std::process::{exit, Command, ExitStatus, Stdio};
 
 use crate::options::options;
+use crate::output::{process_output, LineOutput};
+
+#[cfg(windows)]
+fn status_code(status: ExitStatus, was_killed: bool) -> i32 {
+    // On windows, there's no good way to know if the process was killed by a signal.
+    // If we killed the process, we override the code to signal success.
+    if was_killed {
+        0
+    } else {
+        status.code().unwrap_or(1)
+    }
+}
+
+#[cfg(not(windows))]
+fn status_code(status: ExitStatus, was_killed: bool) -> i32 {
+    // On unix, if code is None it means that the process was killed by a signal.
+    // https://doc.rust-lang.org/std/process/struct.ExitStatus.html#method.success
+    match status.code() {
+        Some(code) => code,
+        // If we killed the process, we expect None here
+        None if was_killed => 0,
+        // Otherwise it's some unexpected signal
+        None => 1,
+    }
+}
 
 fn main() {
     let opts = match options() {
         Err(err) => panic!("process wrapper error: {}", err),
         Ok(v) => v,
     };
-    let stdout = if let Some(stdout_file) = opts.stdout_file {
-        OpenOptions::new()
-            .create(true)
-            .truncate(true)
-            .write(true)
-            .open(stdout_file)
-            .expect("process wrapper error: unable to open stdout file")
-            .into()
-    } else {
-        Stdio::inherit()
-    };
-    let stderr = if let Some(stderr_file) = opts.stderr_file {
-        OpenOptions::new()
-            .create(true)
-            .truncate(true)
-            .write(true)
-            .open(stderr_file)
-            .expect("process wrapper error: unable to open stderr file")
-            .into()
-    } else {
-        Stdio::inherit()
-    };
-    let status = Command::new(opts.executable)
+
+    let mut child = Command::new(opts.executable)
         .args(opts.child_arguments)
         .env_clear()
         .envs(opts.child_environment)
-        .stdout(stdout)
-        .stderr(stderr)
-        .status()
+        .stdout(if let Some(stdout_file) = opts.stdout_file {
+            OpenOptions::new()
+                .create(true)
+                .truncate(true)
+                .write(true)
+                .open(stdout_file)
+                .expect("process wrapper error: unable to open stdout file")
+                .into()
+        } else {
+            Stdio::inherit()
+        })
+        .stderr(Stdio::piped())
+        .spawn()
         .expect("process wrapper error: failed to spawn child process");
 
-    if status.success() {
+    let mut stderr: Box<dyn io::Write> = if let Some(stderr_file) = opts.stderr_file {
+        Box::new(
+            OpenOptions::new()
+                .create(true)
+                .truncate(true)
+                .write(true)
+                .open(stderr_file)
+                .expect("process wrapper error: unable to open stderr file"),
+        )
+    } else {
+        Box::new(io::stderr())
+    };
+
+    let mut child_stderr = child.stderr.take().unwrap();
+
+    let mut was_killed = false;
+    let result = if let Some(format) = opts.rustc_output_format {
+        let quit_on_rmeta = opts.rustc_quit_on_rmeta;
+        // Process json rustc output and kill the subprocess when we get a signal
+        // that we emitted a metadata file.
+        let mut me = false;
+        let metadata_emitted = &mut me;
+        let result = process_output(&mut child_stderr, stderr.as_mut(), move |line| {
+            if quit_on_rmeta {
+                rustc::stop_on_rmeta_completion(line, format, metadata_emitted)
+            } else {
+                rustc::process_json(line, format)
+            }
+        });
+        if me {
+            // If recv returns Ok(), a signal was sent in this channel so we should terminate the child process.
+            // We can safely ignore the Result from kill() as we don't care if the process already terminated.
+            let _ = child.kill();
+            was_killed = true;
+        }
+        result
+    } else {
+        // Process output normally by forwarding stderr
+        process_output(&mut child_stderr, stderr.as_mut(), LineOutput::Message)
+    };
+    result.expect("process wrapper error: failed to process stderr");
+
+    let status = child
+        .wait()
+        .expect("process wrapper error: failed to wait for child process");
+    // If the child process is rustc and is killed after metadata generation, that's also a success.
+    let code = status_code(status, was_killed);
+    let success = code == 0;
+    if success {
         if let Some(tf) = opts.touch_file {
             OpenOptions::new()
                 .create(true)
@@ -75,5 +140,5 @@
         }
     }
 
-    exit(status.code().unwrap())
+    exit(code)
 }
diff --git a/third_party/rules_rust/util/process_wrapper/options.rs b/third_party/rules_rust/util/process_wrapper/options.rs
index 24bba9f..869b5c3 100644
--- a/third_party/rules_rust/util/process_wrapper/options.rs
+++ b/third_party/rules_rust/util/process_wrapper/options.rs
@@ -4,6 +4,7 @@
 use std::process::exit;
 
 use crate::flags::{FlagParseError, Flags, ParseOutcome};
+use crate::rustc;
 use crate::util::*;
 
 #[derive(Debug)]
@@ -38,12 +39,19 @@
     pub(crate) stdout_file: Option<String>,
     // If set, redirects the child process stderr to this file.
     pub(crate) stderr_file: Option<String>,
+    // If set, it configures rustc to emit an rmeta file and then
+    // quit.
+    pub(crate) rustc_quit_on_rmeta: bool,
+    // If rustc_quit_on_rmeta is set to true, this controls the
+    // output format of rustc messages.
+    pub(crate) rustc_output_format: Option<rustc::ErrorFormat>,
 }
 
 pub(crate) fn options() -> Result<Options, OptionError> {
     // Process argument list until -- is encountered.
     // Everything after is sent to the child process.
     let mut subst_mapping_raw = None;
+    let mut stable_status_file_raw = None;
     let mut volatile_status_file_raw = None;
     let mut env_file_raw = None;
     let mut arg_file_raw = None;
@@ -51,8 +59,11 @@
     let mut copy_output_raw = None;
     let mut stdout_file = None;
     let mut stderr_file = None;
+    let mut rustc_quit_on_rmeta_raw = None;
+    let mut rustc_output_format_raw = None;
     let mut flags = Flags::new();
     flags.define_repeated_flag("--subst", "", &mut subst_mapping_raw);
+    flags.define_flag("--stable-status-file", "", &mut stable_status_file_raw);
     flags.define_flag("--volatile-status-file", "", &mut volatile_status_file_raw);
     flags.define_repeated_flag(
         "--env-file",
@@ -80,6 +91,19 @@
         "Redirect subprocess stderr in this file.",
         &mut stderr_file,
     );
+    flags.define_flag(
+        "--rustc-quit-on-rmeta",
+        "If enabled, this wrapper will terminate rustc after rmeta has been emitted.",
+        &mut rustc_quit_on_rmeta_raw,
+    );
+    flags.define_flag(
+        "--rustc-output-format",
+        "Controls the rustc output format if --rustc-quit-on-rmeta is set.\n\
+        'json' will cause the json output to be output, \
+        'rendered' will extract the rendered message and print that.\n\
+        Default: `rendered`",
+        &mut rustc_output_format_raw,
+    );
 
     let mut child_args = match flags
         .parse(env::args().collect())
@@ -112,9 +136,10 @@
             Ok((key.to_owned(), v))
         })
         .collect::<Result<Vec<(String, String)>, OptionError>>()?;
-    let stamp_mappings =
+    let stable_stamp_mappings =
+        stable_status_file_raw.map_or_else(Vec::new, |s| read_stamp_status_to_array(s).unwrap());
+    let volatile_stamp_mappings =
         volatile_status_file_raw.map_or_else(Vec::new, |s| read_stamp_status_to_array(s).unwrap());
-
     let environment_file_block = env_from_files(env_file_raw.unwrap_or_default())?;
     let mut file_arguments = args_from_file(arg_file_raw.unwrap_or_default())?;
     // Process --copy-output
@@ -138,9 +163,26 @@
         })
         .transpose()?;
 
+    let rustc_quit_on_rmeta = rustc_quit_on_rmeta_raw.map_or(false, |s| s == "true");
+    let rustc_output_format = rustc_output_format_raw
+        .map(|v| match v.as_str() {
+            "json" => Ok(rustc::ErrorFormat::Json),
+            "rendered" => Ok(rustc::ErrorFormat::Rendered),
+            _ => Err(OptionError::Generic(format!(
+                "invalid --rustc-output-format '{}'",
+                v
+            ))),
+        })
+        .transpose()?;
+
     // Prepare the environment variables, unifying those read from files with the ones
     // of the current process.
-    let vars = environment_block(environment_file_block, &stamp_mappings, &subst_mappings);
+    let vars = environment_block(
+        environment_file_block,
+        &stable_stamp_mappings,
+        &volatile_stamp_mappings,
+        &subst_mappings,
+    );
     // Append all the arguments fetched from files to those provided via command line.
     child_args.append(&mut file_arguments);
     let child_args = prepare_args(child_args, &subst_mappings);
@@ -159,13 +201,20 @@
         copy_output,
         stdout_file,
         stderr_file,
+        rustc_quit_on_rmeta,
+        rustc_output_format,
     })
 }
 
 fn args_from_file(paths: Vec<String>) -> Result<Vec<String>, OptionError> {
     let mut args = vec![];
-    for path in paths.into_iter() {
-        let mut lines = read_file_to_array(path).map_err(OptionError::Generic)?;
+    for path in paths.iter() {
+        let mut lines = read_file_to_array(path).map_err(|err| {
+            OptionError::Generic(format!(
+                "{} while processing args from file paths: {:?}",
+                err, &paths
+            ))
+        })?;
         args.append(&mut lines);
     }
     Ok(args)
@@ -174,7 +223,7 @@
 fn env_from_files(paths: Vec<String>) -> Result<HashMap<String, String>, OptionError> {
     let mut env_vars = HashMap::new();
     for path in paths.into_iter() {
-        let lines = read_file_to_array(path).map_err(OptionError::Generic)?;
+        let lines = read_file_to_array(&path).map_err(OptionError::Generic)?;
         for line in lines.into_iter() {
             let (k, v) = line
                 .split_once('=')
@@ -198,7 +247,8 @@
 
 fn environment_block(
     environment_file_block: HashMap<String, String>,
-    stamp_mappings: &[(String, String)],
+    stable_stamp_mappings: &[(String, String)],
+    volatile_stamp_mappings: &[(String, String)],
     subst_mappings: &[(String, String)],
 ) -> HashMap<String, String> {
     // Taking all environment variables from the current process
@@ -208,7 +258,7 @@
     // This is simpler than needing to track duplicates and explicitly override
     // them.
     environment_variables.extend(environment_file_block.into_iter());
-    for (f, replace_with) in stamp_mappings {
+    for (f, replace_with) in &[stable_stamp_mappings, volatile_stamp_mappings].concat() {
         for value in environment_variables.values_mut() {
             let from = format!("{{{}}}", f);
             let new = value.replace(from.as_str(), replace_with);
diff --git a/third_party/rules_rust/util/process_wrapper/output.rs b/third_party/rules_rust/util/process_wrapper/output.rs
new file mode 100644
index 0000000..84d61d9
--- /dev/null
+++ b/third_party/rules_rust/util/process_wrapper/output.rs
@@ -0,0 +1,56 @@
+// Copyright 2020 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use std::io::{self, prelude::*};
+
+/// LineOutput tells process_output what to do when a line is processed.
+/// If a Message is returned, it will be written to write_end, if
+/// Skip is returned nothing will be printed and execution continues,
+/// if Terminate is returned, process_output returns immediately.
+/// Terminate is used to stop processing when we see an emit metadata
+/// message.
+#[derive(Debug)]
+pub(crate) enum LineOutput {
+    Message(String),
+    Skip,
+    Terminate,
+}
+
+/// process_output reads lines from read_end and invokes process_line on each.
+/// Depending on the result of process_line, the modified message may be written
+/// to write_end.
+pub(crate) fn process_output<F>(
+    read_end: &mut dyn Read,
+    write_end: &mut dyn Write,
+    mut process_line: F,
+) -> io::Result<()>
+where
+    F: FnMut(String) -> LineOutput,
+{
+    let mut reader = io::BufReader::new(read_end);
+    let mut writer = io::LineWriter::new(write_end);
+    loop {
+        let mut line = String::new();
+        let read_bytes = reader.read_line(&mut line)?;
+        if read_bytes == 0 {
+            break;
+        }
+        match process_line(line) {
+            LineOutput::Message(to_write) => writer.write_all(to_write.as_bytes())?,
+            LineOutput::Skip => {}
+            LineOutput::Terminate => return Ok(()),
+        };
+    }
+    Ok(())
+}
diff --git a/third_party/rules_rust/util/process_wrapper/rustc.rs b/third_party/rules_rust/util/process_wrapper/rustc.rs
new file mode 100644
index 0000000..ca79680
--- /dev/null
+++ b/third_party/rules_rust/util/process_wrapper/rustc.rs
@@ -0,0 +1,112 @@
+// Copyright 2020 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use std::convert::{TryFrom, TryInto};
+
+use tinyjson::JsonValue;
+
+use crate::output::LineOutput;
+
+#[derive(Debug, Copy, Clone)]
+pub(crate) enum ErrorFormat {
+    Json,
+    Rendered,
+}
+
+impl Default for ErrorFormat {
+    fn default() -> Self {
+        Self::Rendered
+    }
+}
+
+fn get_key(value: &JsonValue, key: &str) -> Option<String> {
+    if let JsonValue::Object(map) = value {
+        if let JsonValue::String(s) = map.get(key)? {
+            Some(s.clone())
+        } else {
+            None
+        }
+    } else {
+        None
+    }
+}
+
+#[derive(Debug)]
+enum RustcMessage {
+    Emit(String),
+    Message(String),
+}
+
+impl TryFrom<JsonValue> for RustcMessage {
+    type Error = ();
+    fn try_from(val: JsonValue) -> Result<Self, Self::Error> {
+        if let Some(emit) = get_key(&val, "emit") {
+            return Ok(Self::Emit(emit));
+        }
+        if let Some(rendered) = get_key(&val, "rendered") {
+            return Ok(Self::Message(rendered));
+        }
+        Err(())
+    }
+}
+
+/// process_rustc_json takes an output line from rustc configured with
+/// --error-format=json, parses the json and returns the appropriate output
+/// according to the original --error-format supplied.
+/// Only messages are returned, emits are ignored.
+pub(crate) fn process_json(line: String, error_format: ErrorFormat) -> LineOutput {
+    let parsed: JsonValue = line
+        .parse()
+        .expect("process wrapper error: expected json messages in pipeline mode");
+    match parsed.try_into() {
+        Ok(RustcMessage::Message(msg)) => match error_format {
+            // If the output should be json, we just forward the messages as-is
+            // using `line`.
+            ErrorFormat::Json => LineOutput::Message(line),
+            // Otherwise we return the rendered field.
+            _ => LineOutput::Message(msg),
+        },
+        _ => LineOutput::Skip,
+    }
+}
+
+/// stop_on_rmeta_completion parses the json output of rustc in the same way process_rustc_json does.
+/// In addition, it will signal to stop when metadata is emitted
+/// so the compiler can be terminated.
+/// This is used to implement pipelining in rules_rust, please see
+/// https://internals.rust-lang.org/t/evaluating-pipelined-rustc-compilation/10199
+pub(crate) fn stop_on_rmeta_completion(
+    line: String,
+    error_format: ErrorFormat,
+    kill: &mut bool,
+) -> LineOutput {
+    let parsed: JsonValue = line
+        .parse()
+        .expect("process wrapper error: expected json messages in pipeline mode");
+
+    match parsed.try_into() {
+        Ok(RustcMessage::Emit(emit)) if emit == "metadata" => {
+            *kill = true;
+            LineOutput::Terminate
+        }
+        Ok(RustcMessage::Message(msg)) => match error_format {
+            // If the output should be json, we just forward the messages as-is
+            // using `line`.
+            ErrorFormat::Json => LineOutput::Message(line),
+            // Otherwise we return the rendered field.
+            _ => LineOutput::Message(msg),
+        },
+        _ => LineOutput::Skip,
+    }
+}
diff --git a/third_party/rules_rust/util/process_wrapper/util.rs b/third_party/rules_rust/util/process_wrapper/util.rs
index 4b3d6bb..89f2ded 100644
--- a/third_party/rules_rust/util/process_wrapper/util.rs
+++ b/third_party/rules_rust/util/process_wrapper/util.rs
@@ -15,8 +15,16 @@
 use std::fs::File;
 use std::io::{BufRead, BufReader, Read};
 
-pub(crate) fn read_file_to_array(path: String) -> Result<Vec<String>, String> {
-    let file = File::open(path).map_err(|e| e.to_string())?;
+pub(crate) fn read_file_to_array(path: &str) -> Result<Vec<String>, String> {
+    let file = File::open(path).map_err(|e| e.to_string()).map_err(|err| {
+        format!(
+            "{} reading path: {:?}, current directory: {:?}",
+            err,
+            path,
+            std::env::current_dir()
+        )
+    })?;
+
     read_to_array(file)
 }
 
diff --git a/third_party/rules_rust/version.bzl b/third_party/rules_rust/version.bzl
new file mode 100644
index 0000000..7e40f45
--- /dev/null
+++ b/third_party/rules_rust/version.bzl
@@ -0,0 +1,3 @@
+"""The version of rules_rust."""
+
+VERSION = "0.9.0"
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/BUILD.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/BUILD.bazel
new file mode 100644
index 0000000..16a627f
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/BUILD.bazel
@@ -0,0 +1,83 @@
+load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
+load("//crate_universe:defs.bzl", "crate", "crates_vendor")
+load("//wasm_bindgen:repositories.bzl", "WASM_BINDGEN_VERSION")
+
+exports_files([
+    "BUILD.wasm-bindgen-cli.bazel",
+])
+
+crates_vendor(
+    name = "crates_vendor",
+    annotations = {
+        "curl-sys": [crate.annotation(
+            gen_build_script = False,
+        )],
+        "log": [crate.annotation(
+            rustc_flags = [
+                "--cfg=atomic_cas",
+                "--cfg=use_std",
+            ],
+            version = "<5",
+        )],
+        "openssl-sys": [crate.annotation(
+            gen_build_script = False,
+            rustc_flags = [
+                # Vendored openssl is 1.0.2m
+                "--cfg=ossl101",
+                "--cfg=ossl102",
+                "--cfg=ossl102f",
+                "--cfg=ossl102h",
+                "--cfg=ossl110",
+                "--cfg=ossl110f",
+                "--cfg=ossl110g",
+                "--cfg=ossl111",
+                "--cfg=ossl111b",
+                "-l",
+                "dylib=ssl",
+                "-l",
+                "dylib=crypto",
+            ],
+        )],
+        "proc-macro2": [crate.annotation(
+            rustc_flags = ["--cfg=use_proc_macro"],
+        )],
+        "unicase": [crate.annotation(
+            rustc_flags = [
+                "--cfg=__unicase__iter_cmp",
+                "--cfg=__unicase__defauler_hasher",
+            ],
+        )],
+    },
+    cargo_lockfile = "Cargo.Bazel.lock",
+    manifests = ["@rules_rust_wasm_bindgen_cli//:Cargo.toml"],
+    mode = "remote",
+    packages = {
+        "wasm-bindgen": crate.spec(
+            version = WASM_BINDGEN_VERSION,
+        ),
+    },
+    repository_name = "rules_rust_wasm_bindgen",
+    tags = ["manual"],
+)
+
+alias(
+    name = "wasm_bindgen_cli",
+    actual = "@rules_rust_wasm_bindgen_cli",
+    tags = ["manual"],
+    visibility = ["//visibility:public"],
+)
+
+alias(
+    name = "wasm_bindgen",
+    actual = "//wasm_bindgen/3rdparty/crates:wasm-bindgen",
+    visibility = ["//visibility:public"],
+)
+
+bzl_library(
+    name = "bzl_lib",
+    srcs = glob(["**/*.bzl"]) + [
+        "//wasm_bindgen/3rdparty/crates:defs.bzl",
+        "//wasm_bindgen/3rdparty/crates:crates.bzl",
+    ],
+    visibility = ["//wasm_bindgen:__pkg__"],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/BUILD.wasm-bindgen-cli.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/BUILD.wasm-bindgen-cli.bazel
new file mode 100644
index 0000000..7900817
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/BUILD.wasm-bindgen-cli.bazel
@@ -0,0 +1,34 @@
+load("@rules_rust//rust:defs.bzl", "rust_binary")
+load("@rules_rust//wasm_bindgen:repositories.bzl", "WASM_BINDGEN_VERSION")
+load("@rules_rust//wasm_bindgen/3rdparty/crates:defs.bzl", "aliases", "all_crate_deps")
+
+package(default_visibility = ["//visibility:public"])
+
+exports_files([
+    "Cargo.toml",
+])
+
+# TODO: Comment on bootstrapping
+rust_binary(
+    name = "wasm-bindgen-cli",
+    srcs = glob(["**/*.rs"]),
+    aliases = aliases(),
+    crate_features = [
+    ],
+    crate_root = "src/bin/wasm-bindgen.rs",
+    data = [],
+    edition = "2018",
+    proc_macro_deps = all_crate_deps(proc_macro = True),
+    rustc_flags = [
+        # Don't produce warnings for this crate
+        "--cap-lints=allow",
+    ],
+    version = WASM_BINDGEN_VERSION,
+    deps = all_crate_deps(),
+)
+
+alias(
+    name = "rules_rust_wasm_bindgen_cli",
+    actual = ":wasm-bindgen-cli",
+    tags = ["manual"],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/Cargo.Bazel.lock b/third_party/rules_rust/wasm_bindgen/3rdparty/Cargo.Bazel.lock
new file mode 100644
index 0000000..3e11ceb
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/Cargo.Bazel.lock
@@ -0,0 +1,1451 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704"
+
+[[package]]
+name = "ascii"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbf56136a5198c7b01a49e3afcbef6cf84597273d298f54432926024107b0109"
+
+[[package]]
+name = "assert_cmd"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c98233c6673d8601ab23e77eb38f999c51100d46c5703b17288c57fddf3a1ffe"
+dependencies = [
+ "bstr",
+ "doc-comment",
+ "predicates 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643"
+dependencies = [
+ "byteorder",
+ "safemem",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bstr"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata",
+]
+
+[[package]]
+name = "buf_redux"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f"
+dependencies = [
+ "memchr",
+ "safemem",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
+dependencies = [
+ "libc",
+ "num-integer",
+ "num-traits",
+ "winapi",
+]
+
+[[package]]
+name = "chunked_transfer"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff857943da45f546682664a79488be82e69e43c1a7a2307679ab9afb3a66d2e"
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "once_cell",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "curl"
+version = "0.4.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37d855aeef205b43f65a5001e0997d81f8efca7badad4fad7d897aa7f0d0651f"
+dependencies = [
+ "curl-sys",
+ "libc",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "socket2",
+ "winapi",
+]
+
+[[package]]
+name = "curl-sys"
+version = "0.4.55+curl-7.83.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23734ec77368ec583c2e61dd3f0b0e5c98b93abe6d2a004ca06b91dd7e3e2762"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+ "winapi",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "difference"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "docopt"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f3f119846c823f9eafcf953a8f6ffb6ed69bf6240883261a7f13b634579a51f"
+dependencies = [
+ "lazy_static",
+ "regex",
+ "serde",
+ "strsim",
+]
+
+[[package]]
+name = "either"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be"
+
+[[package]]
+name = "env_logger"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "windows-sys",
+]
+
+[[package]]
+name = "float-cmp"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1267f4ac4f343772758f7b1bdcbe767c218bbab93bb432acbf5162bbf85a6c4"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+dependencies = [
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "httparse"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "id-arena"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005"
+dependencies = [
+ "rayon",
+]
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "leb128"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67"
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "libz-sys"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "multipart"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182"
+dependencies = [
+ "buf_redux",
+ "httparse",
+ "log",
+ "mime",
+ "mime_guess",
+ "quick-error",
+ "rand",
+ "safemem",
+ "tempfile",
+ "twoway",
+]
+
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
+
+[[package]]
+name = "openssl"
+version = "0.10.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-src"
+version = "111.22.0+1.1.1q"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f31f0d509d1c1ae9cada2f9539ff8f37933831fd5098879e482aa687d659853"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+
+[[package]]
+name = "predicates"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f49cfaf7fdaa3bfacc6fa3e7054e65148878354a5cfddcf661df4c851f8021df"
+dependencies = [
+ "difference",
+ "float-cmp",
+ "normalize-line-endings",
+ "predicates-core",
+ "regex",
+]
+
+[[package]]
+name = "predicates"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5aab5be6e4732b473071984b3164dbbfb7a3674d30ea5ff44410b6bcd960c3c"
+dependencies = [
+ "difflib",
+ "itertools",
+ "predicates-core",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da1c2388b1513e1b605fcec39a95e0a9e8ef088f71443ef37099fa9ae6673fcb"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d86de6de25020a36c6d3643a86d9a6a9f552107c0559c60ea03551b5e16c032"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quote"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rayon"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d"
+dependencies = [
+ "autocfg",
+ "crossbeam-deque",
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "regex"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "rouille"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18b2380c42510ef4a28b5f228a174c801e0dec590103e215e60812e2e2f34d05"
+dependencies = [
+ "base64 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "chrono",
+ "filetime",
+ "multipart",
+ "num_cpus",
+ "percent-encoding",
+ "rand",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "sha1",
+ "threadpool",
+ "time",
+ "tiny_http",
+ "url",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
+
+[[package]]
+name = "ryu"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
+
+[[package]]
+name = "safemem"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
+
+[[package]]
+name = "schannel"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
+dependencies = [
+ "lazy_static",
+ "windows-sys",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "serde"
+version = "1.0.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0171ebb889e45aa68b44aee0859b3eede84c6f5f5c228e6f140c0b2a0a46cad6"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc1d3230c1de7932af58ad8ffbe1d784bd55efd5a9d84ac24f69c72d83543dfb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha1"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770"
+dependencies = [
+ "sha1_smol",
+]
+
+[[package]]
+name = "sha1_smol"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
+
+[[package]]
+name = "socket2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.98"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "libc",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "termtree"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b"
+
+[[package]]
+name = "threadpool"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
+dependencies = [
+ "num_cpus",
+]
+
+[[package]]
+name = "time"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217"
+dependencies = [
+ "libc",
+ "num_threads",
+]
+
+[[package]]
+name = "tiny_http"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ce51b50006056f590c9b7c3808c3bd70f0d1101666629713866c227d6e58d39"
+dependencies = [
+ "ascii",
+ "chrono",
+ "chunked_transfer",
+ "log",
+ "url",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "twoway"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
+
+[[package]]
+name = "url"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "walrus"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eb08e48cde54c05f363d984bb54ce374f49e242def9468d2e1b6c2372d291f8"
+dependencies = [
+ "anyhow",
+ "id-arena",
+ "leb128",
+ "log",
+ "rayon",
+ "walrus-macro",
+ "wasmparser 0.77.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "walrus-macro"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a6e5bd22c71e77d60140b0bd5be56155a37e5bd14e24f5f87298040d0cc40d7"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a"
+dependencies = [
+ "bumpalo",
+ "lazy_static",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-cli"
+version = "0.2.81"
+dependencies = [
+ "anyhow",
+ "assert_cmd",
+ "curl",
+ "diff",
+ "docopt",
+ "env_logger",
+ "log",
+ "openssl",
+ "predicates 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rayon",
+ "rouille",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tempfile",
+ "walrus",
+ "wasm-bindgen",
+ "wasm-bindgen-cli-support",
+ "wasm-bindgen-shared",
+ "wasmprinter",
+ "wit-printer",
+ "wit-text",
+ "wit-validator",
+ "wit-walrus",
+]
+
+[[package]]
+name = "wasm-bindgen-cli-support"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4016fbd42224de21aab2f009aeaec61067d278a298ba7f8f7f8d40fbffea0822"
+dependencies = [
+ "anyhow",
+ "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log",
+ "rustc-demangle",
+ "serde_json",
+ "tempfile",
+ "walrus",
+ "wasm-bindgen-externref-xform",
+ "wasm-bindgen-multi-value-xform",
+ "wasm-bindgen-shared",
+ "wasm-bindgen-threads-xform",
+ "wasm-bindgen-wasm-conventions",
+ "wasm-bindgen-wasm-interpreter",
+ "wit-text",
+ "wit-validator",
+ "wit-walrus",
+]
+
+[[package]]
+name = "wasm-bindgen-externref-xform"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f33c8e2d3f3b6f6647f982911eb4cb44998c8cca97a4fe7afc99f616ebb33a73"
+dependencies = [
+ "anyhow",
+ "walrus",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-multi-value-xform"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7015b54357604811162710d5cf274ab85d974fe1e324222dd5b2133afdefe9b9"
+dependencies = [
+ "anyhow",
+ "walrus",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be"
+
+[[package]]
+name = "wasm-bindgen-threads-xform"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6961b838d9a9c121ba4a1eea1628014cc759469e3defb42bbac9c5ed0f65be14"
+dependencies = [
+ "anyhow",
+ "walrus",
+ "wasm-bindgen-wasm-conventions",
+]
+
+[[package]]
+name = "wasm-bindgen-wasm-conventions"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0a0eca38fe89471f57d6903f3e17e732d2d6f995a7af5b23f27df7fee0f0d18"
+dependencies = [
+ "anyhow",
+ "walrus",
+]
+
+[[package]]
+name = "wasm-bindgen-wasm-interpreter"
+version = "0.2.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b1c9fb7f71137840932bbb853ef1f83d68c88584b716c9bbae38675c9fb8b86"
+dependencies = [
+ "anyhow",
+ "log",
+ "walrus",
+ "wasm-bindgen-wasm-conventions",
+]
+
+[[package]]
+name = "wasmparser"
+version = "0.59.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a950e6a618f62147fd514ff445b2a0b53120d382751960797f85f058c7eda9b9"
+
+[[package]]
+name = "wasmparser"
+version = "0.77.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b35c86d22e720a07d954ebbed772d01180501afe7d03d464f413bb5f8914a8d6"
+
+[[package]]
+name = "wasmparser"
+version = "0.83.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "718ed7c55c2add6548cca3ddd6383d738cd73b892df400e96b9aa876f0141d7a"
+
+[[package]]
+name = "wasmprinter"
+version = "0.2.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f973822fb3ca7e03ab421910274514b405df19a3d53acb131ae4df3a2fc4eb58"
+dependencies = [
+ "anyhow",
+ "wasmparser 0.83.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "wast"
+version = "21.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b1844f66a2bc8526d71690104c0e78a8e59ffa1597b7245769d174ebb91deb5"
+dependencies = [
+ "leb128",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+
+[[package]]
+name = "wit-parser"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f5fd97866f4b9c8e1ed57bcf9446f3d0d8ba37e2dd01c3c612c046c053b06f7"
+dependencies = [
+ "anyhow",
+ "leb128",
+ "wit-schema-version",
+]
+
+[[package]]
+name = "wit-printer"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f19ca44555a3c14d69acee6447a6e4f52771b0c6e5d8db3e42db3b90f6fce9"
+dependencies = [
+ "anyhow",
+ "wasmprinter",
+ "wit-parser",
+ "wit-schema-version",
+]
+
+[[package]]
+name = "wit-schema-version"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfee4a6a4716eefa0682e7a3b836152e894a3e4f34a9d6c2c3e1c94429bfe36a"
+
+[[package]]
+name = "wit-text"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33358e95c77d660f1c7c07f4a93c2bd89768965e844e3c50730bb4b42658df5f"
+dependencies = [
+ "anyhow",
+ "wast",
+ "wit-writer",
+]
+
+[[package]]
+name = "wit-validator"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c11d93d925420e7872b226c4161849c32be38385ccab026b88df99d8ddc6ba6"
+dependencies = [
+ "anyhow",
+ "wasmparser 0.59.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "wit-parser",
+ "wit-schema-version",
+]
+
+[[package]]
+name = "wit-walrus"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad559e3e4c6404b2a6a675d44129d62a3836e3b951b90112fa1c5feb852757cd"
+dependencies = [
+ "anyhow",
+ "id-arena",
+ "walrus",
+ "wit-parser",
+ "wit-schema-version",
+ "wit-writer",
+]
+
+[[package]]
+name = "wit-writer"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2ad01ba5e9cbcff799a0689e56a153776ea694cec777f605938cb9880d41a09"
+dependencies = [
+ "leb128",
+ "wit-schema-version",
+]
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel
new file mode 100644
index 0000000..f435c96
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.aho-corasick-0.7.18.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "aho_corasick",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.7.18",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__memchr-2.5.0//:memchr",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.anyhow-1.0.58.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.anyhow-1.0.58.bazel
new file mode 100644
index 0000000..07f7a98
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.anyhow-1.0.58.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "anyhow",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.58",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__anyhow-1.0.58//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "anyhow_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.58",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "anyhow_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.ascii-1.0.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.ascii-1.0.0.bazel
new file mode 100644
index 0000000..b4d2927
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.ascii-1.0.0.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 / MIT
+# ])
+
+rust_library(
+    name = "ascii",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.assert_cmd-1.0.8.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.assert_cmd-1.0.8.bazel
new file mode 100644
index 0000000..ee5f7a7
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.assert_cmd-1.0.8.bazel
@@ -0,0 +1,169 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "assert_cmd",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__bstr-0.2.17//:bstr",
+            "@rules_rust_wasm_bindgen__doc-comment-0.3.3//:doc_comment",
+            "@rules_rust_wasm_bindgen__predicates-2.1.1//:predicates",
+            "@rules_rust_wasm_bindgen__predicates-core-1.0.3//:predicates_core",
+            "@rules_rust_wasm_bindgen__predicates-tree-1.0.5//:predicates_tree",
+            "@rules_rust_wasm_bindgen__wait-timeout-0.2.0//:wait_timeout",
+        ],
+    }),
+)
+
+rust_binary(
+    name = "bin_fixture__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/bin/bin_fixture.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.8",
+    deps = [
+        ":assert_cmd",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__bstr-0.2.17//:bstr",
+            "@rules_rust_wasm_bindgen__doc-comment-0.3.3//:doc_comment",
+            "@rules_rust_wasm_bindgen__predicates-2.1.1//:predicates",
+            "@rules_rust_wasm_bindgen__predicates-core-1.0.3//:predicates_core",
+            "@rules_rust_wasm_bindgen__predicates-tree-1.0.5//:predicates_tree",
+            "@rules_rust_wasm_bindgen__wait-timeout-0.2.0//:wait_timeout",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.atty-0.2.14.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.atty-0.2.14.bazel
new file mode 100644
index 0000000..f3bc4d8
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.atty-0.2.14.bazel
@@ -0,0 +1,132 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "atty",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.14",
+    deps = [
+    ] + select_with_or({
+        # cfg(target_os = "hermit")
+        #
+        # No supported platform triples for cfg: 'cfg(target_os = "hermit")'
+        # Skipped dependencies: [{"id":"hermit-abi 0.1.19","target":"hermit_abi"}]
+        #
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__winapi-0.3.9//:winapi",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.autocfg-1.1.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.autocfg-1.1.0.bazel
new file mode 100644
index 0000000..224d232
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.autocfg-1.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "autocfg",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.base64-0.13.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.base64-0.13.0.bazel
new file mode 100644
index 0000000..b4c257d
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.base64-0.13.0.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "base64",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.13.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.base64-0.9.3.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.base64-0.9.3.bazel
new file mode 100644
index 0000000..aca25e3
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.base64-0.9.3.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "base64",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.9.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__byteorder-1.4.3//:byteorder",
+            "@rules_rust_wasm_bindgen__safemem-0.3.3//:safemem",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.bazel
new file mode 100644
index 0000000..09fec3a
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.bazel
@@ -0,0 +1,227 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+package(default_visibility = ["//visibility:public"])
+
+exports_files(
+    [
+        "cargo-bazel.json",
+        "defs.bzl",
+        "crates.bzl",
+    ] + glob([
+        "*.bazel",
+    ]),
+)
+
+filegroup(
+    name = "srcs",
+    srcs = glob([
+        "*.bazel",
+        "*.bzl",
+    ]),
+)
+
+# Workspace Member Dependencies
+alias(
+    name = "anyhow",
+    actual = "@rules_rust_wasm_bindgen__anyhow-1.0.58//:anyhow",
+    tags = ["manual"],
+)
+
+alias(
+    name = "assert_cmd",
+    actual = "@rules_rust_wasm_bindgen__assert_cmd-1.0.8//:assert_cmd",
+    tags = ["manual"],
+)
+
+alias(
+    name = "curl",
+    actual = "@rules_rust_wasm_bindgen__curl-0.4.43//:curl",
+    tags = ["manual"],
+)
+
+alias(
+    name = "diff",
+    actual = "@rules_rust_wasm_bindgen__diff-0.1.13//:diff",
+    tags = ["manual"],
+)
+
+alias(
+    name = "docopt",
+    actual = "@rules_rust_wasm_bindgen__docopt-1.1.1//:docopt",
+    tags = ["manual"],
+)
+
+alias(
+    name = "env_logger",
+    actual = "@rules_rust_wasm_bindgen__env_logger-0.8.4//:env_logger",
+    tags = ["manual"],
+)
+
+alias(
+    name = "log",
+    actual = "@rules_rust_wasm_bindgen__log-0.4.17//:log",
+    tags = ["manual"],
+)
+
+alias(
+    name = "predicates",
+    actual = "@rules_rust_wasm_bindgen__predicates-1.0.8//:predicates",
+    tags = ["manual"],
+)
+
+alias(
+    name = "rayon",
+    actual = "@rules_rust_wasm_bindgen__rayon-1.5.3//:rayon",
+    tags = ["manual"],
+)
+
+alias(
+    name = "rouille",
+    actual = "@rules_rust_wasm_bindgen__rouille-3.5.0//:rouille",
+    tags = ["manual"],
+)
+
+alias(
+    name = "serde",
+    actual = "@rules_rust_wasm_bindgen__serde-1.0.139//:serde",
+    tags = ["manual"],
+)
+
+alias(
+    name = "serde_derive",
+    actual = "@rules_rust_wasm_bindgen__serde_derive-1.0.139//:serde_derive",
+    tags = ["manual"],
+)
+
+alias(
+    name = "serde_json",
+    actual = "@rules_rust_wasm_bindgen__serde_json-1.0.82//:serde_json",
+    tags = ["manual"],
+)
+
+alias(
+    name = "tempfile",
+    actual = "@rules_rust_wasm_bindgen__tempfile-3.3.0//:tempfile",
+    tags = ["manual"],
+)
+
+alias(
+    name = "walrus",
+    actual = "@rules_rust_wasm_bindgen__walrus-0.19.0//:walrus",
+    tags = ["manual"],
+)
+
+alias(
+    name = "wasm-bindgen",
+    actual = "@rules_rust_wasm_bindgen__wasm-bindgen-0.2.81//:wasm_bindgen",
+    tags = ["manual"],
+)
+
+alias(
+    name = "wasm-bindgen-cli-support",
+    actual = "@rules_rust_wasm_bindgen__wasm-bindgen-cli-support-0.2.81//:wasm_bindgen_cli_support",
+    tags = ["manual"],
+)
+
+alias(
+    name = "wasm-bindgen-shared",
+    actual = "@rules_rust_wasm_bindgen__wasm-bindgen-shared-0.2.81//:wasm_bindgen_shared",
+    tags = ["manual"],
+)
+
+alias(
+    name = "wasmprinter",
+    actual = "@rules_rust_wasm_bindgen__wasmprinter-0.2.33//:wasmprinter",
+    tags = ["manual"],
+)
+
+alias(
+    name = "wit-printer",
+    actual = "@rules_rust_wasm_bindgen__wit-printer-0.2.0//:wit_printer",
+    tags = ["manual"],
+)
+
+alias(
+    name = "wit-text",
+    actual = "@rules_rust_wasm_bindgen__wit-text-0.8.0//:wit_text",
+    tags = ["manual"],
+)
+
+alias(
+    name = "wit-validator",
+    actual = "@rules_rust_wasm_bindgen__wit-validator-0.2.1//:wit_validator",
+    tags = ["manual"],
+)
+
+alias(
+    name = "wit-walrus",
+    actual = "@rules_rust_wasm_bindgen__wit-walrus-0.6.0//:wit_walrus",
+    tags = ["manual"],
+)
+
+# Binaries
+alias(
+    name = "assert_cmd__bin_fixture",
+    actual = "@rules_rust_wasm_bindgen__assert_cmd-1.0.8//:bin_fixture__bin",
+    tags = ["manual"],
+)
+
+alias(
+    name = "cc__gcc-shim",
+    actual = "@rules_rust_wasm_bindgen__cc-1.0.73//:gcc-shim__bin",
+    tags = ["manual"],
+)
+
+alias(
+    name = "difference__difference",
+    actual = "@rules_rust_wasm_bindgen__difference-2.0.0//:difference__bin",
+    tags = ["manual"],
+)
+
+alias(
+    name = "docopt__docopt-wordlist",
+    actual = "@rules_rust_wasm_bindgen__docopt-1.1.1//:docopt-wordlist__bin",
+    tags = ["manual"],
+)
+
+alias(
+    name = "leb128__leb128-repl",
+    actual = "@rules_rust_wasm_bindgen__leb128-0.2.5//:leb128-repl__bin",
+    tags = ["manual"],
+)
+
+alias(
+    name = "multipart__form_test",
+    actual = "@rules_rust_wasm_bindgen__multipart-0.18.0//:form_test__bin",
+    tags = ["manual"],
+)
+
+alias(
+    name = "wait-timeout__exit",
+    actual = "@rules_rust_wasm_bindgen__wait-timeout-0.2.0//:exit__bin",
+    tags = ["manual"],
+)
+
+alias(
+    name = "wait-timeout__sleep",
+    actual = "@rules_rust_wasm_bindgen__wait-timeout-0.2.0//:sleep__bin",
+    tags = ["manual"],
+)
+
+alias(
+    name = "wait-timeout__reader",
+    actual = "@rules_rust_wasm_bindgen__wait-timeout-0.2.0//:reader__bin",
+    tags = ["manual"],
+)
+
+alias(
+    name = "wit-schema-version__wit-schema-version",
+    actual = "@rules_rust_wasm_bindgen__wit-schema-version-0.1.0//:wit-schema-version__bin",
+    tags = ["manual"],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.bitflags-1.3.2.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.bitflags-1.3.2.bazel
new file mode 100644
index 0000000..9ee10b2
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.bitflags-1.3.2.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "bitflags",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.3.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.bstr-0.2.17.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.bstr-0.2.17.bazel
new file mode 100644
index 0000000..141a153
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.bstr-0.2.17.bazel
@@ -0,0 +1,98 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "bstr",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "lazy_static",
+        "regex-automata",
+        "std",
+        "unicode",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.17",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__lazy_static-1.4.0//:lazy_static",
+            "@rules_rust_wasm_bindgen__memchr-2.5.0//:memchr",
+            "@rules_rust_wasm_bindgen__regex-automata-0.1.10//:regex_automata",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.buf_redux-0.8.4.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.buf_redux-0.8.4.bazel
new file mode 100644
index 0000000..ed026fa
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.buf_redux-0.8.4.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "buf_redux",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.8.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__memchr-2.5.0//:memchr",
+            "@rules_rust_wasm_bindgen__safemem-0.3.3//:safemem",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.bumpalo-3.10.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.bumpalo-3.10.0.bazel
new file mode 100644
index 0000000..87253b2
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.bumpalo-3.10.0.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "bumpalo",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "3.10.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.byteorder-1.4.3.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.byteorder-1.4.3.bazel
new file mode 100644
index 0000000..44017a0
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.byteorder-1.4.3.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense OR MIT
+# ])
+
+rust_library(
+    name = "byteorder",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.4.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.cc-1.0.73.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.cc-1.0.73.bazel
new file mode 100644
index 0000000..868f453
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.cc-1.0.73.bazel
@@ -0,0 +1,157 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "cc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.73",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+rust_binary(
+    name = "gcc-shim__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/bin/gcc-shim.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.73",
+    deps = [
+        ":cc",
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
new file mode 100644
index 0000000..e9e5932
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.cfg-if-1.0.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "cfg_if",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.chrono-0.4.19.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.chrono-0.4.19.bazel
new file mode 100644
index 0000000..fe8b62c
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.chrono-0.4.19.bazel
@@ -0,0 +1,110 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "chrono",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clock",
+        "libc",
+        "std",
+        "winapi",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.19",
+    deps = [
+    ] + select_with_or({
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__winapi-0.3.9//:winapi",
+
+            # Common Deps
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+            "@rules_rust_wasm_bindgen__num-integer-0.1.45//:num_integer",
+            "@rules_rust_wasm_bindgen__num-traits-0.2.15//:num_traits",
+        ],
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+            "@rules_rust_wasm_bindgen__num-integer-0.1.45//:num_integer",
+            "@rules_rust_wasm_bindgen__num-traits-0.2.15//:num_traits",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.chunked_transfer-1.4.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.chunked_transfer-1.4.0.bazel
new file mode 100644
index 0000000..44eac97
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.chunked_transfer-1.4.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0
+# ])
+
+rust_library(
+    name = "chunked_transfer",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.crossbeam-channel-0.5.5.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.crossbeam-channel-0.5.5.bazel
new file mode 100644
index 0000000..8117a18
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.crossbeam-channel-0.5.5.bazel
@@ -0,0 +1,95 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "crossbeam_channel",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "crossbeam-utils",
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.5.5",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__cfg-if-1.0.0//:cfg_if",
+            "@rules_rust_wasm_bindgen__crossbeam-utils-0.8.10//:crossbeam_utils",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.crossbeam-deque-0.8.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.crossbeam-deque-0.8.1.bazel
new file mode 100644
index 0000000..2d5ae16
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.crossbeam-deque-0.8.1.bazel
@@ -0,0 +1,97 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "crossbeam_deque",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "crossbeam-epoch",
+        "crossbeam-utils",
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.8.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__cfg-if-1.0.0//:cfg_if",
+            "@rules_rust_wasm_bindgen__crossbeam-epoch-0.9.9//:crossbeam_epoch",
+            "@rules_rust_wasm_bindgen__crossbeam-utils-0.8.10//:crossbeam_utils",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.crossbeam-epoch-0.9.9.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.crossbeam-epoch-0.9.9.bazel
new file mode 100644
index 0000000..3563114
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.crossbeam-epoch-0.9.9.bazel
@@ -0,0 +1,186 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "crossbeam_epoch",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "once_cell",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.9.9",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__cfg-if-1.0.0//:cfg_if",
+            "@rules_rust_wasm_bindgen__crossbeam-epoch-0.9.9//:build_script_build",
+            "@rules_rust_wasm_bindgen__crossbeam-utils-0.8.10//:crossbeam_utils",
+            "@rules_rust_wasm_bindgen__memoffset-0.6.5//:memoffset",
+            "@rules_rust_wasm_bindgen__once_cell-1.13.0//:once_cell",
+            "@rules_rust_wasm_bindgen__scopeguard-1.1.0//:scopeguard",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "crossbeam-epoch_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "once_cell",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.9.9",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "crossbeam-epoch_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.crossbeam-utils-0.8.10.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.crossbeam-utils-0.8.10.bazel
new file mode 100644
index 0000000..f126f64
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.crossbeam-utils-0.8.10.bazel
@@ -0,0 +1,182 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "crossbeam_utils",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "once_cell",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.8.10",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__cfg-if-1.0.0//:cfg_if",
+            "@rules_rust_wasm_bindgen__crossbeam-utils-0.8.10//:build_script_build",
+            "@rules_rust_wasm_bindgen__once_cell-1.13.0//:once_cell",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "crossbeam-utils_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "once_cell",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.8.10",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "crossbeam-utils_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.curl-0.4.43.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.curl-0.4.43.bazel
new file mode 100644
index 0000000..715ad41
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.curl-0.4.43.bazel
@@ -0,0 +1,230 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "curl",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "openssl-probe",
+        "openssl-sys",
+        "ssl",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.43",
+    deps = [
+    ] + select_with_or({
+        # cfg(all(unix, not(target_os = "macos")))
+        (
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__openssl-probe-0.1.5//:openssl_probe",
+            "@rules_rust_wasm_bindgen__openssl-sys-0.9.75//:openssl_sys",
+
+            # Common Deps
+            "@rules_rust_wasm_bindgen__curl-0.4.43//:build_script_build",
+            "@rules_rust_wasm_bindgen__curl-sys-0.4.55-curl-7.83.1//:curl_sys",
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+            "@rules_rust_wasm_bindgen__socket2-0.4.4//:socket2",
+        ],
+        # cfg(target_env = "msvc")
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__schannel-0.1.20//:schannel",
+            "@rules_rust_wasm_bindgen__winapi-0.3.9//:winapi",
+
+            # Common Deps
+            "@rules_rust_wasm_bindgen__curl-0.4.43//:build_script_build",
+            "@rules_rust_wasm_bindgen__curl-sys-0.4.55-curl-7.83.1//:curl_sys",
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+            "@rules_rust_wasm_bindgen__socket2-0.4.4//:socket2",
+        ],
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__curl-0.4.43//:build_script_build",
+            "@rules_rust_wasm_bindgen__curl-sys-0.4.55-curl-7.83.1//:curl_sys",
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+            "@rules_rust_wasm_bindgen__socket2-0.4.4//:socket2",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "curl_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "openssl-probe",
+        "openssl-sys",
+        "ssl",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.43",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__curl-sys-0.4.55-curl-7.83.1//:curl_sys",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "curl_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.curl-sys-0.4.55+curl-7.83.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.curl-sys-0.4.55+curl-7.83.1.bazel
new file mode 100644
index 0000000..d79622e
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.curl-sys-0.4.55+curl-7.83.1.bazel
@@ -0,0 +1,132 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "curl_sys",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "openssl-sys",
+        "ssl",
+    ],
+    crate_root = "lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.55+curl-7.83.1",
+    deps = [
+    ] + select_with_or({
+        # cfg(all(unix, not(target_os = "macos")))
+        (
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__openssl-sys-0.9.75//:openssl_sys",
+
+            # Common Deps
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+            "@rules_rust_wasm_bindgen__libz-sys-1.1.8//:libz_sys",
+        ],
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__winapi-0.3.9//:winapi",
+
+            # Common Deps
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+            "@rules_rust_wasm_bindgen__libz-sys-1.1.8//:libz_sys",
+        ],
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+            "@rules_rust_wasm_bindgen__libz-sys-1.1.8//:libz_sys",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.diff-0.1.13.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.diff-0.1.13.bazel
new file mode 100644
index 0000000..57a740c
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.diff-0.1.13.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "diff",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.13",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.difference-2.0.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.difference-2.0.0.bazel
new file mode 100644
index 0000000..31eb83f
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.difference-2.0.0.bazel
@@ -0,0 +1,159 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "difference",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.0.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+rust_binary(
+    name = "difference__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/main.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.0.0",
+    deps = [
+        ":difference",
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.difflib-0.4.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.difflib-0.4.0.bazel
new file mode 100644
index 0000000..df7d5fa
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.difflib-0.4.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "difflib",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.doc-comment-0.3.3.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.doc-comment-0.3.3.bazel
new file mode 100644
index 0000000..24c6a66
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.doc-comment-0.3.3.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "doc_comment",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__doc-comment-0.3.3//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "doc-comment_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.3.3",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "doc-comment_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.docopt-1.1.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.docopt-1.1.1.bazel
new file mode 100644
index 0000000..2443ad6
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.docopt-1.1.1.bazel
@@ -0,0 +1,165 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "docopt",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__lazy_static-1.4.0//:lazy_static",
+            "@rules_rust_wasm_bindgen__regex-1.6.0//:regex",
+            "@rules_rust_wasm_bindgen__serde-1.0.139//:serde",
+            "@rules_rust_wasm_bindgen__strsim-0.10.0//:strsim",
+        ],
+    }),
+)
+
+rust_binary(
+    name = "docopt-wordlist__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/wordlist.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.1",
+    deps = [
+        ":docopt",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__lazy_static-1.4.0//:lazy_static",
+            "@rules_rust_wasm_bindgen__regex-1.6.0//:regex",
+            "@rules_rust_wasm_bindgen__serde-1.0.139//:serde",
+            "@rules_rust_wasm_bindgen__strsim-0.10.0//:strsim",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.either-1.7.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.either-1.7.0.bazel
new file mode 100644
index 0000000..4511e35
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.either-1.7.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "either",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.7.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.env_logger-0.8.4.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.env_logger-0.8.4.bazel
new file mode 100644
index 0000000..083a1a3
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.env_logger-0.8.4.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "env_logger",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "atty",
+        "default",
+        "humantime",
+        "regex",
+        "termcolor",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.8.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__atty-0.2.14//:atty",
+            "@rules_rust_wasm_bindgen__humantime-2.1.0//:humantime",
+            "@rules_rust_wasm_bindgen__log-0.4.17//:log",
+            "@rules_rust_wasm_bindgen__regex-1.6.0//:regex",
+            "@rules_rust_wasm_bindgen__termcolor-1.1.3//:termcolor",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.fastrand-1.7.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.fastrand-1.7.0.bazel
new file mode 100644
index 0000000..1d164f4
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.fastrand-1.7.0.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "fastrand",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.7.0",
+    deps = [
+    ] + select_with_or({
+        # cfg(target_arch = "wasm32")
+        (
+            "@rules_rust//rust/platform:wasm32-unknown-unknown",
+            "@rules_rust//rust/platform:wasm32-wasi",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__instant-0.1.12//:instant",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.filetime-0.2.17.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.filetime-0.2.17.bazel
new file mode 100644
index 0000000..454efa1
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.filetime-0.2.17.bazel
@@ -0,0 +1,135 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "filetime",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.17",
+    deps = [
+    ] + select_with_or({
+        # cfg(target_os = "redox")
+        #
+        # No supported platform triples for cfg: 'cfg(target_os = "redox")'
+        # Skipped dependencies: [{"id":"redox_syscall 0.2.13","target":"syscall"}]
+        #
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+
+            # Common Deps
+            "@rules_rust_wasm_bindgen__cfg-if-1.0.0//:cfg_if",
+        ],
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__windows-sys-0.36.1//:windows_sys",
+
+            # Common Deps
+            "@rules_rust_wasm_bindgen__cfg-if-1.0.0//:cfg_if",
+        ],
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__cfg-if-1.0.0//:cfg_if",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.float-cmp-0.8.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.float-cmp-0.8.0.bazel
new file mode 100644
index 0000000..54281ab
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.float-cmp-0.8.0.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "float_cmp",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "num-traits",
+        "ratio",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.8.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__num-traits-0.2.15//:num_traits",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.form_urlencoded-1.0.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.form_urlencoded-1.0.1.bazel
new file mode 100644
index 0000000..a985668
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.form_urlencoded-1.0.1.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "form_urlencoded",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__matches-0.1.9//:matches",
+            "@rules_rust_wasm_bindgen__percent-encoding-2.1.0//:percent_encoding",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.getrandom-0.2.7.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.getrandom-0.2.7.bazel
new file mode 100644
index 0000000..457c79c
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.getrandom-0.2.7.bazel
@@ -0,0 +1,130 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "getrandom",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.7",
+    deps = [
+    ] + select_with_or({
+        # cfg(target_os = "wasi")
+        (
+            "@rules_rust//rust/platform:wasm32-wasi",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__wasi-0.11.0-wasi-snapshot-preview1//:wasi",
+
+            # Common Deps
+            "@rules_rust_wasm_bindgen__cfg-if-1.0.0//:cfg_if",
+        ],
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+
+            # Common Deps
+            "@rules_rust_wasm_bindgen__cfg-if-1.0.0//:cfg_if",
+        ],
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__cfg-if-1.0.0//:cfg_if",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.heck-0.3.3.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.heck-0.3.3.bazel
new file mode 100644
index 0000000..ca3578b
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.heck-0.3.3.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "heck",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__unicode-segmentation-1.9.0//:unicode_segmentation",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel
new file mode 100644
index 0000000..66f549d
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.hermit-abi-0.1.19.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "hermit_abi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.19",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.httparse-1.7.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.httparse-1.7.1.bazel
new file mode 100644
index 0000000..b8e40d6
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.httparse-1.7.1.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "httparse",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.7.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__httparse-1.7.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "httparse_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.7.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "httparse_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.humantime-2.1.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.humantime-2.1.0.bazel
new file mode 100644
index 0000000..a08cbae
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.humantime-2.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "humantime",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.id-arena-2.2.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.id-arena-2.2.1.bazel
new file mode 100644
index 0000000..1a51805
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.id-arena-2.2.1.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "id_arena",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "rayon",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.2.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__rayon-1.5.3//:rayon",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.idna-0.2.3.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.idna-0.2.3.bazel
new file mode 100644
index 0000000..6652ec6
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.idna-0.2.3.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "idna",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__matches-0.1.9//:matches",
+            "@rules_rust_wasm_bindgen__unicode-bidi-0.3.8//:unicode_bidi",
+            "@rules_rust_wasm_bindgen__unicode-normalization-0.1.21//:unicode_normalization",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.instant-0.1.12.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.instant-0.1.12.bazel
new file mode 100644
index 0000000..047c8ca
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.instant-0.1.12.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # BSD-3-Clause
+# ])
+
+rust_library(
+    name = "instant",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.12",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__cfg-if-1.0.0//:cfg_if",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.itertools-0.10.3.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.itertools-0.10.3.bazel
new file mode 100644
index 0000000..2574f46
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.itertools-0.10.3.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "itertools",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "use_alloc",
+        "use_std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.10.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__either-1.7.0//:either",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.itoa-1.0.2.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.itoa-1.0.2.bazel
new file mode 100644
index 0000000..d5ef0de
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.itoa-1.0.2.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "itoa",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel
new file mode 100644
index 0000000..aca563c
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.lazy_static-1.4.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "lazy_static",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.leb128-0.2.5.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.leb128-0.2.5.bazel
new file mode 100644
index 0000000..aaf777e
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.leb128-0.2.5.bazel
@@ -0,0 +1,157 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0/MIT
+# ])
+
+rust_library(
+    name = "leb128",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.5",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+rust_binary(
+    name = "leb128-repl__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/bin/leb128-repl.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.5",
+    deps = [
+        ":leb128",
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.libc-0.2.126.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.libc-0.2.126.bazel
new file mode 100644
index 0000000..4c6b36b
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.libc-0.2.126.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.126",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "libc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.126",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "libc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.libz-sys-1.1.8.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.libz-sys-1.1.8.bazel
new file mode 100644
index 0000000..ce3481b
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.libz-sys-1.1.8.bazel
@@ -0,0 +1,192 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "libz_sys",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "libc",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+            "@rules_rust_wasm_bindgen__libz-sys-1.1.8//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "libz-sys_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "libc",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    links = "z",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.1.8",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        # cfg(target_env = "msvc")
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__vcpkg-0.2.15//:vcpkg",
+
+            # Common Deps
+            "@rules_rust_wasm_bindgen__cc-1.0.73//:cc",
+            "@rules_rust_wasm_bindgen__pkg-config-0.3.25//:pkg_config",
+        ],
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__cc-1.0.73//:cc",
+            "@rules_rust_wasm_bindgen__pkg-config-0.3.25//:pkg_config",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "libz-sys_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.log-0.4.17.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.log-0.4.17.bazel
new file mode 100644
index 0000000..2e32e7b
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.log-0.4.17.bazel
@@ -0,0 +1,185 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "log",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+
+        # User provided rustc_flags
+        "--cfg=atomic_cas",
+        "--cfg=use_std",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.17",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__cfg-if-1.0.0//:cfg_if",
+            "@rules_rust_wasm_bindgen__log-0.4.17//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "log_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+
+        # User provided rustc_flags
+        "--cfg=atomic_cas",
+        "--cfg=use_std",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.17",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "log_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.matches-0.1.9.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.matches-0.1.9.bazel
new file mode 100644
index 0000000..79404c5
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.matches-0.1.9.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "matches",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.9",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.memchr-2.5.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.memchr-2.5.0.bazel
new file mode 100644
index 0000000..b977c14
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.memchr-2.5.0.bazel
@@ -0,0 +1,180 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "memchr",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+        "use_std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.5.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__memchr-2.5.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "memchr_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+        "use_std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "2.5.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "memchr_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.memoffset-0.6.5.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.memoffset-0.6.5.bazel
new file mode 100644
index 0000000..46174a4
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.memoffset-0.6.5.bazel
@@ -0,0 +1,177 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "memoffset",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.5",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__memoffset-0.6.5//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "memoffset_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.6.5",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "memoffset_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.mime-0.3.16.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.mime-0.3.16.bazel
new file mode 100644
index 0000000..1df6f84
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.mime-0.3.16.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "mime",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.16",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.mime_guess-2.0.4.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.mime_guess-2.0.4.bazel
new file mode 100644
index 0000000..4b8d3af
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.mime_guess-2.0.4.bazel
@@ -0,0 +1,181 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "mime_guess",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "rev-mappings",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.0.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__mime-0.3.16//:mime",
+            "@rules_rust_wasm_bindgen__mime_guess-2.0.4//:build_script_build",
+            "@rules_rust_wasm_bindgen__unicase-2.6.0//:unicase",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "mime_guess_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "rev-mappings",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "2.0.4",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__unicase-2.6.0//:unicase",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "mime_guess_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.multipart-0.18.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.multipart-0.18.0.bazel
new file mode 100644
index 0000000..8b2d028
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.multipart-0.18.0.bazel
@@ -0,0 +1,189 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "multipart",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "buf_redux",
+        "httparse",
+        "quick-error",
+        "safemem",
+        "server",
+        "twoway",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.18.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__buf_redux-0.8.4//:buf_redux",
+            "@rules_rust_wasm_bindgen__httparse-1.7.1//:httparse",
+            "@rules_rust_wasm_bindgen__log-0.4.17//:log",
+            "@rules_rust_wasm_bindgen__mime-0.3.16//:mime",
+            "@rules_rust_wasm_bindgen__mime_guess-2.0.4//:mime_guess",
+            "@rules_rust_wasm_bindgen__quick-error-1.2.3//:quick_error",
+            "@rules_rust_wasm_bindgen__rand-0.8.5//:rand",
+            "@rules_rust_wasm_bindgen__safemem-0.3.3//:safemem",
+            "@rules_rust_wasm_bindgen__tempfile-3.3.0//:tempfile",
+            "@rules_rust_wasm_bindgen__twoway-0.1.8//:twoway",
+        ],
+    }),
+)
+
+rust_binary(
+    name = "form_test__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "buf_redux",
+        "httparse",
+        "quick-error",
+        "safemem",
+        "server",
+        "twoway",
+    ],
+    crate_root = "src/bin/form_test.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.18.0",
+    deps = [
+        ":multipart",
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__buf_redux-0.8.4//:buf_redux",
+            "@rules_rust_wasm_bindgen__httparse-1.7.1//:httparse",
+            "@rules_rust_wasm_bindgen__log-0.4.17//:log",
+            "@rules_rust_wasm_bindgen__mime-0.3.16//:mime",
+            "@rules_rust_wasm_bindgen__mime_guess-2.0.4//:mime_guess",
+            "@rules_rust_wasm_bindgen__quick-error-1.2.3//:quick_error",
+            "@rules_rust_wasm_bindgen__rand-0.8.5//:rand",
+            "@rules_rust_wasm_bindgen__safemem-0.3.3//:safemem",
+            "@rules_rust_wasm_bindgen__tempfile-3.3.0//:tempfile",
+            "@rules_rust_wasm_bindgen__twoway-0.1.8//:twoway",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.normalize-line-endings-0.3.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.normalize-line-endings-0.3.0.bazel
new file mode 100644
index 0000000..ef1b01d
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.normalize-line-endings-0.3.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0
+# ])
+
+rust_library(
+    name = "normalize_line_endings",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.num-integer-0.1.45.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.num-integer-0.1.45.bazel
new file mode 100644
index 0000000..13d7a6a
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.num-integer-0.1.45.bazel
@@ -0,0 +1,176 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "num_integer",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.45",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__num-integer-0.1.45//:build_script_build",
+            "@rules_rust_wasm_bindgen__num-traits-0.2.15//:num_traits",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "num-integer_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.1.45",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "num-integer_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.num-traits-0.2.15.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.num-traits-0.2.15.bazel
new file mode 100644
index 0000000..c242fad
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.num-traits-0.2.15.bazel
@@ -0,0 +1,175 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "num_traits",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.15",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__num-traits-0.2.15//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "num-traits_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.15",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "num-traits_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.num_cpus-1.13.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.num_cpus-1.13.1.bazel
new file mode 100644
index 0000000..8c4a833
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.num_cpus-1.13.1.bazel
@@ -0,0 +1,125 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "num_cpus",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.13.1",
+    deps = [
+    ] + select_with_or({
+        # cfg(all(any(target_arch = "x86_64", target_arch = "aarch64"), target_os = "hermit"))
+        #
+        # No supported platform triples for cfg: 'cfg(all(any(target_arch = "x86_64", target_arch = "aarch64"), target_os = "hermit"))'
+        # Skipped dependencies: [{"id":"hermit-abi 0.1.19","target":"hermit_abi"}]
+        #
+        # cfg(not(windows))
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:riscv32imc-unknown-none-elf",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:wasm32-unknown-unknown",
+            "@rules_rust//rust/platform:wasm32-wasi",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.num_threads-0.1.6.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.num_threads-0.1.6.bazel
new file mode 100644
index 0000000..1d9683b
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.num_threads-0.1.6.bazel
@@ -0,0 +1,106 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "num_threads",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.6",
+    deps = [
+    ] + select_with_or({
+        # cfg(any(target_os = "macos", target_os = "ios", target_os = "freebsd"))
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.once_cell-1.13.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.once_cell-1.13.0.bazel
new file mode 100644
index 0000000..af55129
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.once_cell-1.13.0.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "once_cell",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "default",
+        "race",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.13.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.openssl-probe-0.1.5.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.openssl-probe-0.1.5.bazel
new file mode 100644
index 0000000..ebd85ee
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.openssl-probe-0.1.5.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "openssl_probe",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.5",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.openssl-sys-0.9.75.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.openssl-sys-0.9.75.bazel
new file mode 100644
index 0000000..b858e15
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.openssl-sys-0.9.75.bazel
@@ -0,0 +1,106 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "openssl_sys",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+
+        # User provided rustc_flags
+        "--cfg=ossl101",
+        "--cfg=ossl102",
+        "--cfg=ossl102f",
+        "--cfg=ossl102h",
+        "--cfg=ossl110",
+        "--cfg=ossl110f",
+        "--cfg=ossl110g",
+        "--cfg=ossl111",
+        "--cfg=ossl111b",
+        "-l",
+        "dylib=ssl",
+        "-l",
+        "dylib=crypto",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.9.75",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.percent-encoding-2.1.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.percent-encoding-2.1.0.bazel
new file mode 100644
index 0000000..b3b33c4
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.percent-encoding-2.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "percent_encoding",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.pkg-config-0.3.25.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.pkg-config-0.3.25.bazel
new file mode 100644
index 0000000..8b574e9
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.pkg-config-0.3.25.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "pkg_config",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.25",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.ppv-lite86-0.2.16.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.ppv-lite86-0.2.16.bazel
new file mode 100644
index 0000000..7a694b0
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.ppv-lite86-0.2.16.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "ppv_lite86",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "simd",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.16",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.predicates-1.0.8.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.predicates-1.0.8.bazel
new file mode 100644
index 0000000..76a5de9
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.predicates-1.0.8.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "predicates",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "difference",
+        "float-cmp",
+        "normalize-line-endings",
+        "regex",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__difference-2.0.0//:difference",
+            "@rules_rust_wasm_bindgen__float-cmp-0.8.0//:float_cmp",
+            "@rules_rust_wasm_bindgen__normalize-line-endings-0.3.0//:normalize_line_endings",
+            "@rules_rust_wasm_bindgen__predicates-core-1.0.3//:predicates_core",
+            "@rules_rust_wasm_bindgen__regex-1.6.0//:regex",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.predicates-2.1.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.predicates-2.1.1.bazel
new file mode 100644
index 0000000..dfba52e
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.predicates-2.1.1.bazel
@@ -0,0 +1,95 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "predicates",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "diff",
+        "difflib",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.1.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__difflib-0.4.0//:difflib",
+            "@rules_rust_wasm_bindgen__itertools-0.10.3//:itertools",
+            "@rules_rust_wasm_bindgen__predicates-core-1.0.3//:predicates_core",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.predicates-core-1.0.3.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.predicates-core-1.0.3.bazel
new file mode 100644
index 0000000..5f50cc6
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.predicates-core-1.0.3.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "predicates_core",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.predicates-tree-1.0.5.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.predicates-tree-1.0.5.bazel
new file mode 100644
index 0000000..ffee98f
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.predicates-tree-1.0.5.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "predicates_tree",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.5",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__predicates-core-1.0.3//:predicates_core",
+            "@rules_rust_wasm_bindgen__termtree-0.2.4//:termtree",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.proc-macro2-1.0.40.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.proc-macro2-1.0.40.bazel
new file mode 100644
index 0000000..0542dc4
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.proc-macro2-1.0.40.bazel
@@ -0,0 +1,185 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "proc_macro2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+
+        # User provided rustc_flags
+        "--cfg=use_proc_macro",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.40",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__proc-macro2-1.0.40//:build_script_build",
+            "@rules_rust_wasm_bindgen__unicode-ident-1.0.1//:unicode_ident",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "proc-macro2_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+
+        # User provided rustc_flags
+        "--cfg=use_proc_macro",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.40",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "proc-macro2_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.quick-error-1.2.3.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.quick-error-1.2.3.bazel
new file mode 100644
index 0000000..21c5574
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.quick-error-1.2.3.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "quick_error",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.2.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.quote-1.0.20.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.quote-1.0.20.bazel
new file mode 100644
index 0000000..a8d8da9
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.quote-1.0.20.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "quote",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.20",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__proc-macro2-1.0.40//:proc_macro2",
+            "@rules_rust_wasm_bindgen__quote-1.0.20//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "quote_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "proc-macro",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.20",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "quote_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rand-0.8.5.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rand-0.8.5.bazel
new file mode 100644
index 0000000..af2097b
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rand-0.8.5.bazel
@@ -0,0 +1,128 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "rand",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "default",
+        "getrandom",
+        "libc",
+        "rand_chacha",
+        "std",
+        "std_rng",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.8.5",
+    deps = [
+    ] + select_with_or({
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+
+            # Common Deps
+            "@rules_rust_wasm_bindgen__rand_chacha-0.3.1//:rand_chacha",
+            "@rules_rust_wasm_bindgen__rand_core-0.6.3//:rand_core",
+        ],
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__rand_chacha-0.3.1//:rand_chacha",
+            "@rules_rust_wasm_bindgen__rand_core-0.6.3//:rand_core",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rand_chacha-0.3.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rand_chacha-0.3.1.bazel
new file mode 100644
index 0000000..f07dbdc
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rand_chacha-0.3.1.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "rand_chacha",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__ppv-lite86-0.2.16//:ppv_lite86",
+            "@rules_rust_wasm_bindgen__rand_core-0.6.3//:rand_core",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rand_core-0.6.3.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rand_core-0.6.3.bazel
new file mode 100644
index 0000000..596953a
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rand_core-0.6.3.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "rand_core",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "getrandom",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__getrandom-0.2.7//:getrandom",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rayon-1.5.3.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rayon-1.5.3.bazel
new file mode 100644
index 0000000..3ef8ea8
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rayon-1.5.3.bazel
@@ -0,0 +1,178 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "rayon",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.5.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__crossbeam-deque-0.8.1//:crossbeam_deque",
+            "@rules_rust_wasm_bindgen__either-1.7.0//:either",
+            "@rules_rust_wasm_bindgen__rayon-1.5.3//:build_script_build",
+            "@rules_rust_wasm_bindgen__rayon-core-1.9.3//:rayon_core",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "rayon_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.5.3",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__autocfg-1.1.0//:autocfg",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "rayon_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rayon-core-1.9.3.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rayon-core-1.9.3.bazel
new file mode 100644
index 0000000..6155a45
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rayon-core-1.9.3.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "rayon_core",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.9.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__crossbeam-channel-0.5.5//:crossbeam_channel",
+            "@rules_rust_wasm_bindgen__crossbeam-deque-0.8.1//:crossbeam_deque",
+            "@rules_rust_wasm_bindgen__crossbeam-utils-0.8.10//:crossbeam_utils",
+            "@rules_rust_wasm_bindgen__num_cpus-1.13.1//:num_cpus",
+            "@rules_rust_wasm_bindgen__rayon-core-1.9.3//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "rayon-core_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    links = "rayon-core",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.9.3",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "rayon-core_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.redox_syscall-0.2.13.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.redox_syscall-0.2.13.bazel
new file mode 100644
index 0000000..09652eb
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.redox_syscall-0.2.13.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "syscall",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.13",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__bitflags-1.3.2//:bitflags",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.regex-1.6.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.regex-1.6.0.bazel
new file mode 100644
index 0000000..3732a0d
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.regex-1.6.0.bazel
@@ -0,0 +1,110 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "regex",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "aho-corasick",
+        "default",
+        "memchr",
+        "perf",
+        "perf-cache",
+        "perf-dfa",
+        "perf-inline",
+        "perf-literal",
+        "std",
+        "unicode",
+        "unicode-age",
+        "unicode-bool",
+        "unicode-case",
+        "unicode-gencat",
+        "unicode-perl",
+        "unicode-script",
+        "unicode-segment",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.6.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__aho-corasick-0.7.18//:aho_corasick",
+            "@rules_rust_wasm_bindgen__memchr-2.5.0//:memchr",
+            "@rules_rust_wasm_bindgen__regex-syntax-0.6.27//:regex_syntax",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.regex-automata-0.1.10.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.regex-automata-0.1.10.bazel
new file mode 100644
index 0000000..bbc535e
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.regex-automata-0.1.10.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "regex_automata",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.10",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel
new file mode 100644
index 0000000..c82f00d
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.regex-syntax-0.6.27.bazel
@@ -0,0 +1,99 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "regex_syntax",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "unicode",
+        "unicode-age",
+        "unicode-bool",
+        "unicode-case",
+        "unicode-gencat",
+        "unicode-perl",
+        "unicode-script",
+        "unicode-segment",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.27",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.remove_dir_all-0.5.3.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.remove_dir_all-0.5.3.bazel
new file mode 100644
index 0000000..5623f29
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.remove_dir_all-0.5.3.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "remove_dir_all",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.5.3",
+    deps = [
+    ] + select_with_or({
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__winapi-0.3.9//:winapi",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rouille-3.5.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rouille-3.5.0.bazel
new file mode 100644
index 0000000..c510e87
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rouille-3.5.0.bazel
@@ -0,0 +1,105 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "rouille",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__serde_derive-1.0.139//:serde_derive",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "3.5.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__base64-0.13.0//:base64",
+            "@rules_rust_wasm_bindgen__chrono-0.4.19//:chrono",
+            "@rules_rust_wasm_bindgen__filetime-0.2.17//:filetime",
+            "@rules_rust_wasm_bindgen__multipart-0.18.0//:multipart",
+            "@rules_rust_wasm_bindgen__num_cpus-1.13.1//:num_cpus",
+            "@rules_rust_wasm_bindgen__percent-encoding-2.1.0//:percent_encoding",
+            "@rules_rust_wasm_bindgen__rand-0.8.5//:rand",
+            "@rules_rust_wasm_bindgen__serde-1.0.139//:serde",
+            "@rules_rust_wasm_bindgen__serde_json-1.0.82//:serde_json",
+            "@rules_rust_wasm_bindgen__sha1-0.6.1//:sha1",
+            "@rules_rust_wasm_bindgen__threadpool-1.8.1//:threadpool",
+            "@rules_rust_wasm_bindgen__time-0.3.11//:time",
+            "@rules_rust_wasm_bindgen__tiny_http-0.8.2//:tiny_http",
+            "@rules_rust_wasm_bindgen__url-2.2.2//:url",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rustc-demangle-0.1.21.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rustc-demangle-0.1.21.bazel
new file mode 100644
index 0000000..f8f8a2b
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.rustc-demangle-0.1.21.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "rustc_demangle",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.21",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.ryu-1.0.10.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.ryu-1.0.10.bazel
new file mode 100644
index 0000000..7572741
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.ryu-1.0.10.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 OR BSL-1.0
+# ])
+
+rust_library(
+    name = "ryu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.10",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.safemem-0.3.3.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.safemem-0.3.3.bazel
new file mode 100644
index 0000000..e9cb67a
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.safemem-0.3.3.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "safemem",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.3",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.schannel-0.1.20.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.schannel-0.1.20.bazel
new file mode 100644
index 0000000..618688f
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.schannel-0.1.20.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "schannel",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.20",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__lazy_static-1.4.0//:lazy_static",
+            "@rules_rust_wasm_bindgen__windows-sys-0.36.1//:windows_sys",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.scopeguard-1.1.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.scopeguard-1.1.0.bazel
new file mode 100644
index 0000000..04c6ac9
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.scopeguard-1.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "scopeguard",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.serde-1.0.139.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.serde-1.0.139.bazel
new file mode 100644
index 0000000..dbc8f93
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.serde-1.0.139.bazel
@@ -0,0 +1,183 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "serde",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "derive",
+        "serde_derive",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__serde_derive-1.0.139//:serde_derive",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.139",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__serde-1.0.139//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "serde_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "derive",
+        "serde_derive",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.139",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "serde_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.serde_derive-1.0.139.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.serde_derive-1.0.139.bazel
new file mode 100644
index 0000000..2f40056
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.serde_derive-1.0.139.bazel
@@ -0,0 +1,179 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_proc_macro(
+    name = "serde_derive",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.139",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__proc-macro2-1.0.40//:proc_macro2",
+            "@rules_rust_wasm_bindgen__quote-1.0.20//:quote",
+            "@rules_rust_wasm_bindgen__serde_derive-1.0.139//:build_script_build",
+            "@rules_rust_wasm_bindgen__syn-1.0.98//:syn",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "serde_derive_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.139",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "serde_derive_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.serde_json-1.0.82.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.serde_json-1.0.82.bazel
new file mode 100644
index 0000000..54bf4af
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.serde_json-1.0.82.bazel
@@ -0,0 +1,181 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "serde_json",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.82",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__itoa-1.0.2//:itoa",
+            "@rules_rust_wasm_bindgen__ryu-1.0.10//:ryu",
+            "@rules_rust_wasm_bindgen__serde-1.0.139//:serde",
+            "@rules_rust_wasm_bindgen__serde_json-1.0.82//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "serde_json_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.82",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "serde_json_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.sha1-0.6.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.sha1-0.6.1.bazel
new file mode 100644
index 0000000..d6ec464
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.sha1-0.6.1.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # BSD-3-Clause
+# ])
+
+rust_library(
+    name = "sha1",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__sha1_smol-1.0.0//:sha1_smol",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.sha1_smol-1.0.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.sha1_smol-1.0.0.bazel
new file mode 100644
index 0000000..87c2690
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.sha1_smol-1.0.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # BSD-3-Clause
+# ])
+
+rust_library(
+    name = "sha1_smol",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.socket2-0.4.4.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.socket2-0.4.4.bazel
new file mode 100644
index 0000000..d9f1de7
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.socket2-0.4.4.bazel
@@ -0,0 +1,127 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "socket2",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.4",
+    deps = [
+    ] + select_with_or({
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__winapi-0.3.9//:winapi",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.strsim-0.10.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.strsim-0.10.0.bazel
new file mode 100644
index 0000000..3460f36
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.strsim-0.10.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "strsim",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.10.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.syn-1.0.98.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.syn-1.0.98.bazel
new file mode 100644
index 0000000..26500eb
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.syn-1.0.98.bazel
@@ -0,0 +1,197 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "syn",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "extra-traits",
+        "full",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+        "visit",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.98",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__proc-macro2-1.0.40//:proc_macro2",
+            "@rules_rust_wasm_bindgen__quote-1.0.20//:quote",
+            "@rules_rust_wasm_bindgen__syn-1.0.98//:build_script_build",
+            "@rules_rust_wasm_bindgen__unicode-ident-1.0.1//:unicode_ident",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "syn_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "clone-impls",
+        "default",
+        "derive",
+        "extra-traits",
+        "full",
+        "parsing",
+        "printing",
+        "proc-macro",
+        "quote",
+        "visit",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "1.0.98",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "syn_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.tempfile-3.3.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.tempfile-3.3.0.bazel
new file mode 100644
index 0000000..62814bf
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.tempfile-3.3.0.bazel
@@ -0,0 +1,142 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "tempfile",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "3.3.0",
+    deps = [
+    ] + select_with_or({
+        # cfg(any(unix, target_os = "wasi"))
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:wasm32-wasi",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+
+            # Common Deps
+            "@rules_rust_wasm_bindgen__cfg-if-1.0.0//:cfg_if",
+            "@rules_rust_wasm_bindgen__fastrand-1.7.0//:fastrand",
+            "@rules_rust_wasm_bindgen__remove_dir_all-0.5.3//:remove_dir_all",
+        ],
+        # cfg(target_os = "redox")
+        #
+        # No supported platform triples for cfg: 'cfg(target_os = "redox")'
+        # Skipped dependencies: [{"id":"redox_syscall 0.2.13","target":"syscall"}]
+        #
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__winapi-0.3.9//:winapi",
+
+            # Common Deps
+            "@rules_rust_wasm_bindgen__cfg-if-1.0.0//:cfg_if",
+            "@rules_rust_wasm_bindgen__fastrand-1.7.0//:fastrand",
+            "@rules_rust_wasm_bindgen__remove_dir_all-0.5.3//:remove_dir_all",
+        ],
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__cfg-if-1.0.0//:cfg_if",
+            "@rules_rust_wasm_bindgen__fastrand-1.7.0//:fastrand",
+            "@rules_rust_wasm_bindgen__remove_dir_all-0.5.3//:remove_dir_all",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.termcolor-1.1.3.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.termcolor-1.1.3.bazel
new file mode 100644
index 0000000..cc51832
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.termcolor-1.1.3.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense OR MIT
+# ])
+
+rust_library(
+    name = "termcolor",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.1.3",
+    deps = [
+    ] + select_with_or({
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__winapi-util-0.1.5//:winapi_util",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.termtree-0.2.4.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.termtree-0.2.4.bazel
new file mode 100644
index 0000000..07707be
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.termtree-0.2.4.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT
+# ])
+
+rust_library(
+    name = "termtree",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.threadpool-1.8.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.threadpool-1.8.1.bazel
new file mode 100644
index 0000000..93447aa
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.threadpool-1.8.1.bazel
@@ -0,0 +1,91 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "threadpool",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.8.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__num_cpus-1.13.1//:num_cpus",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.time-0.3.11.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.time-0.3.11.bazel
new file mode 100644
index 0000000..e2048ce
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.time-0.3.11.bazel
@@ -0,0 +1,122 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "time",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "default",
+        "local-offset",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2021",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.11",
+    deps = [
+    ] + select_with_or({
+        # cfg(target_family = "unix")
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+            "@rules_rust_wasm_bindgen__num_threads-0.1.6//:num_threads",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.tiny_http-0.8.2.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.tiny_http-0.8.2.bazel
new file mode 100644
index 0000000..e2078f9
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.tiny_http-0.8.2.bazel
@@ -0,0 +1,96 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "tiny_http",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.8.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__ascii-1.0.0//:ascii",
+            "@rules_rust_wasm_bindgen__chrono-0.4.19//:chrono",
+            "@rules_rust_wasm_bindgen__chunked_transfer-1.4.0//:chunked_transfer",
+            "@rules_rust_wasm_bindgen__log-0.4.17//:log",
+            "@rules_rust_wasm_bindgen__url-2.2.2//:url",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.tinyvec-1.6.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.tinyvec-1.6.0.bazel
new file mode 100644
index 0000000..a845e9a
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.tinyvec-1.6.0.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Zlib OR Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "tinyvec",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "alloc",
+        "default",
+        "tinyvec_macros",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.6.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__tinyvec_macros-0.1.0//:tinyvec_macros",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.tinyvec_macros-0.1.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.tinyvec_macros-0.1.0.bazel
new file mode 100644
index 0000000..4ec923b
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.tinyvec_macros-0.1.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0 OR Zlib
+# ])
+
+rust_library(
+    name = "tinyvec_macros",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.twoway-0.1.8.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.twoway-0.1.8.bazel
new file mode 100644
index 0000000..e6ff61f
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.twoway-0.1.8.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "twoway",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "use_std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__memchr-2.5.0//:memchr",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.unicase-2.6.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.unicase-2.6.0.bazel
new file mode 100644
index 0000000..9249702
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.unicase-2.6.0.bazel
@@ -0,0 +1,183 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "unicase",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+
+        # User provided rustc_flags
+        "--cfg=__unicase__iter_cmp",
+        "--cfg=__unicase__defauler_hasher",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.6.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__unicase-2.6.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "unicase_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+
+        # User provided rustc_flags
+        "--cfg=__unicase__iter_cmp",
+        "--cfg=__unicase__defauler_hasher",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "2.6.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__version_check-0.9.4//:version_check",
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "unicase_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.unicode-bidi-0.3.8.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.unicode-bidi-0.3.8.bazel
new file mode 100644
index 0000000..11bfb2c
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.unicode-bidi-0.3.8.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "unicode_bidi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "hardcoded-data",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.8",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.unicode-ident-1.0.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.unicode-ident-1.0.1.bazel
new file mode 100644
index 0000000..b438629
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.unicode-ident-1.0.1.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "unicode_ident",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.0.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.unicode-normalization-0.1.21.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.unicode-normalization-0.1.21.bazel
new file mode 100644
index 0000000..28fe45b
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.unicode-normalization-0.1.21.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "unicode_normalization",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.21",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__tinyvec-1.6.0//:tinyvec",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.unicode-segmentation-1.9.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.unicode-segmentation-1.9.0.bazel
new file mode 100644
index 0000000..ff09181
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.unicode-segmentation-1.9.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "unicode_segmentation",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "1.9.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.url-2.2.2.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.url-2.2.2.bazel
new file mode 100644
index 0000000..cb219cf
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.url-2.2.2.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "url",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "2.2.2",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__form_urlencoded-1.0.1//:form_urlencoded",
+            "@rules_rust_wasm_bindgen__idna-0.2.3//:idna",
+            "@rules_rust_wasm_bindgen__matches-0.1.9//:matches",
+            "@rules_rust_wasm_bindgen__percent-encoding-2.1.0//:percent_encoding",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.vcpkg-0.2.15.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.vcpkg-0.2.15.bazel
new file mode 100644
index 0000000..f70f413
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.vcpkg-0.2.15.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "vcpkg",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.15",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.version_check-0.9.4.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.version_check-0.9.4.bazel
new file mode 100644
index 0000000..367bf99
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.version_check-0.9.4.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "version_check",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.9.4",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wait-timeout-0.2.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wait-timeout-0.2.0.bazel
new file mode 100644
index 0000000..5e7824a
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wait-timeout-0.2.0.bazel
@@ -0,0 +1,397 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "wait_timeout",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.0",
+    deps = [
+    ] + select_with_or({
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
+
+rust_binary(
+    name = "exit__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/bin/exit.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.0",
+    deps = [
+        ":wait_timeout",
+    ] + select_with_or({
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
+
+rust_binary(
+    name = "sleep__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/bin/sleep.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.0",
+    deps = [
+        ":wait_timeout",
+    ] + select_with_or({
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
+
+rust_binary(
+    name = "reader__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/bin/reader.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.0",
+    deps = [
+        ":wait_timeout",
+    ] + select_with_or({
+        # cfg(unix)
+        (
+            "@rules_rust//rust/platform:aarch64-apple-darwin",
+            "@rules_rust//rust/platform:aarch64-apple-ios",
+            "@rules_rust//rust/platform:aarch64-apple-ios-sim",
+            "@rules_rust//rust/platform:aarch64-linux-android",
+            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
+            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:armv7-linux-androideabi",
+            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
+            "@rules_rust//rust/platform:i686-apple-darwin",
+            "@rules_rust//rust/platform:i686-linux-android",
+            "@rules_rust//rust/platform:i686-unknown-freebsd",
+            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
+            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
+            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
+            "@rules_rust//rust/platform:x86_64-apple-darwin",
+            "@rules_rust//rust/platform:x86_64-apple-ios",
+            "@rules_rust//rust/platform:x86_64-linux-android",
+            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
+            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__libc-0.2.126//:libc",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.walrus-0.19.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.walrus-0.19.0.bazel
new file mode 100644
index 0000000..2f97c8f
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.walrus-0.19.0.bazel
@@ -0,0 +1,99 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "walrus",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "parallel",
+        "rayon",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__walrus-macro-0.19.0//:walrus_macro",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.19.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__anyhow-1.0.58//:anyhow",
+            "@rules_rust_wasm_bindgen__id-arena-2.2.1//:id_arena",
+            "@rules_rust_wasm_bindgen__leb128-0.2.5//:leb128",
+            "@rules_rust_wasm_bindgen__log-0.4.17//:log",
+            "@rules_rust_wasm_bindgen__rayon-1.5.3//:rayon",
+            "@rules_rust_wasm_bindgen__wasmparser-0.77.0//:wasmparser",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.walrus-macro-0.19.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.walrus-macro-0.19.0.bazel
new file mode 100644
index 0000000..c18dbe0
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.walrus-macro-0.19.0.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_proc_macro(
+    name = "walrus_macro",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.19.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__heck-0.3.3//:heck",
+            "@rules_rust_wasm_bindgen__proc-macro2-1.0.40//:proc_macro2",
+            "@rules_rust_wasm_bindgen__quote-1.0.20//:quote",
+            "@rules_rust_wasm_bindgen__syn-1.0.98//:syn",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel
new file mode 100644
index 0000000..b7ee1bf
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT
+# ])
+
+rust_library(
+    name = "wasi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.11.0+wasi-snapshot-preview1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-0.2.81.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-0.2.81.bazel
new file mode 100644
index 0000000..8e4a7d7
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-0.2.81.bazel
@@ -0,0 +1,182 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "wasm_bindgen",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "spans",
+        "std",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__wasm-bindgen-macro-0.2.81//:wasm_bindgen_macro",
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.81",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__cfg-if-1.0.0//:cfg_if",
+            "@rules_rust_wasm_bindgen__wasm-bindgen-0.2.81//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "wasm-bindgen_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "spans",
+        "std",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.81",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "wasm-bindgen_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-backend-0.2.81.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-backend-0.2.81.bazel
new file mode 100644
index 0000000..b5f9098
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-backend-0.2.81.bazel
@@ -0,0 +1,98 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "wasm_bindgen_backend",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "spans",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.81",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__bumpalo-3.10.0//:bumpalo",
+            "@rules_rust_wasm_bindgen__lazy_static-1.4.0//:lazy_static",
+            "@rules_rust_wasm_bindgen__log-0.4.17//:log",
+            "@rules_rust_wasm_bindgen__proc-macro2-1.0.40//:proc_macro2",
+            "@rules_rust_wasm_bindgen__quote-1.0.20//:quote",
+            "@rules_rust_wasm_bindgen__syn-1.0.98//:syn",
+            "@rules_rust_wasm_bindgen__wasm-bindgen-shared-0.2.81//:wasm_bindgen_shared",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-cli-support-0.2.81.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-cli-support-0.2.81.bazel
new file mode 100644
index 0000000..a058842
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-cli-support-0.2.81.bazel
@@ -0,0 +1,106 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "wasm_bindgen_cli_support",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.81",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__anyhow-1.0.58//:anyhow",
+            "@rules_rust_wasm_bindgen__base64-0.9.3//:base64",
+            "@rules_rust_wasm_bindgen__log-0.4.17//:log",
+            "@rules_rust_wasm_bindgen__rustc-demangle-0.1.21//:rustc_demangle",
+            "@rules_rust_wasm_bindgen__serde_json-1.0.82//:serde_json",
+            "@rules_rust_wasm_bindgen__tempfile-3.3.0//:tempfile",
+            "@rules_rust_wasm_bindgen__walrus-0.19.0//:walrus",
+            "@rules_rust_wasm_bindgen__wasm-bindgen-externref-xform-0.2.81//:wasm_bindgen_externref_xform",
+            "@rules_rust_wasm_bindgen__wasm-bindgen-multi-value-xform-0.2.81//:wasm_bindgen_multi_value_xform",
+            "@rules_rust_wasm_bindgen__wasm-bindgen-shared-0.2.81//:wasm_bindgen_shared",
+            "@rules_rust_wasm_bindgen__wasm-bindgen-threads-xform-0.2.81//:wasm_bindgen_threads_xform",
+            "@rules_rust_wasm_bindgen__wasm-bindgen-wasm-conventions-0.2.81//:wasm_bindgen_wasm_conventions",
+            "@rules_rust_wasm_bindgen__wasm-bindgen-wasm-interpreter-0.2.81//:wasm_bindgen_wasm_interpreter",
+            "@rules_rust_wasm_bindgen__wit-text-0.8.0//:wit_text",
+            "@rules_rust_wasm_bindgen__wit-validator-0.2.1//:wit_validator",
+            "@rules_rust_wasm_bindgen__wit-walrus-0.6.0//:wit_walrus",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-externref-xform-0.2.81.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-externref-xform-0.2.81.bazel
new file mode 100644
index 0000000..d8352e8
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-externref-xform-0.2.81.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "wasm_bindgen_externref_xform",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.81",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__anyhow-1.0.58//:anyhow",
+            "@rules_rust_wasm_bindgen__walrus-0.19.0//:walrus",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-macro-0.2.81.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-macro-0.2.81.bazel
new file mode 100644
index 0000000..13c0e9e
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-macro-0.2.81.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_proc_macro",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_proc_macro(
+    name = "wasm_bindgen_macro",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "spans",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.81",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__quote-1.0.20//:quote",
+            "@rules_rust_wasm_bindgen__wasm-bindgen-macro-support-0.2.81//:wasm_bindgen_macro_support",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-macro-support-0.2.81.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-macro-support-0.2.81.bazel
new file mode 100644
index 0000000..3e9ac86
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-macro-support-0.2.81.bazel
@@ -0,0 +1,96 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "wasm_bindgen_macro_support",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "spans",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.81",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__proc-macro2-1.0.40//:proc_macro2",
+            "@rules_rust_wasm_bindgen__quote-1.0.20//:quote",
+            "@rules_rust_wasm_bindgen__syn-1.0.98//:syn",
+            "@rules_rust_wasm_bindgen__wasm-bindgen-backend-0.2.81//:wasm_bindgen_backend",
+            "@rules_rust_wasm_bindgen__wasm-bindgen-shared-0.2.81//:wasm_bindgen_shared",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-multi-value-xform-0.2.81.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-multi-value-xform-0.2.81.bazel
new file mode 100644
index 0000000..def5ed7
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-multi-value-xform-0.2.81.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "wasm_bindgen_multi_value_xform",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.81",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__anyhow-1.0.58//:anyhow",
+            "@rules_rust_wasm_bindgen__walrus-0.19.0//:walrus",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-shared-0.2.81.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-shared-0.2.81.bazel
new file mode 100644
index 0000000..c3c6441
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-shared-0.2.81.bazel
@@ -0,0 +1,175 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "wasm_bindgen_shared",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.81",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__wasm-bindgen-shared-0.2.81//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "wasm-bindgen-shared_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    links = "wasm_bindgen",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.2.81",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "wasm-bindgen-shared_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-threads-xform-0.2.81.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-threads-xform-0.2.81.bazel
new file mode 100644
index 0000000..4bd1ec8
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-threads-xform-0.2.81.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "wasm_bindgen_threads_xform",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.81",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__anyhow-1.0.58//:anyhow",
+            "@rules_rust_wasm_bindgen__walrus-0.19.0//:walrus",
+            "@rules_rust_wasm_bindgen__wasm-bindgen-wasm-conventions-0.2.81//:wasm_bindgen_wasm_conventions",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-wasm-conventions-0.2.81.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-wasm-conventions-0.2.81.bazel
new file mode 100644
index 0000000..1a0acd6
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-wasm-conventions-0.2.81.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "wasm_bindgen_wasm_conventions",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.81",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__anyhow-1.0.58//:anyhow",
+            "@rules_rust_wasm_bindgen__walrus-0.19.0//:walrus",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-wasm-interpreter-0.2.81.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-wasm-interpreter-0.2.81.bazel
new file mode 100644
index 0000000..307ce8c
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasm-bindgen-wasm-interpreter-0.2.81.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "wasm_bindgen_wasm_interpreter",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.81",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__anyhow-1.0.58//:anyhow",
+            "@rules_rust_wasm_bindgen__log-0.4.17//:log",
+            "@rules_rust_wasm_bindgen__walrus-0.19.0//:walrus",
+            "@rules_rust_wasm_bindgen__wasm-bindgen-wasm-conventions-0.2.81//:wasm_bindgen_wasm_conventions",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasmparser-0.59.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasmparser-0.59.0.bazel
new file mode 100644
index 0000000..13de3df
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasmparser-0.59.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception
+# ])
+
+rust_library(
+    name = "wasmparser",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.59.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasmparser-0.77.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasmparser-0.77.0.bazel
new file mode 100644
index 0000000..e4e93c1
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasmparser-0.77.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception
+# ])
+
+rust_library(
+    name = "wasmparser",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.77.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasmparser-0.83.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasmparser-0.83.0.bazel
new file mode 100644
index 0000000..b75a0b5
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasmparser-0.83.0.bazel
@@ -0,0 +1,90 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception
+# ])
+
+rust_library(
+    name = "wasmparser",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.83.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasmprinter-0.2.33.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasmprinter-0.2.33.bazel
new file mode 100644
index 0000000..bad2b43
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wasmprinter-0.2.33.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception
+# ])
+
+rust_library(
+    name = "wasmprinter",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.33",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__anyhow-1.0.58//:anyhow",
+            "@rules_rust_wasm_bindgen__wasmparser-0.83.0//:wasmparser",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wast-21.0.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wast-21.0.0.bazel
new file mode 100644
index 0000000..00d9d03
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wast-21.0.0.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception
+# ])
+
+rust_library(
+    name = "wast",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "default",
+        "wasm-module",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "21.0.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__leb128-0.2.5//:leb128",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.winapi-0.3.9.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.winapi-0.3.9.bazel
new file mode 100644
index 0000000..a28fc09
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.winapi-0.3.9.bazel
@@ -0,0 +1,222 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "winapi",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "consoleapi",
+        "errhandlingapi",
+        "fileapi",
+        "handleapi",
+        "libloaderapi",
+        "minwinbase",
+        "minwindef",
+        "processenv",
+        "std",
+        "timezoneapi",
+        "winbase",
+        "wincon",
+        "wincrypt",
+        "winerror",
+        "winnt",
+        "winsock2",
+        "ws2def",
+        "ws2ipdef",
+        "ws2tcpip",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.3.9",
+    deps = [
+    ] + select_with_or({
+        # i686-pc-windows-gnu
+        #
+        # No supported platform triples for cfg: 'i686-pc-windows-gnu'
+        # Skipped dependencies: [{"id":"winapi-i686-pc-windows-gnu 0.4.0","target":"winapi_i686_pc_windows_gnu"}]
+        #
+        # x86_64-pc-windows-gnu
+        #
+        # No supported platform triples for cfg: 'x86_64-pc-windows-gnu'
+        # Skipped dependencies: [{"id":"winapi-x86_64-pc-windows-gnu 0.4.0","target":"winapi_x86_64_pc_windows_gnu"}]
+        #
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__winapi-0.3.9//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "winapi_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "consoleapi",
+        "errhandlingapi",
+        "fileapi",
+        "handleapi",
+        "libloaderapi",
+        "minwinbase",
+        "minwindef",
+        "processenv",
+        "std",
+        "timezoneapi",
+        "winbase",
+        "wincon",
+        "wincrypt",
+        "winerror",
+        "winnt",
+        "winsock2",
+        "ws2def",
+        "ws2ipdef",
+        "ws2tcpip",
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.3.9",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "winapi_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
new file mode 100644
index 0000000..0a2b7c9
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "winapi_i686_pc_windows_gnu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__winapi-i686-pc-windows-gnu-0.4.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "winapi-i686-pc-windows-gnu_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "winapi-i686-pc-windows-gnu_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel
new file mode 100644
index 0000000..6ff925d
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.winapi-util-0.1.5.bazel
@@ -0,0 +1,100 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Unlicense/MIT
+# ])
+
+rust_library(
+    name = "winapi_util",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.5",
+    deps = [
+    ] + select_with_or({
+        # cfg(windows)
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__winapi-0.3.9//:winapi",
+
+            # Common Deps
+        ],
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
new file mode 100644
index 0000000..bc7709c
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT/Apache-2.0
+# ])
+
+rust_library(
+    name = "winapi_x86_64_pc_windows_gnu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.4.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__winapi-x86_64-pc-windows-gnu-0.4.0//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "winapi-x86_64-pc-windows-gnu_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2015",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.4.0",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "winapi-x86_64-pc-windows-gnu_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows-sys-0.36.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows-sys-0.36.1.bazel
new file mode 100644
index 0000000..67ac3d8
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows-sys-0.36.1.bazel
@@ -0,0 +1,160 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "windows_sys",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+        "Win32",
+        "Win32_Foundation",
+        "Win32_Security",
+        "Win32_Security_Authentication",
+        "Win32_Security_Authentication_Identity",
+        "Win32_Security_Credentials",
+        "Win32_Security_Cryptography",
+        "Win32_Storage",
+        "Win32_Storage_FileSystem",
+        "Win32_System",
+        "Win32_System_Memory",
+        "default",
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.36.1",
+    deps = [
+    ] + select_with_or({
+        # aarch64-pc-windows-msvc
+        #
+        # No supported platform triples for cfg: 'aarch64-pc-windows-msvc'
+        # Skipped dependencies: [{"id":"windows_aarch64_msvc 0.36.1","target":"windows_aarch64_msvc"}]
+        #
+        # aarch64-uwp-windows-msvc
+        #
+        # No supported platform triples for cfg: 'aarch64-uwp-windows-msvc'
+        # Skipped dependencies: [{"id":"windows_aarch64_msvc 0.36.1","target":"windows_aarch64_msvc"}]
+        #
+        # i686-pc-windows-gnu
+        #
+        # No supported platform triples for cfg: 'i686-pc-windows-gnu'
+        # Skipped dependencies: [{"id":"windows_i686_gnu 0.36.1","target":"windows_i686_gnu"}]
+        #
+        # i686-pc-windows-msvc
+        (
+            "@rules_rust//rust/platform:i686-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__windows_i686_msvc-0.36.1//:windows_i686_msvc",
+
+            # Common Deps
+        ],
+        # i686-uwp-windows-gnu
+        #
+        # No supported platform triples for cfg: 'i686-uwp-windows-gnu'
+        # Skipped dependencies: [{"id":"windows_i686_gnu 0.36.1","target":"windows_i686_gnu"}]
+        #
+        # i686-uwp-windows-msvc
+        #
+        # No supported platform triples for cfg: 'i686-uwp-windows-msvc'
+        # Skipped dependencies: [{"id":"windows_i686_msvc 0.36.1","target":"windows_i686_msvc"}]
+        #
+        # x86_64-pc-windows-gnu
+        #
+        # No supported platform triples for cfg: 'x86_64-pc-windows-gnu'
+        # Skipped dependencies: [{"id":"windows_x86_64_gnu 0.36.1","target":"windows_x86_64_gnu"}]
+        #
+        # x86_64-pc-windows-msvc
+        (
+            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
+        ): [
+            # Target Deps
+            "@rules_rust_wasm_bindgen__windows_x86_64_msvc-0.36.1//:windows_x86_64_msvc",
+
+            # Common Deps
+        ],
+        # x86_64-uwp-windows-gnu
+        #
+        # No supported platform triples for cfg: 'x86_64-uwp-windows-gnu'
+        # Skipped dependencies: [{"id":"windows_x86_64_gnu 0.36.1","target":"windows_x86_64_gnu"}]
+        #
+        # x86_64-uwp-windows-msvc
+        #
+        # No supported platform triples for cfg: 'x86_64-uwp-windows-msvc'
+        # Skipped dependencies: [{"id":"windows_x86_64_msvc 0.36.1","target":"windows_x86_64_msvc"}]
+        #
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows_aarch64_msvc-0.36.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows_aarch64_msvc-0.36.1.bazel
new file mode 100644
index 0000000..4718527
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows_aarch64_msvc-0.36.1.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "windows_aarch64_msvc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.36.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__windows_aarch64_msvc-0.36.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "windows_aarch64_msvc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.36.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "windows_aarch64_msvc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows_i686_gnu-0.36.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows_i686_gnu-0.36.1.bazel
new file mode 100644
index 0000000..87e7e1f
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows_i686_gnu-0.36.1.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "windows_i686_gnu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.36.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__windows_i686_gnu-0.36.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "windows_i686_gnu_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.36.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "windows_i686_gnu_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows_i686_msvc-0.36.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows_i686_msvc-0.36.1.bazel
new file mode 100644
index 0000000..fdc1347
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows_i686_msvc-0.36.1.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "windows_i686_msvc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.36.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__windows_i686_msvc-0.36.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "windows_i686_msvc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.36.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "windows_i686_msvc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows_x86_64_gnu-0.36.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows_x86_64_gnu-0.36.1.bazel
new file mode 100644
index 0000000..6614c4f
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows_x86_64_gnu-0.36.1.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "windows_x86_64_gnu",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.36.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__windows_x86_64_gnu-0.36.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "windows_x86_64_gnu_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.36.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "windows_x86_64_gnu_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows_x86_64_msvc-0.36.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows_x86_64_msvc-0.36.1.bazel
new file mode 100644
index 0000000..d7fb64d
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.windows_x86_64_msvc-0.36.1.bazel
@@ -0,0 +1,174 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+load(
+    "@rules_rust//cargo:defs.bzl",
+    "cargo_build_script",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # MIT OR Apache-2.0
+# ])
+
+rust_library(
+    name = "windows_x86_64_msvc",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.36.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__windows_x86_64_msvc-0.36.1//:build_script_build",
+        ],
+    }),
+)
+
+cargo_build_script(
+    # See comment associated with alias. Do not change this name
+    name = "windows_x86_64_msvc_build_script",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    build_script_env = {
+    },
+    compile_data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_name = "build_script_build",
+    crate_root = "build.rs",
+    data = glob(["**"]) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    tools = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    version = "0.36.1",
+    visibility = ["//visibility:private"],
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+alias(
+    # Because `cargo_build_script` does some invisible target name mutating to
+    # determine the package and crate name for a build script, the Bazel
+    # target namename of any build script cannot be the Cargo canonical name
+    # of `build_script_build` without losing out on having certain Cargo
+    # environment variables set.
+    name = "build_script_build",
+    actual = "windows_x86_64_msvc_build_script",
+    tags = [
+        "manual",
+    ],
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-parser-0.2.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-parser-0.2.0.bazel
new file mode 100644
index 0000000..0d5950f
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-parser-0.2.0.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception
+# ])
+
+rust_library(
+    name = "wit_parser",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__anyhow-1.0.58//:anyhow",
+            "@rules_rust_wasm_bindgen__leb128-0.2.5//:leb128",
+            "@rules_rust_wasm_bindgen__wit-schema-version-0.1.0//:wit_schema_version",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-printer-0.2.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-printer-0.2.0.bazel
new file mode 100644
index 0000000..1fb790c
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-printer-0.2.0.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception
+# ])
+
+rust_library(
+    name = "wit_printer",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__anyhow-1.0.58//:anyhow",
+            "@rules_rust_wasm_bindgen__wasmprinter-0.2.33//:wasmprinter",
+            "@rules_rust_wasm_bindgen__wit-parser-0.2.0//:wit_parser",
+            "@rules_rust_wasm_bindgen__wit-schema-version-0.1.0//:wit_schema_version",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-schema-version-0.1.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-schema-version-0.1.0.bazel
new file mode 100644
index 0000000..1f0dce0
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-schema-version-0.1.0.bazel
@@ -0,0 +1,157 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_binary",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception
+# ])
+
+rust_library(
+    name = "wit_schema_version",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
+
+rust_binary(
+    name = "wit-schema-version__bin",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/main.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.1.0",
+    deps = [
+        ":wit_schema_version",
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-text-0.8.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-text-0.8.0.bazel
new file mode 100644
index 0000000..8d63c48
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-text-0.8.0.bazel
@@ -0,0 +1,93 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception
+# ])
+
+rust_library(
+    name = "wit_text",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.8.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__anyhow-1.0.58//:anyhow",
+            "@rules_rust_wasm_bindgen__wast-21.0.0//:wast",
+            "@rules_rust_wasm_bindgen__wit-writer-0.2.0//:wit_writer",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-validator-0.2.1.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-validator-0.2.1.bazel
new file mode 100644
index 0000000..f79fa4e
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-validator-0.2.1.bazel
@@ -0,0 +1,94 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception
+# ])
+
+rust_library(
+    name = "wit_validator",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.1",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__anyhow-1.0.58//:anyhow",
+            "@rules_rust_wasm_bindgen__wasmparser-0.59.0//:wasmparser",
+            "@rules_rust_wasm_bindgen__wit-parser-0.2.0//:wit_parser",
+            "@rules_rust_wasm_bindgen__wit-schema-version-0.1.0//:wit_schema_version",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-walrus-0.6.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-walrus-0.6.0.bazel
new file mode 100644
index 0000000..74e41f7
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-walrus-0.6.0.bazel
@@ -0,0 +1,96 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception
+# ])
+
+rust_library(
+    name = "wit_walrus",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.6.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__anyhow-1.0.58//:anyhow",
+            "@rules_rust_wasm_bindgen__id-arena-2.2.1//:id_arena",
+            "@rules_rust_wasm_bindgen__walrus-0.19.0//:walrus",
+            "@rules_rust_wasm_bindgen__wit-parser-0.2.0//:wit_parser",
+            "@rules_rust_wasm_bindgen__wit-schema-version-0.1.0//:wit_schema_version",
+            "@rules_rust_wasm_bindgen__wit-writer-0.2.0//:wit_writer",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-writer-0.2.0.bazel b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-writer-0.2.0.bazel
new file mode 100644
index 0000000..df6e536
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/BUILD.wit-writer-0.2.0.bazel
@@ -0,0 +1,92 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+
+load(
+    "@bazel_skylib//lib:selects.bzl",
+    "selects",
+)
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
+load(
+    "@rules_rust//rust:defs.bzl",
+    "rust_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+# licenses([
+#     "TODO",  # Apache-2.0 WITH LLVM-exception
+# ])
+
+rust_library(
+    name = "wit_writer",
+    srcs = glob(
+        include = [
+            "**/*.rs",
+        ],
+        exclude = [
+        ],
+    ),
+    aliases = selects.with_or({
+        "//conditions:default": {
+        },
+    }),
+    compile_data = glob(
+        include = ["**"],
+        exclude = [
+            "BUILD",
+            "BUILD.bazel",
+            "WORKSPACE",
+            "WORKSPACE.bazel",
+        ],
+    ) + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    crate_features = [
+    ],
+    crate_root = "src/lib.rs",
+    data = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    edition = "2018",
+    proc_macro_deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_env = {
+    },
+    rustc_env_files = select_with_or({
+        "//conditions:default": [
+        ],
+    }),
+    rustc_flags = [
+        # In most cases, warnings in 3rd party crates are not interesting as
+        # they're out of the control of consumers. The flag here silences
+        # warnings. For more details see:
+        # https://doc.rust-lang.org/rustc/lints/levels.html
+        "--cap-lints=allow",
+    ],
+    tags = [
+        "cargo-bazel",
+        "manual",
+        "noclippy",
+        "norustfmt",
+    ],
+    version = "0.2.0",
+    deps = [
+    ] + select_with_or({
+        "//conditions:default": [
+            "@rules_rust_wasm_bindgen__leb128-0.2.5//:leb128",
+            "@rules_rust_wasm_bindgen__wit-schema-version-0.1.0//:wit_schema_version",
+        ],
+    }),
+)
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/crates.bzl b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/crates.bzl
new file mode 100644
index 0000000..0ae804d
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/crates.bzl
@@ -0,0 +1,25 @@
+###############################################################################
+# @generated
+# This file is auto-generated by the cargo-bazel tool.
+#
+# DO NOT MODIFY: Local changes may be replaced in future executions.
+###############################################################################
+"""Rules for defining repositories for remote `crates_vendor` repositories"""
+
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//crate_universe/private:crates_vendor.bzl", "crates_vendor_remote_repository")
+
+# buildifier: disable=bzl-visibility
+load("@rules_rust//wasm_bindgen/3rdparty/crates:defs.bzl", _crate_repositories = "crate_repositories")
+
+def crate_repositories():
+    maybe(
+        crates_vendor_remote_repository,
+        name = "rules_rust_wasm_bindgen",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.bazel"),
+        defs_module = Label("@rules_rust//wasm_bindgen/3rdparty/crates:defs.bzl"),
+    )
+
+    _crate_repositories()
diff --git a/third_party/rules_rust/wasm_bindgen/3rdparty/crates/defs.bzl b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/defs.bzl
new file mode 100644
index 0000000..6cdc8e3
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/3rdparty/crates/defs.bzl
@@ -0,0 +1,1924 @@
+###############################################################################
+# @generated
+# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
+# regenerate this file, run the following:
+#
+#     bazel run //wasm_bindgen/3rdparty:crates_vendor
+###############################################################################
+"""
+# `crates_repository` API
+
+- [aliases](#aliases)
+- [crate_deps](#crate_deps)
+- [all_crate_deps](#all_crate_deps)
+- [crate_repositories](#crate_repositories)
+
+"""
+
+load("@bazel_skylib//lib:selects.bzl", "selects")
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+###############################################################################
+# MACROS API
+###############################################################################
+
+# An identifier that represent common dependencies (unconditional).
+_COMMON_CONDITION = ""
+
+def _flatten_dependency_maps(all_dependency_maps):
+    """Flatten a list of dependency maps into one dictionary.
+
+    Dependency maps have the following structure:
+
+    ```python
+    DEPENDENCIES_MAP = {
+        # The first key in the map is a Bazel package
+        # name of the workspace this file is defined in.
+        "workspace_member_package": {
+
+            # Not all dependnecies are supported for all platforms.
+            # the condition key is the condition required to be true
+            # on the host platform.
+            "condition": {
+
+                # An alias to a crate target.     # The label of the crate target the
+                # Aliases are only crate names.   # package name refers to.
+                "package_name":                   "@full//:label",
+            }
+        }
+    }
+    ```
+
+    Args:
+        all_dependency_maps (list): A list of dicts as described above
+
+    Returns:
+        dict: A dictionary as described above
+    """
+    dependencies = {}
+
+    for workspace_deps_map in all_dependency_maps:
+        for pkg_name, conditional_deps_map in workspace_deps_map.items():
+            if pkg_name not in dependencies:
+                non_frozen_map = dict()
+                for key, values in conditional_deps_map.items():
+                    non_frozen_map.update({key: dict(values.items())})
+                dependencies.setdefault(pkg_name, non_frozen_map)
+                continue
+
+            for condition, deps_map in conditional_deps_map.items():
+                # If the condition has not been recorded, do so and continue
+                if condition not in dependencies[pkg_name]:
+                    dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))
+                    continue
+
+                # Alert on any miss-matched dependencies
+                inconsistent_entries = []
+                for crate_name, crate_label in deps_map.items():
+                    existing = dependencies[pkg_name][condition].get(crate_name)
+                    if existing and existing != crate_label:
+                        inconsistent_entries.append((crate_name, existing, crate_label))
+                    dependencies[pkg_name][condition].update({crate_name: crate_label})
+
+    return dependencies
+
+def crate_deps(deps, package_name = None):
+    """Finds the fully qualified label of the requested crates for the package where this macro is called.
+
+    Args:
+        deps (list): The desired list of crate targets.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()`.
+
+    Returns:
+        list: A list of labels to generated rust targets (str)
+    """
+
+    if not deps:
+        return []
+
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Join both sets of dependencies
+    dependencies = _flatten_dependency_maps([
+        _NORMAL_DEPENDENCIES,
+        _NORMAL_DEV_DEPENDENCIES,
+        _PROC_MACRO_DEPENDENCIES,
+        _PROC_MACRO_DEV_DEPENDENCIES,
+        _BUILD_DEPENDENCIES,
+        _BUILD_PROC_MACRO_DEPENDENCIES,
+    ]).pop(package_name, {})
+
+    # Combine all conditional packages so we can easily index over a flat list
+    # TODO: Perhaps this should actually return select statements and maintain
+    # the conditionals of the dependencies
+    flat_deps = {}
+    for deps_set in dependencies.values():
+        for crate_name, crate_label in deps_set.items():
+            flat_deps.update({crate_name: crate_label})
+
+    missing_crates = []
+    crate_targets = []
+    for crate_target in deps:
+        if crate_target not in flat_deps:
+            missing_crates.append(crate_target)
+        else:
+            crate_targets.append(flat_deps[crate_target])
+
+    if missing_crates:
+        fail("Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`".format(
+            missing_crates,
+            package_name,
+            dependencies,
+        ))
+
+    return crate_targets
+
+def all_crate_deps(
+        normal = False,
+        normal_dev = False,
+        proc_macro = False,
+        proc_macro_dev = False,
+        build = False,
+        build_proc_macro = False,
+        package_name = None):
+    """Finds the fully qualified label of all requested direct crate dependencies \
+    for the package where this macro is called.
+
+    If no parameters are set, all normal dependencies are returned. Setting any one flag will
+    otherwise impact the contents of the returned list.
+
+    Args:
+        normal (bool, optional): If True, normal dependencies are included in the
+            output list.
+        normal_dev (bool, optional): If True, normla dev dependencies will be
+            included in the output list..
+        proc_macro (bool, optional): If True, proc_macro dependencies are included
+            in the output list.
+        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
+            included in the output list.
+        build (bool, optional): If True, build dependencies are included
+            in the output list.
+        build_proc_macro (bool, optional): If True, build proc_macro dependencies are
+            included in the output list.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()` when unset.
+
+    Returns:
+        list: A list of labels to generated rust targets (str)
+    """
+
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Determine the relevant maps to use
+    all_dependency_maps = []
+    if normal:
+        all_dependency_maps.append(_NORMAL_DEPENDENCIES)
+    if normal_dev:
+        all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)
+    if proc_macro:
+        all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)
+    if proc_macro_dev:
+        all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)
+    if build:
+        all_dependency_maps.append(_BUILD_DEPENDENCIES)
+    if build_proc_macro:
+        all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)
+
+    # Default to always using normal dependencies
+    if not all_dependency_maps:
+        all_dependency_maps.append(_NORMAL_DEPENDENCIES)
+
+    dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)
+
+    if not dependencies:
+        if dependencies == None:
+            fail("Tried to get all_crate_deps for package " + package_name + " but that package had no Cargo.toml file")
+        else:
+            return []
+
+    crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())
+    for condition, deps in dependencies.items():
+        crate_deps += selects.with_or({_CONDITIONS[condition]: deps.values()})
+
+    return crate_deps
+
+def aliases(
+        normal = False,
+        normal_dev = False,
+        proc_macro = False,
+        proc_macro_dev = False,
+        build = False,
+        build_proc_macro = False,
+        package_name = None):
+    """Produces a map of Crate alias names to their original label
+
+    If no dependency kinds are specified, `normal` and `proc_macro` are used by default.
+    Setting any one flag will otherwise determine the contents of the returned dict.
+
+    Args:
+        normal (bool, optional): If True, normal dependencies are included in the
+            output list.
+        normal_dev (bool, optional): If True, normla dev dependencies will be
+            included in the output list..
+        proc_macro (bool, optional): If True, proc_macro dependencies are included
+            in the output list.
+        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are
+            included in the output list.
+        build (bool, optional): If True, build dependencies are included
+            in the output list.
+        build_proc_macro (bool, optional): If True, build proc_macro dependencies are
+            included in the output list.
+        package_name (str, optional): The package name of the set of dependencies to look up.
+            Defaults to `native.package_name()` when unset.
+
+    Returns:
+        dict: The aliases of all associated packages
+    """
+    if package_name == None:
+        package_name = native.package_name()
+
+    # Determine the relevant maps to use
+    all_aliases_maps = []
+    if normal:
+        all_aliases_maps.append(_NORMAL_ALIASES)
+    if normal_dev:
+        all_aliases_maps.append(_NORMAL_DEV_ALIASES)
+    if proc_macro:
+        all_aliases_maps.append(_PROC_MACRO_ALIASES)
+    if proc_macro_dev:
+        all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)
+    if build:
+        all_aliases_maps.append(_BUILD_ALIASES)
+    if build_proc_macro:
+        all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)
+
+    # Default to always using normal aliases
+    if not all_aliases_maps:
+        all_aliases_maps.append(_NORMAL_ALIASES)
+        all_aliases_maps.append(_PROC_MACRO_ALIASES)
+
+    aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)
+
+    if not aliases:
+        return dict()
+
+    common_items = aliases.pop(_COMMON_CONDITION, {}).items()
+
+    # If there are only common items in the dictionary, immediately return them
+    if not len(aliases.keys()) == 1:
+        return dict(common_items)
+
+    # Build a single select statement where each conditional has accounted for the
+    # common set of aliases.
+    crate_aliases = {"//conditions:default": common_items}
+    for condition, deps in aliases.items():
+        condition_triples = _CONDITIONS[condition]
+        if condition_triples in crate_aliases:
+            crate_aliases[condition_triples].update(deps)
+        else:
+            crate_aliases.update({_CONDITIONS[condition]: dict(deps.items() + common_items)})
+
+    return selects.with_or(crate_aliases)
+
+###############################################################################
+# WORKSPACE MEMBER DEPS AND ALIASES
+###############################################################################
+
+_NORMAL_DEPENDENCIES = {
+    "": {
+        _COMMON_CONDITION: {
+            "anyhow": "@rules_rust_wasm_bindgen__anyhow-1.0.58//:anyhow",
+            "curl": "@rules_rust_wasm_bindgen__curl-0.4.43//:curl",
+            "docopt": "@rules_rust_wasm_bindgen__docopt-1.1.1//:docopt",
+            "env_logger": "@rules_rust_wasm_bindgen__env_logger-0.8.4//:env_logger",
+            "log": "@rules_rust_wasm_bindgen__log-0.4.17//:log",
+            "rouille": "@rules_rust_wasm_bindgen__rouille-3.5.0//:rouille",
+            "serde": "@rules_rust_wasm_bindgen__serde-1.0.139//:serde",
+            "serde_json": "@rules_rust_wasm_bindgen__serde_json-1.0.82//:serde_json",
+            "walrus": "@rules_rust_wasm_bindgen__walrus-0.19.0//:walrus",
+            "wasm-bindgen": "@rules_rust_wasm_bindgen__wasm-bindgen-0.2.81//:wasm_bindgen",
+            "wasm-bindgen-cli-support": "@rules_rust_wasm_bindgen__wasm-bindgen-cli-support-0.2.81//:wasm_bindgen_cli_support",
+            "wasm-bindgen-shared": "@rules_rust_wasm_bindgen__wasm-bindgen-shared-0.2.81//:wasm_bindgen_shared",
+        },
+    },
+}
+
+_NORMAL_ALIASES = {
+    "": {
+        _COMMON_CONDITION: {
+        },
+    },
+}
+
+_NORMAL_DEV_DEPENDENCIES = {
+    "": {
+        _COMMON_CONDITION: {
+            "assert_cmd": "@rules_rust_wasm_bindgen__assert_cmd-1.0.8//:assert_cmd",
+            "diff": "@rules_rust_wasm_bindgen__diff-0.1.13//:diff",
+            "predicates": "@rules_rust_wasm_bindgen__predicates-1.0.8//:predicates",
+            "rayon": "@rules_rust_wasm_bindgen__rayon-1.5.3//:rayon",
+            "tempfile": "@rules_rust_wasm_bindgen__tempfile-3.3.0//:tempfile",
+            "wasmprinter": "@rules_rust_wasm_bindgen__wasmprinter-0.2.33//:wasmprinter",
+            "wit-printer": "@rules_rust_wasm_bindgen__wit-printer-0.2.0//:wit_printer",
+            "wit-text": "@rules_rust_wasm_bindgen__wit-text-0.8.0//:wit_text",
+            "wit-validator": "@rules_rust_wasm_bindgen__wit-validator-0.2.1//:wit_validator",
+            "wit-walrus": "@rules_rust_wasm_bindgen__wit-walrus-0.6.0//:wit_walrus",
+        },
+    },
+}
+
+_NORMAL_DEV_ALIASES = {
+    "": {
+        _COMMON_CONDITION: {
+        },
+    },
+}
+
+_PROC_MACRO_DEPENDENCIES = {
+    "": {
+        _COMMON_CONDITION: {
+            "serde_derive": "@rules_rust_wasm_bindgen__serde_derive-1.0.139//:serde_derive",
+        },
+    },
+}
+
+_PROC_MACRO_ALIASES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEV_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_PROC_MACRO_DEV_ALIASES = {
+    "": {
+        _COMMON_CONDITION: {
+        },
+    },
+}
+
+_BUILD_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_BUILD_ALIASES = {
+    "": {
+    },
+}
+
+_BUILD_PROC_MACRO_DEPENDENCIES = {
+    "": {
+    },
+}
+
+_BUILD_PROC_MACRO_ALIASES = {
+    "": {
+    },
+}
+
+_CONDITIONS = {
+    "aarch64-pc-windows-msvc": [],
+    "aarch64-uwp-windows-msvc": [],
+    "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [],
+    "cfg(all(unix, not(target_os = \"macos\")))": ["aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(any(target_os = \"macos\", target_os = \"ios\", target_os = \"freebsd\"))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "i686-apple-darwin", "i686-unknown-freebsd", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-unknown-freebsd"],
+    "cfg(any(unix, target_os = \"wasi\"))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(not(windows))": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "riscv32imc-unknown-none-elf", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(target_arch = \"wasm32\")": ["wasm32-unknown-unknown", "wasm32-wasi"],
+    "cfg(target_env = \"msvc\")": ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc"],
+    "cfg(target_family = \"unix\")": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(target_os = \"hermit\")": [],
+    "cfg(target_os = \"redox\")": [],
+    "cfg(target_os = \"wasi\")": ["wasm32-wasi"],
+    "cfg(unix)": ["aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", "aarch64-linux-android", "aarch64-unknown-linux-gnu", "arm-unknown-linux-gnueabi", "armv7-linux-androideabi", "armv7-unknown-linux-gnueabi", "i686-apple-darwin", "i686-linux-android", "i686-unknown-freebsd", "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", "x86_64-linux-android", "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu"],
+    "cfg(windows)": ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc"],
+    "i686-pc-windows-gnu": [],
+    "i686-pc-windows-msvc": ["i686-pc-windows-msvc"],
+    "i686-uwp-windows-gnu": [],
+    "i686-uwp-windows-msvc": [],
+    "x86_64-pc-windows-gnu": [],
+    "x86_64-pc-windows-msvc": ["x86_64-pc-windows-msvc"],
+    "x86_64-uwp-windows-gnu": [],
+    "x86_64-uwp-windows-msvc": [],
+}
+
+###############################################################################
+
+def crate_repositories():
+    """A macro for defining repositories for all generated crates"""
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__aho-corasick-0.7.18",
+        sha256 = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/aho-corasick/0.7.18/download"],
+        strip_prefix = "aho-corasick-0.7.18",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.aho-corasick-0.7.18.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__anyhow-1.0.58",
+        sha256 = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/anyhow/1.0.58/download"],
+        strip_prefix = "anyhow-1.0.58",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.anyhow-1.0.58.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__ascii-1.0.0",
+        sha256 = "bbf56136a5198c7b01a49e3afcbef6cf84597273d298f54432926024107b0109",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/ascii/1.0.0/download"],
+        strip_prefix = "ascii-1.0.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.ascii-1.0.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__assert_cmd-1.0.8",
+        sha256 = "c98233c6673d8601ab23e77eb38f999c51100d46c5703b17288c57fddf3a1ffe",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/assert_cmd/1.0.8/download"],
+        strip_prefix = "assert_cmd-1.0.8",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.assert_cmd-1.0.8.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__atty-0.2.14",
+        sha256 = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/atty/0.2.14/download"],
+        strip_prefix = "atty-0.2.14",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.atty-0.2.14.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__autocfg-1.1.0",
+        sha256 = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/autocfg/1.1.0/download"],
+        strip_prefix = "autocfg-1.1.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.autocfg-1.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__base64-0.13.0",
+        sha256 = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/base64/0.13.0/download"],
+        strip_prefix = "base64-0.13.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.base64-0.13.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__base64-0.9.3",
+        sha256 = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/base64/0.9.3/download"],
+        strip_prefix = "base64-0.9.3",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.base64-0.9.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__bitflags-1.3.2",
+        sha256 = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/bitflags/1.3.2/download"],
+        strip_prefix = "bitflags-1.3.2",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.bitflags-1.3.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__bstr-0.2.17",
+        sha256 = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/bstr/0.2.17/download"],
+        strip_prefix = "bstr-0.2.17",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.bstr-0.2.17.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__buf_redux-0.8.4",
+        sha256 = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/buf_redux/0.8.4/download"],
+        strip_prefix = "buf_redux-0.8.4",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.buf_redux-0.8.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__bumpalo-3.10.0",
+        sha256 = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/bumpalo/3.10.0/download"],
+        strip_prefix = "bumpalo-3.10.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.bumpalo-3.10.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__byteorder-1.4.3",
+        sha256 = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/byteorder/1.4.3/download"],
+        strip_prefix = "byteorder-1.4.3",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.byteorder-1.4.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__cc-1.0.73",
+        sha256 = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/cc/1.0.73/download"],
+        strip_prefix = "cc-1.0.73",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.cc-1.0.73.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__cfg-if-1.0.0",
+        sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/cfg-if/1.0.0/download"],
+        strip_prefix = "cfg-if-1.0.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.cfg-if-1.0.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__chrono-0.4.19",
+        sha256 = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/chrono/0.4.19/download"],
+        strip_prefix = "chrono-0.4.19",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.chrono-0.4.19.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__chunked_transfer-1.4.0",
+        sha256 = "fff857943da45f546682664a79488be82e69e43c1a7a2307679ab9afb3a66d2e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/chunked_transfer/1.4.0/download"],
+        strip_prefix = "chunked_transfer-1.4.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.chunked_transfer-1.4.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__crossbeam-channel-0.5.5",
+        sha256 = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/crossbeam-channel/0.5.5/download"],
+        strip_prefix = "crossbeam-channel-0.5.5",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.crossbeam-channel-0.5.5.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__crossbeam-deque-0.8.1",
+        sha256 = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/crossbeam-deque/0.8.1/download"],
+        strip_prefix = "crossbeam-deque-0.8.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.crossbeam-deque-0.8.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__crossbeam-epoch-0.9.9",
+        sha256 = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/crossbeam-epoch/0.9.9/download"],
+        strip_prefix = "crossbeam-epoch-0.9.9",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.crossbeam-epoch-0.9.9.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__crossbeam-utils-0.8.10",
+        sha256 = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/crossbeam-utils/0.8.10/download"],
+        strip_prefix = "crossbeam-utils-0.8.10",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.crossbeam-utils-0.8.10.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__curl-0.4.43",
+        sha256 = "37d855aeef205b43f65a5001e0997d81f8efca7badad4fad7d897aa7f0d0651f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/curl/0.4.43/download"],
+        strip_prefix = "curl-0.4.43",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.curl-0.4.43.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__curl-sys-0.4.55-curl-7.83.1",
+        sha256 = "23734ec77368ec583c2e61dd3f0b0e5c98b93abe6d2a004ca06b91dd7e3e2762",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/curl-sys/0.4.55+curl-7.83.1/download"],
+        strip_prefix = "curl-sys-0.4.55+curl-7.83.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.curl-sys-0.4.55+curl-7.83.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__diff-0.1.13",
+        sha256 = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/diff/0.1.13/download"],
+        strip_prefix = "diff-0.1.13",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.diff-0.1.13.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__difference-2.0.0",
+        sha256 = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/difference/2.0.0/download"],
+        strip_prefix = "difference-2.0.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.difference-2.0.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__difflib-0.4.0",
+        sha256 = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/difflib/0.4.0/download"],
+        strip_prefix = "difflib-0.4.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.difflib-0.4.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__doc-comment-0.3.3",
+        sha256 = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/doc-comment/0.3.3/download"],
+        strip_prefix = "doc-comment-0.3.3",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.doc-comment-0.3.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__docopt-1.1.1",
+        sha256 = "7f3f119846c823f9eafcf953a8f6ffb6ed69bf6240883261a7f13b634579a51f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/docopt/1.1.1/download"],
+        strip_prefix = "docopt-1.1.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.docopt-1.1.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__either-1.7.0",
+        sha256 = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/either/1.7.0/download"],
+        strip_prefix = "either-1.7.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.either-1.7.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__env_logger-0.8.4",
+        sha256 = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/env_logger/0.8.4/download"],
+        strip_prefix = "env_logger-0.8.4",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.env_logger-0.8.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__fastrand-1.7.0",
+        sha256 = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/fastrand/1.7.0/download"],
+        strip_prefix = "fastrand-1.7.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.fastrand-1.7.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__filetime-0.2.17",
+        sha256 = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/filetime/0.2.17/download"],
+        strip_prefix = "filetime-0.2.17",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.filetime-0.2.17.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__float-cmp-0.8.0",
+        sha256 = "e1267f4ac4f343772758f7b1bdcbe767c218bbab93bb432acbf5162bbf85a6c4",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/float-cmp/0.8.0/download"],
+        strip_prefix = "float-cmp-0.8.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.float-cmp-0.8.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__form_urlencoded-1.0.1",
+        sha256 = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/form_urlencoded/1.0.1/download"],
+        strip_prefix = "form_urlencoded-1.0.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.form_urlencoded-1.0.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__getrandom-0.2.7",
+        sha256 = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/getrandom/0.2.7/download"],
+        strip_prefix = "getrandom-0.2.7",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.getrandom-0.2.7.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__heck-0.3.3",
+        sha256 = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/heck/0.3.3/download"],
+        strip_prefix = "heck-0.3.3",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.heck-0.3.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__hermit-abi-0.1.19",
+        sha256 = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/hermit-abi/0.1.19/download"],
+        strip_prefix = "hermit-abi-0.1.19",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.hermit-abi-0.1.19.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__httparse-1.7.1",
+        sha256 = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/httparse/1.7.1/download"],
+        strip_prefix = "httparse-1.7.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.httparse-1.7.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__humantime-2.1.0",
+        sha256 = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/humantime/2.1.0/download"],
+        strip_prefix = "humantime-2.1.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.humantime-2.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__id-arena-2.2.1",
+        sha256 = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/id-arena/2.2.1/download"],
+        strip_prefix = "id-arena-2.2.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.id-arena-2.2.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__idna-0.2.3",
+        sha256 = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/idna/0.2.3/download"],
+        strip_prefix = "idna-0.2.3",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.idna-0.2.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__instant-0.1.12",
+        sha256 = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/instant/0.1.12/download"],
+        strip_prefix = "instant-0.1.12",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.instant-0.1.12.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__itertools-0.10.3",
+        sha256 = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/itertools/0.10.3/download"],
+        strip_prefix = "itertools-0.10.3",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.itertools-0.10.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__itoa-1.0.2",
+        sha256 = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/itoa/1.0.2/download"],
+        strip_prefix = "itoa-1.0.2",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.itoa-1.0.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__lazy_static-1.4.0",
+        sha256 = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/lazy_static/1.4.0/download"],
+        strip_prefix = "lazy_static-1.4.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.lazy_static-1.4.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__leb128-0.2.5",
+        sha256 = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/leb128/0.2.5/download"],
+        strip_prefix = "leb128-0.2.5",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.leb128-0.2.5.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__libc-0.2.126",
+        sha256 = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/libc/0.2.126/download"],
+        strip_prefix = "libc-0.2.126",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.libc-0.2.126.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__libz-sys-1.1.8",
+        sha256 = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/libz-sys/1.1.8/download"],
+        strip_prefix = "libz-sys-1.1.8",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.libz-sys-1.1.8.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__log-0.4.17",
+        sha256 = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/log/0.4.17/download"],
+        strip_prefix = "log-0.4.17",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.log-0.4.17.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__matches-0.1.9",
+        sha256 = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/matches/0.1.9/download"],
+        strip_prefix = "matches-0.1.9",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.matches-0.1.9.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__memchr-2.5.0",
+        sha256 = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/memchr/2.5.0/download"],
+        strip_prefix = "memchr-2.5.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.memchr-2.5.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__memoffset-0.6.5",
+        sha256 = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/memoffset/0.6.5/download"],
+        strip_prefix = "memoffset-0.6.5",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.memoffset-0.6.5.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__mime-0.3.16",
+        sha256 = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/mime/0.3.16/download"],
+        strip_prefix = "mime-0.3.16",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.mime-0.3.16.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__mime_guess-2.0.4",
+        sha256 = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/mime_guess/2.0.4/download"],
+        strip_prefix = "mime_guess-2.0.4",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.mime_guess-2.0.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__multipart-0.18.0",
+        sha256 = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/multipart/0.18.0/download"],
+        strip_prefix = "multipart-0.18.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.multipart-0.18.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__normalize-line-endings-0.3.0",
+        sha256 = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/normalize-line-endings/0.3.0/download"],
+        strip_prefix = "normalize-line-endings-0.3.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.normalize-line-endings-0.3.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__num-integer-0.1.45",
+        sha256 = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/num-integer/0.1.45/download"],
+        strip_prefix = "num-integer-0.1.45",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.num-integer-0.1.45.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__num-traits-0.2.15",
+        sha256 = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/num-traits/0.2.15/download"],
+        strip_prefix = "num-traits-0.2.15",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.num-traits-0.2.15.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__num_cpus-1.13.1",
+        sha256 = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/num_cpus/1.13.1/download"],
+        strip_prefix = "num_cpus-1.13.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.num_cpus-1.13.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__num_threads-0.1.6",
+        sha256 = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/num_threads/0.1.6/download"],
+        strip_prefix = "num_threads-0.1.6",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.num_threads-0.1.6.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__once_cell-1.13.0",
+        sha256 = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/once_cell/1.13.0/download"],
+        strip_prefix = "once_cell-1.13.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.once_cell-1.13.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__openssl-probe-0.1.5",
+        sha256 = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/openssl-probe/0.1.5/download"],
+        strip_prefix = "openssl-probe-0.1.5",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.openssl-probe-0.1.5.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__openssl-sys-0.9.75",
+        sha256 = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/openssl-sys/0.9.75/download"],
+        strip_prefix = "openssl-sys-0.9.75",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.openssl-sys-0.9.75.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__percent-encoding-2.1.0",
+        sha256 = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/percent-encoding/2.1.0/download"],
+        strip_prefix = "percent-encoding-2.1.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.percent-encoding-2.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__pkg-config-0.3.25",
+        sha256 = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/pkg-config/0.3.25/download"],
+        strip_prefix = "pkg-config-0.3.25",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.pkg-config-0.3.25.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__ppv-lite86-0.2.16",
+        sha256 = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/ppv-lite86/0.2.16/download"],
+        strip_prefix = "ppv-lite86-0.2.16",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.ppv-lite86-0.2.16.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__predicates-1.0.8",
+        sha256 = "f49cfaf7fdaa3bfacc6fa3e7054e65148878354a5cfddcf661df4c851f8021df",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/predicates/1.0.8/download"],
+        strip_prefix = "predicates-1.0.8",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.predicates-1.0.8.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__predicates-2.1.1",
+        sha256 = "a5aab5be6e4732b473071984b3164dbbfb7a3674d30ea5ff44410b6bcd960c3c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/predicates/2.1.1/download"],
+        strip_prefix = "predicates-2.1.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.predicates-2.1.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__predicates-core-1.0.3",
+        sha256 = "da1c2388b1513e1b605fcec39a95e0a9e8ef088f71443ef37099fa9ae6673fcb",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/predicates-core/1.0.3/download"],
+        strip_prefix = "predicates-core-1.0.3",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.predicates-core-1.0.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__predicates-tree-1.0.5",
+        sha256 = "4d86de6de25020a36c6d3643a86d9a6a9f552107c0559c60ea03551b5e16c032",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/predicates-tree/1.0.5/download"],
+        strip_prefix = "predicates-tree-1.0.5",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.predicates-tree-1.0.5.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__proc-macro2-1.0.40",
+        sha256 = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/proc-macro2/1.0.40/download"],
+        strip_prefix = "proc-macro2-1.0.40",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.proc-macro2-1.0.40.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__quick-error-1.2.3",
+        sha256 = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/quick-error/1.2.3/download"],
+        strip_prefix = "quick-error-1.2.3",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.quick-error-1.2.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__quote-1.0.20",
+        sha256 = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/quote/1.0.20/download"],
+        strip_prefix = "quote-1.0.20",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.quote-1.0.20.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__rand-0.8.5",
+        sha256 = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/rand/0.8.5/download"],
+        strip_prefix = "rand-0.8.5",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.rand-0.8.5.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__rand_chacha-0.3.1",
+        sha256 = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/rand_chacha/0.3.1/download"],
+        strip_prefix = "rand_chacha-0.3.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.rand_chacha-0.3.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__rand_core-0.6.3",
+        sha256 = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/rand_core/0.6.3/download"],
+        strip_prefix = "rand_core-0.6.3",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.rand_core-0.6.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__rayon-1.5.3",
+        sha256 = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/rayon/1.5.3/download"],
+        strip_prefix = "rayon-1.5.3",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.rayon-1.5.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__rayon-core-1.9.3",
+        sha256 = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/rayon-core/1.9.3/download"],
+        strip_prefix = "rayon-core-1.9.3",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.rayon-core-1.9.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__redox_syscall-0.2.13",
+        sha256 = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/redox_syscall/0.2.13/download"],
+        strip_prefix = "redox_syscall-0.2.13",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.redox_syscall-0.2.13.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__regex-1.6.0",
+        sha256 = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/regex/1.6.0/download"],
+        strip_prefix = "regex-1.6.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.regex-1.6.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__regex-automata-0.1.10",
+        sha256 = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/regex-automata/0.1.10/download"],
+        strip_prefix = "regex-automata-0.1.10",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.regex-automata-0.1.10.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__regex-syntax-0.6.27",
+        sha256 = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/regex-syntax/0.6.27/download"],
+        strip_prefix = "regex-syntax-0.6.27",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.regex-syntax-0.6.27.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__remove_dir_all-0.5.3",
+        sha256 = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/remove_dir_all/0.5.3/download"],
+        strip_prefix = "remove_dir_all-0.5.3",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.remove_dir_all-0.5.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__rouille-3.5.0",
+        sha256 = "18b2380c42510ef4a28b5f228a174c801e0dec590103e215e60812e2e2f34d05",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/rouille/3.5.0/download"],
+        strip_prefix = "rouille-3.5.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.rouille-3.5.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__rustc-demangle-0.1.21",
+        sha256 = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/rustc-demangle/0.1.21/download"],
+        strip_prefix = "rustc-demangle-0.1.21",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.rustc-demangle-0.1.21.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__ryu-1.0.10",
+        sha256 = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/ryu/1.0.10/download"],
+        strip_prefix = "ryu-1.0.10",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.ryu-1.0.10.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__safemem-0.3.3",
+        sha256 = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/safemem/0.3.3/download"],
+        strip_prefix = "safemem-0.3.3",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.safemem-0.3.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__schannel-0.1.20",
+        sha256 = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/schannel/0.1.20/download"],
+        strip_prefix = "schannel-0.1.20",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.schannel-0.1.20.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__scopeguard-1.1.0",
+        sha256 = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/scopeguard/1.1.0/download"],
+        strip_prefix = "scopeguard-1.1.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.scopeguard-1.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__serde-1.0.139",
+        sha256 = "0171ebb889e45aa68b44aee0859b3eede84c6f5f5c228e6f140c0b2a0a46cad6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/serde/1.0.139/download"],
+        strip_prefix = "serde-1.0.139",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.serde-1.0.139.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__serde_derive-1.0.139",
+        sha256 = "dc1d3230c1de7932af58ad8ffbe1d784bd55efd5a9d84ac24f69c72d83543dfb",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/serde_derive/1.0.139/download"],
+        strip_prefix = "serde_derive-1.0.139",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.serde_derive-1.0.139.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__serde_json-1.0.82",
+        sha256 = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/serde_json/1.0.82/download"],
+        strip_prefix = "serde_json-1.0.82",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.serde_json-1.0.82.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__sha1-0.6.1",
+        sha256 = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/sha1/0.6.1/download"],
+        strip_prefix = "sha1-0.6.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.sha1-0.6.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__sha1_smol-1.0.0",
+        sha256 = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/sha1_smol/1.0.0/download"],
+        strip_prefix = "sha1_smol-1.0.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.sha1_smol-1.0.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__socket2-0.4.4",
+        sha256 = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/socket2/0.4.4/download"],
+        strip_prefix = "socket2-0.4.4",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.socket2-0.4.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__strsim-0.10.0",
+        sha256 = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/strsim/0.10.0/download"],
+        strip_prefix = "strsim-0.10.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.strsim-0.10.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__syn-1.0.98",
+        sha256 = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/syn/1.0.98/download"],
+        strip_prefix = "syn-1.0.98",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.syn-1.0.98.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__tempfile-3.3.0",
+        sha256 = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tempfile/3.3.0/download"],
+        strip_prefix = "tempfile-3.3.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.tempfile-3.3.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__termcolor-1.1.3",
+        sha256 = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/termcolor/1.1.3/download"],
+        strip_prefix = "termcolor-1.1.3",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.termcolor-1.1.3.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__termtree-0.2.4",
+        sha256 = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/termtree/0.2.4/download"],
+        strip_prefix = "termtree-0.2.4",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.termtree-0.2.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__threadpool-1.8.1",
+        sha256 = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/threadpool/1.8.1/download"],
+        strip_prefix = "threadpool-1.8.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.threadpool-1.8.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__time-0.3.11",
+        sha256 = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/time/0.3.11/download"],
+        strip_prefix = "time-0.3.11",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.time-0.3.11.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__tiny_http-0.8.2",
+        sha256 = "9ce51b50006056f590c9b7c3808c3bd70f0d1101666629713866c227d6e58d39",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tiny_http/0.8.2/download"],
+        strip_prefix = "tiny_http-0.8.2",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.tiny_http-0.8.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__tinyvec-1.6.0",
+        sha256 = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tinyvec/1.6.0/download"],
+        strip_prefix = "tinyvec-1.6.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.tinyvec-1.6.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__tinyvec_macros-0.1.0",
+        sha256 = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/tinyvec_macros/0.1.0/download"],
+        strip_prefix = "tinyvec_macros-0.1.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.tinyvec_macros-0.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__twoway-0.1.8",
+        sha256 = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/twoway/0.1.8/download"],
+        strip_prefix = "twoway-0.1.8",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.twoway-0.1.8.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__unicase-2.6.0",
+        sha256 = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unicase/2.6.0/download"],
+        strip_prefix = "unicase-2.6.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.unicase-2.6.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__unicode-bidi-0.3.8",
+        sha256 = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unicode-bidi/0.3.8/download"],
+        strip_prefix = "unicode-bidi-0.3.8",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.unicode-bidi-0.3.8.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__unicode-ident-1.0.1",
+        sha256 = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unicode-ident/1.0.1/download"],
+        strip_prefix = "unicode-ident-1.0.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.unicode-ident-1.0.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__unicode-normalization-0.1.21",
+        sha256 = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unicode-normalization/0.1.21/download"],
+        strip_prefix = "unicode-normalization-0.1.21",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.unicode-normalization-0.1.21.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__unicode-segmentation-1.9.0",
+        sha256 = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/unicode-segmentation/1.9.0/download"],
+        strip_prefix = "unicode-segmentation-1.9.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.unicode-segmentation-1.9.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__url-2.2.2",
+        sha256 = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/url/2.2.2/download"],
+        strip_prefix = "url-2.2.2",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.url-2.2.2.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__vcpkg-0.2.15",
+        sha256 = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/vcpkg/0.2.15/download"],
+        strip_prefix = "vcpkg-0.2.15",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.vcpkg-0.2.15.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__version_check-0.9.4",
+        sha256 = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/version_check/0.9.4/download"],
+        strip_prefix = "version_check-0.9.4",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.version_check-0.9.4.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wait-timeout-0.2.0",
+        sha256 = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wait-timeout/0.2.0/download"],
+        strip_prefix = "wait-timeout-0.2.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wait-timeout-0.2.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__walrus-0.19.0",
+        sha256 = "4eb08e48cde54c05f363d984bb54ce374f49e242def9468d2e1b6c2372d291f8",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/walrus/0.19.0/download"],
+        strip_prefix = "walrus-0.19.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.walrus-0.19.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__walrus-macro-0.19.0",
+        sha256 = "0a6e5bd22c71e77d60140b0bd5be56155a37e5bd14e24f5f87298040d0cc40d7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/walrus-macro/0.19.0/download"],
+        strip_prefix = "walrus-macro-0.19.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.walrus-macro-0.19.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wasi-0.11.0-wasi-snapshot-preview1",
+        sha256 = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasi/0.11.0+wasi-snapshot-preview1/download"],
+        strip_prefix = "wasi-0.11.0+wasi-snapshot-preview1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wasm-bindgen-0.2.81",
+        sha256 = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasm-bindgen/0.2.81/download"],
+        strip_prefix = "wasm-bindgen-0.2.81",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wasm-bindgen-0.2.81.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wasm-bindgen-backend-0.2.81",
+        sha256 = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasm-bindgen-backend/0.2.81/download"],
+        strip_prefix = "wasm-bindgen-backend-0.2.81",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wasm-bindgen-backend-0.2.81.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wasm-bindgen-cli-support-0.2.81",
+        sha256 = "4016fbd42224de21aab2f009aeaec61067d278a298ba7f8f7f8d40fbffea0822",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasm-bindgen-cli-support/0.2.81/download"],
+        strip_prefix = "wasm-bindgen-cli-support-0.2.81",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wasm-bindgen-cli-support-0.2.81.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wasm-bindgen-externref-xform-0.2.81",
+        sha256 = "f33c8e2d3f3b6f6647f982911eb4cb44998c8cca97a4fe7afc99f616ebb33a73",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasm-bindgen-externref-xform/0.2.81/download"],
+        strip_prefix = "wasm-bindgen-externref-xform-0.2.81",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wasm-bindgen-externref-xform-0.2.81.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wasm-bindgen-macro-0.2.81",
+        sha256 = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasm-bindgen-macro/0.2.81/download"],
+        strip_prefix = "wasm-bindgen-macro-0.2.81",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wasm-bindgen-macro-0.2.81.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wasm-bindgen-macro-support-0.2.81",
+        sha256 = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasm-bindgen-macro-support/0.2.81/download"],
+        strip_prefix = "wasm-bindgen-macro-support-0.2.81",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wasm-bindgen-macro-support-0.2.81.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wasm-bindgen-multi-value-xform-0.2.81",
+        sha256 = "7015b54357604811162710d5cf274ab85d974fe1e324222dd5b2133afdefe9b9",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasm-bindgen-multi-value-xform/0.2.81/download"],
+        strip_prefix = "wasm-bindgen-multi-value-xform-0.2.81",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wasm-bindgen-multi-value-xform-0.2.81.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wasm-bindgen-shared-0.2.81",
+        sha256 = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasm-bindgen-shared/0.2.81/download"],
+        strip_prefix = "wasm-bindgen-shared-0.2.81",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wasm-bindgen-shared-0.2.81.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wasm-bindgen-threads-xform-0.2.81",
+        sha256 = "6961b838d9a9c121ba4a1eea1628014cc759469e3defb42bbac9c5ed0f65be14",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasm-bindgen-threads-xform/0.2.81/download"],
+        strip_prefix = "wasm-bindgen-threads-xform-0.2.81",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wasm-bindgen-threads-xform-0.2.81.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wasm-bindgen-wasm-conventions-0.2.81",
+        sha256 = "c0a0eca38fe89471f57d6903f3e17e732d2d6f995a7af5b23f27df7fee0f0d18",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasm-bindgen-wasm-conventions/0.2.81/download"],
+        strip_prefix = "wasm-bindgen-wasm-conventions-0.2.81",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wasm-bindgen-wasm-conventions-0.2.81.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wasm-bindgen-wasm-interpreter-0.2.81",
+        sha256 = "0b1c9fb7f71137840932bbb853ef1f83d68c88584b716c9bbae38675c9fb8b86",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasm-bindgen-wasm-interpreter/0.2.81/download"],
+        strip_prefix = "wasm-bindgen-wasm-interpreter-0.2.81",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wasm-bindgen-wasm-interpreter-0.2.81.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wasmparser-0.59.0",
+        sha256 = "a950e6a618f62147fd514ff445b2a0b53120d382751960797f85f058c7eda9b9",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasmparser/0.59.0/download"],
+        strip_prefix = "wasmparser-0.59.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wasmparser-0.59.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wasmparser-0.77.0",
+        sha256 = "b35c86d22e720a07d954ebbed772d01180501afe7d03d464f413bb5f8914a8d6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasmparser/0.77.0/download"],
+        strip_prefix = "wasmparser-0.77.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wasmparser-0.77.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wasmparser-0.83.0",
+        sha256 = "718ed7c55c2add6548cca3ddd6383d738cd73b892df400e96b9aa876f0141d7a",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasmparser/0.83.0/download"],
+        strip_prefix = "wasmparser-0.83.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wasmparser-0.83.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wasmprinter-0.2.33",
+        sha256 = "f973822fb3ca7e03ab421910274514b405df19a3d53acb131ae4df3a2fc4eb58",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wasmprinter/0.2.33/download"],
+        strip_prefix = "wasmprinter-0.2.33",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wasmprinter-0.2.33.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wast-21.0.0",
+        sha256 = "0b1844f66a2bc8526d71690104c0e78a8e59ffa1597b7245769d174ebb91deb5",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wast/21.0.0/download"],
+        strip_prefix = "wast-21.0.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wast-21.0.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__winapi-0.3.9",
+        sha256 = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi/0.3.9/download"],
+        strip_prefix = "winapi-0.3.9",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.winapi-0.3.9.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__winapi-i686-pc-windows-gnu-0.4.0",
+        sha256 = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download"],
+        strip_prefix = "winapi-i686-pc-windows-gnu-0.4.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__winapi-util-0.1.5",
+        sha256 = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi-util/0.1.5/download"],
+        strip_prefix = "winapi-util-0.1.5",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.winapi-util-0.1.5.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__winapi-x86_64-pc-windows-gnu-0.4.0",
+        sha256 = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download"],
+        strip_prefix = "winapi-x86_64-pc-windows-gnu-0.4.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__windows-sys-0.36.1",
+        sha256 = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/windows-sys/0.36.1/download"],
+        strip_prefix = "windows-sys-0.36.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.windows-sys-0.36.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__windows_aarch64_msvc-0.36.1",
+        sha256 = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/windows_aarch64_msvc/0.36.1/download"],
+        strip_prefix = "windows_aarch64_msvc-0.36.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.windows_aarch64_msvc-0.36.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__windows_i686_gnu-0.36.1",
+        sha256 = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/windows_i686_gnu/0.36.1/download"],
+        strip_prefix = "windows_i686_gnu-0.36.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.windows_i686_gnu-0.36.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__windows_i686_msvc-0.36.1",
+        sha256 = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/windows_i686_msvc/0.36.1/download"],
+        strip_prefix = "windows_i686_msvc-0.36.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.windows_i686_msvc-0.36.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__windows_x86_64_gnu-0.36.1",
+        sha256 = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/windows_x86_64_gnu/0.36.1/download"],
+        strip_prefix = "windows_x86_64_gnu-0.36.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.windows_x86_64_gnu-0.36.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__windows_x86_64_msvc-0.36.1",
+        sha256 = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/windows_x86_64_msvc/0.36.1/download"],
+        strip_prefix = "windows_x86_64_msvc-0.36.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.windows_x86_64_msvc-0.36.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wit-parser-0.2.0",
+        sha256 = "3f5fd97866f4b9c8e1ed57bcf9446f3d0d8ba37e2dd01c3c612c046c053b06f7",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wit-parser/0.2.0/download"],
+        strip_prefix = "wit-parser-0.2.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wit-parser-0.2.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wit-printer-0.2.0",
+        sha256 = "93f19ca44555a3c14d69acee6447a6e4f52771b0c6e5d8db3e42db3b90f6fce9",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wit-printer/0.2.0/download"],
+        strip_prefix = "wit-printer-0.2.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wit-printer-0.2.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wit-schema-version-0.1.0",
+        sha256 = "bfee4a6a4716eefa0682e7a3b836152e894a3e4f34a9d6c2c3e1c94429bfe36a",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wit-schema-version/0.1.0/download"],
+        strip_prefix = "wit-schema-version-0.1.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wit-schema-version-0.1.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wit-text-0.8.0",
+        sha256 = "33358e95c77d660f1c7c07f4a93c2bd89768965e844e3c50730bb4b42658df5f",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wit-text/0.8.0/download"],
+        strip_prefix = "wit-text-0.8.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wit-text-0.8.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wit-validator-0.2.1",
+        sha256 = "3c11d93d925420e7872b226c4161849c32be38385ccab026b88df99d8ddc6ba6",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wit-validator/0.2.1/download"],
+        strip_prefix = "wit-validator-0.2.1",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wit-validator-0.2.1.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wit-walrus-0.6.0",
+        sha256 = "ad559e3e4c6404b2a6a675d44129d62a3836e3b951b90112fa1c5feb852757cd",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wit-walrus/0.6.0/download"],
+        strip_prefix = "wit-walrus-0.6.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wit-walrus-0.6.0.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen__wit-writer-0.2.0",
+        sha256 = "c2ad01ba5e9cbcff799a0689e56a153776ea694cec777f605938cb9880d41a09",
+        type = "tar.gz",
+        urls = ["https://crates.io/api/v1/crates/wit-writer/0.2.0/download"],
+        strip_prefix = "wit-writer-0.2.0",
+        build_file = Label("@rules_rust//wasm_bindgen/3rdparty/crates:BUILD.wit-writer-0.2.0.bazel"),
+    )
diff --git a/third_party/rules_rust/wasm_bindgen/BUILD.bazel b/third_party/rules_rust/wasm_bindgen/BUILD.bazel
index b69c85a..1c5dade 100644
--- a/third_party/rules_rust/wasm_bindgen/BUILD.bazel
+++ b/third_party/rules_rust/wasm_bindgen/BUILD.bazel
@@ -3,27 +3,33 @@
 
 package(default_visibility = ["//visibility:public"])
 
-toolchain_type(name = "wasm_bindgen_toolchain")
-
-bzl_library(
-    name = "bzl_lib",
-    srcs = glob(["**/*.bzl"]) + ["//wasm_bindgen/raze:crates.bzl"],
-    deps = ["//rust:bzl_lib"],
+toolchain_type(
+    name = "toolchain_type",
 )
 
 alias(
-    name = "rules",
-    actual = ":bzl_lib",
-    deprecation = "Please use the `@rules_rust//wasm_bindgen:bzl_lib` target instead",
+    name = "wasm_bindgen_toolchain",
+    actual = "toolchain_type",
+    deprecation = "instead use `@rules_rust//wasm_bindgen:toolchain_type`",
+    tags = ["manual"],
+)
+
+bzl_library(
+    name = "bzl_lib",
+    srcs = glob(["**/*.bzl"]),
+    deps = [
+        "//rust:bzl_lib",
+        "//wasm_bindgen/3rdparty:bzl_lib",
+    ],
 )
 
 rust_wasm_bindgen_toolchain(
     name = "default_wasm_bindgen_toolchain_impl",
-    bindgen = "//wasm_bindgen/raze:cargo_bin_wasm_bindgen",
+    bindgen = "@rules_rust//wasm_bindgen/3rdparty:wasm_bindgen_cli",
 )
 
 toolchain(
     name = "default_wasm_bindgen_toolchain",
     toolchain = "default_wasm_bindgen_toolchain_impl",
-    toolchain_type = "//wasm_bindgen:wasm_bindgen_toolchain",
+    toolchain_type = "//wasm_bindgen:toolchain_type",
 )
diff --git a/third_party/rules_rust/wasm_bindgen/DEVELOPMENT.md b/third_party/rules_rust/wasm_bindgen/DEVELOPMENT.md
new file mode 100644
index 0000000..a68b99e
--- /dev/null
+++ b/third_party/rules_rust/wasm_bindgen/DEVELOPMENT.md
@@ -0,0 +1,12 @@
+# Developing wasm_bindgen
+
+## Updating [wasm-bindgen][wb]
+
+Use the followign steps to update to new versions of [wasm-bindgen][wb].
+
+1. Update `WASM_BINDGEN_VERSION` in `@rules_rust//wasm_bindgen:repositories.bzl`
+2. Update the sha256 value for the `rules_rust_wasm_bindgen_cli` repository defined in `@rules_rust//wasm_bindgen:repositories.bzl` to match the artifact from the updated `WASM_BINDGEN_VERSION` value.
+3. Regenerate dependencies by running `bazel run //wasm_bindgen/3rdparty:crates_vendor -- --repin` from the root of `rules_rust`.
+4. Verify your changes by running `bazel test //wasm/...` from the `rules_rust/examples` directory.
+
+[wb]: https://github.com/rustwasm/wasm-bindgen
diff --git a/third_party/rules_rust/wasm_bindgen/providers.bzl b/third_party/rules_rust/wasm_bindgen/providers.bzl
index fc7123c..74fc333 100644
--- a/third_party/rules_rust/wasm_bindgen/providers.bzl
+++ b/third_party/rules_rust/wasm_bindgen/providers.bzl
@@ -1,14 +1,10 @@
 """A module for re-exporting the providers used by the rust_wasm_bindgen rule"""
 
 load(
-    "@build_bazel_rules_nodejs//:providers.bzl",
+    "@rules_nodejs//nodejs:providers.bzl",
     _DeclarationInfo = "DeclarationInfo",
-    _JSEcmaScriptModuleInfo = "JSEcmaScriptModuleInfo",
     _JSModuleInfo = "JSModuleInfo",
-    _JSNamedModuleInfo = "JSNamedModuleInfo",
 )
 
 DeclarationInfo = _DeclarationInfo
-JSEcmaScriptModuleInfo = _JSEcmaScriptModuleInfo
 JSModuleInfo = _JSModuleInfo
-JSNamedModuleInfo = _JSNamedModuleInfo
diff --git a/third_party/rules_rust/wasm_bindgen/raze/BUILD.bazel b/third_party/rules_rust/wasm_bindgen/raze/BUILD.bazel
deleted file mode 100644
index c0f8472..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/BUILD.bazel
+++ /dev/null
@@ -1,237 +0,0 @@
-"""
-@generated
-cargo-raze generated Bazel file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-package(default_visibility = ["//visibility:public"])
-
-licenses([
-    "notice",  # See individual crates for specific licenses
-])
-
-# Aliased targets
-alias(
-    name = "anyhow",
-    actual = "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "assert_cmd",
-    actual = "@rules_rust_wasm_bindgen__assert_cmd__1_0_8//:assert_cmd",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "curl",
-    actual = "@rules_rust_wasm_bindgen__curl__0_4_40//:curl",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "diff",
-    actual = "@rules_rust_wasm_bindgen__diff__0_1_12//:diff",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "docopt",
-    actual = "@rules_rust_wasm_bindgen__docopt__1_1_1//:docopt",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "env_logger",
-    actual = "@rules_rust_wasm_bindgen__env_logger__0_8_4//:env_logger",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "log",
-    actual = "@rules_rust_wasm_bindgen__log__0_4_14//:log",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "predicates",
-    actual = "@rules_rust_wasm_bindgen__predicates__1_0_8//:predicates",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "rayon",
-    actual = "@rules_rust_wasm_bindgen__rayon__1_5_1//:rayon",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "rouille",
-    actual = "@rules_rust_wasm_bindgen__rouille__3_4_0//:rouille",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "serde",
-    actual = "@rules_rust_wasm_bindgen__serde__1_0_130//:serde",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "serde_derive",
-    actual = "@rules_rust_wasm_bindgen__serde_derive__1_0_130//:serde_derive",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "serde_json",
-    actual = "@rules_rust_wasm_bindgen__serde_json__1_0_69//:serde_json",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "tempfile",
-    actual = "@rules_rust_wasm_bindgen__tempfile__3_2_0//:tempfile",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "walrus",
-    actual = "@rules_rust_wasm_bindgen__walrus__0_19_0//:walrus",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "wasm_bindgen",
-    actual = "@rules_rust_wasm_bindgen__wasm_bindgen__0_2_78//:wasm_bindgen",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "cargo_bin_wasm_bindgen",
-    actual = "@rules_rust_wasm_bindgen__wasm_bindgen_cli__0_2_78//:cargo_bin_wasm_bindgen",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "wasm_bindgen_cli",
-    actual = "@rules_rust_wasm_bindgen__wasm_bindgen_cli__0_2_78//:wasm_bindgen_cli",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "wasm_bindgen_cli_support",
-    actual = "@rules_rust_wasm_bindgen__wasm_bindgen_cli_support__0_2_78//:wasm_bindgen_cli_support",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "wasm_bindgen_shared",
-    actual = "@rules_rust_wasm_bindgen__wasm_bindgen_shared__0_2_78//:wasm_bindgen_shared",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "wit_printer",
-    actual = "@rules_rust_wasm_bindgen__wit_printer__0_2_0//:wit_printer",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "wit_text",
-    actual = "@rules_rust_wasm_bindgen__wit_text__0_8_0//:wit_text",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "wit_validator",
-    actual = "@rules_rust_wasm_bindgen__wit_validator__0_2_1//:wit_validator",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-alias(
-    name = "wit_walrus",
-    actual = "@rules_rust_wasm_bindgen__wit_walrus__0_6_0//:wit_walrus",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-# Export file for Stardoc support
-exports_files(
-    [
-        "crates.bzl",
-    ],
-    visibility = ["//visibility:public"],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/Cargo.raze.lock b/third_party/rules_rust/wasm_bindgen/raze/Cargo.raze.lock
deleted file mode 100644
index 59cccf2..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/Cargo.raze.lock
+++ /dev/null
@@ -1,1372 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-[[package]]
-name = "aho-corasick"
-version = "0.7.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "anyhow"
-version = "1.0.45"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee10e43ae4a853c0a3591d4e2ada1719e553be18199d9da9d4a83f5927c2f5c7"
-
-[[package]]
-name = "ascii"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbf56136a5198c7b01a49e3afcbef6cf84597273d298f54432926024107b0109"
-
-[[package]]
-name = "assert_cmd"
-version = "1.0.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c98233c6673d8601ab23e77eb38f999c51100d46c5703b17288c57fddf3a1ffe"
-dependencies = [
- "bstr",
- "doc-comment",
- "predicates 2.0.3",
- "predicates-core",
- "predicates-tree",
- "wait-timeout",
-]
-
-[[package]]
-name = "atty"
-version = "0.2.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
-dependencies = [
- "hermit-abi",
- "libc",
- "winapi",
-]
-
-[[package]]
-name = "autocfg"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
-
-[[package]]
-name = "base64"
-version = "0.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643"
-dependencies = [
- "byteorder",
- "safemem",
-]
-
-[[package]]
-name = "base64"
-version = "0.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
-
-[[package]]
-name = "bitflags"
-version = "1.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-
-[[package]]
-name = "bstr"
-version = "0.2.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
-dependencies = [
- "lazy_static",
- "memchr",
- "regex-automata",
-]
-
-[[package]]
-name = "buf_redux"
-version = "0.8.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f"
-dependencies = [
- "memchr",
- "safemem",
-]
-
-[[package]]
-name = "bumpalo"
-version = "3.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c"
-
-[[package]]
-name = "byteorder"
-version = "1.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
-
-[[package]]
-name = "cc"
-version = "1.0.71"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79c2681d6594606957bbb8631c4b90a7fcaaa72cdb714743a437b156d6a7eedd"
-
-[[package]]
-name = "cfg-if"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-
-[[package]]
-name = "chrono"
-version = "0.4.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
-dependencies = [
- "libc",
- "num-integer",
- "num-traits",
- "winapi",
-]
-
-[[package]]
-name = "chunked_transfer"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fff857943da45f546682664a79488be82e69e43c1a7a2307679ab9afb3a66d2e"
-
-[[package]]
-name = "crossbeam-channel"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4"
-dependencies = [
- "cfg-if",
- "crossbeam-utils",
-]
-
-[[package]]
-name = "crossbeam-deque"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e"
-dependencies = [
- "cfg-if",
- "crossbeam-epoch",
- "crossbeam-utils",
-]
-
-[[package]]
-name = "crossbeam-epoch"
-version = "0.9.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd"
-dependencies = [
- "cfg-if",
- "crossbeam-utils",
- "lazy_static",
- "memoffset",
- "scopeguard",
-]
-
-[[package]]
-name = "crossbeam-utils"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db"
-dependencies = [
- "cfg-if",
- "lazy_static",
-]
-
-[[package]]
-name = "curl"
-version = "0.4.40"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "877cc2f9b8367e32b6dabb9d581557e651cb3aa693a37f8679091bbf42687d5d"
-dependencies = [
- "curl-sys",
- "libc",
- "openssl-probe",
- "openssl-sys",
- "schannel",
- "socket2",
- "winapi",
-]
-
-[[package]]
-name = "curl-sys"
-version = "0.4.50+curl-7.79.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4856b76919dd599f31236bb18db5f5bd36e2ce131e64f857ca5c259665b76171"
-dependencies = [
- "cc",
- "libc",
- "libz-sys",
- "openssl-sys",
- "pkg-config",
- "vcpkg",
- "winapi",
-]
-
-[[package]]
-name = "diff"
-version = "0.1.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499"
-
-[[package]]
-name = "difference"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
-
-[[package]]
-name = "difflib"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
-
-[[package]]
-name = "doc-comment"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
-
-[[package]]
-name = "docopt"
-version = "1.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f3f119846c823f9eafcf953a8f6ffb6ed69bf6240883261a7f13b634579a51f"
-dependencies = [
- "lazy_static",
- "regex",
- "serde",
- "strsim",
-]
-
-[[package]]
-name = "either"
-version = "1.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
-
-[[package]]
-name = "env_logger"
-version = "0.8.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
-dependencies = [
- "atty",
- "humantime",
- "log",
- "regex",
- "termcolor",
-]
-
-[[package]]
-name = "fake_rules_rust_wasm_bindgen_lib"
-version = "0.0.1"
-dependencies = [
- "wasm-bindgen",
-]
-
-[[package]]
-name = "filetime"
-version = "0.2.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98"
-dependencies = [
- "cfg-if",
- "libc",
- "redox_syscall",
- "winapi",
-]
-
-[[package]]
-name = "float-cmp"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1267f4ac4f343772758f7b1bdcbe767c218bbab93bb432acbf5162bbf85a6c4"
-dependencies = [
- "num-traits",
-]
-
-[[package]]
-name = "foreign-types"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
-dependencies = [
- "foreign-types-shared",
-]
-
-[[package]]
-name = "foreign-types-shared"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
-
-[[package]]
-name = "form_urlencoded"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
-dependencies = [
- "matches",
- "percent-encoding",
-]
-
-[[package]]
-name = "getrandom"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
-dependencies = [
- "cfg-if",
- "libc",
- "wasi",
-]
-
-[[package]]
-name = "heck"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
-dependencies = [
- "unicode-segmentation",
-]
-
-[[package]]
-name = "hermit-abi"
-version = "0.1.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "httparse"
-version = "1.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503"
-
-[[package]]
-name = "humantime"
-version = "2.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
-
-[[package]]
-name = "id-arena"
-version = "2.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005"
-dependencies = [
- "rayon",
-]
-
-[[package]]
-name = "idna"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
-dependencies = [
- "matches",
- "unicode-bidi",
- "unicode-normalization",
-]
-
-[[package]]
-name = "itertools"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
-dependencies = [
- "either",
-]
-
-[[package]]
-name = "itoa"
-version = "0.4.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
-
-[[package]]
-name = "lazy_static"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-
-[[package]]
-name = "leb128"
-version = "0.2.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67"
-
-[[package]]
-name = "libc"
-version = "0.2.107"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219"
-
-[[package]]
-name = "libz-sys"
-version = "1.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66"
-dependencies = [
- "cc",
- "libc",
- "pkg-config",
- "vcpkg",
-]
-
-[[package]]
-name = "log"
-version = "0.4.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
-name = "matches"
-version = "0.1.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
-
-[[package]]
-name = "memchr"
-version = "2.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
-
-[[package]]
-name = "memoffset"
-version = "0.6.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "mime"
-version = "0.3.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
-
-[[package]]
-name = "mime_guess"
-version = "2.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212"
-dependencies = [
- "mime",
- "unicase",
-]
-
-[[package]]
-name = "multipart"
-version = "0.18.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182"
-dependencies = [
- "buf_redux",
- "httparse",
- "log",
- "mime",
- "mime_guess",
- "quick-error",
- "rand",
- "safemem",
- "tempfile",
- "twoway",
-]
-
-[[package]]
-name = "normalize-line-endings"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
-
-[[package]]
-name = "num-integer"
-version = "0.1.44"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
-dependencies = [
- "autocfg",
- "num-traits",
-]
-
-[[package]]
-name = "num-traits"
-version = "0.2.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "num_cpus"
-version = "1.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
-dependencies = [
- "hermit-abi",
- "libc",
-]
-
-[[package]]
-name = "once_cell"
-version = "1.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
-
-[[package]]
-name = "openssl"
-version = "0.10.38"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c7ae222234c30df141154f159066c5093ff73b63204dcda7121eb082fc56a95"
-dependencies = [
- "bitflags",
- "cfg-if",
- "foreign-types",
- "libc",
- "once_cell",
- "openssl-sys",
-]
-
-[[package]]
-name = "openssl-probe"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a"
-
-[[package]]
-name = "openssl-src"
-version = "300.0.2+3.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14a760a11390b1a5daf72074d4f6ff1a6e772534ae191f999f57e9ee8146d1fb"
-dependencies = [
- "cc",
-]
-
-[[package]]
-name = "openssl-sys"
-version = "0.9.70"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6517987b3f8226b5da3661dad65ff7f300cc59fb5ea8333ca191fc65fde3edf"
-dependencies = [
- "autocfg",
- "cc",
- "libc",
- "openssl-src",
- "pkg-config",
- "vcpkg",
-]
-
-[[package]]
-name = "percent-encoding"
-version = "2.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
-
-[[package]]
-name = "pkg-config"
-version = "0.3.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12295df4f294471248581bc09bef3c38a5e46f1e36d6a37353621a0c6c357e1f"
-
-[[package]]
-name = "ppv-lite86"
-version = "0.2.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba"
-
-[[package]]
-name = "predicates"
-version = "1.0.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f49cfaf7fdaa3bfacc6fa3e7054e65148878354a5cfddcf661df4c851f8021df"
-dependencies = [
- "difference",
- "float-cmp",
- "normalize-line-endings",
- "predicates-core",
- "regex",
-]
-
-[[package]]
-name = "predicates"
-version = "2.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c6ce811d0b2e103743eec01db1c50612221f173084ce2f7941053e94b6bb474"
-dependencies = [
- "difflib",
- "itertools",
- "predicates-core",
-]
-
-[[package]]
-name = "predicates-core"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57e35a3326b75e49aa85f5dc6ec15b41108cf5aee58eabb1f274dd18b73c2451"
-
-[[package]]
-name = "predicates-tree"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "338c7be2905b732ae3984a2f40032b5e94fd8f52505b186c7d4d68d193445df7"
-dependencies = [
- "predicates-core",
- "termtree",
-]
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.32"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43"
-dependencies = [
- "unicode-xid",
-]
-
-[[package]]
-name = "quick-error"
-version = "1.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
-
-[[package]]
-name = "quote"
-version = "1.0.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "rand"
-version = "0.8.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8"
-dependencies = [
- "libc",
- "rand_chacha",
- "rand_core",
- "rand_hc",
-]
-
-[[package]]
-name = "rand_chacha"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
-dependencies = [
- "ppv-lite86",
- "rand_core",
-]
-
-[[package]]
-name = "rand_core"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
-dependencies = [
- "getrandom",
-]
-
-[[package]]
-name = "rand_hc"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7"
-dependencies = [
- "rand_core",
-]
-
-[[package]]
-name = "rayon"
-version = "1.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90"
-dependencies = [
- "autocfg",
- "crossbeam-deque",
- "either",
- "rayon-core",
-]
-
-[[package]]
-name = "rayon-core"
-version = "1.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e"
-dependencies = [
- "crossbeam-channel",
- "crossbeam-deque",
- "crossbeam-utils",
- "lazy_static",
- "num_cpus",
-]
-
-[[package]]
-name = "redox_syscall"
-version = "0.2.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
-dependencies = [
- "bitflags",
-]
-
-[[package]]
-name = "regex"
-version = "1.5.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-automata"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
-
-[[package]]
-name = "regex-syntax"
-version = "0.6.25"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
-
-[[package]]
-name = "remove_dir_all"
-version = "0.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
-dependencies = [
- "winapi",
-]
-
-[[package]]
-name = "rouille"
-version = "3.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "660f081d053ac1dce7c2683a3f2818d9b60a293bc142e7d3de36fd5541ebb671"
-dependencies = [
- "base64 0.13.0",
- "chrono",
- "filetime",
- "multipart",
- "num_cpus",
- "percent-encoding",
- "rand",
- "serde",
- "serde_derive",
- "serde_json",
- "sha1",
- "threadpool",
- "time",
- "tiny_http",
- "url",
-]
-
-[[package]]
-name = "rustc-demangle"
-version = "0.1.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
-
-[[package]]
-name = "ryu"
-version = "1.0.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
-
-[[package]]
-name = "safemem"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
-
-[[package]]
-name = "schannel"
-version = "0.1.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75"
-dependencies = [
- "lazy_static",
- "winapi",
-]
-
-[[package]]
-name = "scopeguard"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
-
-[[package]]
-name = "serde"
-version = "1.0.130"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913"
-dependencies = [
- "serde_derive",
-]
-
-[[package]]
-name = "serde_derive"
-version = "1.0.130"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "serde_json"
-version = "1.0.69"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e466864e431129c7e0d3476b92f20458e5879919a0596c6472738d9fa2d342f8"
-dependencies = [
- "itoa",
- "ryu",
- "serde",
-]
-
-[[package]]
-name = "sha1"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
-
-[[package]]
-name = "socket2"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516"
-dependencies = [
- "libc",
- "winapi",
-]
-
-[[package]]
-name = "strsim"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
-
-[[package]]
-name = "syn"
-version = "1.0.81"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-xid",
-]
-
-[[package]]
-name = "tempfile"
-version = "3.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"
-dependencies = [
- "cfg-if",
- "libc",
- "rand",
- "redox_syscall",
- "remove_dir_all",
- "winapi",
-]
-
-[[package]]
-name = "termcolor"
-version = "1.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
-dependencies = [
- "winapi-util",
-]
-
-[[package]]
-name = "termtree"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16"
-
-[[package]]
-name = "threadpool"
-version = "1.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
-dependencies = [
- "num_cpus",
-]
-
-[[package]]
-name = "time"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e0a10c9a9fb3a5dce8c2239ed670f1a2569fcf42da035f5face1b19860d52b0"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "tiny_http"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ce51b50006056f590c9b7c3808c3bd70f0d1101666629713866c227d6e58d39"
-dependencies = [
- "ascii",
- "chrono",
- "chunked_transfer",
- "log",
- "url",
-]
-
-[[package]]
-name = "tinyvec"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f83b2a3d4d9091d0abd7eba4dc2710b1718583bd4d8992e2190720ea38f391f7"
-dependencies = [
- "tinyvec_macros",
-]
-
-[[package]]
-name = "tinyvec_macros"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
-
-[[package]]
-name = "twoway"
-version = "0.1.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "unicase"
-version = "2.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
-dependencies = [
- "version_check",
-]
-
-[[package]]
-name = "unicode-bidi"
-version = "0.3.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f"
-
-[[package]]
-name = "unicode-normalization"
-version = "0.1.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
-dependencies = [
- "tinyvec",
-]
-
-[[package]]
-name = "unicode-segmentation"
-version = "1.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
-
-[[package]]
-name = "unicode-xid"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
-
-[[package]]
-name = "url"
-version = "2.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
-dependencies = [
- "form_urlencoded",
- "idna",
- "matches",
- "percent-encoding",
-]
-
-[[package]]
-name = "vcpkg"
-version = "0.2.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
-
-[[package]]
-name = "version_check"
-version = "0.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
-
-[[package]]
-name = "wait-timeout"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "walrus"
-version = "0.19.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4eb08e48cde54c05f363d984bb54ce374f49e242def9468d2e1b6c2372d291f8"
-dependencies = [
- "anyhow",
- "id-arena",
- "leb128",
- "log",
- "rayon",
- "walrus-macro",
- "wasmparser 0.77.0",
-]
-
-[[package]]
-name = "walrus-macro"
-version = "0.19.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a6e5bd22c71e77d60140b0bd5be56155a37e5bd14e24f5f87298040d0cc40d7"
-dependencies = [
- "heck",
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "wasi"
-version = "0.10.2+wasi-snapshot-preview1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
-
-[[package]]
-name = "wasm-bindgen"
-version = "0.2.78"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce"
-dependencies = [
- "cfg-if",
- "wasm-bindgen-macro",
-]
-
-[[package]]
-name = "wasm-bindgen-backend"
-version = "0.2.78"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b"
-dependencies = [
- "bumpalo",
- "lazy_static",
- "log",
- "proc-macro2",
- "quote",
- "syn",
- "wasm-bindgen-shared",
-]
-
-[[package]]
-name = "wasm-bindgen-cli"
-version = "0.2.78"
-dependencies = [
- "anyhow",
- "assert_cmd",
- "curl",
- "diff",
- "docopt",
- "env_logger",
- "log",
- "openssl",
- "predicates 1.0.8",
- "rayon",
- "rouille",
- "serde",
- "serde_derive",
- "serde_json",
- "tempfile",
- "walrus",
- "wasm-bindgen-cli-support",
- "wasm-bindgen-shared",
- "wit-printer",
- "wit-text",
- "wit-validator",
- "wit-walrus",
-]
-
-[[package]]
-name = "wasm-bindgen-cli-support"
-version = "0.2.78"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "676406c3960cf7d5a581f13e6015d9aff1521042510fd5139cf47baad2eb8a28"
-dependencies = [
- "anyhow",
- "base64 0.9.3",
- "log",
- "rustc-demangle",
- "serde_json",
- "tempfile",
- "walrus",
- "wasm-bindgen-externref-xform",
- "wasm-bindgen-multi-value-xform",
- "wasm-bindgen-shared",
- "wasm-bindgen-threads-xform",
- "wasm-bindgen-wasm-conventions",
- "wasm-bindgen-wasm-interpreter",
- "wit-text",
- "wit-validator",
- "wit-walrus",
-]
-
-[[package]]
-name = "wasm-bindgen-externref-xform"
-version = "0.2.78"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "47be83b4ede14262d9ff7a748ef956f9d78cca20097dcdd12b0214e7960d5f98"
-dependencies = [
- "anyhow",
- "walrus",
-]
-
-[[package]]
-name = "wasm-bindgen-macro"
-version = "0.2.78"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9"
-dependencies = [
- "quote",
- "wasm-bindgen-macro-support",
-]
-
-[[package]]
-name = "wasm-bindgen-macro-support"
-version = "0.2.78"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
- "wasm-bindgen-backend",
- "wasm-bindgen-shared",
-]
-
-[[package]]
-name = "wasm-bindgen-multi-value-xform"
-version = "0.2.78"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97fe4a0115972f946060752b2a2cbf7d40a54715e4478b4b157dba1070b7f1b4"
-dependencies = [
- "anyhow",
- "walrus",
-]
-
-[[package]]
-name = "wasm-bindgen-shared"
-version = "0.2.78"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc"
-
-[[package]]
-name = "wasm-bindgen-threads-xform"
-version = "0.2.78"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d6e689ab91f6489df7790a853869cfbfe4c765a75714007be0f54277f8f0cca"
-dependencies = [
- "anyhow",
- "walrus",
- "wasm-bindgen-wasm-conventions",
-]
-
-[[package]]
-name = "wasm-bindgen-wasm-conventions"
-version = "0.2.78"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "811ac791b372687313fb22316a924e5828d1bfb3a100784e1f4eef348042a173"
-dependencies = [
- "anyhow",
- "walrus",
-]
-
-[[package]]
-name = "wasm-bindgen-wasm-interpreter"
-version = "0.2.78"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "676462889d49300b5958686a633c0e1991fd1633cf45d41b05ca3c530c411b7f"
-dependencies = [
- "anyhow",
- "log",
- "walrus",
- "wasm-bindgen-wasm-conventions",
-]
-
-[[package]]
-name = "wasmparser"
-version = "0.59.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a950e6a618f62147fd514ff445b2a0b53120d382751960797f85f058c7eda9b9"
-
-[[package]]
-name = "wasmparser"
-version = "0.77.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b35c86d22e720a07d954ebbed772d01180501afe7d03d464f413bb5f8914a8d6"
-
-[[package]]
-name = "wasmparser"
-version = "0.81.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "98930446519f63d00a836efdc22f67766ceae8dbcc1571379f2bcabc6b2b9abc"
-
-[[package]]
-name = "wasmprinter"
-version = "0.2.31"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a00ad4a51ba74183137c776ab37dea50b9f71db7454d7b654c2ba69ac5d9b223"
-dependencies = [
- "anyhow",
- "wasmparser 0.81.0",
-]
-
-[[package]]
-name = "wast"
-version = "21.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b1844f66a2bc8526d71690104c0e78a8e59ffa1597b7245769d174ebb91deb5"
-dependencies = [
- "leb128",
-]
-
-[[package]]
-name = "winapi"
-version = "0.3.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-dependencies = [
- "winapi-i686-pc-windows-gnu",
- "winapi-x86_64-pc-windows-gnu",
-]
-
-[[package]]
-name = "winapi-i686-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-
-[[package]]
-name = "winapi-util"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
-dependencies = [
- "winapi",
-]
-
-[[package]]
-name = "winapi-x86_64-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-
-[[package]]
-name = "wit-parser"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f5fd97866f4b9c8e1ed57bcf9446f3d0d8ba37e2dd01c3c612c046c053b06f7"
-dependencies = [
- "anyhow",
- "leb128",
- "wit-schema-version",
-]
-
-[[package]]
-name = "wit-printer"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93f19ca44555a3c14d69acee6447a6e4f52771b0c6e5d8db3e42db3b90f6fce9"
-dependencies = [
- "anyhow",
- "wasmprinter",
- "wit-parser",
- "wit-schema-version",
-]
-
-[[package]]
-name = "wit-schema-version"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfee4a6a4716eefa0682e7a3b836152e894a3e4f34a9d6c2c3e1c94429bfe36a"
-
-[[package]]
-name = "wit-text"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33358e95c77d660f1c7c07f4a93c2bd89768965e844e3c50730bb4b42658df5f"
-dependencies = [
- "anyhow",
- "wast",
- "wit-writer",
-]
-
-[[package]]
-name = "wit-validator"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c11d93d925420e7872b226c4161849c32be38385ccab026b88df99d8ddc6ba6"
-dependencies = [
- "anyhow",
- "wasmparser 0.59.0",
- "wit-parser",
- "wit-schema-version",
-]
-
-[[package]]
-name = "wit-walrus"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad559e3e4c6404b2a6a675d44129d62a3836e3b951b90112fa1c5feb852757cd"
-dependencies = [
- "anyhow",
- "id-arena",
- "walrus",
- "wit-parser",
- "wit-schema-version",
- "wit-writer",
-]
-
-[[package]]
-name = "wit-writer"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2ad01ba5e9cbcff799a0689e56a153776ea694cec777f605938cb9880d41a09"
-dependencies = [
- "leb128",
- "wit-schema-version",
-]
diff --git a/third_party/rules_rust/wasm_bindgen/raze/Cargo.toml b/third_party/rules_rust/wasm_bindgen/raze/Cargo.toml
deleted file mode 100644
index cd901c4..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/Cargo.toml
+++ /dev/null
@@ -1,62 +0,0 @@
-[package]
-name = "fake_rules_rust_wasm_bindgen_lib"
-version = "0.0.1"
-
-[lib]
-path = "fake_rules_rust_wasm_bindgen_lib.rs"
-
-[dependencies]
-wasm-bindgen = "0.2.78"
-
-[package.metadata.raze]
-genmode = "Remote"
-workspace_path = "//wasm_bindgen/raze"
-gen_workspace_prefix = "rules_rust_wasm_bindgen"
-rust_rules_workspace_name = "rules_rust"
-package_aliases_dir = "."
-default_gen_buildrs = true
-
-[package.metadata.raze.binary_deps]
-wasm-bindgen-cli = "0.2.78"
-
-[package.metadata.raze.crates.curl-sys.'*']
-gen_buildrs = false
-
-[package.metadata.raze.crates.log.'<5']
-additional_flags = [
-    "--cfg=atomic_cas",
-    "--cfg=use_std",
-]
-
-[package.metadata.raze.crates.openssl-sys.'*']
-gen_buildrs = false
-additional_flags = [
-  # Vendored openssl is 1.0.2m
-  "--cfg=ossl101",
-  "--cfg=ossl102",
-  "--cfg=ossl102f",
-  "--cfg=ossl102h",
-  "--cfg=ossl110",
-  "--cfg=ossl110f",
-  "--cfg=ossl110g",
-  "--cfg=ossl111",
-  "--cfg=ossl111b",
-  "-l",
-  "dylib=ssl",
-  "-l",
-  "dylib=crypto",
-]
-
-[package.metadata.raze.crates.proc-macro2.'*']
-additional_flags = [
-    "--cfg=use_proc_macro",
-]
-
-[package.metadata.raze.crates.unicase.'*']
-additional_flags = [
-  "--cfg=__unicase__iter_cmp",
-  "--cfg=__unicase__defauler_hasher",
-]
-
-[package.metadata.raze.crates.wasm-bindgen-cli.'*']
-extra_aliased_targets = ["cargo_bin_wasm_bindgen"]
diff --git a/third_party/rules_rust/wasm_bindgen/raze/crates.bzl b/third_party/rules_rust/wasm_bindgen/raze/crates.bzl
deleted file mode 100644
index 7addcce..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/crates.bzl
+++ /dev/null
@@ -1,1432 +0,0 @@
-"""
-@generated
-cargo-raze generated Bazel file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-load("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository")  # buildifier: disable=load
-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")  # buildifier: disable=load
-load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")  # buildifier: disable=load
-
-def rules_rust_wasm_bindgen_fetch_remote_crates():
-    """This function defines a collection of repos and should be called in a WORKSPACE file"""
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__aho_corasick__0_7_18",
-        url = "https://crates.io/api/v1/crates/aho-corasick/0.7.18/download",
-        type = "tar.gz",
-        sha256 = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f",
-        strip_prefix = "aho-corasick-0.7.18",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.aho-corasick-0.7.18.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__anyhow__1_0_45",
-        url = "https://crates.io/api/v1/crates/anyhow/1.0.45/download",
-        type = "tar.gz",
-        sha256 = "ee10e43ae4a853c0a3591d4e2ada1719e553be18199d9da9d4a83f5927c2f5c7",
-        strip_prefix = "anyhow-1.0.45",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.anyhow-1.0.45.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__ascii__1_0_0",
-        url = "https://crates.io/api/v1/crates/ascii/1.0.0/download",
-        type = "tar.gz",
-        sha256 = "bbf56136a5198c7b01a49e3afcbef6cf84597273d298f54432926024107b0109",
-        strip_prefix = "ascii-1.0.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.ascii-1.0.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__assert_cmd__1_0_8",
-        url = "https://crates.io/api/v1/crates/assert_cmd/1.0.8/download",
-        type = "tar.gz",
-        sha256 = "c98233c6673d8601ab23e77eb38f999c51100d46c5703b17288c57fddf3a1ffe",
-        strip_prefix = "assert_cmd-1.0.8",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.assert_cmd-1.0.8.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__atty__0_2_14",
-        url = "https://crates.io/api/v1/crates/atty/0.2.14/download",
-        type = "tar.gz",
-        sha256 = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8",
-        strip_prefix = "atty-0.2.14",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.atty-0.2.14.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__autocfg__1_0_1",
-        url = "https://crates.io/api/v1/crates/autocfg/1.0.1/download",
-        type = "tar.gz",
-        sha256 = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a",
-        strip_prefix = "autocfg-1.0.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.autocfg-1.0.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__base64__0_13_0",
-        url = "https://crates.io/api/v1/crates/base64/0.13.0/download",
-        type = "tar.gz",
-        sha256 = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd",
-        strip_prefix = "base64-0.13.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.base64-0.13.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__base64__0_9_3",
-        url = "https://crates.io/api/v1/crates/base64/0.9.3/download",
-        type = "tar.gz",
-        sha256 = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643",
-        strip_prefix = "base64-0.9.3",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.base64-0.9.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__bitflags__1_3_2",
-        url = "https://crates.io/api/v1/crates/bitflags/1.3.2/download",
-        type = "tar.gz",
-        sha256 = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a",
-        strip_prefix = "bitflags-1.3.2",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.bitflags-1.3.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__bstr__0_2_17",
-        url = "https://crates.io/api/v1/crates/bstr/0.2.17/download",
-        type = "tar.gz",
-        sha256 = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223",
-        strip_prefix = "bstr-0.2.17",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.bstr-0.2.17.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__buf_redux__0_8_4",
-        url = "https://crates.io/api/v1/crates/buf_redux/0.8.4/download",
-        type = "tar.gz",
-        sha256 = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f",
-        strip_prefix = "buf_redux-0.8.4",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.buf_redux-0.8.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__bumpalo__3_8_0",
-        url = "https://crates.io/api/v1/crates/bumpalo/3.8.0/download",
-        type = "tar.gz",
-        sha256 = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c",
-        strip_prefix = "bumpalo-3.8.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.bumpalo-3.8.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__byteorder__1_4_3",
-        url = "https://crates.io/api/v1/crates/byteorder/1.4.3/download",
-        type = "tar.gz",
-        sha256 = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610",
-        strip_prefix = "byteorder-1.4.3",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.byteorder-1.4.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__cc__1_0_71",
-        url = "https://crates.io/api/v1/crates/cc/1.0.71/download",
-        type = "tar.gz",
-        sha256 = "79c2681d6594606957bbb8631c4b90a7fcaaa72cdb714743a437b156d6a7eedd",
-        strip_prefix = "cc-1.0.71",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.cc-1.0.71.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__cfg_if__1_0_0",
-        url = "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
-        type = "tar.gz",
-        sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd",
-        strip_prefix = "cfg-if-1.0.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.cfg-if-1.0.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__chrono__0_4_19",
-        url = "https://crates.io/api/v1/crates/chrono/0.4.19/download",
-        type = "tar.gz",
-        sha256 = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73",
-        strip_prefix = "chrono-0.4.19",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.chrono-0.4.19.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__chunked_transfer__1_4_0",
-        url = "https://crates.io/api/v1/crates/chunked_transfer/1.4.0/download",
-        type = "tar.gz",
-        sha256 = "fff857943da45f546682664a79488be82e69e43c1a7a2307679ab9afb3a66d2e",
-        strip_prefix = "chunked_transfer-1.4.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.chunked_transfer-1.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__crossbeam_channel__0_5_1",
-        url = "https://crates.io/api/v1/crates/crossbeam-channel/0.5.1/download",
-        type = "tar.gz",
-        sha256 = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4",
-        strip_prefix = "crossbeam-channel-0.5.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.crossbeam-channel-0.5.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__crossbeam_deque__0_8_1",
-        url = "https://crates.io/api/v1/crates/crossbeam-deque/0.8.1/download",
-        type = "tar.gz",
-        sha256 = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e",
-        strip_prefix = "crossbeam-deque-0.8.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.crossbeam-deque-0.8.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__crossbeam_epoch__0_9_5",
-        url = "https://crates.io/api/v1/crates/crossbeam-epoch/0.9.5/download",
-        type = "tar.gz",
-        sha256 = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd",
-        strip_prefix = "crossbeam-epoch-0.9.5",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.crossbeam-epoch-0.9.5.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__crossbeam_utils__0_8_5",
-        url = "https://crates.io/api/v1/crates/crossbeam-utils/0.8.5/download",
-        type = "tar.gz",
-        sha256 = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db",
-        strip_prefix = "crossbeam-utils-0.8.5",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.crossbeam-utils-0.8.5.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__curl__0_4_40",
-        url = "https://crates.io/api/v1/crates/curl/0.4.40/download",
-        type = "tar.gz",
-        sha256 = "877cc2f9b8367e32b6dabb9d581557e651cb3aa693a37f8679091bbf42687d5d",
-        strip_prefix = "curl-0.4.40",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.curl-0.4.40.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__curl_sys__0_4_50_curl_7_79_1",
-        url = "https://crates.io/api/v1/crates/curl-sys/0.4.50+curl-7.79.1/download",
-        type = "tar.gz",
-        sha256 = "4856b76919dd599f31236bb18db5f5bd36e2ce131e64f857ca5c259665b76171",
-        strip_prefix = "curl-sys-0.4.50+curl-7.79.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.curl-sys-0.4.50+curl-7.79.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__diff__0_1_12",
-        url = "https://crates.io/api/v1/crates/diff/0.1.12/download",
-        type = "tar.gz",
-        sha256 = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499",
-        strip_prefix = "diff-0.1.12",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.diff-0.1.12.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__difference__2_0_0",
-        url = "https://crates.io/api/v1/crates/difference/2.0.0/download",
-        type = "tar.gz",
-        sha256 = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198",
-        strip_prefix = "difference-2.0.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.difference-2.0.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__difflib__0_4_0",
-        url = "https://crates.io/api/v1/crates/difflib/0.4.0/download",
-        type = "tar.gz",
-        sha256 = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8",
-        strip_prefix = "difflib-0.4.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.difflib-0.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__doc_comment__0_3_3",
-        url = "https://crates.io/api/v1/crates/doc-comment/0.3.3/download",
-        type = "tar.gz",
-        sha256 = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10",
-        strip_prefix = "doc-comment-0.3.3",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.doc-comment-0.3.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__docopt__1_1_1",
-        url = "https://crates.io/api/v1/crates/docopt/1.1.1/download",
-        type = "tar.gz",
-        sha256 = "7f3f119846c823f9eafcf953a8f6ffb6ed69bf6240883261a7f13b634579a51f",
-        strip_prefix = "docopt-1.1.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.docopt-1.1.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__either__1_6_1",
-        url = "https://crates.io/api/v1/crates/either/1.6.1/download",
-        type = "tar.gz",
-        sha256 = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457",
-        strip_prefix = "either-1.6.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.either-1.6.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__env_logger__0_8_4",
-        url = "https://crates.io/api/v1/crates/env_logger/0.8.4/download",
-        type = "tar.gz",
-        sha256 = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3",
-        strip_prefix = "env_logger-0.8.4",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.env_logger-0.8.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__filetime__0_2_15",
-        url = "https://crates.io/api/v1/crates/filetime/0.2.15/download",
-        type = "tar.gz",
-        sha256 = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98",
-        strip_prefix = "filetime-0.2.15",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.filetime-0.2.15.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__float_cmp__0_8_0",
-        url = "https://crates.io/api/v1/crates/float-cmp/0.8.0/download",
-        type = "tar.gz",
-        sha256 = "e1267f4ac4f343772758f7b1bdcbe767c218bbab93bb432acbf5162bbf85a6c4",
-        strip_prefix = "float-cmp-0.8.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.float-cmp-0.8.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__form_urlencoded__1_0_1",
-        url = "https://crates.io/api/v1/crates/form_urlencoded/1.0.1/download",
-        type = "tar.gz",
-        sha256 = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191",
-        strip_prefix = "form_urlencoded-1.0.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.form_urlencoded-1.0.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__getrandom__0_2_3",
-        url = "https://crates.io/api/v1/crates/getrandom/0.2.3/download",
-        type = "tar.gz",
-        sha256 = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753",
-        strip_prefix = "getrandom-0.2.3",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.getrandom-0.2.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__heck__0_3_3",
-        url = "https://crates.io/api/v1/crates/heck/0.3.3/download",
-        type = "tar.gz",
-        sha256 = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c",
-        strip_prefix = "heck-0.3.3",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.heck-0.3.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__hermit_abi__0_1_19",
-        url = "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download",
-        type = "tar.gz",
-        sha256 = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33",
-        strip_prefix = "hermit-abi-0.1.19",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.hermit-abi-0.1.19.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__httparse__1_5_1",
-        url = "https://crates.io/api/v1/crates/httparse/1.5.1/download",
-        type = "tar.gz",
-        sha256 = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503",
-        strip_prefix = "httparse-1.5.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.httparse-1.5.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__humantime__2_1_0",
-        url = "https://crates.io/api/v1/crates/humantime/2.1.0/download",
-        type = "tar.gz",
-        sha256 = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4",
-        strip_prefix = "humantime-2.1.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.humantime-2.1.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__id_arena__2_2_1",
-        url = "https://crates.io/api/v1/crates/id-arena/2.2.1/download",
-        type = "tar.gz",
-        sha256 = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005",
-        strip_prefix = "id-arena-2.2.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.id-arena-2.2.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__idna__0_2_3",
-        url = "https://crates.io/api/v1/crates/idna/0.2.3/download",
-        type = "tar.gz",
-        sha256 = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8",
-        strip_prefix = "idna-0.2.3",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.idna-0.2.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__itertools__0_10_1",
-        url = "https://crates.io/api/v1/crates/itertools/0.10.1/download",
-        type = "tar.gz",
-        sha256 = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf",
-        strip_prefix = "itertools-0.10.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.itertools-0.10.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__itoa__0_4_8",
-        url = "https://crates.io/api/v1/crates/itoa/0.4.8/download",
-        type = "tar.gz",
-        sha256 = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4",
-        strip_prefix = "itoa-0.4.8",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.itoa-0.4.8.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__lazy_static__1_4_0",
-        url = "https://crates.io/api/v1/crates/lazy_static/1.4.0/download",
-        type = "tar.gz",
-        sha256 = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646",
-        strip_prefix = "lazy_static-1.4.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.lazy_static-1.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__leb128__0_2_5",
-        url = "https://crates.io/api/v1/crates/leb128/0.2.5/download",
-        type = "tar.gz",
-        sha256 = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67",
-        strip_prefix = "leb128-0.2.5",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.leb128-0.2.5.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__libc__0_2_107",
-        url = "https://crates.io/api/v1/crates/libc/0.2.107/download",
-        type = "tar.gz",
-        sha256 = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219",
-        strip_prefix = "libc-0.2.107",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.libc-0.2.107.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__libz_sys__1_1_3",
-        url = "https://crates.io/api/v1/crates/libz-sys/1.1.3/download",
-        type = "tar.gz",
-        sha256 = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66",
-        strip_prefix = "libz-sys-1.1.3",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.libz-sys-1.1.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__log__0_4_14",
-        url = "https://crates.io/api/v1/crates/log/0.4.14/download",
-        type = "tar.gz",
-        sha256 = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710",
-        strip_prefix = "log-0.4.14",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.log-0.4.14.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__matches__0_1_9",
-        url = "https://crates.io/api/v1/crates/matches/0.1.9/download",
-        type = "tar.gz",
-        sha256 = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f",
-        strip_prefix = "matches-0.1.9",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.matches-0.1.9.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__memchr__2_4_1",
-        url = "https://crates.io/api/v1/crates/memchr/2.4.1/download",
-        type = "tar.gz",
-        sha256 = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a",
-        strip_prefix = "memchr-2.4.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.memchr-2.4.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__memoffset__0_6_4",
-        url = "https://crates.io/api/v1/crates/memoffset/0.6.4/download",
-        type = "tar.gz",
-        sha256 = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9",
-        strip_prefix = "memoffset-0.6.4",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.memoffset-0.6.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__mime__0_3_16",
-        url = "https://crates.io/api/v1/crates/mime/0.3.16/download",
-        type = "tar.gz",
-        sha256 = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d",
-        strip_prefix = "mime-0.3.16",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.mime-0.3.16.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__mime_guess__2_0_3",
-        url = "https://crates.io/api/v1/crates/mime_guess/2.0.3/download",
-        type = "tar.gz",
-        sha256 = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212",
-        strip_prefix = "mime_guess-2.0.3",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.mime_guess-2.0.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__multipart__0_18_0",
-        url = "https://crates.io/api/v1/crates/multipart/0.18.0/download",
-        type = "tar.gz",
-        sha256 = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182",
-        strip_prefix = "multipart-0.18.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.multipart-0.18.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__normalize_line_endings__0_3_0",
-        url = "https://crates.io/api/v1/crates/normalize-line-endings/0.3.0/download",
-        type = "tar.gz",
-        sha256 = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be",
-        strip_prefix = "normalize-line-endings-0.3.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.normalize-line-endings-0.3.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__num_integer__0_1_44",
-        url = "https://crates.io/api/v1/crates/num-integer/0.1.44/download",
-        type = "tar.gz",
-        sha256 = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db",
-        strip_prefix = "num-integer-0.1.44",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.num-integer-0.1.44.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__num_traits__0_2_14",
-        url = "https://crates.io/api/v1/crates/num-traits/0.2.14/download",
-        type = "tar.gz",
-        sha256 = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290",
-        strip_prefix = "num-traits-0.2.14",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.num-traits-0.2.14.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__num_cpus__1_13_0",
-        url = "https://crates.io/api/v1/crates/num_cpus/1.13.0/download",
-        type = "tar.gz",
-        sha256 = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3",
-        strip_prefix = "num_cpus-1.13.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.num_cpus-1.13.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__openssl_probe__0_1_4",
-        url = "https://crates.io/api/v1/crates/openssl-probe/0.1.4/download",
-        type = "tar.gz",
-        sha256 = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a",
-        strip_prefix = "openssl-probe-0.1.4",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.openssl-probe-0.1.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__openssl_sys__0_9_70",
-        url = "https://crates.io/api/v1/crates/openssl-sys/0.9.70/download",
-        type = "tar.gz",
-        sha256 = "c6517987b3f8226b5da3661dad65ff7f300cc59fb5ea8333ca191fc65fde3edf",
-        strip_prefix = "openssl-sys-0.9.70",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.openssl-sys-0.9.70.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__percent_encoding__2_1_0",
-        url = "https://crates.io/api/v1/crates/percent-encoding/2.1.0/download",
-        type = "tar.gz",
-        sha256 = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e",
-        strip_prefix = "percent-encoding-2.1.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.percent-encoding-2.1.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__pkg_config__0_3_22",
-        url = "https://crates.io/api/v1/crates/pkg-config/0.3.22/download",
-        type = "tar.gz",
-        sha256 = "12295df4f294471248581bc09bef3c38a5e46f1e36d6a37353621a0c6c357e1f",
-        strip_prefix = "pkg-config-0.3.22",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.pkg-config-0.3.22.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__ppv_lite86__0_2_15",
-        url = "https://crates.io/api/v1/crates/ppv-lite86/0.2.15/download",
-        type = "tar.gz",
-        sha256 = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba",
-        strip_prefix = "ppv-lite86-0.2.15",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.ppv-lite86-0.2.15.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__predicates__1_0_8",
-        url = "https://crates.io/api/v1/crates/predicates/1.0.8/download",
-        type = "tar.gz",
-        sha256 = "f49cfaf7fdaa3bfacc6fa3e7054e65148878354a5cfddcf661df4c851f8021df",
-        strip_prefix = "predicates-1.0.8",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.predicates-1.0.8.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__predicates__2_0_3",
-        url = "https://crates.io/api/v1/crates/predicates/2.0.3/download",
-        type = "tar.gz",
-        sha256 = "5c6ce811d0b2e103743eec01db1c50612221f173084ce2f7941053e94b6bb474",
-        strip_prefix = "predicates-2.0.3",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.predicates-2.0.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__predicates_core__1_0_2",
-        url = "https://crates.io/api/v1/crates/predicates-core/1.0.2/download",
-        type = "tar.gz",
-        sha256 = "57e35a3326b75e49aa85f5dc6ec15b41108cf5aee58eabb1f274dd18b73c2451",
-        strip_prefix = "predicates-core-1.0.2",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.predicates-core-1.0.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__predicates_tree__1_0_4",
-        url = "https://crates.io/api/v1/crates/predicates-tree/1.0.4/download",
-        type = "tar.gz",
-        sha256 = "338c7be2905b732ae3984a2f40032b5e94fd8f52505b186c7d4d68d193445df7",
-        strip_prefix = "predicates-tree-1.0.4",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.predicates-tree-1.0.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__proc_macro2__1_0_32",
-        url = "https://crates.io/api/v1/crates/proc-macro2/1.0.32/download",
-        type = "tar.gz",
-        sha256 = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43",
-        strip_prefix = "proc-macro2-1.0.32",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.proc-macro2-1.0.32.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__quick_error__1_2_3",
-        url = "https://crates.io/api/v1/crates/quick-error/1.2.3/download",
-        type = "tar.gz",
-        sha256 = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0",
-        strip_prefix = "quick-error-1.2.3",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.quick-error-1.2.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__quote__1_0_10",
-        url = "https://crates.io/api/v1/crates/quote/1.0.10/download",
-        type = "tar.gz",
-        sha256 = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05",
-        strip_prefix = "quote-1.0.10",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.quote-1.0.10.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__rand__0_8_4",
-        url = "https://crates.io/api/v1/crates/rand/0.8.4/download",
-        type = "tar.gz",
-        sha256 = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8",
-        strip_prefix = "rand-0.8.4",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.rand-0.8.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__rand_chacha__0_3_1",
-        url = "https://crates.io/api/v1/crates/rand_chacha/0.3.1/download",
-        type = "tar.gz",
-        sha256 = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88",
-        strip_prefix = "rand_chacha-0.3.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.rand_chacha-0.3.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__rand_core__0_6_3",
-        url = "https://crates.io/api/v1/crates/rand_core/0.6.3/download",
-        type = "tar.gz",
-        sha256 = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7",
-        strip_prefix = "rand_core-0.6.3",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.rand_core-0.6.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__rand_hc__0_3_1",
-        url = "https://crates.io/api/v1/crates/rand_hc/0.3.1/download",
-        type = "tar.gz",
-        sha256 = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7",
-        strip_prefix = "rand_hc-0.3.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.rand_hc-0.3.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__rayon__1_5_1",
-        url = "https://crates.io/api/v1/crates/rayon/1.5.1/download",
-        type = "tar.gz",
-        sha256 = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90",
-        strip_prefix = "rayon-1.5.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.rayon-1.5.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__rayon_core__1_9_1",
-        url = "https://crates.io/api/v1/crates/rayon-core/1.9.1/download",
-        type = "tar.gz",
-        sha256 = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e",
-        strip_prefix = "rayon-core-1.9.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.rayon-core-1.9.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__redox_syscall__0_2_10",
-        url = "https://crates.io/api/v1/crates/redox_syscall/0.2.10/download",
-        type = "tar.gz",
-        sha256 = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff",
-        strip_prefix = "redox_syscall-0.2.10",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.redox_syscall-0.2.10.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__regex__1_5_4",
-        url = "https://crates.io/api/v1/crates/regex/1.5.4/download",
-        type = "tar.gz",
-        sha256 = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461",
-        strip_prefix = "regex-1.5.4",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.regex-1.5.4.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__regex_automata__0_1_10",
-        url = "https://crates.io/api/v1/crates/regex-automata/0.1.10/download",
-        type = "tar.gz",
-        sha256 = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132",
-        strip_prefix = "regex-automata-0.1.10",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.regex-automata-0.1.10.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__regex_syntax__0_6_25",
-        url = "https://crates.io/api/v1/crates/regex-syntax/0.6.25/download",
-        type = "tar.gz",
-        sha256 = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b",
-        strip_prefix = "regex-syntax-0.6.25",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.regex-syntax-0.6.25.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__remove_dir_all__0_5_3",
-        url = "https://crates.io/api/v1/crates/remove_dir_all/0.5.3/download",
-        type = "tar.gz",
-        sha256 = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7",
-        strip_prefix = "remove_dir_all-0.5.3",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.remove_dir_all-0.5.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__rouille__3_4_0",
-        url = "https://crates.io/api/v1/crates/rouille/3.4.0/download",
-        type = "tar.gz",
-        sha256 = "660f081d053ac1dce7c2683a3f2818d9b60a293bc142e7d3de36fd5541ebb671",
-        strip_prefix = "rouille-3.4.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.rouille-3.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__rustc_demangle__0_1_21",
-        url = "https://crates.io/api/v1/crates/rustc-demangle/0.1.21/download",
-        type = "tar.gz",
-        sha256 = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342",
-        strip_prefix = "rustc-demangle-0.1.21",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.rustc-demangle-0.1.21.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__ryu__1_0_5",
-        url = "https://crates.io/api/v1/crates/ryu/1.0.5/download",
-        type = "tar.gz",
-        sha256 = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e",
-        strip_prefix = "ryu-1.0.5",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.ryu-1.0.5.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__safemem__0_3_3",
-        url = "https://crates.io/api/v1/crates/safemem/0.3.3/download",
-        type = "tar.gz",
-        sha256 = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072",
-        strip_prefix = "safemem-0.3.3",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.safemem-0.3.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__schannel__0_1_19",
-        url = "https://crates.io/api/v1/crates/schannel/0.1.19/download",
-        type = "tar.gz",
-        sha256 = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75",
-        strip_prefix = "schannel-0.1.19",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.schannel-0.1.19.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__scopeguard__1_1_0",
-        url = "https://crates.io/api/v1/crates/scopeguard/1.1.0/download",
-        type = "tar.gz",
-        sha256 = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd",
-        strip_prefix = "scopeguard-1.1.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.scopeguard-1.1.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__serde__1_0_130",
-        url = "https://crates.io/api/v1/crates/serde/1.0.130/download",
-        type = "tar.gz",
-        sha256 = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913",
-        strip_prefix = "serde-1.0.130",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.serde-1.0.130.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__serde_derive__1_0_130",
-        url = "https://crates.io/api/v1/crates/serde_derive/1.0.130/download",
-        type = "tar.gz",
-        sha256 = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b",
-        strip_prefix = "serde_derive-1.0.130",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.serde_derive-1.0.130.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__serde_json__1_0_69",
-        url = "https://crates.io/api/v1/crates/serde_json/1.0.69/download",
-        type = "tar.gz",
-        sha256 = "e466864e431129c7e0d3476b92f20458e5879919a0596c6472738d9fa2d342f8",
-        strip_prefix = "serde_json-1.0.69",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.serde_json-1.0.69.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__sha1__0_6_0",
-        url = "https://crates.io/api/v1/crates/sha1/0.6.0/download",
-        type = "tar.gz",
-        sha256 = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d",
-        strip_prefix = "sha1-0.6.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.sha1-0.6.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__socket2__0_4_2",
-        url = "https://crates.io/api/v1/crates/socket2/0.4.2/download",
-        type = "tar.gz",
-        sha256 = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516",
-        strip_prefix = "socket2-0.4.2",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.socket2-0.4.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__strsim__0_10_0",
-        url = "https://crates.io/api/v1/crates/strsim/0.10.0/download",
-        type = "tar.gz",
-        sha256 = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623",
-        strip_prefix = "strsim-0.10.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.strsim-0.10.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__syn__1_0_81",
-        url = "https://crates.io/api/v1/crates/syn/1.0.81/download",
-        type = "tar.gz",
-        sha256 = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966",
-        strip_prefix = "syn-1.0.81",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.syn-1.0.81.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__tempfile__3_2_0",
-        url = "https://crates.io/api/v1/crates/tempfile/3.2.0/download",
-        type = "tar.gz",
-        sha256 = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22",
-        strip_prefix = "tempfile-3.2.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.tempfile-3.2.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__termcolor__1_1_2",
-        url = "https://crates.io/api/v1/crates/termcolor/1.1.2/download",
-        type = "tar.gz",
-        sha256 = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4",
-        strip_prefix = "termcolor-1.1.2",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.termcolor-1.1.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__termtree__0_2_3",
-        url = "https://crates.io/api/v1/crates/termtree/0.2.3/download",
-        type = "tar.gz",
-        sha256 = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16",
-        strip_prefix = "termtree-0.2.3",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.termtree-0.2.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__threadpool__1_8_1",
-        url = "https://crates.io/api/v1/crates/threadpool/1.8.1/download",
-        type = "tar.gz",
-        sha256 = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa",
-        strip_prefix = "threadpool-1.8.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.threadpool-1.8.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__time__0_3_2",
-        url = "https://crates.io/api/v1/crates/time/0.3.2/download",
-        type = "tar.gz",
-        sha256 = "3e0a10c9a9fb3a5dce8c2239ed670f1a2569fcf42da035f5face1b19860d52b0",
-        strip_prefix = "time-0.3.2",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.time-0.3.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__tiny_http__0_8_2",
-        url = "https://crates.io/api/v1/crates/tiny_http/0.8.2/download",
-        type = "tar.gz",
-        sha256 = "9ce51b50006056f590c9b7c3808c3bd70f0d1101666629713866c227d6e58d39",
-        strip_prefix = "tiny_http-0.8.2",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.tiny_http-0.8.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__tinyvec__1_5_0",
-        url = "https://crates.io/api/v1/crates/tinyvec/1.5.0/download",
-        type = "tar.gz",
-        sha256 = "f83b2a3d4d9091d0abd7eba4dc2710b1718583bd4d8992e2190720ea38f391f7",
-        strip_prefix = "tinyvec-1.5.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.tinyvec-1.5.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__tinyvec_macros__0_1_0",
-        url = "https://crates.io/api/v1/crates/tinyvec_macros/0.1.0/download",
-        type = "tar.gz",
-        sha256 = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c",
-        strip_prefix = "tinyvec_macros-0.1.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.tinyvec_macros-0.1.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__twoway__0_1_8",
-        url = "https://crates.io/api/v1/crates/twoway/0.1.8/download",
-        type = "tar.gz",
-        sha256 = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1",
-        strip_prefix = "twoway-0.1.8",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.twoway-0.1.8.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__unicase__2_6_0",
-        url = "https://crates.io/api/v1/crates/unicase/2.6.0/download",
-        type = "tar.gz",
-        sha256 = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6",
-        strip_prefix = "unicase-2.6.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.unicase-2.6.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__unicode_bidi__0_3_7",
-        url = "https://crates.io/api/v1/crates/unicode-bidi/0.3.7/download",
-        type = "tar.gz",
-        sha256 = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f",
-        strip_prefix = "unicode-bidi-0.3.7",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.unicode-bidi-0.3.7.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__unicode_normalization__0_1_19",
-        url = "https://crates.io/api/v1/crates/unicode-normalization/0.1.19/download",
-        type = "tar.gz",
-        sha256 = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9",
-        strip_prefix = "unicode-normalization-0.1.19",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.unicode-normalization-0.1.19.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__unicode_segmentation__1_8_0",
-        url = "https://crates.io/api/v1/crates/unicode-segmentation/1.8.0/download",
-        type = "tar.gz",
-        sha256 = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b",
-        strip_prefix = "unicode-segmentation-1.8.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.unicode-segmentation-1.8.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__unicode_xid__0_2_2",
-        url = "https://crates.io/api/v1/crates/unicode-xid/0.2.2/download",
-        type = "tar.gz",
-        sha256 = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3",
-        strip_prefix = "unicode-xid-0.2.2",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.unicode-xid-0.2.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__url__2_2_2",
-        url = "https://crates.io/api/v1/crates/url/2.2.2/download",
-        type = "tar.gz",
-        sha256 = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c",
-        strip_prefix = "url-2.2.2",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.url-2.2.2.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__vcpkg__0_2_15",
-        url = "https://crates.io/api/v1/crates/vcpkg/0.2.15/download",
-        type = "tar.gz",
-        sha256 = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426",
-        strip_prefix = "vcpkg-0.2.15",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.vcpkg-0.2.15.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__version_check__0_9_3",
-        url = "https://crates.io/api/v1/crates/version_check/0.9.3/download",
-        type = "tar.gz",
-        sha256 = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe",
-        strip_prefix = "version_check-0.9.3",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.version_check-0.9.3.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wait_timeout__0_2_0",
-        url = "https://crates.io/api/v1/crates/wait-timeout/0.2.0/download",
-        type = "tar.gz",
-        sha256 = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6",
-        strip_prefix = "wait-timeout-0.2.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wait-timeout-0.2.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__walrus__0_19_0",
-        url = "https://crates.io/api/v1/crates/walrus/0.19.0/download",
-        type = "tar.gz",
-        sha256 = "4eb08e48cde54c05f363d984bb54ce374f49e242def9468d2e1b6c2372d291f8",
-        strip_prefix = "walrus-0.19.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.walrus-0.19.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__walrus_macro__0_19_0",
-        url = "https://crates.io/api/v1/crates/walrus-macro/0.19.0/download",
-        type = "tar.gz",
-        sha256 = "0a6e5bd22c71e77d60140b0bd5be56155a37e5bd14e24f5f87298040d0cc40d7",
-        strip_prefix = "walrus-macro-0.19.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.walrus-macro-0.19.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasi__0_10_2_wasi_snapshot_preview1",
-        url = "https://crates.io/api/v1/crates/wasi/0.10.2+wasi-snapshot-preview1/download",
-        type = "tar.gz",
-        sha256 = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6",
-        strip_prefix = "wasi-0.10.2+wasi-snapshot-preview1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasi-0.10.2+wasi-snapshot-preview1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasm_bindgen__0_2_78",
-        url = "https://crates.io/api/v1/crates/wasm-bindgen/0.2.78/download",
-        type = "tar.gz",
-        sha256 = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce",
-        strip_prefix = "wasm-bindgen-0.2.78",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasm-bindgen-0.2.78.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasm_bindgen_backend__0_2_78",
-        url = "https://crates.io/api/v1/crates/wasm-bindgen-backend/0.2.78/download",
-        type = "tar.gz",
-        sha256 = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b",
-        strip_prefix = "wasm-bindgen-backend-0.2.78",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasm-bindgen-backend-0.2.78.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasm_bindgen_cli__0_2_78",
-        url = "https://crates.io/api/v1/crates/wasm-bindgen-cli/0.2.78/download",
-        type = "tar.gz",
-        sha256 = "262a79690c18f5160ca109e839814783e29b71f1fd28448f80838145f93c08b6",
-        strip_prefix = "wasm-bindgen-cli-0.2.78",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasm-bindgen-cli-0.2.78.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasm_bindgen_cli_support__0_2_78",
-        url = "https://crates.io/api/v1/crates/wasm-bindgen-cli-support/0.2.78/download",
-        type = "tar.gz",
-        sha256 = "676406c3960cf7d5a581f13e6015d9aff1521042510fd5139cf47baad2eb8a28",
-        strip_prefix = "wasm-bindgen-cli-support-0.2.78",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasm-bindgen-cli-support-0.2.78.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasm_bindgen_externref_xform__0_2_78",
-        url = "https://crates.io/api/v1/crates/wasm-bindgen-externref-xform/0.2.78/download",
-        type = "tar.gz",
-        sha256 = "47be83b4ede14262d9ff7a748ef956f9d78cca20097dcdd12b0214e7960d5f98",
-        strip_prefix = "wasm-bindgen-externref-xform-0.2.78",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasm-bindgen-externref-xform-0.2.78.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasm_bindgen_macro__0_2_78",
-        url = "https://crates.io/api/v1/crates/wasm-bindgen-macro/0.2.78/download",
-        type = "tar.gz",
-        sha256 = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9",
-        strip_prefix = "wasm-bindgen-macro-0.2.78",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasm-bindgen-macro-0.2.78.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasm_bindgen_macro_support__0_2_78",
-        url = "https://crates.io/api/v1/crates/wasm-bindgen-macro-support/0.2.78/download",
-        type = "tar.gz",
-        sha256 = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab",
-        strip_prefix = "wasm-bindgen-macro-support-0.2.78",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasm-bindgen-macro-support-0.2.78.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasm_bindgen_multi_value_xform__0_2_78",
-        url = "https://crates.io/api/v1/crates/wasm-bindgen-multi-value-xform/0.2.78/download",
-        type = "tar.gz",
-        sha256 = "97fe4a0115972f946060752b2a2cbf7d40a54715e4478b4b157dba1070b7f1b4",
-        strip_prefix = "wasm-bindgen-multi-value-xform-0.2.78",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasm-bindgen-multi-value-xform-0.2.78.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasm_bindgen_shared__0_2_78",
-        url = "https://crates.io/api/v1/crates/wasm-bindgen-shared/0.2.78/download",
-        type = "tar.gz",
-        sha256 = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc",
-        strip_prefix = "wasm-bindgen-shared-0.2.78",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasm-bindgen-shared-0.2.78.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasm_bindgen_threads_xform__0_2_78",
-        url = "https://crates.io/api/v1/crates/wasm-bindgen-threads-xform/0.2.78/download",
-        type = "tar.gz",
-        sha256 = "2d6e689ab91f6489df7790a853869cfbfe4c765a75714007be0f54277f8f0cca",
-        strip_prefix = "wasm-bindgen-threads-xform-0.2.78",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasm-bindgen-threads-xform-0.2.78.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasm_bindgen_wasm_conventions__0_2_78",
-        url = "https://crates.io/api/v1/crates/wasm-bindgen-wasm-conventions/0.2.78/download",
-        type = "tar.gz",
-        sha256 = "811ac791b372687313fb22316a924e5828d1bfb3a100784e1f4eef348042a173",
-        strip_prefix = "wasm-bindgen-wasm-conventions-0.2.78",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasm-bindgen-wasm-conventions-0.2.78.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasm_bindgen_wasm_interpreter__0_2_78",
-        url = "https://crates.io/api/v1/crates/wasm-bindgen-wasm-interpreter/0.2.78/download",
-        type = "tar.gz",
-        sha256 = "676462889d49300b5958686a633c0e1991fd1633cf45d41b05ca3c530c411b7f",
-        strip_prefix = "wasm-bindgen-wasm-interpreter-0.2.78",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasm-bindgen-wasm-interpreter-0.2.78.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasmparser__0_59_0",
-        url = "https://crates.io/api/v1/crates/wasmparser/0.59.0/download",
-        type = "tar.gz",
-        sha256 = "a950e6a618f62147fd514ff445b2a0b53120d382751960797f85f058c7eda9b9",
-        strip_prefix = "wasmparser-0.59.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasmparser-0.59.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasmparser__0_77_0",
-        url = "https://crates.io/api/v1/crates/wasmparser/0.77.0/download",
-        type = "tar.gz",
-        sha256 = "b35c86d22e720a07d954ebbed772d01180501afe7d03d464f413bb5f8914a8d6",
-        strip_prefix = "wasmparser-0.77.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasmparser-0.77.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasmparser__0_81_0",
-        url = "https://crates.io/api/v1/crates/wasmparser/0.81.0/download",
-        type = "tar.gz",
-        sha256 = "98930446519f63d00a836efdc22f67766ceae8dbcc1571379f2bcabc6b2b9abc",
-        strip_prefix = "wasmparser-0.81.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasmparser-0.81.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wasmprinter__0_2_31",
-        url = "https://crates.io/api/v1/crates/wasmprinter/0.2.31/download",
-        type = "tar.gz",
-        sha256 = "a00ad4a51ba74183137c776ab37dea50b9f71db7454d7b654c2ba69ac5d9b223",
-        strip_prefix = "wasmprinter-0.2.31",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wasmprinter-0.2.31.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wast__21_0_0",
-        url = "https://crates.io/api/v1/crates/wast/21.0.0/download",
-        type = "tar.gz",
-        sha256 = "0b1844f66a2bc8526d71690104c0e78a8e59ffa1597b7245769d174ebb91deb5",
-        strip_prefix = "wast-21.0.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wast-21.0.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__winapi__0_3_9",
-        url = "https://crates.io/api/v1/crates/winapi/0.3.9/download",
-        type = "tar.gz",
-        sha256 = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419",
-        strip_prefix = "winapi-0.3.9",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.winapi-0.3.9.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__winapi_i686_pc_windows_gnu__0_4_0",
-        url = "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
-        type = "tar.gz",
-        sha256 = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6",
-        strip_prefix = "winapi-i686-pc-windows-gnu-0.4.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__winapi_util__0_1_5",
-        url = "https://crates.io/api/v1/crates/winapi-util/0.1.5/download",
-        type = "tar.gz",
-        sha256 = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178",
-        strip_prefix = "winapi-util-0.1.5",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.winapi-util-0.1.5.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__winapi_x86_64_pc_windows_gnu__0_4_0",
-        url = "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
-        type = "tar.gz",
-        sha256 = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f",
-        strip_prefix = "winapi-x86_64-pc-windows-gnu-0.4.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wit_parser__0_2_0",
-        url = "https://crates.io/api/v1/crates/wit-parser/0.2.0/download",
-        type = "tar.gz",
-        sha256 = "3f5fd97866f4b9c8e1ed57bcf9446f3d0d8ba37e2dd01c3c612c046c053b06f7",
-        strip_prefix = "wit-parser-0.2.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wit-parser-0.2.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wit_printer__0_2_0",
-        url = "https://crates.io/api/v1/crates/wit-printer/0.2.0/download",
-        type = "tar.gz",
-        sha256 = "93f19ca44555a3c14d69acee6447a6e4f52771b0c6e5d8db3e42db3b90f6fce9",
-        strip_prefix = "wit-printer-0.2.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wit-printer-0.2.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wit_schema_version__0_1_0",
-        url = "https://crates.io/api/v1/crates/wit-schema-version/0.1.0/download",
-        type = "tar.gz",
-        sha256 = "bfee4a6a4716eefa0682e7a3b836152e894a3e4f34a9d6c2c3e1c94429bfe36a",
-        strip_prefix = "wit-schema-version-0.1.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wit-schema-version-0.1.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wit_text__0_8_0",
-        url = "https://crates.io/api/v1/crates/wit-text/0.8.0/download",
-        type = "tar.gz",
-        sha256 = "33358e95c77d660f1c7c07f4a93c2bd89768965e844e3c50730bb4b42658df5f",
-        strip_prefix = "wit-text-0.8.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wit-text-0.8.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wit_validator__0_2_1",
-        url = "https://crates.io/api/v1/crates/wit-validator/0.2.1/download",
-        type = "tar.gz",
-        sha256 = "3c11d93d925420e7872b226c4161849c32be38385ccab026b88df99d8ddc6ba6",
-        strip_prefix = "wit-validator-0.2.1",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wit-validator-0.2.1.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wit_walrus__0_6_0",
-        url = "https://crates.io/api/v1/crates/wit-walrus/0.6.0/download",
-        type = "tar.gz",
-        sha256 = "ad559e3e4c6404b2a6a675d44129d62a3836e3b951b90112fa1c5feb852757cd",
-        strip_prefix = "wit-walrus-0.6.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wit-walrus-0.6.0.bazel"),
-    )
-
-    maybe(
-        http_archive,
-        name = "rules_rust_wasm_bindgen__wit_writer__0_2_0",
-        url = "https://crates.io/api/v1/crates/wit-writer/0.2.0/download",
-        type = "tar.gz",
-        sha256 = "c2ad01ba5e9cbcff799a0689e56a153776ea694cec777f605938cb9880d41a09",
-        strip_prefix = "wit-writer-0.2.0",
-        build_file = Label("//wasm_bindgen/raze/remote:BUILD.wit-writer-0.2.0.bazel"),
-    )
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.aho-corasick-0.7.18.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.aho-corasick-0.7.18.bazel
deleted file mode 100644
index 9dea26c..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.aho-corasick-0.7.18.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "aho_corasick",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.7.18",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__memchr__2_4_1//:memchr",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.anyhow-1.0.45.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.anyhow-1.0.45.bazel
deleted file mode 100644
index d9dd44d..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.anyhow-1.0.45.bazel
+++ /dev/null
@@ -1,113 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "anyhow_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.45",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "anyhow",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.45",
-    # buildifier: leave-alone
-    deps = [
-        ":anyhow_build_script",
-    ],
-)
-
-# Unsupported target "compiletest" with type "test" omitted
-
-# Unsupported target "test_autotrait" with type "test" omitted
-
-# Unsupported target "test_backtrace" with type "test" omitted
-
-# Unsupported target "test_boxed" with type "test" omitted
-
-# Unsupported target "test_chain" with type "test" omitted
-
-# Unsupported target "test_context" with type "test" omitted
-
-# Unsupported target "test_convert" with type "test" omitted
-
-# Unsupported target "test_downcast" with type "test" omitted
-
-# Unsupported target "test_ffi" with type "test" omitted
-
-# Unsupported target "test_fmt" with type "test" omitted
-
-# Unsupported target "test_macros" with type "test" omitted
-
-# Unsupported target "test_repr" with type "test" omitted
-
-# Unsupported target "test_source" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.ascii-1.0.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.ascii-1.0.0.bazel
deleted file mode 100644
index 3d4c9a7..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.ascii-1.0.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "ascii",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "tests" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.assert_cmd-1.0.8.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.assert_cmd-1.0.8.bazel
deleted file mode 100644
index b918152..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.assert_cmd-1.0.8.bazel
+++ /dev/null
@@ -1,97 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_bin_fixture",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/bin/bin_fixture.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.8",
-    # buildifier: leave-alone
-    deps = [
-        ":assert_cmd",
-        "@rules_rust_wasm_bindgen__bstr__0_2_17//:bstr",
-        "@rules_rust_wasm_bindgen__doc_comment__0_3_3//:doc_comment",
-        "@rules_rust_wasm_bindgen__predicates__2_0_3//:predicates",
-        "@rules_rust_wasm_bindgen__predicates_core__1_0_2//:predicates_core",
-        "@rules_rust_wasm_bindgen__predicates_tree__1_0_4//:predicates_tree",
-        "@rules_rust_wasm_bindgen__wait_timeout__0_2_0//:wait_timeout",
-    ],
-)
-
-# Unsupported target "example_fixture" with type "example" omitted
-
-rust_library(
-    name = "assert_cmd",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.8",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__bstr__0_2_17//:bstr",
-        "@rules_rust_wasm_bindgen__doc_comment__0_3_3//:doc_comment",
-        "@rules_rust_wasm_bindgen__predicates__2_0_3//:predicates",
-        "@rules_rust_wasm_bindgen__predicates_core__1_0_2//:predicates_core",
-        "@rules_rust_wasm_bindgen__predicates_tree__1_0_4//:predicates_tree",
-        "@rules_rust_wasm_bindgen__wait_timeout__0_2_0//:wait_timeout",
-    ],
-)
-
-# Unsupported target "assert" with type "test" omitted
-
-# Unsupported target "cargo" with type "test" omitted
-
-# Unsupported target "examples" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.atty-0.2.14.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.atty-0.2.14.bazel
deleted file mode 100644
index 7764145..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.atty-0.2.14.bazel
+++ /dev/null
@@ -1,89 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "atty" with type "example" omitted
-
-rust_library(
-    name = "atty",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.14",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_wasm_bindgen__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.autocfg-1.0.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.autocfg-1.0.1.bazel
deleted file mode 100644
index 867f1ef..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.autocfg-1.0.1.bazel
+++ /dev/null
@@ -1,63 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "integers" with type "example" omitted
-
-# Unsupported target "paths" with type "example" omitted
-
-# Unsupported target "traits" with type "example" omitted
-
-# Unsupported target "versions" with type "example" omitted
-
-rust_library(
-    name = "autocfg",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.1",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "rustflags" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.base64-0.13.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.base64-0.13.0.bazel
deleted file mode 100644
index 3d3ee34..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.base64-0.13.0.bazel
+++ /dev/null
@@ -1,69 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "benchmarks" with type "bench" omitted
-
-# Unsupported target "base64" with type "example" omitted
-
-# Unsupported target "make_tables" with type "example" omitted
-
-rust_library(
-    name = "base64",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.13.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "decode" with type "test" omitted
-
-# Unsupported target "encode" with type "test" omitted
-
-# Unsupported target "helpers" with type "test" omitted
-
-# Unsupported target "tests" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.base64-0.9.3.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.base64-0.9.3.bazel
deleted file mode 100644
index a783db7..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.base64-0.9.3.bazel
+++ /dev/null
@@ -1,67 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "benchmarks" with type "bench" omitted
-
-# Unsupported target "make_tables" with type "example" omitted
-
-rust_library(
-    name = "base64",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.9.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__byteorder__1_4_3//:byteorder",
-        "@rules_rust_wasm_bindgen__safemem__0_3_3//:safemem",
-    ],
-)
-
-# Unsupported target "decode" with type "test" omitted
-
-# Unsupported target "encode" with type "test" omitted
-
-# Unsupported target "helpers" with type "test" omitted
-
-# Unsupported target "tests" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.bazel
deleted file mode 100644
index e69de29..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.bazel
+++ /dev/null
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.bitflags-1.3.2.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.bitflags-1.3.2.bazel
deleted file mode 100644
index 18f2842..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.bitflags-1.3.2.bazel
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "bitflags",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.3.2",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "basic" with type "test" omitted
-
-# Unsupported target "compile" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.bstr-0.2.17.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.bstr-0.2.17.bazel
deleted file mode 100644
index 41ce46f..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.bstr-0.2.17.bazel
+++ /dev/null
@@ -1,77 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "graphemes" with type "example" omitted
-
-# Unsupported target "graphemes-std" with type "example" omitted
-
-# Unsupported target "lines" with type "example" omitted
-
-# Unsupported target "lines-std" with type "example" omitted
-
-# Unsupported target "uppercase" with type "example" omitted
-
-# Unsupported target "uppercase-std" with type "example" omitted
-
-# Unsupported target "words" with type "example" omitted
-
-# Unsupported target "words-std" with type "example" omitted
-
-rust_library(
-    name = "bstr",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "lazy_static",
-        "regex-automata",
-        "std",
-        "unicode",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.17",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__lazy_static__1_4_0//:lazy_static",
-        "@rules_rust_wasm_bindgen__memchr__2_4_1//:memchr",
-        "@rules_rust_wasm_bindgen__regex_automata__0_1_10//:regex_automata",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.buf_redux-0.8.4.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.buf_redux-0.8.4.bazel
deleted file mode 100644
index a8c0ed7..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.buf_redux-0.8.4.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "buf_redux",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.8.4",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__memchr__2_4_1//:memchr",
-        "@rules_rust_wasm_bindgen__safemem__0_3_3//:safemem",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.bumpalo-3.8.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.bumpalo-3.8.0.bazel
deleted file mode 100644
index 67578ad..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.bumpalo-3.8.0.bazel
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "benches" with type "bench" omitted
-
-rust_library(
-    name = "bumpalo",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "3.8.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "try_alloc" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.byteorder-1.4.3.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.byteorder-1.4.3.bazel
deleted file mode 100644
index 9f319f2..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.byteorder-1.4.3.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "bench" with type "bench" omitted
-
-rust_library(
-    name = "byteorder",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.4.3",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.cc-1.0.71.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.cc-1.0.71.bazel
deleted file mode 100644
index c604772..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.cc-1.0.71.bazel
+++ /dev/null
@@ -1,85 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_gcc_shim",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/bin/gcc-shim.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.71",
-    # buildifier: leave-alone
-    deps = [
-        ":cc",
-    ],
-)
-
-rust_library(
-    name = "cc",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.71",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "cc_env" with type "test" omitted
-
-# Unsupported target "cflags" with type "test" omitted
-
-# Unsupported target "cxxflags" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.cfg-if-1.0.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.cfg-if-1.0.0.bazel
deleted file mode 100644
index e4ad04f..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.cfg-if-1.0.0.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "cfg_if",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "xcrate" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.chrono-0.4.19.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.chrono-0.4.19.bazel
deleted file mode 100644
index 49442e7..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.chrono-0.4.19.bazel
+++ /dev/null
@@ -1,77 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "chrono" with type "bench" omitted
-
-# Unsupported target "serde" with type "bench" omitted
-
-rust_library(
-    name = "chrono",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-        "clock",
-        "libc",
-        "std",
-        "winapi",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.19",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-        "@rules_rust_wasm_bindgen__num_integer__0_1_44//:num_integer",
-        "@rules_rust_wasm_bindgen__num_traits__0_2_14//:num_traits",
-    ] + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_wasm_bindgen__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-# Unsupported target "wasm" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.chunked_transfer-1.4.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.chunked_transfer-1.4.0.bazel
deleted file mode 100644
index b20b6f7..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.chunked_transfer-1.4.0.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "encode" with type "bench" omitted
-
-rust_library(
-    name = "chunked_transfer",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.4.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.crossbeam-channel-0.5.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.crossbeam-channel-0.5.1.bazel
deleted file mode 100644
index 0462551..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.crossbeam-channel-0.5.1.bazel
+++ /dev/null
@@ -1,94 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "crossbeam" with type "bench" omitted
-
-# Unsupported target "fibonacci" with type "example" omitted
-
-# Unsupported target "matching" with type "example" omitted
-
-# Unsupported target "stopwatch" with type "example" omitted
-
-rust_library(
-    name = "crossbeam_channel",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "crossbeam-utils",
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.5.1",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__cfg_if__1_0_0//:cfg_if",
-        "@rules_rust_wasm_bindgen__crossbeam_utils__0_8_5//:crossbeam_utils",
-    ],
-)
-
-# Unsupported target "after" with type "test" omitted
-
-# Unsupported target "array" with type "test" omitted
-
-# Unsupported target "golang" with type "test" omitted
-
-# Unsupported target "iter" with type "test" omitted
-
-# Unsupported target "list" with type "test" omitted
-
-# Unsupported target "mpsc" with type "test" omitted
-
-# Unsupported target "never" with type "test" omitted
-
-# Unsupported target "ready" with type "test" omitted
-
-# Unsupported target "same_channel" with type "test" omitted
-
-# Unsupported target "select" with type "test" omitted
-
-# Unsupported target "select_macro" with type "test" omitted
-
-# Unsupported target "thread_locals" with type "test" omitted
-
-# Unsupported target "tick" with type "test" omitted
-
-# Unsupported target "zero" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.crossbeam-deque-0.8.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.crossbeam-deque-0.8.1.bazel
deleted file mode 100644
index 45ae4b4..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.crossbeam-deque-0.8.1.bazel
+++ /dev/null
@@ -1,68 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "crossbeam_deque",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "crossbeam-epoch",
-        "crossbeam-utils",
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.8.1",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__cfg_if__1_0_0//:cfg_if",
-        "@rules_rust_wasm_bindgen__crossbeam_epoch__0_9_5//:crossbeam_epoch",
-        "@rules_rust_wasm_bindgen__crossbeam_utils__0_8_5//:crossbeam_utils",
-    ],
-)
-
-# Unsupported target "fifo" with type "test" omitted
-
-# Unsupported target "injector" with type "test" omitted
-
-# Unsupported target "lifo" with type "test" omitted
-
-# Unsupported target "steal" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.crossbeam-epoch-0.9.5.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.crossbeam-epoch-0.9.5.bazel
deleted file mode 100644
index 9407fd0..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.crossbeam-epoch-0.9.5.bazel
+++ /dev/null
@@ -1,104 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "crossbeam_epoch_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "alloc",
-        "lazy_static",
-        "std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.9.5",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-# Unsupported target "defer" with type "bench" omitted
-
-# Unsupported target "flush" with type "bench" omitted
-
-# Unsupported target "pin" with type "bench" omitted
-
-# Unsupported target "sanitize" with type "example" omitted
-
-rust_library(
-    name = "crossbeam_epoch",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "alloc",
-        "lazy_static",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.9.5",
-    # buildifier: leave-alone
-    deps = [
-        ":crossbeam_epoch_build_script",
-        "@rules_rust_wasm_bindgen__cfg_if__1_0_0//:cfg_if",
-        "@rules_rust_wasm_bindgen__crossbeam_utils__0_8_5//:crossbeam_utils",
-        "@rules_rust_wasm_bindgen__lazy_static__1_4_0//:lazy_static",
-        "@rules_rust_wasm_bindgen__memoffset__0_6_4//:memoffset",
-        "@rules_rust_wasm_bindgen__scopeguard__1_1_0//:scopeguard",
-    ],
-)
-
-# Unsupported target "loom" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.crossbeam-utils-0.8.5.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.crossbeam-utils-0.8.5.bazel
deleted file mode 100644
index 716dcf0..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.crossbeam-utils-0.8.5.bazel
+++ /dev/null
@@ -1,105 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "crossbeam_utils_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "lazy_static",
-        "std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.8.5",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-# Unsupported target "atomic_cell" with type "bench" omitted
-
-rust_library(
-    name = "crossbeam_utils",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "lazy_static",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.8.5",
-    # buildifier: leave-alone
-    deps = [
-        ":crossbeam_utils_build_script",
-        "@rules_rust_wasm_bindgen__cfg_if__1_0_0//:cfg_if",
-        "@rules_rust_wasm_bindgen__lazy_static__1_4_0//:lazy_static",
-    ],
-)
-
-# Unsupported target "atomic_cell" with type "test" omitted
-
-# Unsupported target "cache_padded" with type "test" omitted
-
-# Unsupported target "parker" with type "test" omitted
-
-# Unsupported target "sharded_lock" with type "test" omitted
-
-# Unsupported target "thread" with type "test" omitted
-
-# Unsupported target "wait_group" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.curl-0.4.40.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.curl-0.4.40.bazel
deleted file mode 100644
index b2f328f..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.curl-0.4.40.bazel
+++ /dev/null
@@ -1,172 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "curl_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "openssl-probe",
-        "openssl-sys",
-        "ssl",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.40",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@rules_rust_wasm_bindgen__curl_sys__0_4_50_curl_7_79_1//:curl_sys",
-    ] + selects.with_or({
-        # cfg(all(unix, not(target_os = "macos")))
-        (
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_wasm_bindgen__openssl_sys__0_9_70//:openssl_sys",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(target_env = "msvc")
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-# Unsupported target "aws_sigv4" with type "example" omitted
-
-# Unsupported target "ssl_cert_blob" with type "example" omitted
-
-# Unsupported target "ssl_proxy" with type "example" omitted
-
-rust_library(
-    name = "curl",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-        "default",
-        "openssl-probe",
-        "openssl-sys",
-        "ssl",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.40",
-    # buildifier: leave-alone
-    deps = [
-        ":curl_build_script",
-        "@rules_rust_wasm_bindgen__curl_sys__0_4_50_curl_7_79_1//:curl_sys",
-        "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-        "@rules_rust_wasm_bindgen__socket2__0_4_2//:socket2",
-    ] + selects.with_or({
-        # cfg(all(unix, not(target_os = "macos")))
-        (
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_wasm_bindgen__openssl_probe__0_1_4//:openssl_probe",
-            "@rules_rust_wasm_bindgen__openssl_sys__0_9_70//:openssl_sys",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(target_env = "msvc")
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_wasm_bindgen__schannel__0_1_19//:schannel",
-            "@rules_rust_wasm_bindgen__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-# Unsupported target "atexit" with type "test" omitted
-
-# Unsupported target "easy" with type "test" omitted
-
-# Unsupported target "multi" with type "test" omitted
-
-# Unsupported target "post" with type "test" omitted
-
-# Unsupported target "protocols" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.curl-sys-0.4.50+curl-7.79.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.curl-sys-0.4.50+curl-7.79.1.bazel
deleted file mode 100644
index 1b9d3ad..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.curl-sys-0.4.50+curl-7.79.1.bazel
+++ /dev/null
@@ -1,98 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-build" with type "custom-build" omitted
-
-rust_library(
-    name = "curl_sys",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-        "openssl-sys",
-        "ssl",
-    ],
-    crate_root = "lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.50+curl-7.79.1",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-        "@rules_rust_wasm_bindgen__libz_sys__1_1_3//:libz_sys",
-    ] + selects.with_or({
-        # cfg(all(unix, not(target_os = "macos")))
-        (
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_wasm_bindgen__openssl_sys__0_9_70//:openssl_sys",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(target_env = "msvc")
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_wasm_bindgen__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.diff-0.1.12.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.diff-0.1.12.bazel
deleted file mode 100644
index 69044d0..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.diff-0.1.12.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "benches" with type "bench" omitted
-
-# Unsupported target "simple" with type "example" omitted
-
-rust_library(
-    name = "diff",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.12",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "tests" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.difference-2.0.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.difference-2.0.0.bazel
deleted file mode 100644
index a03ad9b..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.difference-2.0.0.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_difference",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/main.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.0.0",
-    # buildifier: leave-alone
-    deps = [
-        ":difference",
-    ],
-)
-
-# Unsupported target "github-style" with type "example" omitted
-
-# Unsupported target "line-by-line" with type "example" omitted
-
-# Unsupported target "underline-words" with type "example" omitted
-
-rust_library(
-    name = "difference",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.0.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "quickcheck" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.difflib-0.4.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.difflib-0.4.0.bazel
deleted file mode 100644
index c7bd8e3..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.difflib-0.4.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "example" with type "example" omitted
-
-rust_library(
-    name = "difflib",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "tests" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.doc-comment-0.3.3.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.doc-comment-0.3.3.bazel
deleted file mode 100644
index 7449ccb..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.doc-comment-0.3.3.bazel
+++ /dev/null
@@ -1,83 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "doc_comment_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.3",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "doc_comment",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.3",
-    # buildifier: leave-alone
-    deps = [
-        ":doc_comment_build_script",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.docopt-1.1.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.docopt-1.1.1.bazel
deleted file mode 100644
index a26ee56..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.docopt-1.1.1.bazel
+++ /dev/null
@@ -1,97 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_docopt_wordlist",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/wordlist.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.1.1",
-    # buildifier: leave-alone
-    deps = [
-        ":docopt",
-        "@rules_rust_wasm_bindgen__lazy_static__1_4_0//:lazy_static",
-        "@rules_rust_wasm_bindgen__regex__1_5_4//:regex",
-        "@rules_rust_wasm_bindgen__serde__1_0_130//:serde",
-        "@rules_rust_wasm_bindgen__strsim__0_10_0//:strsim",
-    ],
-)
-
-# Unsupported target "cargo" with type "example" omitted
-
-# Unsupported target "cp" with type "example" omitted
-
-# Unsupported target "decode" with type "example" omitted
-
-# Unsupported target "hashmap" with type "example" omitted
-
-# Unsupported target "optional_command" with type "example" omitted
-
-# Unsupported target "verbose_multiple" with type "example" omitted
-
-rust_library(
-    name = "docopt",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.1.1",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__lazy_static__1_4_0//:lazy_static",
-        "@rules_rust_wasm_bindgen__regex__1_5_4//:regex",
-        "@rules_rust_wasm_bindgen__serde__1_0_130//:serde",
-        "@rules_rust_wasm_bindgen__strsim__0_10_0//:strsim",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.either-1.6.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.either-1.6.1.bazel
deleted file mode 100644
index 4d704c6..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.either-1.6.1.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "either",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.6.1",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.env_logger-0.8.4.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.env_logger-0.8.4.bazel
deleted file mode 100644
index d75f156..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.env_logger-0.8.4.bazel
+++ /dev/null
@@ -1,71 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "env_logger",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "atty",
-        "default",
-        "humantime",
-        "regex",
-        "termcolor",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.8.4",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__atty__0_2_14//:atty",
-        "@rules_rust_wasm_bindgen__humantime__2_1_0//:humantime",
-        "@rules_rust_wasm_bindgen__log__0_4_14//:log",
-        "@rules_rust_wasm_bindgen__regex__1_5_4//:regex",
-        "@rules_rust_wasm_bindgen__termcolor__1_1_2//:termcolor",
-    ],
-)
-
-# Unsupported target "init-twice-retains-filter" with type "test" omitted
-
-# Unsupported target "log-in-log" with type "test" omitted
-
-# Unsupported target "log_tls_dtors" with type "test" omitted
-
-# Unsupported target "regexp_filter" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.filetime-0.2.15.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.filetime-0.2.15.bazel
deleted file mode 100644
index 9c0c8e4..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.filetime-0.2.15.bazel
+++ /dev/null
@@ -1,88 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "filetime",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.15",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__cfg_if__1_0_0//:cfg_if",
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_wasm_bindgen__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.float-cmp-0.8.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.float-cmp-0.8.0.bazel
deleted file mode 100644
index 3792860..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.float-cmp-0.8.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "float_cmp",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "num-traits",
-        "ratio",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.8.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__num_traits__0_2_14//:num_traits",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.form_urlencoded-1.0.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.form_urlencoded-1.0.1.bazel
deleted file mode 100644
index 5b7860a..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.form_urlencoded-1.0.1.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "form_urlencoded",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.1",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__matches__0_1_9//:matches",
-        "@rules_rust_wasm_bindgen__percent_encoding__2_1_0//:percent_encoding",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.getrandom-0.2.3.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.getrandom-0.2.3.bazel
deleted file mode 100644
index 2b8513e..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.getrandom-0.2.3.bazel
+++ /dev/null
@@ -1,96 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "mod" with type "bench" omitted
-
-rust_library(
-    name = "getrandom",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__cfg_if__1_0_0//:cfg_if",
-    ] + selects.with_or({
-        # cfg(target_os = "wasi")
-        (
-            "@rules_rust//rust/platform:wasm32-wasi",
-        ): [
-            "@rules_rust_wasm_bindgen__wasi__0_10_2_wasi_snapshot_preview1//:wasi",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-# Unsupported target "custom" with type "test" omitted
-
-# Unsupported target "normal" with type "test" omitted
-
-# Unsupported target "rdrand" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.heck-0.3.3.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.heck-0.3.3.bazel
deleted file mode 100644
index 29ce668..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.heck-0.3.3.bazel
+++ /dev/null
@@ -1,54 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "heck",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__unicode_segmentation__1_8_0//:unicode_segmentation",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.hermit-abi-0.1.19.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.hermit-abi-0.1.19.bazel
deleted file mode 100644
index 30a717d..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.hermit-abi-0.1.19.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "hermit_abi",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.19",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.httparse-1.5.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.httparse-1.5.1.bazel
deleted file mode 100644
index c27995e..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.httparse-1.5.1.bazel
+++ /dev/null
@@ -1,91 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "httparse_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.5.1",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-# Unsupported target "parse" with type "bench" omitted
-
-rust_library(
-    name = "httparse",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.5.1",
-    # buildifier: leave-alone
-    deps = [
-        ":httparse_build_script",
-    ],
-)
-
-# Unsupported target "uri" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.humantime-2.1.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.humantime-2.1.0.bazel
deleted file mode 100644
index 2ed8303..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.humantime-2.1.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "datetime_format" with type "bench" omitted
-
-# Unsupported target "datetime_parse" with type "bench" omitted
-
-rust_library(
-    name = "humantime",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.1.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.id-arena-2.2.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.id-arena-2.2.1.bazel
deleted file mode 100644
index d3cf8e7..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.id-arena-2.2.1.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "id_arena",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "rayon",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.2.1",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__rayon__1_5_1//:rayon",
-    ],
-)
-
-# Unsupported target "readme_up_to_date" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.idna-0.2.3.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.idna-0.2.3.bazel
deleted file mode 100644
index 2b4d3f7..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.idna-0.2.3.bazel
+++ /dev/null
@@ -1,62 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "all" with type "bench" omitted
-
-rust_library(
-    name = "idna",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__matches__0_1_9//:matches",
-        "@rules_rust_wasm_bindgen__unicode_bidi__0_3_7//:unicode_bidi",
-        "@rules_rust_wasm_bindgen__unicode_normalization__0_1_19//:unicode_normalization",
-    ],
-)
-
-# Unsupported target "tests" with type "test" omitted
-
-# Unsupported target "unit" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.itertools-0.10.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.itertools-0.10.1.bazel
deleted file mode 100644
index 757cfc7..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.itertools-0.10.1.bazel
+++ /dev/null
@@ -1,99 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "bench1" with type "bench" omitted
-
-# Unsupported target "combinations" with type "bench" omitted
-
-# Unsupported target "combinations_with_replacement" with type "bench" omitted
-
-# Unsupported target "fold_specialization" with type "bench" omitted
-
-# Unsupported target "powerset" with type "bench" omitted
-
-# Unsupported target "tree_fold1" with type "bench" omitted
-
-# Unsupported target "tuple_combinations" with type "bench" omitted
-
-# Unsupported target "tuples" with type "bench" omitted
-
-# Unsupported target "iris" with type "example" omitted
-
-rust_library(
-    name = "itertools",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "use_alloc",
-        "use_std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.10.1",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__either__1_6_1//:either",
-    ],
-)
-
-# Unsupported target "adaptors_no_collect" with type "test" omitted
-
-# Unsupported target "flatten_ok" with type "test" omitted
-
-# Unsupported target "fold_specialization" with type "test" omitted
-
-# Unsupported target "macros_hygiene" with type "test" omitted
-
-# Unsupported target "merge_join" with type "test" omitted
-
-# Unsupported target "peeking_take_while" with type "test" omitted
-
-# Unsupported target "quick" with type "test" omitted
-
-# Unsupported target "specializations" with type "test" omitted
-
-# Unsupported target "test_core" with type "test" omitted
-
-# Unsupported target "test_std" with type "test" omitted
-
-# Unsupported target "tuples" with type "test" omitted
-
-# Unsupported target "zip" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.itoa-0.4.8.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.itoa-0.4.8.bazel
deleted file mode 100644
index 9737226..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.itoa-0.4.8.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "bench" with type "bench" omitted
-
-rust_library(
-    name = "itoa",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.8",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.lazy_static-1.4.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.lazy_static-1.4.0.bazel
deleted file mode 100644
index cb09d1a..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.lazy_static-1.4.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "lazy_static",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.4.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "no_std" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.leb128-0.2.5.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.leb128-0.2.5.bazel
deleted file mode 100644
index a4721fb..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.leb128-0.2.5.bazel
+++ /dev/null
@@ -1,81 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "bench" with type "bench" omitted
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_leb128_repl",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/bin/leb128-repl.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.5",
-    # buildifier: leave-alone
-    deps = [
-        ":leb128",
-    ],
-)
-
-rust_library(
-    name = "leb128",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.5",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "quickchecks" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.libc-0.2.107.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.libc-0.2.107.bazel
deleted file mode 100644
index 8f54ee4..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.libc-0.2.107.bazel
+++ /dev/null
@@ -1,89 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "libc_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.107",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "libc",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.107",
-    # buildifier: leave-alone
-    deps = [
-        ":libc_build_script",
-    ],
-)
-
-# Unsupported target "const_fn" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.libz-sys-1.1.3.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.libz-sys-1.1.3.bazel
deleted file mode 100644
index aa4a3ba..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.libz-sys-1.1.3.bazel
+++ /dev/null
@@ -1,108 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "libz_sys_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "libc",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    links = "z",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.1.3",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@rules_rust_wasm_bindgen__cc__1_0_71//:cc",
-        "@rules_rust_wasm_bindgen__pkg_config__0_3_22//:pkg_config",
-    ] + selects.with_or({
-        # cfg(target_env = "msvc")
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_wasm_bindgen__vcpkg__0_2_15//:vcpkg",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-rust_library(
-    name = "libz_sys",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-        "libc",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.1.3",
-    # buildifier: leave-alone
-    deps = [
-        ":libz_sys_build_script",
-        "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-    ] + selects.with_or({
-        # cfg(target_env = "msvc")
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.log-0.4.14.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.log-0.4.14.bazel
deleted file mode 100644
index a58bb2f..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.log-0.4.14.bazel
+++ /dev/null
@@ -1,94 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "log_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.14",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-# Unsupported target "value" with type "bench" omitted
-
-rust_library(
-    name = "log",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-        "--cfg=atomic_cas",
-        "--cfg=use_std",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.14",
-    # buildifier: leave-alone
-    deps = [
-        ":log_build_script",
-        "@rules_rust_wasm_bindgen__cfg_if__1_0_0//:cfg_if",
-    ],
-)
-
-# Unsupported target "filters" with type "test" omitted
-
-# Unsupported target "macros" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.matches-0.1.9.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.matches-0.1.9.bazel
deleted file mode 100644
index f31e188..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.matches-0.1.9.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "matches",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.9",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "macro_use_one" with type "test" omitted
-
-# Unsupported target "use_star" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.memchr-2.4.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.memchr-2.4.1.bazel
deleted file mode 100644
index 69c467f..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.memchr-2.4.1.bazel
+++ /dev/null
@@ -1,89 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "memchr_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "std",
-        "use_std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.4.1",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "memchr",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-        "use_std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.4.1",
-    # buildifier: leave-alone
-    deps = [
-        ":memchr_build_script",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.memoffset-0.6.4.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.memoffset-0.6.4.bazel
deleted file mode 100644
index 24bb16e..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.memoffset-0.6.4.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "memoffset_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.4",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@rules_rust_wasm_bindgen__autocfg__1_0_1//:autocfg",
-    ],
-)
-
-rust_library(
-    name = "memoffset",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.4",
-    # buildifier: leave-alone
-    deps = [
-        ":memoffset_build_script",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.mime-0.3.16.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.mime-0.3.16.bazel
deleted file mode 100644
index adfd28a..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.mime-0.3.16.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "cmp" with type "bench" omitted
-
-# Unsupported target "fmt" with type "bench" omitted
-
-# Unsupported target "parse" with type "bench" omitted
-
-rust_library(
-    name = "mime",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.16",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.mime_guess-2.0.3.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.mime_guess-2.0.3.bazel
deleted file mode 100644
index 60bb34c..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.mime_guess-2.0.3.bazel
+++ /dev/null
@@ -1,94 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "mime_guess_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "rev-mappings",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.0.3",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@rules_rust_wasm_bindgen__unicase__2_6_0//:unicase",
-    ],
-)
-
-# Unsupported target "benchmark" with type "bench" omitted
-
-# Unsupported target "rev_map" with type "example" omitted
-
-rust_library(
-    name = "mime_guess",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "rev-mappings",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.0.3",
-    # buildifier: leave-alone
-    deps = [
-        ":mime_guess_build_script",
-        "@rules_rust_wasm_bindgen__mime__0_3_16//:mime",
-        "@rules_rust_wasm_bindgen__unicase__2_6_0//:unicase",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.multipart-0.18.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.multipart-0.18.0.bazel
deleted file mode 100644
index ff3351e..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.multipart-0.18.0.bazel
+++ /dev/null
@@ -1,125 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_form_test",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "buf_redux",
-        "httparse",
-        "quick-error",
-        "safemem",
-        "server",
-        "twoway",
-    ],
-    crate_root = "src/bin/form_test.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.18.0",
-    # buildifier: leave-alone
-    deps = [
-        ":multipart",
-        "@rules_rust_wasm_bindgen__buf_redux__0_8_4//:buf_redux",
-        "@rules_rust_wasm_bindgen__httparse__1_5_1//:httparse",
-        "@rules_rust_wasm_bindgen__log__0_4_14//:log",
-        "@rules_rust_wasm_bindgen__mime__0_3_16//:mime",
-        "@rules_rust_wasm_bindgen__mime_guess__2_0_3//:mime_guess",
-        "@rules_rust_wasm_bindgen__quick_error__1_2_3//:quick_error",
-        "@rules_rust_wasm_bindgen__rand__0_8_4//:rand",
-        "@rules_rust_wasm_bindgen__safemem__0_3_3//:safemem",
-        "@rules_rust_wasm_bindgen__tempfile__3_2_0//:tempfile",
-        "@rules_rust_wasm_bindgen__twoway__0_1_8//:twoway",
-    ],
-)
-
-# Unsupported target "hyper_client" with type "example" omitted
-
-# Unsupported target "hyper_reqbuilder" with type "example" omitted
-
-# Unsupported target "hyper_server" with type "example" omitted
-
-# Unsupported target "iron" with type "example" omitted
-
-# Unsupported target "iron_intercept" with type "example" omitted
-
-# Unsupported target "nickel" with type "example" omitted
-
-# Unsupported target "rocket" with type "example" omitted
-
-# Unsupported target "tiny_http" with type "example" omitted
-
-rust_library(
-    name = "multipart",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "buf_redux",
-        "httparse",
-        "quick-error",
-        "safemem",
-        "server",
-        "twoway",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.18.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__buf_redux__0_8_4//:buf_redux",
-        "@rules_rust_wasm_bindgen__httparse__1_5_1//:httparse",
-        "@rules_rust_wasm_bindgen__log__0_4_14//:log",
-        "@rules_rust_wasm_bindgen__mime__0_3_16//:mime",
-        "@rules_rust_wasm_bindgen__mime_guess__2_0_3//:mime_guess",
-        "@rules_rust_wasm_bindgen__quick_error__1_2_3//:quick_error",
-        "@rules_rust_wasm_bindgen__rand__0_8_4//:rand",
-        "@rules_rust_wasm_bindgen__safemem__0_3_3//:safemem",
-        "@rules_rust_wasm_bindgen__tempfile__3_2_0//:tempfile",
-        "@rules_rust_wasm_bindgen__twoway__0_1_8//:twoway",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.normalize-line-endings-0.3.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.normalize-line-endings-0.3.0.bazel
deleted file mode 100644
index 03c0389..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.normalize-line-endings-0.3.0.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "normalize_line_endings",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.num-integer-0.1.44.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.num-integer-0.1.44.bazel
deleted file mode 100644
index 1052c08..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.num-integer-0.1.44.bazel
+++ /dev/null
@@ -1,95 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "num_integer_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.44",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@rules_rust_wasm_bindgen__autocfg__1_0_1//:autocfg",
-    ],
-)
-
-# Unsupported target "average" with type "bench" omitted
-
-# Unsupported target "gcd" with type "bench" omitted
-
-# Unsupported target "roots" with type "bench" omitted
-
-rust_library(
-    name = "num_integer",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.44",
-    # buildifier: leave-alone
-    deps = [
-        ":num_integer_build_script",
-        "@rules_rust_wasm_bindgen__num_traits__0_2_14//:num_traits",
-    ],
-)
-
-# Unsupported target "average" with type "test" omitted
-
-# Unsupported target "roots" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.num-traits-0.2.14.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.num-traits-0.2.14.bazel
deleted file mode 100644
index 7532249..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.num-traits-0.2.14.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "num_traits_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.14",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@rules_rust_wasm_bindgen__autocfg__1_0_1//:autocfg",
-    ],
-)
-
-rust_library(
-    name = "num_traits",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.14",
-    # buildifier: leave-alone
-    deps = [
-        ":num_traits_build_script",
-    ],
-)
-
-# Unsupported target "cast" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.num_cpus-1.13.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.num_cpus-1.13.0.bazel
deleted file mode 100644
index abca5ea..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.num_cpus-1.13.0.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "values" with type "example" omitted
-
-rust_library(
-    name = "num_cpus",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.13.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.openssl-probe-0.1.4.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.openssl-probe-0.1.4.bazel
deleted file mode 100644
index 7583d6c..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.openssl-probe-0.1.4.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "openssl_probe",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.4",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.openssl-sys-0.9.70.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.openssl-sys-0.9.70.bazel
deleted file mode 100644
index 2024b3d..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.openssl-sys-0.9.70.bazel
+++ /dev/null
@@ -1,79 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "build-script-main" with type "custom-build" omitted
-
-rust_library(
-    name = "openssl_sys",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-        "--cfg=ossl101",
-        "--cfg=ossl102",
-        "--cfg=ossl102f",
-        "--cfg=ossl102h",
-        "--cfg=ossl110",
-        "--cfg=ossl110f",
-        "--cfg=ossl110g",
-        "--cfg=ossl111",
-        "--cfg=ossl111b",
-        "-l",
-        "dylib=ssl",
-        "-l",
-        "dylib=crypto",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.9.70",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-    ] + selects.with_or({
-        # cfg(target_env = "msvc")
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.percent-encoding-2.1.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.percent-encoding-2.1.0.bazel
deleted file mode 100644
index c791a19..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.percent-encoding-2.1.0.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "percent_encoding",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.1.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.pkg-config-0.3.22.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.pkg-config-0.3.22.bazel
deleted file mode 100644
index 0d4ccef..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.pkg-config-0.3.22.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "pkg_config",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.22",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.ppv-lite86-0.2.15.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.ppv-lite86-0.2.15.bazel
deleted file mode 100644
index 843ee59..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.ppv-lite86-0.2.15.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "ppv_lite86",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "simd",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.15",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.predicates-1.0.8.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.predicates-1.0.8.bazel
deleted file mode 100644
index 49ffdbd..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.predicates-1.0.8.bazel
+++ /dev/null
@@ -1,65 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "case_tree" with type "example" omitted
-
-rust_library(
-    name = "predicates",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "difference",
-        "float-cmp",
-        "normalize-line-endings",
-        "regex",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.8",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__difference__2_0_0//:difference",
-        "@rules_rust_wasm_bindgen__float_cmp__0_8_0//:float_cmp",
-        "@rules_rust_wasm_bindgen__normalize_line_endings__0_3_0//:normalize_line_endings",
-        "@rules_rust_wasm_bindgen__predicates_core__1_0_2//:predicates_core",
-        "@rules_rust_wasm_bindgen__regex__1_5_4//:regex",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.predicates-2.0.3.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.predicates-2.0.3.bazel
deleted file mode 100644
index 01a3dcb..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.predicates-2.0.3.bazel
+++ /dev/null
@@ -1,60 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "case_tree" with type "example" omitted
-
-rust_library(
-    name = "predicates",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "diff",
-        "difflib",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.0.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__difflib__0_4_0//:difflib",
-        "@rules_rust_wasm_bindgen__itertools__0_10_1//:itertools",
-        "@rules_rust_wasm_bindgen__predicates_core__1_0_2//:predicates_core",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.predicates-core-1.0.2.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.predicates-core-1.0.2.bazel
deleted file mode 100644
index a5d5643..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.predicates-core-1.0.2.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "predicates_core",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.2",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.predicates-tree-1.0.4.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.predicates-tree-1.0.4.bazel
deleted file mode 100644
index 3a2eea6..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.predicates-tree-1.0.4.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "failures" with type "example" omitted
-
-rust_library(
-    name = "predicates_tree",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.4",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__predicates_core__1_0_2//:predicates_core",
-        "@rules_rust_wasm_bindgen__termtree__0_2_3//:termtree",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.proc-macro2-1.0.32.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.proc-macro2-1.0.32.bazel
deleted file mode 100644
index 2f4799f..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.proc-macro2-1.0.32.bazel
+++ /dev/null
@@ -1,99 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "proc_macro2_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.32",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "proc_macro2",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-        "--cfg=use_proc_macro",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.32",
-    # buildifier: leave-alone
-    deps = [
-        ":proc_macro2_build_script",
-        "@rules_rust_wasm_bindgen__unicode_xid__0_2_2//:unicode_xid",
-    ],
-)
-
-# Unsupported target "comments" with type "test" omitted
-
-# Unsupported target "features" with type "test" omitted
-
-# Unsupported target "marker" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
-
-# Unsupported target "test_fmt" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.quick-error-1.2.3.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.quick-error-1.2.3.bazel
deleted file mode 100644
index d528050..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.quick-error-1.2.3.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "context" with type "example" omitted
-
-rust_library(
-    name = "quick_error",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.2.3",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.quote-1.0.10.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.quote-1.0.10.bazel
deleted file mode 100644
index 8db384e..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.quote-1.0.10.bazel
+++ /dev/null
@@ -1,62 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "bench" with type "bench" omitted
-
-rust_library(
-    name = "quote",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "proc-macro",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.10",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__proc_macro2__1_0_32//:proc_macro2",
-    ],
-)
-
-# Unsupported target "compiletest" with type "test" omitted
-
-# Unsupported target "test" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rand-0.8.4.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rand-0.8.4.bazel
deleted file mode 100644
index 795e889..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rand-0.8.4.bazel
+++ /dev/null
@@ -1,114 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "rand",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-        "alloc",
-        "default",
-        "getrandom",
-        "libc",
-        "rand_chacha",
-        "rand_hc",
-        "std",
-        "std_rng",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.8.4",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__rand_core__0_6_3//:rand_core",
-    ] + selects.with_or({
-        # cfg(not(target_os = "emscripten"))
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:wasm32-unknown-unknown",
-            "@rules_rust//rust/platform:wasm32-wasi",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_wasm_bindgen__rand_chacha__0_3_1//:rand_chacha",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rand_chacha-0.3.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rand_chacha-0.3.1.bazel
deleted file mode 100644
index ca21d12..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rand_chacha-0.3.1.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "rand_chacha",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.1",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__ppv_lite86__0_2_15//:ppv_lite86",
-        "@rules_rust_wasm_bindgen__rand_core__0_6_3//:rand_core",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rand_core-0.6.3.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rand_core-0.6.3.bazel
deleted file mode 100644
index b8f563d..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rand_core-0.6.3.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "rand_core",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "alloc",
-        "getrandom",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.3",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__getrandom__0_2_3//:getrandom",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rand_hc-0.3.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rand_hc-0.3.1.bazel
deleted file mode 100644
index 0812602..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rand_hc-0.3.1.bazel
+++ /dev/null
@@ -1,54 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "rand_hc",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.1",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__rand_core__0_6_3//:rand_core",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rayon-1.5.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rayon-1.5.1.bazel
deleted file mode 100644
index d125b81..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rayon-1.5.1.bazel
+++ /dev/null
@@ -1,117 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "rayon_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.5.1",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@rules_rust_wasm_bindgen__autocfg__1_0_1//:autocfg",
-    ],
-)
-
-# Unsupported target "cpu_monitor" with type "example" omitted
-
-rust_library(
-    name = "rayon",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.5.1",
-    # buildifier: leave-alone
-    deps = [
-        ":rayon_build_script",
-        "@rules_rust_wasm_bindgen__crossbeam_deque__0_8_1//:crossbeam_deque",
-        "@rules_rust_wasm_bindgen__either__1_6_1//:either",
-        "@rules_rust_wasm_bindgen__rayon_core__1_9_1//:rayon_core",
-    ],
-)
-
-# Unsupported target "chars" with type "test" omitted
-
-# Unsupported target "clones" with type "test" omitted
-
-# Unsupported target "collect" with type "test" omitted
-
-# Unsupported target "cross-pool" with type "test" omitted
-
-# Unsupported target "debug" with type "test" omitted
-
-# Unsupported target "intersperse" with type "test" omitted
-
-# Unsupported target "issue671" with type "test" omitted
-
-# Unsupported target "issue671-unzip" with type "test" omitted
-
-# Unsupported target "iter_panic" with type "test" omitted
-
-# Unsupported target "named-threads" with type "test" omitted
-
-# Unsupported target "octillion" with type "test" omitted
-
-# Unsupported target "producer_split_at" with type "test" omitted
-
-# Unsupported target "sort-panic-safe" with type "test" omitted
-
-# Unsupported target "str" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rayon-core-1.9.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rayon-core-1.9.1.bazel
deleted file mode 100644
index 1b2754b..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rayon-core-1.9.1.bazel
+++ /dev/null
@@ -1,101 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR MIT"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "rayon_core_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    links = "rayon-core",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.9.1",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "rayon_core",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.9.1",
-    # buildifier: leave-alone
-    deps = [
-        ":rayon_core_build_script",
-        "@rules_rust_wasm_bindgen__crossbeam_channel__0_5_1//:crossbeam_channel",
-        "@rules_rust_wasm_bindgen__crossbeam_deque__0_8_1//:crossbeam_deque",
-        "@rules_rust_wasm_bindgen__crossbeam_utils__0_8_5//:crossbeam_utils",
-        "@rules_rust_wasm_bindgen__lazy_static__1_4_0//:lazy_static",
-        "@rules_rust_wasm_bindgen__num_cpus__1_13_0//:num_cpus",
-    ],
-)
-
-# Unsupported target "double_init_fail" with type "test" omitted
-
-# Unsupported target "init_zero_threads" with type "test" omitted
-
-# Unsupported target "scope_join" with type "test" omitted
-
-# Unsupported target "scoped_threadpool" with type "test" omitted
-
-# Unsupported target "simple_panic" with type "test" omitted
-
-# Unsupported target "stack_overflow_crash" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.redox_syscall-0.2.10.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.redox_syscall-0.2.10.bazel
deleted file mode 100644
index 572b544..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.redox_syscall-0.2.10.bazel
+++ /dev/null
@@ -1,63 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-alias(
-    name = "redox_syscall",
-    actual = ":syscall",
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-)
-
-rust_library(
-    name = "syscall",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.10",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__bitflags__1_3_2//:bitflags",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.regex-1.5.4.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.regex-1.5.4.bazel
deleted file mode 100644
index d5527a9..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.regex-1.5.4.bazel
+++ /dev/null
@@ -1,103 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "shootout-regex-dna" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-bytes" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-cheat" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-replace" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-single" with type "example" omitted
-
-# Unsupported target "shootout-regex-dna-single-cheat" with type "example" omitted
-
-rust_library(
-    name = "regex",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "aho-corasick",
-        "default",
-        "memchr",
-        "perf",
-        "perf-cache",
-        "perf-dfa",
-        "perf-inline",
-        "perf-literal",
-        "std",
-        "unicode",
-        "unicode-age",
-        "unicode-bool",
-        "unicode-case",
-        "unicode-gencat",
-        "unicode-perl",
-        "unicode-script",
-        "unicode-segment",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.5.4",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__aho_corasick__0_7_18//:aho_corasick",
-        "@rules_rust_wasm_bindgen__memchr__2_4_1//:memchr",
-        "@rules_rust_wasm_bindgen__regex_syntax__0_6_25//:regex_syntax",
-    ],
-)
-
-# Unsupported target "backtrack" with type "test" omitted
-
-# Unsupported target "backtrack-bytes" with type "test" omitted
-
-# Unsupported target "backtrack-utf8bytes" with type "test" omitted
-
-# Unsupported target "crates-regex" with type "test" omitted
-
-# Unsupported target "default" with type "test" omitted
-
-# Unsupported target "default-bytes" with type "test" omitted
-
-# Unsupported target "nfa" with type "test" omitted
-
-# Unsupported target "nfa-bytes" with type "test" omitted
-
-# Unsupported target "nfa-utf8bytes" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.regex-automata-0.1.10.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.regex-automata-0.1.10.bazel
deleted file mode 100644
index d11e49c..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.regex-automata-0.1.10.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "regex_automata",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.10",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "default" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.regex-syntax-0.6.25.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.regex-syntax-0.6.25.bazel
deleted file mode 100644
index cb10f74..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.regex-syntax-0.6.25.bazel
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "bench" with type "bench" omitted
-
-rust_library(
-    name = "regex_syntax",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "unicode",
-        "unicode-age",
-        "unicode-bool",
-        "unicode-case",
-        "unicode-gencat",
-        "unicode-perl",
-        "unicode-script",
-        "unicode-segment",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.25",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.remove_dir_all-0.5.3.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.remove_dir_all-0.5.3.bazel
deleted file mode 100644
index 4171bd3..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.remove_dir_all-0.5.3.bazel
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "remove_dir_all",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.5.3",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_wasm_bindgen__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rouille-3.4.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rouille-3.4.0.bazel
deleted file mode 100644
index 92a917c..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rouille-3.4.0.bazel
+++ /dev/null
@@ -1,88 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "database" with type "example" omitted
-
-# Unsupported target "git-http-backend" with type "example" omitted
-
-# Unsupported target "hello-world" with type "example" omitted
-
-# Unsupported target "login-session" with type "example" omitted
-
-# Unsupported target "php" with type "example" omitted
-
-# Unsupported target "reverse-proxy" with type "example" omitted
-
-# Unsupported target "simple-form" with type "example" omitted
-
-# Unsupported target "static-files" with type "example" omitted
-
-# Unsupported target "websocket" with type "example" omitted
-
-rust_library(
-    name = "rouille",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    proc_macro_deps = [
-        "@rules_rust_wasm_bindgen__serde_derive__1_0_130//:serde_derive",
-    ],
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "3.4.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__base64__0_13_0//:base64",
-        "@rules_rust_wasm_bindgen__chrono__0_4_19//:chrono",
-        "@rules_rust_wasm_bindgen__filetime__0_2_15//:filetime",
-        "@rules_rust_wasm_bindgen__multipart__0_18_0//:multipart",
-        "@rules_rust_wasm_bindgen__num_cpus__1_13_0//:num_cpus",
-        "@rules_rust_wasm_bindgen__percent_encoding__2_1_0//:percent_encoding",
-        "@rules_rust_wasm_bindgen__rand__0_8_4//:rand",
-        "@rules_rust_wasm_bindgen__serde__1_0_130//:serde",
-        "@rules_rust_wasm_bindgen__serde_json__1_0_69//:serde_json",
-        "@rules_rust_wasm_bindgen__sha1__0_6_0//:sha1",
-        "@rules_rust_wasm_bindgen__threadpool__1_8_1//:threadpool",
-        "@rules_rust_wasm_bindgen__time__0_3_2//:time",
-        "@rules_rust_wasm_bindgen__tiny_http__0_8_2//:tiny_http",
-        "@rules_rust_wasm_bindgen__url__2_2_2//:url",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rustc-demangle-0.1.21.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rustc-demangle-0.1.21.bazel
deleted file mode 100644
index 1b985ba..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.rustc-demangle-0.1.21.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "rustc_demangle",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.21",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.ryu-1.0.5.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.ryu-1.0.5.bazel
deleted file mode 100644
index f0f6478..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.ryu-1.0.5.bazel
+++ /dev/null
@@ -1,101 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR BSL-1.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "ryu_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.5",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-# Unsupported target "bench" with type "bench" omitted
-
-# Unsupported target "upstream_benchmark" with type "example" omitted
-
-rust_library(
-    name = "ryu",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.5",
-    # buildifier: leave-alone
-    deps = [
-        ":ryu_build_script",
-    ],
-)
-
-# Unsupported target "common_test" with type "test" omitted
-
-# Unsupported target "d2s_table_test" with type "test" omitted
-
-# Unsupported target "d2s_test" with type "test" omitted
-
-# Unsupported target "exhaustive" with type "test" omitted
-
-# Unsupported target "f2s_test" with type "test" omitted
-
-# Unsupported target "s2d_test" with type "test" omitted
-
-# Unsupported target "s2f_test" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.safemem-0.3.3.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.safemem-0.3.3.bazel
deleted file mode 100644
index 294d28a..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.safemem-0.3.3.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "safemem",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.3",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.schannel-0.1.19.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.schannel-0.1.19.bazel
deleted file mode 100644
index 4cd6525..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.schannel-0.1.19.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "schannel",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.19",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__lazy_static__1_4_0//:lazy_static",
-        "@rules_rust_wasm_bindgen__winapi__0_3_9//:winapi",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.scopeguard-1.1.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.scopeguard-1.1.0.bazel
deleted file mode 100644
index eac55e3..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.scopeguard-1.1.0.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "readme" with type "example" omitted
-
-rust_library(
-    name = "scopeguard",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.1.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.serde-1.0.130.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.serde-1.0.130.bazel
deleted file mode 100644
index 851d77f..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.serde-1.0.130.bazel
+++ /dev/null
@@ -1,94 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "serde_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "derive",
-        "serde_derive",
-        "std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.130",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "serde",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "derive",
-        "serde_derive",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    proc_macro_deps = [
-        "@rules_rust_wasm_bindgen__serde_derive__1_0_130//:serde_derive",
-    ],
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.130",
-    # buildifier: leave-alone
-    deps = [
-        ":serde_build_script",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.serde_derive-1.0.130.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.serde_derive-1.0.130.bazel
deleted file mode 100644
index ffab3df..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.serde_derive-1.0.130.bazel
+++ /dev/null
@@ -1,88 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "serde_derive_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.130",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_proc_macro(
-    name = "serde_derive",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.130",
-    # buildifier: leave-alone
-    deps = [
-        ":serde_derive_build_script",
-        "@rules_rust_wasm_bindgen__proc_macro2__1_0_32//:proc_macro2",
-        "@rules_rust_wasm_bindgen__quote__1_0_10//:quote",
-        "@rules_rust_wasm_bindgen__syn__1_0_81//:syn",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.serde_json-1.0.69.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.serde_json-1.0.69.bazel
deleted file mode 100644
index 6446158..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.serde_json-1.0.69.bazel
+++ /dev/null
@@ -1,90 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "serde_json_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.69",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "serde_json",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.69",
-    # buildifier: leave-alone
-    deps = [
-        ":serde_json_build_script",
-        "@rules_rust_wasm_bindgen__itoa__0_4_8//:itoa",
-        "@rules_rust_wasm_bindgen__ryu__1_0_5//:ryu",
-        "@rules_rust_wasm_bindgen__serde__1_0_130//:serde",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.sha1-0.6.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.sha1-0.6.0.bazel
deleted file mode 100644
index d08acb1..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.sha1-0.6.0.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # BSD-3-Clause from expression "BSD-3-Clause"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "sha1",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.socket2-0.4.2.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.socket2-0.4.2.bazel
deleted file mode 100644
index d407cf1..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.socket2-0.4.2.bazel
+++ /dev/null
@@ -1,87 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "socket2",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.2",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_wasm_bindgen__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.strsim-0.10.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.strsim-0.10.0.bazel
deleted file mode 100644
index 79f33d0..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.strsim-0.10.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "benches" with type "bench" omitted
-
-rust_library(
-    name = "strsim",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.10.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "lib" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.syn-1.0.81.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.syn-1.0.81.bazel
deleted file mode 100644
index 96f181a..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.syn-1.0.81.bazel
+++ /dev/null
@@ -1,162 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "syn_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "clone-impls",
-        "default",
-        "derive",
-        "extra-traits",
-        "full",
-        "parsing",
-        "printing",
-        "proc-macro",
-        "quote",
-        "visit",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.81",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-# Unsupported target "file" with type "bench" omitted
-
-# Unsupported target "rust" with type "bench" omitted
-
-rust_library(
-    name = "syn",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "clone-impls",
-        "default",
-        "derive",
-        "extra-traits",
-        "full",
-        "parsing",
-        "printing",
-        "proc-macro",
-        "quote",
-        "visit",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.0.81",
-    # buildifier: leave-alone
-    deps = [
-        ":syn_build_script",
-        "@rules_rust_wasm_bindgen__proc_macro2__1_0_32//:proc_macro2",
-        "@rules_rust_wasm_bindgen__quote__1_0_10//:quote",
-        "@rules_rust_wasm_bindgen__unicode_xid__0_2_2//:unicode_xid",
-    ],
-)
-
-# Unsupported target "test_asyncness" with type "test" omitted
-
-# Unsupported target "test_attribute" with type "test" omitted
-
-# Unsupported target "test_derive_input" with type "test" omitted
-
-# Unsupported target "test_expr" with type "test" omitted
-
-# Unsupported target "test_generics" with type "test" omitted
-
-# Unsupported target "test_grouping" with type "test" omitted
-
-# Unsupported target "test_ident" with type "test" omitted
-
-# Unsupported target "test_item" with type "test" omitted
-
-# Unsupported target "test_iterators" with type "test" omitted
-
-# Unsupported target "test_lit" with type "test" omitted
-
-# Unsupported target "test_meta" with type "test" omitted
-
-# Unsupported target "test_parse_buffer" with type "test" omitted
-
-# Unsupported target "test_parse_stream" with type "test" omitted
-
-# Unsupported target "test_pat" with type "test" omitted
-
-# Unsupported target "test_path" with type "test" omitted
-
-# Unsupported target "test_precedence" with type "test" omitted
-
-# Unsupported target "test_receiver" with type "test" omitted
-
-# Unsupported target "test_round_trip" with type "test" omitted
-
-# Unsupported target "test_shebang" with type "test" omitted
-
-# Unsupported target "test_should_parse" with type "test" omitted
-
-# Unsupported target "test_size" with type "test" omitted
-
-# Unsupported target "test_stmt" with type "test" omitted
-
-# Unsupported target "test_token_trees" with type "test" omitted
-
-# Unsupported target "test_ty" with type "test" omitted
-
-# Unsupported target "test_visibility" with type "test" omitted
-
-# Unsupported target "zzz_stable" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.tempfile-3.2.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.tempfile-3.2.0.bazel
deleted file mode 100644
index 10cef58..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.tempfile-3.2.0.bazel
+++ /dev/null
@@ -1,98 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "tempfile",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "3.2.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__cfg_if__1_0_0//:cfg_if",
-        "@rules_rust_wasm_bindgen__rand__0_8_4//:rand",
-        "@rules_rust_wasm_bindgen__remove_dir_all__0_5_3//:remove_dir_all",
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-        ],
-        "//conditions:default": [],
-    }) + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_wasm_bindgen__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-# Unsupported target "namedtempfile" with type "test" omitted
-
-# Unsupported target "spooled" with type "test" omitted
-
-# Unsupported target "tempdir" with type "test" omitted
-
-# Unsupported target "tempfile" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.termcolor-1.1.2.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.termcolor-1.1.2.bazel
deleted file mode 100644
index 5d755f1..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.termcolor-1.1.2.bazel
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "termcolor",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.1.2",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_wasm_bindgen__winapi_util__0_1_5//:winapi_util",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.termtree-0.2.3.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.termtree-0.2.3.bazel
deleted file mode 100644
index 8392103..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.termtree-0.2.3.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT"
-])
-
-# Generated Targets
-
-# Unsupported target "tree" with type "example" omitted
-
-rust_library(
-    name = "termtree",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.3",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.threadpool-1.8.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.threadpool-1.8.1.bazel
deleted file mode 100644
index 5063471..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.threadpool-1.8.1.bazel
+++ /dev/null
@@ -1,54 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "threadpool",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.8.1",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__num_cpus__1_13_0//:num_cpus",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.time-0.3.2.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.time-0.3.2.bazel
deleted file mode 100644
index 19f68bb..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.time-0.3.2.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "benchmarks" with type "bench" omitted
-
-rust_library(
-    name = "time",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "alloc",
-        "default",
-        "local-offset",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.2",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.tiny_http-0.8.2.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.tiny_http-0.8.2.bazel
deleted file mode 100644
index b961910..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.tiny_http-0.8.2.bazel
+++ /dev/null
@@ -1,83 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "bench" with type "bench" omitted
-
-# Unsupported target "hello-world" with type "example" omitted
-
-# Unsupported target "php-cgi" with type "example" omitted
-
-# Unsupported target "readme-example" with type "example" omitted
-
-# Unsupported target "serve-root" with type "example" omitted
-
-# Unsupported target "ssl" with type "example" omitted
-
-# Unsupported target "websockets" with type "example" omitted
-
-rust_library(
-    name = "tiny_http",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.8.2",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__ascii__1_0_0//:ascii",
-        "@rules_rust_wasm_bindgen__chrono__0_4_19//:chrono",
-        "@rules_rust_wasm_bindgen__chunked_transfer__1_4_0//:chunked_transfer",
-        "@rules_rust_wasm_bindgen__log__0_4_14//:log",
-        "@rules_rust_wasm_bindgen__url__2_2_2//:url",
-    ],
-)
-
-# Unsupported target "input-tests" with type "test" omitted
-
-# Unsupported target "network" with type "test" omitted
-
-# Unsupported target "non-chunked-buffering" with type "test" omitted
-
-# Unsupported target "simple-test" with type "test" omitted
-
-# Unsupported target "unblock-test" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.tinyvec-1.5.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.tinyvec-1.5.0.bazel
deleted file mode 100644
index 7ffd979..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.tinyvec-1.5.0.bazel
+++ /dev/null
@@ -1,63 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Zlib from expression "Zlib OR (Apache-2.0 OR MIT)"
-])
-
-# Generated Targets
-
-# Unsupported target "macros" with type "bench" omitted
-
-rust_library(
-    name = "tinyvec",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "alloc",
-        "default",
-        "tinyvec_macros",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.5.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__tinyvec_macros__0_1_0//:tinyvec_macros",
-    ],
-)
-
-# Unsupported target "arrayvec" with type "test" omitted
-
-# Unsupported target "tinyvec" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.tinyvec_macros-0.1.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.tinyvec_macros-0.1.0.bazel
deleted file mode 100644
index 48a87b3..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.tinyvec_macros-0.1.0.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR (Apache-2.0 OR Zlib)"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "tinyvec_macros",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.twoway-0.1.8.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.twoway-0.1.8.bazel
deleted file mode 100644
index d120bdc..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.twoway-0.1.8.bazel
+++ /dev/null
@@ -1,60 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "pathology" with type "bench" omitted
-
-rust_library(
-    name = "twoway",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "use_std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.8",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__memchr__2_4_1//:memchr",
-    ],
-)
-
-# Unsupported target "quick" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.unicase-2.6.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.unicase-2.6.0.bazel
deleted file mode 100644
index f04e0fd..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.unicase-2.6.0.bazel
+++ /dev/null
@@ -1,86 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "unicase_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.6.0",
-    visibility = ["//visibility:private"],
-    deps = [
-        "@rules_rust_wasm_bindgen__version_check__0_9_3//:version_check",
-    ],
-)
-
-rust_library(
-    name = "unicase",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-        "--cfg=__unicase__iter_cmp",
-        "--cfg=__unicase__defauler_hasher",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.6.0",
-    # buildifier: leave-alone
-    deps = [
-        ":unicase_build_script",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.unicode-bidi-0.3.7.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.unicode-bidi-0.3.7.bazel
deleted file mode 100644
index b3221a5..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.unicode-bidi-0.3.7.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "unicode_bidi",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.7",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.unicode-normalization-0.1.19.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.unicode-normalization-0.1.19.bazel
deleted file mode 100644
index b3858b8..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.unicode-normalization-0.1.19.bazel
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "bench" with type "bench" omitted
-
-rust_library(
-    name = "unicode_normalization",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.19",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__tinyvec__1_5_0//:tinyvec",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.unicode-segmentation-1.8.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.unicode-segmentation-1.8.0.bazel
deleted file mode 100644
index bdf802a..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.unicode-segmentation-1.8.0.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "graphemes" with type "bench" omitted
-
-# Unsupported target "unicode_words" with type "bench" omitted
-
-# Unsupported target "word_bounds" with type "bench" omitted
-
-rust_library(
-    name = "unicode_segmentation",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "1.8.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.unicode-xid-0.2.2.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.unicode-xid-0.2.2.bazel
deleted file mode 100644
index 4e29489..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.unicode-xid-0.2.2.bazel
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "xid" with type "bench" omitted
-
-rust_library(
-    name = "unicode_xid",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.2",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
-
-# Unsupported target "exhaustive_tests" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.url-2.2.2.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.url-2.2.2.bazel
deleted file mode 100644
index 965da58..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.url-2.2.2.bazel
+++ /dev/null
@@ -1,63 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "parse_url" with type "bench" omitted
-
-rust_library(
-    name = "url",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "2.2.2",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__form_urlencoded__1_0_1//:form_urlencoded",
-        "@rules_rust_wasm_bindgen__idna__0_2_3//:idna",
-        "@rules_rust_wasm_bindgen__matches__0_1_9//:matches",
-        "@rules_rust_wasm_bindgen__percent_encoding__2_1_0//:percent_encoding",
-    ],
-)
-
-# Unsupported target "data" with type "test" omitted
-
-# Unsupported target "unit" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.vcpkg-0.2.15.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.vcpkg-0.2.15.bazel
deleted file mode 100644
index d58cb85..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.vcpkg-0.2.15.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "vcpkg",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.15",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.version_check-0.9.3.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.version_check-0.9.3.bazel
deleted file mode 100644
index f2848d8..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.version_check-0.9.3.bazel
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "version_check",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.9.3",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wait-timeout-0.2.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wait-timeout-0.2.0.bazel
deleted file mode 100644
index 5c86484..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wait-timeout-0.2.0.bazel
+++ /dev/null
@@ -1,227 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_exit",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/bin/exit.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.0",
-    # buildifier: leave-alone
-    deps = [
-        ":wait_timeout",
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_reader",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/bin/reader.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.0",
-    # buildifier: leave-alone
-    deps = [
-        ":wait_timeout",
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_sleep",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/bin/sleep.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.0",
-    # buildifier: leave-alone
-    deps = [
-        ":wait_timeout",
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-rust_library(
-    name = "wait_timeout",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.0",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(unix)
-        (
-            "@rules_rust//rust/platform:i686-apple-darwin",
-            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-darwin",
-            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:aarch64-apple-darwin",
-            "@rules_rust//rust/platform:aarch64-apple-ios",
-            "@rules_rust//rust/platform:aarch64-linux-android",
-            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
-            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
-            "@rules_rust//rust/platform:i686-linux-android",
-            "@rules_rust//rust/platform:i686-unknown-freebsd",
-            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
-            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
-            "@rules_rust//rust/platform:x86_64-apple-ios",
-            "@rules_rust//rust/platform:x86_64-linux-android",
-            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
-        ): [
-            "@rules_rust_wasm_bindgen__libc__0_2_107//:libc",
-        ],
-        "//conditions:default": [],
-    }),
-)
-
-# Unsupported target "smoke" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.walrus-0.19.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.walrus-0.19.0.bazel
deleted file mode 100644
index 2c656e4..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.walrus-0.19.0.bazel
+++ /dev/null
@@ -1,72 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "benches" with type "bench" omitted
-
-# Unsupported target "build-wasm-from-scratch" with type "example" omitted
-
-# Unsupported target "parse" with type "example" omitted
-
-# Unsupported target "round-trip" with type "example" omitted
-
-rust_library(
-    name = "walrus",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "parallel",
-        "rayon",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    proc_macro_deps = [
-        "@rules_rust_wasm_bindgen__walrus_macro__0_19_0//:walrus_macro",
-    ],
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.19.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-        "@rules_rust_wasm_bindgen__id_arena__2_2_1//:id_arena",
-        "@rules_rust_wasm_bindgen__leb128__0_2_5//:leb128",
-        "@rules_rust_wasm_bindgen__log__0_4_14//:log",
-        "@rules_rust_wasm_bindgen__rayon__1_5_1//:rayon",
-        "@rules_rust_wasm_bindgen__wasmparser__0_77_0//:wasmparser",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.walrus-macro-0.19.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.walrus-macro-0.19.0.bazel
deleted file mode 100644
index c85ede7..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.walrus-macro-0.19.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_proc_macro(
-    name = "walrus_macro",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.19.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__heck__0_3_3//:heck",
-        "@rules_rust_wasm_bindgen__proc_macro2__1_0_32//:proc_macro2",
-        "@rules_rust_wasm_bindgen__quote__1_0_10//:quote",
-        "@rules_rust_wasm_bindgen__syn__1_0_81//:syn",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasi-0.10.2+wasi-snapshot-preview1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasi-0.10.2+wasi-snapshot-preview1.bazel
deleted file mode 100644
index 88a85d4..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasi-0.10.2+wasi-snapshot-preview1.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0 OR (Apache-2.0 OR MIT)"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "wasi",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.10.2+wasi-snapshot-preview1",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-0.2.78.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-0.2.78.bazel
deleted file mode 100644
index b3d6168..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-0.2.78.bazel
+++ /dev/null
@@ -1,105 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "wasm_bindgen_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "default",
-        "spans",
-        "std",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.78",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "wasm_bindgen",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "spans",
-        "std",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    proc_macro_deps = [
-        "@rules_rust_wasm_bindgen__wasm_bindgen_macro__0_2_78//:wasm_bindgen_macro",
-    ],
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.78",
-    # buildifier: leave-alone
-    deps = [
-        ":wasm_bindgen_build_script",
-        "@rules_rust_wasm_bindgen__cfg_if__1_0_0//:cfg_if",
-    ],
-)
-
-# Unsupported target "headless" with type "test" omitted
-
-# Unsupported target "must_use" with type "test" omitted
-
-# Unsupported target "non_wasm" with type "test" omitted
-
-# Unsupported target "std-crate-no-std-dep" with type "test" omitted
-
-# Unsupported target "unwrap_throw" with type "test" omitted
-
-# Unsupported target "wasm" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-backend-0.2.78.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-backend-0.2.78.bazel
deleted file mode 100644
index 2eab676..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-backend-0.2.78.bazel
+++ /dev/null
@@ -1,61 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "wasm_bindgen_backend",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "spans",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.78",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__bumpalo__3_8_0//:bumpalo",
-        "@rules_rust_wasm_bindgen__lazy_static__1_4_0//:lazy_static",
-        "@rules_rust_wasm_bindgen__log__0_4_14//:log",
-        "@rules_rust_wasm_bindgen__proc_macro2__1_0_32//:proc_macro2",
-        "@rules_rust_wasm_bindgen__quote__1_0_10//:quote",
-        "@rules_rust_wasm_bindgen__syn__1_0_81//:syn",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_shared__0_2_78//:wasm_bindgen_shared",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-cli-0.2.78.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-cli-0.2.78.bazel
deleted file mode 100644
index da9e03e..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-cli-0.2.78.bazel
+++ /dev/null
@@ -1,149 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_wasm_bindgen",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/bin/wasm-bindgen.rs",
-    data = [],
-    edition = "2018",
-    proc_macro_deps = [
-        "@rules_rust_wasm_bindgen__serde_derive__1_0_130//:serde_derive",
-    ],
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.78",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-        "@rules_rust_wasm_bindgen__curl__0_4_40//:curl",
-        "@rules_rust_wasm_bindgen__docopt__1_1_1//:docopt",
-        "@rules_rust_wasm_bindgen__env_logger__0_8_4//:env_logger",
-        "@rules_rust_wasm_bindgen__log__0_4_14//:log",
-        "@rules_rust_wasm_bindgen__rouille__3_4_0//:rouille",
-        "@rules_rust_wasm_bindgen__serde__1_0_130//:serde",
-        "@rules_rust_wasm_bindgen__serde_json__1_0_69//:serde_json",
-        "@rules_rust_wasm_bindgen__walrus__0_19_0//:walrus",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_cli_support__0_2_78//:wasm_bindgen_cli_support",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_shared__0_2_78//:wasm_bindgen_shared",
-    ],
-)
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_wasm_bindgen_test_runner",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/bin/wasm-bindgen-test-runner/main.rs",
-    data = [],
-    edition = "2018",
-    proc_macro_deps = [
-        "@rules_rust_wasm_bindgen__serde_derive__1_0_130//:serde_derive",
-    ],
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.78",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-        "@rules_rust_wasm_bindgen__curl__0_4_40//:curl",
-        "@rules_rust_wasm_bindgen__docopt__1_1_1//:docopt",
-        "@rules_rust_wasm_bindgen__env_logger__0_8_4//:env_logger",
-        "@rules_rust_wasm_bindgen__log__0_4_14//:log",
-        "@rules_rust_wasm_bindgen__rouille__3_4_0//:rouille",
-        "@rules_rust_wasm_bindgen__serde__1_0_130//:serde",
-        "@rules_rust_wasm_bindgen__serde_json__1_0_69//:serde_json",
-        "@rules_rust_wasm_bindgen__walrus__0_19_0//:walrus",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_cli_support__0_2_78//:wasm_bindgen_cli_support",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_shared__0_2_78//:wasm_bindgen_shared",
-    ],
-)
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_wasm2es6js",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/bin/wasm2es6js.rs",
-    data = [],
-    edition = "2018",
-    proc_macro_deps = [
-        "@rules_rust_wasm_bindgen__serde_derive__1_0_130//:serde_derive",
-    ],
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.78",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-        "@rules_rust_wasm_bindgen__curl__0_4_40//:curl",
-        "@rules_rust_wasm_bindgen__docopt__1_1_1//:docopt",
-        "@rules_rust_wasm_bindgen__env_logger__0_8_4//:env_logger",
-        "@rules_rust_wasm_bindgen__log__0_4_14//:log",
-        "@rules_rust_wasm_bindgen__rouille__3_4_0//:rouille",
-        "@rules_rust_wasm_bindgen__serde__1_0_130//:serde",
-        "@rules_rust_wasm_bindgen__serde_json__1_0_69//:serde_json",
-        "@rules_rust_wasm_bindgen__walrus__0_19_0//:walrus",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_cli_support__0_2_78//:wasm_bindgen_cli_support",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_shared__0_2_78//:wasm_bindgen_shared",
-    ],
-)
-
-# Unsupported target "interface-types" with type "test" omitted
-
-# Unsupported target "reference" with type "test" omitted
-
-# Unsupported target "wasm-bindgen" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-cli-support-0.2.78.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-cli-support-0.2.78.bazel
deleted file mode 100644
index 383b043..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-cli-support-0.2.78.bazel
+++ /dev/null
@@ -1,69 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "wasm_bindgen_cli_support",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.78",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-        "@rules_rust_wasm_bindgen__base64__0_9_3//:base64",
-        "@rules_rust_wasm_bindgen__log__0_4_14//:log",
-        "@rules_rust_wasm_bindgen__rustc_demangle__0_1_21//:rustc_demangle",
-        "@rules_rust_wasm_bindgen__serde_json__1_0_69//:serde_json",
-        "@rules_rust_wasm_bindgen__tempfile__3_2_0//:tempfile",
-        "@rules_rust_wasm_bindgen__walrus__0_19_0//:walrus",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_externref_xform__0_2_78//:wasm_bindgen_externref_xform",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_multi_value_xform__0_2_78//:wasm_bindgen_multi_value_xform",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_shared__0_2_78//:wasm_bindgen_shared",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_threads_xform__0_2_78//:wasm_bindgen_threads_xform",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_wasm_conventions__0_2_78//:wasm_bindgen_wasm_conventions",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_wasm_interpreter__0_2_78//:wasm_bindgen_wasm_interpreter",
-        "@rules_rust_wasm_bindgen__wit_text__0_8_0//:wit_text",
-        "@rules_rust_wasm_bindgen__wit_validator__0_2_1//:wit_validator",
-        "@rules_rust_wasm_bindgen__wit_walrus__0_6_0//:wit_walrus",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-externref-xform-0.2.78.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-externref-xform-0.2.78.bazel
deleted file mode 100644
index fd43bb2..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-externref-xform-0.2.78.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "wasm_bindgen_externref_xform",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.78",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-        "@rules_rust_wasm_bindgen__walrus__0_19_0//:walrus",
-    ],
-)
-
-# Unsupported target "all" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-macro-0.2.78.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-macro-0.2.78.bazel
deleted file mode 100644
index eef1fa1..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-macro-0.2.78.bazel
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_proc_macro(
-    name = "wasm_bindgen_macro",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "spans",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.78",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__quote__1_0_10//:quote",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_macro_support__0_2_78//:wasm_bindgen_macro_support",
-    ],
-)
-
-# Unsupported target "ui" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-macro-support-0.2.78.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-macro-support-0.2.78.bazel
deleted file mode 100644
index 4676a13..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-macro-support-0.2.78.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "wasm_bindgen_macro_support",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "spans",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.78",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__proc_macro2__1_0_32//:proc_macro2",
-        "@rules_rust_wasm_bindgen__quote__1_0_10//:quote",
-        "@rules_rust_wasm_bindgen__syn__1_0_81//:syn",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_backend__0_2_78//:wasm_bindgen_backend",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_shared__0_2_78//:wasm_bindgen_shared",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-multi-value-xform-0.2.78.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-multi-value-xform-0.2.78.bazel
deleted file mode 100644
index 194a8b0..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-multi-value-xform-0.2.78.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "wasm_bindgen_multi_value_xform",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.78",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-        "@rules_rust_wasm_bindgen__walrus__0_19_0//:walrus",
-    ],
-)
-
-# Unsupported target "all" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-shared-0.2.78.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-shared-0.2.78.bazel
deleted file mode 100644
index 9a73b97..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-shared-0.2.78.bazel
+++ /dev/null
@@ -1,84 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "wasm_bindgen_shared_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2018",
-    links = "wasm_bindgen",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.78",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "wasm_bindgen_shared",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.78",
-    # buildifier: leave-alone
-    deps = [
-        ":wasm_bindgen_shared_build_script",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-threads-xform-0.2.78.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-threads-xform-0.2.78.bazel
deleted file mode 100644
index 6e22501..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-threads-xform-0.2.78.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "wasm_bindgen_threads_xform",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.78",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-        "@rules_rust_wasm_bindgen__walrus__0_19_0//:walrus",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_wasm_conventions__0_2_78//:wasm_bindgen_wasm_conventions",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-wasm-conventions-0.2.78.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-wasm-conventions-0.2.78.bazel
deleted file mode 100644
index c847aaa..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-wasm-conventions-0.2.78.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "wasm_bindgen_wasm_conventions",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.78",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-        "@rules_rust_wasm_bindgen__walrus__0_19_0//:walrus",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-wasm-interpreter-0.2.78.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-wasm-interpreter-0.2.78.bazel
deleted file mode 100644
index 216f2c9..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasm-bindgen-wasm-interpreter-0.2.78.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "wasm_bindgen_wasm_interpreter",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.78",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-        "@rules_rust_wasm_bindgen__log__0_4_14//:log",
-        "@rules_rust_wasm_bindgen__walrus__0_19_0//:walrus",
-        "@rules_rust_wasm_bindgen__wasm_bindgen_wasm_conventions__0_2_78//:wasm_bindgen_wasm_conventions",
-    ],
-)
-
-# Unsupported target "smoke" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasmparser-0.59.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasmparser-0.59.0.bazel
deleted file mode 100644
index b67db40..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasmparser-0.59.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "benchmark" with type "bench" omitted
-
-# Unsupported target "simple" with type "example" omitted
-
-rust_library(
-    name = "wasmparser",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.59.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasmparser-0.77.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasmparser-0.77.0.bazel
deleted file mode 100644
index c90a80d..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasmparser-0.77.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "benchmark" with type "bench" omitted
-
-# Unsupported target "simple" with type "example" omitted
-
-rust_library(
-    name = "wasmparser",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.77.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasmparser-0.81.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasmparser-0.81.0.bazel
deleted file mode 100644
index ec6874c..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasmparser-0.81.0.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "benchmark" with type "bench" omitted
-
-# Unsupported target "simple" with type "example" omitted
-
-rust_library(
-    name = "wasmparser",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.81.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasmprinter-0.2.31.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasmprinter-0.2.31.bazel
deleted file mode 100644
index d160327..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wasmprinter-0.2.31.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "wasmprinter",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.31",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-        "@rules_rust_wasm_bindgen__wasmparser__0_81_0//:wasmparser",
-    ],
-)
-
-# Unsupported target "all" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wast-21.0.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wast-21.0.0.bazel
deleted file mode 100644
index dafc212..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wast-21.0.0.bazel
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "wast",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "default",
-        "wasm-module",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "21.0.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__leb128__0_2_5//:leb128",
-    ],
-)
-
-# Unsupported target "annotations" with type "test" omitted
-
-# Unsupported target "comments" with type "test" omitted
-
-# Unsupported target "parse-fail" with type "test" omitted
-
-# Unsupported target "recursive" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.winapi-0.3.9.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.winapi-0.3.9.bazel
deleted file mode 100644
index b741a2c..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.winapi-0.3.9.bazel
+++ /dev/null
@@ -1,133 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "winapi_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-        "consoleapi",
-        "errhandlingapi",
-        "fileapi",
-        "handleapi",
-        "libloaderapi",
-        "lmcons",
-        "minschannel",
-        "minwinbase",
-        "minwindef",
-        "processenv",
-        "schannel",
-        "securitybaseapi",
-        "sspi",
-        "std",
-        "sysinfoapi",
-        "timezoneapi",
-        "winbase",
-        "wincon",
-        "wincrypt",
-        "winerror",
-        "winnt",
-        "winsock2",
-        "ws2def",
-        "ws2ipdef",
-        "ws2tcpip",
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.9",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "winapi",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-        "consoleapi",
-        "errhandlingapi",
-        "fileapi",
-        "handleapi",
-        "libloaderapi",
-        "lmcons",
-        "minschannel",
-        "minwinbase",
-        "minwindef",
-        "processenv",
-        "schannel",
-        "securitybaseapi",
-        "sspi",
-        "std",
-        "sysinfoapi",
-        "timezoneapi",
-        "winbase",
-        "wincon",
-        "wincrypt",
-        "winerror",
-        "winnt",
-        "winsock2",
-        "ws2def",
-        "ws2ipdef",
-        "ws2tcpip",
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.3.9",
-    # buildifier: leave-alone
-    deps = [
-        ":winapi_build_script",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
deleted file mode 100644
index 2bd58be..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel
+++ /dev/null
@@ -1,83 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "winapi_i686_pc_windows_gnu_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.0",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "winapi_i686_pc_windows_gnu",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.0",
-    # buildifier: leave-alone
-    deps = [
-        ":winapi_i686_pc_windows_gnu_build_script",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.winapi-util-0.1.5.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.winapi-util-0.1.5.bazel
deleted file mode 100644
index 9cf3e74..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.winapi-util-0.1.5.bazel
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "unencumbered",  # Unlicense from expression "Unlicense OR MIT"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "winapi_util",
-    srcs = glob(["**/*.rs"]),
-    aliases = {
-    },
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.5",
-    # buildifier: leave-alone
-    deps = [
-    ] + selects.with_or({
-        # cfg(windows)
-        (
-            "@rules_rust//rust/platform:i686-pc-windows-msvc",
-            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
-        ): [
-            "@rules_rust_wasm_bindgen__winapi__0_3_9//:winapi",
-        ],
-        "//conditions:default": [],
-    }),
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
deleted file mode 100644
index 41d0496..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel
+++ /dev/null
@@ -1,83 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # MIT from expression "MIT OR Apache-2.0"
-])
-
-# Generated Targets
-# buildifier: disable=out-of-order-load
-# buildifier: disable=load-on-top
-load(
-    "@rules_rust//cargo:cargo_build_script.bzl",
-    "cargo_build_script",
-)
-
-cargo_build_script(
-    name = "winapi_x86_64_pc_windows_gnu_build_script",
-    srcs = glob(["**/*.rs"]),
-    build_script_env = {
-    },
-    crate_features = [
-    ],
-    crate_root = "build.rs",
-    data = glob(["**"]),
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.0",
-    visibility = ["//visibility:private"],
-    deps = [
-    ],
-)
-
-rust_library(
-    name = "winapi_x86_64_pc_windows_gnu",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2015",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.4.0",
-    # buildifier: leave-alone
-    deps = [
-        ":winapi_x86_64_pc_windows_gnu_build_script",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-parser-0.2.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-parser-0.2.0.bazel
deleted file mode 100644
index d571710..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-parser-0.2.0.bazel
+++ /dev/null
@@ -1,56 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "wit_parser",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-        "@rules_rust_wasm_bindgen__leb128__0_2_5//:leb128",
-        "@rules_rust_wasm_bindgen__wit_schema_version__0_1_0//:wit_schema_version",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-printer-0.2.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-printer-0.2.0.bazel
deleted file mode 100644
index 51f92a1..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-printer-0.2.0.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "wasm2wat" with type "example" omitted
-
-rust_library(
-    name = "wit_printer",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-        "@rules_rust_wasm_bindgen__wasmprinter__0_2_31//:wasmprinter",
-        "@rules_rust_wasm_bindgen__wit_parser__0_2_0//:wit_parser",
-        "@rules_rust_wasm_bindgen__wit_schema_version__0_1_0//:wit_schema_version",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-schema-version-0.1.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-schema-version-0.1.0.bazel
deleted file mode 100644
index cda38e4..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-schema-version-0.1.0.bazel
+++ /dev/null
@@ -1,77 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0"
-])
-
-# Generated Targets
-
-rust_binary(
-    # Prefix bin name to disambiguate from (probable) collision with lib name
-    # N.B.: The exact form of this is subject to change.
-    name = "cargo_bin_wit_schema_version",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/main.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.0",
-    # buildifier: leave-alone
-    deps = [
-        ":wit_schema_version",
-    ],
-)
-
-rust_library(
-    name = "wit_schema_version",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.1.0",
-    # buildifier: leave-alone
-    deps = [
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-text-0.8.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-text-0.8.0.bazel
deleted file mode 100644
index 29c068f..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-text-0.8.0.bazel
+++ /dev/null
@@ -1,60 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0"
-])
-
-# Generated Targets
-
-# Unsupported target "wat2wasm" with type "example" omitted
-
-rust_library(
-    name = "wit_text",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.8.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-        "@rules_rust_wasm_bindgen__wast__21_0_0//:wast",
-        "@rules_rust_wasm_bindgen__wit_writer__0_2_0//:wit_writer",
-    ],
-)
-
-# Unsupported target "all" with type "test" omitted
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-validator-0.2.1.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-validator-0.2.1.bazel
deleted file mode 100644
index 4e3f09c..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-validator-0.2.1.bazel
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "wit_validator",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.1",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-        "@rules_rust_wasm_bindgen__wasmparser__0_59_0//:wasmparser",
-        "@rules_rust_wasm_bindgen__wit_parser__0_2_0//:wit_parser",
-        "@rules_rust_wasm_bindgen__wit_schema_version__0_1_0//:wit_schema_version",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-walrus-0.6.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-walrus-0.6.0.bazel
deleted file mode 100644
index 802ae7f..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-walrus-0.6.0.bazel
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "wit_walrus",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.6.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__anyhow__1_0_45//:anyhow",
-        "@rules_rust_wasm_bindgen__id_arena__2_2_1//:id_arena",
-        "@rules_rust_wasm_bindgen__walrus__0_19_0//:walrus",
-        "@rules_rust_wasm_bindgen__wit_parser__0_2_0//:wit_parser",
-        "@rules_rust_wasm_bindgen__wit_schema_version__0_1_0//:wit_schema_version",
-        "@rules_rust_wasm_bindgen__wit_writer__0_2_0//:wit_writer",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-writer-0.2.0.bazel b/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-writer-0.2.0.bazel
deleted file mode 100644
index e1357c4..0000000
--- a/third_party/rules_rust/wasm_bindgen/raze/remote/BUILD.wit-writer-0.2.0.bazel
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-@generated
-cargo-raze crate build file.
-
-DO NOT EDIT! Replaced on runs of cargo-raze
-"""
-
-# buildifier: disable=load
-load("@bazel_skylib//lib:selects.bzl", "selects")
-
-# buildifier: disable=load
-load(
-    "@rules_rust//rust:defs.bzl",
-    "rust_binary",
-    "rust_library",
-    "rust_proc_macro",
-    "rust_test",
-)
-
-package(default_visibility = [
-    # Public for visibility by "@raze__crate__version//" targets.
-    #
-    # Prefer access through "//wasm_bindgen/raze", which limits external
-    # visibility to explicit Cargo.toml dependencies.
-    "//visibility:public",
-])
-
-licenses([
-    "notice",  # Apache-2.0 from expression "Apache-2.0"
-])
-
-# Generated Targets
-
-rust_library(
-    name = "wit_writer",
-    srcs = glob(["**/*.rs"]),
-    crate_features = [
-    ],
-    crate_root = "src/lib.rs",
-    data = [],
-    edition = "2018",
-    rustc_flags = [
-        "--cap-lints=allow",
-    ],
-    tags = [
-        "cargo-raze",
-        "manual",
-    ],
-    version = "0.2.0",
-    # buildifier: leave-alone
-    deps = [
-        "@rules_rust_wasm_bindgen__leb128__0_2_5//:leb128",
-        "@rules_rust_wasm_bindgen__wit_schema_version__0_1_0//:wit_schema_version",
-    ],
-)
diff --git a/third_party/rules_rust/wasm_bindgen/repositories.bzl b/third_party/rules_rust/wasm_bindgen/repositories.bzl
index 05fca81..1eac795 100644
--- a/third_party/rules_rust/wasm_bindgen/repositories.bzl
+++ b/third_party/rules_rust/wasm_bindgen/repositories.bzl
@@ -15,26 +15,61 @@
 # buildifier: disable=module-docstring
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
-load("//wasm_bindgen/raze:crates.bzl", "rules_rust_wasm_bindgen_fetch_remote_crates")
+load("//wasm_bindgen/3rdparty/crates:defs.bzl", "crate_repositories")
+
+WASM_BINDGEN_VERSION = "0.2.81"
+
+# buildifier: disable=unnamed-macro
+def rust_wasm_bindgen_dependencies():
+    """Declare dependencies needed for the `rules_rust` [wasm-bindgen][wb] rules.
+
+    [wb]: https://github.com/rustwasm/wasm-bindgen
+    """
+
+    maybe(
+        http_archive,
+        name = "rules_rust_wasm_bindgen_cli",
+        sha256 = "b255b6ab0d645af253319a990ad1f62e9efe2e72d353155f30834c10ecdb0af3",
+        urls = ["https://crates.io/api/v1/crates/wasm-bindgen-cli/{}/download".format(WASM_BINDGEN_VERSION)],
+        type = "tar.gz",
+        strip_prefix = "wasm-bindgen-cli-{}".format(WASM_BINDGEN_VERSION),
+        build_file = Label("//wasm_bindgen/3rdparty:BUILD.wasm-bindgen-cli.bazel"),
+    )
+
+    maybe(
+        http_archive,
+        name = "rules_nodejs",
+        sha256 = "017e2348bb8431156d5cf89b6f502c2e7fcffc568729f74f89e4a12bd8279e90",
+        urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.5.2/rules_nodejs-core-5.5.2.tar.gz"],
+    )
+
+    crate_repositories()
+
+# buildifier: disable=unnamed-macro
+def rust_wasm_bindgen_register_toolchains(register_toolchains = True):
+    """Registers the default toolchains for the `rules_rust` [wasm-bindgen][wb] rules.
+
+    [wb]: https://github.com/rustwasm/wasm-bindgen
+
+    Args:
+        register_toolchains (bool, optional): Whether or not to register toolchains.
+    """
+
+    if register_toolchains:
+        native.register_toolchains(str(Label("//wasm_bindgen:default_wasm_bindgen_toolchain")))
 
 # buildifier: disable=unnamed-macro
 def rust_wasm_bindgen_repositories(register_default_toolchain = True):
     """Declare dependencies needed for [rust_wasm_bindgen](#rust_wasm_bindgen).
 
+    **Deprecated**: Use [rust_wasm_bindgen_dependencies](#rust_wasm_bindgen_depednencies) and [rust_wasm_bindgen_register_toolchains](#rust_wasm_bindgen_register_toolchains).
+
     Args:
         register_default_toolchain (bool, optional): If True, the default [rust_wasm_bindgen_toolchain](#rust_wasm_bindgen_toolchain)
             (`@rules_rust//wasm_bindgen:default_wasm_bindgen_toolchain`) is registered. This toolchain requires a set of dependencies
             that were generated using [cargo raze](https://github.com/google/cargo-raze). These will also be loaded.
     """
 
-    maybe(
-        http_archive,
-        name = "build_bazel_rules_nodejs",
-        sha256 = "ddb78717b802f8dd5d4c01c340ecdc007c8ced5c1df7db421d0df3d642ea0580",
-        urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/4.6.0/rules_nodejs-4.6.0.tar.gz"],
-    )
+    rust_wasm_bindgen_dependencies()
 
-    # Load dependencies of the default toolchain and register it.
-    if register_default_toolchain:
-        rules_rust_wasm_bindgen_fetch_remote_crates()
-        native.register_toolchains(str(Label("//wasm_bindgen:default_wasm_bindgen_toolchain")))
+    rust_wasm_bindgen_register_toolchains(register_toolchains = register_default_toolchain)
diff --git a/third_party/rules_rust/wasm_bindgen/wasm_bindgen.bzl b/third_party/rules_rust/wasm_bindgen/wasm_bindgen.bzl
index d3a5524..9794313 100644
--- a/third_party/rules_rust/wasm_bindgen/wasm_bindgen.bzl
+++ b/third_party/rules_rust/wasm_bindgen/wasm_bindgen.bzl
@@ -20,9 +20,7 @@
 load(
     "//wasm_bindgen:providers.bzl",
     "DeclarationInfo",
-    "JSEcmaScriptModuleInfo",
     "JSModuleInfo",
-    "JSNamedModuleInfo",
 )
 
 _WASM_BINDGEN_DOC = """\
@@ -60,7 +58,7 @@
 toolchain(
     name = "wasm_bindgen_toolchain",
     toolchain = "wasm_bindgen_toolchain_impl",
-    toolchain_type = "@rules_rust//wasm_bindgen:wasm_bindgen_toolchain",
+    toolchain_type = "@rules_rust//wasm_bindgen:toolchain_type",
 )
 ```
 
@@ -131,7 +129,6 @@
     # Return a structure that is compatible with the deps[] of a ts_library.
     declarations = depset(ts_out)
     es5_sources = depset(js_out)
-    es6_sources = depset(js_out)
 
     return [
         DefaultInfo(
@@ -146,14 +143,6 @@
             direct_sources = es5_sources,
             sources = es5_sources,
         ),
-        JSNamedModuleInfo(
-            direct_sources = es5_sources,
-            sources = es5_sources,
-        ),
-        JSEcmaScriptModuleInfo(
-            direct_sources = es6_sources,
-            sources = es6_sources,
-        ),
     ]
 
 rust_wasm_bindgen = rule(
diff --git a/tools/actions/generate_compile_command.py b/tools/actions/generate_compile_command.py
index b41f2fc..6f10e09 100755
--- a/tools/actions/generate_compile_command.py
+++ b/tools/actions/generate_compile_command.py
@@ -5,23 +5,26 @@
 
 import third_party.bazel.protos.extra_actions_base_pb2 as extra_actions_base_pb2
 
+
 def _get_cpp_command(cpp_compile_info):
-  compiler = cpp_compile_info.tool
-  options = ' '.join(cpp_compile_info.compiler_option)
-  source = cpp_compile_info.source_file
-  output = cpp_compile_info.output_file
-  return '%s %s -c %s -o %s' % (compiler, options, source, output), source
+    compiler = cpp_compile_info.tool
+    options = ' '.join(cpp_compile_info.compiler_option)
+    source = cpp_compile_info.source_file
+    output = cpp_compile_info.output_file
+    return '%s %s -c %s -o %s' % (compiler, options, source, output), source
+
 
 def main(argv):
-  action = extra_actions_base_pb2.ExtraActionInfo()
-  with open(argv[1], 'rb') as f:
-    action.MergeFromString(f.read())
-  command, source_file = _get_cpp_command(
-      action.Extensions[extra_actions_base_pb2.CppCompileInfo.cpp_compile_info])
-  with open(argv[2], 'w') as f:
-    f.write(command)
-    f.write('\0')
-    f.write(source_file)
+    action = extra_actions_base_pb2.ExtraActionInfo()
+    with open(argv[1], 'rb') as f:
+        action.MergeFromString(f.read())
+    command, source_file = _get_cpp_command(action.Extensions[
+        extra_actions_base_pb2.CppCompileInfo.cpp_compile_info])
+    with open(argv[2], 'w') as f:
+        f.write(command)
+        f.write('\0')
+        f.write(source_file)
+
 
 if __name__ == '__main__':
-  sys.exit(main(sys.argv))
+    sys.exit(main(sys.argv))
diff --git a/tools/actions/generate_compile_commands_json.py b/tools/actions/generate_compile_commands_json.py
index d867698..04df592 100755
--- a/tools/actions/generate_compile_commands_json.py
+++ b/tools/actions/generate_compile_commands_json.py
@@ -13,7 +13,6 @@
 import pathlib
 import os.path
 import subprocess
-
 '''
 Args:
   path: The pathlib.Path to _compile_command file.
@@ -21,18 +20,21 @@
 
 Returns a string to stick in compile_commands.json.
 '''
+
+
 def _get_command(path, command_directory):
-  with path.open('r') as f:
-    contents = f.read().split('\0')
-    if len(contents) != 2:
-      # Old/incomplete file or something; silently ignore it.
-      return None
-    return '''{
+    with path.open('r') as f:
+        contents = f.read().split('\0')
+        if len(contents) != 2:
+            # Old/incomplete file or something; silently ignore it.
+            return None
+        return '''{
         "directory": "%s",
         "command": "%s",
         "file": "%s",
       },''' % (command_directory, contents[0].replace('"', '\\"'), contents[1])
 
+
 '''
 Args:
   path: A directory pathlib.Path to look for _compile_command files under.
@@ -40,29 +42,34 @@
 
 Yields strings to stick in compile_commands.json.
 '''
+
+
 def _get_compile_commands(path, command_directory):
-  for f in path.iterdir():
-    if f.is_dir():
-      yield from _get_compile_commands(f, command_directory)
-    elif f.name.endswith('_compile_command'):
-      command = _get_command(f, command_directory)
-      if command:
-        yield command
+    for f in path.iterdir():
+        if f.is_dir():
+            yield from _get_compile_commands(f, command_directory)
+        elif f.name.endswith('_compile_command'):
+            command = _get_command(f, command_directory)
+            if command:
+                yield command
+
 
 def main(argv):
-  source_path = os.path.join(os.path.dirname(__file__), '../..')
-  action_outs = os.path.join(source_path,
-                             'bazel-bin/../extra_actions',
-                             'tools/actions/generate_compile_commands_action')
-  command_directory = subprocess.check_output(
-      ('bazel', 'info', 'execution_root'),
-      cwd=source_path).decode('utf-8').rstrip()
-  commands = _get_compile_commands(pathlib.Path(action_outs), command_directory)
-  with open(os.path.join(source_path, 'compile_commands.json'), 'w') as f:
-    f.write('[')
-    for command in commands:
-      f.write(command)
-    f.write(']')
+    source_path = os.path.join(os.path.dirname(__file__), '../..')
+    action_outs = os.path.join(
+        source_path, 'bazel-bin/../extra_actions',
+        'tools/actions/generate_compile_commands_action')
+    command_directory = subprocess.check_output(
+        ('bazel', 'info', 'execution_root'),
+        cwd=source_path).decode('utf-8').rstrip()
+    commands = _get_compile_commands(pathlib.Path(action_outs),
+                                     command_directory)
+    with open(os.path.join(source_path, 'compile_commands.json'), 'w') as f:
+        f.write('[')
+        for command in commands:
+            f.write(command)
+        f.write(']')
+
 
 if __name__ == '__main__':
-  sys.exit(main(sys.argv))
+    sys.exit(main(sys.argv))
diff --git a/tools/build_rules/apache_runner.py b/tools/build_rules/apache_runner.py
index 3839cb0..87d7224 100644
--- a/tools/build_rules/apache_runner.py
+++ b/tools/build_rules/apache_runner.py
@@ -34,6 +34,7 @@
 dummy@frc971.org
 """
 
+
 def wait_for_server(port: int):
     """Waits for the server at the specified port to respond to TCP connections."""
     while True:
@@ -46,102 +47,110 @@
             connection.close()
             time.sleep(0.01)
 
+
 def main(argv):
-  parser = argparse.ArgumentParser()
-  parser.add_argument("--binary", type=str, required=True)
-  parser.add_argument("--https_port", type=int, default=7000)
-  parser.add_argument("--wrapped_port", type=int, default=7500)
-  parser.add_argument(
-    "--ldap_info",
-    type=str,
-    help="JSON file containing 'ldap_bind_dn', 'ldap_url', and 'ldap_password' entries.",
-    default="",
-  )
-  args, unknown_args = parser.parse_known_args(argv[1:])
-
-  if not args.ldap_info:
-    args.ldap_info = os.path.join(os.environ["BUILD_WORKSPACE_DIRECTORY"], "ldap.json")
-
-  with open("tools/build_rules/apache_template.conf", "r") as file:
-    template = jinja2.Template(file.read())
-
-  with open(args.ldap_info, "r") as file:
-    substitutions = json.load(file)
-
-  for key in ("ldap_bind_dn", "ldap_url", "ldap_password"):
-    if key not in substitutions:
-      raise KeyError(f"The ldap_info JSON file must contain key '{key}'.")
-
-  substitutions.update({
-    "https_port": args.https_port,
-    "wrapped_port": args.wrapped_port,
-  })
-
-  config_text = template.render(substitutions)
-
-  with tempfile.TemporaryDirectory() as temp_dir:
-    temp_dir = Path(temp_dir)
-    with open(temp_dir / "apache2.conf", "w") as file:
-      file.write(config_text)
-
-    # Create a directory for error logs and such.
-    logs_dir = temp_dir / "logs"
-    os.mkdir(logs_dir)
-
-    print("-" * 60)
-    print(f"Logs are in {logs_dir}/")
-    print("-" * 60)
-
-    # Make modules available.
-    modules_path = Path("external/apache2/usr/lib/apache2/modules")
-    os.symlink(modules_path.resolve(), temp_dir / "modules")
-
-    # Generate a testing cert.
-    subprocess.run([
-        "openssl",
-        "req",
-        "-x509",
-        "-nodes",
-        "-days=365",
-        "-newkey=rsa:2048",
-        "-keyout=" + str(temp_dir / "apache-selfsigned.key"),
-        "-out="  + str(temp_dir / "apache-selfsigned.crt"),
-      ],
-      check=True,
-      input=DUMMY_CERT_ANSWERS,
-      text=True,
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--binary", type=str, required=True)
+    parser.add_argument("--https_port", type=int, default=7000)
+    parser.add_argument("--wrapped_port", type=int, default=7500)
+    parser.add_argument(
+        "--ldap_info",
+        type=str,
+        help=
+        "JSON file containing 'ldap_bind_dn', 'ldap_url', and 'ldap_password' entries.",
+        default="",
     )
+    args, unknown_args = parser.parse_known_args(argv[1:])
 
-    # Start the wrapped binary in the background.
-    # Tell it via the environment what port to listen on.
-    env = os.environ.copy()
-    env["APACHE_WRAPPED_PORT"] = str(args.wrapped_port)
-    wrapped_binary = subprocess.Popen([args.binary] + unknown_args, env=env)
+    if not args.ldap_info:
+        args.ldap_info = os.path.join(os.environ["BUILD_WORKSPACE_DIRECTORY"],
+                                      "ldap.json")
 
-    # Start the apache server.
-    env = os.environ.copy()
-    env["LD_LIBRARY_PATH"] = "external/apache2/usr/lib/x86_64-linux-gnu"
-    apache = subprocess.Popen(
-      ["external/apache2/usr/sbin/apache2", "-X", "-d", str(temp_dir)],
-      env=env,
-    )
+    with open("tools/build_rules/apache_template.conf", "r") as file:
+        template = jinja2.Template(file.read())
 
-    wait_for_server(args.https_port)
-    wait_for_server(args.wrapped_port)
-    # Sleep to attempt to get the HTTPS message after the webserver message.
-    time.sleep(1)
-    print(f"Serving HTTPS on port {args.https_port}")
+    with open(args.ldap_info, "r") as file:
+        substitutions = json.load(file)
 
-    # Wait until we see a request to shut down.
-    signal.signal(signal.SIGINT, lambda signum, frame: None)
-    signal.signal(signal.SIGTERM, lambda signum, frame: None)
-    signal.pause()
+    for key in ("ldap_bind_dn", "ldap_url", "ldap_password"):
+        if key not in substitutions:
+            raise KeyError(
+                f"The ldap_info JSON file must contain key '{key}'.")
 
-    print("\nShutting down apache and wrapped binary.")
-    apache.terminate()
-    wrapped_binary.terminate()
-    apache.wait()
-    wrapped_binary.wait()
+    substitutions.update({
+        "https_port": args.https_port,
+        "wrapped_port": args.wrapped_port,
+    })
+
+    config_text = template.render(substitutions)
+
+    with tempfile.TemporaryDirectory() as temp_dir:
+        temp_dir = Path(temp_dir)
+        with open(temp_dir / "apache2.conf", "w") as file:
+            file.write(config_text)
+
+        # Create a directory for error logs and such.
+        logs_dir = temp_dir / "logs"
+        os.mkdir(logs_dir)
+
+        print("-" * 60)
+        print(f"Logs are in {logs_dir}/")
+        print("-" * 60)
+
+        # Make modules available.
+        modules_path = Path("external/apache2/usr/lib/apache2/modules")
+        os.symlink(modules_path.resolve(), temp_dir / "modules")
+
+        # Generate a testing cert.
+        subprocess.run(
+            [
+                "openssl",
+                "req",
+                "-x509",
+                "-nodes",
+                "-days=365",
+                "-newkey=rsa:2048",
+                "-keyout=" + str(temp_dir / "apache-selfsigned.key"),
+                "-out=" + str(temp_dir / "apache-selfsigned.crt"),
+            ],
+            check=True,
+            input=DUMMY_CERT_ANSWERS,
+            text=True,
+        )
+
+        # Start the wrapped binary in the background.
+        # Tell it via the environment what port to listen on.
+        env = os.environ.copy()
+        env["APACHE_WRAPPED_PORT"] = str(args.wrapped_port)
+        wrapped_binary = subprocess.Popen([args.binary] + unknown_args,
+                                          env=env)
+
+        # Start the apache server.
+        env = os.environ.copy()
+        env["LD_LIBRARY_PATH"] = "external/apache2/usr/lib/x86_64-linux-gnu"
+        apache = subprocess.Popen(
+            ["external/apache2/usr/sbin/apache2", "-X", "-d",
+             str(temp_dir)],
+            env=env,
+        )
+
+        wait_for_server(args.https_port)
+        wait_for_server(args.wrapped_port)
+        # Sleep to attempt to get the HTTPS message after the webserver message.
+        time.sleep(1)
+        print(f"Serving HTTPS on port {args.https_port}")
+
+        # Wait until we see a request to shut down.
+        signal.signal(signal.SIGINT, lambda signum, frame: None)
+        signal.signal(signal.SIGTERM, lambda signum, frame: None)
+        signal.pause()
+
+        print("\nShutting down apache and wrapped binary.")
+        apache.terminate()
+        wrapped_binary.terminate()
+        apache.wait()
+        wrapped_binary.wait()
+
 
 if __name__ == "__main__":
-  sys.exit(main(sys.argv))
+    sys.exit(main(sys.argv))
diff --git a/tools/build_rules/autocxx.bzl b/tools/build_rules/autocxx.bzl
index ee8b4d4..82d6d90 100644
--- a/tools/build_rules/autocxx.bzl
+++ b/tools/build_rules/autocxx.bzl
@@ -13,10 +13,14 @@
         feature_configuration = feature_configuration,
         action_name = ACTION_NAMES.cpp_compile,
     )
+    preprocessor_defines = []
+    for lib in ctx.attr.libs:
+        preprocessor_defines.append(lib[CcInfo].compilation_context.defines)
     compile_variables = cc_common.create_compile_variables(
         feature_configuration = feature_configuration,
         cc_toolchain = cc_toolchain,
         user_compile_flags = ctx.fragments.cpp.copts + ctx.fragments.cpp.cxxopts,
+        preprocessor_defines = depset(transitive = preprocessor_defines),
     )
     command_line = cc_common.get_memory_inefficient_command_line(
         feature_configuration = feature_configuration,
diff --git a/tools/build_rules/jinja2_generator.py b/tools/build_rules/jinja2_generator.py
index 34f3354..e5f6fa3 100644
--- a/tools/build_rules/jinja2_generator.py
+++ b/tools/build_rules/jinja2_generator.py
@@ -8,22 +8,26 @@
 
 
 def main():
-  # Note: this is a pretty transparent interface to jinja2--there's no reason
-  # this script couldn't be renamed and then used to generate any config from
-  # a template.
-  parser = argparse.ArgumentParser(
-      description="Generates the raspberry pi configs from a template.")
-  parser.add_argument("template", type=str, help="File to use for template.")
-  parser.add_argument("replacements", type=json.loads, help="Dictionary of parameters to replace in the template.")
-  parser.add_argument("output", type=str, help="Output file to create.")
-  args = parser.parse_args(sys.argv[1:])
+    # Note: this is a pretty transparent interface to jinja2--there's no reason
+    # this script couldn't be renamed and then used to generate any config from
+    # a template.
+    parser = argparse.ArgumentParser(
+        description="Generates the raspberry pi configs from a template.")
+    parser.add_argument("template", type=str, help="File to use for template.")
+    parser.add_argument(
+        "replacements",
+        type=json.loads,
+        help="Dictionary of parameters to replace in the template.")
+    parser.add_argument("output", type=str, help="Output file to create.")
+    args = parser.parse_args(sys.argv[1:])
 
-  with open(args.template, 'r') as input_file:
-    template = jinja2.Template(input_file.read())
+    with open(args.template, 'r') as input_file:
+        template = jinja2.Template(input_file.read())
 
-  output = template.render(args.replacements)
-  with open(args.output, 'w') as config_file:
-    config_file.write(output)
+    output = template.render(args.replacements)
+    with open(args.output, 'w') as config_file:
+        config_file.write(output)
+
 
 if __name__ == '__main__':
-  main()
+    main()
diff --git a/tools/go/mirror_go_repos.py b/tools/go/mirror_go_repos.py
index ae8f722..52d611f 100644
--- a/tools/go/mirror_go_repos.py
+++ b/tools/go/mirror_go_repos.py
@@ -20,15 +20,20 @@
 
 GO_DEPS_WWWW_DIR = "/var/www/html/files/frc971/Build-Dependencies/go_deps"
 
+
 def compute_sha256(filepath: str) -> str:
     """Computes the SHA256 of a file at the specified location."""
     with open(filepath, "rb") as file:
         contents = file.read()
     return hashlib.sha256(contents).hexdigest()
 
+
 def get_existing_mirrored_repos(ssh_host: str) -> Dict[str, str]:
     """Gathers information about the libraries that are currently mirrored."""
-    run_result = subprocess.run(["ssh", ssh_host, f"bash -c 'sha256sum {GO_DEPS_WWWW_DIR}/*'"], check=True, stdout=subprocess.PIPE)
+    run_result = subprocess.run(
+        ["ssh", ssh_host, f"bash -c 'sha256sum {GO_DEPS_WWWW_DIR}/*'"],
+        check=True,
+        stdout=subprocess.PIPE)
 
     existing_mirrored_repos = {}
     for line in run_result.stdout.decode("utf-8").splitlines():
@@ -37,10 +42,10 @@
 
     return existing_mirrored_repos
 
-def download_repos(
-        repos: Dict[str, str],
-        existing_mirrored_repos: Dict[str, str],
-        tar: tarfile.TarFile) -> Dict[str, str]:
+
+def download_repos(repos: Dict[str, str], existing_mirrored_repos: Dict[str,
+                                                                        str],
+                   tar: tarfile.TarFile) -> Dict[str, str]:
     """Downloads the not-yet-mirrored repos into a tarball."""
     cached_info = {}
 
@@ -52,7 +57,8 @@
 
         download_result = subprocess.run(
             ["external/go_sdk/bin/go", "mod", "download", "-json", module],
-            check=True, stdout=subprocess.PIPE)
+            check=True,
+            stdout=subprocess.PIPE)
         if download_result.returncode != 0:
             print("Failed to download file.")
             return 1
@@ -81,6 +87,7 @@
 
     return cached_info
 
+
 def copy_to_host_and_unpack(filename: str, ssh_host: str) -> None:
     subprocess.run(["scp", filename, f"{ssh_host}:"], check=True)
 
@@ -94,7 +101,10 @@
     ])
 
     print("You might be asked for your sudo password shortly.")
-    subprocess.run(["ssh", "-t", ssh_host, f"sudo -u www-data bash -c '{command}'"], check=True)
+    subprocess.run(
+        ["ssh", "-t", ssh_host, f"sudo -u www-data bash -c '{command}'"],
+        check=True)
+
 
 def main(argv):
     parser = argparse.ArgumentParser()
@@ -113,12 +123,15 @@
               "Build-Dependencies files live. Only specify this if you have "
               "access to the server."))
     parser.add_argument("--go_deps_bzl", type=str, default="go_deps.bzl")
-    parser.add_argument("--go_mirrors_bzl", type=str, default="tools/go/go_mirrors.bzl")
+    parser.add_argument("--go_mirrors_bzl",
+                        type=str,
+                        default="tools/go/go_mirrors.bzl")
     args = parser.parse_args(argv[1:])
 
     os.chdir(os.environ["BUILD_WORKSPACE_DIRECTORY"])
 
-    repos = org_frc971.tools.go.mirror_lib.parse_go_repositories(args.go_deps_bzl)
+    repos = org_frc971.tools.go.mirror_lib.parse_go_repositories(
+        args.go_deps_bzl)
 
     if args.ssh_host:
         existing_mirrored_repos = get_existing_mirrored_repos(args.ssh_host)
@@ -129,7 +142,8 @@
 
     if args.prune:
         # Delete all mirror info that is not needed anymore.
-        existing_cache_info = org_frc971.tools.go.mirror_lib.parse_go_mirror_info(args.go_mirrors_bzl)
+        existing_cache_info = org_frc971.tools.go.mirror_lib.parse_go_mirror_info(
+            args.go_mirrors_bzl)
         cached_info = {}
         for repo in repos:
             try:
@@ -151,10 +165,12 @@
         if args.ssh_host and num_not_already_mirrored:
             copy_to_host_and_unpack("go_deps.tar", args.ssh_host)
         else:
-            print("Skipping mirroring because of lack of --ssh_host or there's "
-                  "nothing to actually mirror.")
+            print(
+                "Skipping mirroring because of lack of --ssh_host or there's "
+                "nothing to actually mirror.")
 
-    org_frc971.tools.go.mirror_lib.write_go_mirror_info(args.go_mirrors_bzl, cached_info)
+    org_frc971.tools.go.mirror_lib.write_go_mirror_info(
+        args.go_mirrors_bzl, cached_info)
 
     return exit_code
 
diff --git a/tools/go/mirror_lib.py b/tools/go/mirror_lib.py
index ea23abc..b613ca8 100644
--- a/tools/go/mirror_lib.py
+++ b/tools/go/mirror_lib.py
@@ -13,6 +13,7 @@
     with open(filepath, "r") as file:
         return file.read()
 
+
 def parse_go_repositories(filepath: str) -> List[Dict[str, str]]:
     """Parses the top-level go_deps.bzl file.
 
@@ -53,7 +54,8 @@
     return global_data["GO_MIRROR_INFO"]
 
 
-def write_go_mirror_info(filepath: str, mirror_info: Dict[str, Dict[str, str]]):
+def write_go_mirror_info(filepath: str, mirror_info: Dict[str, Dict[str,
+                                                                    str]]):
     """Saves the specified mirror_info as GO_MIRROR_INFO into tools/go/go_mirrors.bzl."""
     with open(filepath, "w") as file:
         file.write("# This file is auto-generated. Do not edit.\n")
@@ -64,9 +66,10 @@
 
     # Properly format the file now so that the linter doesn't complain.
     r = runfiles.Create()
-    subprocess.run(
-        [
-            r.Rlocation("com_github_bazelbuild_buildtools/buildifier/buildifier_/buildifier"),
-            filepath,
-        ],
-        check=True)
+    subprocess.run([
+        r.Rlocation(
+            "com_github_bazelbuild_buildtools/buildifier/buildifier_/buildifier"
+        ),
+        filepath,
+    ],
+                   check=True)
diff --git a/tools/go/tweak_gazelle_go_deps.py b/tools/go/tweak_gazelle_go_deps.py
index d9d7901..d7f3372 100644
--- a/tools/go/tweak_gazelle_go_deps.py
+++ b/tools/go/tweak_gazelle_go_deps.py
@@ -14,22 +14,27 @@
 
 import org_frc971.tools.go.mirror_lib
 
+
 def main(argv):
     parser = argparse.ArgumentParser()
     parser.add_argument("go_deps_bzl", type=str)
     args = parser.parse_args(argv[1:])
 
-    repos = org_frc971.tools.go.mirror_lib.parse_go_repositories(args.go_deps_bzl)
+    repos = org_frc971.tools.go.mirror_lib.parse_go_repositories(
+        args.go_deps_bzl)
 
     with open(args.go_deps_bzl, "w") as file:
-        file.write(textwrap.dedent("""\
+        file.write(
+            textwrap.dedent("""\
             # This file is auto-generated. Do not edit.
             load("//tools/go:mirrored_go_deps.bzl", "maybe_override_go_dep")
 
             def go_dependencies():
             """))
         for repo in repos:
-            file.write(textwrap.indent(textwrap.dedent(f"""\
+            file.write(
+                textwrap.indent(
+                    textwrap.dedent(f"""\
                 maybe_override_go_dep(
                     name = "{repo['name']}",
                     importpath = "{repo['importpath']}",
@@ -38,5 +43,6 @@
                 )
                 """), " " * 4))
 
+
 if __name__ == "__main__":
     sys.exit(main(sys.argv))
diff --git a/tools/lint/BUILD b/tools/lint/BUILD
index 57d4e08..fedead2 100644
--- a/tools/lint/BUILD
+++ b/tools/lint/BUILD
@@ -15,7 +15,7 @@
     name = "rustfmt",
     srcs = ["rustfmt.sh"],
     data = [
-        "@rust//:rustfmt",
+        "@rust__x86_64-unknown-linux-gnu_tools//:rustfmt",
     ],
     deps = [
         "@bazel_tools//tools/bash/runfiles",
@@ -35,6 +35,17 @@
 )
 
 sh_binary(
+    name = "yapf",
+    srcs = ["yapf.sh"],
+    data = [
+        "@python_yapf",
+    ],
+    deps = [
+        "@bazel_tools//tools/bash/runfiles",
+    ],
+)
+
+sh_binary(
     name = "prettier",
     srcs = ["prettier.sh"],
     data = [
@@ -56,6 +67,7 @@
         ":gofmt",
         ":prettier",
         ":rustfmt",
+        ":yapf",
         "//:gazelle-runner",
         "//tools/go:mirror_go_repos",
         "//tools/go:tweak_gazelle_go_deps",
diff --git a/tools/lint/run-ci.sh b/tools/lint/run-ci.sh
index a036c06..33a3bf9 100755
--- a/tools/lint/run-ci.sh
+++ b/tools/lint/run-ci.sh
@@ -66,8 +66,8 @@
 
 cargo_raze() {
     local -r cargo_raze="$(readlink -f external/cargo_raze/impl/cargo_raze_bin)"
-    export CARGO="$(readlink -f external/rust/bin/cargo)"
-    export RUSTC="$(readlink -f external/rust/bin/rustc)"
+    export CARGO="$(readlink -f external/rust__x86_64-unknown-linux-gnu_tools/bin/cargo)"
+    export RUSTC="$(readlink -f external/rust__x86_64-unknown-linux-gnu_tools/bin/rustc)"
     cd "${BUILD_WORKSPACE_DIRECTORY}"
     # Note we don't run with --generate-lockfile here. If there's a new
     # dependency, we don't want to download it, just failing with an error
@@ -89,6 +89,10 @@
     ./tools/lint/prettier
 }
 
+yapf() {
+    ./tools/lint/yapf
+}
+
 git_status_is_clean() {
     cd "${BUILD_WORKSPACE_DIRECTORY}"
     if ! git diff --quiet; then
@@ -110,6 +114,7 @@
     tweak_cargo_raze
     buildifier
     prettier
+    yapf
     git_status_is_clean  # This must the last linter.
 )
 
diff --git a/tools/lint/rustfmt.sh b/tools/lint/rustfmt.sh
index 57ce64f..42bb654 100755
--- a/tools/lint/rustfmt.sh
+++ b/tools/lint/rustfmt.sh
@@ -11,7 +11,7 @@
   { echo>&2 "ERROR: cannot find $f"; exit 1; }; f=; set -e
 # --- end runfiles.bash initialization v2 ---
 
-readonly RUSTFMT="$(rlocation rust/bin/rustfmt)"
+readonly RUSTFMT="$(rlocation rust__x86_64-unknown-linux-gnu_tools/bin/rustfmt)"
 
 # Run everything from the root of the tree.
 cd "${BUILD_WORKSPACE_DIRECTORY}"
diff --git a/tools/lint/yapf.sh b/tools/lint/yapf.sh
new file mode 100755
index 0000000..404d5fd
--- /dev/null
+++ b/tools/lint/yapf.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+# --- begin runfiles.bash initialization v2 ---
+# Copy-pasted from the Bazel Bash runfiles library v2.
+set -uo pipefail; f=bazel_tools/tools/bash/runfiles/runfiles.bash
+source "${RUNFILES_DIR:-/dev/null}/$f" 2>/dev/null || \
+  source "$(grep -sm1 "^$f " "${RUNFILES_MANIFEST_FILE:-/dev/null}" | cut -f2- -d' ')" 2>/dev/null || \
+  source "$0.runfiles/$f" 2>/dev/null || \
+  source "$(grep -sm1 "^$f " "$0.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \
+  source "$(grep -sm1 "^$f " "$0.exe.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \
+  { echo>&2 "ERROR: cannot find $f"; exit 1; }; f=; set -e
+# --- end runfiles.bash initialization v2 ---
+
+readonly YAPF="$(rlocation python_yapf/python_yapf)"
+
+# Run everything from the root of the tree.
+cd "${BUILD_WORKSPACE_DIRECTORY}"
+
+# Find all the Python files in the repo.
+python_files=($(git ls-tree --name-only --full-tree -r @ \
+    | grep -v '^third_party/' \
+    | (grep '\.py$' || :)))
+
+# If we have any Python files, format them.
+if ((${#python_files[@]} > 0)); then
+    exec "${YAPF}" --in-place --parallel --verbose "${python_files[@]}"
+fi
diff --git a/tools/rust/BUILD b/tools/rust/BUILD
index a5a2f89..a2d9317 100644
--- a/tools/rust/BUILD
+++ b/tools/rust/BUILD
@@ -16,7 +16,7 @@
         "@platforms//os:linux",
         "@platforms//cpu:x86_64",
     ],
-    toolchain = "@rust//:toolchain_for_x86_64-unknown-linux-gnu_impl",
+    toolchain = "@rust__x86_64-unknown-linux-gnu_tools//:rust_toolchain",
     toolchain_type = "@rules_rust//rust:toolchain",
 )
 
@@ -33,7 +33,7 @@
         # subtle order dependencies.
         "//tools/platforms/hardware:raspberry_pi",
     ],
-    toolchain = "@rust//:toolchain_for_armv7-unknown-linux-gnueabihf_impl",
+    toolchain = "@rust__armv7-unknown-linux-gnueabihf_tools//:rust_toolchain",
     toolchain_type = "@rules_rust//rust:toolchain",
 )
 
@@ -47,7 +47,7 @@
         "@platforms//os:linux",
         "@platforms//cpu:arm64",
     ],
-    toolchain = "@rust//:toolchain_for_aarch64-unknown-linux-gnu_impl",
+    toolchain = "@rust__aarch64-unknown-linux-gnu_tools//:rust_toolchain",
     toolchain_type = "@rules_rust//rust:toolchain",
 )
 
@@ -62,7 +62,7 @@
         "@platforms//cpu:armv7",
         "//tools/platforms/hardware:roborio",
     ],
-    toolchain = "@rust//:toolchain_for_arm-unknown-linux-gnueabi_impl",
+    toolchain = "@rust__arm-unknown-linux-gnueabi_tools//:rust_toolchain",
     toolchain_type = "@rules_rust//rust:toolchain",
 )
 
diff --git a/y2014/control_loops/python/claw.py b/y2014/control_loops/python/claw.py
index 77ccf14..488d792 100755
--- a/y2014/control_loops/python/claw.py
+++ b/y2014/control_loops/python/claw.py
@@ -51,8 +51,8 @@
         # Input is [bottom power, top power - bottom power * J_top / J_bottom]
         # Motor time constants. difference_bottom refers to the constant for how the
         # bottom velocity affects the difference of the top and bottom velocities.
-        self.common_motor_constant = -self.Kt / self.Kv / (
-            self.G * self.G * self.R)
+        self.common_motor_constant = -self.Kt / self.Kv / (self.G * self.G *
+                                                           self.R)
         self.bottom_bottom = self.common_motor_constant / self.J_bottom
         self.difference_bottom = -self.common_motor_constant * (
             1 / self.J_bottom - 1 / self.J_top)
@@ -96,7 +96,8 @@
                                                    self.B_continuous, self.dt)
 
         self.A_bottom, self.B_bottom = controls.c2d(self.A_bottom_cont,
-                                                    self.B_bottom_cont, self.dt)
+                                                    self.B_bottom_cont,
+                                                    self.dt)
         self.A_diff, self.B_diff = controls.c2d(self.A_diff_cont,
                                                 self.B_diff_cont, self.dt)
 
@@ -135,12 +136,12 @@
         glog.debug(str(lstsq_A))
         glog.debug('det %s', str(numpy.linalg.det(lstsq_A)))
 
-        out_x = numpy.linalg.lstsq(
-            lstsq_A,
-            numpy.matrix([[self.A[1, 2]], [self.A[3, 2]]]),
-            rcond=None)[0]
-        self.K[1, 2] = -lstsq_A[0, 0] * (
-            self.K[0, 2] - out_x[0]) / lstsq_A[0, 1] + out_x[1]
+        out_x = numpy.linalg.lstsq(lstsq_A,
+                                   numpy.matrix([[self.A[1, 2]],
+                                                 [self.A[3, 2]]]),
+                                   rcond=None)[0]
+        self.K[1, 2] = -lstsq_A[0, 0] * (self.K[0, 2] -
+                                         out_x[0]) / lstsq_A[0, 1] + out_x[1]
 
         glog.debug('K unaugmented')
         glog.debug(str(self.K))
@@ -181,8 +182,9 @@
         X_ss[2, 0] = 1 / (1 - A[2, 2]) * B[2, 0] * U[0, 0]
         #X_ss[3, 0] = X_ss[3, 0] * A[3, 3] + X_ss[2, 0] * A[3, 2] + B[3, 0] * U[0, 0] + B[3, 1] * U[1, 0]
         #X_ss[3, 0] * (1 - A[3, 3]) = X_ss[2, 0] * A[3, 2] + B[3, 0] * U[0, 0] + B[3, 1] * U[1, 0]
-        X_ss[3, 0] = 1 / (1 - A[3, 3]) * (
-            X_ss[2, 0] * A[3, 2] + B[3, 1] * U[1, 0] + B[3, 0] * U[0, 0])
+        X_ss[3,
+             0] = 1 / (1 - A[3, 3]) * (X_ss[2, 0] * A[3, 2] +
+                                       B[3, 1] * U[1, 0] + B[3, 0] * U[0, 0])
         #X_ss[3, 0] = 1 / (1 - A[3, 3]) / (1 - A[2, 2]) * B[2, 0] * U[0, 0] * A[3, 2] + B[3, 0] * U[0, 0] + B[3, 1] * U[1, 0]
         X_ss[0, 0] = A[0, 2] * X_ss[2, 0] + B[0, 0] * U[0, 0]
         X_ss[1, 0] = (A[1, 2] * X_ss[2, 0]) + (A[1, 3] * X_ss[3, 0]) + (
@@ -247,7 +249,8 @@
         self.rpl = .05
         self.ipl = 0.008
         self.PlaceObserverPoles([
-            self.rpl + 1j * self.ipl, 0.10, 0.09, self.rpl - 1j * self.ipl, 0.90
+            self.rpl + 1j * self.ipl, 0.10, 0.09, self.rpl - 1j * self.ipl,
+            0.90
         ])
         #print "A is"
         #print self.A
@@ -284,8 +287,8 @@
         numpy.matrix([[1, 0], [-1, 0], [0, 1], [0, -1]]),
         numpy.matrix([[12], [12], [12], [12]]))
 
-    if (bottom_u > claw.U_max[0, 0] or bottom_u < claw.U_min[0, 0] or
-            top_u > claw.U_max[0, 0] or top_u < claw.U_min[0, 0]):
+    if (bottom_u > claw.U_max[0, 0] or bottom_u < claw.U_min[0, 0]
+            or top_u > claw.U_max[0, 0] or top_u < claw.U_min[0, 0]):
 
         position_K = K[:, 0:2]
         velocity_K = K[:, 2:]
@@ -501,8 +504,8 @@
     else:
         namespaces = ['y2014', 'control_loops', 'claw']
         claw = Claw('Claw')
-        loop_writer = control_loop.ControlLoopWriter(
-            'Claw', [claw], namespaces=namespaces)
+        loop_writer = control_loop.ControlLoopWriter('Claw', [claw],
+                                                     namespaces=namespaces)
         loop_writer.AddConstant(
             control_loop.Constant('kClawMomentOfInertiaRatio', '%f',
                                   claw.J_top / claw.J_bottom))
diff --git a/y2014/control_loops/python/drivetrain.py b/y2014/control_loops/python/drivetrain.py
index cac236f..d72c222 100755
--- a/y2014/control_loops/python/drivetrain.py
+++ b/y2014/control_loops/python/drivetrain.py
@@ -11,30 +11,32 @@
 
 gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 
-kDrivetrain = drivetrain.DrivetrainParams(J = 2.8,
-                                          mass = 68,
-                                          robot_radius = 0.647998644 / 2.0,
-                                          wheel_radius = .04445,
-                                          G_high = 28.0 / 50.0 * 18.0 / 50.0,
-                                          G_low = 18.0 / 60.0 * 18.0 / 50.0,
-                                          q_pos_low = 0.12,
-                                          q_pos_high = 0.12,
-                                          q_vel_low = 1.0,
-                                          q_vel_high = 1.0,
-                                          has_imu = False,
-                                          dt = 0.005,
-                                          controller_poles = [0.7, 0.7])
+kDrivetrain = drivetrain.DrivetrainParams(J=2.8,
+                                          mass=68,
+                                          robot_radius=0.647998644 / 2.0,
+                                          wheel_radius=.04445,
+                                          G_high=28.0 / 50.0 * 18.0 / 50.0,
+                                          G_low=18.0 / 60.0 * 18.0 / 50.0,
+                                          q_pos_low=0.12,
+                                          q_pos_high=0.12,
+                                          q_vel_low=1.0,
+                                          q_vel_high=1.0,
+                                          has_imu=False,
+                                          dt=0.005,
+                                          controller_poles=[0.7, 0.7])
+
 
 def main(argv):
-  argv = FLAGS(argv)
+    argv = FLAGS(argv)
 
-  if FLAGS.plot:
-    drivetrain.PlotDrivetrainMotions(kDrivetrain)
-  elif len(argv) != 5:
-    print("Expected .h file name and .cc file name")
-  else:
-    # Write the generated constants out to a file.
-    drivetrain.WriteDrivetrain(argv[1:3], argv[3:5], 'y2014', kDrivetrain)
+    if FLAGS.plot:
+        drivetrain.PlotDrivetrainMotions(kDrivetrain)
+    elif len(argv) != 5:
+        print("Expected .h file name and .cc file name")
+    else:
+        # Write the generated constants out to a file.
+        drivetrain.WriteDrivetrain(argv[1:3], argv[3:5], 'y2014', kDrivetrain)
+
 
 if __name__ == '__main__':
-  sys.exit(main(sys.argv))
+    sys.exit(main(sys.argv))
diff --git a/y2014/control_loops/python/dt_mpc.py b/y2014/control_loops/python/dt_mpc.py
index 0c229c1..2f13807 100755
--- a/y2014/control_loops/python/dt_mpc.py
+++ b/y2014/control_loops/python/dt_mpc.py
@@ -13,8 +13,9 @@
 #
 # Inital algorithm from http://www.ece.ufrgs.br/~fetter/icma05_608.pdf
 
+
 def cartesian_to_polar(X_cartesian):
-  """Converts a cartesian coordinate to polar.
+    """Converts a cartesian coordinate to polar.
 
   Args:
     X_cartesian, numpy.matrix[3, 1] with x, y, theta as rows.
@@ -22,13 +23,13 @@
   Returns:
     numpy.matrix[3, 1] with e, phi, alpha as rows.
   """
-  phi = numpy.arctan2(X_cartesian[1, 0], X_cartesian[0, 0])
-  return numpy.matrix([[numpy.hypot(X_cartesian[0, 0], X_cartesian[1, 0])],
-                       [phi],
-                       [X_cartesian[2, 0] - phi]])
+    phi = numpy.arctan2(X_cartesian[1, 0], X_cartesian[0, 0])
+    return numpy.matrix([[numpy.hypot(X_cartesian[0, 0], X_cartesian[1, 0])],
+                         [phi], [X_cartesian[2, 0] - phi]])
+
 
 def polar_to_cartesian(X_polar):
-  """Converts a polar coordinate to cartesian.
+    """Converts a polar coordinate to cartesian.
 
   Args:
     X_polar, numpy.matrix[3, 1] with e, phi, alpha as rows.
@@ -36,12 +37,13 @@
   Returns:
     numpy.matrix[3, 1] with x, y, theta as rows.
   """
-  return numpy.matrix([[X_polar[0, 0] * numpy.cos(X_polar[1, 0])],
-                       [X_polar[0, 0] * numpy.sin(X_polar[1, 0])],
-                       [X_polar[1, 0] + X_polar[2, 0]]])
+    return numpy.matrix([[X_polar[0, 0] * numpy.cos(X_polar[1, 0])],
+                         [X_polar[0, 0] * numpy.sin(X_polar[1, 0])],
+                         [X_polar[1, 0] + X_polar[2, 0]]])
+
 
 def simulate_dynamics(X_cartesian, U):
-  """Calculates the robot location after 1 timestep.
+    """Calculates the robot location after 1 timestep.
 
   Args:
     X_cartesian, numpy.matrix[3, 1] with the starting location in
@@ -51,15 +53,15 @@
   Returns:
     numpy.matrix[3, 1] with the cartesian coordinate.
   """
-  X_cartesian += numpy.matrix(
-      [[U[0, 0] * numpy.cos(X_cartesian[2, 0]) * dt],
-       [U[0, 0] * numpy.sin(X_cartesian[2, 0]) * dt],
-       [U[1, 0] * dt]])
+    X_cartesian += numpy.matrix([[U[0, 0] * numpy.cos(X_cartesian[2, 0]) * dt],
+                                 [U[0, 0] * numpy.sin(X_cartesian[2, 0]) * dt],
+                                 [U[1, 0] * dt]])
 
-  return X_cartesian
+    return X_cartesian
+
 
 def U_from_array(U_array):
-  """Converts the U array from the optimizer to a bunch of column vectors.
+    """Converts the U array from the optimizer to a bunch of column vectors.
 
   Args:
     U_array, numpy.array[N] The U coordinates in v, av, v, av, ...
@@ -67,10 +69,11 @@
   Returns:
     numpy.matrix[2, N/2] with [[v, v, v, ...], [av, av, av, ...]]
   """
-  return numpy.matrix(U_array).reshape((2, -1), order='F')
+    return numpy.matrix(U_array).reshape((2, -1), order='F')
+
 
 def U_to_array(U_matrix):
-  """Converts the U matrix to the U array for the optimizer.
+    """Converts the U matrix to the U array for the optimizer.
 
   Args:
     U_matrix, numpy.matrix[2, N/2] with [[v, v, v, ...], [av, av, av, ...]]
@@ -78,10 +81,11 @@
   Returns:
     numpy.array[N] The U coordinates in v, av, v, av, ...
   """
-  return numpy.array(U_matrix.reshape((1, -1), order='F'))
+    return numpy.array(U_matrix.reshape((1, -1), order='F'))
+
 
 def cost(U_array, X_cartesian):
-  """Computes the cost given the inital position and the U array.
+    """Computes the cost given the inital position and the U array.
 
   Args:
     U_array: numpy.array[N] The U coordinates.
@@ -91,91 +95,93 @@
   Returns:
     double, The quadratic cost of evaluating U.
   """
-  X_cartesian_mod = X_cartesian.copy()
-  U_matrix = U_from_array(U_array)
-  my_cost = 0
-  Q = numpy.matrix([[0.01, 0, 0],
-                    [0, 0.01, 0],
-                    [0, 0, 0.01]]) / dt / dt
-  R = numpy.matrix([[0.001, 0],
-                    [0, 0.001]]) / dt / dt
-  for U in U_matrix.T:
-    # TODO(austin): Let it go to the point from either side.
-    U = U.T
-    X_cartesian_mod = simulate_dynamics(X_cartesian_mod, U)
-    X_current_polar = cartesian_to_polar(X_cartesian_mod)
-    my_cost += U.T * R * U + X_current_polar.T * Q * X_current_polar
+    X_cartesian_mod = X_cartesian.copy()
+    U_matrix = U_from_array(U_array)
+    my_cost = 0
+    Q = numpy.matrix([[0.01, 0, 0], [0, 0.01, 0], [0, 0, 0.01]]) / dt / dt
+    R = numpy.matrix([[0.001, 0], [0, 0.001]]) / dt / dt
+    for U in U_matrix.T:
+        # TODO(austin): Let it go to the point from either side.
+        U = U.T
+        X_cartesian_mod = simulate_dynamics(X_cartesian_mod, U)
+        X_current_polar = cartesian_to_polar(X_cartesian_mod)
+        my_cost += U.T * R * U + X_current_polar.T * Q * X_current_polar
 
-  return my_cost
+    return my_cost
+
 
 if __name__ == '__main__':
-  X_cartesian = numpy.matrix([[-1.0],
-                              [-1.0],
-                              [0.0]])
-  x_array = []
-  y_array = []
-  theta_array = []
+    X_cartesian = numpy.matrix([[-1.0], [-1.0], [0.0]])
+    x_array = []
+    y_array = []
+    theta_array = []
 
-  e_array = []
-  phi_array = []
-  alpha_array = []
+    e_array = []
+    phi_array = []
+    alpha_array = []
 
-  cost_array = []
+    cost_array = []
 
-  time_array = []
-  u0_array = []
-  u1_array = []
+    time_array = []
+    u0_array = []
+    u1_array = []
 
-  num_steps = 20
+    num_steps = 20
 
-  U_array = numpy.zeros((num_steps * 2))
-  for i in range(400):
-    print('Iteration', i)
-    # Solve the NMPC
-    U_array, fx, _, _, _ = scipy.optimize.fmin_slsqp(
-        cost, U_array.copy(), bounds = [(-1, 1), (-7, 7)] * num_steps,
-        args=(X_cartesian,), iter=500, full_output=True)
-    U_matrix = U_from_array(U_array)
+    U_array = numpy.zeros((num_steps * 2))
+    for i in range(400):
+        print('Iteration', i)
+        # Solve the NMPC
+        U_array, fx, _, _, _ = scipy.optimize.fmin_slsqp(cost,
+                                                         U_array.copy(),
+                                                         bounds=[(-1, 1),
+                                                                 (-7, 7)] *
+                                                         num_steps,
+                                                         args=(X_cartesian, ),
+                                                         iter=500,
+                                                         full_output=True)
+        U_matrix = U_from_array(U_array)
 
-    # Simulate the dynamics
-    X_cartesian = simulate_dynamics(X_cartesian, U_matrix[:, 0])
+        # Simulate the dynamics
+        X_cartesian = simulate_dynamics(X_cartesian, U_matrix[:, 0])
 
-    # Save variables for plotting.
-    cost_array.append(fx[0, 0])
-    u0_array.append(U_matrix[0, 0])
-    u1_array.append(U_matrix[1, 0])
-    x_array.append(X_cartesian[0, 0])
-    y_array.append(X_cartesian[1, 0])
-    theta_array.append(X_cartesian[2, 0])
-    time_array.append(i * dt)
-    X_polar = cartesian_to_polar(X_cartesian)
-    e_array.append(X_polar[0, 0])
-    phi_array.append(X_polar[1, 0])
-    alpha_array.append(X_polar[2, 0])
+        # Save variables for plotting.
+        cost_array.append(fx[0, 0])
+        u0_array.append(U_matrix[0, 0])
+        u1_array.append(U_matrix[1, 0])
+        x_array.append(X_cartesian[0, 0])
+        y_array.append(X_cartesian[1, 0])
+        theta_array.append(X_cartesian[2, 0])
+        time_array.append(i * dt)
+        X_polar = cartesian_to_polar(X_cartesian)
+        e_array.append(X_polar[0, 0])
+        phi_array.append(X_polar[1, 0])
+        alpha_array.append(X_polar[2, 0])
 
-    U_array = U_to_array(numpy.hstack((U_matrix[:, 1:], numpy.matrix([[0], [0]]))))
+        U_array = U_to_array(
+            numpy.hstack((U_matrix[:, 1:], numpy.matrix([[0], [0]]))))
 
-    if fx < 1e-05:
-      print('Cost is', fx, 'after', i, 'cycles, finishing early')
-      break
+        if fx < 1e-05:
+            print('Cost is', fx, 'after', i, 'cycles, finishing early')
+            break
 
-  # Plot
-  pylab.figure('xy')
-  pylab.plot(x_array, y_array, label = 'trajectory')
+    # Plot
+    pylab.figure('xy')
+    pylab.plot(x_array, y_array, label='trajectory')
 
-  pylab.figure('time')
-  pylab.plot(time_array, x_array, label='x')
-  pylab.plot(time_array, y_array, label='y')
-  pylab.plot(time_array, theta_array, label = 'theta')
-  pylab.plot(time_array, e_array, label='e')
-  pylab.plot(time_array, phi_array, label='phi')
-  pylab.plot(time_array, alpha_array, label='alpha')
-  pylab.plot(time_array, cost_array, label='cost')
-  pylab.legend()
+    pylab.figure('time')
+    pylab.plot(time_array, x_array, label='x')
+    pylab.plot(time_array, y_array, label='y')
+    pylab.plot(time_array, theta_array, label='theta')
+    pylab.plot(time_array, e_array, label='e')
+    pylab.plot(time_array, phi_array, label='phi')
+    pylab.plot(time_array, alpha_array, label='alpha')
+    pylab.plot(time_array, cost_array, label='cost')
+    pylab.legend()
 
-  pylab.figure('u')
-  pylab.plot(time_array, u0_array, label='u0')
-  pylab.plot(time_array, u1_array, label='u1')
-  pylab.legend()
+    pylab.figure('u')
+    pylab.plot(time_array, u0_array, label='u0')
+    pylab.plot(time_array, u1_array, label='u1')
+    pylab.legend()
 
-  pylab.show()
+    pylab.show()
diff --git a/y2014/control_loops/python/extended_lqr.py b/y2014/control_loops/python/extended_lqr.py
index b3f2372..699dd30 100755
--- a/y2014/control_loops/python/extended_lqr.py
+++ b/y2014/control_loops/python/extended_lqr.py
@@ -17,8 +17,9 @@
 num_inputs = 2
 x_hat_initial = numpy.matrix([[0.10], [1.0], [0.0]])
 
+
 def dynamics(X, U):
-  """Calculates the dynamics for a 2 wheeled robot.
+    """Calculates the dynamics for a 2 wheeled robot.
 
   Args:
     X, numpy.matrix(3, 1), The state.  [x, y, theta]
@@ -27,29 +28,33 @@
   Returns:
     numpy.matrix(3, 1), The derivative of the dynamics.
   """
-  #return numpy.matrix([[X[1, 0]],
-  #                     [X[2, 0]],
-  #                     [U[0, 0]]])
-  return numpy.matrix([[(U[0, 0] + U[1, 0]) * numpy.cos(X[2, 0]) / 2.0],
-                       [(U[0, 0] + U[1, 0]) * numpy.sin(X[2, 0]) / 2.0],
-                       [(U[1, 0] - U[0, 0]) / width]])
+    #return numpy.matrix([[X[1, 0]],
+    #                     [X[2, 0]],
+    #                     [U[0, 0]]])
+    return numpy.matrix([[(U[0, 0] + U[1, 0]) * numpy.cos(X[2, 0]) / 2.0],
+                         [(U[0, 0] + U[1, 0]) * numpy.sin(X[2, 0]) / 2.0],
+                         [(U[1, 0] - U[0, 0]) / width]])
+
 
 def RungeKutta(f, x, dt):
-  """4th order RungeKutta integration of F starting at X."""
-  a = f(x)
-  b = f(x + dt / 2.0 * a)
-  c = f(x + dt / 2.0 * b)
-  d = f(x + dt * c)
-  return x + dt * (a + 2.0 * b + 2.0 * c + d) / 6.0
+    """4th order RungeKutta integration of F starting at X."""
+    a = f(x)
+    b = f(x + dt / 2.0 * a)
+    c = f(x + dt / 2.0 * b)
+    d = f(x + dt * c)
+    return x + dt * (a + 2.0 * b + 2.0 * c + d) / 6.0
+
 
 def discrete_dynamics(X, U):
-  return RungeKutta(lambda startingX: dynamics(startingX, U), X, dt)
+    return RungeKutta(lambda startingX: dynamics(startingX, U), X, dt)
+
 
 def inverse_discrete_dynamics(X, U):
-  return RungeKutta(lambda startingX: -dynamics(startingX, U), X, dt)
+    return RungeKutta(lambda startingX: -dynamics(startingX, U), X, dt)
+
 
 def numerical_jacobian_x(fn, X, U, epsilon=1e-4):
-  """Numerically estimates the jacobian around X, U in X.
+    """Numerically estimates the jacobian around X, U in X.
 
   Args:
     fn: A function of X, U.
@@ -62,20 +67,21 @@
     numpy.matrix(num_states, num_states), The jacobian of fn with X as the
       variable.
   """
-  num_states = X.shape[0]
-  nominal = fn(X, U)
-  answer = numpy.matrix(numpy.zeros((nominal.shape[0], num_states)))
-  # It's more expensive, but +- epsilon will be more reliable
-  for i in range(0, num_states):
-    dX_plus = X.copy()
-    dX_plus[i] += epsilon
-    dX_minus = X.copy()
-    dX_minus[i] -= epsilon
-    answer[:, i] = (fn(dX_plus, U) - fn(dX_minus, U)) / epsilon / 2.0
-  return answer
+    num_states = X.shape[0]
+    nominal = fn(X, U)
+    answer = numpy.matrix(numpy.zeros((nominal.shape[0], num_states)))
+    # It's more expensive, but +- epsilon will be more reliable
+    for i in range(0, num_states):
+        dX_plus = X.copy()
+        dX_plus[i] += epsilon
+        dX_minus = X.copy()
+        dX_minus[i] -= epsilon
+        answer[:, i] = (fn(dX_plus, U) - fn(dX_minus, U)) / epsilon / 2.0
+    return answer
+
 
 def numerical_jacobian_u(fn, X, U, epsilon=1e-4):
-  """Numerically estimates the jacobian around X, U in U.
+    """Numerically estimates the jacobian around X, U in U.
 
   Args:
     fn: A function of X, U.
@@ -88,48 +94,56 @@
     numpy.matrix(num_states, num_inputs), The jacobian of fn with U as the
       variable.
   """
-  num_states = X.shape[0]
-  num_inputs = U.shape[0]
-  nominal = fn(X, U)
-  answer = numpy.matrix(numpy.zeros((nominal.shape[0], num_inputs)))
-  for i in range(0, num_inputs):
-    dU_plus = U.copy()
-    dU_plus[i] += epsilon
-    dU_minus = U.copy()
-    dU_minus[i] -= epsilon
-    answer[:, i] = (fn(X, dU_plus) - fn(X, dU_minus)) / epsilon / 2.0
-  return answer
+    num_states = X.shape[0]
+    num_inputs = U.shape[0]
+    nominal = fn(X, U)
+    answer = numpy.matrix(numpy.zeros((nominal.shape[0], num_inputs)))
+    for i in range(0, num_inputs):
+        dU_plus = U.copy()
+        dU_plus[i] += epsilon
+        dU_minus = U.copy()
+        dU_minus[i] -= epsilon
+        answer[:, i] = (fn(X, dU_plus) - fn(X, dU_minus)) / epsilon / 2.0
+    return answer
+
 
 def numerical_jacobian_x_x(fn, X, U):
-  return numerical_jacobian_x(
-      lambda X_inner, U_inner: numerical_jacobian_x(fn, X_inner, U_inner).T, X, U)
+    return numerical_jacobian_x(
+        lambda X_inner, U_inner: numerical_jacobian_x(fn, X_inner, U_inner).T,
+        X, U)
+
 
 def numerical_jacobian_x_u(fn, X, U):
-  return numerical_jacobian_x(
-      lambda X_inner, U_inner: numerical_jacobian_u(fn, X_inner, U_inner).T, X, U)
+    return numerical_jacobian_x(
+        lambda X_inner, U_inner: numerical_jacobian_u(fn, X_inner, U_inner).T,
+        X, U)
+
 
 def numerical_jacobian_u_x(fn, X, U):
-  return numerical_jacobian_u(
-      lambda X_inner, U_inner: numerical_jacobian_x(fn, X_inner, U_inner).T, X, U)
+    return numerical_jacobian_u(
+        lambda X_inner, U_inner: numerical_jacobian_x(fn, X_inner, U_inner).T,
+        X, U)
+
 
 def numerical_jacobian_u_u(fn, X, U):
-  return numerical_jacobian_u(
-      lambda X_inner, U_inner: numerical_jacobian_u(fn, X_inner, U_inner).T, X, U)
+    return numerical_jacobian_u(
+        lambda X_inner, U_inner: numerical_jacobian_u(fn, X_inner, U_inner).T,
+        X, U)
+
 
 # Simple implementation for a quadratic cost function.
 class CostFunction:
-  def __init__(self):
-    self.num_states = num_states
-    self.num_inputs = num_inputs
-    self.dt = dt
-    self.Q = numpy.matrix([[0.1, 0, 0],
-                           [0, 0.6, 0],
-                           [0, 0, 0.1]]) / dt / dt
-    self.R = numpy.matrix([[0.40, 0],
-                           [0, 0.40]]) / dt / dt
 
-  def estimate_Q_final(self, X_hat):
-    """Returns the quadraticized final Q around X_hat.
+    def __init__(self):
+        self.num_states = num_states
+        self.num_inputs = num_inputs
+        self.dt = dt
+        self.Q = numpy.matrix([[0.1, 0, 0], [0, 0.6, 0], [0, 0, 0.1]
+                               ]) / dt / dt
+        self.R = numpy.matrix([[0.40, 0], [0, 0.40]]) / dt / dt
+
+    def estimate_Q_final(self, X_hat):
+        """Returns the quadraticized final Q around X_hat.
 
     This is calculated by evaluating partial^2 cost(X_hat) / (partial X * partial X)
 
@@ -139,11 +153,11 @@
     Result:
       numpy.matrix(self.num_states, self.num_states)
     """
-    zero_U = numpy.matrix(numpy.zeros((self.num_inputs, 1)))
-    return numerical_jacobian_x_x(self.final_cost, X_hat, zero_U)
+        zero_U = numpy.matrix(numpy.zeros((self.num_inputs, 1)))
+        return numerical_jacobian_x_x(self.final_cost, X_hat, zero_U)
 
-  def estimate_partial_cost_partial_x_final(self, X_hat):
-    """Returns \frac{\partial cost}{\partial X}(X_hat) for the final cost.
+    def estimate_partial_cost_partial_x_final(self, X_hat):
+        """Returns \frac{\partial cost}{\partial X}(X_hat) for the final cost.
 
     Args:
       X_hat: numpy.matrix(self.num_states, 1), The state to quadraticize around.
@@ -151,14 +165,17 @@
     Result:
       numpy.matrix(self.num_states, 1)
     """
-    return numerical_jacobian_x(self.final_cost, X_hat, numpy.matrix(numpy.zeros((self.num_inputs, 1)))).T
+        return numerical_jacobian_x(
+            self.final_cost, X_hat,
+            numpy.matrix(numpy.zeros((self.num_inputs, 1)))).T
 
-  def estimate_q_final(self, X_hat):
-    """Returns q evaluated at X_hat for the final cost function."""
-    return self.estimate_partial_cost_partial_x_final(X_hat) - self.estimate_Q_final(X_hat) * X_hat
+    def estimate_q_final(self, X_hat):
+        """Returns q evaluated at X_hat for the final cost function."""
+        return self.estimate_partial_cost_partial_x_final(
+            X_hat) - self.estimate_Q_final(X_hat) * X_hat
 
-  def final_cost(self, X, U):
-    """Computes the final cost of being at X
+    def final_cost(self, X, U):
+        """Computes the final cost of being at X
 
     Args:
       X: numpy.matrix(self.num_states, 1)
@@ -167,10 +184,10 @@
     Returns:
       numpy.matrix(1, 1), The quadratic cost of being at X
     """
-    return X.T * self.Q * X * 1000
+        return X.T * self.Q * X * 1000
 
-  def cost(self, X, U):
-    """Computes the incremental cost given a position and U.
+    def cost(self, X, U):
+        """Computes the incremental cost given a position and U.
 
     Args:
       X: numpy.matrix(self.num_states, 1)
@@ -179,250 +196,334 @@
     Returns:
       numpy.matrix(1, 1), The quadratic cost of evaluating U.
     """
-    return U.T * self.R * U + X.T * self.Q * X
+        return U.T * self.R * U + X.T * self.Q * X
+
 
 cost_fn_obj = CostFunction()
 
-S_bar_t = [numpy.matrix(numpy.zeros((num_states, num_states))) for _ in range(l + 1)]
+S_bar_t = [
+    numpy.matrix(numpy.zeros((num_states, num_states))) for _ in range(l + 1)
+]
 s_bar_t = [numpy.matrix(numpy.zeros((num_states, 1))) for _ in range(l + 1)]
 s_scalar_bar_t = [numpy.matrix(numpy.zeros((1, 1))) for _ in range(l + 1)]
 
-L_t = [numpy.matrix(numpy.zeros((num_inputs, num_states))) for _ in range(l + 1)]
+L_t = [
+    numpy.matrix(numpy.zeros((num_inputs, num_states))) for _ in range(l + 1)
+]
 l_t = [numpy.matrix(numpy.zeros((num_inputs, 1))) for _ in range(l + 1)]
-L_bar_t = [numpy.matrix(numpy.zeros((num_inputs, num_states))) for _ in range(l + 1)]
+L_bar_t = [
+    numpy.matrix(numpy.zeros((num_inputs, num_states))) for _ in range(l + 1)
+]
 l_bar_t = [numpy.matrix(numpy.zeros((num_inputs, 1))) for _ in range(l + 1)]
 
-S_t = [numpy.matrix(numpy.zeros((num_states, num_states))) for _ in range(l + 1)]
+S_t = [
+    numpy.matrix(numpy.zeros((num_states, num_states))) for _ in range(l + 1)
+]
 s_t = [numpy.matrix(numpy.zeros((num_states, 1))) for _ in range(l + 1)]
 s_scalar_t = [numpy.matrix(numpy.zeros((1, 1))) for _ in range(l + 1)]
 
-
-last_x_hat_t = [numpy.matrix(numpy.zeros((num_states, 1))) for _ in range(l + 1)]
+last_x_hat_t = [
+    numpy.matrix(numpy.zeros((num_states, 1))) for _ in range(l + 1)
+]
 
 for a in range(15):
-  x_hat = x_hat_initial
-  u_t = L_t[0] * x_hat + l_t[0]
-  S_bar_t[0] = numpy.matrix(numpy.zeros((num_states, num_states)))
-  s_bar_t[0] = numpy.matrix(numpy.zeros((num_states, 1)))
-  s_scalar_bar_t[0] = numpy.matrix([[0]])
+    x_hat = x_hat_initial
+    u_t = L_t[0] * x_hat + l_t[0]
+    S_bar_t[0] = numpy.matrix(numpy.zeros((num_states, num_states)))
+    s_bar_t[0] = numpy.matrix(numpy.zeros((num_states, 1)))
+    s_scalar_bar_t[0] = numpy.matrix([[0]])
 
-  last_x_hat_t[0] = x_hat_initial
+    last_x_hat_t[0] = x_hat_initial
 
-  Q_t = numerical_jacobian_x_x(cost_fn_obj.cost, x_hat_initial, u_t)
-  P_t = numerical_jacobian_x_u(cost_fn_obj.cost, x_hat_initial, u_t)
-  R_t = numerical_jacobian_u_u(cost_fn_obj.cost, x_hat_initial, u_t)
+    Q_t = numerical_jacobian_x_x(cost_fn_obj.cost, x_hat_initial, u_t)
+    P_t = numerical_jacobian_x_u(cost_fn_obj.cost, x_hat_initial, u_t)
+    R_t = numerical_jacobian_u_u(cost_fn_obj.cost, x_hat_initial, u_t)
 
-  q_t = numerical_jacobian_x(cost_fn_obj.cost, x_hat_initial, u_t).T - Q_t * x_hat_initial - P_t.T * u_t
-  r_t = numerical_jacobian_u(cost_fn_obj.cost, x_hat_initial, u_t).T - P_t * x_hat_initial - R_t * u_t
+    q_t = numerical_jacobian_x(cost_fn_obj.cost, x_hat_initial,
+                               u_t).T - Q_t * x_hat_initial - P_t.T * u_t
+    r_t = numerical_jacobian_u(cost_fn_obj.cost, x_hat_initial,
+                               u_t).T - P_t * x_hat_initial - R_t * u_t
 
-  q_scalar_t = cost_fn_obj.cost(x_hat_initial, u_t) - 0.5 * (x_hat_initial.T * (Q_t * x_hat_initial + P_t.T * u_t) + u_t.T * (P_t * x_hat_initial + R_t * u_t)) - x_hat_initial.T * q_t - u_t.T * r_t
+    q_scalar_t = cost_fn_obj.cost(
+        x_hat_initial,
+        u_t) - 0.5 * (x_hat_initial.T *
+                      (Q_t * x_hat_initial + P_t.T * u_t) + u_t.T *
+                      (P_t * x_hat_initial + R_t * u_t)
+                      ) - x_hat_initial.T * q_t - u_t.T * r_t
 
-  start_A_t = numerical_jacobian_x(discrete_dynamics, x_hat_initial, u_t)
-  start_B_t = numerical_jacobian_u(discrete_dynamics, x_hat_initial, u_t)
-  x_hat_next = discrete_dynamics(x_hat_initial, u_t)
-  start_c_t = x_hat_next - start_A_t * x_hat_initial - start_B_t * u_t
+    start_A_t = numerical_jacobian_x(discrete_dynamics, x_hat_initial, u_t)
+    start_B_t = numerical_jacobian_u(discrete_dynamics, x_hat_initial, u_t)
+    x_hat_next = discrete_dynamics(x_hat_initial, u_t)
+    start_c_t = x_hat_next - start_A_t * x_hat_initial - start_B_t * u_t
 
-  B_svd_u, B_svd_sigma_diag, B_svd_v = numpy.linalg.svd(start_B_t)
-  B_svd_sigma = numpy.matrix(numpy.zeros(start_B_t.shape))
-  B_svd_sigma[0:B_svd_sigma_diag.shape[0], 0:B_svd_sigma_diag.shape[0]] = numpy.diag(B_svd_sigma_diag)
+    B_svd_u, B_svd_sigma_diag, B_svd_v = numpy.linalg.svd(start_B_t)
+    B_svd_sigma = numpy.matrix(numpy.zeros(start_B_t.shape))
+    B_svd_sigma[0:B_svd_sigma_diag.shape[0],
+                0:B_svd_sigma_diag.shape[0]] = numpy.diag(B_svd_sigma_diag)
 
-  B_svd_sigma_inv = numpy.matrix(numpy.zeros(start_B_t.shape)).T
-  B_svd_sigma_inv[0:B_svd_sigma_diag.shape[0], 0:B_svd_sigma_diag.shape[0]] = numpy.linalg.inv(numpy.diag(B_svd_sigma_diag))
-  B_svd_inv = B_svd_v.T * B_svd_sigma_inv * B_svd_u.T
+    B_svd_sigma_inv = numpy.matrix(numpy.zeros(start_B_t.shape)).T
+    B_svd_sigma_inv[0:B_svd_sigma_diag.shape[0],
+                    0:B_svd_sigma_diag.shape[0]] = numpy.linalg.inv(
+                        numpy.diag(B_svd_sigma_diag))
+    B_svd_inv = B_svd_v.T * B_svd_sigma_inv * B_svd_u.T
 
-  L_bar_t[1] = B_svd_inv
-  l_bar_t[1] = -B_svd_inv * (start_A_t * x_hat_initial + start_c_t)
+    L_bar_t[1] = B_svd_inv
+    l_bar_t[1] = -B_svd_inv * (start_A_t * x_hat_initial + start_c_t)
 
-  S_bar_t[1] = L_bar_t[1].T * R_t * L_bar_t[1]
+    S_bar_t[1] = L_bar_t[1].T * R_t * L_bar_t[1]
 
-  TotalS_1 = start_B_t.T * S_t[1] * start_B_t + R_t
-  Totals_1 = start_B_t.T * S_t[1] * (start_c_t + start_A_t * x_hat_initial) + start_B_t.T * s_t[1] + P_t * x_hat_initial + r_t
-  Totals_scalar_1 = 0.5 * (start_c_t.T + x_hat_initial.T * start_A_t.T) * S_t[1] * (start_c_t + start_A_t * x_hat_initial) + s_scalar_t[1] + x_hat_initial.T * q_t + q_scalar_t + 0.5 * x_hat_initial.T * Q_t * x_hat_initial + (start_c_t.T + x_hat_initial.T * start_A_t.T) * s_t[1]
+    TotalS_1 = start_B_t.T * S_t[1] * start_B_t + R_t
+    Totals_1 = start_B_t.T * S_t[1] * (
+        start_c_t + start_A_t *
+        x_hat_initial) + start_B_t.T * s_t[1] + P_t * x_hat_initial + r_t
+    Totals_scalar_1 = 0.5 * (
+        start_c_t.T + x_hat_initial.T * start_A_t.T
+    ) * S_t[1] * (start_c_t + start_A_t * x_hat_initial) + s_scalar_t[
+        1] + x_hat_initial.T * q_t + q_scalar_t + 0.5 * x_hat_initial.T * Q_t * x_hat_initial + (
+            start_c_t.T + x_hat_initial.T * start_A_t.T) * s_t[1]
 
-  optimal_u_1 = -numpy.linalg.solve(TotalS_1, Totals_1)
-  optimal_x_1 = start_A_t * x_hat_initial + start_B_t * optimal_u_1 + start_c_t
+    optimal_u_1 = -numpy.linalg.solve(TotalS_1, Totals_1)
+    optimal_x_1 = start_A_t * x_hat_initial + start_B_t * optimal_u_1 + start_c_t
 
-  S_bar_1_eigh_eigenvalues, S_bar_1_eigh_eigenvectors = numpy.linalg.eigh(S_bar_t[1])
-  S_bar_1_eigh = numpy.matrix(numpy.diag(S_bar_1_eigh_eigenvalues))
-  S_bar_1_eigh_eigenvalues_stiff = S_bar_1_eigh_eigenvalues.copy()
-  for i in range(S_bar_1_eigh_eigenvalues_stiff.shape[0]):
-    if abs(S_bar_1_eigh_eigenvalues_stiff[i]) < 1e-8:
-      S_bar_1_eigh_eigenvalues_stiff[i] = max(S_bar_1_eigh_eigenvalues_stiff) * 1.0
+    S_bar_1_eigh_eigenvalues, S_bar_1_eigh_eigenvectors = numpy.linalg.eigh(
+        S_bar_t[1])
+    S_bar_1_eigh = numpy.matrix(numpy.diag(S_bar_1_eigh_eigenvalues))
+    S_bar_1_eigh_eigenvalues_stiff = S_bar_1_eigh_eigenvalues.copy()
+    for i in range(S_bar_1_eigh_eigenvalues_stiff.shape[0]):
+        if abs(S_bar_1_eigh_eigenvalues_stiff[i]) < 1e-8:
+            S_bar_1_eigh_eigenvalues_stiff[i] = max(
+                S_bar_1_eigh_eigenvalues_stiff) * 1.0
 
-  #print 'eigh eigenvalues of S bar', S_bar_1_eigh_eigenvalues
-  #print 'eigh eigenvectors of S bar', S_bar_1_eigh_eigenvectors.T
+    #print 'eigh eigenvalues of S bar', S_bar_1_eigh_eigenvalues
+    #print 'eigh eigenvectors of S bar', S_bar_1_eigh_eigenvectors.T
 
-  #print 'S bar eig recreate', S_bar_1_eigh_eigenvectors * numpy.matrix(numpy.diag(S_bar_1_eigh_eigenvalues)) * S_bar_1_eigh_eigenvectors.T
-  #print 'S bar eig recreate error', (S_bar_1_eigh_eigenvectors * numpy.matrix(numpy.diag(S_bar_1_eigh_eigenvalues)) * S_bar_1_eigh_eigenvectors.T - S_bar_t[1])
+    #print 'S bar eig recreate', S_bar_1_eigh_eigenvectors * numpy.matrix(numpy.diag(S_bar_1_eigh_eigenvalues)) * S_bar_1_eigh_eigenvectors.T
+    #print 'S bar eig recreate error', (S_bar_1_eigh_eigenvectors * numpy.matrix(numpy.diag(S_bar_1_eigh_eigenvalues)) * S_bar_1_eigh_eigenvectors.T - S_bar_t[1])
 
-  S_bar_stiff = S_bar_1_eigh_eigenvectors * numpy.matrix(numpy.diag(S_bar_1_eigh_eigenvalues_stiff)) * S_bar_1_eigh_eigenvectors.T
+    S_bar_stiff = S_bar_1_eigh_eigenvectors * numpy.matrix(
+        numpy.diag(
+            S_bar_1_eigh_eigenvalues_stiff)) * S_bar_1_eigh_eigenvectors.T
 
-  print 'Min u', -numpy.linalg.solve(TotalS_1, Totals_1)
-  print 'Min x_hat', optimal_x_1
-  s_bar_t[1] = -s_t[1] - (S_bar_stiff + S_t[1]) * optimal_x_1
-  s_scalar_bar_t[1] = 0.5 * (optimal_u_1.T * TotalS_1 * optimal_u_1 - optimal_x_1.T * (S_bar_stiff + S_t[1]) * optimal_x_1) + optimal_u_1.T * Totals_1 - optimal_x_1.T * (s_bar_t[1] + s_t[1]) - s_scalar_t[1] + Totals_scalar_1
+    print 'Min u', -numpy.linalg.solve(TotalS_1, Totals_1)
+    print 'Min x_hat', optimal_x_1
+    s_bar_t[1] = -s_t[1] - (S_bar_stiff + S_t[1]) * optimal_x_1
+    s_scalar_bar_t[1] = 0.5 * (
+        optimal_u_1.T * TotalS_1 * optimal_u_1 - optimal_x_1.T *
+        (S_bar_stiff + S_t[1]) *
+        optimal_x_1) + optimal_u_1.T * Totals_1 - optimal_x_1.T * (
+            s_bar_t[1] + s_t[1]) - s_scalar_t[1] + Totals_scalar_1
 
-  print 'optimal_u_1', optimal_u_1
-  print 'TotalS_1', TotalS_1
-  print 'Totals_1', Totals_1
-  print 'Totals_scalar_1', Totals_scalar_1
-  print 'overall cost 1',  0.5 * (optimal_u_1.T * TotalS_1 * optimal_u_1) + optimal_u_1.T * Totals_1 + Totals_scalar_1
-  print 'overall cost 0',  0.5 * (x_hat_initial.T * S_t[0] * x_hat_initial) +  x_hat_initial.T * s_t[0] + s_scalar_t[0]
+    print 'optimal_u_1', optimal_u_1
+    print 'TotalS_1', TotalS_1
+    print 'Totals_1', Totals_1
+    print 'Totals_scalar_1', Totals_scalar_1
+    print 'overall cost 1', 0.5 * (
+        optimal_u_1.T * TotalS_1 *
+        optimal_u_1) + optimal_u_1.T * Totals_1 + Totals_scalar_1
+    print 'overall cost 0', 0.5 * (x_hat_initial.T * S_t[0] * x_hat_initial
+                                   ) + x_hat_initial.T * s_t[0] + s_scalar_t[0]
 
-  print 't forward 0'
-  print 'x_hat_initial[ 0]: %s' % (x_hat_initial)
-  print 'x_hat[%2d]: %s' % (0, x_hat.T)
-  print 'x_hat_next[%2d]: %s' % (0, x_hat_next.T)
-  print 'u[%2d]: %s' % (0, u_t.T)
-  print ('L[ 0]: %s' % (L_t[0],)).replace('\n', '\n        ')
-  print ('l[ 0]: %s' % (l_t[0],)).replace('\n', '\n        ')
+    print 't forward 0'
+    print 'x_hat_initial[ 0]: %s' % (x_hat_initial)
+    print 'x_hat[%2d]: %s' % (0, x_hat.T)
+    print 'x_hat_next[%2d]: %s' % (0, x_hat_next.T)
+    print 'u[%2d]: %s' % (0, u_t.T)
+    print('L[ 0]: %s' % (L_t[0], )).replace('\n', '\n        ')
+    print('l[ 0]: %s' % (l_t[0], )).replace('\n', '\n        ')
 
-  print ('A_t[%2d]: %s' % (0, start_A_t)).replace('\n', '\n         ')
-  print ('B_t[%2d]: %s' % (0, start_B_t)).replace('\n', '\n         ')
-  print ('c_t[%2d]: %s' % (0, start_c_t)).replace('\n', '\n         ')
+    print('A_t[%2d]: %s' % (0, start_A_t)).replace('\n', '\n         ')
+    print('B_t[%2d]: %s' % (0, start_B_t)).replace('\n', '\n         ')
+    print('c_t[%2d]: %s' % (0, start_c_t)).replace('\n', '\n         ')
 
-  # TODO(austin): optimal_x_1 is x_hat
-  x_hat = -numpy.linalg.solve((S_t[1] + S_bar_stiff), (s_t[1] + s_bar_t[1]))
-  print 'new xhat', x_hat
+    # TODO(austin): optimal_x_1 is x_hat
+    x_hat = -numpy.linalg.solve((S_t[1] + S_bar_stiff), (s_t[1] + s_bar_t[1]))
+    print 'new xhat', x_hat
 
-  S_bar_t[1] = S_bar_stiff
+    S_bar_t[1] = S_bar_stiff
 
-  last_x_hat_t[1] = x_hat
+    last_x_hat_t[1] = x_hat
 
-  for t in range(1, l):
-    print 't forward', t
-    u_t = L_t[t] * x_hat + l_t[t]
+    for t in range(1, l):
+        print 't forward', t
+        u_t = L_t[t] * x_hat + l_t[t]
 
-    x_hat_next = discrete_dynamics(x_hat, u_t)
-    A_bar_t = numerical_jacobian_x(inverse_discrete_dynamics, x_hat_next, u_t)
-    B_bar_t = numerical_jacobian_u(inverse_discrete_dynamics, x_hat_next, u_t)
-    c_bar_t = x_hat - A_bar_t * x_hat_next - B_bar_t * u_t
+        x_hat_next = discrete_dynamics(x_hat, u_t)
+        A_bar_t = numerical_jacobian_x(inverse_discrete_dynamics, x_hat_next,
+                                       u_t)
+        B_bar_t = numerical_jacobian_u(inverse_discrete_dynamics, x_hat_next,
+                                       u_t)
+        c_bar_t = x_hat - A_bar_t * x_hat_next - B_bar_t * u_t
 
-    print 'x_hat[%2d]: %s' % (t, x_hat.T)
-    print 'x_hat_next[%2d]: %s' % (t, x_hat_next.T)
-    print ('L[%2d]: %s' % (t, L_t[t],)).replace('\n', '\n        ')
-    print ('l[%2d]: %s' % (t, l_t[t],)).replace('\n', '\n        ')
-    print 'u[%2d]: %s' % (t, u_t.T)
+        print 'x_hat[%2d]: %s' % (t, x_hat.T)
+        print 'x_hat_next[%2d]: %s' % (t, x_hat_next.T)
+        print('L[%2d]: %s' % (
+            t,
+            L_t[t],
+        )).replace('\n', '\n        ')
+        print('l[%2d]: %s' % (
+            t,
+            l_t[t],
+        )).replace('\n', '\n        ')
+        print 'u[%2d]: %s' % (t, u_t.T)
 
-    print ('A_bar_t[%2d]: %s' % (t, A_bar_t)).replace('\n', '\n             ')
-    print ('B_bar_t[%2d]: %s' % (t, B_bar_t)).replace('\n', '\n             ')
-    print ('c_bar_t[%2d]: %s' % (t, c_bar_t)).replace('\n', '\n             ')
+        print('A_bar_t[%2d]: %s' % (t, A_bar_t)).replace(
+            '\n', '\n             ')
+        print('B_bar_t[%2d]: %s' % (t, B_bar_t)).replace(
+            '\n', '\n             ')
+        print('c_bar_t[%2d]: %s' % (t, c_bar_t)).replace(
+            '\n', '\n             ')
 
-    Q_t = numerical_jacobian_x_x(cost_fn_obj.cost, x_hat, u_t)
-    P_t = numerical_jacobian_x_u(cost_fn_obj.cost, x_hat, u_t)
-    R_t = numerical_jacobian_u_u(cost_fn_obj.cost, x_hat, u_t)
+        Q_t = numerical_jacobian_x_x(cost_fn_obj.cost, x_hat, u_t)
+        P_t = numerical_jacobian_x_u(cost_fn_obj.cost, x_hat, u_t)
+        R_t = numerical_jacobian_u_u(cost_fn_obj.cost, x_hat, u_t)
 
-    q_t = numerical_jacobian_x(cost_fn_obj.cost, x_hat, u_t).T - Q_t * x_hat - P_t.T * u_t
-    r_t = numerical_jacobian_u(cost_fn_obj.cost, x_hat, u_t).T - P_t * x_hat - R_t * u_t
+        q_t = numerical_jacobian_x(cost_fn_obj.cost, x_hat,
+                                   u_t).T - Q_t * x_hat - P_t.T * u_t
+        r_t = numerical_jacobian_u(cost_fn_obj.cost, x_hat,
+                                   u_t).T - P_t * x_hat - R_t * u_t
 
-    q_scalar_t = cost_fn_obj.cost(x_hat, u_t) - 0.5 * (x_hat.T * (Q_t * x_hat + P_t.T * u_t) + u_t.T * (P_t * x_hat + R_t * u_t)) - x_hat.T * q_t - u_t.T * r_t
+        q_scalar_t = cost_fn_obj.cost(x_hat, u_t) - 0.5 * (
+            x_hat.T * (Q_t * x_hat + P_t.T * u_t) + u_t.T *
+            (P_t * x_hat + R_t * u_t)) - x_hat.T * q_t - u_t.T * r_t
 
-    C_bar_t = B_bar_t.T * (S_bar_t[t] + Q_t) * A_bar_t + P_t * A_bar_t
-    D_bar_t = A_bar_t.T * (S_bar_t[t] + Q_t) * A_bar_t
-    E_bar_t = B_bar_t.T * (S_bar_t[t] + Q_t) * B_bar_t + R_t + P_t * B_bar_t + B_bar_t.T * P_t.T
-    d_bar_t = A_bar_t.T * (s_bar_t[t] + q_t) + A_bar_t.T * (S_bar_t[t] + Q_t) * c_bar_t
-    e_bar_t = r_t + P_t * c_bar_t + B_bar_t.T * s_bar_t[t] + B_bar_t.T * (S_bar_t[t] + Q_t) * c_bar_t
+        C_bar_t = B_bar_t.T * (S_bar_t[t] + Q_t) * A_bar_t + P_t * A_bar_t
+        D_bar_t = A_bar_t.T * (S_bar_t[t] + Q_t) * A_bar_t
+        E_bar_t = B_bar_t.T * (
+            S_bar_t[t] +
+            Q_t) * B_bar_t + R_t + P_t * B_bar_t + B_bar_t.T * P_t.T
+        d_bar_t = A_bar_t.T * (s_bar_t[t] + q_t) + A_bar_t.T * (S_bar_t[t] +
+                                                                Q_t) * c_bar_t
+        e_bar_t = r_t + P_t * c_bar_t + B_bar_t.T * s_bar_t[t] + B_bar_t.T * (
+            S_bar_t[t] + Q_t) * c_bar_t
 
-    L_bar_t[t + 1] = -numpy.linalg.inv(E_bar_t) * C_bar_t
-    l_bar_t[t + 1] = -numpy.linalg.inv(E_bar_t) * e_bar_t
+        L_bar_t[t + 1] = -numpy.linalg.inv(E_bar_t) * C_bar_t
+        l_bar_t[t + 1] = -numpy.linalg.inv(E_bar_t) * e_bar_t
 
-    S_bar_t[t + 1] = D_bar_t + C_bar_t.T * L_bar_t[t + 1]
-    s_bar_t[t + 1] = d_bar_t + C_bar_t.T * l_bar_t[t + 1]
-    s_scalar_bar_t[t + 1] = -0.5 * e_bar_t.T * numpy.linalg.inv(E_bar_t) * e_bar_t + 0.5 * c_bar_t.T * (S_bar_t[t] + Q_t) * c_bar_t + c_bar_t.T * s_bar_t[t] + c_bar_t.T * q_t + s_scalar_bar_t[t] + q_scalar_t
+        S_bar_t[t + 1] = D_bar_t + C_bar_t.T * L_bar_t[t + 1]
+        s_bar_t[t + 1] = d_bar_t + C_bar_t.T * l_bar_t[t + 1]
+        s_scalar_bar_t[t + 1] = -0.5 * e_bar_t.T * numpy.linalg.inv(
+            E_bar_t) * e_bar_t + 0.5 * c_bar_t.T * (
+                S_bar_t[t] + Q_t) * c_bar_t + c_bar_t.T * s_bar_t[
+                    t] + c_bar_t.T * q_t + s_scalar_bar_t[t] + q_scalar_t
 
-    x_hat = -numpy.linalg.solve((S_t[t + 1] + S_bar_t[t + 1]), (s_t[t + 1] + s_bar_t[t + 1]))
+        x_hat = -numpy.linalg.solve((S_t[t + 1] + S_bar_t[t + 1]),
+                                    (s_t[t + 1] + s_bar_t[t + 1]))
 
-  S_t[l] = cost_fn_obj.estimate_Q_final(x_hat)
-  s_t[l] = cost_fn_obj.estimate_q_final(x_hat)
-  x_hat = -numpy.linalg.inv(S_t[l] + S_bar_t[l]) * (s_t[l] + s_bar_t[l])
+    S_t[l] = cost_fn_obj.estimate_Q_final(x_hat)
+    s_t[l] = cost_fn_obj.estimate_q_final(x_hat)
+    x_hat = -numpy.linalg.inv(S_t[l] + S_bar_t[l]) * (s_t[l] + s_bar_t[l])
 
-  for t in reversed(range(l)):
-    print 't backward', t
-    # TODO(austin): I don't think we can use L_t like this here.
-    # I think we are off by 1 somewhere...
-    u_t = L_bar_t[t + 1] * x_hat + l_bar_t[t + 1]
+    for t in reversed(range(l)):
+        print 't backward', t
+        # TODO(austin): I don't think we can use L_t like this here.
+        # I think we are off by 1 somewhere...
+        u_t = L_bar_t[t + 1] * x_hat + l_bar_t[t + 1]
 
-    x_hat_prev = inverse_discrete_dynamics(x_hat, u_t)
-    print 'x_hat[%2d]: %s' % (t, x_hat.T)
-    print 'x_hat_prev[%2d]: %s' % (t, x_hat_prev.T)
-    print ('L_bar[%2d]: %s' % (t + 1, L_bar_t[t + 1])).replace('\n', '\n            ')
-    print ('l_bar[%2d]: %s' % (t + 1, l_bar_t[t + 1])).replace('\n', '\n            ')
-    print 'u[%2d]: %s' % (t, u_t.T)
-    # Now compute the linearized A, B, and C
-    # Start by doing it numerically, and then optimize.
-    A_t = numerical_jacobian_x(discrete_dynamics, x_hat_prev, u_t)
-    B_t = numerical_jacobian_u(discrete_dynamics, x_hat_prev, u_t)
-    c_t = x_hat - A_t * x_hat_prev - B_t * u_t
+        x_hat_prev = inverse_discrete_dynamics(x_hat, u_t)
+        print 'x_hat[%2d]: %s' % (t, x_hat.T)
+        print 'x_hat_prev[%2d]: %s' % (t, x_hat_prev.T)
+        print('L_bar[%2d]: %s' % (t + 1, L_bar_t[t + 1])).replace(
+            '\n', '\n            ')
+        print('l_bar[%2d]: %s' % (t + 1, l_bar_t[t + 1])).replace(
+            '\n', '\n            ')
+        print 'u[%2d]: %s' % (t, u_t.T)
+        # Now compute the linearized A, B, and C
+        # Start by doing it numerically, and then optimize.
+        A_t = numerical_jacobian_x(discrete_dynamics, x_hat_prev, u_t)
+        B_t = numerical_jacobian_u(discrete_dynamics, x_hat_prev, u_t)
+        c_t = x_hat - A_t * x_hat_prev - B_t * u_t
 
-    print ('A_t[%2d]: %s' % (t, A_t)).replace('\n', '\n         ')
-    print ('B_t[%2d]: %s' % (t, B_t)).replace('\n', '\n         ')
-    print ('c_t[%2d]: %s' % (t, c_t)).replace('\n', '\n         ')
+        print('A_t[%2d]: %s' % (t, A_t)).replace('\n', '\n         ')
+        print('B_t[%2d]: %s' % (t, B_t)).replace('\n', '\n         ')
+        print('c_t[%2d]: %s' % (t, c_t)).replace('\n', '\n         ')
 
-    Q_t = numerical_jacobian_x_x(cost_fn_obj.cost, x_hat_prev, u_t)
-    P_t = numerical_jacobian_x_u(cost_fn_obj.cost, x_hat_prev, u_t)
-    P_T_t = numerical_jacobian_u_x(cost_fn_obj.cost, x_hat_prev, u_t)
-    R_t = numerical_jacobian_u_u(cost_fn_obj.cost, x_hat_prev, u_t)
+        Q_t = numerical_jacobian_x_x(cost_fn_obj.cost, x_hat_prev, u_t)
+        P_t = numerical_jacobian_x_u(cost_fn_obj.cost, x_hat_prev, u_t)
+        P_T_t = numerical_jacobian_u_x(cost_fn_obj.cost, x_hat_prev, u_t)
+        R_t = numerical_jacobian_u_u(cost_fn_obj.cost, x_hat_prev, u_t)
 
-    q_t = numerical_jacobian_x(cost_fn_obj.cost, x_hat_prev, u_t).T - Q_t * x_hat_prev - P_T_t * u_t
-    r_t = numerical_jacobian_u(cost_fn_obj.cost, x_hat_prev, u_t).T - P_t * x_hat_prev - R_t * u_t
+        q_t = numerical_jacobian_x(cost_fn_obj.cost, x_hat_prev,
+                                   u_t).T - Q_t * x_hat_prev - P_T_t * u_t
+        r_t = numerical_jacobian_u(cost_fn_obj.cost, x_hat_prev,
+                                   u_t).T - P_t * x_hat_prev - R_t * u_t
 
-    q_scalar_t = cost_fn_obj.cost(x_hat_prev, u_t) - 0.5 * (x_hat_prev.T * (Q_t * x_hat_prev + P_t.T * u_t) + u_t.T * (P_t * x_hat_prev + R_t * u_t)) - x_hat_prev.T * q_t - u_t.T * r_t
+        q_scalar_t = cost_fn_obj.cost(x_hat_prev, u_t) - 0.5 * (
+            x_hat_prev.T * (Q_t * x_hat_prev + P_t.T * u_t) + u_t.T *
+            (P_t * x_hat_prev + R_t * u_t)) - x_hat_prev.T * q_t - u_t.T * r_t
 
-    C_t = P_t + B_t.T * S_t[t + 1] * A_t
-    D_t = Q_t + A_t.T * S_t[t + 1] * A_t
-    E_t = R_t + B_t.T * S_t[t + 1] * B_t
-    d_t = q_t + A_t.T * s_t[t + 1] + A_t.T * S_t[t + 1] * c_t
-    e_t = r_t + B_t.T * s_t[t + 1] + B_t.T * S_t[t + 1] * c_t
-    L_t[t] = -numpy.linalg.inv(E_t) * C_t
-    l_t[t] = -numpy.linalg.inv(E_t) * e_t
-    s_t[t] = d_t + C_t.T * l_t[t]
-    S_t[t] = D_t + C_t.T * L_t[t]
-    s_scalar_t[t] = q_scalar_t - 0.5 * e_t.T * numpy.linalg.inv(E_t) * e_t + 0.5 * c_t.T * S_t[t + 1] * c_t + c_t.T * s_t[t + 1] + s_scalar_t[t + 1]
+        C_t = P_t + B_t.T * S_t[t + 1] * A_t
+        D_t = Q_t + A_t.T * S_t[t + 1] * A_t
+        E_t = R_t + B_t.T * S_t[t + 1] * B_t
+        d_t = q_t + A_t.T * s_t[t + 1] + A_t.T * S_t[t + 1] * c_t
+        e_t = r_t + B_t.T * s_t[t + 1] + B_t.T * S_t[t + 1] * c_t
+        L_t[t] = -numpy.linalg.inv(E_t) * C_t
+        l_t[t] = -numpy.linalg.inv(E_t) * e_t
+        s_t[t] = d_t + C_t.T * l_t[t]
+        S_t[t] = D_t + C_t.T * L_t[t]
+        s_scalar_t[t] = q_scalar_t - 0.5 * e_t.T * numpy.linalg.inv(
+            E_t) * e_t + 0.5 * c_t.T * S_t[t + 1] * c_t + c_t.T * s_t[
+                t + 1] + s_scalar_t[t + 1]
 
-    x_hat = -numpy.linalg.solve((S_t[t] + S_bar_t[t]), (s_t[t] + s_bar_t[t]))
-    if t == 0:
-      last_x_hat_t[t] = x_hat_initial
-    else:
-      last_x_hat_t[t] = x_hat
+        x_hat = -numpy.linalg.solve((S_t[t] + S_bar_t[t]),
+                                    (s_t[t] + s_bar_t[t]))
+        if t == 0:
+            last_x_hat_t[t] = x_hat_initial
+        else:
+            last_x_hat_t[t] = x_hat
 
-  x_hat_t = [x_hat_initial]
+    x_hat_t = [x_hat_initial]
 
-  pylab.figure('states %d' % a)
-  pylab.ion()
-  for dim in range(num_states):
-    pylab.plot(numpy.arange(len(last_x_hat_t)),
-             [x_hat_loop[dim, 0] for x_hat_loop in last_x_hat_t], marker='o', label='Xhat[%d]'%dim)
-  pylab.legend()
-  pylab.draw()
+    pylab.figure('states %d' % a)
+    pylab.ion()
+    for dim in range(num_states):
+        pylab.plot(numpy.arange(len(last_x_hat_t)),
+                   [x_hat_loop[dim, 0] for x_hat_loop in last_x_hat_t],
+                   marker='o',
+                   label='Xhat[%d]' % dim)
+    pylab.legend()
+    pylab.draw()
 
-  pylab.figure('xy %d' % a)
-  pylab.ion()
-  pylab.plot([x_hat_loop[0, 0] for x_hat_loop in last_x_hat_t],
-             [x_hat_loop[1, 0] for x_hat_loop in last_x_hat_t], marker='o', label='trajectory')
-  pylab.legend()
-  pylab.draw()
+    pylab.figure('xy %d' % a)
+    pylab.ion()
+    pylab.plot([x_hat_loop[0, 0] for x_hat_loop in last_x_hat_t],
+               [x_hat_loop[1, 0] for x_hat_loop in last_x_hat_t],
+               marker='o',
+               label='trajectory')
+    pylab.legend()
+    pylab.draw()
 
 final_u_t = [numpy.matrix(numpy.zeros((num_inputs, 1))) for _ in range(l + 1)]
 cost_to_go = []
 cost_to_come = []
 cost = []
 for t in range(l):
-  cost_to_go.append((0.5 * last_x_hat_t[t].T * S_t[t] * last_x_hat_t[t] + last_x_hat_t[t].T * s_t[t] + s_scalar_t[t])[0, 0])
-  cost_to_come.append((0.5 * last_x_hat_t[t].T * S_bar_t[t] * last_x_hat_t[t] + last_x_hat_t[t].T * s_bar_t[t] + s_scalar_bar_t[t])[0, 0])
-  cost.append(cost_to_go[-1] + cost_to_come[-1])
-  final_u_t[t] = L_t[t] * last_x_hat_t[t] + l_t[t]
+    cost_to_go.append((0.5 * last_x_hat_t[t].T * S_t[t] * last_x_hat_t[t] +
+                       last_x_hat_t[t].T * s_t[t] + s_scalar_t[t])[0, 0])
+    cost_to_come.append(
+        (0.5 * last_x_hat_t[t].T * S_bar_t[t] * last_x_hat_t[t] +
+         last_x_hat_t[t].T * s_bar_t[t] + s_scalar_bar_t[t])[0, 0])
+    cost.append(cost_to_go[-1] + cost_to_come[-1])
+    final_u_t[t] = L_t[t] * last_x_hat_t[t] + l_t[t]
 
 for t in range(l):
-  A_t = numerical_jacobian_x(discrete_dynamics, last_x_hat_t[t], final_u_t[t])
-  B_t = numerical_jacobian_u(discrete_dynamics, last_x_hat_t[t], final_u_t[t])
-  c_t = discrete_dynamics(last_x_hat_t[t], final_u_t[t]) - A_t * last_x_hat_t[t] - B_t * final_u_t[t]
-  print("Infeasability at", t, "is", ((A_t * last_x_hat_t[t] + B_t * final_u_t[t] + c_t) - last_x_hat_t[t + 1]).T)
+    A_t = numerical_jacobian_x(discrete_dynamics, last_x_hat_t[t],
+                               final_u_t[t])
+    B_t = numerical_jacobian_u(discrete_dynamics, last_x_hat_t[t],
+                               final_u_t[t])
+    c_t = discrete_dynamics(
+        last_x_hat_t[t],
+        final_u_t[t]) - A_t * last_x_hat_t[t] - B_t * final_u_t[t]
+    print("Infeasability at", t, "is",
+          ((A_t * last_x_hat_t[t] + B_t * final_u_t[t] + c_t) -
+           last_x_hat_t[t + 1]).T)
 
 pylab.figure('u')
 samples = numpy.arange(len(final_u_t))
 for i in range(num_inputs):
-  pylab.plot(samples, [u[i, 0] for u in final_u_t], label='u[%d]' % i, marker='o')
-  pylab.legend()
+    pylab.plot(samples, [u[i, 0] for u in final_u_t],
+               label='u[%d]' % i,
+               marker='o')
+    pylab.legend()
 
 pylab.figure('cost')
 cost_samples = numpy.arange(len(cost))
diff --git a/y2014/control_loops/python/extended_lqr_derivation.py b/y2014/control_loops/python/extended_lqr_derivation.py
index 010c5de..6857654 100755
--- a/y2014/control_loops/python/extended_lqr_derivation.py
+++ b/y2014/control_loops/python/extended_lqr_derivation.py
@@ -6,7 +6,6 @@
 import random
 
 import sympy
-
 '''
 * `x_t1` means `x_{t + 1}`. Using `'x_t + 1'` as the symbol name makes the non-
   latex output really confusing, so not doing that.
@@ -57,351 +56,335 @@
 ub = sympy.MatrixSymbol('ubold', number_of_inputs, 1)
 
 CONSTANTS = set([
-    A_t, B_t, cb_t,
-    S_t1, sb_t1, s_t1,
-    A_tb, B_tb, cb_tb,
-    S_tb, sb_tb, s_tb,
-    P_t, Q_t, R_t, qb_t, rb_t, q_t,
-    ])
+    A_t,
+    B_t,
+    cb_t,
+    S_t1,
+    sb_t1,
+    s_t1,
+    A_tb,
+    B_tb,
+    cb_tb,
+    S_tb,
+    sb_tb,
+    s_tb,
+    P_t,
+    Q_t,
+    R_t,
+    qb_t,
+    rb_t,
+    q_t,
+])
 
 SYMMETRIC_CONSTANTS = set([
-    S_t1, S_tb,
-    Q_t, R_t,
-    ])
+    S_t1,
+    S_tb,
+    Q_t,
+    R_t,
+])
+
 
 def verify_equivalent(a, b, inverses={}):
-  def get_matrices(m):
-    matrices = m.atoms(sympy.MatrixSymbol)
-    new_matrices = set()
-    for matrix in matrices:
-      if matrix in inverses:
-        new_matrices.update(inverses[matrix].atoms(sympy.MatrixSymbol))
-    matrices.update(new_matrices)
-  a_matrices, b_matrices = get_matrices(a), get_matrices(b)
-  if a_matrices != b_matrices:
-    raise RuntimeError('matrices different: %s vs %s' % (a_matrices,
-                                                         b_matrices))
-  a_symbols, b_symbols = a.atoms(sympy.Symbol), b.atoms(sympy.Symbol)
-  if a_symbols != b_symbols:
-    raise RuntimeError('symbols different: %s vs %s' % (a_symbols, b_symbols))
-  if not a_symbols < DIMENSIONS:
-    raise RuntimeError('not sure what to do with %s' % (a_symbols - DIMENSIONS))
 
-  if a.shape != b.shape:
-    raise RuntimeError('Different shapes: %s and %s' % (a.shape, b.shape))
+    def get_matrices(m):
+        matrices = m.atoms(sympy.MatrixSymbol)
+        new_matrices = set()
+        for matrix in matrices:
+            if matrix in inverses:
+                new_matrices.update(inverses[matrix].atoms(sympy.MatrixSymbol))
+        matrices.update(new_matrices)
 
-  for _ in range(10):
-    subs_symbols = {s: random.randint(1, 5) for s in a_symbols}
+    a_matrices, b_matrices = get_matrices(a), get_matrices(b)
+    if a_matrices != b_matrices:
+        raise RuntimeError('matrices different: %s vs %s' %
+                           (a_matrices, b_matrices))
+    a_symbols, b_symbols = a.atoms(sympy.Symbol), b.atoms(sympy.Symbol)
+    if a_symbols != b_symbols:
+        raise RuntimeError('symbols different: %s vs %s' %
+                           (a_symbols, b_symbols))
+    if not a_symbols < DIMENSIONS:
+        raise RuntimeError('not sure what to do with %s' %
+                           (a_symbols - DIMENSIONS))
+
+    if a.shape != b.shape:
+        raise RuntimeError('Different shapes: %s and %s' % (a.shape, b.shape))
+
     for _ in range(10):
-      diff = a - b
-      subs_matrices = {}
-      def get_replacement(*args):
-        try:
-          m = sympy.MatrixSymbol(*args)
-          if m not in subs_matrices:
-            if m in inverses:
-              i = inverses[m].replace(sympy.MatrixSymbol, get_replacement, simultaneous=False)
-              i_evaled = sympy.ImmutableMatrix(i.rows, i.cols,
-                                               lambda x,y: i[x, y].evalf())
-              subs_matrices[m] = i_evaled.I
-            else:
-              rows = m.rows.subs(subs_symbols)
-              cols = m.cols.subs(subs_symbols)
-              new_m = sympy.ImmutableMatrix(rows, cols,
-                                            lambda i,j: random.uniform(-5, 5))
-              if m in SYMMETRIC_CONSTANTS:
-                if rows != cols:
-                  raise RuntimeError('Non-square symmetric matrix %s' % m)
-                def calculate_cell(i, j):
-                  if i > j:
-                    return new_m[i, j]
-                  else:
-                    return new_m[j, i]
-                new_m = sympy.ImmutableMatrix(rows, cols, calculate_cell)
-              subs_matrices[m] = new_m
-          return subs_matrices[m]
-        except AttributeError as e:
-          # Stupid sympy silently eats AttributeErrors and treats them as
-          # "no replacement"...
-          raise RuntimeError(e)
-      # subs fails when it tries doing matrix multiplies between fixed-size ones
-      # and the rest of the equation which still has the symbolic-sized ones.
-      # subs(simultaneous=True) wants to put dummies in for everything first,
-      # and Dummy().transpose() is broken.
-      # replace() has the same issue as subs with simultaneous being True.
-      # lambdify() has no idea what to do with the transposes if you replace all
-      # the matrices with ones of random sizes full of dummies.
-      diff = diff.replace(sympy.MatrixSymbol, get_replacement,
-                          simultaneous=False)
-      for row in range(diff.rows):
-        for col in range(diff.cols):
-          result = diff[row, col].evalf()
-          if abs(result) > 1e-7:
-            raise RuntimeError('difference at (%s, %s) is %s' % (row, col,
-                                                                 result))
+        subs_symbols = {s: random.randint(1, 5) for s in a_symbols}
+        for _ in range(10):
+            diff = a - b
+            subs_matrices = {}
+
+            def get_replacement(*args):
+                try:
+                    m = sympy.MatrixSymbol(*args)
+                    if m not in subs_matrices:
+                        if m in inverses:
+                            i = inverses[m].replace(sympy.MatrixSymbol,
+                                                    get_replacement,
+                                                    simultaneous=False)
+                            i_evaled = sympy.ImmutableMatrix(
+                                i.rows, i.cols, lambda x, y: i[x, y].evalf())
+                            subs_matrices[m] = i_evaled.I
+                        else:
+                            rows = m.rows.subs(subs_symbols)
+                            cols = m.cols.subs(subs_symbols)
+                            new_m = sympy.ImmutableMatrix(
+                                rows, cols, lambda i, j: random.uniform(-5, 5))
+                            if m in SYMMETRIC_CONSTANTS:
+                                if rows != cols:
+                                    raise RuntimeError(
+                                        'Non-square symmetric matrix %s' % m)
+
+                                def calculate_cell(i, j):
+                                    if i > j:
+                                        return new_m[i, j]
+                                    else:
+                                        return new_m[j, i]
+
+                                new_m = sympy.ImmutableMatrix(
+                                    rows, cols, calculate_cell)
+                            subs_matrices[m] = new_m
+                    return subs_matrices[m]
+                except AttributeError as e:
+                    # Stupid sympy silently eats AttributeErrors and treats them as
+                    # "no replacement"...
+                    raise RuntimeError(e)
+
+            # subs fails when it tries doing matrix multiplies between fixed-size ones
+            # and the rest of the equation which still has the symbolic-sized ones.
+            # subs(simultaneous=True) wants to put dummies in for everything first,
+            # and Dummy().transpose() is broken.
+            # replace() has the same issue as subs with simultaneous being True.
+            # lambdify() has no idea what to do with the transposes if you replace all
+            # the matrices with ones of random sizes full of dummies.
+            diff = diff.replace(sympy.MatrixSymbol,
+                                get_replacement,
+                                simultaneous=False)
+            for row in range(diff.rows):
+                for col in range(diff.cols):
+                    result = diff[row, col].evalf()
+                    if abs(result) > 1e-7:
+                        raise RuntimeError('difference at (%s, %s) is %s' %
+                                           (row, col, result))
+
 
 def verify_arguments(f, *args):
-  matrix_atoms = f.atoms(sympy.MatrixSymbol) - CONSTANTS
-  if matrix_atoms != set(args):
-    print('Arguments expected to be %s, but are %s, in:\n%s' % (
-        sorted(args), sorted(list(matrix_atoms)), f), file=sys.stderr)
-    raise RuntimeError
+    matrix_atoms = f.atoms(sympy.MatrixSymbol) - CONSTANTS
+    if matrix_atoms != set(args):
+        print('Arguments expected to be %s, but are %s, in:\n%s' %
+              (sorted(args), sorted(list(matrix_atoms)), f),
+              file=sys.stderr)
+        raise RuntimeError
+
 
 def make_c_t():
-  x_and_u = sympy.BlockMatrix(((xb,), (ub,)))
-  c_t = (half * x_and_u.transpose() *
-         sympy.BlockMatrix(((Q_t, P_t.T), (P_t, R_t))) * x_and_u +
-         x_and_u.transpose() * sympy.BlockMatrix(((qb_t,), (rb_t,))) +
-         q_t)
-  verify_arguments(c_t, xb, ub)
-  return c_t
+    x_and_u = sympy.BlockMatrix(((xb, ), (ub, )))
+    c_t = (half * x_and_u.transpose() * sympy.BlockMatrix(
+        ((Q_t, P_t.T),
+         (P_t, R_t))) * x_and_u + x_and_u.transpose() * sympy.BlockMatrix(
+             ((qb_t, ), (rb_t, ))) + q_t)
+    verify_arguments(c_t, xb, ub)
+    return c_t
+
 
 def check_backwards_cost():
-  g_t = A_t * xb_t + B_t * ub_t + cb_t
-  verify_arguments(g_t, xb_t, ub_t)
-  v_t1 = half * xb.transpose() * S_t1 * xb + xb.transpose() * sb_t1 + s_t1
-  verify_arguments(v_t1, xb)
-  v_t = (v_t1.subs(xb, g_t) + make_c_t()).subs({xb_t: xb, ub_t: ub})
-  verify_arguments(v_t, xb, ub)
+    g_t = A_t * xb_t + B_t * ub_t + cb_t
+    verify_arguments(g_t, xb_t, ub_t)
+    v_t1 = half * xb.transpose() * S_t1 * xb + xb.transpose() * sb_t1 + s_t1
+    verify_arguments(v_t1, xb)
+    v_t = (v_t1.subs(xb, g_t) + make_c_t()).subs({xb_t: xb, ub_t: ub})
+    verify_arguments(v_t, xb, ub)
 
-  v_t_for_cost = (
-      half * (
-          xb.transpose() * (A_t.transpose() * S_t1 * A_t + Q_t) * xb +
-          ub.transpose() * (B_t.transpose() * S_t1 * A_t + P_t) * xb +
-          xb.transpose() * (A_t.transpose() * S_t1 * B_t + P_t.T) * ub +
-          ub.transpose() * (B_t.transpose() * S_t1 * B_t + R_t) * ub) +
-      xb.transpose() * (A_t.transpose() * sb_t1 + qb_t) +
-      ub.transpose() * (B_t.transpose() * sb_t1 + rb_t) +
-      cb_t.transpose() * sb_t1 +
-      s_t1 + q_t +
-      half * (cb_t.transpose() * S_t1 * cb_t +
-    xb.transpose() * A_t.transpose() * S_t1 * cb_t +
-    ub.transpose() * B_t.transpose() * S_t1 * cb_t +
-    cb_t.transpose() * S_t1 * B_t * ub +
-              cb_t.transpose() * S_t1 * A_t * xb))
-  verify_equivalent(v_t, v_t_for_cost)
+    v_t_for_cost = (
+        half * (xb.transpose() *
+                (A_t.transpose() * S_t1 * A_t + Q_t) * xb + ub.transpose() *
+                (B_t.transpose() * S_t1 * A_t + P_t) * xb + xb.transpose() *
+                (A_t.transpose() * S_t1 * B_t + P_t.T) * ub + ub.transpose() *
+                (B_t.transpose() * S_t1 * B_t + R_t) * ub) + xb.transpose() *
+        (A_t.transpose() * sb_t1 + qb_t) + ub.transpose() *
+        (B_t.transpose() * sb_t1 + rb_t) + cb_t.transpose() * sb_t1 + s_t1 +
+        q_t + half *
+        (cb_t.transpose() * S_t1 * cb_t + xb.transpose() * A_t.transpose() *
+         S_t1 * cb_t + ub.transpose() * B_t.transpose() * S_t1 * cb_t +
+         cb_t.transpose() * S_t1 * B_t * ub +
+         cb_t.transpose() * S_t1 * A_t * xb))
+    verify_equivalent(v_t, v_t_for_cost)
 
-  v_t_now = (
-      half * (xb.T * (A_t.T * S_t1 * A_t + Q_t) * xb +
-              ub.T * (B_t.T * S_t1 * A_t + P_t) * xb +
-              xb.T * (A_t.T * S_t1 * B_t + P_t.T) * ub +
-              ub.T * (B_t.T * S_t1 * B_t + R_t) * ub) +
-      xb.T * (A_t.T * sb_t1 + qb_t) +
-      ub.T * (B_t.T * sb_t1 + rb_t) +
-      cb_t.T * sb_t1 + s_t1 + q_t +
-      half * (cb_t.T * S_t1 * cb_t +
-              xb.T * A_t.T * S_t1 * cb_t +
-              ub.T * B_t.T * S_t1 * cb_t +
-              cb_t.T * S_t1 * B_t * ub +
-              cb_t.T * S_t1 * A_t * xb))
+    v_t_now = (
+        half * (xb.T * (A_t.T * S_t1 * A_t + Q_t) * xb + ub.T *
+                (B_t.T * S_t1 * A_t + P_t) * xb + xb.T *
+                (A_t.T * S_t1 * B_t + P_t.T) * ub + ub.T *
+                (B_t.T * S_t1 * B_t + R_t) * ub) + xb.T *
+        (A_t.T * sb_t1 + qb_t) + ub.T * (B_t.T * sb_t1 + rb_t) +
+        cb_t.T * sb_t1 + s_t1 + q_t + half *
+        (cb_t.T * S_t1 * cb_t + xb.T * A_t.T * S_t1 * cb_t + ub.T * B_t.T *
+         S_t1 * cb_t + cb_t.T * S_t1 * B_t * ub + cb_t.T * S_t1 * A_t * xb))
 
-  v_t_now = (
-      half * (xb.T * (A_t.T * S_t1 * A_t + Q_t) * xb +
-              ub.T * (B_t.T * S_t1 * A_t + P_t) * xb +
-              xb.T * (A_t.T * S_t1 * B_t + P_t.T) * ub +
-              ub.T * (B_t.T * S_t1 * B_t + R_t) * ub) +
-      xb.T * (A_t.T * sb_t1 + qb_t + half * A_t.T * S_t1 * cb_t) +
-      ub.T * (B_t.T * sb_t1 + rb_t + half * B_t.T * S_t1 * cb_t) +
-      half * cb_t.T * S_t1 * (A_t * xb + B_t * ub + cb_t) +
-      cb_t.T * sb_t1 + s_t1 + q_t)
+    v_t_now = (half * (xb.T * (A_t.T * S_t1 * A_t + Q_t) * xb + ub.T *
+                       (B_t.T * S_t1 * A_t + P_t) * xb + xb.T *
+                       (A_t.T * S_t1 * B_t + P_t.T) * ub + ub.T *
+                       (B_t.T * S_t1 * B_t + R_t) * ub) + xb.T *
+               (A_t.T * sb_t1 + qb_t + half * A_t.T * S_t1 * cb_t) + ub.T *
+               (B_t.T * sb_t1 + rb_t + half * B_t.T * S_t1 * cb_t) +
+               half * cb_t.T * S_t1 * (A_t * xb + B_t * ub + cb_t) +
+               cb_t.T * sb_t1 + s_t1 + q_t)
 
-  v_t_now = (
-      half * (xb.T * (A_t.T * S_t1 * A_t + Q_t) * xb +
-              ub.T * (B_t.T * S_t1 * A_t + P_t) * xb +
-              xb.T * (A_t.T * S_t1 * B_t + P_t.T) * ub +
-              ub.T * (B_t.T * S_t1 * B_t + R_t) * ub) +
-      xb.T * (A_t.T * sb_t1 + qb_t + A_t.T * S_t1 * cb_t) +
-      ub.T * (B_t.T * sb_t1 + rb_t + B_t.T * S_t1 * cb_t) +
-      half * cb_t.T * S_t1 * cb_t +
-      cb_t.T * sb_t1 + s_t1 + q_t)
+    v_t_now = (half * (xb.T * (A_t.T * S_t1 * A_t + Q_t) * xb + ub.T *
+                       (B_t.T * S_t1 * A_t + P_t) * xb + xb.T *
+                       (A_t.T * S_t1 * B_t + P_t.T) * ub + ub.T *
+                       (B_t.T * S_t1 * B_t + R_t) * ub) + xb.T *
+               (A_t.T * sb_t1 + qb_t + A_t.T * S_t1 * cb_t) + ub.T *
+               (B_t.T * sb_t1 + rb_t + B_t.T * S_t1 * cb_t) +
+               half * cb_t.T * S_t1 * cb_t + cb_t.T * sb_t1 + s_t1 + q_t)
 
-  C_t = B_t.T * S_t1 * A_t + P_t
-  E_t = B_t.T * S_t1 * B_t + R_t
-  E_t_I = sympy.MatrixSymbol('E_t^-1', E_t.cols, E_t.rows)
-  L_t = -E_t_I * C_t
-  eb_t = B_t.T * S_t1 * cb_t + B_t.T * sb_t1 + rb_t
-  lb_t = -E_t_I * eb_t
-  D_t = A_t.T * S_t1 * A_t + Q_t
-  db_t = A_t.T * S_t1 * cb_t + A_t.T * sb_t1 + qb_t
+    C_t = B_t.T * S_t1 * A_t + P_t
+    E_t = B_t.T * S_t1 * B_t + R_t
+    E_t_I = sympy.MatrixSymbol('E_t^-1', E_t.cols, E_t.rows)
+    L_t = -E_t_I * C_t
+    eb_t = B_t.T * S_t1 * cb_t + B_t.T * sb_t1 + rb_t
+    lb_t = -E_t_I * eb_t
+    D_t = A_t.T * S_t1 * A_t + Q_t
+    db_t = A_t.T * S_t1 * cb_t + A_t.T * sb_t1 + qb_t
 
-  v_t_now = (
-      half * (xb.T * D_t * xb + ub.T * C_t * xb +
-              xb.T * C_t.T * ub + ub.T * E_t * ub) +
-      xb.T * db_t + ub.T * eb_t +
-      half * cb_t.T * S_t1 * cb_t +
-      cb_t.T * sb_t1 + s_t1 + q_t)
+    v_t_now = (half * (xb.T * D_t * xb + ub.T * C_t * xb + xb.T * C_t.T * ub +
+                       ub.T * E_t * ub) + xb.T * db_t + ub.T * eb_t +
+               half * cb_t.T * S_t1 * cb_t + cb_t.T * sb_t1 + s_t1 + q_t)
 
-  v_t_final = (
-      half * xb.T * (D_t + L_t.T * C_t + C_t.T * L_t + L_t.T * E_t * L_t) * xb +
-      xb.T * (C_t.T * lb_t + L_t.T * E_t * lb_t + db_t + L_t.T * eb_t) +
-      half * lb_t.T * E_t * lb_t +
-      lb_t.T * eb_t +
-      cb_t.T * sb_t1 + s_t1 + q_t + half * cb_t.T * S_t1 * cb_t
-      )
-  verify_arguments(v_t_final, xb, E_t_I)
-  verify_equivalent(v_t.subs(ub, L_t * xb + lb_t), v_t_final, {E_t_I: E_t})
+    v_t_final = (half * xb.T *
+                 (D_t + L_t.T * C_t + C_t.T * L_t + L_t.T * E_t * L_t) * xb +
+                 xb.T *
+                 (C_t.T * lb_t + L_t.T * E_t * lb_t + db_t + L_t.T * eb_t) +
+                 half * lb_t.T * E_t * lb_t + lb_t.T * eb_t + cb_t.T * sb_t1 +
+                 s_t1 + q_t + half * cb_t.T * S_t1 * cb_t)
+    verify_arguments(v_t_final, xb, E_t_I)
+    verify_equivalent(v_t.subs(ub, L_t * xb + lb_t), v_t_final, {E_t_I: E_t})
 
-  def v_t_from_s(this_S_t, this_sb_t, this_s_t):
-    return half * xb.T * this_S_t * xb + xb.T * this_sb_t + this_s_t
+    def v_t_from_s(this_S_t, this_sb_t, this_s_t):
+        return half * xb.T * this_S_t * xb + xb.T * this_sb_t + this_s_t
 
-  S_t_new_first = D_t + L_t.T * C_t + C_t.T * L_t + L_t.T * E_t * L_t
-  sb_t_new_first = db_t - C_t.T * E_t_I * eb_t
-  s_t_new_first = (half * lb_t.T * E_t * lb_t +
-                   lb_t.T * eb_t +
-                   cb_t.T * sb_t1 +
-                   s_t1 + q_t +
-                   half * cb_t.T * S_t1 * cb_t)
-  verify_equivalent(v_t_from_s(S_t_new_first, sb_t_new_first, s_t_new_first),
-                    v_t_final, {E_t_I: E_t})
+    S_t_new_first = D_t + L_t.T * C_t + C_t.T * L_t + L_t.T * E_t * L_t
+    sb_t_new_first = db_t - C_t.T * E_t_I * eb_t
+    s_t_new_first = (half * lb_t.T * E_t * lb_t + lb_t.T * eb_t +
+                     cb_t.T * sb_t1 + s_t1 + q_t + half * cb_t.T * S_t1 * cb_t)
+    verify_equivalent(v_t_from_s(S_t_new_first, sb_t_new_first, s_t_new_first),
+                      v_t_final, {E_t_I: E_t})
 
-  S_t_new_end = D_t - C_t.T * E_t_I * C_t
-  sb_t_new_end = db_t - C_t.T * E_t_I * eb_t
-  s_t_new_end = (q_t - half * eb_t.T * E_t_I * eb_t +
-                 half * cb_t.T * S_t1 * cb_t + cb_t.T * sb_t1 + s_t1)
-  verify_equivalent(v_t_from_s(S_t_new_end, sb_t_new_end, s_t_new_end),
-                    v_t_final, {E_t_I: E_t})
+    S_t_new_end = D_t - C_t.T * E_t_I * C_t
+    sb_t_new_end = db_t - C_t.T * E_t_I * eb_t
+    s_t_new_end = (q_t - half * eb_t.T * E_t_I * eb_t +
+                   half * cb_t.T * S_t1 * cb_t + cb_t.T * sb_t1 + s_t1)
+    verify_equivalent(v_t_from_s(S_t_new_end, sb_t_new_end, s_t_new_end),
+                      v_t_final, {E_t_I: E_t})
+
 
 def check_forwards_cost():
-  v_tb = half * xb.T * S_tb * xb + xb.T * sb_tb + s_tb
-  verify_arguments(v_tb, xb)
-  g_tb = A_tb * xb_t1 + B_tb * ub + cb_tb
-  verify_arguments(g_tb, xb_t1, ub)
-  c_t1b = make_c_t().subs(xb, g_tb)
-  verify_arguments(c_t1b, xb_t1, ub)
-  v_t1b = v_tb.subs(xb, g_tb) + c_t1b
-  verify_arguments(v_t1b, xb_t1, ub)
+    v_tb = half * xb.T * S_tb * xb + xb.T * sb_tb + s_tb
+    verify_arguments(v_tb, xb)
+    g_tb = A_tb * xb_t1 + B_tb * ub + cb_tb
+    verify_arguments(g_tb, xb_t1, ub)
+    c_t1b = make_c_t().subs(xb, g_tb)
+    verify_arguments(c_t1b, xb_t1, ub)
+    v_t1b = v_tb.subs(xb, g_tb) + c_t1b
+    verify_arguments(v_t1b, xb_t1, ub)
 
-  v_t1b_now = (
-      half * g_tb.T * S_tb * g_tb +
-      g_tb.T * sb_tb + s_tb +
-      half * (g_tb.T * Q_t * g_tb +
-              ub.T * P_t * g_tb +
-              g_tb.T * P_t.T * ub +
-              ub.T * R_t * ub) +
-      g_tb.T * qb_t + ub.T * rb_t + q_t)
+    v_t1b_now = (half * g_tb.T * S_tb * g_tb + g_tb.T * sb_tb + s_tb + half *
+                 (g_tb.T * Q_t * g_tb + ub.T * P_t * g_tb +
+                  g_tb.T * P_t.T * ub + ub.T * R_t * ub) + g_tb.T * qb_t +
+                 ub.T * rb_t + q_t)
 
-  v_t1b_for_cost = (
-      half * (xb_t1.T * A_tb.T * (S_tb + Q_t) * A_tb * xb_t1 +
-              xb_t1.T * A_tb.T * (S_tb + Q_t) * B_tb * ub +
-              xb_t1.T * A_tb.T * (S_tb + Q_t) * cb_tb +
-              ub.T * B_tb.T * (S_tb + Q_t) * A_tb * xb_t1 +
-              ub.T * B_tb.T * (S_tb + Q_t) * B_tb * ub +
-              ub.T * B_tb.T * (S_tb + Q_t) * cb_tb +
-              cb_tb.T * (S_tb + Q_t) * A_tb * xb_t1 +
-              cb_tb.T * (S_tb + Q_t) * B_tb * ub +
-              cb_tb.T * (S_tb + Q_t) * cb_tb) +
-      xb_t1.T * A_tb.T * sb_tb +
-      ub.T * B_tb.T * sb_tb +
-      cb_tb.T * sb_tb +
-      s_tb +
-      half * (ub.T * P_t * A_tb * xb_t1 +
-              ub.T * P_t * B_tb * ub +
-              ub.T * P_t * cb_tb) +
-      half * (xb_t1.T * A_tb.T * P_t.T * ub +
-              ub.T * B_tb.T * P_t.T * ub +
-              cb_tb.T * P_t.T * ub) +
-      half * ub.T * R_t * ub +
-      xb_t1.T * A_tb.T * qb_t + ub.T * B_tb.T * qb_t + cb_tb.T * qb_t +
-      ub.T * rb_t + q_t)
-  verify_equivalent(v_t1b, v_t1b_for_cost)
+    v_t1b_for_cost = (half * (xb_t1.T * A_tb.T *
+                              (S_tb + Q_t) * A_tb * xb_t1 + xb_t1.T * A_tb.T *
+                              (S_tb + Q_t) * B_tb * ub + xb_t1.T * A_tb.T *
+                              (S_tb + Q_t) * cb_tb + ub.T * B_tb.T *
+                              (S_tb + Q_t) * A_tb * xb_t1 + ub.T * B_tb.T *
+                              (S_tb + Q_t) * B_tb * ub + ub.T * B_tb.T *
+                              (S_tb + Q_t) * cb_tb + cb_tb.T *
+                              (S_tb + Q_t) * A_tb * xb_t1 + cb_tb.T *
+                              (S_tb + Q_t) * B_tb * ub + cb_tb.T *
+                              (S_tb + Q_t) * cb_tb) +
+                      xb_t1.T * A_tb.T * sb_tb + ub.T * B_tb.T * sb_tb +
+                      cb_tb.T * sb_tb + s_tb + half *
+                      (ub.T * P_t * A_tb * xb_t1 + ub.T * P_t * B_tb * ub +
+                       ub.T * P_t * cb_tb) + half *
+                      (xb_t1.T * A_tb.T * P_t.T * ub +
+                       ub.T * B_tb.T * P_t.T * ub + cb_tb.T * P_t.T * ub) +
+                      half * ub.T * R_t * ub + xb_t1.T * A_tb.T * qb_t +
+                      ub.T * B_tb.T * qb_t + cb_tb.T * qb_t + ub.T * rb_t +
+                      q_t)
+    verify_equivalent(v_t1b, v_t1b_for_cost)
 
-  S_and_Q = S_tb + Q_t
+    S_and_Q = S_tb + Q_t
 
-  v_t1b_now = (
-      half * (xb_t1.T * A_tb.T * S_and_Q * A_tb * xb_t1 +
-              xb_t1.T * A_tb.T * S_and_Q * B_tb * ub +
-              xb_t1.T * A_tb.T * S_and_Q * cb_tb +
-              ub.T * B_tb.T * S_and_Q * A_tb * xb_t1 +
-              ub.T * B_tb.T * S_and_Q * B_tb * ub +
-              ub.T * B_tb.T * S_and_Q * cb_tb +
-              cb_tb.T * S_and_Q * A_tb * xb_t1 +
-              cb_tb.T * S_and_Q * B_tb * ub +
-              cb_tb.T * S_and_Q * cb_tb) +
-      xb_t1.T * A_tb.T * sb_tb +
-      ub.T * B_tb.T * sb_tb +
-      cb_tb.T * sb_tb +
-      s_tb +
-      half * (ub.T * P_t * A_tb * xb_t1 +
-              ub.T * P_t * B_tb * ub +
-              ub.T * P_t * cb_tb) +
-      half * (xb_t1.T * A_tb.T * P_t.T * ub +
-              ub.T * B_tb.T * P_t.T * ub +
-              cb_tb.T * P_t.T * ub) +
-      half * ub.T * R_t * ub +
-      xb_t1.T * A_tb.T * qb_t +
-      ub.T * B_tb.T * qb_t +
-      cb_tb.T * qb_t +
-      ub.T * rb_t +
-      q_t)
+    v_t1b_now = (
+        half *
+        (xb_t1.T * A_tb.T * S_and_Q * A_tb * xb_t1 + xb_t1.T * A_tb.T *
+         S_and_Q * B_tb * ub + xb_t1.T * A_tb.T * S_and_Q * cb_tb + ub.T *
+         B_tb.T * S_and_Q * A_tb * xb_t1 + ub.T * B_tb.T * S_and_Q * B_tb * ub
+         + ub.T * B_tb.T * S_and_Q * cb_tb + cb_tb.T * S_and_Q * A_tb * xb_t1 +
+         cb_tb.T * S_and_Q * B_tb * ub + cb_tb.T * S_and_Q * cb_tb) +
+        xb_t1.T * A_tb.T * sb_tb + ub.T * B_tb.T * sb_tb + cb_tb.T * sb_tb +
+        s_tb + half * (ub.T * P_t * A_tb * xb_t1 + ub.T * P_t * B_tb * ub +
+                       ub.T * P_t * cb_tb) + half *
+        (xb_t1.T * A_tb.T * P_t.T * ub + ub.T * B_tb.T * P_t.T * ub +
+         cb_tb.T * P_t.T * ub) + half * ub.T * R_t * ub +
+        xb_t1.T * A_tb.T * qb_t + ub.T * B_tb.T * qb_t + cb_tb.T * qb_t +
+        ub.T * rb_t + q_t)
 
-  C_tb = B_tb.T * S_and_Q * A_tb + P_t * A_tb
-  E_tb = B_tb.T * S_and_Q * B_tb + B_tb.T * P_t.T + P_t * B_tb + R_t
-  E_tb_I = sympy.MatrixSymbol('Ebar_t^-1', E_tb.cols, E_tb.rows)
-  L_tb = -E_tb_I * C_tb
-  eb_tb = B_tb.T * S_and_Q * cb_tb + B_tb.T * sb_tb + P_t * cb_tb + B_tb.T * qb_t + rb_t
-  lb_tb = -E_tb_I * eb_tb
-  D_tb = A_tb.T * S_and_Q * A_tb
-  db_tb = A_tb.T * S_and_Q * cb_tb + A_tb.T * (sb_tb + qb_t)
+    C_tb = B_tb.T * S_and_Q * A_tb + P_t * A_tb
+    E_tb = B_tb.T * S_and_Q * B_tb + B_tb.T * P_t.T + P_t * B_tb + R_t
+    E_tb_I = sympy.MatrixSymbol('Ebar_t^-1', E_tb.cols, E_tb.rows)
+    L_tb = -E_tb_I * C_tb
+    eb_tb = B_tb.T * S_and_Q * cb_tb + B_tb.T * sb_tb + P_t * cb_tb + B_tb.T * qb_t + rb_t
+    lb_tb = -E_tb_I * eb_tb
+    D_tb = A_tb.T * S_and_Q * A_tb
+    db_tb = A_tb.T * S_and_Q * cb_tb + A_tb.T * (sb_tb + qb_t)
 
-  v_t1b_now = (
-      half * (xb_t1.T * D_tb * xb_t1 +
-              xb_t1.T * C_tb.T * ub +
-              ub.T * C_tb * xb_t1 +
-              ub.T * E_tb * ub) +
-      xb_t1.T * db_tb +
-      ub.T * eb_tb +
-      half * cb_tb.T * S_and_Q * cb_tb +
-      cb_tb.T * sb_tb +
-      cb_tb.T * qb_t +
-      s_tb + q_t)
+    v_t1b_now = (half * (xb_t1.T * D_tb * xb_t1 + xb_t1.T * C_tb.T * ub +
+                         ub.T * C_tb * xb_t1 + ub.T * E_tb * ub) +
+                 xb_t1.T * db_tb + ub.T * eb_tb +
+                 half * cb_tb.T * S_and_Q * cb_tb + cb_tb.T * sb_tb +
+                 cb_tb.T * qb_t + s_tb + q_t)
 
-  v_t1b_final = (
-      half * xb_t1.T * (D_tb - C_tb.T * E_tb_I * C_tb) * xb_t1 +
-      xb_t1.T * (db_tb - C_tb.T * E_tb_I * eb_tb) +
-      -half * eb_tb.T * E_tb_I * eb_tb +
-      half * cb_tb.T * S_and_Q * cb_tb +
-      cb_tb.T * sb_tb +
-      cb_tb.T * qb_t +
-      s_tb + q_t)
-  verify_arguments(v_t1b_final, xb_t1, E_tb_I)
-  verify_equivalent(v_t1b.subs(ub, -E_tb_I * C_tb * xb_t1 - E_tb_I * eb_tb),
-                    v_t1b_final, {E_tb_I: E_tb})
+    v_t1b_final = (half * xb_t1.T * (D_tb - C_tb.T * E_tb_I * C_tb) * xb_t1 +
+                   xb_t1.T * (db_tb - C_tb.T * E_tb_I * eb_tb) +
+                   -half * eb_tb.T * E_tb_I * eb_tb +
+                   half * cb_tb.T * S_and_Q * cb_tb + cb_tb.T * sb_tb +
+                   cb_tb.T * qb_t + s_tb + q_t)
+    verify_arguments(v_t1b_final, xb_t1, E_tb_I)
+    verify_equivalent(v_t1b.subs(ub, -E_tb_I * C_tb * xb_t1 - E_tb_I * eb_tb),
+                      v_t1b_final, {E_tb_I: E_tb})
+
 
 def check_forwards_u():
-  S_and_Q = S_tb + Q_t
+    S_and_Q = S_tb + Q_t
 
-  diff_start = (
-      half * (xb_t1.T * A_tb.T * S_and_Q * B_tb +
-              (B_tb.T * S_and_Q * A_tb * xb_t1).T +
-              2 * ub.T * B_tb.T * S_and_Q * B_tb +
-              (B_tb.T * S_and_Q * cb_tb).T +
-              cb_tb.T * S_and_Q * B_tb) +
-      sb_tb.T * B_tb +
-      half * (P_t * A_tb * xb_t1).T +
-      half * xb_t1.T * A_tb.T * P_t.T +
-      half * ub.T * (P_t * B_tb + B_tb.T * P_t.T) +
-      half * ub.T * (B_tb.T * P_t.T + P_t * B_tb) +
-      half * (P_t * cb_tb).T +
-      half * cb_tb.T * P_t.T +
-      ub.T * R_t +
-      (B_tb.T * qb_t).T + rb_t.T)
-  verify_arguments(diff_start, xb_t1, ub)
+    diff_start = (half *
+                  (xb_t1.T * A_tb.T * S_and_Q * B_tb +
+                   (B_tb.T * S_and_Q * A_tb * xb_t1).T +
+                   2 * ub.T * B_tb.T * S_and_Q * B_tb +
+                   (B_tb.T * S_and_Q * cb_tb).T + cb_tb.T * S_and_Q * B_tb) +
+                  sb_tb.T * B_tb + half * (P_t * A_tb * xb_t1).T +
+                  half * xb_t1.T * A_tb.T * P_t.T + half * ub.T *
+                  (P_t * B_tb + B_tb.T * P_t.T) + half * ub.T *
+                  (B_tb.T * P_t.T + P_t * B_tb) + half * (P_t * cb_tb).T +
+                  half * cb_tb.T * P_t.T + ub.T * R_t + (B_tb.T * qb_t).T +
+                  rb_t.T)
+    verify_arguments(diff_start, xb_t1, ub)
 
-  diff_end = (
-      xb_t1.T * (A_tb.T * S_and_Q * B_tb + A_tb.T * P_t.T) +
-      ub.T * (B_tb.T * S_and_Q * B_tb + B_tb.T * P_t.T + P_t * B_tb + R_t) +
-      cb_tb.T * S_and_Q * B_tb +
-      sb_tb.T * B_tb +
-      cb_tb.T * P_t.T +
-      qb_t.T * B_tb +
-      rb_t.T)
-  verify_equivalent(diff_start, diff_end)
+    diff_end = (xb_t1.T * (A_tb.T * S_and_Q * B_tb + A_tb.T * P_t.T) + ub.T *
+                (B_tb.T * S_and_Q * B_tb + B_tb.T * P_t.T + P_t * B_tb + R_t) +
+                cb_tb.T * S_and_Q * B_tb + sb_tb.T * B_tb + cb_tb.T * P_t.T +
+                qb_t.T * B_tb + rb_t.T)
+    verify_equivalent(diff_start, diff_end)
+
 
 def main():
-  sympy.init_printing(use_unicode=True)
-  check_backwards_cost()
-  check_forwards_cost()
-  check_forwards_u()
+    sympy.init_printing(use_unicode=True)
+    check_backwards_cost()
+    check_forwards_cost()
+    check_forwards_u()
+
 
 if __name__ == '__main__':
-  main()
+    main()
diff --git a/y2014/control_loops/python/polydrivetrain.py b/y2014/control_loops/python/polydrivetrain.py
index cdaee1b..05b6658 100755
--- a/y2014/control_loops/python/polydrivetrain.py
+++ b/y2014/control_loops/python/polydrivetrain.py
@@ -12,20 +12,22 @@
 FLAGS = gflags.FLAGS
 
 try:
-  gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 except gflags.DuplicateFlagError:
-  pass
+    pass
+
 
 def main(argv):
-  if FLAGS.plot:
-    polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
-  elif len(argv) != 7:
-    glog.fatal('Expected .h file name and .cc file name')
-  else:
-    polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7], 'y2014',
-                                       drivetrain.kDrivetrain)
+    if FLAGS.plot:
+        polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
+    elif len(argv) != 7:
+        glog.fatal('Expected .h file name and .cc file name')
+    else:
+        polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7],
+                                           'y2014', drivetrain.kDrivetrain)
+
 
 if __name__ == '__main__':
-  argv = FLAGS(sys.argv)
-  glog.init()
-  sys.exit(main(argv))
+    argv = FLAGS(sys.argv)
+    glog.init()
+    sys.exit(main(argv))
diff --git a/y2014/control_loops/python/polydrivetrain_test.py b/y2014/control_loops/python/polydrivetrain_test.py
index 8e0176e..a5bac4a 100755
--- a/y2014/control_loops/python/polydrivetrain_test.py
+++ b/y2014/control_loops/python/polydrivetrain_test.py
@@ -10,73 +10,72 @@
 
 
 class TestVelocityDrivetrain(unittest.TestCase):
-  def MakeBox(self, x1_min, x1_max, x2_min, x2_max):
-    H = numpy.matrix([[1, 0],
-                      [-1, 0],
-                      [0, 1],
-                      [0, -1]])
-    K = numpy.matrix([[x1_max],
-                      [-x1_min],
-                      [x2_max],
-                      [-x2_min]])
-    return polytope.HPolytope(H, K)
 
-  def test_coerce_inside(self):
-    """Tests coercion when the point is inside the box."""
-    box = self.MakeBox(1, 2, 1, 2)
+    def MakeBox(self, x1_min, x1_max, x2_min, x2_max):
+        H = numpy.matrix([[1, 0], [-1, 0], [0, 1], [0, -1]])
+        K = numpy.matrix([[x1_max], [-x1_min], [x2_max], [-x2_min]])
+        return polytope.HPolytope(H, K)
 
-    # x1 = x2
-    K = numpy.matrix([[1, -1]])
-    w = 0
+    def test_coerce_inside(self):
+        """Tests coercion when the point is inside the box."""
+        box = self.MakeBox(1, 2, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w,
-                                                 numpy.matrix([[1.5], [1.5]])),
-                       numpy.matrix([[1.5], [1.5]]))
+        # x1 = x2
+        K = numpy.matrix([[1, -1]])
+        w = 0
 
-  def test_coerce_outside_intersect(self):
-    """Tests coercion when the line intersects the box."""
-    box = self.MakeBox(1, 2, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[1.5], [1.5]])),
+            numpy.matrix([[1.5], [1.5]]))
 
-    # x1 = x2
-    K = numpy.matrix([[1, -1]])
-    w = 0
+    def test_coerce_outside_intersect(self):
+        """Tests coercion when the line intersects the box."""
+        box = self.MakeBox(1, 2, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[2.0], [2.0]]))
+        # x1 = x2
+        K = numpy.matrix([[1, -1]])
+        w = 0
 
-  def test_coerce_outside_no_intersect(self):
-    """Tests coercion when the line does not intersect the box."""
-    box = self.MakeBox(3, 4, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[2.0], [2.0]]))
 
-    # x1 = x2
-    K = numpy.matrix([[1, -1]])
-    w = 0
+    def test_coerce_outside_no_intersect(self):
+        """Tests coercion when the line does not intersect the box."""
+        box = self.MakeBox(3, 4, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[3.0], [2.0]]))
+        # x1 = x2
+        K = numpy.matrix([[1, -1]])
+        w = 0
 
-  def test_coerce_middle_of_edge(self):
-    """Tests coercion when the line intersects the middle of an edge."""
-    box = self.MakeBox(0, 4, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[3.0], [2.0]]))
 
-    # x1 = x2
-    K = numpy.matrix([[-1, 1]])
-    w = 0
+    def test_coerce_middle_of_edge(self):
+        """Tests coercion when the line intersects the middle of an edge."""
+        box = self.MakeBox(0, 4, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[2.0], [2.0]]))
+        # x1 = x2
+        K = numpy.matrix([[-1, 1]])
+        w = 0
 
-  def test_coerce_perpendicular_line(self):
-    """Tests coercion when the line does not intersect and is in quadrant 2."""
-    box = self.MakeBox(1, 2, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[2.0], [2.0]]))
 
-    # x1 = -x2
-    K = numpy.matrix([[1, 1]])
-    w = 0
+    def test_coerce_perpendicular_line(self):
+        """Tests coercion when the line does not intersect and is in quadrant 2."""
+        box = self.MakeBox(1, 2, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[1.0], [1.0]]))
+        # x1 = -x2
+        K = numpy.matrix([[1, 1]])
+        w = 0
+
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[1.0], [1.0]]))
 
 
 if __name__ == '__main__':
-  unittest.main()
+    unittest.main()
diff --git a/y2014/control_loops/python/shooter.py b/y2014/control_loops/python/shooter.py
index c3e8d86..e3ad903 100755
--- a/y2014/control_loops/python/shooter.py
+++ b/y2014/control_loops/python/shooter.py
@@ -264,8 +264,9 @@
 
     sprung_shooter = SprungShooterDeltaU()
     shooter = ShooterDeltaU()
-    loop_writer = control_loop.ControlLoopWriter(
-        "Shooter", [sprung_shooter, shooter], namespaces=namespaces)
+    loop_writer = control_loop.ControlLoopWriter("Shooter",
+                                                 [sprung_shooter, shooter],
+                                                 namespaces=namespaces)
 
     loop_writer.AddConstant(
         control_loop.Constant("kMaxExtension", "%f",
diff --git a/y2014_bot3/control_loops/python/drivetrain.py b/y2014_bot3/control_loops/python/drivetrain.py
index 2990773..955cf4c 100755
--- a/y2014_bot3/control_loops/python/drivetrain.py
+++ b/y2014_bot3/control_loops/python/drivetrain.py
@@ -11,31 +11,34 @@
 
 gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 
-kDrivetrain = drivetrain.DrivetrainParams(J = 1.8,
-                                          mass = 37,
-                                          robot_radius = 0.45 / 2.0,
-                                          wheel_radius = 0.04445,
-                                          G_high = 28.0 / 48.0 * 19.0 / 50.0,
-                                          G_low = 28.0 / 60.0 * 19.0 / 50.0,
-                                          q_pos_low = 0.12,
-                                          q_pos_high = 0.14,
-                                          q_vel_low = 1.0,
-                                          q_vel_high = 0.95,
-                                          has_imu = False,
-                                          dt = 0.005,
-                                          controller_poles = [0.83, 0.83])
+kDrivetrain = drivetrain.DrivetrainParams(J=1.8,
+                                          mass=37,
+                                          robot_radius=0.45 / 2.0,
+                                          wheel_radius=0.04445,
+                                          G_high=28.0 / 48.0 * 19.0 / 50.0,
+                                          G_low=28.0 / 60.0 * 19.0 / 50.0,
+                                          q_pos_low=0.12,
+                                          q_pos_high=0.14,
+                                          q_vel_low=1.0,
+                                          q_vel_high=0.95,
+                                          has_imu=False,
+                                          dt=0.005,
+                                          controller_poles=[0.83, 0.83])
+
 
 def main(argv):
-  argv = FLAGS(argv)
-  glog.init()
+    argv = FLAGS(argv)
+    glog.init()
 
-  if FLAGS.plot:
-    drivetrain.PlotDrivetrainMotions(kDrivetrain)
-  elif len(argv) != 5:
-    print("Expected .h file name and .cc file name")
-  else:
-    # Write the generated constants out to a file.
-    drivetrain.WriteDrivetrain(argv[1:3], argv[3:5], 'y2014_bot3', kDrivetrain)
+    if FLAGS.plot:
+        drivetrain.PlotDrivetrainMotions(kDrivetrain)
+    elif len(argv) != 5:
+        print("Expected .h file name and .cc file name")
+    else:
+        # Write the generated constants out to a file.
+        drivetrain.WriteDrivetrain(argv[1:3], argv[3:5], 'y2014_bot3',
+                                   kDrivetrain)
+
 
 if __name__ == '__main__':
-  sys.exit(main(sys.argv))
+    sys.exit(main(sys.argv))
diff --git a/y2014_bot3/control_loops/python/polydrivetrain.py b/y2014_bot3/control_loops/python/polydrivetrain.py
index 08e5583..881b2b0 100755
--- a/y2014_bot3/control_loops/python/polydrivetrain.py
+++ b/y2014_bot3/control_loops/python/polydrivetrain.py
@@ -12,20 +12,23 @@
 FLAGS = gflags.FLAGS
 
 try:
-  gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 except gflags.DuplicateFlagError:
-  pass
+    pass
+
 
 def main(argv):
-  if FLAGS.plot:
-    polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
-  elif len(argv) != 7:
-    glog.fatal('Expected .h file name and .cc file name')
-  else:
-    polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7],
-                                       'y2014_bot3', drivetrain.kDrivetrain)
+    if FLAGS.plot:
+        polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
+    elif len(argv) != 7:
+        glog.fatal('Expected .h file name and .cc file name')
+    else:
+        polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7],
+                                           'y2014_bot3',
+                                           drivetrain.kDrivetrain)
+
 
 if __name__ == '__main__':
-  argv = FLAGS(sys.argv)
-  glog.init()
-  sys.exit(main(argv))
+    argv = FLAGS(sys.argv)
+    glog.init()
+    sys.exit(main(argv))
diff --git a/y2014_bot3/control_loops/python/polydrivetrain_test.py b/y2014_bot3/control_loops/python/polydrivetrain_test.py
index 8e0176e..a5bac4a 100755
--- a/y2014_bot3/control_loops/python/polydrivetrain_test.py
+++ b/y2014_bot3/control_loops/python/polydrivetrain_test.py
@@ -10,73 +10,72 @@
 
 
 class TestVelocityDrivetrain(unittest.TestCase):
-  def MakeBox(self, x1_min, x1_max, x2_min, x2_max):
-    H = numpy.matrix([[1, 0],
-                      [-1, 0],
-                      [0, 1],
-                      [0, -1]])
-    K = numpy.matrix([[x1_max],
-                      [-x1_min],
-                      [x2_max],
-                      [-x2_min]])
-    return polytope.HPolytope(H, K)
 
-  def test_coerce_inside(self):
-    """Tests coercion when the point is inside the box."""
-    box = self.MakeBox(1, 2, 1, 2)
+    def MakeBox(self, x1_min, x1_max, x2_min, x2_max):
+        H = numpy.matrix([[1, 0], [-1, 0], [0, 1], [0, -1]])
+        K = numpy.matrix([[x1_max], [-x1_min], [x2_max], [-x2_min]])
+        return polytope.HPolytope(H, K)
 
-    # x1 = x2
-    K = numpy.matrix([[1, -1]])
-    w = 0
+    def test_coerce_inside(self):
+        """Tests coercion when the point is inside the box."""
+        box = self.MakeBox(1, 2, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w,
-                                                 numpy.matrix([[1.5], [1.5]])),
-                       numpy.matrix([[1.5], [1.5]]))
+        # x1 = x2
+        K = numpy.matrix([[1, -1]])
+        w = 0
 
-  def test_coerce_outside_intersect(self):
-    """Tests coercion when the line intersects the box."""
-    box = self.MakeBox(1, 2, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[1.5], [1.5]])),
+            numpy.matrix([[1.5], [1.5]]))
 
-    # x1 = x2
-    K = numpy.matrix([[1, -1]])
-    w = 0
+    def test_coerce_outside_intersect(self):
+        """Tests coercion when the line intersects the box."""
+        box = self.MakeBox(1, 2, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[2.0], [2.0]]))
+        # x1 = x2
+        K = numpy.matrix([[1, -1]])
+        w = 0
 
-  def test_coerce_outside_no_intersect(self):
-    """Tests coercion when the line does not intersect the box."""
-    box = self.MakeBox(3, 4, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[2.0], [2.0]]))
 
-    # x1 = x2
-    K = numpy.matrix([[1, -1]])
-    w = 0
+    def test_coerce_outside_no_intersect(self):
+        """Tests coercion when the line does not intersect the box."""
+        box = self.MakeBox(3, 4, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[3.0], [2.0]]))
+        # x1 = x2
+        K = numpy.matrix([[1, -1]])
+        w = 0
 
-  def test_coerce_middle_of_edge(self):
-    """Tests coercion when the line intersects the middle of an edge."""
-    box = self.MakeBox(0, 4, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[3.0], [2.0]]))
 
-    # x1 = x2
-    K = numpy.matrix([[-1, 1]])
-    w = 0
+    def test_coerce_middle_of_edge(self):
+        """Tests coercion when the line intersects the middle of an edge."""
+        box = self.MakeBox(0, 4, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[2.0], [2.0]]))
+        # x1 = x2
+        K = numpy.matrix([[-1, 1]])
+        w = 0
 
-  def test_coerce_perpendicular_line(self):
-    """Tests coercion when the line does not intersect and is in quadrant 2."""
-    box = self.MakeBox(1, 2, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[2.0], [2.0]]))
 
-    # x1 = -x2
-    K = numpy.matrix([[1, 1]])
-    w = 0
+    def test_coerce_perpendicular_line(self):
+        """Tests coercion when the line does not intersect and is in quadrant 2."""
+        box = self.MakeBox(1, 2, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[1.0], [1.0]]))
+        # x1 = -x2
+        K = numpy.matrix([[1, 1]])
+        w = 0
+
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[1.0], [1.0]]))
 
 
 if __name__ == '__main__':
-  unittest.main()
+    unittest.main()
diff --git a/y2016/control_loops/python/arm.py b/y2016/control_loops/python/arm.py
index 3c47934..0b5d87c 100755
--- a/y2016/control_loops/python/arm.py
+++ b/y2016/control_loops/python/arm.py
@@ -44,8 +44,8 @@
 
         self.A_continuous = numpy.matrix(numpy.zeros((4, 4)))
         self.A_continuous[0:2, 0:2] = self._shoulder.A_continuous
-        self.A_continuous[2:4, 0:2] = (
-            self._shoulder.A_continuous - self._shooter.A_continuous)
+        self.A_continuous[2:4, 0:2] = (self._shoulder.A_continuous -
+                                       self._shooter.A_continuous)
         self.A_continuous[2:4, 2:4] = self._shooter.A_continuous
 
         self.B_continuous = numpy.matrix(numpy.zeros((4, 2)))
@@ -131,8 +131,11 @@
         self.R[0, 0] = r_voltage**2.0
         self.R[1, 1] = r_voltage**2.0
 
-        self.KalmanGain, self.Q_steady = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
         self.L = self.A * self.KalmanGain
 
         self.U_max = numpy.matrix([[12.0], [12.0]])
@@ -182,8 +185,11 @@
         self.R[0, 0] = r_pos**2.0
         self.R[1, 1] = r_pos**2.0
 
-        self.KalmanGain, self.Q_steady = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
         self.L = self.A * self.KalmanGain
 
         self.K_unaugmented = self.K
@@ -365,20 +371,19 @@
         pylab.plot(self.t, self.x_shooter, label='x shooter')
         pylab.plot(self.t, self.x_hat_shooter, label='x_hat shooter')
         pylab.plot(self.t, self.goal_x_shooter, label='goal x shooter')
-        pylab.plot(
-            self.t,
-            map(operator.add, self.x_shooter, self.x_shoulder),
-            label='x shooter ground')
-        pylab.plot(
-            self.t,
-            map(operator.add, self.x_hat_shooter, self.x_hat_shoulder),
-            label='x_hat shooter ground')
+        pylab.plot(self.t,
+                   map(operator.add, self.x_shooter, self.x_shoulder),
+                   label='x shooter ground')
+        pylab.plot(self.t,
+                   map(operator.add, self.x_hat_shooter, self.x_hat_shoulder),
+                   label='x_hat shooter ground')
         pylab.legend()
 
         pylab.subplot(3, 1, 2)
         pylab.plot(self.t, self.u_shoulder, label='u shoulder')
-        pylab.plot(
-            self.t, self.offset_shoulder, label='voltage_offset shoulder')
+        pylab.plot(self.t,
+                   self.offset_shoulder,
+                   label='voltage_offset shoulder')
         pylab.plot(self.t, self.u_shooter, label='u shooter')
         pylab.plot(self.t, self.offset_shooter, label='voltage_offset shooter')
         pylab.legend()
@@ -401,8 +406,8 @@
     J_decelerating = 7
 
     arm = Arm(name='AcceleratingArm', J=J_accelerating)
-    arm_integral_controller = IntegralArm(
-        name='AcceleratingIntegralArm', J=J_accelerating)
+    arm_integral_controller = IntegralArm(name='AcceleratingIntegralArm',
+                                          J=J_accelerating)
     arm_observer = IntegralArm()
 
     # Test moving the shoulder with constant separation.
@@ -418,12 +423,11 @@
     arm.X = initial_X[0:4, 0]
     arm_observer.X = initial_X
 
-    scenario_plotter.run_test(
-        arm=arm,
-        end_goal=R,
-        iterations=300,
-        controller=arm_integral_controller,
-        observer=arm_observer)
+    scenario_plotter.run_test(arm=arm,
+                              end_goal=R,
+                              iterations=300,
+                              controller=arm_integral_controller,
+                              observer=arm_observer)
 
     if len(argv) != 5:
         glog.fatal(
@@ -432,8 +436,9 @@
     else:
         namespaces = ['y2016', 'control_loops', 'superstructure']
         decelerating_arm = Arm(name='DeceleratingArm', J=J_decelerating)
-        loop_writer = control_loop.ControlLoopWriter(
-            'Arm', [arm, decelerating_arm], namespaces=namespaces)
+        loop_writer = control_loop.ControlLoopWriter('Arm',
+                                                     [arm, decelerating_arm],
+                                                     namespaces=namespaces)
         loop_writer.Write(argv[1], argv[2])
 
         decelerating_integral_arm_controller = IntegralArm(
diff --git a/y2016/control_loops/python/drivetrain.py b/y2016/control_loops/python/drivetrain.py
index 8abdd74..a0205e7 100755
--- a/y2016/control_loops/python/drivetrain.py
+++ b/y2016/control_loops/python/drivetrain.py
@@ -11,31 +11,34 @@
 
 gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 
-kDrivetrain = drivetrain.DrivetrainParams(J = 2.0,
-                                          mass = 68,
-                                          robot_radius = 0.601 / 2.0,
-                                          wheel_radius = 0.097155 * 0.9811158901447808 / 118.0 * 115.75,
-                                          G_high = 14.0 / 48.0 * 28.0 / 50.0 * 18.0 / 36.0,
-                                          G_low = 14.0 / 48.0 * 18.0 / 60.0 * 18.0 / 36.0,
-                                          q_pos_low = 0.12,
-                                          q_pos_high = 0.14,
-                                          q_vel_low = 1.0,
-                                          q_vel_high = 0.95,
-                                          has_imu = False,
-                                          dt = 0.005,
-                                          controller_poles = [0.67, 0.67])
+kDrivetrain = drivetrain.DrivetrainParams(
+    J=2.0,
+    mass=68,
+    robot_radius=0.601 / 2.0,
+    wheel_radius=0.097155 * 0.9811158901447808 / 118.0 * 115.75,
+    G_high=14.0 / 48.0 * 28.0 / 50.0 * 18.0 / 36.0,
+    G_low=14.0 / 48.0 * 18.0 / 60.0 * 18.0 / 36.0,
+    q_pos_low=0.12,
+    q_pos_high=0.14,
+    q_vel_low=1.0,
+    q_vel_high=0.95,
+    has_imu=False,
+    dt=0.005,
+    controller_poles=[0.67, 0.67])
+
 
 def main(argv):
-  argv = FLAGS(argv)
-  glog.init()
+    argv = FLAGS(argv)
+    glog.init()
 
-  if FLAGS.plot:
-    drivetrain.PlotDrivetrainMotions(kDrivetrain)
-  elif len(argv) != 5:
-    print("Expected .h file name and .cc file name")
-  else:
-    # Write the generated constants out to a file.
-    drivetrain.WriteDrivetrain(argv[1:3], argv[3:5], 'y2016', kDrivetrain)
+    if FLAGS.plot:
+        drivetrain.PlotDrivetrainMotions(kDrivetrain)
+    elif len(argv) != 5:
+        print("Expected .h file name and .cc file name")
+    else:
+        # Write the generated constants out to a file.
+        drivetrain.WriteDrivetrain(argv[1:3], argv[3:5], 'y2016', kDrivetrain)
+
 
 if __name__ == '__main__':
-  sys.exit(main(sys.argv))
+    sys.exit(main(sys.argv))
diff --git a/y2016/control_loops/python/polydrivetrain.py b/y2016/control_loops/python/polydrivetrain.py
index 1b7a0ba..69a7be9 100755
--- a/y2016/control_loops/python/polydrivetrain.py
+++ b/y2016/control_loops/python/polydrivetrain.py
@@ -12,20 +12,22 @@
 FLAGS = gflags.FLAGS
 
 try:
-  gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 except gflags.DuplicateFlagError:
-  pass
+    pass
+
 
 def main(argv):
-  if FLAGS.plot:
-    polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
-  elif len(argv) != 7:
-    glog.fatal('Expected .h file name and .cc file name')
-  else:
-    polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7], 'y2016',
-                                       drivetrain.kDrivetrain)
+    if FLAGS.plot:
+        polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
+    elif len(argv) != 7:
+        glog.fatal('Expected .h file name and .cc file name')
+    else:
+        polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7],
+                                           'y2016', drivetrain.kDrivetrain)
+
 
 if __name__ == '__main__':
-  argv = FLAGS(sys.argv)
-  glog.init()
-  sys.exit(main(argv))
+    argv = FLAGS(sys.argv)
+    glog.init()
+    sys.exit(main(argv))
diff --git a/y2016/control_loops/python/polydrivetrain_test.py b/y2016/control_loops/python/polydrivetrain_test.py
index 8e0176e..a5bac4a 100755
--- a/y2016/control_loops/python/polydrivetrain_test.py
+++ b/y2016/control_loops/python/polydrivetrain_test.py
@@ -10,73 +10,72 @@
 
 
 class TestVelocityDrivetrain(unittest.TestCase):
-  def MakeBox(self, x1_min, x1_max, x2_min, x2_max):
-    H = numpy.matrix([[1, 0],
-                      [-1, 0],
-                      [0, 1],
-                      [0, -1]])
-    K = numpy.matrix([[x1_max],
-                      [-x1_min],
-                      [x2_max],
-                      [-x2_min]])
-    return polytope.HPolytope(H, K)
 
-  def test_coerce_inside(self):
-    """Tests coercion when the point is inside the box."""
-    box = self.MakeBox(1, 2, 1, 2)
+    def MakeBox(self, x1_min, x1_max, x2_min, x2_max):
+        H = numpy.matrix([[1, 0], [-1, 0], [0, 1], [0, -1]])
+        K = numpy.matrix([[x1_max], [-x1_min], [x2_max], [-x2_min]])
+        return polytope.HPolytope(H, K)
 
-    # x1 = x2
-    K = numpy.matrix([[1, -1]])
-    w = 0
+    def test_coerce_inside(self):
+        """Tests coercion when the point is inside the box."""
+        box = self.MakeBox(1, 2, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w,
-                                                 numpy.matrix([[1.5], [1.5]])),
-                       numpy.matrix([[1.5], [1.5]]))
+        # x1 = x2
+        K = numpy.matrix([[1, -1]])
+        w = 0
 
-  def test_coerce_outside_intersect(self):
-    """Tests coercion when the line intersects the box."""
-    box = self.MakeBox(1, 2, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[1.5], [1.5]])),
+            numpy.matrix([[1.5], [1.5]]))
 
-    # x1 = x2
-    K = numpy.matrix([[1, -1]])
-    w = 0
+    def test_coerce_outside_intersect(self):
+        """Tests coercion when the line intersects the box."""
+        box = self.MakeBox(1, 2, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[2.0], [2.0]]))
+        # x1 = x2
+        K = numpy.matrix([[1, -1]])
+        w = 0
 
-  def test_coerce_outside_no_intersect(self):
-    """Tests coercion when the line does not intersect the box."""
-    box = self.MakeBox(3, 4, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[2.0], [2.0]]))
 
-    # x1 = x2
-    K = numpy.matrix([[1, -1]])
-    w = 0
+    def test_coerce_outside_no_intersect(self):
+        """Tests coercion when the line does not intersect the box."""
+        box = self.MakeBox(3, 4, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[3.0], [2.0]]))
+        # x1 = x2
+        K = numpy.matrix([[1, -1]])
+        w = 0
 
-  def test_coerce_middle_of_edge(self):
-    """Tests coercion when the line intersects the middle of an edge."""
-    box = self.MakeBox(0, 4, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[3.0], [2.0]]))
 
-    # x1 = x2
-    K = numpy.matrix([[-1, 1]])
-    w = 0
+    def test_coerce_middle_of_edge(self):
+        """Tests coercion when the line intersects the middle of an edge."""
+        box = self.MakeBox(0, 4, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[2.0], [2.0]]))
+        # x1 = x2
+        K = numpy.matrix([[-1, 1]])
+        w = 0
 
-  def test_coerce_perpendicular_line(self):
-    """Tests coercion when the line does not intersect and is in quadrant 2."""
-    box = self.MakeBox(1, 2, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[2.0], [2.0]]))
 
-    # x1 = -x2
-    K = numpy.matrix([[1, 1]])
-    w = 0
+    def test_coerce_perpendicular_line(self):
+        """Tests coercion when the line does not intersect and is in quadrant 2."""
+        box = self.MakeBox(1, 2, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[1.0], [1.0]]))
+        # x1 = -x2
+        K = numpy.matrix([[1, 1]])
+        w = 0
+
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[1.0], [1.0]]))
 
 
 if __name__ == '__main__':
-  unittest.main()
+    unittest.main()
diff --git a/y2016/control_loops/python/shooter.py b/y2016/control_loops/python/shooter.py
index 70af1b0..cde9c8d 100755
--- a/y2016/control_loops/python/shooter.py
+++ b/y2016/control_loops/python/shooter.py
@@ -135,8 +135,11 @@
         r_pos = 0.05
         self.R = numpy.matrix([[(r_pos**2.0)]])
 
-        self.KalmanGain, self.Q_steady = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
         self.L = self.A * self.KalmanGain
 
         self.K_unaugmented = self.K
@@ -256,12 +259,11 @@
 
     initial_X = numpy.matrix([[0.0], [0.0]])
     R = numpy.matrix([[0.0], [100.0], [0.0]])
-    scenario_plotter.run_test(
-        shooter,
-        goal=R,
-        controller_shooter=shooter_controller,
-        observer_shooter=observer_shooter,
-        iterations=200)
+    scenario_plotter.run_test(shooter,
+                              goal=R,
+                              controller_shooter=shooter_controller,
+                              observer_shooter=observer_shooter,
+                              iterations=200)
 
     if FLAGS.plot:
         scenario_plotter.Plot()
@@ -271,8 +273,8 @@
     else:
         namespaces = ['y2016', 'control_loops', 'shooter']
         shooter = Shooter('Shooter')
-        loop_writer = control_loop.ControlLoopWriter(
-            'Shooter', [shooter], namespaces=namespaces)
+        loop_writer = control_loop.ControlLoopWriter('Shooter', [shooter],
+                                                     namespaces=namespaces)
         loop_writer.Write(argv[1], argv[2])
 
         integral_shooter = IntegralShooter('IntegralShooter')
diff --git a/y2016/control_loops/python/shoulder.py b/y2016/control_loops/python/shoulder.py
index 7f46b2c..d406089 100755
--- a/y2016/control_loops/python/shoulder.py
+++ b/y2016/control_loops/python/shoulder.py
@@ -12,155 +12,168 @@
 FLAGS = gflags.FLAGS
 
 try:
-  gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 except gflags.DuplicateFlagError:
-  pass
+    pass
+
 
 class Shoulder(control_loop.ControlLoop):
-  def __init__(self, name="Shoulder", J=None):
-    super(Shoulder, self).__init__(name)
-    # TODO(constants): Update all of these & retune poles.
-    # Stall Torque in N m
-    self.stall_torque = 0.71
-    # Stall Current in Amps
-    self.stall_current = 134
-    # Free Speed in RPM
-    self.free_speed = 18730
-    # Free Current in Amps
-    self.free_current = 0.7
 
-    # Resistance of the motor
-    self.R = 12.0 / self.stall_current
-    # Motor velocity constant
-    self.Kv = ((self.free_speed / 60.0 * 2.0 * numpy.pi) /
-               (12.0 - self.R * self.free_current))
-    # Torque constant
-    self.Kt = self.stall_torque / self.stall_current
-    # Gear ratio
-    self.G = (56.0 / 12.0) * (64.0 / 14.0) * (72.0 / 18.0) * (42.0 / 12.0)
+    def __init__(self, name="Shoulder", J=None):
+        super(Shoulder, self).__init__(name)
+        # TODO(constants): Update all of these & retune poles.
+        # Stall Torque in N m
+        self.stall_torque = 0.71
+        # Stall Current in Amps
+        self.stall_current = 134
+        # Free Speed in RPM
+        self.free_speed = 18730
+        # Free Current in Amps
+        self.free_current = 0.7
 
-    if J is None:
-      self.J = 10.0
-    else:
-      self.J = J
+        # Resistance of the motor
+        self.R = 12.0 / self.stall_current
+        # Motor velocity constant
+        self.Kv = ((self.free_speed / 60.0 * 2.0 * numpy.pi) /
+                   (12.0 - self.R * self.free_current))
+        # Torque constant
+        self.Kt = self.stall_torque / self.stall_current
+        # Gear ratio
+        self.G = (56.0 / 12.0) * (64.0 / 14.0) * (72.0 / 18.0) * (42.0 / 12.0)
 
-    # Control loop time step
-    self.dt = 0.005
+        if J is None:
+            self.J = 10.0
+        else:
+            self.J = J
 
-    # State is [position, velocity]
-    # Input is [Voltage]
+        # Control loop time step
+        self.dt = 0.005
 
-    C1 = self.G * self.G * self.Kt / (self.R  * self.J * self.Kv)
-    C2 = self.Kt * self.G / (self.J * self.R)
+        # State is [position, velocity]
+        # Input is [Voltage]
 
-    self.A_continuous = numpy.matrix(
-        [[0, 1],
-         [0, -C1]])
+        C1 = self.G * self.G * self.Kt / (self.R * self.J * self.Kv)
+        C2 = self.Kt * self.G / (self.J * self.R)
 
-    # Start with the unmodified input
-    self.B_continuous = numpy.matrix(
-        [[0],
-         [C2]])
+        self.A_continuous = numpy.matrix([[0, 1], [0, -C1]])
 
-    self.C = numpy.matrix([[1, 0]])
-    self.D = numpy.matrix([[0]])
+        # Start with the unmodified input
+        self.B_continuous = numpy.matrix([[0], [C2]])
 
-    self.A, self.B = self.ContinuousToDiscrete(
-        self.A_continuous, self.B_continuous, self.dt)
+        self.C = numpy.matrix([[1, 0]])
+        self.D = numpy.matrix([[0]])
 
-    controllability = controls.ctrb(self.A, self.B)
+        self.A, self.B = self.ContinuousToDiscrete(self.A_continuous,
+                                                   self.B_continuous, self.dt)
 
-    q_pos = 0.16
-    q_vel = 0.95
-    self.Q = numpy.matrix([[(1.0 / (q_pos ** 2.0)), 0.0],
-                           [0.0, (1.0 / (q_vel ** 2.0))]])
+        controllability = controls.ctrb(self.A, self.B)
 
-    self.R = numpy.matrix([[(1.0 / (12.0 ** 2.0))]])
-    self.K = controls.dlqr(self.A, self.B, self.Q, self.R)
+        q_pos = 0.16
+        q_vel = 0.95
+        self.Q = numpy.matrix([[(1.0 / (q_pos**2.0)), 0.0],
+                               [0.0, (1.0 / (q_vel**2.0))]])
 
-    self.Kff = controls.TwoStateFeedForwards(self.B, self.Q)
+        self.R = numpy.matrix([[(1.0 / (12.0**2.0))]])
+        self.K = controls.dlqr(self.A, self.B, self.Q, self.R)
 
-    glog.debug('Poles are %s for %s',
-               repr(numpy.linalg.eig(self.A - self.B * self.K)[0]), self._name)
+        self.Kff = controls.TwoStateFeedForwards(self.B, self.Q)
 
-    q_pos = 0.05
-    q_vel = 2.65
-    self.Q = numpy.matrix([[(q_pos ** 2.0), 0.0],
-                           [0.0, (q_vel ** 2.0)]])
+        glog.debug('Poles are %s for %s',
+                   repr(numpy.linalg.eig(self.A - self.B * self.K)[0]),
+                   self._name)
 
-    r_volts = 0.025
-    self.R = numpy.matrix([[(r_volts ** 2.0)]])
+        q_pos = 0.05
+        q_vel = 2.65
+        self.Q = numpy.matrix([[(q_pos**2.0), 0.0], [0.0, (q_vel**2.0)]])
 
-    self.KalmanGain, self.Q_steady = controls.kalman(
-        A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        r_volts = 0.025
+        self.R = numpy.matrix([[(r_volts**2.0)]])
 
-    self.L = self.A * self.KalmanGain
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
 
-    # The box formed by U_min and U_max must encompass all possible values,
-    # or else Austin's code gets angry.
-    self.U_max = numpy.matrix([[12.0]])
-    self.U_min = numpy.matrix([[-12.0]])
+        self.L = self.A * self.KalmanGain
 
-    self.InitializeState()
+        # The box formed by U_min and U_max must encompass all possible values,
+        # or else Austin's code gets angry.
+        self.U_max = numpy.matrix([[12.0]])
+        self.U_min = numpy.matrix([[-12.0]])
+
+        self.InitializeState()
+
 
 class IntegralShoulder(Shoulder):
-  def __init__(self, name="IntegralShoulder"):
-    super(IntegralShoulder, self).__init__(name=name)
 
-    self.A_continuous_unaugmented = self.A_continuous
-    self.B_continuous_unaugmented = self.B_continuous
+    def __init__(self, name="IntegralShoulder"):
+        super(IntegralShoulder, self).__init__(name=name)
 
-    self.A_continuous = numpy.matrix(numpy.zeros((3, 3)))
-    self.A_continuous[0:2, 0:2] = self.A_continuous_unaugmented
-    self.A_continuous[0:2, 2] = self.B_continuous_unaugmented
+        self.A_continuous_unaugmented = self.A_continuous
+        self.B_continuous_unaugmented = self.B_continuous
 
-    self.B_continuous = numpy.matrix(numpy.zeros((3, 1)))
-    self.B_continuous[0:2, 0] = self.B_continuous_unaugmented
+        self.A_continuous = numpy.matrix(numpy.zeros((3, 3)))
+        self.A_continuous[0:2, 0:2] = self.A_continuous_unaugmented
+        self.A_continuous[0:2, 2] = self.B_continuous_unaugmented
 
-    self.C_unaugmented = self.C
-    self.C = numpy.matrix(numpy.zeros((1, 3)))
-    self.C[0:1, 0:2] = self.C_unaugmented
+        self.B_continuous = numpy.matrix(numpy.zeros((3, 1)))
+        self.B_continuous[0:2, 0] = self.B_continuous_unaugmented
 
-    self.A, self.B = self.ContinuousToDiscrete(self.A_continuous, self.B_continuous, self.dt)
+        self.C_unaugmented = self.C
+        self.C = numpy.matrix(numpy.zeros((1, 3)))
+        self.C[0:1, 0:2] = self.C_unaugmented
 
-    q_pos = 0.08
-    q_vel = 4.00
-    q_voltage = 6.0
-    self.Q = numpy.matrix([[(q_pos ** 2.0), 0.0, 0.0],
-                           [0.0, (q_vel ** 2.0), 0.0],
-                           [0.0, 0.0, (q_voltage ** 2.0)]])
+        self.A, self.B = self.ContinuousToDiscrete(self.A_continuous,
+                                                   self.B_continuous, self.dt)
 
-    r_pos = 0.05
-    self.R = numpy.matrix([[(r_pos ** 2.0)]])
+        q_pos = 0.08
+        q_vel = 4.00
+        q_voltage = 6.0
+        self.Q = numpy.matrix([[(q_pos**2.0), 0.0, 0.0],
+                               [0.0, (q_vel**2.0), 0.0],
+                               [0.0, 0.0, (q_voltage**2.0)]])
 
-    self.KalmanGain, self.Q_steady = controls.kalman(
-        A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
-    self.L = self.A * self.KalmanGain
+        r_pos = 0.05
+        self.R = numpy.matrix([[(r_pos**2.0)]])
 
-    self.K_unaugmented = self.K
-    self.K = numpy.matrix(numpy.zeros((1, 3)))
-    self.K[0, 0:2] = self.K_unaugmented
-    self.K[0, 2] = 1
-    self.Kff_unaugmented = self.Kff
-    self.Kff = numpy.matrix(numpy.zeros((1, 3)))
-    self.Kff[0, 0:2] = self.Kff_unaugmented
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
+        self.L = self.A * self.KalmanGain
 
-    self.InitializeState()
+        self.K_unaugmented = self.K
+        self.K = numpy.matrix(numpy.zeros((1, 3)))
+        self.K[0, 0:2] = self.K_unaugmented
+        self.K[0, 2] = 1
+        self.Kff_unaugmented = self.Kff
+        self.Kff = numpy.matrix(numpy.zeros((1, 3)))
+        self.Kff[0, 0:2] = self.Kff_unaugmented
+
+        self.InitializeState()
+
 
 class ScenarioPlotter(object):
-  def __init__(self):
-    # Various lists for graphing things.
-    self.t = []
-    self.x = []
-    self.v = []
-    self.a = []
-    self.x_hat = []
-    self.u = []
-    self.offset = []
 
-  def run_test(self, shoulder, goal, iterations=200, controller_shoulder=None,
-             observer_shoulder=None):
-    """Runs the shoulder plant with an initial condition and goal.
+    def __init__(self):
+        # Various lists for graphing things.
+        self.t = []
+        self.x = []
+        self.v = []
+        self.a = []
+        self.x_hat = []
+        self.u = []
+        self.offset = []
+
+    def run_test(self,
+                 shoulder,
+                 goal,
+                 iterations=200,
+                 controller_shoulder=None,
+                 observer_shoulder=None):
+        """Runs the shoulder plant with an initial condition and goal.
 
       Test for whether the goal has been reached and whether the separation
       goes  outside of the initial and goal values by more than
@@ -178,100 +191,106 @@
             use the actual state.
     """
 
-    if controller_shoulder is None:
-      controller_shoulder = shoulder
+        if controller_shoulder is None:
+            controller_shoulder = shoulder
 
-    vbat = 12.0
+        vbat = 12.0
 
-    if self.t:
-      initial_t = self.t[-1] + shoulder.dt
-    else:
-      initial_t = 0
+        if self.t:
+            initial_t = self.t[-1] + shoulder.dt
+        else:
+            initial_t = 0
 
-    for i in range(iterations):
-      X_hat = shoulder.X
+        for i in range(iterations):
+            X_hat = shoulder.X
 
-      if observer_shoulder is not None:
-        X_hat = observer_shoulder.X_hat
-        self.x_hat.append(observer_shoulder.X_hat[0, 0])
+            if observer_shoulder is not None:
+                X_hat = observer_shoulder.X_hat
+                self.x_hat.append(observer_shoulder.X_hat[0, 0])
 
-      U = controller_shoulder.K * (goal - X_hat)
-      U[0, 0] = numpy.clip(U[0, 0], -vbat, vbat)
-      self.x.append(shoulder.X[0, 0])
+            U = controller_shoulder.K * (goal - X_hat)
+            U[0, 0] = numpy.clip(U[0, 0], -vbat, vbat)
+            self.x.append(shoulder.X[0, 0])
 
-      if self.v:
-        last_v = self.v[-1]
-      else:
-        last_v = 0
+            if self.v:
+                last_v = self.v[-1]
+            else:
+                last_v = 0
 
-      self.v.append(shoulder.X[1, 0])
-      self.a.append((self.v[-1] - last_v) / shoulder.dt)
+            self.v.append(shoulder.X[1, 0])
+            self.a.append((self.v[-1] - last_v) / shoulder.dt)
 
-      if observer_shoulder is not None:
-        observer_shoulder.Y = shoulder.Y
-        observer_shoulder.CorrectObserver(U)
-        self.offset.append(observer_shoulder.X_hat[2, 0])
+            if observer_shoulder is not None:
+                observer_shoulder.Y = shoulder.Y
+                observer_shoulder.CorrectObserver(U)
+                self.offset.append(observer_shoulder.X_hat[2, 0])
 
-      shoulder.Update(U + 2.0)
+            shoulder.Update(U + 2.0)
 
-      if observer_shoulder is not None:
-        observer_shoulder.PredictObserver(U)
+            if observer_shoulder is not None:
+                observer_shoulder.PredictObserver(U)
 
-      self.t.append(initial_t + i * shoulder.dt)
-      self.u.append(U[0, 0])
+            self.t.append(initial_t + i * shoulder.dt)
+            self.u.append(U[0, 0])
 
-      glog.debug('Time: %f', self.t[-1])
+            glog.debug('Time: %f', self.t[-1])
 
-  def Plot(self):
-    pylab.subplot(3, 1, 1)
-    pylab.plot(self.t, self.x, label='x')
-    pylab.plot(self.t, self.x_hat, label='x_hat')
-    pylab.legend()
+    def Plot(self):
+        pylab.subplot(3, 1, 1)
+        pylab.plot(self.t, self.x, label='x')
+        pylab.plot(self.t, self.x_hat, label='x_hat')
+        pylab.legend()
 
-    pylab.subplot(3, 1, 2)
-    pylab.plot(self.t, self.u, label='u')
-    pylab.plot(self.t, self.offset, label='voltage_offset')
-    pylab.legend()
+        pylab.subplot(3, 1, 2)
+        pylab.plot(self.t, self.u, label='u')
+        pylab.plot(self.t, self.offset, label='voltage_offset')
+        pylab.legend()
 
-    pylab.subplot(3, 1, 3)
-    pylab.plot(self.t, self.a, label='a')
-    pylab.legend()
+        pylab.subplot(3, 1, 3)
+        pylab.plot(self.t, self.a, label='a')
+        pylab.legend()
 
-    pylab.show()
+        pylab.show()
 
 
 def main(argv):
-  argv = FLAGS(argv)
+    argv = FLAGS(argv)
 
-  scenario_plotter = ScenarioPlotter()
+    scenario_plotter = ScenarioPlotter()
 
-  shoulder = Shoulder()
-  shoulder_controller = IntegralShoulder()
-  observer_shoulder = IntegralShoulder()
+    shoulder = Shoulder()
+    shoulder_controller = IntegralShoulder()
+    observer_shoulder = IntegralShoulder()
 
-  # Test moving the shoulder with constant separation.
-  initial_X = numpy.matrix([[0.0], [0.0]])
-  R = numpy.matrix([[numpy.pi / 2.0], [0.0], [0.0]])
-  scenario_plotter.run_test(shoulder, goal=R, controller_shoulder=shoulder_controller,
-                            observer_shoulder=observer_shoulder, iterations=200)
+    # Test moving the shoulder with constant separation.
+    initial_X = numpy.matrix([[0.0], [0.0]])
+    R = numpy.matrix([[numpy.pi / 2.0], [0.0], [0.0]])
+    scenario_plotter.run_test(shoulder,
+                              goal=R,
+                              controller_shoulder=shoulder_controller,
+                              observer_shoulder=observer_shoulder,
+                              iterations=200)
 
-  if FLAGS.plot:
-    scenario_plotter.Plot()
+    if FLAGS.plot:
+        scenario_plotter.Plot()
 
-  # Write the generated constants out to a file.
-  if len(argv) != 5:
-    glog.fatal('Expected .h file name and .cc file name for the shoulder and integral shoulder.')
-  else:
-    namespaces = ['y2016', 'control_loops', 'superstructure']
-    shoulder = Shoulder("Shoulder")
-    loop_writer = control_loop.ControlLoopWriter('Shoulder', [shoulder],
-                                                 namespaces=namespaces)
-    loop_writer.Write(argv[1], argv[2])
+    # Write the generated constants out to a file.
+    if len(argv) != 5:
+        glog.fatal(
+            'Expected .h file name and .cc file name for the shoulder and integral shoulder.'
+        )
+    else:
+        namespaces = ['y2016', 'control_loops', 'superstructure']
+        shoulder = Shoulder("Shoulder")
+        loop_writer = control_loop.ControlLoopWriter('Shoulder', [shoulder],
+                                                     namespaces=namespaces)
+        loop_writer.Write(argv[1], argv[2])
 
-    integral_shoulder = IntegralShoulder("IntegralShoulder")
-    integral_loop_writer = control_loop.ControlLoopWriter("IntegralShoulder", [integral_shoulder],
-                                                          namespaces=namespaces)
-    integral_loop_writer.Write(argv[3], argv[4])
+        integral_shoulder = IntegralShoulder("IntegralShoulder")
+        integral_loop_writer = control_loop.ControlLoopWriter(
+            "IntegralShoulder", [integral_shoulder], namespaces=namespaces)
+        integral_loop_writer.Write(argv[3], argv[4])
+
 
 if __name__ == '__main__':
-  sys.exit(main(sys.argv))
+    sys.exit(main(sys.argv))
diff --git a/y2016/control_loops/python/wrist.py b/y2016/control_loops/python/wrist.py
index ca6874b..12dcc39 100755
--- a/y2016/control_loops/python/wrist.py
+++ b/y2016/control_loops/python/wrist.py
@@ -11,152 +11,165 @@
 FLAGS = gflags.FLAGS
 
 try:
-  gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 except gflags.DuplicateFlagError:
-  pass
+    pass
+
 
 class Wrist(control_loop.ControlLoop):
-  def __init__(self, name="Wrist"):
-    super(Wrist, self).__init__(name)
-    # TODO(constants): Update all of these & retune poles.
-    # Stall Torque in N m
-    self.stall_torque = 0.71
-    # Stall Current in Amps
-    self.stall_current = 134
-    # Free Speed in RPM
-    self.free_speed = 18730
-    # Free Current in Amps
-    self.free_current = 0.7
 
-    # Resistance of the motor
-    self.R = 12.0 / self.stall_current
-    # Motor velocity constant
-    self.Kv = ((self.free_speed / 60.0 * 2.0 * numpy.pi) /
-               (12.0 - self.R * self.free_current))
-    # Torque constant
-    self.Kt = self.stall_torque / self.stall_current
-    # Gear ratio
-    self.G = (56.0 / 12.0) * (54.0 / 14.0) * (64.0 / 18.0) * (48.0 / 16.0)
+    def __init__(self, name="Wrist"):
+        super(Wrist, self).__init__(name)
+        # TODO(constants): Update all of these & retune poles.
+        # Stall Torque in N m
+        self.stall_torque = 0.71
+        # Stall Current in Amps
+        self.stall_current = 134
+        # Free Speed in RPM
+        self.free_speed = 18730
+        # Free Current in Amps
+        self.free_current = 0.7
 
-    self.J = 0.35
+        # Resistance of the motor
+        self.R = 12.0 / self.stall_current
+        # Motor velocity constant
+        self.Kv = ((self.free_speed / 60.0 * 2.0 * numpy.pi) /
+                   (12.0 - self.R * self.free_current))
+        # Torque constant
+        self.Kt = self.stall_torque / self.stall_current
+        # Gear ratio
+        self.G = (56.0 / 12.0) * (54.0 / 14.0) * (64.0 / 18.0) * (48.0 / 16.0)
 
-    # Control loop time step
-    self.dt = 0.005
+        self.J = 0.35
 
-    # State is [position, velocity]
-    # Input is [Voltage]
+        # Control loop time step
+        self.dt = 0.005
 
-    C1 = self.G * self.G * self.Kt / (self.R  * self.J * self.Kv)
-    C2 = self.Kt * self.G / (self.J * self.R)
+        # State is [position, velocity]
+        # Input is [Voltage]
 
-    self.A_continuous = numpy.matrix(
-        [[0, 1],
-         [0, -C1]])
+        C1 = self.G * self.G * self.Kt / (self.R * self.J * self.Kv)
+        C2 = self.Kt * self.G / (self.J * self.R)
 
-    # Start with the unmodified input
-    self.B_continuous = numpy.matrix(
-        [[0],
-         [C2]])
+        self.A_continuous = numpy.matrix([[0, 1], [0, -C1]])
 
-    self.C = numpy.matrix([[1, 0]])
-    self.D = numpy.matrix([[0]])
+        # Start with the unmodified input
+        self.B_continuous = numpy.matrix([[0], [C2]])
 
-    self.A, self.B = self.ContinuousToDiscrete(
-        self.A_continuous, self.B_continuous, self.dt)
+        self.C = numpy.matrix([[1, 0]])
+        self.D = numpy.matrix([[0]])
 
-    controllability = controls.ctrb(self.A, self.B)
+        self.A, self.B = self.ContinuousToDiscrete(self.A_continuous,
+                                                   self.B_continuous, self.dt)
 
-    q_pos = 0.20
-    q_vel = 8.0
-    self.Q = numpy.matrix([[(1.0 / (q_pos ** 2.0)), 0.0],
-                           [0.0, (1.0 / (q_vel ** 2.0))]])
+        controllability = controls.ctrb(self.A, self.B)
 
-    self.R = numpy.matrix([[(1.0 / (12.0 ** 2.0))]])
-    self.K = controls.dlqr(self.A, self.B, self.Q, self.R)
+        q_pos = 0.20
+        q_vel = 8.0
+        self.Q = numpy.matrix([[(1.0 / (q_pos**2.0)), 0.0],
+                               [0.0, (1.0 / (q_vel**2.0))]])
 
-    glog.debug('Poles are %s for %s',
-               repr(numpy.linalg.eig(self.A - self.B * self.K)[0]), self._name)
+        self.R = numpy.matrix([[(1.0 / (12.0**2.0))]])
+        self.K = controls.dlqr(self.A, self.B, self.Q, self.R)
 
-    q_pos = 0.05
-    q_vel = 2.65
-    self.Q = numpy.matrix([[(q_pos ** 2.0), 0.0],
-                           [0.0, (q_vel ** 2.0)]])
+        glog.debug('Poles are %s for %s',
+                   repr(numpy.linalg.eig(self.A - self.B * self.K)[0]),
+                   self._name)
 
-    r_volts = 0.025
-    self.R = numpy.matrix([[(r_volts ** 2.0)]])
+        q_pos = 0.05
+        q_vel = 2.65
+        self.Q = numpy.matrix([[(q_pos**2.0), 0.0], [0.0, (q_vel**2.0)]])
 
-    self.KalmanGain, self.Q_steady = controls.kalman(
-        A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        r_volts = 0.025
+        self.R = numpy.matrix([[(r_volts**2.0)]])
 
-    self.L = self.A * self.KalmanGain
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
 
-    # The box formed by U_min and U_max must encompass all possible values,
-    # or else Austin's code gets angry.
-    self.U_max = numpy.matrix([[12.0]])
-    self.U_min = numpy.matrix([[-12.0]])
+        self.L = self.A * self.KalmanGain
 
-    self.Kff = controls.TwoStateFeedForwards(self.B, self.Q)
+        # The box formed by U_min and U_max must encompass all possible values,
+        # or else Austin's code gets angry.
+        self.U_max = numpy.matrix([[12.0]])
+        self.U_min = numpy.matrix([[-12.0]])
 
-    self.InitializeState()
+        self.Kff = controls.TwoStateFeedForwards(self.B, self.Q)
+
+        self.InitializeState()
+
 
 class IntegralWrist(Wrist):
-  def __init__(self, name="IntegralWrist"):
-    super(IntegralWrist, self).__init__(name=name)
 
-    self.A_continuous_unaugmented = self.A_continuous
-    self.B_continuous_unaugmented = self.B_continuous
+    def __init__(self, name="IntegralWrist"):
+        super(IntegralWrist, self).__init__(name=name)
 
-    self.A_continuous = numpy.matrix(numpy.zeros((3, 3)))
-    self.A_continuous[0:2, 0:2] = self.A_continuous_unaugmented
-    self.A_continuous[0:2, 2] = self.B_continuous_unaugmented
+        self.A_continuous_unaugmented = self.A_continuous
+        self.B_continuous_unaugmented = self.B_continuous
 
-    self.B_continuous = numpy.matrix(numpy.zeros((3, 1)))
-    self.B_continuous[0:2, 0] = self.B_continuous_unaugmented
+        self.A_continuous = numpy.matrix(numpy.zeros((3, 3)))
+        self.A_continuous[0:2, 0:2] = self.A_continuous_unaugmented
+        self.A_continuous[0:2, 2] = self.B_continuous_unaugmented
 
-    self.C_unaugmented = self.C
-    self.C = numpy.matrix(numpy.zeros((1, 3)))
-    self.C[0:1, 0:2] = self.C_unaugmented
+        self.B_continuous = numpy.matrix(numpy.zeros((3, 1)))
+        self.B_continuous[0:2, 0] = self.B_continuous_unaugmented
 
-    self.A, self.B = self.ContinuousToDiscrete(self.A_continuous, self.B_continuous, self.dt)
+        self.C_unaugmented = self.C
+        self.C = numpy.matrix(numpy.zeros((1, 3)))
+        self.C[0:1, 0:2] = self.C_unaugmented
 
-    q_pos = 0.08
-    q_vel = 4.00
-    q_voltage = 1.5
-    self.Q = numpy.matrix([[(q_pos ** 2.0), 0.0, 0.0],
-                           [0.0, (q_vel ** 2.0), 0.0],
-                           [0.0, 0.0, (q_voltage ** 2.0)]])
+        self.A, self.B = self.ContinuousToDiscrete(self.A_continuous,
+                                                   self.B_continuous, self.dt)
 
-    r_pos = 0.05
-    self.R = numpy.matrix([[(r_pos ** 2.0)]])
+        q_pos = 0.08
+        q_vel = 4.00
+        q_voltage = 1.5
+        self.Q = numpy.matrix([[(q_pos**2.0), 0.0, 0.0],
+                               [0.0, (q_vel**2.0), 0.0],
+                               [0.0, 0.0, (q_voltage**2.0)]])
 
-    self.KalmanGain, self.Q_steady = controls.kalman(
-        A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
-    self.L = self.A * self.KalmanGain
+        r_pos = 0.05
+        self.R = numpy.matrix([[(r_pos**2.0)]])
 
-    self.K_unaugmented = self.K
-    self.K = numpy.matrix(numpy.zeros((1, 3)))
-    self.K[0, 0:2] = self.K_unaugmented
-    self.K[0, 2] = 1
-    self.Kff_unaugmented = self.Kff
-    self.Kff = numpy.matrix(numpy.zeros((1, 3)))
-    self.Kff[0, 0:2] = self.Kff_unaugmented
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
+        self.L = self.A * self.KalmanGain
 
-    self.InitializeState()
+        self.K_unaugmented = self.K
+        self.K = numpy.matrix(numpy.zeros((1, 3)))
+        self.K[0, 0:2] = self.K_unaugmented
+        self.K[0, 2] = 1
+        self.Kff_unaugmented = self.Kff
+        self.Kff = numpy.matrix(numpy.zeros((1, 3)))
+        self.Kff[0, 0:2] = self.Kff_unaugmented
+
+        self.InitializeState()
+
 
 class ScenarioPlotter(object):
-  def __init__(self):
-    # Various lists for graphing things.
-    self.t = []
-    self.x = []
-    self.v = []
-    self.a = []
-    self.x_hat = []
-    self.u = []
-    self.offset = []
 
-  def run_test(self, wrist, goal, iterations=200, controller_wrist=None,
-             observer_wrist=None):
-    """Runs the wrist plant with an initial condition and goal.
+    def __init__(self):
+        # Various lists for graphing things.
+        self.t = []
+        self.x = []
+        self.v = []
+        self.a = []
+        self.x_hat = []
+        self.u = []
+        self.offset = []
+
+    def run_test(self,
+                 wrist,
+                 goal,
+                 iterations=200,
+                 controller_wrist=None,
+                 observer_wrist=None):
+        """Runs the wrist plant with an initial condition and goal.
 
       Test for whether the goal has been reached and whether the separation
       goes  outside of the initial and goal values by more than
@@ -174,99 +187,105 @@
             use the actual state.
     """
 
-    if controller_wrist is None:
-      controller_wrist = wrist
+        if controller_wrist is None:
+            controller_wrist = wrist
 
-    vbat = 12.0
+        vbat = 12.0
 
-    if self.t:
-      initial_t = self.t[-1] + wrist.dt
-    else:
-      initial_t = 0
+        if self.t:
+            initial_t = self.t[-1] + wrist.dt
+        else:
+            initial_t = 0
 
-    for i in range(iterations):
-      X_hat = wrist.X
+        for i in range(iterations):
+            X_hat = wrist.X
 
-      if observer_wrist is not None:
-        X_hat = observer_wrist.X_hat
-        self.x_hat.append(observer_wrist.X_hat[0, 0])
+            if observer_wrist is not None:
+                X_hat = observer_wrist.X_hat
+                self.x_hat.append(observer_wrist.X_hat[0, 0])
 
-      U = controller_wrist.K * (goal - X_hat)
-      U[0, 0] = numpy.clip(U[0, 0], -vbat, vbat)
-      self.x.append(wrist.X[0, 0])
+            U = controller_wrist.K * (goal - X_hat)
+            U[0, 0] = numpy.clip(U[0, 0], -vbat, vbat)
+            self.x.append(wrist.X[0, 0])
 
-      if self.v:
-        last_v = self.v[-1]
-      else:
-        last_v = 0
+            if self.v:
+                last_v = self.v[-1]
+            else:
+                last_v = 0
 
-      self.v.append(wrist.X[1, 0])
-      self.a.append((self.v[-1] - last_v) / wrist.dt)
+            self.v.append(wrist.X[1, 0])
+            self.a.append((self.v[-1] - last_v) / wrist.dt)
 
-      if observer_wrist is not None:
-        observer_wrist.Y = wrist.Y
-        observer_wrist.CorrectObserver(U)
-        self.offset.append(observer_wrist.X_hat[2, 0])
+            if observer_wrist is not None:
+                observer_wrist.Y = wrist.Y
+                observer_wrist.CorrectObserver(U)
+                self.offset.append(observer_wrist.X_hat[2, 0])
 
-      wrist.Update(U + 2.0)
+            wrist.Update(U + 2.0)
 
-      if observer_wrist is not None:
-        observer_wrist.PredictObserver(U)
+            if observer_wrist is not None:
+                observer_wrist.PredictObserver(U)
 
-      self.t.append(initial_t + i * wrist.dt)
-      self.u.append(U[0, 0])
+            self.t.append(initial_t + i * wrist.dt)
+            self.u.append(U[0, 0])
 
-      glog.debug('Time: %f', self.t[-1])
+            glog.debug('Time: %f', self.t[-1])
 
-  def Plot(self):
-    pylab.subplot(3, 1, 1)
-    pylab.plot(self.t, self.x, label='x')
-    pylab.plot(self.t, self.x_hat, label='x_hat')
-    pylab.legend()
+    def Plot(self):
+        pylab.subplot(3, 1, 1)
+        pylab.plot(self.t, self.x, label='x')
+        pylab.plot(self.t, self.x_hat, label='x_hat')
+        pylab.legend()
 
-    pylab.subplot(3, 1, 2)
-    pylab.plot(self.t, self.u, label='u')
-    pylab.plot(self.t, self.offset, label='voltage_offset')
-    pylab.legend()
+        pylab.subplot(3, 1, 2)
+        pylab.plot(self.t, self.u, label='u')
+        pylab.plot(self.t, self.offset, label='voltage_offset')
+        pylab.legend()
 
-    pylab.subplot(3, 1, 3)
-    pylab.plot(self.t, self.a, label='a')
-    pylab.legend()
+        pylab.subplot(3, 1, 3)
+        pylab.plot(self.t, self.a, label='a')
+        pylab.legend()
 
-    pylab.show()
+        pylab.show()
 
 
 def main(argv):
-  scenario_plotter = ScenarioPlotter()
+    scenario_plotter = ScenarioPlotter()
 
-  wrist = Wrist()
-  wrist_controller = IntegralWrist()
-  observer_wrist = IntegralWrist()
+    wrist = Wrist()
+    wrist_controller = IntegralWrist()
+    observer_wrist = IntegralWrist()
 
-  # Test moving the wrist with constant separation.
-  initial_X = numpy.matrix([[0.0], [0.0]])
-  R = numpy.matrix([[1.0], [0.0], [0.0]])
-  scenario_plotter.run_test(wrist, goal=R, controller_wrist=wrist_controller,
-                            observer_wrist=observer_wrist, iterations=200)
+    # Test moving the wrist with constant separation.
+    initial_X = numpy.matrix([[0.0], [0.0]])
+    R = numpy.matrix([[1.0], [0.0], [0.0]])
+    scenario_plotter.run_test(wrist,
+                              goal=R,
+                              controller_wrist=wrist_controller,
+                              observer_wrist=observer_wrist,
+                              iterations=200)
 
-  if FLAGS.plot:
-    scenario_plotter.Plot()
+    if FLAGS.plot:
+        scenario_plotter.Plot()
 
-  # Write the generated constants out to a file.
-  if len(argv) != 5:
-    glog.fatal('Expected .h file name and .cc file name for the wrist and integral wrist.')
-  else:
-    namespaces = ['y2016', 'control_loops', 'superstructure']
-    wrist = Wrist('Wrist')
-    loop_writer = control_loop.ControlLoopWriter(
-        'Wrist', [wrist], namespaces=namespaces)
-    loop_writer.Write(argv[1], argv[2])
+    # Write the generated constants out to a file.
+    if len(argv) != 5:
+        glog.fatal(
+            'Expected .h file name and .cc file name for the wrist and integral wrist.'
+        )
+    else:
+        namespaces = ['y2016', 'control_loops', 'superstructure']
+        wrist = Wrist('Wrist')
+        loop_writer = control_loop.ControlLoopWriter('Wrist', [wrist],
+                                                     namespaces=namespaces)
+        loop_writer.Write(argv[1], argv[2])
 
-    integral_wrist = IntegralWrist('IntegralWrist')
-    integral_loop_writer = control_loop.ControlLoopWriter(
-        'IntegralWrist', [integral_wrist], namespaces=namespaces)
-    integral_loop_writer.Write(argv[3], argv[4])
+        integral_wrist = IntegralWrist('IntegralWrist')
+        integral_loop_writer = control_loop.ControlLoopWriter(
+            'IntegralWrist', [integral_wrist], namespaces=namespaces)
+        integral_loop_writer.Write(argv[3], argv[4])
+
 
 if __name__ == '__main__':
-  argv = FLAGS(sys.argv)
-  sys.exit(main(argv))
+    argv = FLAGS(sys.argv)
+    sys.exit(main(argv))
diff --git a/y2017/control_loops/python/column.py b/y2017/control_loops/python/column.py
index 0122b58..7573c16 100755
--- a/y2017/control_loops/python/column.py
+++ b/y2017/control_loops/python/column.py
@@ -37,12 +37,12 @@
         self.A_continuous = numpy.matrix(numpy.zeros((3, 3)))
         self.B_continuous = numpy.matrix(numpy.zeros((3, 2)))
 
-        self.A_continuous[0, 0] = -(
-            self.indexer.Kt / self.indexer.Kv /
-            (self.indexer.J * self.indexer.resistance * self.indexer.G *
-             self.indexer.G) + self.turret.Kt / self.turret.Kv /
-            (self.indexer.J * self.turret.resistance * self.turret.G *
-             self.turret.G))
+        self.A_continuous[0, 0] = -(self.indexer.Kt / self.indexer.Kv /
+                                    (self.indexer.J * self.indexer.resistance *
+                                     self.indexer.G * self.indexer.G) +
+                                    self.turret.Kt / self.turret.Kv /
+                                    (self.indexer.J * self.turret.resistance *
+                                     self.turret.G * self.turret.G))
         self.A_continuous[0, 2] = self.turret.Kt / self.turret.Kv / (
             self.indexer.J * self.turret.resistance * self.turret.G *
             self.turret.G)
@@ -142,8 +142,11 @@
         r_pos = 0.05
         self.R = numpy.matrix([[(r_pos**2.0), 0.0], [0.0, (r_pos**2.0)]])
 
-        self.KalmanGain, self.Q_steady = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
         self.L = self.A * self.KalmanGain
 
         self.InitializeState()
@@ -209,8 +212,11 @@
         r_pos = 0.05
         self.R = numpy.matrix([[(r_pos**2.0), 0.0], [0.0, (r_pos**2.0)]])
 
-        self.KalmanGain, self.Q_steady = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
         self.L = self.A * self.KalmanGain
 
         self.InitializeState()
@@ -282,12 +288,13 @@
             self.x_hat.append(observer_column.X_hat[0, 0])
 
             next_goal = numpy.concatenate(
-                (end_goal[0:2, :], profile.Update(
-                    end_goal[2, 0], end_goal[3, 0]), end_goal[4:6, :]),
+                (end_goal[0:2, :],
+                 profile.Update(end_goal[2, 0],
+                                end_goal[3, 0]), end_goal[4:6, :]),
                 axis=0)
 
-            ff_U = controller_column.Kff * (
-                next_goal - observer_column.A * goal)
+            ff_U = controller_column.Kff * (next_goal -
+                                            observer_column.A * goal)
             fb_U = controller_column.K * (goal - observer_column.X_hat)
             self.turret_error.append((goal[2, 0] - column.X[2, 0]) * 100.0)
             self.ui_fb.append(fb_U[0, 0])
@@ -373,12 +380,11 @@
 
     initial_X = numpy.matrix([[0.0], [0.0], [0.0], [0.0]])
     R = numpy.matrix([[0.0], [10.0], [5.0], [0.0], [0.0], [0.0]])
-    scenario_plotter.run_test(
-        column,
-        end_goal=R,
-        controller_column=column_controller,
-        observer_column=observer_column,
-        iterations=400)
+    scenario_plotter.run_test(column,
+                              end_goal=R,
+                              controller_column=column_controller,
+                              observer_column=observer_column,
+                              iterations=400)
 
     if FLAGS.plot:
         scenario_plotter.Plot()
@@ -388,8 +394,8 @@
     else:
         namespaces = ['y2017', 'control_loops', 'superstructure', 'column']
         column = Column('Column')
-        loop_writer = control_loop.ControlLoopWriter(
-            'Column', [column], namespaces=namespaces)
+        loop_writer = control_loop.ControlLoopWriter('Column', [column],
+                                                     namespaces=namespaces)
         loop_writer.AddConstant(
             control_loop.Constant('kIndexerFreeSpeed', '%f',
                                   column.indexer.free_speed))
@@ -405,15 +411,15 @@
 
         # IntegralColumn controller 1 will disable the indexer.
         integral_column = IntegralColumn('IntegralColumn')
-        disabled_integral_column = IntegralColumn(
-            'DisabledIntegralColumn', disable_indexer=True)
+        disabled_integral_column = IntegralColumn('DisabledIntegralColumn',
+                                                  disable_indexer=True)
         integral_loop_writer = control_loop.ControlLoopWriter(
             'IntegralColumn', [integral_column, disabled_integral_column],
             namespaces=namespaces)
         integral_loop_writer.Write(argv[3], argv[4])
 
-        stuck_integral_column = IntegralColumn(
-            'StuckIntegralColumn', voltage_error_noise=8.0)
+        stuck_integral_column = IntegralColumn('StuckIntegralColumn',
+                                               voltage_error_noise=8.0)
         stuck_integral_loop_writer = control_loop.ControlLoopWriter(
             'StuckIntegralColumn', [stuck_integral_column],
             namespaces=namespaces)
diff --git a/y2017/control_loops/python/drivetrain.py b/y2017/control_loops/python/drivetrain.py
index 652fcf4..b1ebcd8 100755
--- a/y2017/control_loops/python/drivetrain.py
+++ b/y2017/control_loops/python/drivetrain.py
@@ -11,17 +11,17 @@
 
 gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 
-kDrivetrain = drivetrain.DrivetrainParams(
-    J=6.0,
-    mass=52,
-    robot_radius=0.59055 / 2.0,
-    wheel_radius=0.08255 / 2.0,
-    G=11.0 / 60.0,
-    q_pos_low=0.12,
-    q_pos_high=0.14,
-    q_vel_low=1.0,
-    q_vel_high=0.95,
-    has_imu=False)
+kDrivetrain = drivetrain.DrivetrainParams(J=6.0,
+                                          mass=52,
+                                          robot_radius=0.59055 / 2.0,
+                                          wheel_radius=0.08255 / 2.0,
+                                          G=11.0 / 60.0,
+                                          q_pos_low=0.12,
+                                          q_pos_high=0.14,
+                                          q_vel_low=1.0,
+                                          q_vel_high=0.95,
+                                          has_imu=False)
+
 
 def main(argv):
     argv = FLAGS(argv)
@@ -35,5 +35,6 @@
         # Write the generated constants out to a file.
         drivetrain.WriteDrivetrain(argv[1:3], argv[3:5], 'y2017', kDrivetrain)
 
+
 if __name__ == '__main__':
     sys.exit(main(sys.argv))
diff --git a/y2017/control_loops/python/hood.py b/y2017/control_loops/python/hood.py
index c405bb2..c77d134 100755
--- a/y2017/control_loops/python/hood.py
+++ b/y2017/control_loops/python/hood.py
@@ -118,8 +118,11 @@
         r_volts = 0.025
         self.R = numpy.matrix([[(r_volts**2.0)]])
 
-        self.KalmanGain, self.Q_steady = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
 
         glog.debug('Kal %s', repr(self.KalmanGain))
         self.L = self.A * self.KalmanGain
@@ -165,8 +168,11 @@
         r_pos = 0.001
         self.R = numpy.matrix([[(r_pos**2.0)]])
 
-        self.KalmanGain, self.Q_steady = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
         self.L = self.A * self.KalmanGain
 
         self.K_unaugmented = self.K
@@ -244,7 +250,8 @@
 
             ff_U = controller_hood.Kff * (next_goal - observer_hood.A * goal)
 
-            U_uncapped = controller_hood.K * (goal - observer_hood.X_hat) + ff_U
+            U_uncapped = controller_hood.K * (goal -
+                                              observer_hood.X_hat) + ff_U
             U = U_uncapped.copy()
             U[0, 0] = numpy.clip(U[0, 0], -vbat, vbat)
             self.x.append(hood.X[0, 0])
@@ -310,12 +317,11 @@
     # Test moving the hood with constant separation.
     initial_X = numpy.matrix([[0.0], [0.0]])
     R = numpy.matrix([[numpy.pi / 4.0], [0.0], [0.0]])
-    scenario_plotter.run_test(
-        hood,
-        end_goal=R,
-        controller_hood=hood_controller,
-        observer_hood=observer_hood,
-        iterations=200)
+    scenario_plotter.run_test(hood,
+                              end_goal=R,
+                              controller_hood=hood_controller,
+                              observer_hood=observer_hood,
+                              iterations=200)
 
     if FLAGS.plot:
         scenario_plotter.Plot()
@@ -328,8 +334,8 @@
     else:
         namespaces = ['y2017', 'control_loops', 'superstructure', 'hood']
         hood = Hood('Hood')
-        loop_writer = control_loop.ControlLoopWriter(
-            'Hood', [hood], namespaces=namespaces)
+        loop_writer = control_loop.ControlLoopWriter('Hood', [hood],
+                                                     namespaces=namespaces)
         loop_writer.AddConstant(
             control_loop.Constant('kFreeSpeed', '%f', hood.free_speed))
         loop_writer.AddConstant(
@@ -340,7 +346,8 @@
         integral_loop_writer = control_loop.ControlLoopWriter(
             'IntegralHood', [integral_hood], namespaces=namespaces)
         integral_loop_writer.AddConstant(
-            control_loop.Constant('kLastReduction', '%f', integral_hood.last_G))
+            control_loop.Constant('kLastReduction', '%f',
+                                  integral_hood.last_G))
         integral_loop_writer.Write(argv[3], argv[4])
 
 
diff --git a/y2017/control_loops/python/indexer.py b/y2017/control_loops/python/indexer.py
index 7312e57..d4c3fe6 100755
--- a/y2017/control_loops/python/indexer.py
+++ b/y2017/control_loops/python/indexer.py
@@ -12,188 +12,203 @@
 FLAGS = gflags.FLAGS
 
 try:
-  gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 except gflags.DuplicateFlagError:
-  pass
+    pass
 
 gflags.DEFINE_bool('stall', False, 'If true, stall the indexer.')
 
+
 class VelocityIndexer(control_loop.ControlLoop):
-  def __init__(self, name='VelocityIndexer'):
-    super(VelocityIndexer, self).__init__(name)
-    # Stall Torque in N m
-    self.stall_torque = 0.71
-    # Stall Current in Amps
-    self.stall_current = 134
-    self.free_speed_rpm = 18730.0
-    # Free Speed in rotations/second.
-    self.free_speed = self.free_speed_rpm / 60.0
-    # Free Current in Amps
-    self.free_current = 0.7
-    # Moment of inertia of the indexer halves in kg m^2
-    # This is measured as Iyy in CAD (the moment of inertia around the Y axis).
-    # Inner part of indexer -> Iyy = 59500 lb * mm * mm
-    # Inner spins with 12 / 48 * 18 / 48 * 24 / 36 * 16 / 72
-    # Outer part of indexer -> Iyy = 210000 lb * mm * mm
-    # 1 775 pro -> 12 / 48 * 18 / 48 * 30 / 422
 
-    self.J_inner = 0.0269
-    self.J_outer = 0.0952
-    # Gear ratios for the inner and outer parts.
-    self.G_inner = (12.0 / 48.0) * (20.0 / 34.0) * (18.0 / 36.0) * (12.0 / 84.0)
-    self.G_outer = (12.0 / 48.0) * (20.0 / 34.0) * (18.0 / 36.0) * (24.0 / 420.0)
+    def __init__(self, name='VelocityIndexer'):
+        super(VelocityIndexer, self).__init__(name)
+        # Stall Torque in N m
+        self.stall_torque = 0.71
+        # Stall Current in Amps
+        self.stall_current = 134
+        self.free_speed_rpm = 18730.0
+        # Free Speed in rotations/second.
+        self.free_speed = self.free_speed_rpm / 60.0
+        # Free Current in Amps
+        self.free_current = 0.7
+        # Moment of inertia of the indexer halves in kg m^2
+        # This is measured as Iyy in CAD (the moment of inertia around the Y axis).
+        # Inner part of indexer -> Iyy = 59500 lb * mm * mm
+        # Inner spins with 12 / 48 * 18 / 48 * 24 / 36 * 16 / 72
+        # Outer part of indexer -> Iyy = 210000 lb * mm * mm
+        # 1 775 pro -> 12 / 48 * 18 / 48 * 30 / 422
 
-    # Motor inertia in kg m^2
-    self.motor_inertia = 0.00001187
+        self.J_inner = 0.0269
+        self.J_outer = 0.0952
+        # Gear ratios for the inner and outer parts.
+        self.G_inner = (12.0 / 48.0) * (20.0 / 34.0) * (18.0 / 36.0) * (12.0 /
+                                                                        84.0)
+        self.G_outer = (12.0 / 48.0) * (20.0 / 34.0) * (18.0 / 36.0) * (24.0 /
+                                                                        420.0)
 
-    # The output coordinate system is in radians for the inner part of the
-    # indexer.
-    # Compute the effective moment of inertia assuming all the mass is in that
-    # coordinate system.
-    self.J = (
-        self.J_inner * self.G_inner * self.G_inner +
-        self.J_outer * self.G_outer * self.G_outer) / (self.G_inner * self.G_inner) + \
-        self.motor_inertia * ((1.0 / self.G_inner) ** 2.0)
-    glog.debug('Indexer J is %f', self.J)
-    self.G = self.G_inner
+        # Motor inertia in kg m^2
+        self.motor_inertia = 0.00001187
 
-    # Resistance of the motor, divided by 2 to account for the 2 motors
-    self.resistance = 12.0 / self.stall_current
-    # Motor velocity constant
-    self.Kv = ((self.free_speed * 2.0 * numpy.pi) /
-              (12.0 - self.resistance * self.free_current))
-    # Torque constant
-    self.Kt = self.stall_torque / self.stall_current
-    # Control loop time step
-    self.dt = 0.005
+        # The output coordinate system is in radians for the inner part of the
+        # indexer.
+        # Compute the effective moment of inertia assuming all the mass is in that
+        # coordinate system.
+        self.J = (
+            self.J_inner * self.G_inner * self.G_inner +
+            self.J_outer * self.G_outer * self.G_outer) / (self.G_inner * self.G_inner) + \
+            self.motor_inertia * ((1.0 / self.G_inner) ** 2.0)
+        glog.debug('Indexer J is %f', self.J)
+        self.G = self.G_inner
 
-    # State feedback matrices
-    # [angular velocity]
-    self.A_continuous = numpy.matrix(
-        [[-self.Kt / self.Kv / (self.J * self.G * self.G * self.resistance)]])
-    self.B_continuous = numpy.matrix(
-        [[self.Kt / (self.J * self.G * self.resistance)]])
-    self.C = numpy.matrix([[1]])
-    self.D = numpy.matrix([[0]])
+        # Resistance of the motor, divided by 2 to account for the 2 motors
+        self.resistance = 12.0 / self.stall_current
+        # Motor velocity constant
+        self.Kv = ((self.free_speed * 2.0 * numpy.pi) /
+                   (12.0 - self.resistance * self.free_current))
+        # Torque constant
+        self.Kt = self.stall_torque / self.stall_current
+        # Control loop time step
+        self.dt = 0.005
 
-    self.A, self.B = self.ContinuousToDiscrete(
-        self.A_continuous, self.B_continuous, self.dt)
+        # State feedback matrices
+        # [angular velocity]
+        self.A_continuous = numpy.matrix([[
+            -self.Kt / self.Kv / (self.J * self.G * self.G * self.resistance)
+        ]])
+        self.B_continuous = numpy.matrix(
+            [[self.Kt / (self.J * self.G * self.resistance)]])
+        self.C = numpy.matrix([[1]])
+        self.D = numpy.matrix([[0]])
 
-    self.PlaceControllerPoles([.75])
+        self.A, self.B = self.ContinuousToDiscrete(self.A_continuous,
+                                                   self.B_continuous, self.dt)
 
-    self.PlaceObserverPoles([0.3])
+        self.PlaceControllerPoles([.75])
 
-    self.U_max = numpy.matrix([[12.0]])
-    self.U_min = numpy.matrix([[-12.0]])
+        self.PlaceObserverPoles([0.3])
 
-    qff_vel = 8.0
-    self.Qff = numpy.matrix([[1.0 / (qff_vel ** 2.0)]])
+        self.U_max = numpy.matrix([[12.0]])
+        self.U_min = numpy.matrix([[-12.0]])
 
-    self.Kff = controls.TwoStateFeedForwards(self.B, self.Qff)
-    self.InitializeState()
+        qff_vel = 8.0
+        self.Qff = numpy.matrix([[1.0 / (qff_vel**2.0)]])
+
+        self.Kff = controls.TwoStateFeedForwards(self.B, self.Qff)
+        self.InitializeState()
 
 
 class Indexer(VelocityIndexer):
-  def __init__(self, name='Indexer'):
-    super(Indexer, self).__init__(name)
 
-    self.A_continuous_unaugmented = self.A_continuous
-    self.B_continuous_unaugmented = self.B_continuous
+    def __init__(self, name='Indexer'):
+        super(Indexer, self).__init__(name)
 
-    self.A_continuous = numpy.matrix(numpy.zeros((2, 2)))
-    self.A_continuous[1:2, 1:2] = self.A_continuous_unaugmented
-    self.A_continuous[0, 1] = 1
+        self.A_continuous_unaugmented = self.A_continuous
+        self.B_continuous_unaugmented = self.B_continuous
 
-    self.B_continuous = numpy.matrix(numpy.zeros((2, 1)))
-    self.B_continuous[1:2, 0] = self.B_continuous_unaugmented
+        self.A_continuous = numpy.matrix(numpy.zeros((2, 2)))
+        self.A_continuous[1:2, 1:2] = self.A_continuous_unaugmented
+        self.A_continuous[0, 1] = 1
 
-    # State feedback matrices
-    # [position, angular velocity]
-    self.C = numpy.matrix([[1, 0]])
-    self.D = numpy.matrix([[0]])
+        self.B_continuous = numpy.matrix(numpy.zeros((2, 1)))
+        self.B_continuous[1:2, 0] = self.B_continuous_unaugmented
 
-    self.A, self.B = self.ContinuousToDiscrete(
-        self.A_continuous, self.B_continuous, self.dt)
+        # State feedback matrices
+        # [position, angular velocity]
+        self.C = numpy.matrix([[1, 0]])
+        self.D = numpy.matrix([[0]])
 
-    self.rpl = .45
-    self.ipl = 0.07
-    self.PlaceObserverPoles([self.rpl + 1j * self.ipl,
-                             self.rpl - 1j * self.ipl])
+        self.A, self.B = self.ContinuousToDiscrete(self.A_continuous,
+                                                   self.B_continuous, self.dt)
 
-    self.K_unaugmented = self.K
-    self.K = numpy.matrix(numpy.zeros((1, 2)))
-    self.K[0, 1:2] = self.K_unaugmented
-    self.Kff_unaugmented = self.Kff
-    self.Kff = numpy.matrix(numpy.zeros((1, 2)))
-    self.Kff[0, 1:2] = self.Kff_unaugmented
+        self.rpl = .45
+        self.ipl = 0.07
+        self.PlaceObserverPoles(
+            [self.rpl + 1j * self.ipl, self.rpl - 1j * self.ipl])
 
-    self.InitializeState()
+        self.K_unaugmented = self.K
+        self.K = numpy.matrix(numpy.zeros((1, 2)))
+        self.K[0, 1:2] = self.K_unaugmented
+        self.Kff_unaugmented = self.Kff
+        self.Kff = numpy.matrix(numpy.zeros((1, 2)))
+        self.Kff[0, 1:2] = self.Kff_unaugmented
+
+        self.InitializeState()
 
 
 class IntegralIndexer(Indexer):
-  def __init__(self, name="IntegralIndexer", voltage_error_noise=None):
-    super(IntegralIndexer, self).__init__(name=name)
 
-    self.A_continuous_unaugmented = self.A_continuous
-    self.B_continuous_unaugmented = self.B_continuous
+    def __init__(self, name="IntegralIndexer", voltage_error_noise=None):
+        super(IntegralIndexer, self).__init__(name=name)
 
-    self.A_continuous = numpy.matrix(numpy.zeros((3, 3)))
-    self.A_continuous[0:2, 0:2] = self.A_continuous_unaugmented
-    self.A_continuous[0:2, 2] = self.B_continuous_unaugmented
+        self.A_continuous_unaugmented = self.A_continuous
+        self.B_continuous_unaugmented = self.B_continuous
 
-    self.B_continuous = numpy.matrix(numpy.zeros((3, 1)))
-    self.B_continuous[0:2, 0] = self.B_continuous_unaugmented
+        self.A_continuous = numpy.matrix(numpy.zeros((3, 3)))
+        self.A_continuous[0:2, 0:2] = self.A_continuous_unaugmented
+        self.A_continuous[0:2, 2] = self.B_continuous_unaugmented
 
-    self.C_unaugmented = self.C
-    self.C = numpy.matrix(numpy.zeros((1, 3)))
-    self.C[0:1, 0:2] = self.C_unaugmented
+        self.B_continuous = numpy.matrix(numpy.zeros((3, 1)))
+        self.B_continuous[0:2, 0] = self.B_continuous_unaugmented
 
-    self.A, self.B = self.ContinuousToDiscrete(
-        self.A_continuous, self.B_continuous, self.dt)
+        self.C_unaugmented = self.C
+        self.C = numpy.matrix(numpy.zeros((1, 3)))
+        self.C[0:1, 0:2] = self.C_unaugmented
 
-    q_pos = 0.01
-    q_vel = 2.0
-    q_voltage = 0.6
-    if voltage_error_noise is not None:
-      q_voltage = voltage_error_noise
+        self.A, self.B = self.ContinuousToDiscrete(self.A_continuous,
+                                                   self.B_continuous, self.dt)
 
-    self.Q = numpy.matrix([[(q_pos ** 2.0), 0.0, 0.0],
-                           [0.0, (q_vel ** 2.0), 0.0],
-                           [0.0, 0.0, (q_voltage ** 2.0)]])
+        q_pos = 0.01
+        q_vel = 2.0
+        q_voltage = 0.6
+        if voltage_error_noise is not None:
+            q_voltage = voltage_error_noise
 
-    r_pos = 0.001
-    self.R = numpy.matrix([[(r_pos ** 2.0)]])
+        self.Q = numpy.matrix([[(q_pos**2.0), 0.0, 0.0],
+                               [0.0, (q_vel**2.0), 0.0],
+                               [0.0, 0.0, (q_voltage**2.0)]])
 
-    self.KalmanGain, self.Q_steady = controls.kalman(
-        A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
-    self.L = self.A * self.KalmanGain
+        r_pos = 0.001
+        self.R = numpy.matrix([[(r_pos**2.0)]])
 
-    self.K_unaugmented = self.K
-    self.K = numpy.matrix(numpy.zeros((1, 3)))
-    self.K[0, 0:2] = self.K_unaugmented
-    self.K[0, 2] = 1
-    self.Kff_unaugmented = self.Kff
-    self.Kff = numpy.matrix(numpy.zeros((1, 3)))
-    self.Kff[0, 0:2] = self.Kff_unaugmented
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
+        self.L = self.A * self.KalmanGain
 
-    self.InitializeState()
+        self.K_unaugmented = self.K
+        self.K = numpy.matrix(numpy.zeros((1, 3)))
+        self.K[0, 0:2] = self.K_unaugmented
+        self.K[0, 2] = 1
+        self.Kff_unaugmented = self.Kff
+        self.Kff = numpy.matrix(numpy.zeros((1, 3)))
+        self.Kff[0, 0:2] = self.Kff_unaugmented
+
+        self.InitializeState()
 
 
 class ScenarioPlotter(object):
-  def __init__(self):
-    # Various lists for graphing things.
-    self.t = []
-    self.x = []
-    self.v = []
-    self.a = []
-    self.stall_ratio = []
-    self.x_hat = []
-    self.u = []
-    self.offset = []
 
-  def run_test(self, indexer, goal, iterations=200, controller_indexer=None,
-             observer_indexer=None):
-    """Runs the indexer plant with an initial condition and goal.
+    def __init__(self):
+        # Various lists for graphing things.
+        self.t = []
+        self.x = []
+        self.v = []
+        self.a = []
+        self.stall_ratio = []
+        self.x_hat = []
+        self.u = []
+        self.offset = []
+
+    def run_test(self,
+                 indexer,
+                 goal,
+                 iterations=200,
+                 controller_indexer=None,
+                 observer_indexer=None):
+        """Runs the indexer plant with an initial condition and goal.
 
       Args:
         indexer: Indexer object to use.
@@ -205,141 +220,148 @@
             should use the actual state.
     """
 
-    if controller_indexer is None:
-      controller_indexer = indexer
+        if controller_indexer is None:
+            controller_indexer = indexer
 
-    vbat = 12.0
+        vbat = 12.0
 
-    if self.t:
-      initial_t = self.t[-1] + indexer.dt
-    else:
-      initial_t = 0
-
-    for i in range(iterations):
-      X_hat = indexer.X
-
-      if observer_indexer is not None:
-        X_hat = observer_indexer.X_hat
-        observer_indexer.Y = indexer.Y
-        observer_indexer.CorrectObserver(numpy.matrix([[0.0]]))
-        self.x_hat.append(observer_indexer.X_hat[1, 0])
-        self.offset.append(observer_indexer.X_hat[2, 0])
-
-      ff_U = controller_indexer.Kff * (goal - observer_indexer.A * goal)
-
-      U = controller_indexer.K * (goal - X_hat) + ff_U
-      U[0, 0] = numpy.clip(U[0, 0], -vbat, vbat)
-      self.x.append(indexer.X[0, 0])
-
-      if self.v:
-        last_v = self.v[-1]
-      else:
-        last_v = 0
-
-      self.v.append(indexer.X[1, 0])
-      self.a.append((self.v[-1] - last_v) / indexer.dt)
-
-      applied_U = U.copy()
-      if i >= 40:
-        applied_U -= 2
-
-      if FLAGS.stall and i >= 40:
-        indexer.X[1, 0] = 0.0
-      else:
-        indexer.Update(applied_U)
-
-      if observer_indexer is not None:
-        clipped_u = U[0, 0]
-        clip_u_value = 3.0
-        if clipped_u < 0:
-          clipped_u = min(clipped_u, -clip_u_value)
+        if self.t:
+            initial_t = self.t[-1] + indexer.dt
         else:
-          clipped_u = max(clipped_u, clip_u_value)
+            initial_t = 0
 
-        self.stall_ratio.append(10 * (-self.offset[-1] / clipped_u))
+        for i in range(iterations):
+            X_hat = indexer.X
 
-        observer_indexer.PredictObserver(U)
+            if observer_indexer is not None:
+                X_hat = observer_indexer.X_hat
+                observer_indexer.Y = indexer.Y
+                observer_indexer.CorrectObserver(numpy.matrix([[0.0]]))
+                self.x_hat.append(observer_indexer.X_hat[1, 0])
+                self.offset.append(observer_indexer.X_hat[2, 0])
 
-      self.t.append(initial_t + i * indexer.dt)
-      self.u.append(U[0, 0])
+            ff_U = controller_indexer.Kff * (goal - observer_indexer.A * goal)
 
-  def Plot(self):
-    pylab.subplot(3, 1, 1)
-    pylab.plot(self.t, self.v, label='x')
-    pylab.plot(self.t, self.x_hat, label='x_hat')
-    pylab.legend()
+            U = controller_indexer.K * (goal - X_hat) + ff_U
+            U[0, 0] = numpy.clip(U[0, 0], -vbat, vbat)
+            self.x.append(indexer.X[0, 0])
 
-    pylab.subplot(3, 1, 2)
-    pylab.plot(self.t, self.u, label='u')
-    pylab.plot(self.t, self.offset, label='voltage_offset')
-    pylab.plot(self.t, self.stall_ratio, label='stall_ratio')
-    pylab.plot(self.t,
-               [10.0 if x > 6.0 else 0.0 for x in self.stall_ratio],
-               label='is_stalled')
-    pylab.legend()
+            if self.v:
+                last_v = self.v[-1]
+            else:
+                last_v = 0
 
-    pylab.subplot(3, 1, 3)
-    pylab.plot(self.t, self.a, label='a')
-    pylab.legend()
+            self.v.append(indexer.X[1, 0])
+            self.a.append((self.v[-1] - last_v) / indexer.dt)
 
-    pylab.show()
+            applied_U = U.copy()
+            if i >= 40:
+                applied_U -= 2
+
+            if FLAGS.stall and i >= 40:
+                indexer.X[1, 0] = 0.0
+            else:
+                indexer.Update(applied_U)
+
+            if observer_indexer is not None:
+                clipped_u = U[0, 0]
+                clip_u_value = 3.0
+                if clipped_u < 0:
+                    clipped_u = min(clipped_u, -clip_u_value)
+                else:
+                    clipped_u = max(clipped_u, clip_u_value)
+
+                self.stall_ratio.append(10 * (-self.offset[-1] / clipped_u))
+
+                observer_indexer.PredictObserver(U)
+
+            self.t.append(initial_t + i * indexer.dt)
+            self.u.append(U[0, 0])
+
+    def Plot(self):
+        pylab.subplot(3, 1, 1)
+        pylab.plot(self.t, self.v, label='x')
+        pylab.plot(self.t, self.x_hat, label='x_hat')
+        pylab.legend()
+
+        pylab.subplot(3, 1, 2)
+        pylab.plot(self.t, self.u, label='u')
+        pylab.plot(self.t, self.offset, label='voltage_offset')
+        pylab.plot(self.t, self.stall_ratio, label='stall_ratio')
+        pylab.plot(self.t,
+                   [10.0 if x > 6.0 else 0.0 for x in self.stall_ratio],
+                   label='is_stalled')
+        pylab.legend()
+
+        pylab.subplot(3, 1, 3)
+        pylab.plot(self.t, self.a, label='a')
+        pylab.legend()
+
+        pylab.show()
 
 
 def main(argv):
-  scenario_plotter = ScenarioPlotter()
+    scenario_plotter = ScenarioPlotter()
 
-  indexer = Indexer()
-  indexer_controller = IntegralIndexer()
-  observer_indexer = IntegralIndexer()
+    indexer = Indexer()
+    indexer_controller = IntegralIndexer()
+    observer_indexer = IntegralIndexer()
 
-  initial_X = numpy.matrix([[0.0], [0.0]])
-  R = numpy.matrix([[0.0], [20.0], [0.0]])
-  scenario_plotter.run_test(indexer, goal=R, controller_indexer=indexer_controller,
-                            observer_indexer=observer_indexer, iterations=200)
+    initial_X = numpy.matrix([[0.0], [0.0]])
+    R = numpy.matrix([[0.0], [20.0], [0.0]])
+    scenario_plotter.run_test(indexer,
+                              goal=R,
+                              controller_indexer=indexer_controller,
+                              observer_indexer=observer_indexer,
+                              iterations=200)
 
-  if FLAGS.plot:
-    scenario_plotter.Plot()
+    if FLAGS.plot:
+        scenario_plotter.Plot()
 
-  scenario_plotter = ScenarioPlotter()
+    scenario_plotter = ScenarioPlotter()
 
-  indexer = Indexer()
-  indexer_controller = IntegralIndexer(voltage_error_noise=1.5)
-  observer_indexer = IntegralIndexer(voltage_error_noise=1.5)
+    indexer = Indexer()
+    indexer_controller = IntegralIndexer(voltage_error_noise=1.5)
+    observer_indexer = IntegralIndexer(voltage_error_noise=1.5)
 
-  initial_X = numpy.matrix([[0.0], [0.0]])
-  R = numpy.matrix([[0.0], [20.0], [0.0]])
-  scenario_plotter.run_test(indexer, goal=R, controller_indexer=indexer_controller,
-                            observer_indexer=observer_indexer, iterations=200)
+    initial_X = numpy.matrix([[0.0], [0.0]])
+    R = numpy.matrix([[0.0], [20.0], [0.0]])
+    scenario_plotter.run_test(indexer,
+                              goal=R,
+                              controller_indexer=indexer_controller,
+                              observer_indexer=observer_indexer,
+                              iterations=200)
 
-  if FLAGS.plot:
-    scenario_plotter.Plot()
+    if FLAGS.plot:
+        scenario_plotter.Plot()
 
-  if len(argv) != 7:
-    glog.fatal('Expected .h file name and .cc file names')
-  else:
-    namespaces = ['y2017', 'control_loops', 'superstructure', 'indexer']
-    indexer = Indexer('Indexer')
-    loop_writer = control_loop.ControlLoopWriter('Indexer', [indexer],
-                                                 namespaces=namespaces)
-    loop_writer.AddConstant(control_loop.Constant(
-        'kFreeSpeed', '%f', indexer.free_speed))
-    loop_writer.AddConstant(control_loop.Constant(
-        'kOutputRatio', '%f', indexer.G))
-    loop_writer.Write(argv[1], argv[2])
+    if len(argv) != 7:
+        glog.fatal('Expected .h file name and .cc file names')
+    else:
+        namespaces = ['y2017', 'control_loops', 'superstructure', 'indexer']
+        indexer = Indexer('Indexer')
+        loop_writer = control_loop.ControlLoopWriter('Indexer', [indexer],
+                                                     namespaces=namespaces)
+        loop_writer.AddConstant(
+            control_loop.Constant('kFreeSpeed', '%f', indexer.free_speed))
+        loop_writer.AddConstant(
+            control_loop.Constant('kOutputRatio', '%f', indexer.G))
+        loop_writer.Write(argv[1], argv[2])
 
-    integral_indexer = IntegralIndexer('IntegralIndexer')
-    integral_loop_writer = control_loop.ControlLoopWriter(
-        'IntegralIndexer', [integral_indexer], namespaces=namespaces)
-    integral_loop_writer.Write(argv[3], argv[4])
+        integral_indexer = IntegralIndexer('IntegralIndexer')
+        integral_loop_writer = control_loop.ControlLoopWriter(
+            'IntegralIndexer', [integral_indexer], namespaces=namespaces)
+        integral_loop_writer.Write(argv[3], argv[4])
 
-    stuck_integral_indexer = IntegralIndexer('StuckIntegralIndexer',
-                                             voltage_error_noise=1.5)
-    stuck_integral_loop_writer = control_loop.ControlLoopWriter(
-        'StuckIntegralIndexer', [stuck_integral_indexer], namespaces=namespaces)
-    stuck_integral_loop_writer.Write(argv[5], argv[6])
+        stuck_integral_indexer = IntegralIndexer('StuckIntegralIndexer',
+                                                 voltage_error_noise=1.5)
+        stuck_integral_loop_writer = control_loop.ControlLoopWriter(
+            'StuckIntegralIndexer', [stuck_integral_indexer],
+            namespaces=namespaces)
+        stuck_integral_loop_writer.Write(argv[5], argv[6])
 
 
 if __name__ == '__main__':
-  argv = FLAGS(sys.argv)
-  glog.init()
-  sys.exit(main(argv))
+    argv = FLAGS(sys.argv)
+    glog.init()
+    sys.exit(main(argv))
diff --git a/y2017/control_loops/python/polydrivetrain.py b/y2017/control_loops/python/polydrivetrain.py
index 498a2c3..e181ef5 100755
--- a/y2017/control_loops/python/polydrivetrain.py
+++ b/y2017/control_loops/python/polydrivetrain.py
@@ -12,20 +12,22 @@
 FLAGS = gflags.FLAGS
 
 try:
-  gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 except gflags.DuplicateFlagError:
-  pass
+    pass
+
 
 def main(argv):
-  if FLAGS.plot:
-    polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
-  elif len(argv) != 7:
-    glog.fatal('Expected .h file name and .cc file name')
-  else:
-    polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7], 'y2017',
-                                       drivetrain.kDrivetrain)
+    if FLAGS.plot:
+        polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
+    elif len(argv) != 7:
+        glog.fatal('Expected .h file name and .cc file name')
+    else:
+        polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7],
+                                           'y2017', drivetrain.kDrivetrain)
+
 
 if __name__ == '__main__':
-  argv = FLAGS(sys.argv)
-  glog.init()
-  sys.exit(main(argv))
+    argv = FLAGS(sys.argv)
+    glog.init()
+    sys.exit(main(argv))
diff --git a/y2017/control_loops/python/polydrivetrain_test.py b/y2017/control_loops/python/polydrivetrain_test.py
index 8e0176e..a5bac4a 100755
--- a/y2017/control_loops/python/polydrivetrain_test.py
+++ b/y2017/control_loops/python/polydrivetrain_test.py
@@ -10,73 +10,72 @@
 
 
 class TestVelocityDrivetrain(unittest.TestCase):
-  def MakeBox(self, x1_min, x1_max, x2_min, x2_max):
-    H = numpy.matrix([[1, 0],
-                      [-1, 0],
-                      [0, 1],
-                      [0, -1]])
-    K = numpy.matrix([[x1_max],
-                      [-x1_min],
-                      [x2_max],
-                      [-x2_min]])
-    return polytope.HPolytope(H, K)
 
-  def test_coerce_inside(self):
-    """Tests coercion when the point is inside the box."""
-    box = self.MakeBox(1, 2, 1, 2)
+    def MakeBox(self, x1_min, x1_max, x2_min, x2_max):
+        H = numpy.matrix([[1, 0], [-1, 0], [0, 1], [0, -1]])
+        K = numpy.matrix([[x1_max], [-x1_min], [x2_max], [-x2_min]])
+        return polytope.HPolytope(H, K)
 
-    # x1 = x2
-    K = numpy.matrix([[1, -1]])
-    w = 0
+    def test_coerce_inside(self):
+        """Tests coercion when the point is inside the box."""
+        box = self.MakeBox(1, 2, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w,
-                                                 numpy.matrix([[1.5], [1.5]])),
-                       numpy.matrix([[1.5], [1.5]]))
+        # x1 = x2
+        K = numpy.matrix([[1, -1]])
+        w = 0
 
-  def test_coerce_outside_intersect(self):
-    """Tests coercion when the line intersects the box."""
-    box = self.MakeBox(1, 2, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[1.5], [1.5]])),
+            numpy.matrix([[1.5], [1.5]]))
 
-    # x1 = x2
-    K = numpy.matrix([[1, -1]])
-    w = 0
+    def test_coerce_outside_intersect(self):
+        """Tests coercion when the line intersects the box."""
+        box = self.MakeBox(1, 2, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[2.0], [2.0]]))
+        # x1 = x2
+        K = numpy.matrix([[1, -1]])
+        w = 0
 
-  def test_coerce_outside_no_intersect(self):
-    """Tests coercion when the line does not intersect the box."""
-    box = self.MakeBox(3, 4, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[2.0], [2.0]]))
 
-    # x1 = x2
-    K = numpy.matrix([[1, -1]])
-    w = 0
+    def test_coerce_outside_no_intersect(self):
+        """Tests coercion when the line does not intersect the box."""
+        box = self.MakeBox(3, 4, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[3.0], [2.0]]))
+        # x1 = x2
+        K = numpy.matrix([[1, -1]])
+        w = 0
 
-  def test_coerce_middle_of_edge(self):
-    """Tests coercion when the line intersects the middle of an edge."""
-    box = self.MakeBox(0, 4, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[3.0], [2.0]]))
 
-    # x1 = x2
-    K = numpy.matrix([[-1, 1]])
-    w = 0
+    def test_coerce_middle_of_edge(self):
+        """Tests coercion when the line intersects the middle of an edge."""
+        box = self.MakeBox(0, 4, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[2.0], [2.0]]))
+        # x1 = x2
+        K = numpy.matrix([[-1, 1]])
+        w = 0
 
-  def test_coerce_perpendicular_line(self):
-    """Tests coercion when the line does not intersect and is in quadrant 2."""
-    box = self.MakeBox(1, 2, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[2.0], [2.0]]))
 
-    # x1 = -x2
-    K = numpy.matrix([[1, 1]])
-    w = 0
+    def test_coerce_perpendicular_line(self):
+        """Tests coercion when the line does not intersect and is in quadrant 2."""
+        box = self.MakeBox(1, 2, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[1.0], [1.0]]))
+        # x1 = -x2
+        K = numpy.matrix([[1, 1]])
+        w = 0
+
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[1.0], [1.0]]))
 
 
 if __name__ == '__main__':
-  unittest.main()
+    unittest.main()
diff --git a/y2017/control_loops/python/shooter.py b/y2017/control_loops/python/shooter.py
index be4fb81..47b7217 100755
--- a/y2017/control_loops/python/shooter.py
+++ b/y2017/control_loops/python/shooter.py
@@ -204,8 +204,8 @@
 
         glog.debug('A: \n%s', repr(self.A_continuous))
         glog.debug('eig(A): \n%s', repr(scipy.linalg.eig(self.A_continuous)))
-        glog.debug('schur(A): \n%s', repr(
-            scipy.linalg.schur(self.A_continuous)))
+        glog.debug('schur(A): \n%s',
+                   repr(scipy.linalg.schur(self.A_continuous)))
         glog.debug('A_dt(A): \n%s', repr(self.A))
 
         q_pos = 0.01
@@ -220,15 +220,17 @@
         r_pos = 0.0003
         self.R_continuous = numpy.matrix([[(r_pos**2.0)]])
 
-        _, _, self.Q, self.R = controls.kalmd(
-            A_continuous=self.A_continuous,
-            B_continuous=self.B_continuous,
-            Q_continuous=self.Q_continuous,
-            R_continuous=self.R_continuous,
-            dt=self.dt)
+        _, _, self.Q, self.R = controls.kalmd(A_continuous=self.A_continuous,
+                                              B_continuous=self.B_continuous,
+                                              Q_continuous=self.Q_continuous,
+                                              R_continuous=self.R_continuous,
+                                              dt=self.dt)
 
-        self.KalmanGain, self.P_steady_state = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.P_steady_state = controls.kalman(A=self.A,
+                                                               B=self.B,
+                                                               C=self.C,
+                                                               Q=self.Q,
+                                                               R=self.R)
         self.L = self.A * self.KalmanGain
 
         self.K_unaugmented = self.K
@@ -363,13 +365,12 @@
         shooter_controller = IntegralShooter()
         observer_shooter_hybrid = IntegralShooter()
 
-        scenario_plotter_int.run_test(
-            shooter,
-            goal=R,
-            controller_shooter=shooter_controller,
-            observer_shooter=observer_shooter_hybrid,
-            iterations=iterations,
-            hybrid_obs=True)
+        scenario_plotter_int.run_test(shooter,
+                                      goal=R,
+                                      controller_shooter=shooter_controller,
+                                      observer_shooter=observer_shooter_hybrid,
+                                      iterations=iterations,
+                                      hybrid_obs=True)
 
         scenario_plotter_int.Plot()
 
@@ -380,8 +381,8 @@
     else:
         namespaces = ['y2017', 'control_loops', 'superstructure', 'shooter']
         shooter = Shooter('Shooter')
-        loop_writer = control_loop.ControlLoopWriter(
-            'Shooter', [shooter], namespaces=namespaces)
+        loop_writer = control_loop.ControlLoopWriter('Shooter', [shooter],
+                                                     namespaces=namespaces)
         loop_writer.AddConstant(
             control_loop.Constant('kFreeSpeed', '%f', shooter.free_speed))
         loop_writer.AddConstant(
diff --git a/y2017/control_loops/python/turret.py b/y2017/control_loops/python/turret.py
index e67904d..6407133 100755
--- a/y2017/control_loops/python/turret.py
+++ b/y2017/control_loops/python/turret.py
@@ -12,166 +12,176 @@
 FLAGS = gflags.FLAGS
 
 try:
-  gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 except gflags.DuplicateFlagError:
-  pass
+    pass
+
 
 class Turret(control_loop.ControlLoop):
-  def __init__(self, name='Turret'):
-    super(Turret, self).__init__(name)
-    # Stall Torque in N m
-    self.stall_torque = 0.71
-    # Stall Current in Amps
-    self.stall_current = 134
-    self.free_speed_rpm = 18730.0
-    # Free Speed in rotations/second.
-    self.free_speed = self.free_speed_rpm / 60.0
-    # Free Current in Amps
-    self.free_current = 0.7
 
-    # Resistance of the motor
-    self.resistance = 12.0 / self.stall_current
-    # Motor velocity constant
-    self.Kv = ((self.free_speed * 2.0 * numpy.pi) /
-               (12.0 - self.resistance * self.free_current))
-    # Torque constant
-    self.Kt = self.stall_torque / self.stall_current
-    # Gear ratio
-    self.G = (12.0 / 60.0) * (11.0 / 94.0)
+    def __init__(self, name='Turret'):
+        super(Turret, self).__init__(name)
+        # Stall Torque in N m
+        self.stall_torque = 0.71
+        # Stall Current in Amps
+        self.stall_current = 134
+        self.free_speed_rpm = 18730.0
+        # Free Speed in rotations/second.
+        self.free_speed = self.free_speed_rpm / 60.0
+        # Free Current in Amps
+        self.free_current = 0.7
 
-    # Motor inertia in kg * m^2
-    self.motor_inertia = 0.00001187
+        # Resistance of the motor
+        self.resistance = 12.0 / self.stall_current
+        # Motor velocity constant
+        self.Kv = ((self.free_speed * 2.0 * numpy.pi) /
+                   (12.0 - self.resistance * self.free_current))
+        # Torque constant
+        self.Kt = self.stall_torque / self.stall_current
+        # Gear ratio
+        self.G = (12.0 / 60.0) * (11.0 / 94.0)
 
-    # Moment of inertia, measured in CAD.
-    # Extra mass to compensate for friction is added on.
-    self.J = 0.06 + self.motor_inertia * ((1.0 / self.G) ** 2.0)
-    glog.debug('Turret J is: %f', self.J)
+        # Motor inertia in kg * m^2
+        self.motor_inertia = 0.00001187
 
-    # Control loop time step
-    self.dt = 0.005
+        # Moment of inertia, measured in CAD.
+        # Extra mass to compensate for friction is added on.
+        self.J = 0.06 + self.motor_inertia * ((1.0 / self.G)**2.0)
+        glog.debug('Turret J is: %f', self.J)
 
-    # State is [position, velocity]
-    # Input is [Voltage]
+        # Control loop time step
+        self.dt = 0.005
 
-    C1 = self.Kt / (self.resistance * self.J * self.Kv * self.G * self.G)
-    C2 = self.Kt / (self.J * self.resistance * self.G)
+        # State is [position, velocity]
+        # Input is [Voltage]
 
-    self.A_continuous = numpy.matrix(
-        [[0, 1],
-         [0, -C1]])
+        C1 = self.Kt / (self.resistance * self.J * self.Kv * self.G * self.G)
+        C2 = self.Kt / (self.J * self.resistance * self.G)
 
-    # Start with the unmodified input
-    self.B_continuous = numpy.matrix(
-        [[0],
-         [C2]])
+        self.A_continuous = numpy.matrix([[0, 1], [0, -C1]])
 
-    self.C = numpy.matrix([[1, 0]])
-    self.D = numpy.matrix([[0]])
+        # Start with the unmodified input
+        self.B_continuous = numpy.matrix([[0], [C2]])
 
-    self.A, self.B = self.ContinuousToDiscrete(
-        self.A_continuous, self.B_continuous, self.dt)
+        self.C = numpy.matrix([[1, 0]])
+        self.D = numpy.matrix([[0]])
 
-    controllability = controls.ctrb(self.A, self.B)
+        self.A, self.B = self.ContinuousToDiscrete(self.A_continuous,
+                                                   self.B_continuous, self.dt)
 
-    glog.debug('Free speed is %f',
-               -self.B_continuous[1, 0] / self.A_continuous[1, 1] * 12.0)
+        controllability = controls.ctrb(self.A, self.B)
 
-    # Calculate the LQR controller gain
-    q_pos = 0.20
-    q_vel = 5.0
-    self.Q = numpy.matrix([[(1.0 / (q_pos ** 2.0)), 0.0],
-                           [0.0, (1.0 / (q_vel ** 2.0))]])
+        glog.debug('Free speed is %f',
+                   -self.B_continuous[1, 0] / self.A_continuous[1, 1] * 12.0)
 
-    self.R = numpy.matrix([[(1.0 / (12.0 ** 2.0))]])
-    self.K = controls.dlqr(self.A, self.B, self.Q, self.R)
+        # Calculate the LQR controller gain
+        q_pos = 0.20
+        q_vel = 5.0
+        self.Q = numpy.matrix([[(1.0 / (q_pos**2.0)), 0.0],
+                               [0.0, (1.0 / (q_vel**2.0))]])
 
-    # Calculate the feed forwards gain.
-    q_pos_ff = 0.005
-    q_vel_ff = 1.0
-    self.Qff = numpy.matrix([[(1.0 / (q_pos_ff ** 2.0)), 0.0],
-                             [0.0, (1.0 / (q_vel_ff ** 2.0))]])
+        self.R = numpy.matrix([[(1.0 / (12.0**2.0))]])
+        self.K = controls.dlqr(self.A, self.B, self.Q, self.R)
 
-    self.Kff = controls.TwoStateFeedForwards(self.B, self.Qff)
+        # Calculate the feed forwards gain.
+        q_pos_ff = 0.005
+        q_vel_ff = 1.0
+        self.Qff = numpy.matrix([[(1.0 / (q_pos_ff**2.0)), 0.0],
+                                 [0.0, (1.0 / (q_vel_ff**2.0))]])
 
-    q_pos = 0.10
-    q_vel = 1.65
-    self.Q = numpy.matrix([[(q_pos ** 2.0), 0.0],
-                           [0.0, (q_vel ** 2.0)]])
+        self.Kff = controls.TwoStateFeedForwards(self.B, self.Qff)
 
-    r_volts = 0.025
-    self.R = numpy.matrix([[(r_volts ** 2.0)]])
+        q_pos = 0.10
+        q_vel = 1.65
+        self.Q = numpy.matrix([[(q_pos**2.0), 0.0], [0.0, (q_vel**2.0)]])
 
-    self.KalmanGain, self.Q_steady = controls.kalman(
-        A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
-    self.L = self.A * self.KalmanGain
+        r_volts = 0.025
+        self.R = numpy.matrix([[(r_volts**2.0)]])
 
-    # The box formed by U_min and U_max must encompass all possible values,
-    # or else Austin's code gets angry.
-    self.U_max = numpy.matrix([[12.0]])
-    self.U_min = numpy.matrix([[-12.0]])
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
+        self.L = self.A * self.KalmanGain
 
-    self.InitializeState()
+        # The box formed by U_min and U_max must encompass all possible values,
+        # or else Austin's code gets angry.
+        self.U_max = numpy.matrix([[12.0]])
+        self.U_min = numpy.matrix([[-12.0]])
+
+        self.InitializeState()
+
 
 class IntegralTurret(Turret):
-  def __init__(self, name='IntegralTurret'):
-    super(IntegralTurret, self).__init__(name=name)
 
-    self.A_continuous_unaugmented = self.A_continuous
-    self.B_continuous_unaugmented = self.B_continuous
+    def __init__(self, name='IntegralTurret'):
+        super(IntegralTurret, self).__init__(name=name)
 
-    self.A_continuous = numpy.matrix(numpy.zeros((3, 3)))
-    self.A_continuous[0:2, 0:2] = self.A_continuous_unaugmented
-    self.A_continuous[0:2, 2] = self.B_continuous_unaugmented
+        self.A_continuous_unaugmented = self.A_continuous
+        self.B_continuous_unaugmented = self.B_continuous
 
-    self.B_continuous = numpy.matrix(numpy.zeros((3, 1)))
-    self.B_continuous[0:2, 0] = self.B_continuous_unaugmented
+        self.A_continuous = numpy.matrix(numpy.zeros((3, 3)))
+        self.A_continuous[0:2, 0:2] = self.A_continuous_unaugmented
+        self.A_continuous[0:2, 2] = self.B_continuous_unaugmented
 
-    self.C_unaugmented = self.C
-    self.C = numpy.matrix(numpy.zeros((1, 3)))
-    self.C[0:1, 0:2] = self.C_unaugmented
+        self.B_continuous = numpy.matrix(numpy.zeros((3, 1)))
+        self.B_continuous[0:2, 0] = self.B_continuous_unaugmented
 
-    self.A, self.B = self.ContinuousToDiscrete(
-        self.A_continuous, self.B_continuous, self.dt)
+        self.C_unaugmented = self.C
+        self.C = numpy.matrix(numpy.zeros((1, 3)))
+        self.C[0:1, 0:2] = self.C_unaugmented
 
-    q_pos = 0.12
-    q_vel = 2.00
-    q_voltage = 3.0
-    self.Q = numpy.matrix([[(q_pos ** 2.0), 0.0, 0.0],
-                           [0.0, (q_vel ** 2.0), 0.0],
-                           [0.0, 0.0, (q_voltage ** 2.0)]])
+        self.A, self.B = self.ContinuousToDiscrete(self.A_continuous,
+                                                   self.B_continuous, self.dt)
 
-    r_pos = 0.05
-    self.R = numpy.matrix([[(r_pos ** 2.0)]])
+        q_pos = 0.12
+        q_vel = 2.00
+        q_voltage = 3.0
+        self.Q = numpy.matrix([[(q_pos**2.0), 0.0, 0.0],
+                               [0.0, (q_vel**2.0), 0.0],
+                               [0.0, 0.0, (q_voltage**2.0)]])
 
-    self.KalmanGain, self.Q_steady = controls.kalman(
-        A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
-    self.L = self.A * self.KalmanGain
+        r_pos = 0.05
+        self.R = numpy.matrix([[(r_pos**2.0)]])
 
-    self.K_unaugmented = self.K
-    self.K = numpy.matrix(numpy.zeros((1, 3)))
-    self.K[0, 0:2] = self.K_unaugmented
-    self.K[0, 2] = 1
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
+        self.L = self.A * self.KalmanGain
 
-    self.Kff = numpy.concatenate((self.Kff, numpy.matrix(numpy.zeros((1, 1)))), axis=1)
+        self.K_unaugmented = self.K
+        self.K = numpy.matrix(numpy.zeros((1, 3)))
+        self.K[0, 0:2] = self.K_unaugmented
+        self.K[0, 2] = 1
 
-    self.InitializeState()
+        self.Kff = numpy.concatenate(
+            (self.Kff, numpy.matrix(numpy.zeros((1, 1)))), axis=1)
+
+        self.InitializeState()
+
 
 class ScenarioPlotter(object):
-  def __init__(self):
-    # Various lists for graphing things.
-    self.t = []
-    self.x = []
-    self.v = []
-    self.a = []
-    self.x_hat = []
-    self.u = []
-    self.offset = []
 
-  def run_test(self, turret, end_goal,
-             controller_turret,
-             observer_turret=None,
-             iterations=200):
-    """Runs the turret plant with an initial condition and goal.
+    def __init__(self):
+        # Various lists for graphing things.
+        self.t = []
+        self.x = []
+        self.v = []
+        self.a = []
+        self.x_hat = []
+        self.u = []
+        self.offset = []
+
+    def run_test(self,
+                 turret,
+                 end_goal,
+                 controller_turret,
+                 observer_turret=None,
+                 iterations=200):
+        """Runs the turret plant with an initial condition and goal.
 
       Args:
         turret: turret object to use.
@@ -183,130 +193,138 @@
         iterations: Number of timesteps to run the model for.
     """
 
-    if controller_turret is None:
-      controller_turret = turret
+        if controller_turret is None:
+            controller_turret = turret
 
-    vbat = 12.0
+        vbat = 12.0
 
-    if self.t:
-      initial_t = self.t[-1] + turret.dt
-    else:
-      initial_t = 0
+        if self.t:
+            initial_t = self.t[-1] + turret.dt
+        else:
+            initial_t = 0
 
-    goal = numpy.concatenate((turret.X, numpy.matrix(numpy.zeros((1, 1)))), axis=0)
+        goal = numpy.concatenate((turret.X, numpy.matrix(numpy.zeros((1, 1)))),
+                                 axis=0)
 
-    profile = TrapezoidProfile(turret.dt)
-    profile.set_maximum_acceleration(100.0)
-    profile.set_maximum_velocity(7.0)
-    profile.SetGoal(goal[0, 0])
+        profile = TrapezoidProfile(turret.dt)
+        profile.set_maximum_acceleration(100.0)
+        profile.set_maximum_velocity(7.0)
+        profile.SetGoal(goal[0, 0])
 
-    U_last = numpy.matrix(numpy.zeros((1, 1)))
-    for i in range(iterations):
-      observer_turret.Y = turret.Y
-      observer_turret.CorrectObserver(U_last)
+        U_last = numpy.matrix(numpy.zeros((1, 1)))
+        for i in range(iterations):
+            observer_turret.Y = turret.Y
+            observer_turret.CorrectObserver(U_last)
 
-      self.offset.append(observer_turret.X_hat[2, 0])
-      self.x_hat.append(observer_turret.X_hat[0, 0])
+            self.offset.append(observer_turret.X_hat[2, 0])
+            self.x_hat.append(observer_turret.X_hat[0, 0])
 
-      next_goal = numpy.concatenate(
-          (profile.Update(end_goal[0, 0], end_goal[1, 0]),
-           numpy.matrix(numpy.zeros((1, 1)))),
-          axis=0)
+            next_goal = numpy.concatenate(
+                (profile.Update(end_goal[0, 0], end_goal[1, 0]),
+                 numpy.matrix(numpy.zeros((1, 1)))),
+                axis=0)
 
-      ff_U = controller_turret.Kff * (next_goal - observer_turret.A * goal)
+            ff_U = controller_turret.Kff * (next_goal -
+                                            observer_turret.A * goal)
 
-      U_uncapped = controller_turret.K * (goal - observer_turret.X_hat) + ff_U
-      U_uncapped = controller_turret.K * (end_goal - observer_turret.X_hat)
-      U = U_uncapped.copy()
-      U[0, 0] = numpy.clip(U[0, 0], -vbat, vbat)
-      self.x.append(turret.X[0, 0])
+            U_uncapped = controller_turret.K * (goal -
+                                                observer_turret.X_hat) + ff_U
+            U_uncapped = controller_turret.K * (end_goal -
+                                                observer_turret.X_hat)
+            U = U_uncapped.copy()
+            U[0, 0] = numpy.clip(U[0, 0], -vbat, vbat)
+            self.x.append(turret.X[0, 0])
 
-      if self.v:
-        last_v = self.v[-1]
-      else:
-        last_v = 0
+            if self.v:
+                last_v = self.v[-1]
+            else:
+                last_v = 0
 
-      self.v.append(turret.X[1, 0])
-      self.a.append((self.v[-1] - last_v) / turret.dt)
+            self.v.append(turret.X[1, 0])
+            self.a.append((self.v[-1] - last_v) / turret.dt)
 
-      offset = 0.0
-      if i > 100:
-        offset = 2.0
-      turret.Update(U + offset)
+            offset = 0.0
+            if i > 100:
+                offset = 2.0
+            turret.Update(U + offset)
 
-      observer_turret.PredictObserver(U)
+            observer_turret.PredictObserver(U)
 
-      self.t.append(initial_t + i * turret.dt)
-      self.u.append(U[0, 0])
+            self.t.append(initial_t + i * turret.dt)
+            self.u.append(U[0, 0])
 
-      ff_U -= U_uncapped - U
-      goal = controller_turret.A * goal + controller_turret.B * ff_U
+            ff_U -= U_uncapped - U
+            goal = controller_turret.A * goal + controller_turret.B * ff_U
 
-      if U[0, 0] != U_uncapped[0, 0]:
-        profile.MoveCurrentState(
-            numpy.matrix([[goal[0, 0]], [goal[1, 0]]]))
+            if U[0, 0] != U_uncapped[0, 0]:
+                profile.MoveCurrentState(
+                    numpy.matrix([[goal[0, 0]], [goal[1, 0]]]))
 
-    glog.debug('Time: %f', self.t[-1])
-    glog.debug('goal_error %s', repr(end_goal - goal))
-    glog.debug('error %s', repr(observer_turret.X_hat - end_goal))
+        glog.debug('Time: %f', self.t[-1])
+        glog.debug('goal_error %s', repr(end_goal - goal))
+        glog.debug('error %s', repr(observer_turret.X_hat - end_goal))
 
-  def Plot(self):
-    pylab.subplot(3, 1, 1)
-    pylab.plot(self.t, self.x, label='x')
-    pylab.plot(self.t, self.x_hat, label='x_hat')
-    pylab.legend()
+    def Plot(self):
+        pylab.subplot(3, 1, 1)
+        pylab.plot(self.t, self.x, label='x')
+        pylab.plot(self.t, self.x_hat, label='x_hat')
+        pylab.legend()
 
-    pylab.subplot(3, 1, 2)
-    pylab.plot(self.t, self.u, label='u')
-    pylab.plot(self.t, self.offset, label='voltage_offset')
-    pylab.legend()
+        pylab.subplot(3, 1, 2)
+        pylab.plot(self.t, self.u, label='u')
+        pylab.plot(self.t, self.offset, label='voltage_offset')
+        pylab.legend()
 
-    pylab.subplot(3, 1, 3)
-    pylab.plot(self.t, self.a, label='a')
-    pylab.legend()
+        pylab.subplot(3, 1, 3)
+        pylab.plot(self.t, self.a, label='a')
+        pylab.legend()
 
-    pylab.show()
+        pylab.show()
 
 
 def main(argv):
-  argv = FLAGS(argv)
-  glog.init()
+    argv = FLAGS(argv)
+    glog.init()
 
-  scenario_plotter = ScenarioPlotter()
+    scenario_plotter = ScenarioPlotter()
 
-  turret = Turret()
-  turret_controller = IntegralTurret()
-  observer_turret = IntegralTurret()
+    turret = Turret()
+    turret_controller = IntegralTurret()
+    observer_turret = IntegralTurret()
 
-  # Test moving the turret with constant separation.
-  initial_X = numpy.matrix([[0.0], [0.0]])
-  R = numpy.matrix([[numpy.pi/2.0], [0.0], [0.0]])
-  scenario_plotter.run_test(turret, end_goal=R,
-                            controller_turret=turret_controller,
-                            observer_turret=observer_turret, iterations=200)
+    # Test moving the turret with constant separation.
+    initial_X = numpy.matrix([[0.0], [0.0]])
+    R = numpy.matrix([[numpy.pi / 2.0], [0.0], [0.0]])
+    scenario_plotter.run_test(turret,
+                              end_goal=R,
+                              controller_turret=turret_controller,
+                              observer_turret=observer_turret,
+                              iterations=200)
 
-  if FLAGS.plot:
-    scenario_plotter.Plot()
+    if FLAGS.plot:
+        scenario_plotter.Plot()
 
-  # Write the generated constants out to a file.
-  if len(argv) != 5:
-    glog.fatal('Expected .h file name and .cc file name for the turret and integral turret.')
-  else:
-    namespaces = ['y2017', 'control_loops', 'superstructure', 'turret']
-    turret = Turret('Turret')
-    loop_writer = control_loop.ControlLoopWriter('Turret', [turret],
-                                                 namespaces=namespaces)
-    loop_writer.AddConstant(control_loop.Constant(
-        'kFreeSpeed', '%f', turret.free_speed))
-    loop_writer.AddConstant(control_loop.Constant(
-        'kOutputRatio', '%f', turret.G))
-    loop_writer.Write(argv[1], argv[2])
+    # Write the generated constants out to a file.
+    if len(argv) != 5:
+        glog.fatal(
+            'Expected .h file name and .cc file name for the turret and integral turret.'
+        )
+    else:
+        namespaces = ['y2017', 'control_loops', 'superstructure', 'turret']
+        turret = Turret('Turret')
+        loop_writer = control_loop.ControlLoopWriter('Turret', [turret],
+                                                     namespaces=namespaces)
+        loop_writer.AddConstant(
+            control_loop.Constant('kFreeSpeed', '%f', turret.free_speed))
+        loop_writer.AddConstant(
+            control_loop.Constant('kOutputRatio', '%f', turret.G))
+        loop_writer.Write(argv[1], argv[2])
 
-    integral_turret = IntegralTurret('IntegralTurret')
-    integral_loop_writer = control_loop.ControlLoopWriter(
-        'IntegralTurret', [integral_turret],
-        namespaces=namespaces)
-    integral_loop_writer.Write(argv[3], argv[4])
+        integral_turret = IntegralTurret('IntegralTurret')
+        integral_loop_writer = control_loop.ControlLoopWriter(
+            'IntegralTurret', [integral_turret], namespaces=namespaces)
+        integral_loop_writer.Write(argv[3], argv[4])
+
 
 if __name__ == '__main__':
-  sys.exit(main(sys.argv))
+    sys.exit(main(sys.argv))
diff --git a/y2018/control_loops/python/arm_distal.py b/y2018/control_loops/python/arm_distal.py
index 2836c50..d443f8a 100755
--- a/y2018/control_loops/python/arm_distal.py
+++ b/y2018/control_loops/python/arm_distal.py
@@ -3,7 +3,7 @@
 # This code was used to select the gear ratio for the distal arm.
 # Run it from the command line and it displays the time required
 # to move the distal arm 60 degrees.
-# 
+#
 # Michael Schuh
 # January 20, 2018
 
@@ -14,206 +14,238 @@
 # apt-get install python-scipy python3-scipy python-numpy python3-numpy
 
 pi = math.pi
-pi2 = 2.0*pi
-rad_to_deg = 180.0/pi
+pi2 = 2.0 * pi
+rad_to_deg = 180.0 / pi
 inches_to_meters = 0.0254
-lbs_to_kg = 1.0/2.2
+lbs_to_kg = 1.0 / 2.2
 newton_to_lbf = 0.224809
 newton_meters_to_ft_lbs = 0.73756
 run_count = 0
 theta_travel = 0.0
 
+
 def to_deg(angle):
-  return (angle*rad_to_deg)
+    return (angle * rad_to_deg)
+
 
 def to_rad(angle):
-  return (angle/rad_to_deg)
+    return (angle / rad_to_deg)
+
 
 def to_rotations(angle):
-  return (angle/pi2)
+    return (angle / pi2)
+
 
 def time_derivative(x, t, voltage, c1, c2, c3):
-  global run_count
-  theta, omega = x
-  dxdt = [omega, -c1*omega + c3*math.sin(theta) + c2*voltage]
-  run_count = run_count + 1
+    global run_count
+    theta, omega = x
+    dxdt = [omega, -c1 * omega + c3 * math.sin(theta) + c2 * voltage]
+    run_count = run_count + 1
 
-  #print ('dxdt = ',dxdt,' repr(dxdt) = ', repr(dxdt))
-  return dxdt
-  
+    #print ('dxdt = ',dxdt,' repr(dxdt) = ', repr(dxdt))
+    return dxdt
 
-def get_180_degree_time(c1,c2,c3,voltage,gear_ratio,motor_free_speed):
-  #print ("# step     time    theta    angular_speed   angular_acceleration  theta   angular_speed  motor_speed motor_speed_fraction")
-  #print ("#          (sec)   (rad)      (rad/sec)        (rad/sec^2)      (rotations) (rotations/sec)    (rpm)   (fraction)")
-  global run_count
-  global theta_travel
 
-  if ( False ):
-    # Gravity is assisting the motion.
-    theta_start = 0.0
-    theta_target = pi
-  elif ( False ):
-    # Gravity is assisting the motion.
-    theta_start = 0.0
-    theta_target = -pi
-  elif ( False ):
-    # Gravity is slowing the motion.
-    theta_start = pi
-    theta_target = 0.0
-  elif ( True ):
-    # Gravity is slowing the motion.
-    theta_start = -pi
-    theta_target = 0.0
+def get_180_degree_time(c1, c2, c3, voltage, gear_ratio, motor_free_speed):
+    #print ("# step     time    theta    angular_speed   angular_acceleration  theta   angular_speed  motor_speed motor_speed_fraction")
+    #print ("#          (sec)   (rad)      (rad/sec)        (rad/sec^2)      (rotations) (rotations/sec)    (rpm)   (fraction)")
+    global run_count
+    global theta_travel
 
-  theta_half = 0.5*(theta_start + theta_target)
-  if (theta_start > theta_target):
-    voltage = -voltage
-  theta = theta_start
-  theta_travel = theta_start - theta_target 
-  if ( run_count == 0 ):
-    print ("# Theta Start = %.2f radians End = %.2f Theta travel %.2f Theta half = %.2f Voltage = %.2f" % (theta_start,theta_target,theta_travel,theta_half, voltage))
-    print ("# Theta Start = %.2f degrees End = %.2f Theta travel %.2f Theta half = %.2f Voltage = %.2f" % (to_deg(theta_start),to_deg(theta_target),to_deg(theta_travel),to_deg(theta_half), voltage))
-  omega = 0.0
-  time = 0.0
-  delta_time = 0.01 # time step in seconds
-  for step in range(1, 5000):
-     t = numpy.array([time, time + delta_time])
-     time = time + delta_time
-     x = [theta, omega]
-     angular_acceleration = -c1*omega + c2*voltage
-     x_n_plus_1 = scipy.integrate.odeint(time_derivative,x,t,args=(voltage,c1,c2,c3))
-     #print ('x_n_plus_1 = ',x_n_plus_1)
-     #print ('repr(x_n_plus_1) = ',repr(x_n_plus_1))
-     theta, omega = x_n_plus_1[1]
-     #theta= x_n_plus_1[0]
-     #omega = x_n_plus_1[1]
-     if ( False ):
-       print ("%4d  %8.4f %8.2f          %8.4f          %8.4f    %8.3f    %8.3f     %8.3f      %8.3f" % \
-         (step, time, theta, omega, angular_acceleration, to_rotations(theta), \
-         to_rotations(omega), omega*gear_ratio*60.0/pi2, omega*gear_ratio/motor_free_speed ))
-     if (theta_start < theta_target):
-       # Angle is increasing through the motion.
-       if (theta > theta_half):
-         break
-     else:
-       # Angle is decreasing through the motion.
-       if (theta < theta_half):
-         break
-       
-  #print ("# step     time    theta    angular_speed   angular_acceleration  theta   angular_speed  motor_speed motor_speed_fraction")
-  #print ("#          (sec)   (rad)      (rad/sec)        (rad/sec^2)      (rotations) (rotations/sec)    (rpm)   (fraction)")
-  #print ("# Total time for 1/2 rotation of arm is %0.2f" % (time*2))
-  return (2.0*time)
+    if (False):
+        # Gravity is assisting the motion.
+        theta_start = 0.0
+        theta_target = pi
+    elif (False):
+        # Gravity is assisting the motion.
+        theta_start = 0.0
+        theta_target = -pi
+    elif (False):
+        # Gravity is slowing the motion.
+        theta_start = pi
+        theta_target = 0.0
+    elif (True):
+        # Gravity is slowing the motion.
+        theta_start = -pi
+        theta_target = 0.0
+
+    theta_half = 0.5 * (theta_start + theta_target)
+    if (theta_start > theta_target):
+        voltage = -voltage
+    theta = theta_start
+    theta_travel = theta_start - theta_target
+    if (run_count == 0):
+        print(
+            "# Theta Start = %.2f radians End = %.2f Theta travel %.2f Theta half = %.2f Voltage = %.2f"
+            % (theta_start, theta_target, theta_travel, theta_half, voltage))
+        print(
+            "# Theta Start = %.2f degrees End = %.2f Theta travel %.2f Theta half = %.2f Voltage = %.2f"
+            % (to_deg(theta_start), to_deg(theta_target), to_deg(theta_travel),
+               to_deg(theta_half), voltage))
+    omega = 0.0
+    time = 0.0
+    delta_time = 0.01  # time step in seconds
+    for step in range(1, 5000):
+        t = numpy.array([time, time + delta_time])
+        time = time + delta_time
+        x = [theta, omega]
+        angular_acceleration = -c1 * omega + c2 * voltage
+        x_n_plus_1 = scipy.integrate.odeint(time_derivative,
+                                            x,
+                                            t,
+                                            args=(voltage, c1, c2, c3))
+        #print ('x_n_plus_1 = ',x_n_plus_1)
+        #print ('repr(x_n_plus_1) = ',repr(x_n_plus_1))
+        theta, omega = x_n_plus_1[1]
+        #theta= x_n_plus_1[0]
+        #omega = x_n_plus_1[1]
+        if (False):
+            print ("%4d  %8.4f %8.2f          %8.4f          %8.4f    %8.3f    %8.3f     %8.3f      %8.3f" % \
+              (step, time, theta, omega, angular_acceleration, to_rotations(theta), \
+              to_rotations(omega), omega*gear_ratio*60.0/pi2, omega*gear_ratio/motor_free_speed ))
+        if (theta_start < theta_target):
+            # Angle is increasing through the motion.
+            if (theta > theta_half):
+                break
+        else:
+            # Angle is decreasing through the motion.
+            if (theta < theta_half):
+                break
+
+    #print ("# step     time    theta    angular_speed   angular_acceleration  theta   angular_speed  motor_speed motor_speed_fraction")
+    #print ("#          (sec)   (rad)      (rad/sec)        (rad/sec^2)      (rotations) (rotations/sec)    (rpm)   (fraction)")
+    #print ("# Total time for 1/2 rotation of arm is %0.2f" % (time*2))
+    return (2.0 * time)
+
 
 def main():
-  gravity = 9.8 # m/sec^2 Gravity Constant
-  voltage_nominal = 12 # Volts
-  
-  # Vex 775 Pro motor specs from http://banebots.com/p/M2-RS550-120
-  motor_name = "Vex 775 Pro motor specs from http://banebots.com/p/M2-RS550-120"
-  current_stall = 134 # amps stall current
-  current_no_load = 0.7 # amps no load current
-  torque_stall = 710/1000.0 # N-m Stall Torque
-  speed_no_load_rpm = 18730 # RPM no load speed
-  
-  if ( False ):
-    # Bag motor from https://www.vexrobotics.com/217-3351.html
-    motor_name = "Bag motor from https://www.vexrobotics.com/217-3351.html"
-    current_stall = 53.0 # amps stall current
-    current_no_load = 1.8 # amps no load current
-    torque_stall = 0.4 # N-m Stall Torque
-    speed_no_load_rpm = 13180.0 # RPM no load speed
-  
-  if ( True ):
-    # Mini CIM motor from https://www.vexrobotics.com/217-3371.html
-    motor_name = "Mini CIM motor from https://www.vexrobotics.com/217-3371.html"
-    current_stall = 89.0 # amps stall current
-    current_no_load = 3.0 # amps no load current
-    torque_stall = 1.4 # N-m Stall Torque
-    speed_no_load_rpm = 5840.0 # RPM no load speed
+    gravity = 9.8  # m/sec^2 Gravity Constant
+    voltage_nominal = 12  # Volts
 
-  # How many motors are we using?
-  num_motors = 2
+    # Vex 775 Pro motor specs from http://banebots.com/p/M2-RS550-120
+    motor_name = "Vex 775 Pro motor specs from http://banebots.com/p/M2-RS550-120"
+    current_stall = 134  # amps stall current
+    current_no_load = 0.7  # amps no load current
+    torque_stall = 710 / 1000.0  # N-m Stall Torque
+    speed_no_load_rpm = 18730  # RPM no load speed
 
-  # Motor values
-  print ("# Motor: %s" % (motor_name))
-  print ("# Number of motors: %d" % (num_motors))
-  print ("# Stall torque: %.1f n-m" % (torque_stall))
-  print ("# Stall current: %.1f amps" % (current_stall))
-  print ("# No load current: %.1f amps" % (current_no_load))a
-  print ("# No load speed: %.0f rpm" % (speed_no_load_rpm))
-  
-  # Constants from motor values
-  resistance_motor = voltage_nominal/current_stall 
-  speed_no_load_rps = speed_no_load_rpm/60.0 # Revolutions per second no load speed
-  speed_no_load = speed_no_load_rps*2.0*pi
-  Kt = num_motors*torque_stall/current_stall # N-m/A torque constant
-  Kv_rpm = speed_no_load_rpm /(voltage_nominal - resistance_motor*current_no_load)  # rpm/V
-  Kv = Kv_rpm*2.0*pi/60.0 # rpm/V
-  
-  # Robot Geometry and physics
-  length_proximal_arm = inches_to_meters*47.34 # m Length of arm connected to the robot base
-  length_distal_arm = inches_to_meters*44.0 # m Length of arm that holds the cube
-  mass_cube = 6.0*lbs_to_kg  # Weight of the cube in Kgrams
-  mass_proximal_arm = 5.5*lbs_to_kg # Weight of proximal arm
-  mass_distal_arm = 3.5*lbs_to_kg # Weight of distal arm
-  mass_distal = mass_cube + mass_distal_arm
-  radius_to_proximal_arm_cg = 22.0*inches_to_meters # m Length from arm pivot point to arm CG
-  radius_to_distal_arm_cg = 10.0*inches_to_meters # m Length from arm pivot point to arm CG
+    if (False):
+        # Bag motor from https://www.vexrobotics.com/217-3351.html
+        motor_name = "Bag motor from https://www.vexrobotics.com/217-3351.html"
+        current_stall = 53.0  # amps stall current
+        current_no_load = 1.8  # amps no load current
+        torque_stall = 0.4  # N-m Stall Torque
+        speed_no_load_rpm = 13180.0  # RPM no load speed
 
-  radius_to_distal_cg = ( length_distal_arm*mass_cube + radius_to_distal_arm_cg*mass_distal_arm)/mass_distal
-  J_cube = length_distal_arm*length_distal_arm*mass_cube 
-  J_proximal_arm = radius_to_proximal_arm_cg*radius_to_proximal_arm_cg*mass_distal_arm # Kg m^2 Moment of inertia of the proximal arm
-  J_distal_arm = radius_to_distal_arm_cg*radius_to_distal_arm_cg*mass_distal_arm # Kg m^2 Moment of inertia of the distal arm
-  J = J_cube + J_distal_arm # Moment of inertia of the arm with the cube on the end
+    if (True):
+        # Mini CIM motor from https://www.vexrobotics.com/217-3371.html
+        motor_name = "Mini CIM motor from https://www.vexrobotics.com/217-3371.html"
+        current_stall = 89.0  # amps stall current
+        current_no_load = 3.0  # amps no load current
+        torque_stall = 1.4  # N-m Stall Torque
+        speed_no_load_rpm = 5840.0  # RPM no load speed
 
-  error_margine = 1.0
-  voltage = 10.0 # voltage for the motor.  Assuming a loaded robot so not using 12 V.
-  # It might make sense to use a lower motor frees peed when the voltage is not a full 12 Volts.
-  # motor_free_speed = Kv*voltage
-  motor_free_speed = speed_no_load
-  
-  
-  print ("# Kt = %f N-m/A\n# Kv_rpm = %f rpm/V\n# Kv = %f radians/V" % (Kt, Kv_rpm, Kv))
-  print ("# %.2f Ohms Resistance of the motor " % (resistance_motor))
-  print ("# %.2f kg Cube weight" % (mass_cube))
-  print ("# %.2f kg Proximal Arm mass" % (mass_proximal_arm))
-  print ("# %.2f kg Distal Arm mass" % (mass_distal_arm))
-  print ("# %.2f kg Distal Arm and Cube weight" % (mass_distal))
-  print ("# %.2f m Length from distal arm pivot point to arm CG" % (radius_to_distal_arm_cg))
-  print ("# %.2f m Length from distal arm pivot point to arm and cube cg" % (radius_to_distal_cg))
-  print ("# %.2f kg-m^2 Moment of inertia of the cube about the arm pivot point" % (J_cube))
-  print ("# %.2f kg-m^2 Moment of inertia of the arm with the cube on the end" % (J))
-  print ("# %.2f m  Proximal arm length" % (length_proximal_arm))
-  print ("# %.2f m  Distal arm length" % (length_distal_arm))
+    # How many motors are we using?
+    num_motors = 2
 
-  print ("# %.2f kg-m^2 Moment of inertia of the proximal arm about the arm pivot point" % (J_proximal_arm))
-  print ("# %.2f kg-m^2 Moment of inertia of the distal arm about the arm pivot point" % (J_distal_arm))
-  print ("# %.2f kg-m^2 Moment of inertia of the distal arm and cube about the arm pivot point" % (J))
-  print ("# %d Number of motors" % (num_motors))
-  
-  print ("# %.2f V Motor voltage" % (voltage))
-  for gear_ratio in range(30, 181, 10):
-    c1 = Kt*gear_ratio*gear_ratio/(Kv*resistance_motor*J)
-    c2 = gear_ratio*Kt/(J*resistance_motor)
-    c3 = radius_to_distal_cg*mass_distal*gravity/J
-  
-    if ( False ):
-      print ("# %.8f 1/sec C1 constant" % (c1))
-      print ("# %.2f 1/sec C2 constant" % (c2))
-      print ("# %.2f 1/(V sec^2) C3 constant" % (c3))
-      print ("# %.2f RPM Free speed at motor voltage" % (voltage*Kv_rpm))
-  
-    torque_90_degrees = radius_to_distal_cg*mass_distal*gravity
-    voltage_90_degrees = resistance_motor*torque_90_degrees/(gear_ratio*Kt)
-    torque_peak = gear_ratio*num_motors*torque_stall
-    torque_peak_ft_lbs = torque_peak * newton_meters_to_ft_lbs
-    normal_force = torque_peak/length_distal_arm
-    normal_force_lbf = newton_to_lbf*normal_force 
-    time_required = get_180_degree_time(c1,c2,c3,voltage,gear_ratio,motor_free_speed)
-    print ("Time for %.1f degrees for gear ratio %3.0f is %.2f seconds.  90 degree torque %.1f N-m and voltage %.1f Volts. Peak torque %3.0f nm %3.0f ft-lb Normal force at distal end %3.0f N %2.0f lbf" % \
-      (to_deg(theta_travel),gear_ratio,time_required,torque_90_degrees,voltage_90_degrees,
-       torque_peak,torque_peak_ft_lbs,normal_force,normal_force_lbf))
-  
+    # Motor values
+    print("# Motor: %s" % (motor_name))
+    print("# Number of motors: %d" % (num_motors))
+    print("# Stall torque: %.1f n-m" % (torque_stall))
+    print("# Stall current: %.1f amps" % (current_stall))
+    print("# No load current: %.1f amps" % (current_no_load))
+    print("# No load speed: %.0f rpm" % (speed_no_load_rpm))
+
+    # Constants from motor values
+    resistance_motor = voltage_nominal / current_stall
+    speed_no_load_rps = speed_no_load_rpm / 60.0  # Revolutions per second no load speed
+    speed_no_load = speed_no_load_rps * 2.0 * pi
+    Kt = num_motors * torque_stall / current_stall  # N-m/A torque constant
+    Kv_rpm = speed_no_load_rpm / (
+        voltage_nominal - resistance_motor * current_no_load)  # rpm/V
+    Kv = Kv_rpm * 2.0 * pi / 60.0  # rpm/V
+
+    # Robot Geometry and physics
+    length_proximal_arm = inches_to_meters * 47.34  # m Length of arm connected to the robot base
+    length_distal_arm = inches_to_meters * 44.0  # m Length of arm that holds the cube
+    mass_cube = 6.0 * lbs_to_kg  # Weight of the cube in Kgrams
+    mass_proximal_arm = 5.5 * lbs_to_kg  # Weight of proximal arm
+    mass_distal_arm = 3.5 * lbs_to_kg  # Weight of distal arm
+    mass_distal = mass_cube + mass_distal_arm
+    radius_to_proximal_arm_cg = 22.0 * inches_to_meters  # m Length from arm pivot point to arm CG
+    radius_to_distal_arm_cg = 10.0 * inches_to_meters  # m Length from arm pivot point to arm CG
+
+    radius_to_distal_cg = (
+        length_distal_arm * mass_cube +
+        radius_to_distal_arm_cg * mass_distal_arm) / mass_distal
+    J_cube = length_distal_arm * length_distal_arm * mass_cube
+    J_proximal_arm = radius_to_proximal_arm_cg * radius_to_proximal_arm_cg * mass_distal_arm  # Kg m^2 Moment of inertia of the proximal arm
+    J_distal_arm = radius_to_distal_arm_cg * radius_to_distal_arm_cg * mass_distal_arm  # Kg m^2 Moment of inertia of the distal arm
+    J = J_cube + J_distal_arm  # Moment of inertia of the arm with the cube on the end
+
+    error_margine = 1.0
+    voltage = 10.0  # voltage for the motor.  Assuming a loaded robot so not using 12 V.
+    # It might make sense to use a lower motor frees peed when the voltage is not a full 12 Volts.
+    # motor_free_speed = Kv*voltage
+    motor_free_speed = speed_no_load
+
+    print("# Kt = %f N-m/A\n# Kv_rpm = %f rpm/V\n# Kv = %f radians/V" %
+          (Kt, Kv_rpm, Kv))
+    print("# %.2f Ohms Resistance of the motor " % (resistance_motor))
+    print("# %.2f kg Cube weight" % (mass_cube))
+    print("# %.2f kg Proximal Arm mass" % (mass_proximal_arm))
+    print("# %.2f kg Distal Arm mass" % (mass_distal_arm))
+    print("# %.2f kg Distal Arm and Cube weight" % (mass_distal))
+    print("# %.2f m Length from distal arm pivot point to arm CG" %
+          (radius_to_distal_arm_cg))
+    print("# %.2f m Length from distal arm pivot point to arm and cube cg" %
+          (radius_to_distal_cg))
+    print(
+        "# %.2f kg-m^2 Moment of inertia of the cube about the arm pivot point"
+        % (J_cube))
+    print(
+        "# %.2f kg-m^2 Moment of inertia of the arm with the cube on the end" %
+        (J))
+    print("# %.2f m  Proximal arm length" % (length_proximal_arm))
+    print("# %.2f m  Distal arm length" % (length_distal_arm))
+
+    print(
+        "# %.2f kg-m^2 Moment of inertia of the proximal arm about the arm pivot point"
+        % (J_proximal_arm))
+    print(
+        "# %.2f kg-m^2 Moment of inertia of the distal arm about the arm pivot point"
+        % (J_distal_arm))
+    print(
+        "# %.2f kg-m^2 Moment of inertia of the distal arm and cube about the arm pivot point"
+        % (J))
+    print("# %d Number of motors" % (num_motors))
+
+    print("# %.2f V Motor voltage" % (voltage))
+    for gear_ratio in range(30, 181, 10):
+        c1 = Kt * gear_ratio * gear_ratio / (Kv * resistance_motor * J)
+        c2 = gear_ratio * Kt / (J * resistance_motor)
+        c3 = radius_to_distal_cg * mass_distal * gravity / J
+
+        if (False):
+            print("# %.8f 1/sec C1 constant" % (c1))
+            print("# %.2f 1/sec C2 constant" % (c2))
+            print("# %.2f 1/(V sec^2) C3 constant" % (c3))
+            print("# %.2f RPM Free speed at motor voltage" %
+                  (voltage * Kv_rpm))
+
+        torque_90_degrees = radius_to_distal_cg * mass_distal * gravity
+        voltage_90_degrees = resistance_motor * torque_90_degrees / (
+            gear_ratio * Kt)
+        torque_peak = gear_ratio * num_motors * torque_stall
+        torque_peak_ft_lbs = torque_peak * newton_meters_to_ft_lbs
+        normal_force = torque_peak / length_distal_arm
+        normal_force_lbf = newton_to_lbf * normal_force
+        time_required = get_180_degree_time(c1, c2, c3, voltage, gear_ratio,
+                                            motor_free_speed)
+        print ("Time for %.1f degrees for gear ratio %3.0f is %.2f seconds.  90 degree torque %.1f N-m and voltage %.1f Volts. Peak torque %3.0f nm %3.0f ft-lb Normal force at distal end %3.0f N %2.0f lbf" % \
+          (to_deg(theta_travel),gear_ratio,time_required,torque_90_degrees,voltage_90_degrees,
+           torque_peak,torque_peak_ft_lbs,normal_force,normal_force_lbf))
+
+
 if __name__ == '__main__':
-   main()
+    main()
diff --git a/y2018/control_loops/python/arm_proximal.py b/y2018/control_loops/python/arm_proximal.py
index d40ec8a..4abd1cf 100755
--- a/y2018/control_loops/python/arm_proximal.py
+++ b/y2018/control_loops/python/arm_proximal.py
@@ -3,7 +3,7 @@
 # This code was used to select the gear ratio for the proximal arm.
 # Run it from the command line and it displays the time required
 # to move the proximal arm 180 degrees from straight down to straight up.
-# 
+#
 # Michael Schuh
 # January 20, 2018
 
@@ -14,241 +14,291 @@
 # apt-get install python-scipy python3-scipy python-numpy python3-numpy
 
 pi = math.pi
-pi2 = 2.0*pi
-rad_to_deg = 180.0/pi
+pi2 = 2.0 * pi
+rad_to_deg = 180.0 / pi
 inches_to_meters = 0.0254
-lbs_to_kg = 1.0/2.2
+lbs_to_kg = 1.0 / 2.2
 newton_to_lbf = 0.224809
 newton_meters_to_ft_lbs = 0.73756
 run_count = 0
 theta_travel = 0.0
 
+
 def to_deg(angle):
-  return (angle*rad_to_deg)
+    return (angle * rad_to_deg)
+
 
 def to_rad(angle):
-  return (angle/rad_to_deg)
+    return (angle / rad_to_deg)
+
 
 def to_rotations(angle):
-  return (angle/pi2)
+    return (angle / pi2)
+
 
 def time_derivative(x, t, voltage, c1, c2, c3):
-  global run_count
-  theta, omega = x
-  dxdt = [omega, -c1*omega + c3*math.sin(theta) + c2*voltage]
-  run_count = run_count + 1
+    global run_count
+    theta, omega = x
+    dxdt = [omega, -c1 * omega + c3 * math.sin(theta) + c2 * voltage]
+    run_count = run_count + 1
 
-  #print ('dxdt = ',dxdt,' repr(dxdt) = ', repr(dxdt))
-  return dxdt
+    #print ('dxdt = ',dxdt,' repr(dxdt) = ', repr(dxdt))
+    return dxdt
+
 
 def get_distal_angle(theta_proximal):
-  # For the proximal angle = -50 degrees, the distal angle is -180 degrees
-  # For the proximal angle =  10 degrees, the distal angle is  -90 degrees
-  distal_angle = to_rad(-180.0 - (-50.0-to_deg(theta_proximal))*(180.0-90.0)/(50.0+10.0))
-  return distal_angle
+    # For the proximal angle = -50 degrees, the distal angle is -180 degrees
+    # For the proximal angle =  10 degrees, the distal angle is  -90 degrees
+    distal_angle = to_rad(-180.0 - (-50.0 - to_deg(theta_proximal)) *
+                          (180.0 - 90.0) / (50.0 + 10.0))
+    return distal_angle
+
 
 def get_distal_omega(omega_proximal):
-  # For the proximal angle = -50 degrees, the distal angle is -180 degrees
-  # For the proximal angle =  10 degrees, the distal angle is  -90 degrees
-  distal_angle = omega_proximal*( (180.0-90.0) / (50.0+10.0) )
-  return distal_angle
-  
+    # For the proximal angle = -50 degrees, the distal angle is -180 degrees
+    # For the proximal angle =  10 degrees, the distal angle is  -90 degrees
+    distal_angle = omega_proximal * ((180.0 - 90.0) / (50.0 + 10.0))
+    return distal_angle
 
-def get_180_degree_time(c1,c2,c3,voltage,gear_ratio,motor_free_speed):
-  #print ("# step     time    theta    angular_speed   angular_acceleration  theta   angular_speed  motor_speed motor_speed_fraction")
-  #print ("#          (sec)   (rad)      (rad/sec)        (rad/sec^2)      (rotations) (rotations/sec)    (rpm)   (fraction)")
-  global run_count
-  global theta_travel
 
-  if ( False ):
-    # Gravity is assisting the motion.
-    theta_start = 0.0
-    theta_target = pi
-  elif ( False ):
-    # Gravity is assisting the motion.
-    theta_start = 0.0
-    theta_target = -pi
-  elif ( False ):
-    # Gravity is slowing the motion.
-    theta_start = pi
-    theta_target = 0.0
-  elif ( False ):
-    # Gravity is slowing the motion.
-    theta_start = -pi
-    theta_target = 0.0
-  elif ( True ):
-    # This is for the proximal arm motion.
-    theta_start = to_rad(-50.0)
-    theta_target = to_rad(10.0)
+def get_180_degree_time(c1, c2, c3, voltage, gear_ratio, motor_free_speed):
+    #print ("# step     time    theta    angular_speed   angular_acceleration  theta   angular_speed  motor_speed motor_speed_fraction")
+    #print ("#          (sec)   (rad)      (rad/sec)        (rad/sec^2)      (rotations) (rotations/sec)    (rpm)   (fraction)")
+    global run_count
+    global theta_travel
 
-  theta_half = 0.5*(theta_start + theta_target)
-  if (theta_start > theta_target):
-    voltage = -voltage
-  theta = theta_start
-  theta_travel = theta_start - theta_target 
-  if ( run_count == 0 ):
-    print ("# Theta Start = %.2f radians End = %.2f Theta travel %.2f Theta half = %.2f Voltage = %.2f" % (theta_start,theta_target,theta_travel,theta_half, voltage))
-    print ("# Theta Start = %.2f degrees End = %.2f Theta travel %.2f Theta half = %.2f Voltage = %.2f" % (to_deg(theta_start),to_deg(theta_target),to_deg(theta_travel),to_deg(theta_half), voltage))
-  omega = 0.0
-  time = 0.0
-  delta_time = 0.01 # time step in seconds
-  for step in range(1, 5000):
-     t = numpy.array([time, time + delta_time])
-     time = time + delta_time
-     x = [theta, omega]
-     angular_acceleration = -c1*omega + c2*voltage
-     x_n_plus_1 = scipy.integrate.odeint(time_derivative,x,t,args=(voltage,c1,c2,c3))
-     #print ('x_n_plus_1 = ',x_n_plus_1)
-     #print ('repr(x_n_plus_1) = ',repr(x_n_plus_1))
-     theta, omega = x_n_plus_1[1]
-     #theta= x_n_plus_1[0]
-     #omega = x_n_plus_1[1]
-     if ( False ):
-       print ("%4d  %8.4f %8.2f          %8.4f          %8.4f    %8.3f    %8.3f     %8.3f      %8.3f" % \
-         (step, time, theta, omega, angular_acceleration, to_rotations(theta), \
-         to_rotations(omega), omega*gear_ratio*60.0/pi2, omega*gear_ratio/motor_free_speed ))
-     if (theta_start < theta_target):
-       # Angle is increasing through the motion.
-       if (theta > theta_half):
-         break
-     else:
-       # Angle is decreasing through the motion.
-       if (theta < theta_half):
-         break
-       
-  #print ("# step     time    theta    angular_speed   angular_acceleration  theta   angular_speed  motor_speed motor_speed_fraction")
-  #print ("#          (sec)   (rad)      (rad/sec)        (rad/sec^2)      (rotations) (rotations/sec)    (rpm)   (fraction)")
-  #print ("# Total time for 1/2 rotation of arm is %0.2f" % (time*2))
-  return (2.0*time)
+    if (False):
+        # Gravity is assisting the motion.
+        theta_start = 0.0
+        theta_target = pi
+    elif (False):
+        # Gravity is assisting the motion.
+        theta_start = 0.0
+        theta_target = -pi
+    elif (False):
+        # Gravity is slowing the motion.
+        theta_start = pi
+        theta_target = 0.0
+    elif (False):
+        # Gravity is slowing the motion.
+        theta_start = -pi
+        theta_target = 0.0
+    elif (True):
+        # This is for the proximal arm motion.
+        theta_start = to_rad(-50.0)
+        theta_target = to_rad(10.0)
+
+    theta_half = 0.5 * (theta_start + theta_target)
+    if (theta_start > theta_target):
+        voltage = -voltage
+    theta = theta_start
+    theta_travel = theta_start - theta_target
+    if (run_count == 0):
+        print(
+            "# Theta Start = %.2f radians End = %.2f Theta travel %.2f Theta half = %.2f Voltage = %.2f"
+            % (theta_start, theta_target, theta_travel, theta_half, voltage))
+        print(
+            "# Theta Start = %.2f degrees End = %.2f Theta travel %.2f Theta half = %.2f Voltage = %.2f"
+            % (to_deg(theta_start), to_deg(theta_target), to_deg(theta_travel),
+               to_deg(theta_half), voltage))
+    omega = 0.0
+    time = 0.0
+    delta_time = 0.01  # time step in seconds
+    for step in range(1, 5000):
+        t = numpy.array([time, time + delta_time])
+        time = time + delta_time
+        x = [theta, omega]
+        angular_acceleration = -c1 * omega + c2 * voltage
+        x_n_plus_1 = scipy.integrate.odeint(time_derivative,
+                                            x,
+                                            t,
+                                            args=(voltage, c1, c2, c3))
+        #print ('x_n_plus_1 = ',x_n_plus_1)
+        #print ('repr(x_n_plus_1) = ',repr(x_n_plus_1))
+        theta, omega = x_n_plus_1[1]
+        #theta= x_n_plus_1[0]
+        #omega = x_n_plus_1[1]
+        if (False):
+            print ("%4d  %8.4f %8.2f          %8.4f          %8.4f    %8.3f    %8.3f     %8.3f      %8.3f" % \
+              (step, time, theta, omega, angular_acceleration, to_rotations(theta), \
+              to_rotations(omega), omega*gear_ratio*60.0/pi2, omega*gear_ratio/motor_free_speed ))
+        if (theta_start < theta_target):
+            # Angle is increasing through the motion.
+            if (theta > theta_half):
+                break
+        else:
+            # Angle is decreasing through the motion.
+            if (theta < theta_half):
+                break
+
+    #print ("# step     time    theta    angular_speed   angular_acceleration  theta   angular_speed  motor_speed motor_speed_fraction")
+    #print ("#          (sec)   (rad)      (rad/sec)        (rad/sec^2)      (rotations) (rotations/sec)    (rpm)   (fraction)")
+    #print ("# Total time for 1/2 rotation of arm is %0.2f" % (time*2))
+    return (2.0 * time)
+
 
 def main():
-  global run_count
-  gravity = 9.8 # m/sec^2 Gravity Constant
-  voltage_nominal = 12 # Volts
-  
-  # Vex 775 Pro motor specs from http://banebots.com/p/M2-RS550-120
-  motor_name = "Vex 775 Pro motor specs from http://banebots.com/p/M2-RS550-120"
-  current_stall = 134 # amps stall current
-  current_no_load = 0.7 # amps no load current
-  torque_stall = 710/1000.0 # N-m Stall Torque
-  speed_no_load_rpm = 18730 # RPM no load speed
-  
-  if ( False ):
-    # Bag motor from https://www.vexrobotics.com/217-3351.html
-    motor_name = "Bag motor from https://www.vexrobotics.com/217-3351.html"
-    current_stall = 53.0 # amps stall current
-    current_no_load = 1.8 # amps no load current
-    torque_stall = 0.4 # N-m Stall Torque
-    speed_no_load_rpm = 13180.0 # RPM no load speed
-  
-  if ( True ):
-    # Mini CIM motor from https://www.vexrobotics.com/217-3371.html
-    motor_name = "Mini CIM motor from https://www.vexrobotics.com/217-3371.html"
-    current_stall = 89.0 # amps stall current
-    current_no_load = 3.0 # amps no load current
-    torque_stall = 1.4 # N-m Stall Torque
-    speed_no_load_rpm = 5840.0 # RPM no load speed
+    global run_count
+    gravity = 9.8  # m/sec^2 Gravity Constant
+    voltage_nominal = 12  # Volts
 
-  # How many motors are we using?
-  num_motors = 1
+    # Vex 775 Pro motor specs from http://banebots.com/p/M2-RS550-120
+    motor_name = "Vex 775 Pro motor specs from http://banebots.com/p/M2-RS550-120"
+    current_stall = 134  # amps stall current
+    current_no_load = 0.7  # amps no load current
+    torque_stall = 710 / 1000.0  # N-m Stall Torque
+    speed_no_load_rpm = 18730  # RPM no load speed
 
-  # Motor values
-  print ("# Motor: %s" % (motor_name))
-  print ("# Number of motors: %d" % (num_motors))
-  print ("# Stall torque: %.1f n-m" % (torque_stall))
-  print ("# Stall current: %.1f amps" % (current_stall))
-  print ("# No load current: %.1f amps" % (current_no_load))
-  print ("# No load speed: %.0f rpm" % (speed_no_load_rpm))
-  
-  # Constants from motor values
-  resistance_motor = voltage_nominal/current_stall 
-  speed_no_load_rps = speed_no_load_rpm/60.0 # Revolutions per second no load speed
-  speed_no_load = speed_no_load_rps*2.0*pi
-  Kt = num_motors*torque_stall/current_stall # N-m/A torque constant
-  Kv_rpm = speed_no_load_rpm /(voltage_nominal - resistance_motor*current_no_load)  # rpm/V
-  Kv = Kv_rpm*2.0*pi/60.0 # rpm/V
-  
-  # Robot Geometry and physics
-  length_proximal_arm = inches_to_meters*47.34 # m Length of arm connected to the robot base
-  length_distal_arm = inches_to_meters*44.0 # m Length of arm that holds the cube
-  mass_cube = 6.0*lbs_to_kg  # Weight of the cube in Kgrams
-  mass_proximal_arm = 5.5*lbs_to_kg # Weight of proximal arm
-  mass_distal_arm = 3.5*lbs_to_kg # Weight of distal arm
-  mass_distal = mass_cube + mass_distal_arm
-  mass_proximal = mass_proximal_arm + mass_distal
-  radius_to_proximal_arm_cg = 22.0*inches_to_meters # m Length from arm pivot point to arm CG
-  radius_to_distal_arm_cg = 10.0*inches_to_meters # m Length from arm pivot point to arm CG
+    if (False):
+        # Bag motor from https://www.vexrobotics.com/217-3351.html
+        motor_name = "Bag motor from https://www.vexrobotics.com/217-3351.html"
+        current_stall = 53.0  # amps stall current
+        current_no_load = 1.8  # amps no load current
+        torque_stall = 0.4  # N-m Stall Torque
+        speed_no_load_rpm = 13180.0  # RPM no load speed
 
-  radius_to_distal_cg = ( length_distal_arm*mass_cube + radius_to_distal_arm_cg*mass_distal_arm)/mass_distal
-  radius_to_proximal_cg = ( length_proximal_arm*mass_distal + radius_to_proximal_arm_cg*mass_proximal_arm)/mass_proximal
-  J_cube = length_distal_arm*length_distal_arm*mass_cube 
-  # Kg m^2 Moment of inertia of the proximal arm
-  J_proximal_arm = radius_to_proximal_arm_cg*radius_to_proximal_arm_cg*mass_distal_arm 
-  # Kg m^2 Moment of inertia distal arm and cube at end of proximal arm.
-  J_distal_arm_and_cube_at_end_of_proximal_arm = length_proximal_arm*length_proximal_arm*mass_distal 
-  J_distal_arm = radius_to_distal_arm_cg*radius_to_distal_arm_cg*mass_distal_arm # Kg m^2 Moment of inertia of the distal arm
-  J = J_distal_arm_and_cube_at_end_of_proximal_arm + J_proximal_arm # Moment of inertia of the arm with the cube on the end
+    if (True):
+        # Mini CIM motor from https://www.vexrobotics.com/217-3371.html
+        motor_name = "Mini CIM motor from https://www.vexrobotics.com/217-3371.html"
+        current_stall = 89.0  # amps stall current
+        current_no_load = 3.0  # amps no load current
+        torque_stall = 1.4  # N-m Stall Torque
+        speed_no_load_rpm = 5840.0  # RPM no load speed
 
-  error_margine = 1.0
-  voltage = 10.0 # voltage for the motor.  Assuming a loaded robot so not using 12 V.
-  # It might make sense to use a lower motor frees peed when the voltage is not a full 12 Volts.
-  # motor_free_speed = Kv*voltage
-  motor_free_speed = speed_no_load
-  
-  print ("# Kt = %f N-m/A\n# Kv_rpm = %f rpm/V\n# Kv = %f radians/V" % (Kt, Kv_rpm, Kv))
-  print ("# %.2f Ohms Resistance of the motor " % (resistance_motor))
-  print ("# %.2f kg Cube weight" % (mass_cube))
-  print ("# %.2f kg Proximal Arm mass" % (mass_proximal_arm))
-  print ("# %.2f kg Distal Arm mass" % (mass_distal_arm))
-  print ("# %.2f kg Distal Arm and Cube weight" % (mass_distal))
-  print ("# %.2f m Length from distal arm pivot point to arm CG" % (radius_to_distal_arm_cg))
-  print ("# %.2f m Length from distal arm pivot point to arm and cube cg" % (radius_to_distal_cg))
-  print ("# %.2f kg-m^2 Moment of inertia of the cube about the arm pivot point" % (J_cube))
-  print ("# %.2f m Length from proximal arm pivot point to arm CG" % (radius_to_proximal_arm_cg))
-  print ("# %.2f m Length from proximal arm pivot point to arm and cube cg" % (radius_to_proximal_cg))
-  print ("# %.2f m  Proximal arm length" % (length_proximal_arm))
-  print ("# %.2f m  Distal arm length" % (length_distal_arm))
+    # How many motors are we using?
+    num_motors = 1
 
-  print ("# %.2f kg-m^2 Moment of inertia of the distal arm about the arm pivot point" % (J_distal_arm))
-  print ("# %.2f kg-m^2 Moment of inertia of the proximal arm about the arm pivot point" % (J_proximal_arm))
-  print ("# %.2f kg-m^2 Moment of inertia of the distal arm and cube mass about the proximal arm pivot point" % (J_distal_arm_and_cube_at_end_of_proximal_arm))
-  print ("# %.2f kg-m^2 Moment of inertia of the proximal arm and distal arm and cube about the arm pivot point" % (J))
-  print ("# %d Number of motors" % (num_motors))
-  
-  print ("# %.2f V Motor voltage" % (voltage))
+    # Motor values
+    print("# Motor: %s" % (motor_name))
+    print("# Number of motors: %d" % (num_motors))
+    print("# Stall torque: %.1f n-m" % (torque_stall))
+    print("# Stall current: %.1f amps" % (current_stall))
+    print("# No load current: %.1f amps" % (current_no_load))
+    print("# No load speed: %.0f rpm" % (speed_no_load_rpm))
 
-  print ("\n# Min time is for proximal arm without any forces from distal arm.  Max time puts all distal arm mass at the end of proximal arm.")
+    # Constants from motor values
+    resistance_motor = voltage_nominal / current_stall
+    speed_no_load_rps = speed_no_load_rpm / 60.0  # Revolutions per second no load speed
+    speed_no_load = speed_no_load_rps * 2.0 * pi
+    Kt = num_motors * torque_stall / current_stall  # N-m/A torque constant
+    Kv_rpm = speed_no_load_rpm / (
+        voltage_nominal - resistance_motor * current_no_load)  # rpm/V
+    Kv = Kv_rpm * 2.0 * pi / 60.0  # rpm/V
 
-  for gear_ratio in range(60, 241, 10):
-    c1 = Kt*gear_ratio*gear_ratio/(Kv*resistance_motor*J)
-    c2 = gear_ratio*Kt/(J*resistance_motor)
-    c3 = radius_to_proximal_cg*mass_proximal*gravity/J
-    c1_proximal_only = Kt*gear_ratio*gear_ratio/(Kv*resistance_motor*J_proximal_arm)
-    c2_proximal_only = gear_ratio*Kt/(J_proximal_arm*resistance_motor)
-    c3_proximal_only = radius_to_proximal_arm_cg*mass_proximal_arm*gravity/J_proximal_arm
-  
-    if ( False and run_count < 1 ):
-      print ("# %.8f 1/sec C1 constant" % (c1))
-      print ("# %.2f 1/sec C2 constant" % (c2))
-      print ("# %.2f 1/(V sec^2) C3 constant" % (c3))
-      print ("# %.8f 1/sec C1 proximal only constant" % (c1_proximal_only))
-      print ("# %.2f 1/sec C2 proximal only constant" % (c2_proximal_only))
-      print ("# %.2f 1/(V sec^2) C3 proximal only constant" % (c3_proximal_only))
-      print ("# %.2f RPM Free speed at motor voltage" % (voltage*Kv_rpm))
-  
-    torque_90_degrees = radius_to_proximal_cg*mass_proximal*gravity
-    voltage_90_degrees = resistance_motor*torque_90_degrees/(gear_ratio*Kt)
-    torque_peak = gear_ratio*num_motors*torque_stall
-    torque_peak_ft_lbs = torque_peak * newton_meters_to_ft_lbs
-    normal_force = torque_peak/length_proximal_arm
-    normal_force_lbf = newton_to_lbf*normal_force 
-    normal_distal_arm_end_force = torque_peak/(length_proximal_arm + length_distal_arm)
-    normal_distal_arm_end_force_lbf = newton_to_lbf*normal_distal_arm_end_force 
-    time_required = get_180_degree_time(c1,c2,c3,voltage,gear_ratio,motor_free_speed)
-    time_required_proximal_only = get_180_degree_time(c1_proximal_only,c2_proximal_only,c3_proximal_only,voltage,gear_ratio,motor_free_speed)
-    print ("Time for %.1f degrees for gear ratio %3.0f is %.2f (min) %.2f (max) seconds.  90 degree torque %.1f N-m and voltage %.1f Volts. Peak torque %3.0f nm %3.0f ft-lb Normal force at proximal end %3.0f N %2.0f lbf distal end %3.0f N %2.0f lbf" % \
-      (to_deg(theta_travel),gear_ratio,time_required_proximal_only,time_required,torque_90_degrees,voltage_90_degrees,
-       torque_peak,torque_peak_ft_lbs,normal_force,normal_force_lbf,normal_distal_arm_end_force,normal_distal_arm_end_force_lbf))
-  
+    # Robot Geometry and physics
+    length_proximal_arm = inches_to_meters * 47.34  # m Length of arm connected to the robot base
+    length_distal_arm = inches_to_meters * 44.0  # m Length of arm that holds the cube
+    mass_cube = 6.0 * lbs_to_kg  # Weight of the cube in Kgrams
+    mass_proximal_arm = 5.5 * lbs_to_kg  # Weight of proximal arm
+    mass_distal_arm = 3.5 * lbs_to_kg  # Weight of distal arm
+    mass_distal = mass_cube + mass_distal_arm
+    mass_proximal = mass_proximal_arm + mass_distal
+    radius_to_proximal_arm_cg = 22.0 * inches_to_meters  # m Length from arm pivot point to arm CG
+    radius_to_distal_arm_cg = 10.0 * inches_to_meters  # m Length from arm pivot point to arm CG
+
+    radius_to_distal_cg = (
+        length_distal_arm * mass_cube +
+        radius_to_distal_arm_cg * mass_distal_arm) / mass_distal
+    radius_to_proximal_cg = (
+        length_proximal_arm * mass_distal +
+        radius_to_proximal_arm_cg * mass_proximal_arm) / mass_proximal
+    J_cube = length_distal_arm * length_distal_arm * mass_cube
+    # Kg m^2 Moment of inertia of the proximal arm
+    J_proximal_arm = radius_to_proximal_arm_cg * radius_to_proximal_arm_cg * mass_distal_arm
+    # Kg m^2 Moment of inertia distal arm and cube at end of proximal arm.
+    J_distal_arm_and_cube_at_end_of_proximal_arm = length_proximal_arm * length_proximal_arm * mass_distal
+    J_distal_arm = radius_to_distal_arm_cg * radius_to_distal_arm_cg * mass_distal_arm  # Kg m^2 Moment of inertia of the distal arm
+    J = J_distal_arm_and_cube_at_end_of_proximal_arm + J_proximal_arm  # Moment of inertia of the arm with the cube on the end
+
+    error_margine = 1.0
+    voltage = 10.0  # voltage for the motor.  Assuming a loaded robot so not using 12 V.
+    # It might make sense to use a lower motor frees peed when the voltage is not a full 12 Volts.
+    # motor_free_speed = Kv*voltage
+    motor_free_speed = speed_no_load
+
+    print("# Kt = %f N-m/A\n# Kv_rpm = %f rpm/V\n# Kv = %f radians/V" %
+          (Kt, Kv_rpm, Kv))
+    print("# %.2f Ohms Resistance of the motor " % (resistance_motor))
+    print("# %.2f kg Cube weight" % (mass_cube))
+    print("# %.2f kg Proximal Arm mass" % (mass_proximal_arm))
+    print("# %.2f kg Distal Arm mass" % (mass_distal_arm))
+    print("# %.2f kg Distal Arm and Cube weight" % (mass_distal))
+    print("# %.2f m Length from distal arm pivot point to arm CG" %
+          (radius_to_distal_arm_cg))
+    print("# %.2f m Length from distal arm pivot point to arm and cube cg" %
+          (radius_to_distal_cg))
+    print(
+        "# %.2f kg-m^2 Moment of inertia of the cube about the arm pivot point"
+        % (J_cube))
+    print("# %.2f m Length from proximal arm pivot point to arm CG" %
+          (radius_to_proximal_arm_cg))
+    print("# %.2f m Length from proximal arm pivot point to arm and cube cg" %
+          (radius_to_proximal_cg))
+    print("# %.2f m  Proximal arm length" % (length_proximal_arm))
+    print("# %.2f m  Distal arm length" % (length_distal_arm))
+
+    print(
+        "# %.2f kg-m^2 Moment of inertia of the distal arm about the arm pivot point"
+        % (J_distal_arm))
+    print(
+        "# %.2f kg-m^2 Moment of inertia of the proximal arm about the arm pivot point"
+        % (J_proximal_arm))
+    print(
+        "# %.2f kg-m^2 Moment of inertia of the distal arm and cube mass about the proximal arm pivot point"
+        % (J_distal_arm_and_cube_at_end_of_proximal_arm))
+    print(
+        "# %.2f kg-m^2 Moment of inertia of the proximal arm and distal arm and cube about the arm pivot point"
+        % (J))
+    print("# %d Number of motors" % (num_motors))
+
+    print("# %.2f V Motor voltage" % (voltage))
+
+    print(
+        "\n# Min time is for proximal arm without any forces from distal arm.  Max time puts all distal arm mass at the end of proximal arm."
+    )
+
+    for gear_ratio in range(60, 241, 10):
+        c1 = Kt * gear_ratio * gear_ratio / (Kv * resistance_motor * J)
+        c2 = gear_ratio * Kt / (J * resistance_motor)
+        c3 = radius_to_proximal_cg * mass_proximal * gravity / J
+        c1_proximal_only = Kt * gear_ratio * gear_ratio / (
+            Kv * resistance_motor * J_proximal_arm)
+        c2_proximal_only = gear_ratio * Kt / (J_proximal_arm *
+                                              resistance_motor)
+        c3_proximal_only = radius_to_proximal_arm_cg * mass_proximal_arm * gravity / J_proximal_arm
+
+        if (False and run_count < 1):
+            print("# %.8f 1/sec C1 constant" % (c1))
+            print("# %.2f 1/sec C2 constant" % (c2))
+            print("# %.2f 1/(V sec^2) C3 constant" % (c3))
+            print("# %.8f 1/sec C1 proximal only constant" %
+                  (c1_proximal_only))
+            print("# %.2f 1/sec C2 proximal only constant" %
+                  (c2_proximal_only))
+            print("# %.2f 1/(V sec^2) C3 proximal only constant" %
+                  (c3_proximal_only))
+            print("# %.2f RPM Free speed at motor voltage" %
+                  (voltage * Kv_rpm))
+
+        torque_90_degrees = radius_to_proximal_cg * mass_proximal * gravity
+        voltage_90_degrees = resistance_motor * torque_90_degrees / (
+            gear_ratio * Kt)
+        torque_peak = gear_ratio * num_motors * torque_stall
+        torque_peak_ft_lbs = torque_peak * newton_meters_to_ft_lbs
+        normal_force = torque_peak / length_proximal_arm
+        normal_force_lbf = newton_to_lbf * normal_force
+        normal_distal_arm_end_force = torque_peak / (length_proximal_arm +
+                                                     length_distal_arm)
+        normal_distal_arm_end_force_lbf = newton_to_lbf * normal_distal_arm_end_force
+        time_required = get_180_degree_time(c1, c2, c3, voltage, gear_ratio,
+                                            motor_free_speed)
+        time_required_proximal_only = get_180_degree_time(
+            c1_proximal_only, c2_proximal_only, c3_proximal_only, voltage,
+            gear_ratio, motor_free_speed)
+        print ("Time for %.1f degrees for gear ratio %3.0f is %.2f (min) %.2f (max) seconds.  90 degree torque %.1f N-m and voltage %.1f Volts. Peak torque %3.0f nm %3.0f ft-lb Normal force at proximal end %3.0f N %2.0f lbf distal end %3.0f N %2.0f lbf" % \
+          (to_deg(theta_travel),gear_ratio,time_required_proximal_only,time_required,torque_90_degrees,voltage_90_degrees,
+           torque_peak,torque_peak_ft_lbs,normal_force,normal_force_lbf,normal_distal_arm_end_force,normal_distal_arm_end_force_lbf))
+
+
 if __name__ == '__main__':
-   main()
+    main()
diff --git a/y2018/control_loops/python/arm_trajectory.py b/y2018/control_loops/python/arm_trajectory.py
index bcfd9f0..9db7717 100755
--- a/y2018/control_loops/python/arm_trajectory.py
+++ b/y2018/control_loops/python/arm_trajectory.py
@@ -20,6 +20,7 @@
 
 
 class Dynamics(object):
+
     def __init__(self, dt):
         self.dt = dt
 
@@ -61,29 +62,30 @@
             [[self.G1 * self.Kt / self.R, 0.0],
              [0.0, self.G2 * self.kNumDistalMotors * self.Kt / self.R]])
         self.K4 = numpy.matrix(
-            [[self.G1 * self.G1 * self.Kt / (self.Kv * self.R), 0.0], [
-                0.0, self.G2 * self.G2 * self.Kt * self.kNumDistalMotors /
-                (self.Kv * self.R)
-            ]])
+            [[self.G1 * self.G1 * self.Kt / (self.Kv * self.R), 0.0],
+             [
+                 0.0, self.G2 * self.G2 * self.Kt * self.kNumDistalMotors /
+                 (self.Kv * self.R)
+             ]])
 
         # These constants are for the Extended Kalman Filter
         # Q is the covariance of the X values.  Use the square of the standard
         # deviation of the error accumulated each time step.
-        self.Q_x_covariance = numpy.matrix([[0.001**2,0.0,0.0,0.0,0.0,0.0],
-                                       [0.0,0.001**2,0.0,0.0,0.0,0.0],
-                                       [0.0,0.0,0.001**2,0.0,0.0,0.0],
-                                       [0.0,0.0,0.0,0.001**2,0.0,0.0],
-                                       [0.0,0.0,0.0,0.0,10.0**2,0.0],
-                                       [0.0,0.0,0.0,0.0,0.0,10.0**2]])
+        self.Q_x_covariance = numpy.matrix(
+            [[0.001**2, 0.0, 0.0, 0.0, 0.0, 0.0],
+             [0.0, 0.001**2, 0.0, 0.0, 0.0, 0.0],
+             [0.0, 0.0, 0.001**2, 0.0, 0.0, 0.0],
+             [0.0, 0.0, 0.0, 0.001**2, 0.0, 0.0],
+             [0.0, 0.0, 0.0, 0.0, 10.0**2, 0.0],
+             [0.0, 0.0, 0.0, 0.0, 0.0, 10.0**2]])
         # R is the covariance of the Z values.  Increase the responsiveness to
         # changes by reducing coresponding term in the R matrix.
-        self.R_y_covariance = numpy.matrix([[0.01**2, 0.0],[0.0, 0.01**2]])
+        self.R_y_covariance = numpy.matrix([[0.01**2, 0.0], [0.0, 0.01**2]])
         # H is the jacobian of the h(x) measurement prediction function
-        self.H_h_jacobian = numpy.matrix([[1.0,0.0,0.0,0.0,0.0,0.0],
-                                          [0.0,0.0,1.0,0.0,0.0,0.0]])
+        self.H_h_jacobian = numpy.matrix([[1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
+                                          [0.0, 0.0, 1.0, 0.0, 0.0, 0.0]])
         self.Identity_matrix = numpy.matrix(numpy.identity(6))
 
-
     def discrete_dynamics_ekf_predict(self, X_hat, P_covariance_estimate, U,
                                       sim_dt):
         """Updates the Extended Kalman Filter state for one timestep.
@@ -108,8 +110,8 @@
         # Predict step
         #   Compute the state trasition matrix using the Jacobian of state
         #   estimate
-        F_k = numerical_jacobian_x(self.unbounded_discrete_dynamics_ekf,
-          X_hat, U)
+        F_k = numerical_jacobian_x(self.unbounded_discrete_dynamics_ekf, X_hat,
+                                   U)
         #   State estimate
         X_hat = self.unbounded_discrete_dynamics_ekf(X_hat, U, sim_dt)
         #   Covariance estimate
@@ -134,7 +136,7 @@
         # Update step
         #   Measurement residual error of proximal and distal
         #   joint angles.
-        Y_hat = Y_reading - numpy.matrix([[X_hat[0,0]],[X_hat[2,0]]])
+        Y_hat = Y_reading - numpy.matrix([[X_hat[0, 0]], [X_hat[2, 0]]])
         #   Residual covariance
         S = self.H_h_jacobian * P_covariance_estimate * self.H_h_jacobian.T + \
           self.R_y_covariance
@@ -144,8 +146,8 @@
         #   Updated state estimate
         X_hat = X_hat + Kalman_gain * Y_hat
         #   Updated covariance estimate
-        P_covariance_estimate = (self.Identity_matrix -
-          Kalman_gain * self.H_h_jacobian) * P_covariance_estimate
+        P_covariance_estimate = (self.Identity_matrix - Kalman_gain *
+                                 self.H_h_jacobian) * P_covariance_estimate
         return X_hat, P_covariance_estimate
 
     def NormilizedMatriciesForState(self, X):
@@ -158,8 +160,8 @@
         c = numpy.cos(X[0, 0] - X[2, 0])
 
         # K1 * d^2 theta/dt^2 + K2 * d theta/dt = torque
-        K1 = numpy.matrix(
-            [[self.alpha, c * self.beta], [c * self.beta, self.gamma]])
+        K1 = numpy.matrix([[self.alpha, c * self.beta],
+                           [c * self.beta, self.gamma]])
 
         K2 = numpy.matrix([[0.0, s * self.beta], [-s * self.beta, 0.0]])
 
@@ -183,8 +185,8 @@
         """
         K1, K2, K3, K4 = self.MatriciesForState(X)
 
-        return numpy.linalg.inv(K3) * (
-            K1 * alpha_t + K2 * omega_t + K4 * omega_t)
+        return numpy.linalg.inv(K3) * (K1 * alpha_t + K2 * omega_t +
+                                       K4 * omega_t)
 
     def ff_u_distance(self, trajectory, distance):
         """Computes the feed forward U at the distance on the trajectory.
@@ -252,15 +254,15 @@
                              [accel[1, 0]], [0.0], [0.0]])
 
     def unbounded_discrete_dynamics(self, X, U, dt=None):
-        return RungeKutta(lambda startingX: self.dynamics(startingX, U), X,
-                          dt or self.dt)
+        return RungeKutta(lambda startingX: self.dynamics(startingX, U), X, dt
+                          or self.dt)
 
     def unbounded_discrete_dynamics_ekf(self, X, U, dt=None):
         return RungeKutta(lambda startingX: self.dynamics_ekf(startingX, U), X,
                           dt or self.dt)
 
     def discrete_dynamics(self, X, U, dt=None):
-        assert((numpy.abs(U) <= (12.0 + 1e-6)).all())
+        assert ((numpy.abs(U) <= (12.0 + 1e-6)).all())
         return self.unbounded_discrete_dynamics(X, U, dt)
 
 
@@ -324,8 +326,8 @@
     q_vel = 4.0
     Q = numpy.matrix(
         numpy.diag([
-            1.0 / (q_pos**2.0), 1.0 / (q_vel**2.0), 1.0 / (q_pos**2.0), 1.0 / (
-                q_vel**2.0)
+            1.0 / (q_pos**2.0), 1.0 / (q_vel**2.0), 1.0 / (q_pos**2.0),
+            1.0 / (q_vel**2.0)
         ]))
 
     R = numpy.matrix(numpy.diag([1.0 / (12.0**2.0), 1.0 / (12.0**2.0)]))
@@ -335,19 +337,21 @@
 
     return controls.dlqr(final_A, final_B, Q, R)
 
+
 def get_encoder_values(X):
-  """Returns simulated encoder readings.
+    """Returns simulated encoder readings.
 
   This method returns the encoder readings.  For now simply use values from X
   with some noise added in to make the simulation more interesting.
   """
-  introduced_random_measurement_noise = 0.005
-  introduced_random_measurement_noise = 0.05
-  theta1_measured = X[0,0] + introduced_random_measurement_noise * \
-    2.0 * ( numpy.random.random() - 0.5 )
-  theta2_measured = X[2,0] + introduced_random_measurement_noise * \
-    2.0 * ( numpy.random.random() - 0.5 )
-  return numpy.matrix([[theta1_measured ],[theta2_measured]])
+    introduced_random_measurement_noise = 0.005
+    introduced_random_measurement_noise = 0.05
+    theta1_measured = X[0,0] + introduced_random_measurement_noise * \
+      2.0 * ( numpy.random.random() - 0.5 )
+    theta2_measured = X[2,0] + introduced_random_measurement_noise * \
+      2.0 * ( numpy.random.random() - 0.5 )
+    return numpy.matrix([[theta1_measured], [theta2_measured]])
+
 
 class Trajectory:
     """This class represents a trajectory in theta space."""
@@ -358,8 +362,12 @@
             numpy.matrix([[numpy.pi / 2.0 - x[0]], [numpy.pi / 2.0 - x[1]]])
             for x in self.path_points
         ]
-        self._omegas = [numpy.matrix([[-x[2]], [-x[3]]]) for x in self.path_points]
-        self._alphas = [numpy.matrix([[-x[4]], [-x[5]]]) for x in self.path_points]
+        self._omegas = [
+            numpy.matrix([[-x[2]], [-x[3]]]) for x in self.path_points
+        ]
+        self._alphas = [
+            numpy.matrix([[-x[4]], [-x[5]]]) for x in self.path_points
+        ]
         self.path_step_size = path_step_size
         self.point_distances = [0.0]
         last_point = self._thetas[0]
@@ -389,8 +397,9 @@
             return points[0]
         elif distance >= self._length:
             return points[-1]
-        after_index = numpy.searchsorted(
-            self.point_distances, distance, side='right')
+        after_index = numpy.searchsorted(self.point_distances,
+                                         distance,
+                                         side='right')
         before_index = after_index - 1
         return (distance - self.point_distances[before_index]) / (
             self.point_distances[after_index] -
@@ -420,15 +429,15 @@
             alpha = self.alpha(distance)
             X = numpy.matrix([[theta[0, 0]], [0.0], [theta[1, 0]], [0.0]])
             K1, K2, K3, K4 = dynamics.NormilizedMatriciesForState(X)
-            omega_square = numpy.matrix(
-                [[omega[0, 0], 0.0], [0.0, omega[1, 0]]])
+            omega_square = numpy.matrix([[omega[0, 0], 0.0],
+                                         [0.0, omega[1, 0]]])
             # Here, we can say that
             #   d^2/dt^2 theta = d^2/dd^2 theta(d) * (d d/dt)^2
             # Normalize so that the max accel is 1, and take magnitudes. This
             # gives us the max velocity we can be at each point due to
             # curvature.
-            vk1 = numpy.linalg.inv(K3) * (
-                K1 * alpha + K2 * omega_square * omega)
+            vk1 = numpy.linalg.inv(K3) * (K1 * alpha +
+                                          K2 * omega_square * omega)
             vk2 = numpy.linalg.inv(K3) * K4 * omega
             ddots = []
             for c in [-vmax, vmax]:
@@ -470,8 +479,8 @@
 
         voltage_accel_list = []
         for c in [-vmax, vmax]:
-            for a, b in [(k_constant[0, 0], k_scalar[0, 0]), (k_constant[1, 0],
-                                                              k_scalar[1, 0])]:
+            for a, b in [(k_constant[0, 0], k_scalar[0, 0]),
+                         (k_constant[1, 0], k_scalar[1, 0])]:
                 # This time, we are doing the other pass.  So, find all
                 # the decelerations (and flip them) to find the prior
                 # velocity.
@@ -483,14 +492,16 @@
                 filtered_voltage_accel_list.append(a)
 
         goal_acceleration = numpy.sqrt(
-            max(0.0, 1.0 -
+            max(
+                0.0, 1.0 -
                 (numpy.linalg.norm(alpha_unitizer * alpha) * velocity *
                  velocity)**2.0)) / numpy.linalg.norm(alpha_unitizer * omega)
         if filtered_voltage_accel_list:
             # TODO(austin): The max of the list seems right, but I'm
             # not seeing many lists with a size > 1, so it's hard to
             # tell.  Max is conservative, for sure.
-            goal_acceleration = min(-max(filtered_voltage_accel_list), goal_acceleration)
+            goal_acceleration = min(-max(filtered_voltage_accel_list),
+                                    goal_acceleration)
         return goal_acceleration
 
     def back_trajectory_pass(self, previous_pass, dynamics, alpha_unitizer,
@@ -516,8 +527,8 @@
 
                 integration_step_size = self.path_step_size / float(num_steps)
                 int_d += integration_step_size
-                int_vel = numpy.sqrt(2.0 * int_accel_t * integration_step_size
-                                     + int_vel * int_vel)
+                int_vel = numpy.sqrt(2.0 * int_accel_t *
+                                     integration_step_size + int_vel * int_vel)
             max_dvelocity_back_pass[index] = min(
                 int_vel, max_dvelocity_back_pass[index])
         return max_dvelocity_back_pass
@@ -539,17 +550,18 @@
         omega_square = numpy.matrix([[omega[0, 0], 0.0], [0.0, omega[1, 0]]])
 
         k_constant = numpy.linalg.inv(K3) * (
-            (K1 * alpha + K2 * omega_square * omega
-             ) * goal_velocity * goal_velocity + K4 * omega * goal_velocity)
+            (K1 * alpha + K2 * omega_square * omega) * goal_velocity *
+            goal_velocity + K4 * omega * goal_velocity)
         k_scalar = numpy.linalg.inv(K3) * K1 * omega
         voltage_accel_list = []
         for c in [-vmax, vmax]:
-            for a, b in [(k_constant[0, 0], k_scalar[0, 0]), (k_constant[1, 0],
-                                                              k_scalar[1, 0])]:
+            for a, b in [(k_constant[0, 0], k_scalar[0, 0]),
+                         (k_constant[1, 0], k_scalar[1, 0])]:
                 voltage_accel_list.append((c - a) / b)
 
         goal_acceleration = numpy.sqrt(
-            max(0.0, 1.0 -
+            max(
+                0.0, 1.0 -
                 (numpy.linalg.norm(alpha_unitizer * alpha) * goal_velocity *
                  goal_velocity)**2.0)) / numpy.linalg.norm(
                      alpha_unitizer * omega)
@@ -564,8 +576,8 @@
             # TODO(austin): The max of the list seems right, but I'm not
             # seeing many lists with a size > 1, so it's hard to tell.
             # Min is conservative, for sure.
-            goal_acceleration = min(
-                min(filtered_voltage_accel_list), goal_acceleration)
+            goal_acceleration = min(min(filtered_voltage_accel_list),
+                                    goal_acceleration)
 
         return goal_acceleration
 
@@ -592,8 +604,8 @@
 
                 integration_step_size = self.path_step_size / float(num_steps)
                 int_d += integration_step_size
-                int_vel = numpy.sqrt(2.0 * int_accel_t * integration_step_size
-                                      + int_vel * int_vel)
+                int_vel = numpy.sqrt(2.0 * int_accel_t *
+                                     integration_step_size + int_vel * int_vel)
 
             max_dvelocity_forward_pass[index] = min(
                 int_vel, max_dvelocity_forward_pass[index])
@@ -623,11 +635,12 @@
 
     def interpolate_velocity(self, d, d0, d1, v0, v1):
         if v0 + v1 > 0:
-            return numpy.sqrt(v0 * v0 +
-                              (v1 * v1 - v0 * v0) * (d - d0) / (d1 - d0))
+            return numpy.sqrt(v0 * v0 + (v1 * v1 - v0 * v0) * (d - d0) /
+                              (d1 - d0))
         else:
-            return -numpy.sqrt(v0 * v0 +
-                               (v1 * v1 - v0 * v0) * (d - d0) / (d1 - d0))
+            return -numpy.sqrt(v0 * v0 + (v1 * v1 - v0 * v0) * (d - d0) /
+                               (d1 - d0))
+
     def get_dvelocity(self, d):
         """Computes the path distance velocity of the plan as a function of the distance."""
         after_index = numpy.argmax(self.distance_array > d)
@@ -662,8 +675,8 @@
         if d > self._length:
             return numpy.matrix(numpy.zeros((2, 1)))
         return self.alpha(d) * (
-            (velocity or self.get_dvelocity(d))**2.0) + self.omega(d) * (
-                acceleration or self.get_dacceleration(d))
+            (velocity or self.get_dvelocity(d))**
+            2.0) + self.omega(d) * (acceleration or self.get_dacceleration(d))
 
     def R(self, d, velocity=None):
         theta_t = self.theta(d)
@@ -682,21 +695,17 @@
     # TODO(austin): use computed forward dynamics velocity here.
     theta_t = trajectory.theta(saturation_goal_distance)
     saturation_goal_velocity = trajectory.interpolate_velocity(
-        saturation_goal_distance, last_goal_distance,
-        goal_distance, last_goal_velocity, goal_velocity)
+        saturation_goal_distance, last_goal_distance, goal_distance,
+        last_goal_velocity, goal_velocity)
     saturation_goal_acceleration = trajectory.interpolate_acceleration(
-        last_goal_distance, goal_distance, last_goal_velocity,
-        goal_velocity)
-    omega_t = trajectory.omega_t(
-        saturation_goal_distance,
-        velocity=saturation_goal_velocity)
-    alpha_t = trajectory.alpha_t(
-        saturation_goal_distance,
-        velocity=saturation_goal_velocity,
-        acceleration=saturation_goal_acceleration)
-    R = trajectory.R(
-        saturation_goal_distance,
-        velocity=saturation_goal_velocity)
+        last_goal_distance, goal_distance, last_goal_velocity, goal_velocity)
+    omega_t = trajectory.omega_t(saturation_goal_distance,
+                                 velocity=saturation_goal_velocity)
+    alpha_t = trajectory.alpha_t(saturation_goal_distance,
+                                 velocity=saturation_goal_velocity,
+                                 acceleration=saturation_goal_acceleration)
+    R = trajectory.R(saturation_goal_distance,
+                     velocity=saturation_goal_velocity)
     U_ff = numpy.clip(dynamics.ff_u(R, omega_t, alpha_t), -12.0, 12.0)
     return U_ff + K * (
         R - X), saturation_goal_velocity, saturation_goal_acceleration
@@ -767,12 +776,15 @@
     alpha0_max = 40.0
     alpha1_max = 60.0
 
-    alpha_unitizer = numpy.matrix(
-        [[1.0 / alpha0_max, 0.0], [0.0, 1.0 / alpha1_max]])
+    alpha_unitizer = numpy.matrix([[1.0 / alpha0_max, 0.0],
+                                   [0.0, 1.0 / alpha1_max]])
 
     # Compute the trajectory taking into account our velocity, acceleration
     # and voltage constraints.
-    trajectory.compute_trajectory(dynamics, alpha_unitizer, distance_array, vmax=vmax)
+    trajectory.compute_trajectory(dynamics,
+                                  alpha_unitizer,
+                                  distance_array,
+                                  vmax=vmax)
 
     print 'Computed trajectory'
 
@@ -820,8 +832,8 @@
     theta_t = trajectory.theta(goal_distance)
     X = numpy.matrix([[theta_t[0, 0]], [0.0], [theta_t[1, 0]], [0.0]])
     # X_hat is for the Extended Kalman Filter state estimate
-    X_hat = numpy.matrix([[theta_t[0, 0]], [0.0], [theta_t[1, 0]],
-      [0.0], [0.0], [0.0]])
+    X_hat = numpy.matrix([[theta_t[0, 0]], [0.0], [theta_t[1, 0]], [0.0],
+                          [0.0], [0.0]])
     # P is the Covariance Estimate for the Etended Kalman Filter
     P_covariance_estimate = dynamics.Q_x_covariance.copy()
 
@@ -856,10 +868,9 @@
         t_array.append(t)
         theta_t = trajectory.theta(goal_distance)
         omega_t = trajectory.omega_t(goal_distance, velocity=goal_velocity)
-        alpha_t = trajectory.alpha_t(
-            goal_distance,
-            velocity=goal_velocity,
-            acceleration=goal_acceleration)
+        alpha_t = trajectory.alpha_t(goal_distance,
+                                     velocity=goal_velocity,
+                                     acceleration=goal_acceleration)
 
         theta0_goal_t_array.append(theta_t[0, 0])
         theta1_goal_t_array.append(theta_t[1, 0])
@@ -887,7 +898,7 @@
         # available.  For now, simulate the sensor reading by using the X
         # position and adding some noise to it.
         X_hat, P_covariance_estimate = dynamics.discrete_dynamics_ekf_update(
-          X_hat, P_covariance_estimate, sim_dt, get_encoder_values(X))
+            X_hat, P_covariance_estimate, sim_dt, get_encoder_values(X))
 
         R = trajectory.R(goal_distance, velocity=goal_velocity)
         U_ff = numpy.clip(dynamics.ff_u(R, omega_t, alpha_t), -12.0, 12.0)
@@ -927,8 +938,9 @@
                     fraction_along_path += step_size
             print "Fraction", fraction_along_path, "at", goal_distance, "rad,", t, "sec", goal_velocity
 
-            goal_distance = ((goal_distance - last_goal_distance) *
-                             fraction_along_path + last_goal_distance)
+            goal_distance = (
+                (goal_distance - last_goal_distance) * fraction_along_path +
+                last_goal_distance)
             goal_velocity = saturation_goal_velocity
             goal_acceleration = saturation_goal_acceleration
 
@@ -965,8 +977,7 @@
         # Push Extended Kalman filter state forwards.
         # Predict step - call for each time step
         X_hat, P_covariance_estimate = dynamics.discrete_dynamics_ekf_predict(
-          X_hat, P_covariance_estimate, U, sim_dt)
-
+            X_hat, P_covariance_estimate, U, sim_dt)
 
         if abs(goal_distance - trajectory.length()) < 1e-2:
             # If we go backwards along the path near the goal, snap us to the
@@ -999,12 +1010,15 @@
 
     pylab.figure()
     pylab.title("Path Velocity Plan")
-    pylab.plot(
-        distance_array, trajectory.max_dvelocity_unfiltered, label="pass0")
-    pylab.plot(
-        distance_array, trajectory.max_dvelocity_back_pass, label="passb")
-    pylab.plot(
-        distance_array, trajectory.max_dvelocity_forward_pass, label="passf")
+    pylab.plot(distance_array,
+               trajectory.max_dvelocity_unfiltered,
+               label="pass0")
+    pylab.plot(distance_array,
+               trajectory.max_dvelocity_back_pass,
+               label="passb")
+    pylab.plot(distance_array,
+               trajectory.max_dvelocity_forward_pass,
+               label="passf")
     pylab.legend(loc='center')
     pylab.legend()
 
@@ -1062,11 +1076,14 @@
 
     pylab.figure()
     pylab.title("Disturbance Force from Extended Kalman Filter State Values")
-    pylab.plot(t_array, torque_disturbance_0_hat_array, label="torque_disturbance_0_hat")
-    pylab.plot(t_array, torque_disturbance_1_hat_array, label="torque_disturbance_1_hat")
+    pylab.plot(t_array,
+               torque_disturbance_0_hat_array,
+               label="torque_disturbance_0_hat")
+    pylab.plot(t_array,
+               torque_disturbance_1_hat_array,
+               label="torque_disturbance_1_hat")
     pylab.legend()
 
-
     pylab.show()
 
 
diff --git a/y2018/control_loops/python/drivetrain.py b/y2018/control_loops/python/drivetrain.py
index 675930a..0e5ed43 100644
--- a/y2018/control_loops/python/drivetrain.py
+++ b/y2018/control_loops/python/drivetrain.py
@@ -47,5 +47,6 @@
         # Write the generated constants out to a file.
         drivetrain.WriteDrivetrain(argv[1:3], argv[3:5], 'y2018', kDrivetrain)
 
+
 if __name__ == '__main__':
     sys.exit(main(sys.argv))
diff --git a/y2018/control_loops/python/extended_lqr.py b/y2018/control_loops/python/extended_lqr.py
index 4eecee9..9a4705b 100755
--- a/y2018/control_loops/python/extended_lqr.py
+++ b/y2018/control_loops/python/extended_lqr.py
@@ -11,16 +11,17 @@
 
 
 class ArmDynamics(object):
-  def __init__(self, dt):
-    self.dt = dt
 
-    self.l1 = 1.0
-    self.l2 = 0.8
-    self.num_states = 4
-    self.num_inputs = 2
+    def __init__(self, dt):
+        self.dt = dt
 
-  def dynamics(self, X, U):
-    """Calculates the dynamics for a double jointed arm.
+        self.l1 = 1.0
+        self.l2 = 0.8
+        self.num_states = 4
+        self.num_inputs = 2
+
+    def dynamics(self, X, U):
+        """Calculates the dynamics for a double jointed arm.
 
     Args:
       X, numpy.matrix(4, 1), The state.  [theta1, omega1, theta2, omega2]
@@ -29,48 +30,53 @@
     Returns:
       numpy.matrix(4, 1), The derivative of the dynamics.
     """
-    return numpy.matrix([[X[1, 0]],
-                         [U[0, 0]],
-                         [X[3, 0]],
-                         [U[1, 0]]])
+        return numpy.matrix([[X[1, 0]], [U[0, 0]], [X[3, 0]], [U[1, 0]]])
 
-  def discrete_dynamics(self, X, U):
-    return RungeKutta(lambda startingX: self.dynamics(startingX, U), X, dt)
+    def discrete_dynamics(self, X, U):
+        return RungeKutta(lambda startingX: self.dynamics(startingX, U), X, dt)
 
-  def inverse_discrete_dynamics(self, X, U):
-    return RungeKutta(lambda startingX: -self.dynamics(startingX, U), X, dt)
+    def inverse_discrete_dynamics(self, X, U):
+        return RungeKutta(lambda startingX: -self.dynamics(startingX, U), X,
+                          dt)
+
 
 # Simple implementation for a quadratic cost function.
 class ArmCostFunction:
-  def __init__(self, dt, dynamics):
-    self.num_states = 4
-    self.num_inputs = 2
-    self.dt = dt
-    self.dynamics = dynamics
 
-    q_pos = 0.5
-    q_vel = 1.65
-    self.Q = numpy.matrix(numpy.diag([
-        1.0 / (q_pos ** 2.0), 1.0 / (q_vel ** 2.0),
-        1.0 / (q_pos ** 2.0), 1.0 / (q_vel ** 2.0)]))
+    def __init__(self, dt, dynamics):
+        self.num_states = 4
+        self.num_inputs = 2
+        self.dt = dt
+        self.dynamics = dynamics
 
-    self.R = numpy.matrix(numpy.diag([1.0 / (12.0 ** 2.0),
-                                      1.0 / (12.0 ** 2.0)]))
+        q_pos = 0.5
+        q_vel = 1.65
+        self.Q = numpy.matrix(
+            numpy.diag([
+                1.0 / (q_pos**2.0), 1.0 / (q_vel**2.0), 1.0 / (q_pos**2.0),
+                1.0 / (q_vel**2.0)
+            ]))
 
-    final_A = numerical_jacobian_x(self.dynamics.discrete_dynamics,
-                                   numpy.matrix(numpy.zeros((4, 1))),
-                                   numpy.matrix(numpy.zeros((2, 1))))
-    final_B = numerical_jacobian_u(self.dynamics.discrete_dynamics,
-                                   numpy.matrix(numpy.zeros((4, 1))),
-                                   numpy.matrix(numpy.zeros((2, 1))))
-    print 'Final A', final_A
-    print 'Final B', final_B
-    K, self.S = controls.dlqr(
-        final_A, final_B, self.Q, self.R, optimal_cost_function=True) 
-    print 'Final eig:', numpy.linalg.eig(final_A - final_B * K)
+        self.R = numpy.matrix(
+            numpy.diag([1.0 / (12.0**2.0), 1.0 / (12.0**2.0)]))
 
-  def final_cost(self, X, U):
-    """Computes the final cost of being at X
+        final_A = numerical_jacobian_x(self.dynamics.discrete_dynamics,
+                                       numpy.matrix(numpy.zeros((4, 1))),
+                                       numpy.matrix(numpy.zeros((2, 1))))
+        final_B = numerical_jacobian_u(self.dynamics.discrete_dynamics,
+                                       numpy.matrix(numpy.zeros((4, 1))),
+                                       numpy.matrix(numpy.zeros((2, 1))))
+        print 'Final A', final_A
+        print 'Final B', final_B
+        K, self.S = controls.dlqr(final_A,
+                                  final_B,
+                                  self.Q,
+                                  self.R,
+                                  optimal_cost_function=True)
+        print 'Final eig:', numpy.linalg.eig(final_A - final_B * K)
+
+    def final_cost(self, X, U):
+        """Computes the final cost of being at X
 
     Args:
       X: numpy.matrix(self.num_states, 1)
@@ -79,10 +85,10 @@
     Returns:
       numpy.matrix(1, 1), The quadratic cost of being at X
     """
-    return 0.5 * X.T * self.S * X
+        return 0.5 * X.T * self.S * X
 
-  def cost(self, X, U):
-    """Computes the incremental cost given a position and U.
+    def cost(self, X, U):
+        """Computes the incremental cost given a position and U.
 
     Args:
       X: numpy.matrix(self.num_states, 1)
@@ -91,10 +97,10 @@
     Returns:
       numpy.matrix(1, 1), The quadratic cost of evaluating U.
     """
-    return U.T * self.R * U + X.T * self.Q * X
+        return U.T * self.R * U + X.T * self.Q * X
 
-  def estimate_Q_final(self, X_hat):
-    """Returns the quadraticized final Q around X_hat.
+    def estimate_Q_final(self, X_hat):
+        """Returns the quadraticized final Q around X_hat.
 
     This is calculated by evaluating partial^2 cost(X_hat) / (partial X * partial X)
 
@@ -104,13 +110,13 @@
     Result:
       numpy.matrix(self.num_states, self.num_states)
     """
-    zero_U = numpy.matrix(numpy.zeros((self.num_inputs, 1)))
-    print 'S', self.S
-    print 'Q_final', numerical_jacobian_x_x(self.final_cost, X_hat, zero_U)
-    return numerical_jacobian_x_x(self.final_cost, X_hat, zero_U)
+        zero_U = numpy.matrix(numpy.zeros((self.num_inputs, 1)))
+        print 'S', self.S
+        print 'Q_final', numerical_jacobian_x_x(self.final_cost, X_hat, zero_U)
+        return numerical_jacobian_x_x(self.final_cost, X_hat, zero_U)
 
-  def estimate_partial_cost_partial_x_final(self, X_hat):
-    """Returns \frac{\partial cost}{\partial X}(X_hat) for the final cost.
+    def estimate_partial_cost_partial_x_final(self, X_hat):
+        """Returns \frac{\partial cost}{\partial X}(X_hat) for the final cost.
 
     Args:
       X_hat: numpy.matrix(self.num_states, 1), The state to quadraticize around.
@@ -118,24 +124,26 @@
     Result:
       numpy.matrix(self.num_states, 1)
     """
-    return numerical_jacobian_x(self.final_cost, X_hat,
-                                numpy.matrix(numpy.zeros((self.num_inputs, 1)))).T
+        return numerical_jacobian_x(
+            self.final_cost, X_hat,
+            numpy.matrix(numpy.zeros((self.num_inputs, 1)))).T
 
-  def estimate_q_final(self, X_hat):
-    """Returns q evaluated at X_hat for the final cost function."""
-    return self.estimate_partial_cost_partial_x_final(X_hat) - self.estimate_Q_final(X_hat) * X_hat
-
+    def estimate_q_final(self, X_hat):
+        """Returns q evaluated at X_hat for the final cost function."""
+        return self.estimate_partial_cost_partial_x_final(
+            X_hat) - self.estimate_Q_final(X_hat) * X_hat
 
 
 class SkidSteerDynamics(object):
-  def __init__(self, dt):
-    self.width = 0.2
-    self.dt = dt
-    self.num_states = 3
-    self.num_inputs = 2
 
-  def dynamics(self, X, U):
-    """Calculates the dynamics for a 2 wheeled robot.
+    def __init__(self, dt):
+        self.width = 0.2
+        self.dt = dt
+        self.num_states = 3
+        self.num_inputs = 2
+
+    def dynamics(self, X, U):
+        """Calculates the dynamics for a 2 wheeled robot.
 
     Args:
       X, numpy.matrix(3, 1), The state.  [x, y, theta]
@@ -144,34 +152,34 @@
     Returns:
       numpy.matrix(3, 1), The derivative of the dynamics.
     """
-    #return numpy.matrix([[X[1, 0]],
-    #                     [X[2, 0]],
-    #                     [U[0, 0]]])
-    return numpy.matrix([[(U[0, 0] + U[1, 0]) * numpy.cos(X[2, 0]) / 2.0],
-                         [(U[0, 0] + U[1, 0]) * numpy.sin(X[2, 0]) / 2.0],
-                         [(U[1, 0] - U[0, 0]) / self.width]])
+        #return numpy.matrix([[X[1, 0]],
+        #                     [X[2, 0]],
+        #                     [U[0, 0]]])
+        return numpy.matrix([[(U[0, 0] + U[1, 0]) * numpy.cos(X[2, 0]) / 2.0],
+                             [(U[0, 0] + U[1, 0]) * numpy.sin(X[2, 0]) / 2.0],
+                             [(U[1, 0] - U[0, 0]) / self.width]])
 
-  def discrete_dynamics(self, X, U):
-    return RungeKutta(lambda startingX: self.dynamics(startingX, U), X, dt)
+    def discrete_dynamics(self, X, U):
+        return RungeKutta(lambda startingX: self.dynamics(startingX, U), X, dt)
 
-  def inverse_discrete_dynamics(self, X, U):
-    return RungeKutta(lambda startingX: -self.dynamics(startingX, U), X, dt)
+    def inverse_discrete_dynamics(self, X, U):
+        return RungeKutta(lambda startingX: -self.dynamics(startingX, U), X,
+                          dt)
 
 
 # Simple implementation for a quadratic cost function.
 class CostFunction:
-  def __init__(self, dt):
-    self.num_states = 3
-    self.num_inputs = 2
-    self.dt = dt
-    self.Q = numpy.matrix([[0.1, 0, 0],
-                           [0, 0.6, 0],
-                           [0, 0, 0.1]]) / self.dt / self.dt
-    self.R = numpy.matrix([[0.40, 0],
-                           [0, 0.40]]) / self.dt / self.dt
 
-  def final_cost(self, X, U):
-    """Computes the final cost of being at X
+    def __init__(self, dt):
+        self.num_states = 3
+        self.num_inputs = 2
+        self.dt = dt
+        self.Q = numpy.matrix([[0.1, 0, 0], [0, 0.6, 0], [0, 0, 0.1]
+                               ]) / self.dt / self.dt
+        self.R = numpy.matrix([[0.40, 0], [0, 0.40]]) / self.dt / self.dt
+
+    def final_cost(self, X, U):
+        """Computes the final cost of being at X
 
     Args:
       X: numpy.matrix(self.num_states, 1)
@@ -180,10 +188,10 @@
     Returns:
       numpy.matrix(1, 1), The quadratic cost of being at X
     """
-    return X.T * self.Q * X * 1000
+        return X.T * self.Q * X * 1000
 
-  def cost(self, X, U):
-    """Computes the incremental cost given a position and U.
+    def cost(self, X, U):
+        """Computes the incremental cost given a position and U.
 
     Args:
       X: numpy.matrix(self.num_states, 1)
@@ -192,10 +200,10 @@
     Returns:
       numpy.matrix(1, 1), The quadratic cost of evaluating U.
     """
-    return U.T * self.R * U + X.T * self.Q * X
+        return U.T * self.R * U + X.T * self.Q * X
 
-  def estimate_Q_final(self, X_hat):
-    """Returns the quadraticized final Q around X_hat.
+    def estimate_Q_final(self, X_hat):
+        """Returns the quadraticized final Q around X_hat.
 
     This is calculated by evaluating partial^2 cost(X_hat) / (partial X * partial X)
 
@@ -205,11 +213,11 @@
     Result:
       numpy.matrix(self.num_states, self.num_states)
     """
-    zero_U = numpy.matrix(numpy.zeros((self.num_inputs, 1)))
-    return numerical_jacobian_x_x(self.final_cost, X_hat, zero_U)
+        zero_U = numpy.matrix(numpy.zeros((self.num_inputs, 1)))
+        return numerical_jacobian_x_x(self.final_cost, X_hat, zero_U)
 
-  def estimate_partial_cost_partial_x_final(self, X_hat):
-    """Returns \frac{\partial cost}{\partial X}(X_hat) for the final cost.
+    def estimate_partial_cost_partial_x_final(self, X_hat):
+        """Returns \frac{\partial cost}{\partial X}(X_hat) for the final cost.
 
     Args:
       X_hat: numpy.matrix(self.num_states, 1), The state to quadraticize around.
@@ -217,23 +225,27 @@
     Result:
       numpy.matrix(self.num_states, 1)
     """
-    return numerical_jacobian_x(self.final_cost, X_hat, numpy.matrix(numpy.zeros((self.num_inputs, 1)))).T
+        return numerical_jacobian_x(
+            self.final_cost, X_hat,
+            numpy.matrix(numpy.zeros((self.num_inputs, 1)))).T
 
-  def estimate_q_final(self, X_hat):
-    """Returns q evaluated at X_hat for the final cost function."""
-    return self.estimate_partial_cost_partial_x_final(X_hat) - self.estimate_Q_final(X_hat) * X_hat
+    def estimate_q_final(self, X_hat):
+        """Returns q evaluated at X_hat for the final cost function."""
+        return self.estimate_partial_cost_partial_x_final(
+            X_hat) - self.estimate_Q_final(X_hat) * X_hat
 
 
 def RungeKutta(f, x, dt):
-  """4th order RungeKutta integration of F starting at X."""
-  a = f(x)
-  b = f(x + dt / 2.0 * a)
-  c = f(x + dt / 2.0 * b)
-  d = f(x + dt * c)
-  return x + dt * (a + 2.0 * b + 2.0 * c + d) / 6.0
+    """4th order RungeKutta integration of F starting at X."""
+    a = f(x)
+    b = f(x + dt / 2.0 * a)
+    c = f(x + dt / 2.0 * b)
+    d = f(x + dt * c)
+    return x + dt * (a + 2.0 * b + 2.0 * c + d) / 6.0
+
 
 def numerical_jacobian_x(fn, X, U, epsilon=1e-4):
-  """Numerically estimates the jacobian around X, U in X.
+    """Numerically estimates the jacobian around X, U in X.
 
   Args:
     fn: A function of X, U.
@@ -246,20 +258,21 @@
     numpy.matrix(num_states, num_states), The jacobian of fn with X as the
       variable.
   """
-  num_states = X.shape[0]
-  nominal = fn(X, U)
-  answer = numpy.matrix(numpy.zeros((nominal.shape[0], num_states)))
-  # It's more expensive, but +- epsilon will be more reliable
-  for i in range(0, num_states):
-    dX_plus = X.copy()
-    dX_plus[i] += epsilon
-    dX_minus = X.copy()
-    dX_minus[i] -= epsilon
-    answer[:, i] = (fn(dX_plus, U) - fn(dX_minus, U)) / epsilon / 2.0
-  return answer
+    num_states = X.shape[0]
+    nominal = fn(X, U)
+    answer = numpy.matrix(numpy.zeros((nominal.shape[0], num_states)))
+    # It's more expensive, but +- epsilon will be more reliable
+    for i in range(0, num_states):
+        dX_plus = X.copy()
+        dX_plus[i] += epsilon
+        dX_minus = X.copy()
+        dX_minus[i] -= epsilon
+        answer[:, i] = (fn(dX_plus, U) - fn(dX_minus, U)) / epsilon / 2.0
+    return answer
+
 
 def numerical_jacobian_u(fn, X, U, epsilon=1e-4):
-  """Numerically estimates the jacobian around X, U in U.
+    """Numerically estimates the jacobian around X, U in U.
 
   Args:
     fn: A function of X, U.
@@ -272,355 +285,426 @@
     numpy.matrix(num_states, num_inputs), The jacobian of fn with U as the
       variable.
   """
-  num_states = X.shape[0]
-  num_inputs = U.shape[0]
-  nominal = fn(X, U)
-  answer = numpy.matrix(numpy.zeros((nominal.shape[0], num_inputs)))
-  for i in range(0, num_inputs):
-    dU_plus = U.copy()
-    dU_plus[i] += epsilon
-    dU_minus = U.copy()
-    dU_minus[i] -= epsilon
-    answer[:, i] = (fn(X, dU_plus) - fn(X, dU_minus)) / epsilon / 2.0
-  return answer
+    num_states = X.shape[0]
+    num_inputs = U.shape[0]
+    nominal = fn(X, U)
+    answer = numpy.matrix(numpy.zeros((nominal.shape[0], num_inputs)))
+    for i in range(0, num_inputs):
+        dU_plus = U.copy()
+        dU_plus[i] += epsilon
+        dU_minus = U.copy()
+        dU_minus[i] -= epsilon
+        answer[:, i] = (fn(X, dU_plus) - fn(X, dU_minus)) / epsilon / 2.0
+    return answer
+
 
 def numerical_jacobian_x_x(fn, X, U):
-  return numerical_jacobian_x(
-      lambda X_inner, U_inner: numerical_jacobian_x(fn, X_inner, U_inner).T, X, U)
+    return numerical_jacobian_x(
+        lambda X_inner, U_inner: numerical_jacobian_x(fn, X_inner, U_inner).T,
+        X, U)
+
 
 def numerical_jacobian_x_u(fn, X, U):
-  return numerical_jacobian_x(
-      lambda X_inner, U_inner: numerical_jacobian_u(fn, X_inner, U_inner).T, X, U)
+    return numerical_jacobian_x(
+        lambda X_inner, U_inner: numerical_jacobian_u(fn, X_inner, U_inner).T,
+        X, U)
+
 
 def numerical_jacobian_u_x(fn, X, U):
-  return numerical_jacobian_u(
-      lambda X_inner, U_inner: numerical_jacobian_x(fn, X_inner, U_inner).T, X, U)
+    return numerical_jacobian_u(
+        lambda X_inner, U_inner: numerical_jacobian_x(fn, X_inner, U_inner).T,
+        X, U)
+
 
 def numerical_jacobian_u_u(fn, X, U):
-  return numerical_jacobian_u(
-      lambda X_inner, U_inner: numerical_jacobian_u(fn, X_inner, U_inner).T, X, U)
+    return numerical_jacobian_u(
+        lambda X_inner, U_inner: numerical_jacobian_u(fn, X_inner, U_inner).T,
+        X, U)
 
 
 class ELQR(object):
-  def __init__(self, dynamics, cost):
-    self.dynamics = dynamics
-    self.cost = cost
-  
-  def Solve(self, x_hat_initial, horizon, iterations):
-    l = horizon
-    num_states = self.dynamics.num_states
-    num_inputs = self.dynamics.num_inputs
-    self.S_bar_t = [numpy.matrix(numpy.zeros((num_states, num_states))) for _ in range(l + 1)]
-    self.s_bar_t = [numpy.matrix(numpy.zeros((num_states, 1))) for _ in range(l + 1)]
-    self.s_scalar_bar_t = [numpy.matrix(numpy.zeros((1, 1))) for _ in range(l + 1)]
 
-    self.L_t = [numpy.matrix(numpy.zeros((num_inputs, num_states))) for _ in range(l + 1)]
-    self.l_t = [numpy.matrix(numpy.zeros((num_inputs, 1))) for _ in range(l + 1)]
-    self.L_bar_t = [numpy.matrix(numpy.zeros((num_inputs, num_states))) for _ in range(l + 1)]
-    self.l_bar_t = [numpy.matrix(numpy.zeros((num_inputs, 1))) for _ in range(l + 1)]
+    def __init__(self, dynamics, cost):
+        self.dynamics = dynamics
+        self.cost = cost
 
-    self.S_t = [numpy.matrix(numpy.zeros((num_states, num_states))) for _ in range(l + 1)]
-    self.s_t = [numpy.matrix(numpy.zeros((num_states, 1))) for _ in range(l + 1)]
-    self.s_scalar_t = [numpy.matrix(numpy.zeros((1, 1))) for _ in range(l + 1)]
+    def Solve(self, x_hat_initial, horizon, iterations):
+        l = horizon
+        num_states = self.dynamics.num_states
+        num_inputs = self.dynamics.num_inputs
+        self.S_bar_t = [
+            numpy.matrix(numpy.zeros((num_states, num_states)))
+            for _ in range(l + 1)
+        ]
+        self.s_bar_t = [
+            numpy.matrix(numpy.zeros((num_states, 1))) for _ in range(l + 1)
+        ]
+        self.s_scalar_bar_t = [
+            numpy.matrix(numpy.zeros((1, 1))) for _ in range(l + 1)
+        ]
 
-    self.last_x_hat_t = [numpy.matrix(numpy.zeros((num_states, 1))) for _ in range(l + 1)]
+        self.L_t = [
+            numpy.matrix(numpy.zeros((num_inputs, num_states)))
+            for _ in range(l + 1)
+        ]
+        self.l_t = [
+            numpy.matrix(numpy.zeros((num_inputs, 1))) for _ in range(l + 1)
+        ]
+        self.L_bar_t = [
+            numpy.matrix(numpy.zeros((num_inputs, num_states)))
+            for _ in range(l + 1)
+        ]
+        self.l_bar_t = [
+            numpy.matrix(numpy.zeros((num_inputs, 1))) for _ in range(l + 1)
+        ]
 
-    # Iterate the solver
-    for a in range(iterations):
-      x_hat = x_hat_initial
-      u_t = self.L_t[0] * x_hat + self.l_t[0]
-      self.S_bar_t[0] = numpy.matrix(numpy.zeros((num_states, num_states)))
-      self.s_bar_t[0] = numpy.matrix(numpy.zeros((num_states, 1)))
-      self.s_scalar_bar_t[0] = numpy.matrix([[0]])
+        self.S_t = [
+            numpy.matrix(numpy.zeros((num_states, num_states)))
+            for _ in range(l + 1)
+        ]
+        self.s_t = [
+            numpy.matrix(numpy.zeros((num_states, 1))) for _ in range(l + 1)
+        ]
+        self.s_scalar_t = [
+            numpy.matrix(numpy.zeros((1, 1))) for _ in range(l + 1)
+        ]
 
-      self.last_x_hat_t[0] = x_hat_initial
+        self.last_x_hat_t = [
+            numpy.matrix(numpy.zeros((num_states, 1))) for _ in range(l + 1)
+        ]
 
-      Q_t = numerical_jacobian_x_x(self.cost.cost, x_hat_initial, u_t)
-      P_t = numerical_jacobian_x_u(self.cost.cost, x_hat_initial, u_t)
-      R_t = numerical_jacobian_u_u(self.cost.cost, x_hat_initial, u_t)
+        # Iterate the solver
+        for a in range(iterations):
+            x_hat = x_hat_initial
+            u_t = self.L_t[0] * x_hat + self.l_t[0]
+            self.S_bar_t[0] = numpy.matrix(
+                numpy.zeros((num_states, num_states)))
+            self.s_bar_t[0] = numpy.matrix(numpy.zeros((num_states, 1)))
+            self.s_scalar_bar_t[0] = numpy.matrix([[0]])
 
-      q_t = numerical_jacobian_x(self.cost.cost, x_hat_initial, u_t).T \
-          - Q_t * x_hat_initial - P_t.T * u_t
-      r_t = numerical_jacobian_u(self.cost.cost, x_hat_initial, u_t).T \
-          - P_t * x_hat_initial - R_t * u_t
+            self.last_x_hat_t[0] = x_hat_initial
 
-      q_scalar_t = self.cost.cost(x_hat_initial, u_t) \
-          - 0.5 * (x_hat_initial.T * (Q_t * x_hat_initial + P_t.T * u_t) \
-          + u_t.T * (P_t * x_hat_initial + R_t * u_t)) \
-          - x_hat_initial.T * q_t - u_t.T * r_t
+            Q_t = numerical_jacobian_x_x(self.cost.cost, x_hat_initial, u_t)
+            P_t = numerical_jacobian_x_u(self.cost.cost, x_hat_initial, u_t)
+            R_t = numerical_jacobian_u_u(self.cost.cost, x_hat_initial, u_t)
 
-      start_A_t = numerical_jacobian_x(self.dynamics.discrete_dynamics, x_hat_initial, u_t)
-      start_B_t = numerical_jacobian_u(self.dynamics.discrete_dynamics, x_hat_initial, u_t)
-      x_hat_next = self.dynamics.discrete_dynamics(x_hat_initial, u_t)
-      start_c_t = x_hat_next - start_A_t * x_hat_initial - start_B_t * u_t
+            q_t = numerical_jacobian_x(self.cost.cost, x_hat_initial, u_t).T \
+                - Q_t * x_hat_initial - P_t.T * u_t
+            r_t = numerical_jacobian_u(self.cost.cost, x_hat_initial, u_t).T \
+                - P_t * x_hat_initial - R_t * u_t
 
-      B_svd_u, B_svd_sigma_diag, B_svd_v = numpy.linalg.svd(start_B_t)
-      B_svd_sigma = numpy.matrix(numpy.zeros(start_B_t.shape))
-      B_svd_sigma[0:B_svd_sigma_diag.shape[0], 0:B_svd_sigma_diag.shape[0]] = \
-          numpy.diag(B_svd_sigma_diag)
+            q_scalar_t = self.cost.cost(x_hat_initial, u_t) \
+                - 0.5 * (x_hat_initial.T * (Q_t * x_hat_initial + P_t.T * u_t) \
+                + u_t.T * (P_t * x_hat_initial + R_t * u_t)) \
+                - x_hat_initial.T * q_t - u_t.T * r_t
 
-      B_svd_sigma_inv = numpy.matrix(numpy.zeros(start_B_t.shape)).T
-      B_svd_sigma_inv[0:B_svd_sigma_diag.shape[0],
-                      0:B_svd_sigma_diag.shape[0]] = \
-                          numpy.linalg.inv(numpy.diag(B_svd_sigma_diag))
-      B_svd_inv = B_svd_v.T * B_svd_sigma_inv * B_svd_u.T
+            start_A_t = numerical_jacobian_x(self.dynamics.discrete_dynamics,
+                                             x_hat_initial, u_t)
+            start_B_t = numerical_jacobian_u(self.dynamics.discrete_dynamics,
+                                             x_hat_initial, u_t)
+            x_hat_next = self.dynamics.discrete_dynamics(x_hat_initial, u_t)
+            start_c_t = x_hat_next - start_A_t * x_hat_initial - start_B_t * u_t
 
-      self.L_bar_t[1] = B_svd_inv
-      self.l_bar_t[1] = -B_svd_inv * (start_A_t * x_hat_initial + start_c_t)
+            B_svd_u, B_svd_sigma_diag, B_svd_v = numpy.linalg.svd(start_B_t)
+            B_svd_sigma = numpy.matrix(numpy.zeros(start_B_t.shape))
+            B_svd_sigma[0:B_svd_sigma_diag.shape[0], 0:B_svd_sigma_diag.shape[0]] = \
+                numpy.diag(B_svd_sigma_diag)
 
-      self.S_bar_t[1] = self.L_bar_t[1].T * R_t * self.L_bar_t[1]
+            B_svd_sigma_inv = numpy.matrix(numpy.zeros(start_B_t.shape)).T
+            B_svd_sigma_inv[0:B_svd_sigma_diag.shape[0],
+                            0:B_svd_sigma_diag.shape[0]] = \
+                                numpy.linalg.inv(numpy.diag(B_svd_sigma_diag))
+            B_svd_inv = B_svd_v.T * B_svd_sigma_inv * B_svd_u.T
 
-      TotalS_1 = start_B_t.T * self.S_t[1] * start_B_t + R_t
-      Totals_1 = start_B_t.T * self.S_t[1] * (start_c_t + start_A_t * x_hat_initial) \
-          + start_B_t.T * self.s_t[1] + P_t * x_hat_initial + r_t
-      Totals_scalar_1 = 0.5 * (start_c_t.T + x_hat_initial.T * start_A_t.T) * self.S_t[1] * (start_c_t + start_A_t * x_hat_initial) \
-          + self.s_scalar_t[1] + x_hat_initial.T * q_t + q_scalar_t \
-          + 0.5 * x_hat_initial.T * Q_t * x_hat_initial \
-          + (start_c_t.T + x_hat_initial.T * start_A_t.T) * self.s_t[1]
+            self.L_bar_t[1] = B_svd_inv
+            self.l_bar_t[1] = -B_svd_inv * (start_A_t * x_hat_initial +
+                                            start_c_t)
 
-      optimal_u_1 = -numpy.linalg.solve(TotalS_1, Totals_1)
-      optimal_x_1 = start_A_t * x_hat_initial \
-          + start_B_t * optimal_u_1 + start_c_t
+            self.S_bar_t[1] = self.L_bar_t[1].T * R_t * self.L_bar_t[1]
 
-      # TODO(austin): Disable this if we are controlable.  It should not be needed then.
-      S_bar_1_eigh_eigenvalues, S_bar_1_eigh_eigenvectors = \
-          numpy.linalg.eigh(self.S_bar_t[1])
-      S_bar_1_eigh = numpy.matrix(numpy.diag(S_bar_1_eigh_eigenvalues))
-      S_bar_1_eigh_eigenvalues_stiff = S_bar_1_eigh_eigenvalues.copy()
-      for i in range(S_bar_1_eigh_eigenvalues_stiff.shape[0]):
-        if abs(S_bar_1_eigh_eigenvalues_stiff[i]) < 1e-8:
-          S_bar_1_eigh_eigenvalues_stiff[i] = max(S_bar_1_eigh_eigenvalues_stiff) * 1.0
+            TotalS_1 = start_B_t.T * self.S_t[1] * start_B_t + R_t
+            Totals_1 = start_B_t.T * self.S_t[1] * (start_c_t + start_A_t * x_hat_initial) \
+                + start_B_t.T * self.s_t[1] + P_t * x_hat_initial + r_t
+            Totals_scalar_1 = 0.5 * (start_c_t.T + x_hat_initial.T * start_A_t.T) * self.S_t[1] * (start_c_t + start_A_t * x_hat_initial) \
+                + self.s_scalar_t[1] + x_hat_initial.T * q_t + q_scalar_t \
+                + 0.5 * x_hat_initial.T * Q_t * x_hat_initial \
+                + (start_c_t.T + x_hat_initial.T * start_A_t.T) * self.s_t[1]
 
-      S_bar_stiff = S_bar_1_eigh_eigenvectors * numpy.matrix(numpy.diag(S_bar_1_eigh_eigenvalues_stiff)) * S_bar_1_eigh_eigenvectors.T
+            optimal_u_1 = -numpy.linalg.solve(TotalS_1, Totals_1)
+            optimal_x_1 = start_A_t * x_hat_initial \
+                + start_B_t * optimal_u_1 + start_c_t
 
-      print 'Min u', -numpy.linalg.solve(TotalS_1, Totals_1)
-      print 'Min x_hat', optimal_x_1
-      self.s_bar_t[1] = -self.s_t[1] - (S_bar_stiff + self.S_t[1]) * optimal_x_1
-      self.s_scalar_bar_t[1] = 0.5 * (optimal_u_1.T * TotalS_1 * optimal_u_1 \
-          - optimal_x_1.T * (S_bar_stiff + self.S_t[1]) * optimal_x_1) \
-          + optimal_u_1.T * Totals_1 \
-          - optimal_x_1.T * (self.s_bar_t[1] + self.s_t[1]) \
-          - self.s_scalar_t[1] + Totals_scalar_1
+            # TODO(austin): Disable this if we are controlable.  It should not be needed then.
+            S_bar_1_eigh_eigenvalues, S_bar_1_eigh_eigenvectors = \
+                numpy.linalg.eigh(self.S_bar_t[1])
+            S_bar_1_eigh = numpy.matrix(numpy.diag(S_bar_1_eigh_eigenvalues))
+            S_bar_1_eigh_eigenvalues_stiff = S_bar_1_eigh_eigenvalues.copy()
+            for i in range(S_bar_1_eigh_eigenvalues_stiff.shape[0]):
+                if abs(S_bar_1_eigh_eigenvalues_stiff[i]) < 1e-8:
+                    S_bar_1_eigh_eigenvalues_stiff[i] = max(
+                        S_bar_1_eigh_eigenvalues_stiff) * 1.0
 
-      print 'optimal_u_1', optimal_u_1
-      print 'TotalS_1', TotalS_1
-      print 'Totals_1', Totals_1
-      print 'Totals_scalar_1', Totals_scalar_1
-      print 'overall cost 1', 0.5 * (optimal_u_1.T * TotalS_1 * optimal_u_1) \
-                               + optimal_u_1.T * Totals_1 + Totals_scalar_1
-      print 'overall cost 0', 0.5 * (x_hat_initial.T * self.S_t[0] * x_hat_initial) \
-                              + x_hat_initial.T * self.s_t[0] + self.s_scalar_t[0]
+            S_bar_stiff = S_bar_1_eigh_eigenvectors * numpy.matrix(
+                numpy.diag(S_bar_1_eigh_eigenvalues_stiff)
+            ) * S_bar_1_eigh_eigenvectors.T
 
-      print 't forward 0'
-      print 'x_hat_initial[ 0]: %s' % (x_hat_initial)
-      print 'x_hat[%2d]: %s' % (0, x_hat.T)
-      print 'x_hat_next[%2d]: %s' % (0, x_hat_next.T)
-      print 'u[%2d]: %s' % (0, u_t.T)
-      print ('L[ 0]: %s' % (self.L_t[0],)).replace('\n', '\n        ')
-      print ('l[ 0]: %s' % (self.l_t[0],)).replace('\n', '\n        ')
+            print 'Min u', -numpy.linalg.solve(TotalS_1, Totals_1)
+            print 'Min x_hat', optimal_x_1
+            self.s_bar_t[1] = -self.s_t[1] - (S_bar_stiff +
+                                              self.S_t[1]) * optimal_x_1
+            self.s_scalar_bar_t[1] = 0.5 * (optimal_u_1.T * TotalS_1 * optimal_u_1 \
+                - optimal_x_1.T * (S_bar_stiff + self.S_t[1]) * optimal_x_1) \
+                + optimal_u_1.T * Totals_1 \
+                - optimal_x_1.T * (self.s_bar_t[1] + self.s_t[1]) \
+                - self.s_scalar_t[1] + Totals_scalar_1
 
-      print ('A_t[%2d]: %s' % (0, start_A_t)).replace('\n', '\n         ')
-      print ('B_t[%2d]: %s' % (0, start_B_t)).replace('\n', '\n         ')
-      print ('c_t[%2d]: %s' % (0, start_c_t)).replace('\n', '\n         ')
+            print 'optimal_u_1', optimal_u_1
+            print 'TotalS_1', TotalS_1
+            print 'Totals_1', Totals_1
+            print 'Totals_scalar_1', Totals_scalar_1
+            print 'overall cost 1', 0.5 * (optimal_u_1.T * TotalS_1 * optimal_u_1) \
+                                     + optimal_u_1.T * Totals_1 + Totals_scalar_1
+            print 'overall cost 0', 0.5 * (x_hat_initial.T * self.S_t[0] * x_hat_initial) \
+                                    + x_hat_initial.T * self.s_t[0] + self.s_scalar_t[0]
 
-      # TODO(austin): optimal_x_1 is x_hat
-      x_hat = -numpy.linalg.solve((self.S_t[1] + S_bar_stiff),
-                                  (self.s_t[1] + self.s_bar_t[1]))
-      print 'new xhat', x_hat
+            print 't forward 0'
+            print 'x_hat_initial[ 0]: %s' % (x_hat_initial)
+            print 'x_hat[%2d]: %s' % (0, x_hat.T)
+            print 'x_hat_next[%2d]: %s' % (0, x_hat_next.T)
+            print 'u[%2d]: %s' % (0, u_t.T)
+            print('L[ 0]: %s' % (self.L_t[0], )).replace('\n', '\n        ')
+            print('l[ 0]: %s' % (self.l_t[0], )).replace('\n', '\n        ')
 
-      self.S_bar_t[1] = S_bar_stiff
+            print('A_t[%2d]: %s' % (0, start_A_t)).replace('\n', '\n         ')
+            print('B_t[%2d]: %s' % (0, start_B_t)).replace('\n', '\n         ')
+            print('c_t[%2d]: %s' % (0, start_c_t)).replace('\n', '\n         ')
 
-      self.last_x_hat_t[1] = x_hat
+            # TODO(austin): optimal_x_1 is x_hat
+            x_hat = -numpy.linalg.solve((self.S_t[1] + S_bar_stiff),
+                                        (self.s_t[1] + self.s_bar_t[1]))
+            print 'new xhat', x_hat
 
-      for t in range(1, l):
-        print 't forward', t
-        u_t = self.L_t[t] * x_hat + self.l_t[t]
+            self.S_bar_t[1] = S_bar_stiff
 
-        x_hat_next = self.dynamics.discrete_dynamics(x_hat, u_t)
-        A_bar_t = numerical_jacobian_x(self.dynamics.inverse_discrete_dynamics,
-                                       x_hat_next, u_t)
-        B_bar_t = numerical_jacobian_u(self.dynamics.inverse_discrete_dynamics,
-                                       x_hat_next, u_t)
-        c_bar_t = x_hat - A_bar_t * x_hat_next - B_bar_t * u_t
+            self.last_x_hat_t[1] = x_hat
 
-        print 'x_hat[%2d]: %s' % (t, x_hat.T)
-        print 'x_hat_next[%2d]: %s' % (t, x_hat_next.T)
-        print ('L[%2d]: %s' % (t, self.L_t[t],)).replace('\n', '\n        ')
-        print ('l[%2d]: %s' % (t, self.l_t[t],)).replace('\n', '\n        ')
-        print 'u[%2d]: %s' % (t, u_t.T)
+            for t in range(1, l):
+                print 't forward', t
+                u_t = self.L_t[t] * x_hat + self.l_t[t]
 
-        print ('A_bar_t[%2d]: %s' % (t, A_bar_t)).replace('\n', '\n             ')
-        print ('B_bar_t[%2d]: %s' % (t, B_bar_t)).replace('\n', '\n             ')
-        print ('c_bar_t[%2d]: %s' % (t, c_bar_t)).replace('\n', '\n             ')
+                x_hat_next = self.dynamics.discrete_dynamics(x_hat, u_t)
+                A_bar_t = numerical_jacobian_x(
+                    self.dynamics.inverse_discrete_dynamics, x_hat_next, u_t)
+                B_bar_t = numerical_jacobian_u(
+                    self.dynamics.inverse_discrete_dynamics, x_hat_next, u_t)
+                c_bar_t = x_hat - A_bar_t * x_hat_next - B_bar_t * u_t
 
-        Q_t = numerical_jacobian_x_x(self.cost.cost, x_hat, u_t)
-        P_t = numerical_jacobian_x_u(self.cost.cost, x_hat, u_t)
-        R_t = numerical_jacobian_u_u(self.cost.cost, x_hat, u_t)
+                print 'x_hat[%2d]: %s' % (t, x_hat.T)
+                print 'x_hat_next[%2d]: %s' % (t, x_hat_next.T)
+                print('L[%2d]: %s' % (
+                    t,
+                    self.L_t[t],
+                )).replace('\n', '\n        ')
+                print('l[%2d]: %s' % (
+                    t,
+                    self.l_t[t],
+                )).replace('\n', '\n        ')
+                print 'u[%2d]: %s' % (t, u_t.T)
 
-        q_t = numerical_jacobian_x(self.cost.cost, x_hat, u_t).T \
-            - Q_t * x_hat - P_t.T * u_t
-        r_t = numerical_jacobian_u(self.cost.cost, x_hat, u_t).T \
-            - P_t * x_hat - R_t * u_t
+                print('A_bar_t[%2d]: %s' % (t, A_bar_t)).replace(
+                    '\n', '\n             ')
+                print('B_bar_t[%2d]: %s' % (t, B_bar_t)).replace(
+                    '\n', '\n             ')
+                print('c_bar_t[%2d]: %s' % (t, c_bar_t)).replace(
+                    '\n', '\n             ')
 
-        q_scalar_t = self.cost.cost(x_hat, u_t) \
-            - 0.5 * (x_hat.T * (Q_t * x_hat + P_t.T * u_t) \
-            + u_t.T * (P_t * x_hat + R_t * u_t)) - x_hat.T * q_t - u_t.T * r_t
+                Q_t = numerical_jacobian_x_x(self.cost.cost, x_hat, u_t)
+                P_t = numerical_jacobian_x_u(self.cost.cost, x_hat, u_t)
+                R_t = numerical_jacobian_u_u(self.cost.cost, x_hat, u_t)
 
-        C_bar_t = B_bar_t.T * (self.S_bar_t[t] + Q_t) * A_bar_t + P_t * A_bar_t
-        D_bar_t = A_bar_t.T * (self.S_bar_t[t] + Q_t) * A_bar_t
-        E_bar_t = B_bar_t.T * (self.S_bar_t[t] + Q_t) * B_bar_t + R_t \
-            + P_t * B_bar_t + B_bar_t.T * P_t.T
-        d_bar_t = A_bar_t.T * (self.s_bar_t[t] + q_t) \
-            + A_bar_t.T * (self.S_bar_t[t] + Q_t) * c_bar_t
-        e_bar_t = r_t + P_t * c_bar_t + B_bar_t.T * self.s_bar_t[t] \
-            + B_bar_t.T * (self.S_bar_t[t] + Q_t) * c_bar_t
+                q_t = numerical_jacobian_x(self.cost.cost, x_hat, u_t).T \
+                    - Q_t * x_hat - P_t.T * u_t
+                r_t = numerical_jacobian_u(self.cost.cost, x_hat, u_t).T \
+                    - P_t * x_hat - R_t * u_t
 
-        self.L_bar_t[t + 1] = -numpy.linalg.inv(E_bar_t) * C_bar_t
-        self.l_bar_t[t + 1] = -numpy.linalg.inv(E_bar_t) * e_bar_t
+                q_scalar_t = self.cost.cost(x_hat, u_t) \
+                    - 0.5 * (x_hat.T * (Q_t * x_hat + P_t.T * u_t) \
+                    + u_t.T * (P_t * x_hat + R_t * u_t)) - x_hat.T * q_t - u_t.T * r_t
 
-        self.S_bar_t[t + 1] = D_bar_t + C_bar_t.T * self.L_bar_t[t + 1]
-        self.s_bar_t[t + 1] = d_bar_t + C_bar_t.T * self.l_bar_t[t + 1]
-        self.s_scalar_bar_t[t + 1] = \
-            -0.5 * e_bar_t.T * numpy.linalg.inv(E_bar_t) * e_bar_t \
-            + 0.5 * c_bar_t.T * (self.S_bar_t[t] + Q_t) * c_bar_t \
-            + c_bar_t.T * self.s_bar_t[t] + c_bar_t.T * q_t \
-            + self.s_scalar_bar_t[t] + q_scalar_t
+                C_bar_t = B_bar_t.T * (self.S_bar_t[t] +
+                                       Q_t) * A_bar_t + P_t * A_bar_t
+                D_bar_t = A_bar_t.T * (self.S_bar_t[t] + Q_t) * A_bar_t
+                E_bar_t = B_bar_t.T * (self.S_bar_t[t] + Q_t) * B_bar_t + R_t \
+                    + P_t * B_bar_t + B_bar_t.T * P_t.T
+                d_bar_t = A_bar_t.T * (self.s_bar_t[t] + q_t) \
+                    + A_bar_t.T * (self.S_bar_t[t] + Q_t) * c_bar_t
+                e_bar_t = r_t + P_t * c_bar_t + B_bar_t.T * self.s_bar_t[t] \
+                    + B_bar_t.T * (self.S_bar_t[t] + Q_t) * c_bar_t
 
-        x_hat = -numpy.linalg.solve((self.S_t[t + 1] + self.S_bar_t[t + 1]),
-                                    (self.s_t[t + 1] + self.s_bar_t[t + 1]))
-        self.S_t[l] = self.cost.estimate_Q_final(x_hat)
-      self.s_t[l] = self.cost.estimate_q_final(x_hat)
-      x_hat = -numpy.linalg.inv(self.S_t[l] + self.S_bar_t[l]) \
-          * (self.s_t[l] + self.s_bar_t[l])
+                self.L_bar_t[t + 1] = -numpy.linalg.inv(E_bar_t) * C_bar_t
+                self.l_bar_t[t + 1] = -numpy.linalg.inv(E_bar_t) * e_bar_t
 
-      for t in reversed(range(l)):
-        print 't backward', t
-        # TODO(austin): I don't think we can use L_t like this here.
-        # I think we are off by 1 somewhere...
-        u_t = self.L_bar_t[t + 1] * x_hat + self.l_bar_t[t + 1]
+                self.S_bar_t[t + 1] = D_bar_t + C_bar_t.T * self.L_bar_t[t + 1]
+                self.s_bar_t[t + 1] = d_bar_t + C_bar_t.T * self.l_bar_t[t + 1]
+                self.s_scalar_bar_t[t + 1] = \
+                    -0.5 * e_bar_t.T * numpy.linalg.inv(E_bar_t) * e_bar_t \
+                    + 0.5 * c_bar_t.T * (self.S_bar_t[t] + Q_t) * c_bar_t \
+                    + c_bar_t.T * self.s_bar_t[t] + c_bar_t.T * q_t \
+                    + self.s_scalar_bar_t[t] + q_scalar_t
 
-        x_hat_prev = self.dynamics.inverse_discrete_dynamics(x_hat, u_t)
-        print 'x_hat[%2d]: %s' % (t, x_hat.T)
-        print 'x_hat_prev[%2d]: %s' % (t, x_hat_prev.T)
-        print ('L_bar[%2d]: %s' % (t + 1, self.L_bar_t[t + 1])).replace('\n', '\n            ')
-        print ('l_bar[%2d]: %s' % (t + 1, self.l_bar_t[t + 1])).replace('\n', '\n            ')
-        print 'u[%2d]: %s' % (t, u_t.T)
-        # Now compute the linearized A, B, and C
-        # Start by doing it numerically, and then optimize.
-        A_t = numerical_jacobian_x(self.dynamics.discrete_dynamics, x_hat_prev, u_t)
-        B_t = numerical_jacobian_u(self.dynamics.discrete_dynamics, x_hat_prev, u_t)
-        c_t = x_hat - A_t * x_hat_prev - B_t * u_t
+                x_hat = -numpy.linalg.solve(
+                    (self.S_t[t + 1] + self.S_bar_t[t + 1]),
+                    (self.s_t[t + 1] + self.s_bar_t[t + 1]))
+                self.S_t[l] = self.cost.estimate_Q_final(x_hat)
+            self.s_t[l] = self.cost.estimate_q_final(x_hat)
+            x_hat = -numpy.linalg.inv(self.S_t[l] + self.S_bar_t[l]) \
+                * (self.s_t[l] + self.s_bar_t[l])
 
-        print ('A_t[%2d]: %s' % (t, A_t)).replace('\n', '\n         ')
-        print ('B_t[%2d]: %s' % (t, B_t)).replace('\n', '\n         ')
-        print ('c_t[%2d]: %s' % (t, c_t)).replace('\n', '\n         ')
+            for t in reversed(range(l)):
+                print 't backward', t
+                # TODO(austin): I don't think we can use L_t like this here.
+                # I think we are off by 1 somewhere...
+                u_t = self.L_bar_t[t + 1] * x_hat + self.l_bar_t[t + 1]
 
-        Q_t = numerical_jacobian_x_x(self.cost.cost, x_hat_prev, u_t)
-        P_t = numerical_jacobian_x_u(self.cost.cost, x_hat_prev, u_t)
-        P_T_t = numerical_jacobian_u_x(self.cost.cost, x_hat_prev, u_t)
-        R_t = numerical_jacobian_u_u(self.cost.cost, x_hat_prev, u_t)
+                x_hat_prev = self.dynamics.inverse_discrete_dynamics(
+                    x_hat, u_t)
+                print 'x_hat[%2d]: %s' % (t, x_hat.T)
+                print 'x_hat_prev[%2d]: %s' % (t, x_hat_prev.T)
+                print('L_bar[%2d]: %s' % (t + 1, self.L_bar_t[t + 1])).replace(
+                    '\n', '\n            ')
+                print('l_bar[%2d]: %s' % (t + 1, self.l_bar_t[t + 1])).replace(
+                    '\n', '\n            ')
+                print 'u[%2d]: %s' % (t, u_t.T)
+                # Now compute the linearized A, B, and C
+                # Start by doing it numerically, and then optimize.
+                A_t = numerical_jacobian_x(self.dynamics.discrete_dynamics,
+                                           x_hat_prev, u_t)
+                B_t = numerical_jacobian_u(self.dynamics.discrete_dynamics,
+                                           x_hat_prev, u_t)
+                c_t = x_hat - A_t * x_hat_prev - B_t * u_t
 
-        q_t = numerical_jacobian_x(self.cost.cost, x_hat_prev, u_t).T \
-            - Q_t * x_hat_prev - P_T_t * u_t
-        r_t = numerical_jacobian_u(self.cost.cost, x_hat_prev, u_t).T \
-            - P_t * x_hat_prev - R_t * u_t
+                print('A_t[%2d]: %s' % (t, A_t)).replace('\n', '\n         ')
+                print('B_t[%2d]: %s' % (t, B_t)).replace('\n', '\n         ')
+                print('c_t[%2d]: %s' % (t, c_t)).replace('\n', '\n         ')
 
-        q_scalar_t = self.cost.cost(x_hat_prev, u_t) \
-            - 0.5 * (x_hat_prev.T * (Q_t * x_hat_prev + P_t.T * u_t) \
-            + u_t.T * (P_t * x_hat_prev + R_t * u_t)) \
-            - x_hat_prev.T * q_t - u_t.T * r_t
+                Q_t = numerical_jacobian_x_x(self.cost.cost, x_hat_prev, u_t)
+                P_t = numerical_jacobian_x_u(self.cost.cost, x_hat_prev, u_t)
+                P_T_t = numerical_jacobian_u_x(self.cost.cost, x_hat_prev, u_t)
+                R_t = numerical_jacobian_u_u(self.cost.cost, x_hat_prev, u_t)
 
-        C_t = P_t + B_t.T * self.S_t[t + 1] * A_t
-        D_t = Q_t + A_t.T * self.S_t[t + 1] * A_t
-        E_t = R_t + B_t.T * self.S_t[t + 1] * B_t
-        d_t = q_t + A_t.T * self.s_t[t + 1] + A_t.T * self.S_t[t + 1] * c_t
-        e_t = r_t + B_t.T * self.s_t[t + 1] + B_t.T * self.S_t[t + 1] * c_t
-        self.L_t[t] = -numpy.linalg.inv(E_t) * C_t
-        self.l_t[t] = -numpy.linalg.inv(E_t) * e_t
-        self.s_t[t] = d_t + C_t.T * self.l_t[t]
-        self.S_t[t] = D_t + C_t.T * self.L_t[t]
-        self.s_scalar_t[t] = q_scalar_t \
-            - 0.5 * e_t.T * numpy.linalg.inv(E_t) * e_t \
-            + 0.5 * c_t.T * self.S_t[t + 1] * c_t \
-            + c_t.T * self.s_t[t + 1] \
-            + self.s_scalar_t[t + 1]
+                q_t = numerical_jacobian_x(self.cost.cost, x_hat_prev, u_t).T \
+                    - Q_t * x_hat_prev - P_T_t * u_t
+                r_t = numerical_jacobian_u(self.cost.cost, x_hat_prev, u_t).T \
+                    - P_t * x_hat_prev - R_t * u_t
 
-        x_hat = -numpy.linalg.solve((self.S_t[t] + self.S_bar_t[t]),
-                                    (self.s_t[t] + self.s_bar_t[t]))
-        if t == 0:
-          self.last_x_hat_t[t] = x_hat_initial
-        else:
-          self.last_x_hat_t[t] = x_hat
+                q_scalar_t = self.cost.cost(x_hat_prev, u_t) \
+                    - 0.5 * (x_hat_prev.T * (Q_t * x_hat_prev + P_t.T * u_t) \
+                    + u_t.T * (P_t * x_hat_prev + R_t * u_t)) \
+                    - x_hat_prev.T * q_t - u_t.T * r_t
 
-      x_hat_t = [x_hat_initial]
+                C_t = P_t + B_t.T * self.S_t[t + 1] * A_t
+                D_t = Q_t + A_t.T * self.S_t[t + 1] * A_t
+                E_t = R_t + B_t.T * self.S_t[t + 1] * B_t
+                d_t = q_t + A_t.T * self.s_t[t + 1] + A_t.T * self.S_t[t +
+                                                                       1] * c_t
+                e_t = r_t + B_t.T * self.s_t[t + 1] + B_t.T * self.S_t[t +
+                                                                       1] * c_t
+                self.L_t[t] = -numpy.linalg.inv(E_t) * C_t
+                self.l_t[t] = -numpy.linalg.inv(E_t) * e_t
+                self.s_t[t] = d_t + C_t.T * self.l_t[t]
+                self.S_t[t] = D_t + C_t.T * self.L_t[t]
+                self.s_scalar_t[t] = q_scalar_t \
+                    - 0.5 * e_t.T * numpy.linalg.inv(E_t) * e_t \
+                    + 0.5 * c_t.T * self.S_t[t + 1] * c_t \
+                    + c_t.T * self.s_t[t + 1] \
+                    + self.s_scalar_t[t + 1]
 
-      pylab.figure('states %d' % a)
-      pylab.ion()
-      for dim in range(num_states):
-        pylab.plot(numpy.arange(len(self.last_x_hat_t)),
-                   [x_hat_loop[dim, 0] for x_hat_loop in self.last_x_hat_t],
-                   marker='o', label='Xhat[%d]' % dim)
-      pylab.legend()
-      pylab.draw()
+                x_hat = -numpy.linalg.solve((self.S_t[t] + self.S_bar_t[t]),
+                                            (self.s_t[t] + self.s_bar_t[t]))
+                if t == 0:
+                    self.last_x_hat_t[t] = x_hat_initial
+                else:
+                    self.last_x_hat_t[t] = x_hat
 
-      pylab.figure('xy %d' % a)
-      pylab.ion()
-      pylab.plot([x_hat_loop[0, 0] for x_hat_loop in self.last_x_hat_t],
-                 [x_hat_loop[1, 0] for x_hat_loop in self.last_x_hat_t],
-                 marker='o', label='trajectory')
-      pylab.legend()
-      pylab.draw()
+            x_hat_t = [x_hat_initial]
 
-    final_u_t = [numpy.matrix(numpy.zeros((num_inputs, 1))) for _ in range(l + 1)]
-    cost_to_go = []
-    cost_to_come = []
-    cost = []
-    for t in range(l):
-      cost_to_go.append(
-          (0.5 * self.last_x_hat_t[t].T * self.S_t[t] * self.last_x_hat_t[t] \
-          + self.last_x_hat_t[t].T * self.s_t[t] + self.s_scalar_t[t])[0, 0])
-      cost_to_come.append(
-          (0.5 * self.last_x_hat_t[t].T * self.S_bar_t[t] * self.last_x_hat_t[t] \
-           + self.last_x_hat_t[t].T * self.s_bar_t[t] + self.s_scalar_bar_t[t])[0, 0])
-      cost.append(cost_to_go[-1] + cost_to_come[-1])
-      final_u_t[t] = self.L_t[t] * self.last_x_hat_t[t] + self.l_t[t]
+            pylab.figure('states %d' % a)
+            pylab.ion()
+            for dim in range(num_states):
+                pylab.plot(
+                    numpy.arange(len(self.last_x_hat_t)),
+                    [x_hat_loop[dim, 0] for x_hat_loop in self.last_x_hat_t],
+                    marker='o',
+                    label='Xhat[%d]' % dim)
+            pylab.legend()
+            pylab.draw()
 
-    for t in range(l):
-      A_t = numerical_jacobian_x(self.dynamics.discrete_dynamics,
-                                 self.last_x_hat_t[t], final_u_t[t])
-      B_t = numerical_jacobian_u(self.dynamics.discrete_dynamics,
-                                 self.last_x_hat_t[t], final_u_t[t])
-      c_t = self.dynamics.discrete_dynamics(self.last_x_hat_t[t], final_u_t[t]) \
-          - A_t * self.last_x_hat_t[t] - B_t * final_u_t[t]
-      print("Infeasability at", t, "is",
-            ((A_t * self.last_x_hat_t[t] + B_t * final_u_t[t] + c_t) \
-            - self.last_x_hat_t[t + 1]).T)
+            pylab.figure('xy %d' % a)
+            pylab.ion()
+            pylab.plot([x_hat_loop[0, 0] for x_hat_loop in self.last_x_hat_t],
+                       [x_hat_loop[1, 0] for x_hat_loop in self.last_x_hat_t],
+                       marker='o',
+                       label='trajectory')
+            pylab.legend()
+            pylab.draw()
 
-    pylab.figure('u')
-    samples = numpy.arange(len(final_u_t))
-    for i in range(num_inputs):
-      pylab.plot(samples, [u[i, 0] for u in final_u_t],
-                 label='u[%d]' % i, marker='o')
-      pylab.legend()
+        final_u_t = [
+            numpy.matrix(numpy.zeros((num_inputs, 1))) for _ in range(l + 1)
+        ]
+        cost_to_go = []
+        cost_to_come = []
+        cost = []
+        for t in range(l):
+            cost_to_go.append(
+                (0.5 * self.last_x_hat_t[t].T * self.S_t[t] * self.last_x_hat_t[t] \
+                + self.last_x_hat_t[t].T * self.s_t[t] + self.s_scalar_t[t])[0, 0])
+            cost_to_come.append(
+                (0.5 * self.last_x_hat_t[t].T * self.S_bar_t[t] * self.last_x_hat_t[t] \
+                 + self.last_x_hat_t[t].T * self.s_bar_t[t] + self.s_scalar_bar_t[t])[0, 0])
+            cost.append(cost_to_go[-1] + cost_to_come[-1])
+            final_u_t[t] = self.L_t[t] * self.last_x_hat_t[t] + self.l_t[t]
 
-    pylab.figure('cost')
-    cost_samples = numpy.arange(len(cost))
-    pylab.plot(cost_samples, cost_to_go, label='cost to go', marker='o')
-    pylab.plot(cost_samples, cost_to_come, label='cost to come', marker='o')
-    pylab.plot(cost_samples, cost, label='cost', marker='o')
-    pylab.legend()
+        for t in range(l):
+            A_t = numerical_jacobian_x(self.dynamics.discrete_dynamics,
+                                       self.last_x_hat_t[t], final_u_t[t])
+            B_t = numerical_jacobian_u(self.dynamics.discrete_dynamics,
+                                       self.last_x_hat_t[t], final_u_t[t])
+            c_t = self.dynamics.discrete_dynamics(self.last_x_hat_t[t], final_u_t[t]) \
+                - A_t * self.last_x_hat_t[t] - B_t * final_u_t[t]
+            print("Infeasability at", t, "is",
+                  ((A_t * self.last_x_hat_t[t] + B_t * final_u_t[t] + c_t) \
+                  - self.last_x_hat_t[t + 1]).T)
 
-    pylab.ioff()
-    pylab.show()
+        pylab.figure('u')
+        samples = numpy.arange(len(final_u_t))
+        for i in range(num_inputs):
+            pylab.plot(samples, [u[i, 0] for u in final_u_t],
+                       label='u[%d]' % i,
+                       marker='o')
+            pylab.legend()
+
+        pylab.figure('cost')
+        cost_samples = numpy.arange(len(cost))
+        pylab.plot(cost_samples, cost_to_go, label='cost to go', marker='o')
+        pylab.plot(cost_samples,
+                   cost_to_come,
+                   label='cost to come',
+                   marker='o')
+        pylab.plot(cost_samples, cost, label='cost', marker='o')
+        pylab.legend()
+
+        pylab.ioff()
+        pylab.show()
+
 
 if __name__ == '__main__':
-  dt = 0.05
-  #arm_dynamics = ArmDynamics(dt=dt)
-  #elqr = ELQR(arm_dynamics, ArmCostFunction(dt=dt, dynamics=arm_dynamics))
-  #x_hat_initial = numpy.matrix([[0.10], [1.0], [0.0], [0.0]])
-  #elqr.Solve(x_hat_initial, 100, 3)
+    dt = 0.05
+    #arm_dynamics = ArmDynamics(dt=dt)
+    #elqr = ELQR(arm_dynamics, ArmCostFunction(dt=dt, dynamics=arm_dynamics))
+    #x_hat_initial = numpy.matrix([[0.10], [1.0], [0.0], [0.0]])
+    #elqr.Solve(x_hat_initial, 100, 3)
 
-  elqr = ELQR(SkidSteerDynamics(dt=dt), CostFunction(dt=dt))
-  x_hat_initial = numpy.matrix([[0.10], [1.0], [0.0]])
-  elqr.Solve(x_hat_initial, 100, 15)
-  sys.exit(1)
+    elqr = ELQR(SkidSteerDynamics(dt=dt), CostFunction(dt=dt))
+    x_hat_initial = numpy.matrix([[0.10], [1.0], [0.0]])
+    elqr.Solve(x_hat_initial, 100, 15)
+    sys.exit(1)
diff --git a/y2018/control_loops/python/graph_codegen.py b/y2018/control_loops/python/graph_codegen.py
index 22bd1d2..e7f8ce1 100644
--- a/y2018/control_loops/python/graph_codegen.py
+++ b/y2018/control_loops/python/graph_codegen.py
@@ -23,16 +23,16 @@
         alpha_unitizer = "(::Eigen::Matrix<double, 2, 2>() << %f, %f, %f, %f).finished()" % (
             segment.alpha_unitizer[0, 0], segment.alpha_unitizer[0, 1],
             segment.alpha_unitizer[1, 0], segment.alpha_unitizer[1, 1])
-    cc_file.append( "  trajectories->emplace_back(%s," % (vmax))
-    cc_file.append( "                             %s," % (alpha_unitizer))
+    cc_file.append("  trajectories->emplace_back(%s," % (vmax))
+    cc_file.append("                             %s," % (alpha_unitizer))
     if reverse:
         cc_file.append(
             "                             Trajectory(Path::Reversed(%s()), 0.005));"
             % (path_function_name(str(name))))
     else:
         cc_file.append(
-            "                             Trajectory(%s(), 0.005));"
-            % (path_function_name(str(name))))
+            "                             Trajectory(%s(), 0.005));" %
+            (path_function_name(str(name))))
 
     start_index = None
     end_index = None
@@ -45,15 +45,15 @@
     if reverse:
         start_index, end_index = end_index, start_index
 
-    cc_file.append("  edges.push_back(SearchGraph::Edge{%s(), %s()," %
-                   (index_function_name(start_index),
-                    index_function_name(end_index)))
     cc_file.append(
-        "                     (trajectories->back().trajectory.path().length() + 0.2)});")
+        "  edges.push_back(SearchGraph::Edge{%s(), %s()," %
+        (index_function_name(start_index), index_function_name(end_index)))
+    cc_file.append(
+        "                     (trajectories->back().trajectory.path().length() + 0.2)});"
+    )
 
     # TODO(austin): Allow different vmaxes for different paths.
-    cc_file.append(
-        "  trajectories->back().trajectory.OptimizeTrajectory(")
+    cc_file.append("  trajectories->back().trajectory.OptimizeTrajectory(")
     cc_file.append("      trajectories->back().alpha_unitizer,")
     cc_file.append("      trajectories->back().vmax);")
     cc_file.append("")
@@ -116,15 +116,16 @@
         h_file.append("")
         h_file.append("constexpr uint32_t %s() { return %d; }" %
                       (index_function_name(point[1]), index))
-        h_file.append(
-            "inline ::Eigen::Matrix<double, 2, 1> %sPoint() {" % point[1])
+        h_file.append("inline ::Eigen::Matrix<double, 2, 1> %sPoint() {" %
+                      point[1])
         h_file.append(
             "  return (::Eigen::Matrix<double, 2, 1>() << %f, %f).finished();"
             % (numpy.pi / 2.0 - point[0][0], numpy.pi / 2.0 - point[0][1]))
         h_file.append("}")
 
     front_points = [
-        index_function_name(point[1]) + "()" for point in graph_generate.front_points
+        index_function_name(point[1]) + "()"
+        for point in graph_generate.front_points
     ]
     h_file.append("")
     h_file.append("constexpr ::std::array<uint32_t, %d> FrontPoints() {" %
@@ -134,7 +135,8 @@
     h_file.append("}")
 
     back_points = [
-        index_function_name(point[1]) + "()" for point in graph_generate.back_points
+        index_function_name(point[1]) + "()"
+        for point in graph_generate.back_points
     ]
     h_file.append("")
     h_file.append("constexpr ::std::array<uint32_t, %d> BackPoints() {" %
@@ -149,10 +151,10 @@
     for name, segment in list(enumerate(graph_generate.unnamed_segments)) + [
         (x.name, x) for x in graph_generate.named_segments
     ]:
-        h_file.append(
-            "::std::unique_ptr<Path> %s();" % path_function_name(name))
-        cc_file.append(
-            "::std::unique_ptr<Path> %s() {" % path_function_name(name))
+        h_file.append("::std::unique_ptr<Path> %s();" %
+                      path_function_name(name))
+        cc_file.append("::std::unique_ptr<Path> %s() {" %
+                       path_function_name(name))
         cc_file.append("  return ::std::unique_ptr<Path>(new Path({")
         for point in segment.ToThetaPoints():
             cc_file.append("      {{%.12f, %.12f, %.12f," %
@@ -188,7 +190,8 @@
                    "::std::vector<TrajectoryAndParams> *trajectories,")
     cc_file.append("                            "
                    "const ::Eigen::Matrix<double, 2, 2> &alpha_unitizer,")
-    cc_file.append("                            " "double vmax) {")
+    cc_file.append("                            "
+                   "double vmax) {")
     cc_file.append("  ::std::vector<SearchGraph::Edge> edges;")
 
     index = 0
@@ -202,8 +205,8 @@
         add_edge(cc_file, name, segment, index, True)
         index += 1
 
-    cc_file.append("  return SearchGraph(%d, ::std::move(edges));" % len(
-        graph_generate.points))
+    cc_file.append("  return SearchGraph(%d, ::std::move(edges));" %
+                   len(graph_generate.points))
     cc_file.append("}")
 
     h_file.append("")
diff --git a/y2018/control_loops/python/graph_edit.py b/y2018/control_loops/python/graph_edit.py
index fa9c9e5..7b6179c 100644
--- a/y2018/control_loops/python/graph_edit.py
+++ b/y2018/control_loops/python/graph_edit.py
@@ -7,6 +7,7 @@
 import random
 import gi
 import numpy
+
 gi.require_version('Gtk', '3.0')
 from gi.repository import Gdk, Gtk
 import cairo
@@ -70,8 +71,8 @@
 
 # right hand side lines
 lines2 = [(joint_center[0] + derr, 0.3048), (0.422275, 0.3048),
-          (0.422275, 0.1397), (0.826135, 0.1397), (0.826135,
-                                                   inter_y(0.826135))]
+          (0.422275, 0.1397), (0.826135, 0.1397),
+          (0.826135, inter_y(0.826135))]
 
 t1_min = get_angle((32.525 - 4.0) * 0.0254)
 t2_min = -7.0 / 4.0 * numpy.pi
@@ -119,8 +120,8 @@
 
 p1 = Polygon(lines_theta)
 
-p2 = Polygon([(t1_min, t2_min), (t1_max, t2_min), (t1_max, t2_max), (t1_min,
-                                                                     t2_max)])
+p2 = Polygon([(t1_min, t2_min), (t1_max, t2_min), (t1_max, t2_max),
+              (t1_min, t2_max)])
 
 # Fully computed theta constrints.
 lines_theta = list(p1.intersection(p2).exterior.coords)
@@ -157,7 +158,6 @@
             abs(dpx * pdx + dpy * pdy)
 
 
-
 def closest_segment(lines, pt):
     c_pt, c_pt_dist = get_closest(lines[-1], lines[0], pt)
     for i in range(1, len(lines)):
@@ -172,6 +172,7 @@
 
 # Create a GTK+ widget on which we will draw using Cairo
 class Silly(basic_window.BaseWindow):
+
     def __init__(self):
         super(Silly, self).__init__()
 
@@ -230,6 +231,7 @@
             self.window.queue_draw()
 
     def method_connect(self, event, cb):
+
         def handler(obj, *args):
             cb(*args)
 
@@ -332,7 +334,8 @@
                 cr.stroke()
 
         if not self.theta_version:
-            theta1, theta2 = to_theta(self.last_pos, self.circular_index_select)
+            theta1, theta2 = to_theta(self.last_pos,
+                                      self.circular_index_select)
             x, y = joint_center[0], joint_center[1]
             cr.move_to(x, y)
 
@@ -473,16 +476,16 @@
         else:
             self.segments[0].control2 = self.now_segment_pt
 
-        print('Clicked at theta: %s' % (repr(self.now_segment_pt,)))
+        print('Clicked at theta: %s' % (repr(self.now_segment_pt, )))
         if not self.theta_version:
             print('Clicked at xy, circular index: (%f, %f, %f)' %
                   (self.last_pos[0], self.last_pos[1],
                    self.circular_index_select))
 
-        print('c1: numpy.array([%f, %f])' % (self.segments[0].control1[0],
-                                             self.segments[0].control1[1]))
-        print('c2: numpy.array([%f, %f])' % (self.segments[0].control2[0],
-                                             self.segments[0].control2[1]))
+        print('c1: numpy.array([%f, %f])' %
+              (self.segments[0].control1[0], self.segments[0].control1[1]))
+        print('c2: numpy.array([%f, %f])' %
+              (self.segments[0].control2[0], self.segments[0].control2[1]))
 
         self.redraw()
 
diff --git a/y2018/control_loops/python/graph_generate.py b/y2018/control_loops/python/graph_generate.py
index dae7caa..046b9dd 100644
--- a/y2018/control_loops/python/graph_generate.py
+++ b/y2018/control_loops/python/graph_generate.py
@@ -195,6 +195,7 @@
 
 # Segment in angle space.
 class AngleSegment:
+
     def __init__(self, start, end, name=None, alpha_unitizer=None, vmax=None):
         """Creates an angle segment.
 
@@ -321,8 +322,8 @@
     a = alpha_blend(start, control1, alpha)
     b = alpha_blend(control1, control2, alpha)
     c = alpha_blend(control2, end, alpha)
-    return alpha_blend(
-        alpha_blend(a, b, alpha), alpha_blend(b, c, alpha), alpha)
+    return alpha_blend(alpha_blend(a, b, alpha), alpha_blend(b, c, alpha),
+                       alpha)
 
 
 def subdivide_spline(start, control1, control2, end):
@@ -333,6 +334,7 @@
 
 
 class SplineSegment:
+
     def __init__(self,
                  start,
                  control1,
@@ -350,10 +352,9 @@
         self.vmax = vmax
 
     def __repr__(self):
-        return "SplineSegment(%s, %s, %s, %s)" % (repr(self.start),
-                                                  repr(self.control1),
-                                                  repr(self.control2),
-                                                  repr(self.end))
+        return "SplineSegment(%s, %s, %s, %s)" % (repr(
+            self.start), repr(self.control1), repr(
+                self.control2), repr(self.end))
 
     def DrawTo(self, cr, theta_version):
         if theta_version:
@@ -364,9 +365,8 @@
             end = get_xy(self.end)
 
             draw_lines(cr, [
-                to_theta(
-                    spline_eval(start, control1, control2, end, alpha),
-                    c_i_select)
+                to_theta(spline_eval(start, control1, control2, end, alpha),
+                         c_i_select)
                 for alpha in subdivide_spline(start, control1, control2, end)
             ])
             cr.move_to(self.start[0] + theta_end_circle_size, self.start[1])
@@ -418,6 +418,7 @@
 
 
 class ThetaSplineSegment:
+
     def __init__(self,
                  start,
                  control1,
@@ -435,10 +436,9 @@
         self.vmax = vmax
 
     def __repr__(self):
-        return "ThetaSplineSegment(%s, %s, &s, %s)" % (repr(self.start),
-                                                       repr(self.control1),
-                                                       repr(self.control2),
-                                                       repr(self.end))
+        return "ThetaSplineSegment(%s, %s, &s, %s)" % (repr(
+            self.start), repr(self.control1), repr(
+                self.control2), repr(self.end))
 
     def DrawTo(self, cr, theta_version):
         if (theta_version):
@@ -485,30 +485,36 @@
 short_box_x = 0.431
 short_box_y = 0.082
 
-ready_above_box = to_theta_with_circular_index(
-    tall_box_x, tall_box_y + 0.08, circular_index=-1)
-tall_box_grab = to_theta_with_circular_index(
-    tall_box_x, tall_box_y, circular_index=-1)
-short_box_grab = to_theta_with_circular_index(
-    short_box_x, short_box_y, circular_index=-1)
+ready_above_box = to_theta_with_circular_index(tall_box_x,
+                                               tall_box_y + 0.08,
+                                               circular_index=-1)
+tall_box_grab = to_theta_with_circular_index(tall_box_x,
+                                             tall_box_y,
+                                             circular_index=-1)
+short_box_grab = to_theta_with_circular_index(short_box_x,
+                                              short_box_y,
+                                              circular_index=-1)
 
 # TODO(austin): Drive the front/back off the same numbers a bit better.
 front_high_box = to_theta_with_circular_index(0.378, 2.46, circular_index=-1)
-front_middle3_box = to_theta_with_circular_index(
-    0.700, 2.125, circular_index=-1.000000)
-front_middle2_box = to_theta_with_circular_index(
-    0.700, 2.268, circular_index=-1)
-front_middle1_box = to_theta_with_circular_index(
-    0.800, 1.915, circular_index=-1)
+front_middle3_box = to_theta_with_circular_index(0.700,
+                                                 2.125,
+                                                 circular_index=-1.000000)
+front_middle2_box = to_theta_with_circular_index(0.700,
+                                                 2.268,
+                                                 circular_index=-1)
+front_middle1_box = to_theta_with_circular_index(0.800,
+                                                 1.915,
+                                                 circular_index=-1)
 front_low_box = to_theta_with_circular_index(0.87, 1.572, circular_index=-1)
 back_high_box = to_theta_with_circular_index(-0.75, 2.48, circular_index=0)
-back_middle2_box = to_theta_with_circular_index(
-    -0.700, 2.27, circular_index=0)
-back_middle1_box = to_theta_with_circular_index(
-    -0.800, 1.93, circular_index=0)
+back_middle2_box = to_theta_with_circular_index(-0.700, 2.27, circular_index=0)
+back_middle1_box = to_theta_with_circular_index(-0.800, 1.93, circular_index=0)
 back_low_box = to_theta_with_circular_index(-0.87, 1.64, circular_index=0)
 
-back_extra_low_box = to_theta_with_circular_index(-0.87, 1.52, circular_index=0)
+back_extra_low_box = to_theta_with_circular_index(-0.87,
+                                                  1.52,
+                                                  circular_index=0)
 
 front_switch = to_theta_with_circular_index(0.88, 0.967, circular_index=-1)
 back_switch = to_theta_with_circular_index(-0.88, 0.967, circular_index=-2)
@@ -517,26 +523,20 @@
 
 up = to_theta_with_circular_index(0.0, 2.547, circular_index=-1)
 
-front_switch_auto = to_theta_with_circular_index(
-    0.750, 2.20, circular_index=-1.000000)
+front_switch_auto = to_theta_with_circular_index(0.750,
+                                                 2.20,
+                                                 circular_index=-1.000000)
 
-duck = numpy.array(
-    [numpy.pi / 2.0 - 0.92, numpy.pi / 2.0 - 4.26])
+duck = numpy.array([numpy.pi / 2.0 - 0.92, numpy.pi / 2.0 - 4.26])
 
-starting = numpy.array(
-    [numpy.pi / 2.0 - 0.593329, numpy.pi / 2.0 - 3.749631])
-vertical_starting = numpy.array(
-    [numpy.pi / 2.0, -numpy.pi / 2.0])
+starting = numpy.array([numpy.pi / 2.0 - 0.593329, numpy.pi / 2.0 - 3.749631])
+vertical_starting = numpy.array([numpy.pi / 2.0, -numpy.pi / 2.0])
 
-self_hang = numpy.array(
-    [numpy.pi / 2.0 - 0.191611, numpy.pi / 2.0])
-partner_hang = numpy.array(
-    [numpy.pi / 2.0 - (-0.30), numpy.pi / 2.0])
+self_hang = numpy.array([numpy.pi / 2.0 - 0.191611, numpy.pi / 2.0])
+partner_hang = numpy.array([numpy.pi / 2.0 - (-0.30), numpy.pi / 2.0])
 
-above_hang = numpy.array(
-    [numpy.pi / 2.0 - 0.14, numpy.pi / 2.0 - (-0.165)])
-below_hang = numpy.array(
-    [numpy.pi / 2.0 - 0.39, numpy.pi / 2.0 - (-0.517)])
+above_hang = numpy.array([numpy.pi / 2.0 - 0.14, numpy.pi / 2.0 - (-0.165)])
+below_hang = numpy.array([numpy.pi / 2.0 - 0.39, numpy.pi / 2.0 - (-0.517)])
 
 up_c1 = to_theta((0.63, 1.17), circular_index=-1)
 up_c2 = to_theta((0.65, 1.62), circular_index=-1)
@@ -603,25 +603,25 @@
         num_points = int(numpy.ceil(norm / max_distance))
         last_iteration_point = previous_point
         for subindex in range(1, num_points):
-            subpoint = to_theta(
-                alpha_blend(previous_point_xy, point_xy,
-                            float(subindex) / num_points),
-                circular_index=circular_index)
-            result_points.append((subpoint, '%s%dof%d' % (name, subindex,
-                                                          num_points)))
+            subpoint = to_theta(alpha_blend(previous_point_xy, point_xy,
+                                            float(subindex) / num_points),
+                                circular_index=circular_index)
+            result_points.append(
+                (subpoint, '%s%dof%d' % (name, subindex, num_points)))
             result_paths.append(
                 XYSegment(last_iteration_point, subpoint, vmax=6.0))
             if (last_iteration_point != previous_point).any():
                 result_paths.append(XYSegment(previous_point, subpoint))
             if subindex == num_points - 1:
-              result_paths.append(XYSegment(subpoint, point, vmax=6.0))
+                result_paths.append(XYSegment(subpoint, point, vmax=6.0))
             else:
-              result_paths.append(XYSegment(subpoint, point))
+                result_paths.append(XYSegment(subpoint, point))
             last_iteration_point = subpoint
         result_points.append((point, name))
 
     return result_points, result_paths
 
+
 front_points, front_paths = expand_points(sparse_front_points, 0.06)
 back_points, back_paths = expand_points(sparse_back_points, 0.06)
 
@@ -650,7 +650,6 @@
 front_switch_auto_c1 = numpy.array([1.792857, -0.372768])
 front_switch_auto_c2 = numpy.array([1.861885, -0.273664])
 
-
 # We need to define critical points so we can create paths connecting them.
 # TODO(austin): Attach velocities to the slow ones.
 ready_to_back_low_c1 = numpy.array([2.524325, 0.046417])
@@ -670,30 +669,58 @@
 neutral_to_back_c1 = numpy.array([0.702527, -2.618276])
 neutral_to_back_c2 = numpy.array([0.526914, -3.109691])
 
-
 named_segments = [
-    ThetaSplineSegment(neutral, neutral_to_back_c1, neutral_to_back_c2, back_switch, "BackSwitch"),
-
-    ThetaSplineSegment(neutral, neutral_to_back_low_c1, tall_to_back_high_c2, back_high_box, "NeutralBoxToHigh", alpha_unitizer=long_alpha_unitizer),
-    ThetaSplineSegment(neutral, neutral_to_back_low_c1, tall_to_back_high_c2, back_middle2_box, "NeutralBoxToMiddle2", long_alpha_unitizer),
-    ThetaSplineSegment(neutral, neutral_to_back_low_c1, tall_to_back_low_c2, back_middle1_box, "NeutralBoxToMiddle1", long_alpha_unitizer),
-    ThetaSplineSegment(neutral, neutral_to_back_low_c1, tall_to_back_low_c2, back_low_box, "NeutralBoxToLow", long_alpha_unitizer),
-
-    ThetaSplineSegment(ready_above_box, ready_to_back_low_c1, tall_to_back_high_c2, back_high_box, "ReadyBoxToHigh", long_alpha_unitizer),
-    ThetaSplineSegment(ready_above_box, ready_to_back_low_c1, tall_to_back_high_c2, back_middle2_box, "ReadyBoxToMiddle2", long_alpha_unitizer),
-    ThetaSplineSegment(ready_above_box, ready_to_back_low_c1, tall_to_back_low_c2, back_middle1_box, "ReadyBoxToMiddle1", long_alpha_unitizer),
-    ThetaSplineSegment(ready_above_box, ready_to_back_low_c1, tall_to_back_low_c2, back_low_box, "ReadyBoxToLow", long_alpha_unitizer),
-
-    ThetaSplineSegment(short_box_grab, tall_to_back_low_c1, tall_to_back_high_c2, back_high_box, "ShortBoxToHigh", long_alpha_unitizer),
-    ThetaSplineSegment(short_box_grab, tall_to_back_low_c1, tall_to_back_high_c2, back_middle2_box, "ShortBoxToMiddle2", long_alpha_unitizer),
-    ThetaSplineSegment(short_box_grab, tall_to_back_low_c1, tall_to_back_low_c2, back_middle1_box, "ShortBoxToMiddle1", long_alpha_unitizer),
-    ThetaSplineSegment(short_box_grab, tall_to_back_low_c1, tall_to_back_low_c2, back_low_box, "ShortBoxToLow", long_alpha_unitizer),
-
-    ThetaSplineSegment(tall_box_grab, tall_to_back_low_c1, tall_to_back_high_c2, back_high_box, "TallBoxToHigh", long_alpha_unitizer),
-    ThetaSplineSegment(tall_box_grab, tall_to_back_low_c1, tall_to_back_high_c2, back_middle2_box, "TallBoxToMiddle2", long_alpha_unitizer),
-    ThetaSplineSegment(tall_box_grab, tall_to_back_low_c1, tall_to_back_low_c2, back_middle1_box, "TallBoxToMiddle1", long_alpha_unitizer),
-    ThetaSplineSegment(tall_box_grab, tall_to_back_low_c1, tall_to_back_low_c2, back_low_box, "TallBoxToLow", long_alpha_unitizer),
-
+    ThetaSplineSegment(neutral, neutral_to_back_c1, neutral_to_back_c2,
+                       back_switch, "BackSwitch"),
+    ThetaSplineSegment(neutral,
+                       neutral_to_back_low_c1,
+                       tall_to_back_high_c2,
+                       back_high_box,
+                       "NeutralBoxToHigh",
+                       alpha_unitizer=long_alpha_unitizer),
+    ThetaSplineSegment(neutral, neutral_to_back_low_c1, tall_to_back_high_c2,
+                       back_middle2_box, "NeutralBoxToMiddle2",
+                       long_alpha_unitizer),
+    ThetaSplineSegment(neutral, neutral_to_back_low_c1, tall_to_back_low_c2,
+                       back_middle1_box, "NeutralBoxToMiddle1",
+                       long_alpha_unitizer),
+    ThetaSplineSegment(neutral, neutral_to_back_low_c1, tall_to_back_low_c2,
+                       back_low_box, "NeutralBoxToLow", long_alpha_unitizer),
+    ThetaSplineSegment(ready_above_box, ready_to_back_low_c1,
+                       tall_to_back_high_c2, back_high_box, "ReadyBoxToHigh",
+                       long_alpha_unitizer),
+    ThetaSplineSegment(ready_above_box, ready_to_back_low_c1,
+                       tall_to_back_high_c2, back_middle2_box,
+                       "ReadyBoxToMiddle2", long_alpha_unitizer),
+    ThetaSplineSegment(ready_above_box, ready_to_back_low_c1,
+                       tall_to_back_low_c2, back_middle1_box,
+                       "ReadyBoxToMiddle1", long_alpha_unitizer),
+    ThetaSplineSegment(ready_above_box, ready_to_back_low_c1,
+                       tall_to_back_low_c2, back_low_box, "ReadyBoxToLow",
+                       long_alpha_unitizer),
+    ThetaSplineSegment(short_box_grab, tall_to_back_low_c1,
+                       tall_to_back_high_c2, back_high_box, "ShortBoxToHigh",
+                       long_alpha_unitizer),
+    ThetaSplineSegment(short_box_grab, tall_to_back_low_c1,
+                       tall_to_back_high_c2, back_middle2_box,
+                       "ShortBoxToMiddle2", long_alpha_unitizer),
+    ThetaSplineSegment(short_box_grab, tall_to_back_low_c1,
+                       tall_to_back_low_c2, back_middle1_box,
+                       "ShortBoxToMiddle1", long_alpha_unitizer),
+    ThetaSplineSegment(short_box_grab, tall_to_back_low_c1,
+                       tall_to_back_low_c2, back_low_box, "ShortBoxToLow",
+                       long_alpha_unitizer),
+    ThetaSplineSegment(tall_box_grab, tall_to_back_low_c1,
+                       tall_to_back_high_c2, back_high_box, "TallBoxToHigh",
+                       long_alpha_unitizer),
+    ThetaSplineSegment(tall_box_grab, tall_to_back_low_c1,
+                       tall_to_back_high_c2, back_middle2_box,
+                       "TallBoxToMiddle2", long_alpha_unitizer),
+    ThetaSplineSegment(tall_box_grab, tall_to_back_low_c1, tall_to_back_low_c2,
+                       back_middle1_box, "TallBoxToMiddle1",
+                       long_alpha_unitizer),
+    ThetaSplineSegment(tall_box_grab, tall_to_back_low_c1, tall_to_back_low_c2,
+                       back_low_box, "TallBoxToLow", long_alpha_unitizer),
     SplineSegment(neutral, ready_above_box_c1, ready_above_box_c2,
                   ready_above_box, "ReadyToNeutral"),
     XYSegment(ready_above_box, tall_box_grab, "ReadyToTallBox", vmax=6.0),
@@ -713,32 +740,29 @@
 ]
 
 unnamed_segments = [
-    SplineSegment(neutral, front_switch_auto_c1, front_switch_auto_c2, front_switch_auto),
+    SplineSegment(neutral, front_switch_auto_c1, front_switch_auto_c2,
+                  front_switch_auto),
     SplineSegment(tall_box_grab, ready_to_up_c1, ready_to_up_c2, up),
     SplineSegment(short_box_grab, ready_to_up_c1, ready_to_up_c2, up),
     SplineSegment(ready_above_box, ready_to_up_c1, ready_to_up_c2, up),
     ThetaSplineSegment(duck, duck_c1, duck_c2, neutral),
     SplineSegment(neutral, front_switch_c1, front_switch_c2, front_switch),
-
     XYSegment(ready_above_box, front_low_box),
     XYSegment(ready_above_box, front_switch),
     XYSegment(ready_above_box, front_middle1_box),
     XYSegment(ready_above_box, front_middle2_box),
     XYSegment(ready_above_box, front_middle3_box),
-    SplineSegment(ready_above_box, ready_to_up_c1, ready_to_up_c2, front_high_box),
-
+    SplineSegment(ready_above_box, ready_to_up_c1, ready_to_up_c2,
+                  front_high_box),
     AngleSegment(starting, vertical_starting),
     AngleSegment(vertical_starting, neutral),
-
     XYSegment(neutral, front_low_box),
     XYSegment(up, front_high_box),
     XYSegment(up, front_middle2_box),
-
     XYSegment(front_middle3_box, up),
     XYSegment(front_middle3_box, front_high_box),
     XYSegment(front_middle3_box, front_middle2_box),
     XYSegment(front_middle3_box, front_middle1_box),
-
     XYSegment(up, front_middle1_box),
     XYSegment(up, front_low_box),
     XYSegment(front_high_box, front_middle2_box),
@@ -760,7 +784,6 @@
     XYSegment(back_middle2_box, back_middle1_box),
     XYSegment(back_middle2_box, back_low_box),
     XYSegment(back_middle1_box, back_low_box),
-
     AngleSegment(up, above_hang),
     AngleSegment(above_hang, below_hang),
     AngleSegment(up, below_hang),
diff --git a/y2018/control_loops/python/intake.py b/y2018/control_loops/python/intake.py
index 00f737b..92b7c7a 100755
--- a/y2018/control_loops/python/intake.py
+++ b/y2018/control_loops/python/intake.py
@@ -105,8 +105,11 @@
         r_nm = 0.025
         self.R = numpy.matrix(numpy.diag([(r_nm**2.0), (r_nm**2.0)]))
 
-        self.KalmanGain, self.Q_steady = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
 
         # The box formed by U_min and U_max must encompass all possible values,
         # or else Austin's code gets angry.
@@ -181,8 +184,9 @@
 
         self.R = numpy.matrix([[(1.0 / (12.0**2.0))]])
 
-        self.K_transformed = controls.dlqr(
-            self.A_transformed, self.B_transformed, self.Q_lqr, self.R)
+        self.K_transformed = controls.dlqr(self.A_transformed,
+                                           self.B_transformed, self.Q_lqr,
+                                           self.R)
 
         # Write the controller back out in the absolute coordinate system.
         self.K = numpy.hstack(
@@ -215,8 +219,11 @@
                    repr(numpy.linalg.eig(self.A - self.B * self.K)[0]),
                    self._name)
 
-        self.KalmanGain, self.Q_steady = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.Q_steady = controls.kalman(A=self.A,
+                                                         B=self.B,
+                                                         C=self.C,
+                                                         Q=self.Q,
+                                                         R=self.R)
 
         self.InitializeState()
 
@@ -359,11 +366,10 @@
     observer_intake.X_hat[0, 0] = intake.X[0, 0]
 
     # Test moving the intake with constant separation.
-    scenario_plotter.run_test(
-        intake,
-        controller_intake=intake_controller,
-        observer_intake=observer_intake,
-        iterations=200)
+    scenario_plotter.run_test(intake,
+                              controller_intake=intake_controller,
+                              observer_intake=observer_intake,
+                              iterations=200)
 
     if FLAGS.plot:
         scenario_plotter.Plot()
@@ -376,8 +382,8 @@
     else:
         namespaces = ['y2018', 'control_loops', 'superstructure', 'intake']
         intake = Intake('Intake')
-        loop_writer = control_loop.ControlLoopWriter(
-            'Intake', [intake], namespaces=namespaces)
+        loop_writer = control_loop.ControlLoopWriter('Intake', [intake],
+                                                     namespaces=namespaces)
         loop_writer.AddConstant(
             control_loop.Constant('kGearRatio', '%f', intake.G))
         loop_writer.AddConstant(
@@ -387,8 +393,9 @@
         loop_writer.Write(argv[1], argv[2])
 
         delayed_intake = DelayedIntake('DelayedIntake')
-        loop_writer = control_loop.ControlLoopWriter(
-            'DelayedIntake', [delayed_intake], namespaces=namespaces)
+        loop_writer = control_loop.ControlLoopWriter('DelayedIntake',
+                                                     [delayed_intake],
+                                                     namespaces=namespaces)
         loop_writer.Write(argv[3], argv[4])
 
 
diff --git a/y2018/control_loops/python/intake_simple.py b/y2018/control_loops/python/intake_simple.py
index 9b6ffb1..4d34f4b 100644
--- a/y2018/control_loops/python/intake_simple.py
+++ b/y2018/control_loops/python/intake_simple.py
@@ -21,253 +21,273 @@
 run_count = 0
 theta_travel = 0.0
 
+
 def to_deg(angle):
-  return angle * rad_to_deg
+    return angle * rad_to_deg
+
 
 def to_rad(angle):
-  return angle / rad_to_deg
+    return angle / rad_to_deg
+
 
 def to_rotations(angle):
-  return angle / pi2
+    return angle / pi2
+
 
 def time_derivative(x, t, voltage, c1, c2, c3):
-  global run_count
-  theta, omega = x
-  dxdt = [omega, -c1 * omega + c3 * math.sin(theta) + c2 * voltage]
-  run_count = run_count + 1
+    global run_count
+    theta, omega = x
+    dxdt = [omega, -c1 * omega + c3 * math.sin(theta) + c2 * voltage]
+    run_count = run_count + 1
 
-  return dxdt
+    return dxdt
+
 
 def get_distal_angle(theta_proximal):
-  # For the proximal angle = -50 degrees, the distal angle is -180 degrees
-  # For the proximal angle =  10 degrees, the distal angle is  -90 degrees
-  distal_angle = to_rad(-180.0 - (-50.0 - to_deg(theta_proximal)) * \
-      (180.0 - 90.0) / (50.0 + 10.0))
-  return distal_angle
+    # For the proximal angle = -50 degrees, the distal angle is -180 degrees
+    # For the proximal angle =  10 degrees, the distal angle is  -90 degrees
+    distal_angle = to_rad(-180.0 - (-50.0 - to_deg(theta_proximal)) * \
+        (180.0 - 90.0) / (50.0 + 10.0))
+    return distal_angle
 
 
 def get_180_degree_time(c1, c2, c3, voltage, gear_ratio, motor_free_speed):
-  global run_count
-  global theta_travel
+    global run_count
+    global theta_travel
 
-  if ( True ):
-    # Gravity is assisting the motion.
-    theta_start = 0.0
-    theta_target = pi
-  elif ( False ):
-    # Gravity is assisting the motion.
-    theta_start = 0.0
-    theta_target = -pi
-  elif ( False ):
-    # Gravity is slowing the motion.
-    theta_start = pi
-    theta_target = 0.0
-  elif ( False ):
-    # Gravity is slowing the motion.
-    theta_start = -pi
-    theta_target = 0.0
-  elif ( False ):
-    # This is for the proximal arm motion.
-    theta_start = to_rad(-50.0)
-    theta_target = to_rad(10.0)
+    if (True):
+        # Gravity is assisting the motion.
+        theta_start = 0.0
+        theta_target = pi
+    elif (False):
+        # Gravity is assisting the motion.
+        theta_start = 0.0
+        theta_target = -pi
+    elif (False):
+        # Gravity is slowing the motion.
+        theta_start = pi
+        theta_target = 0.0
+    elif (False):
+        # Gravity is slowing the motion.
+        theta_start = -pi
+        theta_target = 0.0
+    elif (False):
+        # This is for the proximal arm motion.
+        theta_start = to_rad(-50.0)
+        theta_target = to_rad(10.0)
 
-  theta_half = 0.5 * (theta_start + theta_target)
-  if theta_start > theta_target:
-    voltage = -voltage
-  theta = theta_start
-  theta_travel = theta_start - theta_target
-  if run_count == 0:
-    print("# Theta Start = %.2f radians End = %.2f Theta travel %.2f "
-          "Theta half = %.2f Voltage = %.2f" % (
-              theta_start, theta_target, theta_travel, theta_half, voltage))
-    print("# Theta Start = %.2f degrees End = %.2f Theta travel %.2f "
-          "Theta half = %.2f Voltage = %.2f" % (
-              to_deg(theta_start), to_deg(theta_target), to_deg(theta_travel),
-              to_deg(theta_half), voltage))
-  omega = 0.0
-  time = 0.0
-  delta_time = 0.01 # time step in seconds
-  for step in range(1, 5000):
-     t = numpy.array([time, time + delta_time])
-     time = time + delta_time
-     x = [theta, omega]
-     angular_acceleration = -c1 * omega + c2 * voltage
-     x_n_plus_1 = scipy.integrate.odeint(time_derivative, x, t,
-                                         args=(voltage, c1, c2, c3))
-     theta, omega = x_n_plus_1[1]
+    theta_half = 0.5 * (theta_start + theta_target)
+    if theta_start > theta_target:
+        voltage = -voltage
+    theta = theta_start
+    theta_travel = theta_start - theta_target
+    if run_count == 0:
+        print("# Theta Start = %.2f radians End = %.2f Theta travel %.2f "
+              "Theta half = %.2f Voltage = %.2f" %
+              (theta_start, theta_target, theta_travel, theta_half, voltage))
+        print("# Theta Start = %.2f degrees End = %.2f Theta travel %.2f "
+              "Theta half = %.2f Voltage = %.2f" %
+              (to_deg(theta_start), to_deg(theta_target), to_deg(theta_travel),
+               to_deg(theta_half), voltage))
+    omega = 0.0
+    time = 0.0
+    delta_time = 0.01  # time step in seconds
+    for step in range(1, 5000):
+        t = numpy.array([time, time + delta_time])
+        time = time + delta_time
+        x = [theta, omega]
+        angular_acceleration = -c1 * omega + c2 * voltage
+        x_n_plus_1 = scipy.integrate.odeint(time_derivative,
+                                            x,
+                                            t,
+                                            args=(voltage, c1, c2, c3))
+        theta, omega = x_n_plus_1[1]
 
-     if ( False ):
-       print("%4d  %8.4f %8.2f          %8.4f          %8.4f    %8.3f    "
-             "%8.3f     %8.3f      %8.3f" % (
-                 step, time, theta, omega, angular_acceleration,
-                 to_rotations(theta), to_rotations(omega),
-                 omega * gear_ratio * 60.0 / pi2,
-                 omega * gear_ratio / motor_free_speed))
-     if theta_start < theta_target:
-       # Angle is increasing through the motion.
-       if theta > theta_half:
-         break
-     else:
-       # Angle is decreasing through the motion.
-       if (theta < theta_half):
-         break
+        if (False):
+            print(
+                "%4d  %8.4f %8.2f          %8.4f          %8.4f    %8.3f    "
+                "%8.3f     %8.3f      %8.3f" %
+                (step, time, theta, omega, angular_acceleration,
+                 to_rotations(theta), to_rotations(omega), omega * gear_ratio *
+                 60.0 / pi2, omega * gear_ratio / motor_free_speed))
+        if theta_start < theta_target:
+            # Angle is increasing through the motion.
+            if theta > theta_half:
+                break
+        else:
+            # Angle is decreasing through the motion.
+            if (theta < theta_half):
+                break
 
-  return 2.0 * time
+    return 2.0 * time
+
 
 def main():
-  # m/sec^2 Gravity Constant
-  gravity = 9.8
-  # m/sec^2 Gravity Constant - Use 0.0 for the intake.  It is horizontal.
-  gravity = 0.0
-  # Volts
-  voltage_nominal = 12
+    # m/sec^2 Gravity Constant
+    gravity = 9.8
+    # m/sec^2 Gravity Constant - Use 0.0 for the intake.  It is horizontal.
+    gravity = 0.0
+    # Volts
+    voltage_nominal = 12
 
-  # Vex 775 Pro motor specs from http://banebots.com/p/M2-RS550-120
-  motor_name = "Vex 775 Pro motor specs from http://banebots.com/p/M2-RS550-120"
-  current_stall = 134 # amps stall current
-  current_no_load = 0.7 # amps no load current
-  torque_stall = 710/1000.0 # N-m Stall Torque
-  speed_no_load_rpm = 18730 # RPM no load speed
+    # Vex 775 Pro motor specs from http://banebots.com/p/M2-RS550-120
+    motor_name = "Vex 775 Pro motor specs from http://banebots.com/p/M2-RS550-120"
+    current_stall = 134  # amps stall current
+    current_no_load = 0.7  # amps no load current
+    torque_stall = 710 / 1000.0  # N-m Stall Torque
+    speed_no_load_rpm = 18730  # RPM no load speed
 
-  if ( True ):
-    # Bag motor from https://www.vexrobotics.com/217-3351.html
-    motor_name = "Bag motor from https://www.vexrobotics.com/217-3351.html"
-    current_stall = 53.0 # amps stall current
-    current_no_load = 1.8 # amps no load current
-    torque_stall = 0.4 # N-m Stall Torque
-    speed_no_load_rpm = 13180.0 # RPM no load speed
+    if (True):
+        # Bag motor from https://www.vexrobotics.com/217-3351.html
+        motor_name = "Bag motor from https://www.vexrobotics.com/217-3351.html"
+        current_stall = 53.0  # amps stall current
+        current_no_load = 1.8  # amps no load current
+        torque_stall = 0.4  # N-m Stall Torque
+        speed_no_load_rpm = 13180.0  # RPM no load speed
 
-  if ( False ):
-    # Mini CIM motor from https://www.vexrobotics.com/217-3371.html
-    motor_name = "Mini CIM motor from https://www.vexrobotics.com/217-3371.html"
-    current_stall = 89.0 # amps stall current
-    current_no_load = 3.0 # amps no load current
-    torque_stall = 1.4 # N-m Stall Torque
-    speed_no_load_rpm = 5840.0 # RPM no load speed
+    if (False):
+        # Mini CIM motor from https://www.vexrobotics.com/217-3371.html
+        motor_name = "Mini CIM motor from https://www.vexrobotics.com/217-3371.html"
+        current_stall = 89.0  # amps stall current
+        current_no_load = 3.0  # amps no load current
+        torque_stall = 1.4  # N-m Stall Torque
+        speed_no_load_rpm = 5840.0  # RPM no load speed
 
-  # How many motors are we using?
-  num_motors = 1
+    # How many motors are we using?
+    num_motors = 1
 
-  # Motor values
-  print("# Motor: %s" % (motor_name))
-  print("# Number of motors: %d" % (num_motors))
-  print("# Stall torque: %.1f n-m" % (torque_stall))
-  print("# Stall current: %.1f amps" % (current_stall))
-  print("# No load current: %.1f amps" % (current_no_load))
-  print("# No load speed: %.0f rpm" % (speed_no_load_rpm))
+    # Motor values
+    print("# Motor: %s" % (motor_name))
+    print("# Number of motors: %d" % (num_motors))
+    print("# Stall torque: %.1f n-m" % (torque_stall))
+    print("# Stall current: %.1f amps" % (current_stall))
+    print("# No load current: %.1f amps" % (current_no_load))
+    print("# No load speed: %.0f rpm" % (speed_no_load_rpm))
 
-  # Constants from motor values
-  resistance_motor = voltage_nominal / current_stall
-  speed_no_load_rps = speed_no_load_rpm / 60.0 # Revolutions per second no load speed
-  speed_no_load = speed_no_load_rps * 2.0 * pi
-  Kt = num_motors * torque_stall / current_stall # N-m/A torque constant
-  Kv_rpm = speed_no_load_rpm / (voltage_nominal -
-                                resistance_motor * current_no_load)  # rpm/V
-  Kv = Kv_rpm * 2.0 * pi / 60.0  # rpm/V
+    # Constants from motor values
+    resistance_motor = voltage_nominal / current_stall
+    speed_no_load_rps = speed_no_load_rpm / 60.0  # Revolutions per second no load speed
+    speed_no_load = speed_no_load_rps * 2.0 * pi
+    Kt = num_motors * torque_stall / current_stall  # N-m/A torque constant
+    Kv_rpm = speed_no_load_rpm / (
+        voltage_nominal - resistance_motor * current_no_load)  # rpm/V
+    Kv = Kv_rpm * 2.0 * pi / 60.0  # rpm/V
 
-  # Robot Geometry and physics
-  # m Length of arm connected to the robot base
-  length_proximal_arm = inches_to_meters * 47.34
-  # m Length of arm that holds the cube
-  length_distal_arm = inches_to_meters * 44.0
-  # m Length of intake arm from the pivot point to where the big roller contacts a cube.
-  length_intake_arm =  inches_to_meters * 9.0
-  mass_cube = 6.0 * lbs_to_kg  # Weight of the cube in Kgrams
-  mass_proximal_arm = 5.5 * lbs_to_kg # Weight of proximal arm
-  mass_distal_arm = 3.5 * lbs_to_kg # Weight of distal arm
-  mass_distal = mass_cube + mass_distal_arm
-  mass_proximal = mass_proximal_arm + mass_distal
-  # m Length from arm pivot point to arm CG
-  radius_to_proximal_arm_cg = 22.0 * inches_to_meters
-  # m Length from arm pivot point to arm CG
-  radius_to_distal_arm_cg = 10.0 * inches_to_meters
+    # Robot Geometry and physics
+    # m Length of arm connected to the robot base
+    length_proximal_arm = inches_to_meters * 47.34
+    # m Length of arm that holds the cube
+    length_distal_arm = inches_to_meters * 44.0
+    # m Length of intake arm from the pivot point to where the big roller contacts a cube.
+    length_intake_arm = inches_to_meters * 9.0
+    mass_cube = 6.0 * lbs_to_kg  # Weight of the cube in Kgrams
+    mass_proximal_arm = 5.5 * lbs_to_kg  # Weight of proximal arm
+    mass_distal_arm = 3.5 * lbs_to_kg  # Weight of distal arm
+    mass_distal = mass_cube + mass_distal_arm
+    mass_proximal = mass_proximal_arm + mass_distal
+    # m Length from arm pivot point to arm CG
+    radius_to_proximal_arm_cg = 22.0 * inches_to_meters
+    # m Length from arm pivot point to arm CG
+    radius_to_distal_arm_cg = 10.0 * inches_to_meters
 
-  radius_to_distal_cg = (length_distal_arm * mass_cube +
-                         radius_to_distal_arm_cg * mass_distal_arm) / \
-                             mass_distal
-  radius_to_proximal_cg = (length_proximal_arm * mass_distal +
-                           radius_to_proximal_arm_cg * mass_proximal_arm) / \
-                               mass_proximal
-  J_cube = length_distal_arm * length_distal_arm*mass_cube
-  # Kg m^2 Moment of inertia of the proximal arm
-  J_proximal_arm = radius_to_proximal_arm_cg * radius_to_proximal_arm_cg * \
-      mass_distal_arm
-  # Kg m^2 Moment of inertia distal arm and cube at end of proximal arm.
-  J_distal_arm_and_cube_at_end_of_proximal_arm = length_proximal_arm * \
-      length_proximal_arm * mass_distal
-  # Kg m^2 Moment of inertia of the distal arm
-  J_distal_arm = radius_to_distal_arm_cg * radius_to_distal_arm_cg * mass_distal_arm
-  # Moment of inertia of the arm with the cube on the end
-  J = J_distal_arm_and_cube_at_end_of_proximal_arm + J_proximal_arm
-  # Intake claw
-  J_intake = 0.295  # Kg m^2 Moment of inertia of intake
-  J = J_intake
+    radius_to_distal_cg = (length_distal_arm * mass_cube +
+                           radius_to_distal_arm_cg * mass_distal_arm) / \
+                               mass_distal
+    radius_to_proximal_cg = (length_proximal_arm * mass_distal +
+                             radius_to_proximal_arm_cg * mass_proximal_arm) / \
+                                 mass_proximal
+    J_cube = length_distal_arm * length_distal_arm * mass_cube
+    # Kg m^2 Moment of inertia of the proximal arm
+    J_proximal_arm = radius_to_proximal_arm_cg * radius_to_proximal_arm_cg * \
+        mass_distal_arm
+    # Kg m^2 Moment of inertia distal arm and cube at end of proximal arm.
+    J_distal_arm_and_cube_at_end_of_proximal_arm = length_proximal_arm * \
+        length_proximal_arm * mass_distal
+    # Kg m^2 Moment of inertia of the distal arm
+    J_distal_arm = radius_to_distal_arm_cg * radius_to_distal_arm_cg * mass_distal_arm
+    # Moment of inertia of the arm with the cube on the end
+    J = J_distal_arm_and_cube_at_end_of_proximal_arm + J_proximal_arm
+    # Intake claw
+    J_intake = 0.295  # Kg m^2 Moment of inertia of intake
+    J = J_intake
 
-  gear_ratio = 140.0  # Guess at the gear ratio
-  gear_ratio = 100.0  # Guess at the gear ratio
-  gear_ratio = 90.0  # Guess at the gear ratio
+    gear_ratio = 140.0  # Guess at the gear ratio
+    gear_ratio = 100.0  # Guess at the gear ratio
+    gear_ratio = 90.0  # Guess at the gear ratio
 
-  error_margine = 1.0
-  voltage = 10.0  # voltage for the motor.  Assuming a loaded robot so not using 12 V.
-  # It might make sense to use a lower motor frees peed when the voltage is not a full 12 Volts.
-  # motor_free_speed = Kv * voltage
-  motor_free_speed = speed_no_load
+    error_margine = 1.0
+    voltage = 10.0  # voltage for the motor.  Assuming a loaded robot so not using 12 V.
+    # It might make sense to use a lower motor frees peed when the voltage is not a full 12 Volts.
+    # motor_free_speed = Kv * voltage
+    motor_free_speed = speed_no_load
 
-  print("# Kt = %f N-m/A\n# Kv_rpm = %f rpm/V\n# Kv = %f radians/V" % (Kt, Kv_rpm, Kv))
-  print("# %.2f Ohms Resistance of the motor " % (resistance_motor))
-  print("# %.2f kg Cube weight" % (mass_cube))
-  print("# %.2f kg Proximal Arm mass" % (mass_proximal_arm))
-  print("# %.2f kg Distal Arm mass" % (mass_distal_arm))
-  print("# %.2f kg Distal Arm and Cube weight" % (mass_distal))
-  print("# %.2f m Length from distal arm pivot point to arm CG" % (
-      radius_to_distal_arm_cg))
-  print("# %.2f m Length from distal arm pivot point to arm and cube cg" % (
-      radius_to_distal_cg))
-  print("# %.2f kg-m^2 Moment of inertia of the cube about the arm pivot point" % (J_cube))
-  print("# %.2f m Length from proximal arm pivot point to arm CG" % (radius_to_proximal_arm_cg))
-  print("# %.2f m Length from proximal arm pivot point to arm and cube cg" % (
-      radius_to_proximal_cg))
-  print("# %.2f m  Proximal arm length" % (length_proximal_arm))
-  print("# %.2f m  Distal arm length" % (length_distal_arm))
+    print("# Kt = %f N-m/A\n# Kv_rpm = %f rpm/V\n# Kv = %f radians/V" %
+          (Kt, Kv_rpm, Kv))
+    print("# %.2f Ohms Resistance of the motor " % (resistance_motor))
+    print("# %.2f kg Cube weight" % (mass_cube))
+    print("# %.2f kg Proximal Arm mass" % (mass_proximal_arm))
+    print("# %.2f kg Distal Arm mass" % (mass_distal_arm))
+    print("# %.2f kg Distal Arm and Cube weight" % (mass_distal))
+    print("# %.2f m Length from distal arm pivot point to arm CG" %
+          (radius_to_distal_arm_cg))
+    print("# %.2f m Length from distal arm pivot point to arm and cube cg" %
+          (radius_to_distal_cg))
+    print(
+        "# %.2f kg-m^2 Moment of inertia of the cube about the arm pivot point"
+        % (J_cube))
+    print("# %.2f m Length from proximal arm pivot point to arm CG" %
+          (radius_to_proximal_arm_cg))
+    print("# %.2f m Length from proximal arm pivot point to arm and cube cg" %
+          (radius_to_proximal_cg))
+    print("# %.2f m  Proximal arm length" % (length_proximal_arm))
+    print("# %.2f m  Distal arm length" % (length_distal_arm))
 
-  print("# %.2f kg-m^2 Moment of inertia of the intake about the intake pivot point" % (
-      J_intake))
-  print("# %.2f kg-m^2 Moment of inertia of the distal arm about the arm pivot point" % (
-      J_distal_arm))
-  print("# %.2f kg-m^2 Moment of inertia of the proximal arm about the arm pivot point" % (
-      J_proximal_arm))
-  print("# %.2f kg-m^2 Moment of inertia of the distal arm and cube mass about "
-        "the proximal arm pivot point" % (
-            J_distal_arm_and_cube_at_end_of_proximal_arm))
-  print("# %.2f kg-m^2 Moment of inertia of the intake the intake pivot point "
+    print(
+        "# %.2f kg-m^2 Moment of inertia of the intake about the intake pivot point"
+        % (J_intake))
+    print(
+        "# %.2f kg-m^2 Moment of inertia of the distal arm about the arm pivot point"
+        % (J_distal_arm))
+    print(
+        "# %.2f kg-m^2 Moment of inertia of the proximal arm about the arm pivot point"
+        % (J_proximal_arm))
+    print(
+        "# %.2f kg-m^2 Moment of inertia of the distal arm and cube mass about "
+        "the proximal arm pivot point" %
+        (J_distal_arm_and_cube_at_end_of_proximal_arm))
+    print(
+        "# %.2f kg-m^2 Moment of inertia of the intake the intake pivot point "
         "(J value used in simulation)" % (J))
-  print("# %d Number of motors" % (num_motors))
+    print("# %d Number of motors" % (num_motors))
 
-  print("# %.2f V Motor voltage" % (voltage))
-  for gear_ratio in range(60, 241, 10):
-    c1 = Kt * gear_ratio * gear_ratio / (Kv * resistance_motor * J)
-    c2 = gear_ratio * Kt / (J * resistance_motor)
-    c3 = radius_to_proximal_cg * mass_proximal * gravity / J
+    print("# %.2f V Motor voltage" % (voltage))
+    for gear_ratio in range(60, 241, 10):
+        c1 = Kt * gear_ratio * gear_ratio / (Kv * resistance_motor * J)
+        c2 = gear_ratio * Kt / (J * resistance_motor)
+        c3 = radius_to_proximal_cg * mass_proximal * gravity / J
 
-    if ( False ):
-      print("# %.8f 1/sec C1 constant" % (c1))
-      print("# %.2f 1/sec C2 constant" % (c2))
-      print("# %.2f 1/(V sec^2) C3 constant" % (c3))
-      print("# %.2f RPM Free speed at motor voltage" % (voltage * Kv_rpm))
+        if (False):
+            print("# %.8f 1/sec C1 constant" % (c1))
+            print("# %.2f 1/sec C2 constant" % (c2))
+            print("# %.2f 1/(V sec^2) C3 constant" % (c3))
+            print("# %.2f RPM Free speed at motor voltage" %
+                  (voltage * Kv_rpm))
 
-    torque_90_degrees = radius_to_distal_cg * mass_distal * gravity
-    voltage_90_degrees = resistance_motor * torque_90_degrees / (gear_ratio * Kt)
-    torque_peak = gear_ratio * num_motors * torque_stall
-    torque_peak_ft_lbs = torque_peak * newton_meters_to_ft_lbs
-    normal_force = torque_peak / length_intake_arm
-    normal_force_lbf = newton_to_lbf * normal_force
-    time_required = get_180_degree_time(c1, c2, c3, voltage,
-                                        gear_ratio, motor_free_speed)
-    print("Time for %.1f degrees for gear ratio %3.0f is %.2f seconds.  "
-          "Peak (stall) torque %3.0f nm %3.0f ft-lb Normal force at intake "
-          "end %3.0f N %2.0f lbf" % \
-      (to_deg(theta_travel), gear_ratio, time_required,
-       torque_peak, torque_peak_ft_lbs, normal_force, normal_force_lbf))
+        torque_90_degrees = radius_to_distal_cg * mass_distal * gravity
+        voltage_90_degrees = resistance_motor * torque_90_degrees / (
+            gear_ratio * Kt)
+        torque_peak = gear_ratio * num_motors * torque_stall
+        torque_peak_ft_lbs = torque_peak * newton_meters_to_ft_lbs
+        normal_force = torque_peak / length_intake_arm
+        normal_force_lbf = newton_to_lbf * normal_force
+        time_required = get_180_degree_time(c1, c2, c3, voltage, gear_ratio,
+                                            motor_free_speed)
+        print("Time for %.1f degrees for gear ratio %3.0f is %.2f seconds.  "
+              "Peak (stall) torque %3.0f nm %3.0f ft-lb Normal force at intake "
+              "end %3.0f N %2.0f lbf" % \
+          (to_deg(theta_travel), gear_ratio, time_required,
+           torque_peak, torque_peak_ft_lbs, normal_force, normal_force_lbf))
+
 
 if __name__ == '__main__':
-  main()
+    main()
diff --git a/y2018/control_loops/python/path_points.py b/y2018/control_loops/python/path_points.py
index eed9804..8802629 100644
--- a/y2018/control_loops/python/path_points.py
+++ b/y2018/control_loops/python/path_points.py
@@ -2,9 +2,422 @@
 
 # Path points from Parker.
 # Points in (theta0, theta1) of the boundry of the safe region.
-points_bounary = ([1.8577014383575772, -1.7353804562372057], [1.8322288438826315, -1.761574570216062], [1.7840339881582052, -1.8122752826851365], [1.7367354460218392, -1.863184376466228], [1.69054633425053, -1.9140647421906793], [1.6456590387358871, -1.9646939485526782], [1.6022412524081968, -2.0148691793459164], [1.5604334435784202, -2.0644108218872432], [1.5203477477575325, -2.1131646494909866], [1.4820681545944325, -2.1610026706370666], [1.4456517763321752, -2.207822815007094], [1.4111309389855604, -2.253547685496041], [1.3785158286698027, -2.298122627340264], [1.3477974448369014, -2.3415133576238922], [1.318950649522341, -2.3837033700108243], [1.2919371475531436, -2.4246912899477153], [1.266708279449626, -2.464488312575651], [1.2432075513427807, -2.5031158147261996], [1.2213728618107609, -2.5406031969824228], [1.2011384131259828, -2.5769859833310096], [1.1824363142639513, -2.61230418457078], [1.165197896140849, -2.64660091671642], [1.149354767212547, -2.6799212560849437], [1.134839641107821, -2.712311307404836], [1.121586968578607, -2.7438174590386177], [1.1095334047223224, -2.774485799309971], [1.09861813993779, -2.8043616692157007], [1.088783119985477, -2.8334893289039758], [1.079973177230731, -2.861911717797479], [1.0721360919151535, -2.8896702908486835], [1.065222599283597, -2.916804915950962], [1.0591863556764607, -2.943353819884641], [1.0539838743128325, -2.969353572295195], [1.049574439440948, -2.9948390990606946], [1.0459200058000553, -3.01984371800932], [1.0429850888932353, -3.044399191310831], [1.0407366503803421, -3.0685357900111128], [1.039143981929867, -3.092282367132034], [1.0381785900853944, -3.1156664365461078], [1.0378140840766794, -3.1387142554815886], [1.038026068010855, -3.1614509090414518], [1.0387920384931424, -3.1839003955494407], [1.0400912884293725, -3.2060857118856374], [1.0419048175385754, -3.2280289382581637], [1.0442152499395827, -3.2497513220895704], [1.047006759060362, -3.2712733608874625], [1.050265000044113, -3.2926148841283163], [1.0513266200838918, -3.2986722862692828], [0.6882849734317291, -3.2986722862692828], [0.6882849734317291, -2.40847516476558], [0.8062364039734171, -2.2816832357742984], [0.9846964491122989, -2.0749837238115147], [1.080856081125841, -1.9535526052833936], [1.1403399741223543, -1.8700303125904767], [1.1796460643255697, -1.8073338252603661], [1.206509908068604, -1.7574623871869075], [1.225108933139178, -1.7160975113819317], [1.237917343016644, -1.6806816402603253], [1.2465009152225068, -1.6495957958330445], [1.251901644035212, -1.6217619064422375], [1.2548410275662123, -1.5964327471863136], [1.2558349967266738, -1.5730732293972975], [1.2552624664807475, -1.551289614657788], [1.2534080548485127, -1.5307854126408047], [1.2504896957865235, -1.5113328783804112], [1.2466770509718135, -1.492754008779478], [1.2421041193998992, -1.4749075280685116], [1.236878076935188, -1.457679763958034], [1.231085601347444, -1.4409781183381307], [1.2247974811461413, -1.4247263085140511], [1.2180720288351026, -1.408860841660136], [1.2109576458572935, -1.3933283641188086], [1.2034947755974974, -1.378083641634472], [1.1957174082841977, -1.363088001457586], [1.1876542532510088, -1.3483081171759035], [1.179329661157153, -1.3337150510329991], [1.1707643560768641, -1.3192834919003447], [1.1385726725405734, -1.3512941162901886], [1.1061744838535637, -1.3828092440478137], [1.0736355415504857, -1.4137655512448706], [1.0410203155384732, -1.444102884084807], [1.0083912519665894, -1.4737649313813326], [0.975808099297045, -1.5026998012630925], [0.9433273192311136, -1.5308604887780404], [0.941597772428203, -1.50959779639341], [0.9392183822389457, -1.488861961175901], [0.9362399962318921, -1.4685999567644576], [0.9327074201772598, -1.448764371832554], [0.9286602163651203, -1.4293126388801052], [0.9241333769591611, -1.410206381002334], [0.9191578939466147, -1.3914108561164176], [0.9137612431353617, -1.3728944819981919], [0.9079677963791273, -1.3546284285619337], [0.9017991735984072, -1.3365862662768213], [0.8952745440670551, -1.3187436615861219], [0.888410884742945, -1.3010781117818295], [0.8812232020507231, -1.2835687130679965], [0.8737247224089426, -1.2661959565824437], [0.8659270558807739, -1.2489415479874506], [0.8578403365760008, -1.2317882469234374], [0.8810761292150717, -1.2118184809610988], [0.9041762360363244, -1.1914283310662528], [0.9271196683064211, -1.1706361926784383], [0.949885054142765, -1.1494613527499984], [0.9724507572661958, -1.1279238910069835], [0.9947950004998649, -1.1060445714951375], [1.0168959923240788, -1.0838447258650978], [1.0387320546908576, -1.0613461300367468], [1.0602817502430675, -1.0385708760262022], [1.0815240070740941, -1.0155412408147642], [1.102438239206001, -0.9922795541836177], [1.123004461055328, -0.9688080674301042], [1.1432033942926907, -0.9451488248218312], [1.1630165656794818, -0.9213235395370803], [1.1824263946752058, -0.8973534756890716], [1.2014162698440272, -0.8732593378443982], [1.2199706133398625, -0.8490611692304734], [1.2380749330068292, -0.8247782595916947], [1.2557158618869284, -0.800429063408306], [1.2728811851714203, -0.776031128944234], [1.2895598548592355, -0.7516010383486005], [1.3057419925890068, -0.7271543588072293], [1.3214188812865908, -0.702705604531139], [1.3365829464142562, -0.6782682091832445], [1.351227727719687, -0.6538545081853449], [1.365347842462401, -0.6294757302167044], [1.3789389411433586, -0.6051419971134862], [1.391997656782351, -0.5808623313043475], [1.4045215487801634, -0.5566446698699925], [1.4165090423718034, -0.5324958842910054], [1.4279593646268474, -0.5084218049460658], [1.4388724778869602, -0.4844272494383845], [1.449249011452494, -0.460516053858597], [1.4590901922431447, -0.4366911061340692], [1.468397775065033, -0.4129543806643518], [1.4771739730209745, -0.38930697349737264], [1.485421388504271, -0.36574913735813025], [1.4931429451209484, -0.3422803158986589], [1.5003418207921726, -0.3188991765927855], [1.5070213821985838, -0.2956036417497373], [1.513185120641734, -0.2723909171654731], [1.5188365893149296, -0.24925751796822435], [1.5239793418959948, -0.22619929124396096], [1.5286168722972349, -0.2032114350471563], [1.5327525553319497, -0.1802885134112242], [1.5363895879810432, -0.15742446697009113], [1.5395309308654115, -0.1346126187862511], [1.5421792494481048, -0.11184567494963411], [1.5443368544016174, -0.0891157194637005], [1.5460056404769755, -0.06641420286771664], [1.5471870230984175, -0.043731923953761714], [1.547881871775246, -0.021059003819238205], [1.5480904392645911, 0.0016151486553661097], [1.547812285227133, 0.024301881005710235], [1.5470461928818935, 0.047013352405288866], [1.5457900768723736, 0.06976260156314103], [1.5440408801865422, 0.09256362934244797], [1.5417944575035705, 0.11543149864415554], [1.5390454417383017, 0.13838245474060726], [1.5357870897759938, 0.16143407007284788], [1.5320111023738603, 0.18460541860588778], [1.5277074118667517, 0.20791728625864334], [1.5228639295308124, 0.23139242581719505], [1.5174662420569858, 0.25505586728497265], [1.5114972433117844, 0.27893529808946027], [1.5049366830391921, 0.30306153234932315], [1.4977606078174102, 0.32746909510770755], [1.4899406605544634, 0.35219695697813347], [1.4814431917184283, 0.37728946847450484], [1.4722281161523716, 0.40279756372788583], [1.4622474200998372, 0.4287803341537376], [1.4514431778273647, 0.45530712040457033], [1.4397448652396179, 0.48246034696312606], [1.427065639662639, 0.5103394485717625], [1.4132970536897833, 0.5390664502570618], [1.3983013135749314, 0.5687941401756967], [1.3818995257862978, 0.5997184788509978], [1.3638530549860057, 0.6320982830132342], [1.3438323057823602, 0.6662881915757862], [1.3213606855701236, 0.7027978462604986], [1.2957042956404132, 0.7424084023365868], [1.2656247456808565, 0.786433646353686], [1.2287034601894442, 0.8374338794107618], [1.1786904071656892, 0.902017503822168], [1.0497616572686415, 1.0497616572686426], [0.9097522267255194, 1.1864251300690412], [0.8484431816837388, 1.2397127624624213], [0.8000049977037023, 1.2791960970308718], [0.7581818853313602, 1.3114777786351866], [0.7205493452982701, 1.3391121846078957], [0.6882849734317291, 1.3617105524217008], [0.6882849734317291, 2.356194490192345], [1.3376784164442164, 2.356194490192345], [1.3516056511178856, 2.3360528189227487], [1.3708660530144583, 2.308792458458483], [1.3913233553973305, 2.2804469909122105], [1.4131687110627962, 2.2508089759388485], [1.436656614785, 2.219604401551449], [1.4621380338543308, 2.18645769238238], [1.4901198983671067, 2.1508288797419346], [1.5213822452925796, 2.111889875368928], [1.5572408030205178, 2.0682471032649676], [1.6002650085871786, 2.0171829478543404], [1.657096323745671, 1.9516778011159774], [1.7977393629734166, 1.7977393629734166], [1.8577014383575772, 1.7364646168980775], [1.8577014383575772, -1.7353804562372057])
+points_bounary = (
+    [1.8577014383575772,
+     -1.7353804562372057], [1.8322288438826315, -1.761574570216062],
+    [1.7840339881582052,
+     -1.8122752826851365], [1.7367354460218392, -1.863184376466228
+                            ], [1.69054633425053, -1.9140647421906793],
+    [1.6456590387358871, -1.9646939485526782
+     ], [1.6022412524081968, -2.0148691793459164
+         ], [1.5604334435784202, -2.0644108218872432
+             ], [1.5203477477575325, -2.1131646494909866
+                 ], [1.4820681545944325, -2.1610026706370666
+                     ], [1.4456517763321752, -2.207822815007094
+                         ], [1.4111309389855604, -2.253547685496041
+                             ], [1.3785158286698027, -2.298122627340264],
+    [1.3477974448369014, -2.3415133576238922
+     ], [1.318950649522341, -2.3837033700108243
+         ], [1.2919371475531436, -2.4246912899477153
+             ], [1.266708279449626, -2.464488312575651
+                 ], [1.2432075513427807, -2.5031158147261996
+                     ], [1.2213728618107609, -2.5406031969824228
+                         ], [1.2011384131259828, -2.5769859833310096
+                             ], [1.1824363142639513, -2.61230418457078
+                                 ], [1.165197896140849, -2.64660091671642],
+    [1.149354767212547, -2.6799212560849437
+     ], [1.134839641107821, -2.712311307404836
+         ], [1.121586968578607, -2.7438174590386177
+             ], [1.1095334047223224, -2.774485799309971
+                 ], [1.09861813993779, -2.8043616692157007
+                     ], [1.088783119985477, -2.8334893289039758
+                         ], [1.079973177230731, -2.861911717797479
+                             ], [1.0721360919151535, -2.8896702908486835
+                                 ], [1.065222599283597, -2.916804915950962],
+    [1.0591863556764607, -2.943353819884641
+     ], [1.0539838743128325, -2.969353572295195
+         ], [1.049574439440948, -2.9948390990606946
+             ], [1.0459200058000553, -3.01984371800932
+                 ], [1.0429850888932353, -3.044399191310831
+                     ], [1.0407366503803421, -3.0685357900111128
+                         ], [1.039143981929867, -3.092282367132034
+                             ], [1.0381785900853944, -3.1156664365461078
+                                 ], [1.0378140840766794, -3.1387142554815886],
+    [1.038026068010855,
+     -3.1614509090414518], [1.0387920384931424, -3.1839003955494407], [
+         1.0400912884293725,
+         -3.2060857118856374
+     ], [1.0419048175385754, -3.2280289382581637
+         ], [1.0442152499395827, -3.2497513220895704
+             ], [1.047006759060362, -3.2712733608874625
+                 ], [1.050265000044113, -3.2926148841283163
+                     ], [1.0513266200838918, -3.2986722862692828
+                         ], [0.6882849734317291, -3.2986722862692828
+                             ], [0.6882849734317291, -2.40847516476558
+                                 ], [0.8062364039734171, -2.2816832357742984],
+    [0.9846964491122989,
+     -2.0749837238115147], [1.080856081125841, -1.9535526052833936], [
+         1.1403399741223543,
+         -1.8700303125904767
+     ], [1.1796460643255697,
+         -1.8073338252603661], [1.206509908068604, -1.7574623871869075], [
+             1.225108933139178,
+             -1.7160975113819317
+         ], [1.237917343016644, -1.6806816402603253
+             ], [1.2465009152225068, -1.6495957958330445
+                 ], [1.251901644035212, -1.6217619064422375
+                     ], [1.2548410275662123, -1.5964327471863136
+                         ], [1.2558349967266738, -1.5730732293972975
+                             ], [1.2552624664807475, -1.551289614657788
+                                 ], [1.2534080548485127, -1.5307854126408047],
+    [1.2504896957865235,
+     -1.5113328783804112], [1.2466770509718135, -1.492754008779478], [
+         1.2421041193998992,
+         -1.4749075280685116
+     ], [1.236878076935188, -1.457679763958034
+         ], [1.231085601347444, -1.4409781183381307
+             ], [1.2247974811461413, -1.4247263085140511
+                 ], [1.2180720288351026, -1.408860841660136
+                     ], [1.2109576458572935, -1.3933283641188086
+                         ], [1.2034947755974974, -1.378083641634472
+                             ], [1.1957174082841977, -1.363088001457586
+                                 ], [1.1876542532510088, -1.3483081171759035],
+    [1.179329661157153,
+     -1.3337150510329991], [1.1707643560768641, -1.3192834919003447], [
+         1.1385726725405734,
+         -1.3512941162901886
+     ], [1.1061744838535637,
+         -1.3828092440478137], [1.0736355415504857, -1.4137655512448706], [
+             1.0410203155384732,
+             -1.444102884084807
+         ], [1.0083912519665894,
+             -1.4737649313813326], [0.975808099297045, -1.5026998012630925], [
+                 0.9433273192311136,
+                 -1.5308604887780404
+             ], [0.941597772428203, -1.50959779639341
+                 ], [0.9392183822389457, -1.488861961175901
+                     ], [0.9362399962318921, -1.4685999567644576
+                         ], [0.9327074201772598, -1.448764371832554
+                             ], [0.9286602163651203, -1.4293126388801052
+                                 ], [0.9241333769591611, -1.410206381002334],
+    [0.9191578939466147,
+     -1.3914108561164176], [0.9137612431353617, -1.3728944819981919], [
+         0.9079677963791273,
+         -1.3546284285619337
+     ], [0.9017991735984072,
+         -1.3365862662768213], [0.8952745440670551, -1.3187436615861219], [
+             0.888410884742945,
+             -1.3010781117818295
+         ], [0.8812232020507231,
+             -1.2835687130679965], [0.8737247224089426, -1.2661959565824437], [
+                 0.8659270558807739,
+                 -1.2489415479874506
+             ], [0.8578403365760008, -1.2317882469234374
+                 ], [0.8810761292150717, -1.2118184809610988
+                     ], [0.9041762360363244, -1.1914283310662528
+                         ], [0.9271196683064211, -1.1706361926784383
+                             ], [0.949885054142765, -1.1494613527499984
+                                 ], [0.9724507572661958, -1.1279238910069835],
+    [0.9947950004998649,
+     -1.1060445714951375], [1.0168959923240788, -1.0838447258650978], [
+         1.0387320546908576,
+         -1.0613461300367468
+     ], [1.0602817502430675,
+         -1.0385708760262022], [1.0815240070740941, -1.0155412408147642], [
+             1.102438239206001,
+             -0.9922795541836177
+         ], [1.123004461055328,
+             -0.9688080674301042], [1.1432033942926907, -0.9451488248218312], [
+                 1.1630165656794818,
+                 -0.9213235395370803
+             ], [1.1824263946752058, -0.8973534756890716
+                 ], [1.2014162698440272, -0.8732593378443982
+                     ], [1.2199706133398625, -0.8490611692304734
+                         ], [1.2380749330068292, -0.8247782595916947
+                             ], [1.2557158618869284, -0.800429063408306
+                                 ], [1.2728811851714203, -0.776031128944234],
+    [1.2895598548592355,
+     -0.7516010383486005], [1.3057419925890068, -0.7271543588072293], [
+         1.3214188812865908,
+         -0.702705604531139
+     ], [1.3365829464142562,
+         -0.6782682091832445], [1.351227727719687, -0.6538545081853449], [
+             1.365347842462401, -0.6294757302167044
+         ], [1.3789389411433586,
+             -0.6051419971134862], [1.391997656782351, -0.5808623313043475], [
+                 1.4045215487801634,
+                 -0.5566446698699925
+             ], [1.4165090423718034, -0.5324958842910054
+                 ], [1.4279593646268474, -0.5084218049460658
+                     ], [1.4388724778869602, -0.4844272494383845], [
+                         1.449249011452494, -0.460516053858597
+                     ], [1.4590901922431447, -0.4366911061340692
+                         ], [1.468397775065033, -0.4129543806643518
+                             ], [1.4771739730209745, -0.38930697349737264
+                                 ], [1.485421388504271, -0.36574913735813025],
+    [1.4931429451209484,
+     -0.3422803158986589], [1.5003418207921726, -0.3188991765927855], [
+         1.5070213821985838,
+         -0.2956036417497373
+     ], [1.513185120641734,
+         -0.2723909171654731], [1.5188365893149296, -0.24925751796822435], [
+             1.5239793418959948,
+             -0.22619929124396096
+         ], [1.5286168722972349,
+             -0.2032114350471563], [1.5327525553319497, -0.1802885134112242], [
+                 1.5363895879810432,
+                 -0.15742446697009113
+             ], [1.5395309308654115, -0.1346126187862511
+                 ], [1.5421792494481048, -0.11184567494963411
+                     ], [1.5443368544016174, -0.0891157194637005
+                         ], [1.5460056404769755, -0.06641420286771664
+                             ], [1.5471870230984175, -0.043731923953761714],
+    [1.547881871775246,
+     -0.021059003819238205], [1.5480904392645911, 0.0016151486553661097], [
+         1.547812285227133, 0.024301881005710235
+     ], [1.5470461928818935, 0.047013352405288866
+         ], [1.5457900768723736,
+             0.06976260156314103], [1.5440408801865422, 0.09256362934244797], [
+                 1.5417944575035705,
+                 0.11543149864415554
+             ], [1.5390454417383017, 0.13838245474060726
+                 ], [1.5357870897759938, 0.16143407007284788
+                     ], [1.5320111023738603, 0.18460541860588778
+                         ], [1.5277074118667517, 0.20791728625864334
+                             ], [1.5228639295308124, 0.23139242581719505
+                                 ], [1.5174662420569858, 0.25505586728497265],
+    [1.5114972433117844,
+     0.27893529808946027], [1.5049366830391921, 0.30306153234932315], [
+         1.4977606078174102,
+         0.32746909510770755
+     ], [1.4899406605544634,
+         0.35219695697813347], [1.4814431917184283, 0.37728946847450484], [
+             1.4722281161523716,
+             0.40279756372788583
+         ], [1.4622474200998372,
+             0.4287803341537376], [1.4514431778273647, 0.45530712040457033], [
+                 1.4397448652396179,
+                 0.48246034696312606
+             ], [1.427065639662639, 0.5103394485717625
+                 ], [1.4132970536897833, 0.5390664502570618
+                     ], [1.3983013135749314, 0.5687941401756967
+                         ], [1.3818995257862978, 0.5997184788509978
+                             ], [1.3638530549860057, 0.6320982830132342
+                                 ], [1.3438323057823602, 0.6662881915757862],
+    [1.3213606855701236,
+     0.7027978462604986], [1.2957042956404132, 0.7424084023365868], [
+         1.2656247456808565,
+         0.786433646353686
+     ], [1.2287034601894442,
+         0.8374338794107618], [1.1786904071656892, 0.902017503822168], [
+             1.0497616572686415,
+             1.0497616572686426
+         ], [0.9097522267255194,
+             1.1864251300690412], [0.8484431816837388, 1.2397127624624213], [
+                 0.8000049977037023,
+                 1.2791960970308718
+             ], [0.7581818853313602, 1.3114777786351866
+                 ], [0.7205493452982701, 1.3391121846078957
+                     ], [0.6882849734317291, 1.3617105524217008
+                         ], [0.6882849734317291, 2.356194490192345
+                             ], [1.3376784164442164, 2.356194490192345
+                                 ], [1.3516056511178856, 2.3360528189227487],
+    [1.3708660530144583,
+     2.308792458458483], [1.3913233553973305, 2.2804469909122105], [
+         1.4131687110627962,
+         2.2508089759388485
+     ], [1.436656614785,
+         2.219604401551449], [1.4621380338543308, 2.18645769238238], [
+             1.4901198983671067,
+             2.1508288797419346
+         ], [1.5213822452925796, 2.111889875368928
+             ], [1.5572408030205178, 2.0682471032649676
+                 ], [1.6002650085871786, 2.0171829478543404
+                     ], [1.657096323745671, 1.9516778011159774
+                         ], [1.7977393629734166, 1.7977393629734166
+                             ], [1.8577014383575772, 1.7364646168980775
+                                 ], [1.8577014383575772, -1.7353804562372057])
 
 # Test data set in terms of (theta0, theta1) of a motion from Parker.
 # This is an example box lift profile.
 
-path_with_accelerations = [(1.3583511559969876, 0.99753029519739866, 0.63708920330895369, -0.77079007974101643, -0.21483375398380378, -0.17756921128311187), (1.4037744780290744, 0.94141413786797179, 0.62102298265172207, -0.78379235452915641, -0.23084099683729808, -0.18290283743090688), (1.4401396868545593, 0.89467165253531666, 0.606891738771278, -0.79478451004733031, -0.24685749210031543, -0.18849894149927623), (1.4710837705397868, 0.85345617877170399, 0.59376006111610313, -0.80464215016577489, -0.26311393698286972, -0.19415687958799988), (1.4982967960378542, 0.81597755723156562, 0.58119389263733834, -0.81376511301545618, -0.27984413029527577, -0.19986598102433009), (1.5227269571172215, 0.78122893136122973, 0.56894801707769227, -0.82237348805962973, -0.29704891442706877, -0.20550961547441812), (1.5449685847030388, 0.74857685672553398, 0.55686625320351735, -0.83060217676278458, -0.31482379304256025, -0.21106978462024978), (1.5654226738527495, 0.71759174238125301, 0.54484048864732038, -0.83853970802255351, -0.33321287621660045, -0.21650513557965106), (1.5843743655705165, 0.68796601612512265, 0.53279106733541426, -0.84624681894089859, -0.35226023809265267, -0.22178093106252236), (1.6020345343012865, 0.65947020123078393, 0.52065635488289785, -0.85376633812774205, -0.37188463022164508, -0.22678852570730737), (1.6185639244576269, 0.63192742228662813, 0.50838674358661662, -0.86112886314731996, -0.39227952043050979, -0.23159139751917215), (1.6340880277208036, 0.60519768777296334, 0.49594100637973321, -0.868356216187261, -0.41330592927121557, -0.23605025316897368), (1.6487067026409843, 0.57916772325998889, 0.48328397846038601, -0.87546364639743945, -0.43479093110952094, -0.24001893904573279), (1.6625006419641934, 0.55374413183503834, 0.47038503527185527, -0.88246128447218319, -0.45715591769925784, -0.2436817242766752), (1.6755358637715485, 0.52884863988931285, 0.45721707379330323, -0.88935513009814537, -0.48005035022840359, -0.24679412703629519), (1.6878669166029825, 0.50441469954774187, 0.44375581873319114, -0.89614774079971626, -0.50380737957408728, -0.24947659419788909), (1.6995392207123023, 0.48038500205371104, 0.42997935653089725, -0.90283871923908732, -0.52783372117172589, -0.25138272577381626), (1.7105908129416818, 0.45670961972392227, 0.41586782149756141, -0.90942506840468851, -0.55267961927927023, -0.25273346631273114), (1.7210536699519405, 0.43334459201815007, 0.40140320353386438, -0.91590145113584731, -0.57770009966870806, -0.25318354738409404), (1.7309547270317198, 0.41025083198931545, 0.38656923494570777, -0.92226038979969771, -0.60317645612010684, -0.25282447346857195), (1.7403166729890138, 0.38739326814551689, 0.37135135004406289, -0.92849242044318914, -0.62907036438628838, -0.25159784841893079), (1.7491585775728877, 0.36474016215239319, 0.35573669259875446, -0.93458622156486959, -0.6551663269414254, -0.24938020059543903), (1.7574963917487576, 0.34226255982896742, 0.33971416817223166, -0.94052872574050006, -0.68164592193873064, -0.24620769226541636), (1.7653433501187576, 0.31993384454025714, 0.32327453032164366, -0.94630522456833177, -0.70757451300020135, -0.24172061458903144), (1.7727102970907476, 0.29772937021195395, 0.30641049133414705, -0.95189947515500117, -0.73378453575677771, -0.23620138680600353), (1.7796059529520747, 0.27562615695138953, 0.28911685939500692, -0.95729381154041093, -0.75990897245769828, -0.22950448838605128), (1.7860371320859008, 0.25360263640618674, 0.27139068895919466, -0.9624692690918778, -0.78523056852177775, -0.22141489322699751), (1.7920089227108962, 0.23163843702152076, 0.25323144050682866, -0.96740572540110403, -0.81025448009679157, -0.21209581939563796), (1.7975248354162883, 0.20971420159976159, 0.2346411508301583, -0.97208205946674009, -0.83408589705170777, -0.20133249883457041), (1.8025869261905516, 0.187811431247703, 0.21562459548465329, -0.97647633551565383, -0.85752536967991499, -0.18935884543741083), (1.8071958984562269, 0.16591235107247332, 0.19618945367704119, -0.98056600913243175, -0.8793458743889202, -0.17593847769244828), (1.8113511877225346, 0.14399979396679621, 0.17634645105214913, -0.98432816133711831, -0.89983233183814704, -0.16120962647016274), (1.8150510317784807, 0.12205709958524935, 0.15610948821796866, -0.98773975706575867, -0.91852354093170219, -0.14517104001739675), (1.8182925288197413, 0.10006802621144681, 0.13549574094137548, -0.99077792879471627, -0.93602333307674279, -0.12800867856143744), (1.821071685494891, 0.078016673692446373, 0.11452572935697461, -0.99342028231522084, -0.95112385045254688, -0.10965064890920556), (1.8233834565427998, 0.055887416001137141, 0.093223341590826445, -0.99564522224667962, -0.96368362602021329, -0.090231797498176183), (1.8252217774528923, 0.03366484230234558, 0.071615815013953282, -0.99743229095507402, -0.97395276760288163, -0.069931055757802438), (1.8265795913984428, 0.011333705660752967, 0.049733665943173709, -0.99876251555204698, -0.98177893706111263, -0.048889055531294821), (1.8274488715589303, -0.011121121248675203, 0.02761056315188902, -0.99961875572762016, -0.98689335559342106, -0.027260179511112551), (1.8278206398523622, -0.033714683874300592, 0.0052831412013899706, -0.99998604411213976, -0.98885489268650051, -0.0052254487261787384), (1.8276849830361703, -0.056461977241467148, -0.017209244112191453, -0.99985190999321838, -0.98812791978941406, 0.017006330622021722), (1.8270310671011307, -0.079377971247817633, -0.039824819694542858, -0.99920667718760625, -0.98450390283226485, 0.039237693528591036), (1.8258471508733223, -0.10247762977900209, -0.062519753866286318, -0.99804372668560926, -0.97719363903338485, 0.061212532653782022), (1.8241205997516765, -0.12577592348843702, -0.085248569812080663, -0.99635971483445407, -0.9676884196650537, 0.08279433361404552), (1.8218379005412455, -0.14928783595476772, -0.10796459505798382, -0.99415473957224865, -0.95496997071328249, 0.103708042997466), (1.8189846783932371, -0.17302836280361969, -0.13062045461685196, -0.99143244693508337, -0.93935720014890423, 0.12375848445745616), (1.8155457169306066, -0.19701250325490266, -0.15316858191907523, -0.98820007362522466, -0.92129127811992539, 0.14279680293047756), (1.8115049827211411, -0.22125524343262917, -0.17556174489393769, -0.98446842190585071, -0.90059657633599033, 0.16060369204333666), (1.8068456553568204, -0.24577153065112339, -0.19775357131740673, -0.98025176614541798, -0.87754964758424281, 0.17703366424976713), (1.8015501645066898, -0.27057623777063011, -0.21969906367786421, -0.97556769186923664, -0.85256620853260556, 0.19199796793136439), (1.795600235427889, -0.29568411659857541, -0.24135508622397667, -0.97043687190554384, -0.82563764988942245, 0.20534143268497296), (1.7889769445422168, -0.32110973920321939, -0.26268082100774776, -0.96488278369690872, -0.79733324597202848, 0.2170659935022537), (1.7816607868090406, -0.34686742590848585, -0.2836381738799823, -0.95893137727265387, -0.76782873106500538, 0.22711183686998365), (1.7736317567432636, -0.37297115865829411, -0.30419213280652752, -0.95261070030659223, -0.73738784843863214, 0.23546528518662449), (1.7648694450316516, -0.39943447838330554, -0.32431106313855179, -0.94595049253433039, -0.70610753433104578, 0.2420821140887684), (1.7553531527820141, -0.42627036498226889, -0.34396694344403017, -0.93898175797923322, -0.67467492193224388, 0.24714550708779132), (1.7450620254853675, -0.45349109855564618, -0.36313553561943973, -0.93173632684916963, -0.64280482438985487, 0.25052642309609846), (1.7339752087663065, -0.48110810061485765, -0.38179649614837224, -0.92424641493966653, -0.61125522193929116, 0.2525024014306243), (1.7220720279237476, -0.50913175415228962, -0.39993342129901005, -0.91654419343972093, -0.58016017720123902, 0.25315181203742848), (1.7093321931028456, -0.53757120171300954, -0.41753384214477446, -0.90866137293483673, -0.54964898595174738, 0.25256545404213349), (1.6957360316664474, -0.56643412097840984, -0.43458916639025197, -0.9006288116955985, -0.51972307699036913, 0.25078642241782151), (1.6812647489267576, -0.59572647787451594, -0.45109457862962754, -0.89247615157546845, -0.49088885529812037, 0.24811508685641395), (1.6659007178300929, -0.62545225787260295, -0.46704890024189227, -0.88423148823305242, -0.46296888429931843, 0.24453849915066983), (1.6496277974361373, -0.65561317697342414, -0.48245442463761296, -0.87592107415428122, -0.43630053035835431, 0.24031239163872659), (1.6324316790779632, -0.68620837486997288, -0.49731672574028513, -0.86756906024763358, -0.41095471910587472, 0.23557116495526012), (1.6143002579172752, -0.7172340939700278, -0.51164445121259294, -0.85919727393850864, -0.38675403181117768, 0.23030820687574571), (1.5952240262184549, -0.748683349319481, -0.52544910775441078, -0.85082503204836046, -0.36408233991880601, 0.22484810685703166), (1.5751964830679697, -0.780545595975073, -0.53874483689504815, -0.84246899095392713, -0.34276938388236106, 0.21919491474821423), (1.5542145534957212, -0.81280640198469889, -0.55154819264623711, -0.83414302801658013, -0.32291038254364612, 0.21351295685970414), (1.5322790080695103, -0.84544713677503402, -0.56387791937564813, -0.82585815491559456, -0.30444498192901781, 0.20786805829508584), (1.509394872119298, -0.87844468632349793, -0.57575473429345714, -0.81762245929198296, -0.28737482236853346, 0.20236376870812761), (1.4855718119204786, -0.91177120788178356, -0.58720111439137757, -0.8094410733694728, -0.27173204177162957, 0.1971250636942595), (1.4608244835702884, -0.94539393807497152, -0.59824108887263983, -0.80131616705547515, -0.25741396251510884, 0.19217806498346204), (1.4351728290976418, -0.97927506876108006, -0.60890003734400222, -0.79324696313473042, -0.24447483076597848, 0.18765975242966434), (1.4086423037364302, -1.0133717049339268, -0.61920449072176709, -0.78522977444184905, -0.2328103488745005, 0.18358578028961331), (1.3812640184459468, -1.047635918033063, -0.62918193604047223, -0.77725805969469564, -0.22240924347971955, 0.18003762666126619), (1.3530747828369902, -1.0820149061676485, -0.63886062143319422, -0.76932249829443622, -0.21321450222713362, 0.17705731568712871), (1.324117035769417, -1.1164512699023377, -0.64826936036845306, -0.76141108240389876, -0.20523063810290823, 0.17473421668463424), (1.294438654066159, -1.1508834084076087, -0.6574373330314689, -0.75350922564788103, -0.19832793065660315, 0.17304104866571926), (1.2640926339871807, -1.1852460360561055, -0.66639388399919663, -0.74559988691553936, -0.1925723524639939, 0.17211494490833781), (1.2331366451651338, -1.2194708141674491, -0.67516831336894412, -0.73766370970960415, -0.18786875722059337, 0.17195217715824379), (1.2016324623545263, -1.2534870868845998, -0.68378966242702388, -0.72967917440333774, -0.18419866624510314, 0.17261421082264014), (1.1696452862242701, -1.2872227045046678, -0.6922864921531301, -0.72162276348679166, -0.18150423850780073, 0.17412530594411615), (1.1372429700984137, -1.3206049124326309, -0.70068665547523046, -0.71346913797229905, -0.17977253485932801, 0.17655152952198189), (1.104495174566031, -1.3535612797241663, -0.70901706362016093, -0.70519132403585671, -0.17898758721428376, 0.17995840096834861), (1.0714724758096574, -1.3860206383273435, -0.71730344800943324, -0.69676090839955884, -0.17907637813730631, 0.18435585053172451), (1.0382454559924987, -1.4179140029119093, -0.72557011960647111, -0.68814824095848082, -0.18003314612431659, 0.18982321746977993), (1.0048838048727911, -1.4491754417344611, -0.73383972725116353, -0.67932264404179699, -0.18184420373071258, 0.19643734513631667), (0.97145546090878643, -1.4797428713062153, -0.74213301743428883, -0.67025262732336799, -0.18446052990619061, 0.20424250843873848)]
+path_with_accelerations = [
+    (1.3583511559969876, 0.99753029519739866, 0.63708920330895369,
+     -0.77079007974101643, -0.21483375398380378, -0.17756921128311187),
+    (1.4037744780290744, 0.94141413786797179, 0.62102298265172207,
+     -0.78379235452915641, -0.23084099683729808, -0.18290283743090688),
+    (1.4401396868545593, 0.89467165253531666, 0.606891738771278,
+     -0.79478451004733031, -0.24685749210031543, -0.18849894149927623),
+    (1.4710837705397868, 0.85345617877170399, 0.59376006111610313,
+     -0.80464215016577489, -0.26311393698286972, -0.19415687958799988),
+    (1.4982967960378542, 0.81597755723156562, 0.58119389263733834,
+     -0.81376511301545618, -0.27984413029527577, -0.19986598102433009),
+    (1.5227269571172215, 0.78122893136122973, 0.56894801707769227,
+     -0.82237348805962973, -0.29704891442706877, -0.20550961547441812),
+    (1.5449685847030388, 0.74857685672553398, 0.55686625320351735,
+     -0.83060217676278458, -0.31482379304256025, -0.21106978462024978),
+    (1.5654226738527495, 0.71759174238125301, 0.54484048864732038,
+     -0.83853970802255351, -0.33321287621660045, -0.21650513557965106),
+    (1.5843743655705165, 0.68796601612512265, 0.53279106733541426,
+     -0.84624681894089859, -0.35226023809265267, -0.22178093106252236),
+    (1.6020345343012865, 0.65947020123078393, 0.52065635488289785,
+     -0.85376633812774205, -0.37188463022164508, -0.22678852570730737),
+    (1.6185639244576269, 0.63192742228662813, 0.50838674358661662,
+     -0.86112886314731996, -0.39227952043050979, -0.23159139751917215),
+    (1.6340880277208036, 0.60519768777296334, 0.49594100637973321,
+     -0.868356216187261, -0.41330592927121557, -0.23605025316897368),
+    (1.6487067026409843, 0.57916772325998889, 0.48328397846038601,
+     -0.87546364639743945, -0.43479093110952094, -0.24001893904573279),
+    (1.6625006419641934, 0.55374413183503834, 0.47038503527185527,
+     -0.88246128447218319, -0.45715591769925784, -0.2436817242766752),
+    (1.6755358637715485, 0.52884863988931285, 0.45721707379330323,
+     -0.88935513009814537, -0.48005035022840359, -0.24679412703629519),
+    (1.6878669166029825, 0.50441469954774187, 0.44375581873319114,
+     -0.89614774079971626, -0.50380737957408728, -0.24947659419788909),
+    (1.6995392207123023, 0.48038500205371104, 0.42997935653089725,
+     -0.90283871923908732, -0.52783372117172589, -0.25138272577381626),
+    (1.7105908129416818, 0.45670961972392227, 0.41586782149756141,
+     -0.90942506840468851, -0.55267961927927023, -0.25273346631273114),
+    (1.7210536699519405, 0.43334459201815007, 0.40140320353386438,
+     -0.91590145113584731, -0.57770009966870806, -0.25318354738409404),
+    (1.7309547270317198, 0.41025083198931545, 0.38656923494570777,
+     -0.92226038979969771, -0.60317645612010684, -0.25282447346857195),
+    (1.7403166729890138, 0.38739326814551689, 0.37135135004406289,
+     -0.92849242044318914, -0.62907036438628838, -0.25159784841893079),
+    (1.7491585775728877, 0.36474016215239319, 0.35573669259875446,
+     -0.93458622156486959, -0.6551663269414254, -0.24938020059543903),
+    (1.7574963917487576, 0.34226255982896742, 0.33971416817223166,
+     -0.94052872574050006, -0.68164592193873064, -0.24620769226541636),
+    (1.7653433501187576, 0.31993384454025714, 0.32327453032164366,
+     -0.94630522456833177, -0.70757451300020135, -0.24172061458903144),
+    (1.7727102970907476, 0.29772937021195395, 0.30641049133414705,
+     -0.95189947515500117, -0.73378453575677771, -0.23620138680600353),
+    (1.7796059529520747, 0.27562615695138953, 0.28911685939500692,
+     -0.95729381154041093, -0.75990897245769828, -0.22950448838605128),
+    (1.7860371320859008, 0.25360263640618674, 0.27139068895919466,
+     -0.9624692690918778, -0.78523056852177775, -0.22141489322699751),
+    (1.7920089227108962, 0.23163843702152076, 0.25323144050682866,
+     -0.96740572540110403, -0.81025448009679157, -0.21209581939563796),
+    (1.7975248354162883, 0.20971420159976159, 0.2346411508301583,
+     -0.97208205946674009, -0.83408589705170777, -0.20133249883457041),
+    (1.8025869261905516, 0.187811431247703, 0.21562459548465329,
+     -0.97647633551565383, -0.85752536967991499, -0.18935884543741083),
+    (1.8071958984562269, 0.16591235107247332, 0.19618945367704119,
+     -0.98056600913243175, -0.8793458743889202, -0.17593847769244828),
+    (1.8113511877225346, 0.14399979396679621, 0.17634645105214913,
+     -0.98432816133711831, -0.89983233183814704, -0.16120962647016274),
+    (1.8150510317784807, 0.12205709958524935, 0.15610948821796866,
+     -0.98773975706575867, -0.91852354093170219, -0.14517104001739675),
+    (1.8182925288197413, 0.10006802621144681, 0.13549574094137548,
+     -0.99077792879471627, -0.93602333307674279, -0.12800867856143744),
+    (1.821071685494891, 0.078016673692446373, 0.11452572935697461,
+     -0.99342028231522084, -0.95112385045254688, -0.10965064890920556),
+    (1.8233834565427998, 0.055887416001137141, 0.093223341590826445,
+     -0.99564522224667962, -0.96368362602021329, -0.090231797498176183),
+    (1.8252217774528923, 0.03366484230234558, 0.071615815013953282,
+     -0.99743229095507402, -0.97395276760288163, -0.069931055757802438),
+    (1.8265795913984428, 0.011333705660752967, 0.049733665943173709,
+     -0.99876251555204698, -0.98177893706111263, -0.048889055531294821),
+    (1.8274488715589303, -0.011121121248675203, 0.02761056315188902,
+     -0.99961875572762016, -0.98689335559342106, -0.027260179511112551),
+    (1.8278206398523622, -0.033714683874300592, 0.0052831412013899706,
+     -0.99998604411213976, -0.98885489268650051, -0.0052254487261787384),
+    (1.8276849830361703, -0.056461977241467148, -0.017209244112191453,
+     -0.99985190999321838, -0.98812791978941406, 0.017006330622021722),
+    (1.8270310671011307, -0.079377971247817633, -0.039824819694542858,
+     -0.99920667718760625, -0.98450390283226485, 0.039237693528591036),
+    (1.8258471508733223, -0.10247762977900209, -0.062519753866286318,
+     -0.99804372668560926, -0.97719363903338485, 0.061212532653782022),
+    (1.8241205997516765, -0.12577592348843702, -0.085248569812080663,
+     -0.99635971483445407, -0.9676884196650537, 0.08279433361404552),
+    (1.8218379005412455, -0.14928783595476772, -0.10796459505798382,
+     -0.99415473957224865, -0.95496997071328249, 0.103708042997466),
+    (1.8189846783932371, -0.17302836280361969, -0.13062045461685196,
+     -0.99143244693508337, -0.93935720014890423, 0.12375848445745616),
+    (1.8155457169306066, -0.19701250325490266, -0.15316858191907523,
+     -0.98820007362522466, -0.92129127811992539, 0.14279680293047756),
+    (1.8115049827211411, -0.22125524343262917, -0.17556174489393769,
+     -0.98446842190585071, -0.90059657633599033, 0.16060369204333666),
+    (1.8068456553568204, -0.24577153065112339, -0.19775357131740673,
+     -0.98025176614541798, -0.87754964758424281, 0.17703366424976713),
+    (1.8015501645066898, -0.27057623777063011, -0.21969906367786421,
+     -0.97556769186923664, -0.85256620853260556, 0.19199796793136439),
+    (1.795600235427889, -0.29568411659857541, -0.24135508622397667,
+     -0.97043687190554384, -0.82563764988942245, 0.20534143268497296),
+    (1.7889769445422168, -0.32110973920321939, -0.26268082100774776,
+     -0.96488278369690872, -0.79733324597202848, 0.2170659935022537),
+    (1.7816607868090406, -0.34686742590848585, -0.2836381738799823,
+     -0.95893137727265387, -0.76782873106500538, 0.22711183686998365),
+    (1.7736317567432636, -0.37297115865829411, -0.30419213280652752,
+     -0.95261070030659223, -0.73738784843863214, 0.23546528518662449),
+    (1.7648694450316516, -0.39943447838330554, -0.32431106313855179,
+     -0.94595049253433039, -0.70610753433104578, 0.2420821140887684),
+    (1.7553531527820141, -0.42627036498226889, -0.34396694344403017,
+     -0.93898175797923322, -0.67467492193224388, 0.24714550708779132),
+    (1.7450620254853675, -0.45349109855564618, -0.36313553561943973,
+     -0.93173632684916963, -0.64280482438985487, 0.25052642309609846),
+    (1.7339752087663065, -0.48110810061485765, -0.38179649614837224,
+     -0.92424641493966653, -0.61125522193929116, 0.2525024014306243),
+    (1.7220720279237476, -0.50913175415228962, -0.39993342129901005,
+     -0.91654419343972093, -0.58016017720123902, 0.25315181203742848),
+    (1.7093321931028456, -0.53757120171300954, -0.41753384214477446,
+     -0.90866137293483673, -0.54964898595174738, 0.25256545404213349),
+    (1.6957360316664474, -0.56643412097840984, -0.43458916639025197,
+     -0.9006288116955985, -0.51972307699036913, 0.25078642241782151),
+    (1.6812647489267576, -0.59572647787451594, -0.45109457862962754,
+     -0.89247615157546845, -0.49088885529812037, 0.24811508685641395),
+    (1.6659007178300929, -0.62545225787260295, -0.46704890024189227,
+     -0.88423148823305242, -0.46296888429931843, 0.24453849915066983),
+    (1.6496277974361373, -0.65561317697342414, -0.48245442463761296,
+     -0.87592107415428122, -0.43630053035835431, 0.24031239163872659),
+    (1.6324316790779632, -0.68620837486997288, -0.49731672574028513,
+     -0.86756906024763358, -0.41095471910587472, 0.23557116495526012),
+    (1.6143002579172752, -0.7172340939700278, -0.51164445121259294,
+     -0.85919727393850864, -0.38675403181117768, 0.23030820687574571),
+    (1.5952240262184549, -0.748683349319481, -0.52544910775441078,
+     -0.85082503204836046, -0.36408233991880601, 0.22484810685703166),
+    (1.5751964830679697, -0.780545595975073, -0.53874483689504815,
+     -0.84246899095392713, -0.34276938388236106, 0.21919491474821423),
+    (1.5542145534957212, -0.81280640198469889, -0.55154819264623711,
+     -0.83414302801658013, -0.32291038254364612, 0.21351295685970414),
+    (1.5322790080695103, -0.84544713677503402, -0.56387791937564813,
+     -0.82585815491559456, -0.30444498192901781, 0.20786805829508584),
+    (1.509394872119298, -0.87844468632349793, -0.57575473429345714,
+     -0.81762245929198296, -0.28737482236853346, 0.20236376870812761),
+    (1.4855718119204786, -0.91177120788178356, -0.58720111439137757,
+     -0.8094410733694728, -0.27173204177162957, 0.1971250636942595),
+    (1.4608244835702884, -0.94539393807497152, -0.59824108887263983,
+     -0.80131616705547515, -0.25741396251510884, 0.19217806498346204),
+    (1.4351728290976418, -0.97927506876108006, -0.60890003734400222,
+     -0.79324696313473042, -0.24447483076597848, 0.18765975242966434),
+    (1.4086423037364302, -1.0133717049339268, -0.61920449072176709,
+     -0.78522977444184905, -0.2328103488745005, 0.18358578028961331),
+    (1.3812640184459468, -1.047635918033063, -0.62918193604047223,
+     -0.77725805969469564, -0.22240924347971955, 0.18003762666126619),
+    (1.3530747828369902, -1.0820149061676485, -0.63886062143319422,
+     -0.76932249829443622, -0.21321450222713362, 0.17705731568712871),
+    (1.324117035769417, -1.1164512699023377, -0.64826936036845306,
+     -0.76141108240389876, -0.20523063810290823, 0.17473421668463424),
+    (1.294438654066159, -1.1508834084076087, -0.6574373330314689,
+     -0.75350922564788103, -0.19832793065660315, 0.17304104866571926),
+    (1.2640926339871807, -1.1852460360561055, -0.66639388399919663,
+     -0.74559988691553936, -0.1925723524639939, 0.17211494490833781),
+    (1.2331366451651338, -1.2194708141674491, -0.67516831336894412,
+     -0.73766370970960415, -0.18786875722059337, 0.17195217715824379),
+    (1.2016324623545263, -1.2534870868845998, -0.68378966242702388,
+     -0.72967917440333774, -0.18419866624510314, 0.17261421082264014),
+    (1.1696452862242701, -1.2872227045046678, -0.6922864921531301,
+     -0.72162276348679166, -0.18150423850780073, 0.17412530594411615),
+    (1.1372429700984137, -1.3206049124326309, -0.70068665547523046,
+     -0.71346913797229905, -0.17977253485932801, 0.17655152952198189),
+    (1.104495174566031, -1.3535612797241663, -0.70901706362016093,
+     -0.70519132403585671, -0.17898758721428376, 0.17995840096834861),
+    (1.0714724758096574, -1.3860206383273435, -0.71730344800943324,
+     -0.69676090839955884, -0.17907637813730631, 0.18435585053172451),
+    (1.0382454559924987, -1.4179140029119093, -0.72557011960647111,
+     -0.68814824095848082, -0.18003314612431659, 0.18982321746977993),
+    (1.0048838048727911, -1.4491754417344611, -0.73383972725116353,
+     -0.67932264404179699, -0.18184420373071258, 0.19643734513631667),
+    (0.97145546090878643, -1.4797428713062153, -0.74213301743428883,
+     -0.67025262732336799, -0.18446052990619061, 0.20424250843873848)
+]
diff --git a/y2018/control_loops/python/polydrivetrain.py b/y2018/control_loops/python/polydrivetrain.py
index c92e432..f406aa2 100644
--- a/y2018/control_loops/python/polydrivetrain.py
+++ b/y2018/control_loops/python/polydrivetrain.py
@@ -12,20 +12,22 @@
 FLAGS = gflags.FLAGS
 
 try:
-  gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 except gflags.DuplicateFlagError:
-  pass
+    pass
+
 
 def main(argv):
-  if FLAGS.plot:
-    polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
-  elif len(argv) != 7:
-    glog.fatal('Expected .h file name and .cc file name')
-  else:
-    polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7], 'y2018',
-                                       drivetrain.kDrivetrain)
+    if FLAGS.plot:
+        polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
+    elif len(argv) != 7:
+        glog.fatal('Expected .h file name and .cc file name')
+    else:
+        polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7],
+                                           'y2018', drivetrain.kDrivetrain)
+
 
 if __name__ == '__main__':
-  argv = FLAGS(sys.argv)
-  glog.init()
-  sys.exit(main(argv))
+    argv = FLAGS(sys.argv)
+    glog.init()
+    sys.exit(main(argv))
diff --git a/y2018/control_loops/python/polydrivetrain_test.py b/y2018/control_loops/python/polydrivetrain_test.py
index ccc3b77..3a1987a 100644
--- a/y2018/control_loops/python/polydrivetrain_test.py
+++ b/y2018/control_loops/python/polydrivetrain_test.py
@@ -10,73 +10,72 @@
 
 
 class TestVelocityDrivetrain(unittest.TestCase):
-  def MakeBox(self, x1_min, x1_max, x2_min, x2_max):
-    H = numpy.matrix([[1, 0],
-                      [-1, 0],
-                      [0, 1],
-                      [0, -1]])
-    K = numpy.matrix([[x1_max],
-                      [-x1_min],
-                      [x2_max],
-                      [-x2_min]])
-    return polytope.HPolytope(H, K)
 
-  def test_coerce_inside(self):
-    """Tests coercion when the point is inside the box."""
-    box = self.MakeBox(1, 2, 1, 2)
+    def MakeBox(self, x1_min, x1_max, x2_min, x2_max):
+        H = numpy.matrix([[1, 0], [-1, 0], [0, 1], [0, -1]])
+        K = numpy.matrix([[x1_max], [-x1_min], [x2_max], [-x2_min]])
+        return polytope.HPolytope(H, K)
 
-    # x1 = x2
-    K = numpy.matrix([[1, -1]])
-    w = 0
+    def test_coerce_inside(self):
+        """Tests coercion when the point is inside the box."""
+        box = self.MakeBox(1, 2, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w,
-                                                 numpy.matrix([[1.5], [1.5]])),
-                       numpy.matrix([[1.5], [1.5]]))
+        # x1 = x2
+        K = numpy.matrix([[1, -1]])
+        w = 0
 
-  def test_coerce_outside_intersect(self):
-    """Tests coercion when the line intersects the box."""
-    box = self.MakeBox(1, 2, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[1.5], [1.5]])),
+            numpy.matrix([[1.5], [1.5]]))
 
-    # x1 = x2
-    K = numpy.matrix([[1, -1]])
-    w = 0
+    def test_coerce_outside_intersect(self):
+        """Tests coercion when the line intersects the box."""
+        box = self.MakeBox(1, 2, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[2.0], [2.0]]))
+        # x1 = x2
+        K = numpy.matrix([[1, -1]])
+        w = 0
 
-  def test_coerce_outside_no_intersect(self):
-    """Tests coercion when the line does not intersect the box."""
-    box = self.MakeBox(3, 4, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[2.0], [2.0]]))
 
-    # x1 = x2
-    K = numpy.matrix([[1, -1]])
-    w = 0
+    def test_coerce_outside_no_intersect(self):
+        """Tests coercion when the line does not intersect the box."""
+        box = self.MakeBox(3, 4, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[3.0], [2.0]]))
+        # x1 = x2
+        K = numpy.matrix([[1, -1]])
+        w = 0
 
-  def test_coerce_middle_of_edge(self):
-    """Tests coercion when the line intersects the middle of an edge."""
-    box = self.MakeBox(0, 4, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[3.0], [2.0]]))
 
-    # x1 = x2
-    K = numpy.matrix([[-1, 1]])
-    w = 0
+    def test_coerce_middle_of_edge(self):
+        """Tests coercion when the line intersects the middle of an edge."""
+        box = self.MakeBox(0, 4, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[2.0], [2.0]]))
+        # x1 = x2
+        K = numpy.matrix([[-1, 1]])
+        w = 0
 
-  def test_coerce_perpendicular_line(self):
-    """Tests coercion when the line does not intersect and is in quadrant 2."""
-    box = self.MakeBox(1, 2, 1, 2)
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[2.0], [2.0]]))
 
-    # x1 = -x2
-    K = numpy.matrix([[1, 1]])
-    w = 0
+    def test_coerce_perpendicular_line(self):
+        """Tests coercion when the line does not intersect and is in quadrant 2."""
+        box = self.MakeBox(1, 2, 1, 2)
 
-    assert_array_equal(polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
-                       numpy.matrix([[1.0], [1.0]]))
+        # x1 = -x2
+        K = numpy.matrix([[1, 1]])
+        w = 0
+
+        assert_array_equal(
+            polydrivetrain.CoerceGoal(box, K, w, numpy.matrix([[5], [5]])),
+            numpy.matrix([[1.0], [1.0]]))
 
 
 if __name__ == '__main__':
-  unittest.main()
+    unittest.main()
diff --git a/y2018/control_loops/python/spline_generate.py b/y2018/control_loops/python/spline_generate.py
index cea3d7e..0dc5804 100644
--- a/y2018/control_loops/python/spline_generate.py
+++ b/y2018/control_loops/python/spline_generate.py
@@ -7,7 +7,7 @@
 # see yXXXX/control_loops/python/drivetrain.py for the current values

 

 kDrivetrain = drivetrain.DrivetrainParams(

-    J = 6.0,

+    J=6.0,

     mass=68.0,

     robot_radius=0.616 / 2.0,

     wheel_radius=0.127 / 2.0 * 120.0 / 118.0,

@@ -26,12 +26,15 @@
 

 drivetrain = drivetrain.Drivetrain(kDrivetrain)

 # set up coefficients for Hemrite basis function evaluation

-coeffs = np.array([[1, 0, 0, -10, 15, -6], [0, 1, 0, -6, 8, -3], [0, 0, 0.5, -1.5, 1.5, -0.5], [0, 0, 0, 0.5, -1, 0.5], [0, 0, 0, -4, 7, -3], [0, 0, 0, 10, -15, 6]])

+coeffs = np.array([[1, 0, 0, -10, 15, -6], [0, 1, 0, -6, 8, -3],

+                   [0, 0, 0.5, -1.5, 1.5, -0.5], [0, 0, 0, 0.5, -1, 0.5],

+                   [0, 0, 0, -4, 7, -3], [0, 0, 0, 10, -15, 6]])

 coeffs_prime = np.empty_like(coeffs)

 for ii in range(0, len(coeffs)):

     for jj in range(0, len(coeffs[ii]) - 1):

         coeffs_prime[ii][jj] = (jj + 1) * coeffs[ii][jj]

 

+

 def RungeKutta(f, x, dt):

     """4th order RungeKutta integration of F starting at X."""

     a = f(x)

@@ -41,24 +44,31 @@
 

     return x + dt * (a + 2.0 * b + 2.0 * c + d) / 6.0

 

+

 def normalize(v):

     norm = np.linalg.norm(v)

     return v / norm

 

+

 def theta(v):

     return np.arctan2(v[1], v[0])

 

+

 # evaluate Nth hermite basis function at t

 def nth_H(N, t):

-    return coeffs[N][0] + coeffs[N][1]*t + coeffs[N][2]*t**2 + coeffs[N][3]*t**3 + coeffs[N][4]*t**4 + coeffs[N][5]*t**5

+    return coeffs[N][0] + coeffs[N][1] * t + coeffs[N][2] * t**2 + coeffs[N][

+        3] * t**3 + coeffs[N][4] * t**4 + coeffs[N][5] * t**5

+

 

 def nth_H_prime(N, t):

-    return coeffs[N][0] + coeffs[N][1]*t + coeffs[N][2]*t**2 + coeffs[N][3]*t**3 + coeffs[N][4]*t**4 

+    return coeffs[N][0] + coeffs[N][1] * t + coeffs[N][2] * t**2 + coeffs[N][

+        3] * t**3 + coeffs[N][4] * t**4

+

 

 # class defining a quintic Hermite spline, with utilities for modification and plotting

 class Hermite_Spline:

     # init method given known parameters, ie savefile loading(if necessary)

-    def __init__(self, start, control1, control2, end, resolution = 200):

+    def __init__(self, start, control1, control2, end, resolution=200):

         self.start = start

         self.end = end

         self.control1 = control1

@@ -86,16 +96,18 @@
     # take paramters and compute coeffcicents for Hermite basis functions, to be called every time he change control points

     def compute_coefficients(self):

         self.coeffs = np.append(self.coeffs, np.array(self.start))

-        self.coeffs = np.append(self.coeffs, np.array(self.control1) - np.array(self.start))

-        self.coeffs = np.append(self.coeffs, [0,0])

-        self.coeffs = np.append(self.coeffs, [0,0])

-        self.coeffs = np.append(self.coeffs, np.array(self.end) - np.array(self.control2))

+        self.coeffs = np.append(self.coeffs,

+                                np.array(self.control1) - np.array(self.start))

+        self.coeffs = np.append(self.coeffs, [0, 0])

+        self.coeffs = np.append(self.coeffs, [0, 0])

+        self.coeffs = np.append(self.coeffs,

+                                np.array(self.end) - np.array(self.control2))

         self.coeffs = np.append(self.coeffs, np.array(self.end))

 

-        self.coeffs = np.reshape(self.coeffs, newshape = (6, 2))

+        self.coeffs = np.reshape(self.coeffs, newshape=(6, 2))

 

     # setters for control points, set coefficients

-    def set_positions(self, p1 = None, p2 = None):

+    def set_positions(self, p1=None, p2=None):

         if p1 != None:

             self.start = p1

         if p2 != None:

@@ -103,7 +115,7 @@
 

         self.compute_coefficients()

 

-    def set_controls(self, c1 = None, c2 = None):

+    def set_controls(self, c1=None, c2=None):

         if c1 != None:

             self.control1 = c1

         if c2 != None:

@@ -111,12 +123,12 @@
 

         self.compute_coefficients()

 

-    def set_velocities(self, v1 = None, v2 = None):

+    def set_velocities(self, v1=None, v2=None):

         if v1 != None:

             self.control1 = self.start + v1

         if v2 != None:

             self.control2 = self.end + v2

-        

+

         self.compute_coefficients()

 

     def get_smoothness(self):

@@ -125,14 +137,25 @@
 

     # given Basis functions and controls compute coordinate given t

     def spline_eval_hermite(self, t):

-        return np.array(self.coeffs[0]*nth_H(0, t) + self.coeffs[1]*nth_H(1, t)+ self.coeffs[2]*nth_H(2, t) + self.coeffs[3]*nth_H(3, t) + self.coeffs[4]* nth_H(4, t)+ self.coeffs[5]*nth_H(5, t))

-    

+        return np.array(self.coeffs[0] * nth_H(0, t) +

+                        self.coeffs[1] * nth_H(1, t) +

+                        self.coeffs[2] * nth_H(2, t) +

+                        self.coeffs[3] * nth_H(3, t) +

+                        self.coeffs[4] * nth_H(4, t) +

+                        self.coeffs[5] * nth_H(5, t))

+

     # given Basis functions and controls compute velocity given t

     def spline_eval_hermite_v(self, t):

-         return normalize(np.array(self.coeffs[0]*nth_H_prime(0, t) + self.coeffs[1]*nth_H_prime(1, t)+ self.coeffs[2]*nth_H_prime(2, t) + self.coeffs[3]*nth_H_prime(3, t) + self.coeffs[4]* nth_H_prime(4, t)+ self.coeffs[5]*nth_H_prime(5, t)))

+        return normalize(

+            np.array(self.coeffs[0] * nth_H_prime(0, t) +

+                     self.coeffs[1] * nth_H_prime(1, t) +

+                     self.coeffs[2] * nth_H_prime(2, t) +

+                     self.coeffs[3] * nth_H_prime(3, t) +

+                     self.coeffs[4] * nth_H_prime(4, t) +

+                     self.coeffs[5] * nth_H_prime(5, t)))

 

     # take coefficients and compute spline points/properties

-    def setup(self, resolution_multiplier = 10, dt = .000001):

+    def setup(self, resolution_multiplier=10, dt=.000001):

         points = []

         velocities = []

         accelerations = []

@@ -145,7 +168,7 @@
         distance = 0

 

         # iterate through interim points and compute pos_vectors, and at predefined points arc length,

-        # velocity, and acceleration vectors and store them at their associated index 

+        # velocity, and acceleration vectors and store them at their associated index

         for i in range(0, self.resolution * resolution_multiplier):

             t = i / (1.0 * self.resolution * resolution_multiplier)

 

@@ -157,7 +180,7 @@
 

             distance = current_s + distance

             # at important points compute important values and store

-            if i % resolution_multiplier  == 0:

+            if i % resolution_multiplier == 0:

                 s.append(distance)

                 points.append(current_point)

 

@@ -171,7 +194,8 @@
                 if np.linalg.norm(v) == 0:

                     curvature = 0

                 else:

-                    curvature = np.linalg.det(np.column_stack((v, a)) / (np.linalg.norm(v)**(3/2)))

+                    curvature = np.linalg.det(

+                        np.column_stack((v, a)) / (np.linalg.norm(v)**(3 / 2)))

 

                 velocities.append(v)

                 accelerations.append(a)

@@ -181,18 +205,17 @@
                     curvatures.append(0.0001)

                 else:

                     curvatures.append(curvature)

- 

+

             last_point = current_point

 

         self.arc_lengths = np.array(s)

-        self.points = np.reshape(points, newshape = (-1, 2))

-        self.velocities = np.reshape(velocities, newshape = (-1, 2))

-        self.accelerations = np.reshape(accelerations, newshape = (-1, 2))

+        self.points = np.reshape(points, newshape=(-1, 2))

+        self.velocities = np.reshape(velocities, newshape=(-1, 2))

+        self.accelerations = np.reshape(accelerations, newshape=(-1, 2))

         self.thetas = np.array(thetas)

         self.omegas = np.array(omegas)

         self.curvatures = np.array(curvatures)

 

-

     def plot_diagnostics(self):

         plt.figure("Spline")

         plt.title('Spline')

@@ -201,38 +224,48 @@
 

         plt.figure("Diagnostics")

 

-        plt.subplot(2, 2, 1)        

+        plt.subplot(2, 2, 1)

         plt.title('theta')

         plt.xlabel('arc_length')

         plt.ylabel('theta')

-        theta, = plt.plot(self.arc_lengths, self.thetas, label = 'theta')

-        plt.legend(handles = [theta])

+        theta, = plt.plot(self.arc_lengths, self.thetas, label='theta')

+        plt.legend(handles=[theta])

 

         plt.subplot(2, 2, 2)

         plt.title('omegas')

         plt.xlabel('arc_length')

         plt.ylabel('omega')

-        omega, = plt.plot(self.arc_lengths, self.omegas, label = 'omega')

-        plt.legend(handles = [omega])

+        omega, = plt.plot(self.arc_lengths, self.omegas, label='omega')

+        plt.legend(handles=[omega])

 

         plt.subplot(2, 2, 3)

         plt.title('Velocities')

         plt.xlabel('arc_length')

         plt.ylabel('velocity')

-        dxds, = plt.plot(self.arc_lengths, self.velocities[:, 0], label = 'dx/ds')

-        dyds, = plt.plot(self.arc_lengths, self.velocities[:, 1], label = 'dy/ds')

-        plt.legend(handles = [dxds, dyds])

+        dxds, = plt.plot(self.arc_lengths,

+                         self.velocities[:, 0],

+                         label='dx/ds')

+        dyds, = plt.plot(self.arc_lengths,

+                         self.velocities[:, 1],

+                         label='dy/ds')

+        plt.legend(handles=[dxds, dyds])

 

         plt.subplot(2, 2, 4)

         plt.title('Accelerations')

         plt.xlabel('arc_length')

         plt.ylabel('acceleration')

-        dx2ds2, = plt.plot(self.arc_lengths, self.accelerations[:, 0], label = 'd^2x/ds^2')

-        dy2ds2, = plt.plot(self.arc_lengths, self.accelerations[:, 1], label = 'd^2x/ds^2')

-        plt.legend(handles = [dx2ds2, dy2ds2])

+        dx2ds2, = plt.plot(self.arc_lengths,

+                           self.accelerations[:, 0],

+                           label='d^2x/ds^2')

+        dy2ds2, = plt.plot(self.arc_lengths,

+                           self.accelerations[:, 1],

+                           label='d^2x/ds^2')

+        plt.legend(handles=[dx2ds2, dy2ds2])

+

 

 # class defining a number of splines with convinience methods

 class Path:

+

     def __init__(self):

         self.splines = []

         self.knot_accels = []

@@ -270,7 +303,7 @@
         else:

             print("index %f out of bounds, no spline of that index" % i)

 

-    def join(self, first_priority = False):

+    def join(self, first_priority=False):

         for i in range(0, len(self.splines)):

             if first_priority & i != len(self.splines):

                 print("unfinished")

@@ -278,7 +311,12 @@
 

 # class which takes a Path object along with constraints and reparamterizes it with respect to time

 class Trajectory:

-    def __init__(self, path, max_angular_accel=3, max_voltage=11, max_normal_accel = .2):

+

+    def __init__(self,

+                 path,

+                 max_angular_accel=3,

+                 max_voltage=11,

+                 max_normal_accel=.2):

         self.path = path

         self.A = drivetrain.A_continuous

         self.B = drivetrain.B_continuous

@@ -291,43 +329,46 @@
 

         self.max_velocities_adhering_to_normal_accel = []

         self.max_velocities_adhering_to_voltage = []

-        self.path.splines[0].setup(resolution_multiplier = 100)

+        self.path.splines[0].setup(resolution_multiplier=100)

 

         self.set_max_v_adhering_to_normal_accel()

         self.max_voltageK_pass()

 

     def set_max_v_adhering_to_normal_accel(self):

         Ks = self.path.get_K()

-        accels = np.full_like(Ks, fill_value = self.max_normal_accel)

+        accels = np.full_like(Ks, fill_value=self.max_normal_accel)

         max_velocities = np.sqrt(np.abs(accels / Ks))

         self.max_velocities_adhering_to_normal_accel = max_velocities

 

     def max_voltageK_pass(self):

         max_ds_dt = []

         Ks = self.path.get_K()

-        turning_radii = np.full_like(Ks, fill_value = 1) / np.abs(Ks)

+        turning_radii = np.full_like(Ks, fill_value=1) / np.abs(Ks)

 

-    

-

-        # compute max steady-state velocity given voltage constraints  

+        # compute max steady-state velocity given voltage constraints

         for i in range(0, len(Ks)):

-            v_ratio = (turning_radii[i] + self.robot_radius) / (turning_radii[i] - self.robot_radius)

-            matrix = np.array([[self.A[1, 1], self.A[1, 3], self.B[1, 1]], [self.A[3, 1] - 1, self.A[3, 3], self.B[3, 1]], [-1, v_ratio, 0]])

-            sols = np.array([-1 * self.max_voltage * self.B[1, 0], -1 * self.max_voltage * self.B[3, 0], 0])

+            v_ratio = (turning_radii[i] + self.robot_radius) / (

+                turning_radii[i] - self.robot_radius)

+            matrix = np.array([[self.A[1, 1], self.A[1, 3], self.B[1, 1]],

+                               [self.A[3, 1] - 1, self.A[3, 3], self.B[3, 1]],

+                               [-1, v_ratio, 0]])

+            sols = np.array([

+                -1 * self.max_voltage * self.B[1, 0],

+                -1 * self.max_voltage * self.B[3, 0], 0

+            ])

             Vs = np.dot(np.linalg.inv(matrix), sols)

             max_ds_dt.append((Vs[0] + Vs[1]) / 2)

-            

+

         self.max_velocities_adhering_to_voltage = max_ds_dt

+

     # compute the maximum acceleration we can ask for given voltage and, ya know, staying on the path.

-

-

     '''

     These methods use the continuous form of our drivetrain state equation

     in order to compute the maximum acceleration which adheres to the path

     and voltage constraints, as well as any arbitary set of constraints

     on velocity as a function of arc_length

     '''

-    

+

     def forward_accel_pass(self):

         points = self.path.get_points()

         velocities = self.path.get_velocities()

@@ -335,27 +376,37 @@
         arc_lenghts = self.path.get_S()

 

         for i in range(0, len(points)):

-            Xn1 =   

-        

-    

+            #Xn1 =

+            pass

+

     def backward_accelaration_pass(self):

 

-        print("max backward accel pass")    

+        print("max backward accel pass")

 

-    

-    def plot_diagnostics(self, i = 0):

+    def plot_diagnostics(self, i=0):

 

         plt.figure('max velocity')

         plt.title('max_v_normal_accel')

         plt.xlabel('arc_length')

         plt.ylabel('max V')

-        max_v_normal = plt.plot(self.path.get_S(), self.max_velocities_adhering_to_normal_accel, label = 'ds/dt (normal)')#   , label = 'ds/dt')

-        curvature = plt.plot(self.path.get_S(), 1000 * np.abs(self.path.get_K()), label = 'K')

-        max_v_K_V = plt.plot(self.path.get_S(), self.max_velocities_adhering_to_voltage, label = 'ds/dt (voltage)')

-        plt.legend(handles = [max_v_normal[0], curvature[0], max_v_K_V[0]])

+        max_v_normal = plt.plot(self.path.get_S(),

+                                self.max_velocities_adhering_to_normal_accel,

+                                label='ds/dt (normal)')  #   , label = 'ds/dt')

+        curvature = plt.plot(self.path.get_S(),

+                             1000 * np.abs(self.path.get_K()),

+                             label='K')

+        max_v_K_V = plt.plot(self.path.get_S(),

+                             self.max_velocities_adhering_to_voltage,

+                             label='ds/dt (voltage)')

+        plt.legend(handles=[max_v_normal[0], curvature[0], max_v_K_V[0]])

+

 

 def main():

-    A = Hermite_Spline(np.array([0,0]), np.array([0,400]), np.array([200,300]), np.array([200,200]), resolution = 200)

+    A = Hermite_Spline(np.array([0, 0]),

+                       np.array([0, 400]),

+                       np.array([200, 300]),

+                       np.array([200, 200]),

+                       resolution=200)

     A.plot_diagnostics()

     path = Path()

     path.add_spline(A)

@@ -363,4 +414,5 @@
     trajectory.plot_diagnostics()

     plt.show()

 

+

 main()

diff --git a/y2019/control_loops/python/drivetrain.py b/y2019/control_loops/python/drivetrain.py
index 9c4db49..0ef54ef 100644
--- a/y2019/control_loops/python/drivetrain.py
+++ b/y2019/control_loops/python/drivetrain.py
@@ -47,5 +47,6 @@
         # Write the generated constants out to a file.
         drivetrain.WriteDrivetrain(argv[1:3], argv[3:5], 'y2019', kDrivetrain)
 
+
 if __name__ == '__main__':
     sys.exit(main(sys.argv))
diff --git a/y2019/control_loops/python/elevator.py b/y2019/control_loops/python/elevator.py
index b7fc74b..546ead5 100755
--- a/y2019/control_loops/python/elevator.py
+++ b/y2019/control_loops/python/elevator.py
@@ -18,18 +18,18 @@
 first_stage_mass = 0.7957
 carriage_mass = 2.754
 
-kElevator = linear_system.LinearSystemParams(
-    name='Elevator',
-    motor=control_loop.Vex775Pro(),
-    G=(8.0 / 82.0),
-    radius=2.25 * 0.0254 / 2.0,
-    mass=first_stage_mass + carriage_mass,
-    q_pos=0.070,
-    q_vel=1.35,
-    kalman_q_pos=0.12,
-    kalman_q_vel=2.00,
-    kalman_q_voltage=35.0,
-    kalman_r_position=0.05)
+kElevator = linear_system.LinearSystemParams(name='Elevator',
+                                             motor=control_loop.Vex775Pro(),
+                                             G=(8.0 / 82.0),
+                                             radius=2.25 * 0.0254 / 2.0,
+                                             mass=first_stage_mass +
+                                             carriage_mass,
+                                             q_pos=0.070,
+                                             q_vel=1.35,
+                                             kalman_q_pos=0.12,
+                                             kalman_q_vel=2.00,
+                                             kalman_q_voltage=35.0,
+                                             kalman_r_position=0.05)
 
 kElevatorBall = copy.copy(kElevator)
 kElevatorBall.q_pos = 0.15
@@ -43,8 +43,10 @@
     if FLAGS.plot:
         R = numpy.matrix([[1.5], [0.0]])
         linear_system.PlotKick(kElevatorBall, R, plant_params=kElevatorModel)
-        linear_system.PlotMotion(
-            kElevatorBall, R, max_velocity=5.0, plant_params=kElevatorModel)
+        linear_system.PlotMotion(kElevatorBall,
+                                 R,
+                                 max_velocity=5.0,
+                                 plant_params=kElevatorModel)
 
     # Write the generated constants out to a file.
     if len(argv) != 5:
diff --git a/y2019/control_loops/python/intake.py b/y2019/control_loops/python/intake.py
index 828f54e..36d737c 100755
--- a/y2019/control_loops/python/intake.py
+++ b/y2019/control_loops/python/intake.py
@@ -20,7 +20,7 @@
 kIntake = angular_system.AngularSystemParams(
     name='Intake',
     motor=control_loop.BAG(),
-    G=(1.0 / 7.0) * (1.0 / 4.0) * (1.0 / 4.0)* (18.0 / 38.0),
+    G=(1.0 / 7.0) * (1.0 / 4.0) * (1.0 / 4.0) * (18.0 / 38.0),
     # Suneel: Sampled moment of inertia at 6 different positions
     # J = the average of the six.
     # 1. 0.686
diff --git a/y2019/control_loops/python/polydrivetrain.py b/y2019/control_loops/python/polydrivetrain.py
index eaccb92..a045af1 100644
--- a/y2019/control_loops/python/polydrivetrain.py
+++ b/y2019/control_loops/python/polydrivetrain.py
@@ -12,20 +12,22 @@
 FLAGS = gflags.FLAGS
 
 try:
-  gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 except gflags.DuplicateFlagError:
-  pass
+    pass
+
 
 def main(argv):
-  if FLAGS.plot:
-    polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
-  elif len(argv) != 7:
-    glog.fatal('Expected .h file name and .cc file name')
-  else:
-    polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7], 'y2019',
-                                       drivetrain.kDrivetrain)
+    if FLAGS.plot:
+        polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
+    elif len(argv) != 7:
+        glog.fatal('Expected .h file name and .cc file name')
+    else:
+        polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7],
+                                           'y2019', drivetrain.kDrivetrain)
+
 
 if __name__ == '__main__':
-  argv = FLAGS(sys.argv)
-  glog.init()
-  sys.exit(main(argv))
+    argv = FLAGS(sys.argv)
+    glog.init()
+    sys.exit(main(argv))
diff --git a/y2019/control_loops/python/wrist.py b/y2019/control_loops/python/wrist.py
index c983a1d..f20975c 100755
--- a/y2019/control_loops/python/wrist.py
+++ b/y2019/control_loops/python/wrist.py
@@ -25,17 +25,17 @@
 # Wrist with hatch
 #  0.446
 
-kWrist = angular_system.AngularSystemParams(
-    name='Wrist',
-    motor=control_loop.BAG(),
-    G=(6.0 / 60.0) * (20.0 / 100.0) * (24.0 / 84.0),
-    J=0.30,
-    q_pos=0.20,
-    q_vel=5.0,
-    kalman_q_pos=0.12,
-    kalman_q_vel=2.0,
-    kalman_q_voltage=4.0,
-    kalman_r_position=0.05)
+kWrist = angular_system.AngularSystemParams(name='Wrist',
+                                            motor=control_loop.BAG(),
+                                            G=(6.0 / 60.0) * (20.0 / 100.0) *
+                                            (24.0 / 84.0),
+                                            J=0.30,
+                                            q_pos=0.20,
+                                            q_vel=5.0,
+                                            kalman_q_pos=0.12,
+                                            kalman_q_vel=2.0,
+                                            kalman_q_voltage=4.0,
+                                            kalman_r_position=0.05)
 
 kWristBall = copy.copy(kWrist)
 kWristBall.J = 0.4007
diff --git a/y2019/vision/undistort.py b/y2019/vision/undistort.py
index 8e1cbd2..feeb7c8 100755
--- a/y2019/vision/undistort.py
+++ b/y2019/vision/undistort.py
@@ -74,8 +74,9 @@
                 cv2.destroyAllWindows()
         fd.close()
 
-    ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(
-        objpoints, imgpoints, grey.shape[::-1], None, None)
+    ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints,
+                                                       grey.shape[::-1], None,
+                                                       None)
     newcameramtx, roi = cv2.getOptimalNewCameraMatrix(mtx, dist, (rows, cols),
                                                       1, (rows, cols))
 
diff --git a/y2020/control_loops/drivetrain/localizer_test.cc b/y2020/control_loops/drivetrain/localizer_test.cc
index f0bcd88..9e9e7dd 100644
--- a/y2020/control_loops/drivetrain/localizer_test.cc
+++ b/y2020/control_loops/drivetrain/localizer_test.cc
@@ -5,7 +5,6 @@
 #include "aos/events/logging/log_writer.h"
 #include "aos/network/message_bridge_server_generated.h"
 #include "aos/network/team_number.h"
-#include "aos/network/testing_time_converter.h"
 #include "frc971/control_loops/control_loop_test.h"
 #include "frc971/control_loops/drivetrain/drivetrain.h"
 #include "frc971/control_loops/drivetrain/drivetrain_test_lib.h"
@@ -91,7 +90,7 @@
   return locations;
 }
 
-constexpr std::chrono::seconds kPiTimeOffset(-10);
+constexpr std::chrono::seconds kPiTimeOffset(10);
 }  // namespace
 
 namespace chrono = std::chrono;
@@ -107,8 +106,13 @@
       : frc971::testing::ControlLoopTest(
             aos::configuration::ReadConfig(
                 "y2020/control_loops/drivetrain/simulation_config.json"),
-            GetTest2020DrivetrainConfig().dt),
-        time_converter_(aos::configuration::NodesCount(configuration())),
+            GetTest2020DrivetrainConfig().dt,
+            {{BootTimestamp::epoch() + kPiTimeOffset,
+              BootTimestamp::epoch() + kPiTimeOffset,
+              BootTimestamp::epoch() + kPiTimeOffset,
+              BootTimestamp::epoch() + kPiTimeOffset,
+              BootTimestamp::epoch() + kPiTimeOffset,
+              BootTimestamp::epoch() + kPiTimeOffset, BootTimestamp::epoch()}}),
         roborio_(aos::configuration::GetNode(configuration(), "roborio")),
         pi1_(aos::configuration::GetNode(configuration(), "pi1")),
         test_event_loop_(MakeEventLoop("test", roborio_)),
@@ -138,16 +142,8 @@
         drivetrain_plant_event_loop_(MakeEventLoop("plant", roborio_)),
         drivetrain_plant_(drivetrain_plant_event_loop_.get(), dt_config_),
         last_frame_(monotonic_now()) {
-    event_loop_factory()->SetTimeConverter(&time_converter_);
     CHECK_EQ(aos::configuration::GetNodeIndex(configuration(), roborio_), 6);
     CHECK_EQ(aos::configuration::GetNodeIndex(configuration(), pi1_), 1);
-    time_converter_.AddMonotonic({BootTimestamp::epoch() + kPiTimeOffset,
-                                  BootTimestamp::epoch() + kPiTimeOffset,
-                                  BootTimestamp::epoch() + kPiTimeOffset,
-                                  BootTimestamp::epoch() + kPiTimeOffset,
-                                  BootTimestamp::epoch() + kPiTimeOffset,
-                                  BootTimestamp::epoch() + kPiTimeOffset,
-                                  BootTimestamp::epoch()});
     set_team_id(frc971::control_loops::testing::kTeamNumber);
     set_battery_voltage(12.0);
 
@@ -351,8 +347,6 @@
     }
   }
 
-  aos::message_bridge::TestingTimeConverter time_converter_;
-
   const aos::Node *const roborio_;
   const aos::Node *const pi1_;
 
diff --git a/y2020/control_loops/python/accelerator.py b/y2020/control_loops/python/accelerator.py
index bb6871c..54ec9d3 100644
--- a/y2020/control_loops/python/accelerator.py
+++ b/y2020/control_loops/python/accelerator.py
@@ -20,20 +20,19 @@
 # Gear ratio to the final wheel.
 G = (30.0 / 40.0) * numpy.power(G_per_wheel, 3.0)
 # Overall flywheel inertia.
-J = J_wheel * (
-    1.0 + numpy.power(G_per_wheel, -2.0) + numpy.power(G_per_wheel, -4.0) + numpy.power(G_per_wheel, -6.0))
+J = J_wheel * (1.0 + numpy.power(G_per_wheel, -2.0) +
+               numpy.power(G_per_wheel, -4.0) + numpy.power(G_per_wheel, -6.0))
 
 # The position and velocity are measured for the final wheel.
-kAccelerator = flywheel.FlywheelParams(
-    name='Accelerator',
-    motor=control_loop.Falcon(),
-    G=G,
-    J=J * 1.3,
-    q_pos=0.01,
-    q_vel=40.0,
-    q_voltage=1.0,
-    r_pos=0.03,
-    controller_poles=[.89])
+kAccelerator = flywheel.FlywheelParams(name='Accelerator',
+                                       motor=control_loop.Falcon(),
+                                       G=G,
+                                       J=J * 1.3,
+                                       q_pos=0.01,
+                                       q_vel=40.0,
+                                       q_voltage=1.0,
+                                       r_pos=0.03,
+                                       controller_poles=[.89])
 
 
 def main(argv):
diff --git a/y2020/control_loops/python/control_panel.py b/y2020/control_loops/python/control_panel.py
index 7a5bdf9..6bda841 100644
--- a/y2020/control_loops/python/control_panel.py
+++ b/y2020/control_loops/python/control_panel.py
@@ -17,17 +17,16 @@
 except gflags.DuplicateFlagError:
     pass
 
-kControlPanel = angular_system.AngularSystemParams(
-    name='ControlPanel',
-    motor=control_loop.BAG(),
-    G=1.0,
-    J=0.000009,
-    q_pos=0.20,
-    q_vel=5.0,
-    kalman_q_pos=0.12,
-    kalman_q_vel=2.0,
-    kalman_q_voltage=4.0,
-    kalman_r_position=0.05)
+kControlPanel = angular_system.AngularSystemParams(name='ControlPanel',
+                                                   motor=control_loop.BAG(),
+                                                   G=1.0,
+                                                   J=0.000009,
+                                                   q_pos=0.20,
+                                                   q_vel=5.0,
+                                                   kalman_q_pos=0.12,
+                                                   kalman_q_vel=2.0,
+                                                   kalman_q_voltage=4.0,
+                                                   kalman_r_position=0.05)
 
 
 def main(argv):
@@ -42,7 +41,9 @@
             'Expected .h file name and .cc file name for the control_panel and integral control_panel.'
         )
     else:
-        namespaces = ['y2020', 'control_loops', 'superstructure', 'control_panel']
+        namespaces = [
+            'y2020', 'control_loops', 'superstructure', 'control_panel'
+        ]
         angular_system.WriteAngularSystem(kControlPanel, argv[1:3], argv[3:5],
                                           namespaces)
 
diff --git a/y2020/control_loops/python/finisher.py b/y2020/control_loops/python/finisher.py
index 8c33cc3..7e703fc 100644
--- a/y2020/control_loops/python/finisher.py
+++ b/y2020/control_loops/python/finisher.py
@@ -22,14 +22,17 @@
 J = 0.00507464
 J = 0.0035
 
+
 def AddResistance(motor, resistance):
     motor.resistance += resistance
     return motor
 
+
 def ScaleKv(motor, scale):
     motor.Kv *= scale
     return motor
 
+
 # The position and velocity are measured for the final wheel.
 kFinisher = flywheel.FlywheelParams(
     name='Finisher',
diff --git a/y2020/control_loops/python/flywheel.py b/y2020/control_loops/python/flywheel.py
index 6f41a17..9153bc6 100755
--- a/y2020/control_loops/python/flywheel.py
+++ b/y2020/control_loops/python/flywheel.py
@@ -7,6 +7,7 @@
 
 
 class FlywheelParams(object):
+
     def __init__(self,
                  name,
                  motor,
@@ -31,6 +32,7 @@
 
 
 class VelocityFlywheel(control_loop.HybridControlLoop):
+
     def __init__(self, params, name="Flywheel"):
         super(VelocityFlywheel, self).__init__(name=name)
         self.params = params
@@ -76,6 +78,7 @@
 
 
 class Flywheel(VelocityFlywheel):
+
     def __init__(self, params, name="Flywheel"):
         super(Flywheel, self).__init__(params, name=name)
 
@@ -112,6 +115,7 @@
 
 
 class IntegralFlywheel(Flywheel):
+
     def __init__(self, params, name="IntegralFlywheel"):
         super(IntegralFlywheel, self).__init__(params, name=name)
 
@@ -125,7 +129,6 @@
         self.B_continuous = numpy.matrix(numpy.zeros((3, 1)))
         self.B_continuous[0:2, 0] = self.B_continuous_unaugmented
 
-
         # states
         # [position, velocity, voltage_error]
         self.C_unaugmented = self.C
@@ -146,24 +149,26 @@
         q_vel = self.params.q_vel
         q_voltage = self.params.q_voltage
         self.Q_continuous = numpy.matrix([[(q_pos**2.0), 0.0, 0.0],
-                               [0.0, (q_vel**2.0), 0.0],
-                               [0.0, 0.0, (q_voltage**2.0)]])
+                                          [0.0, (q_vel**2.0), 0.0],
+                                          [0.0, 0.0, (q_voltage**2.0)]])
 
         r_pos = self.params.r_pos
         self.R_continuous = numpy.matrix([[(r_pos**2.0)]])
 
-        _, _, self.Q, self.R = controls.kalmd(
-            A_continuous=self.A_continuous,
-            B_continuous=self.B_continuous,
-            Q_continuous=self.Q_continuous,
-            R_continuous=self.R_continuous,
-            dt=self.dt)
+        _, _, self.Q, self.R = controls.kalmd(A_continuous=self.A_continuous,
+                                              B_continuous=self.B_continuous,
+                                              Q_continuous=self.Q_continuous,
+                                              R_continuous=self.R_continuous,
+                                              dt=self.dt)
 
         glog.debug('Q_discrete %s' % (str(self.Q)))
         glog.debug('R_discrete %s' % (str(self.R)))
 
-        self.KalmanGain, self.P_steady_state = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.P_steady_state = controls.kalman(A=self.A,
+                                                               B=self.B,
+                                                               C=self.C,
+                                                               Q=self.Q,
+                                                               R=self.R)
         self.L = self.A * self.KalmanGain
 
         self.K_unaugmented = self.K
@@ -283,34 +288,32 @@
         for index, param in enumerate(params):
             flywheels.append(Flywheel(param, name=param.name + str(index)))
             integral_flywheels.append(
-                IntegralFlywheel(
-                    param, name='Integral' + param.name + str(index)))
+                IntegralFlywheel(param,
+                                 name='Integral' + param.name + str(index)))
     else:
         name = params.name
         flywheels.append(Flywheel(params, params.name))
         integral_flywheels.append(
             IntegralFlywheel(params, name='Integral' + params.name))
 
-    loop_writer = control_loop.ControlLoopWriter(
-        name, flywheels, namespaces=namespace)
+    loop_writer = control_loop.ControlLoopWriter(name,
+                                                 flywheels,
+                                                 namespaces=namespace)
     loop_writer.AddConstant(
-        control_loop.Constant('kOutputRatio', '%f',
-                              flywheels[0].G))
+        control_loop.Constant('kOutputRatio', '%f', flywheels[0].G))
     loop_writer.AddConstant(
         control_loop.Constant('kFreeSpeed', '%f',
                               flywheels[0].motor.free_speed))
     loop_writer.AddConstant(
-        control_loop.Constant(
-            'kBemf',
-            '%f',
-            flywheels[0].motor.Kv * flywheels[0].G,
-            comment="// Radians/sec / volt"))
+        control_loop.Constant('kBemf',
+                              '%f',
+                              flywheels[0].motor.Kv * flywheels[0].G,
+                              comment="// Radians/sec / volt"))
     loop_writer.AddConstant(
-        control_loop.Constant(
-            'kResistance',
-            '%f',
-            flywheels[0].motor.resistance,
-            comment="// Ohms"))
+        control_loop.Constant('kResistance',
+                              '%f',
+                              flywheels[0].motor.resistance,
+                              comment="// Ohms"))
     loop_writer.Write(plant_files[0], plant_files[1])
 
     integral_loop_writer = control_loop.ControlLoopWriter(
diff --git a/y2020/control_loops/python/hood.py b/y2020/control_loops/python/hood.py
index eacb7fd..8125f8b 100644
--- a/y2020/control_loops/python/hood.py
+++ b/y2020/control_loops/python/hood.py
@@ -29,17 +29,17 @@
 
 radians_per_turn_of_motor = 12.0 / 60.0 * radians_per_turn
 
-kHood = angular_system.AngularSystemParams(
-    name='Hood',
-    motor=control_loop.BAG(),
-    G=radians_per_turn_of_motor / (2.0 * numpy.pi),
-    J=0.1,
-    q_pos=0.15,
-    q_vel=10.0,
-    kalman_q_pos=0.12,
-    kalman_q_vel=10.0,
-    kalman_q_voltage=30.0,
-    kalman_r_position=0.02)
+kHood = angular_system.AngularSystemParams(name='Hood',
+                                           motor=control_loop.BAG(),
+                                           G=radians_per_turn_of_motor /
+                                           (2.0 * numpy.pi),
+                                           J=0.1,
+                                           q_pos=0.15,
+                                           q_vel=10.0,
+                                           kalman_q_pos=0.12,
+                                           kalman_q_vel=10.0,
+                                           kalman_q_voltage=30.0,
+                                           kalman_r_position=0.02)
 
 
 def main(argv):
diff --git a/y2020/control_loops/python/intake.py b/y2020/control_loops/python/intake.py
index 1035070..87896dd 100644
--- a/y2020/control_loops/python/intake.py
+++ b/y2020/control_loops/python/intake.py
@@ -17,17 +17,17 @@
 except gflags.DuplicateFlagError:
     pass
 
-kIntake = angular_system.AngularSystemParams(
-    name='Intake',
-    motor=control_loop.BAG(),
-    G=(12.0 / 24.0) * (1.0 / 5.0) * (1.0 / 5.0) * (16.0 / 32.0),
-    J=8 * 0.139 * 0.139,
-    q_pos=0.40,
-    q_vel=20.0,
-    kalman_q_pos=0.12,
-    kalman_q_vel=2.0,
-    kalman_q_voltage=4.0,
-    kalman_r_position=0.05)
+kIntake = angular_system.AngularSystemParams(name='Intake',
+                                             motor=control_loop.BAG(),
+                                             G=(12.0 / 24.0) * (1.0 / 5.0) *
+                                             (1.0 / 5.0) * (16.0 / 32.0),
+                                             J=8 * 0.139 * 0.139,
+                                             q_pos=0.40,
+                                             q_vel=20.0,
+                                             kalman_q_pos=0.12,
+                                             kalman_q_vel=2.0,
+                                             kalman_q_voltage=4.0,
+                                             kalman_r_position=0.05)
 
 
 def main(argv):
diff --git a/y2020/control_loops/python/polydrivetrain.py b/y2020/control_loops/python/polydrivetrain.py
index dad06b0..dbd5268 100644
--- a/y2020/control_loops/python/polydrivetrain.py
+++ b/y2020/control_loops/python/polydrivetrain.py
@@ -12,20 +12,22 @@
 FLAGS = gflags.FLAGS
 
 try:
-  gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 except gflags.DuplicateFlagError:
-  pass
+    pass
+
 
 def main(argv):
-  if FLAGS.plot:
-    polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
-  elif len(argv) != 7:
-    glog.fatal('Expected .h file name and .cc file name')
-  else:
-    polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7], 'y2020',
-                                       drivetrain.kDrivetrain)
+    if FLAGS.plot:
+        polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
+    elif len(argv) != 7:
+        glog.fatal('Expected .h file name and .cc file name')
+    else:
+        polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7],
+                                           'y2020', drivetrain.kDrivetrain)
+
 
 if __name__ == '__main__':
-  argv = FLAGS(sys.argv)
-  glog.init()
-  sys.exit(main(argv))
+    argv = FLAGS(sys.argv)
+    glog.init()
+    sys.exit(main(argv))
diff --git a/y2020/control_loops/python/turret.py b/y2020/control_loops/python/turret.py
index 6f15057..5f77f84 100644
--- a/y2020/control_loops/python/turret.py
+++ b/y2020/control_loops/python/turret.py
@@ -18,17 +18,18 @@
 except gflags.DuplicateFlagError:
     pass
 
-kTurret = angular_system.AngularSystemParams(
-    name='Turret',
-    motor=control_loop.MiniCIM(),
-    G=(26.0 / 150.0) * (14.0 / 60.0) * (20.0 / 60.0),
-    J=0.20,
-    q_pos=0.30,
-    q_vel=4.5,
-    kalman_q_pos=0.12,
-    kalman_q_vel=10.0,
-    kalman_q_voltage=20.0,
-    kalman_r_position=0.05)
+kTurret = angular_system.AngularSystemParams(name='Turret',
+                                             motor=control_loop.MiniCIM(),
+                                             G=(26.0 / 150.0) * (14.0 / 60.0) *
+                                             (20.0 / 60.0),
+                                             J=0.20,
+                                             q_pos=0.30,
+                                             q_vel=4.5,
+                                             kalman_q_pos=0.12,
+                                             kalman_q_vel=10.0,
+                                             kalman_q_voltage=20.0,
+                                             kalman_r_position=0.05)
+
 
 def main(argv):
     if FLAGS.plot:
@@ -38,13 +39,11 @@
 
     # Write the generated constants out to a file.
     if len(argv) != 5:
-        glog.fatal(
-            'Expected .h file name and .cc file name for the turret.'
-        )
+        glog.fatal('Expected .h file name and .cc file name for the turret.')
     else:
         namespaces = ['y2020', 'control_loops', 'superstructure', 'turret']
-        angular_system.WriteAngularSystem([kTurret],
-                                          argv[1:3], argv[3:5], namespaces)
+        angular_system.WriteAngularSystem([kTurret], argv[1:3], argv[3:5],
+                                          namespaces)
 
 
 if __name__ == '__main__':
diff --git a/y2020/vision/galactic_search_config.py b/y2020/vision/galactic_search_config.py
index 90988e3..870e039 100755
--- a/y2020/vision/galactic_search_config.py
+++ b/y2020/vision/galactic_search_config.py
@@ -20,7 +20,7 @@
 import os
 import sys
 
-_num_rects = 3 # can be 3 or 2, can be specified in commang line arg
+_num_rects = 3  # can be 3 or 2, can be specified in commang line arg
 
 _path = Path(Letter.kA, Alliance.kRed, [Rect(None, None, None, None)])
 
@@ -29,20 +29,24 @@
 
 _fig, _img_ax = plt.subplots()
 
-_txt = _img_ax.text(0, 0, "", size = 10, backgroundcolor = "white")
+_txt = _img_ax.text(0, 0, "", size=10, backgroundcolor="white")
 
 _confirm = Button(plt.axes([0.7, 0.05, 0.1, 0.075]), "Confirm")
 _cancel = Button(plt.axes([0.81, 0.05, 0.1, 0.075]), "Cancel")
 _submit = Button(plt.axes([0.4, 0.05, 0.1, 0.1]), "Submit")
 
+
 def draw_txt(txt):
-    txt.set_text("Click on top left point and bottom right point for rect #%u" % (_rect_index + 1))
+    txt.set_text(
+        "Click on top left point and bottom right point for rect #%u" %
+        (_rect_index + 1))
     txt.set_color(_path.alliance.value)
 
 
 def on_confirm(event):
     global _rect_index
-    if _path.rects[_rect_index].x1 != None and _path.rects[_rect_index].x2 != None:
+    if _path.rects[_rect_index].x1 != None and _path.rects[
+            _rect_index].x2 != None:
         _confirm.ax.set_visible(False)
         _cancel.ax.set_visible(False)
         _rect_index += 1
@@ -54,6 +58,7 @@
             _path.rects.append(Rect(None, None, None, None))
         plt.show()
 
+
 def on_cancel(event):
     global _rect_index
     if _rect_index < _num_rects:
@@ -66,6 +71,7 @@
         _path.rects[_rect_index].y2 = None
         plt.show()
 
+
 def on_submit(event):
     plt.close("all")
     dict = None
@@ -74,9 +80,12 @@
         dict[_path.letter.name] = {}
     if _path.alliance.name not in dict[_path.letter.name]:
         dict[_path.letter.name][_path.alliance.name] = []
-    dict[_path.letter.name][_path.alliance.name] = [rect.to_list() for rect in _path.rects]
+    dict[_path.letter.name][_path.alliance.name] = [
+        rect.to_list() for rect in _path.rects
+    ]
     with open(RECTS_JSON_PATH, 'w') as rects_json:
-        json.dump(dict, rects_json, indent = 2)
+        json.dump(dict, rects_json, indent=2)
+
 
 # Clears rect on screen
 def clear_rect():
@@ -85,6 +94,7 @@
     else:
         _img_ax.patches[-1].remove()
 
+
 def on_click(event):
     # This gets called for each click of the rectangle corners,
     # but also gets called when the user clicks on the Submit button.
@@ -94,9 +104,11 @@
     # the bounds of the axis
     if _rect_index < _num_rects and event.xdata != None and event.ydata != None:
         if _path.rects[_rect_index].x1 == None:
-            _path.rects[_rect_index].x1, _path.rects[_rect_index].y1 = int(event.xdata), int(event.ydata)
+            _path.rects[_rect_index].x1, _path.rects[_rect_index].y1 = int(
+                event.xdata), int(event.ydata)
         elif _path.rects[_rect_index].x2 == None:
-            _path.rects[_rect_index].x2, _path.rects[_rect_index].y2 = int(event.xdata), int(event.ydata)
+            _path.rects[_rect_index].x2, _path.rects[_rect_index].y2 = int(
+                event.xdata), int(event.ydata)
             if _path.rects[_rect_index].x2 < _path.rects[_rect_index].x1:
                 tmp = _path.rects[_rect_index].x1
                 _path.rects[_rect_index].x1 = _path.rects[_rect_index].x2
@@ -106,20 +118,27 @@
                 _path.rects[_rect_index].y1 = _path.rects[_rect_index].y2
                 _path.rects[_rect_index].y2 = tmp
 
-            _img_ax.add_patch(patches.Rectangle((_path.rects[_rect_index].x1, _path.rects[_rect_index].y1),
-                _path.rects[_rect_index].x2 - _path.rects[_rect_index].x1,
-                _path.rects[_rect_index].y2 - _path.rects[_rect_index].y1,
-                edgecolor = 'r', linewidth = 1, facecolor="none"))
+            _img_ax.add_patch(
+                patches.Rectangle(
+                    (_path.rects[_rect_index].x1, _path.rects[_rect_index].y1),
+                    _path.rects[_rect_index].x2 - _path.rects[_rect_index].x1,
+                    _path.rects[_rect_index].y2 - _path.rects[_rect_index].y1,
+                    edgecolor='r',
+                    linewidth=1,
+                    facecolor="none"))
             _confirm.ax.set_visible(True)
             _cancel.ax.set_visible(True)
             plt.show()
     else:
-        glog.info("Either submitted or user pressed out of the bounds of the axis")
+        glog.info(
+            "Either submitted or user pressed out of the bounds of the axis")
+
 
 def setup_button(button, on_clicked):
     button.on_clicked(on_clicked)
     button.ax.set_visible(False)
 
+
 def setup_ui():
     _img_ax.imshow(capture_img())
     release_stream()
@@ -131,11 +150,12 @@
     draw_txt(_txt)
     plt.show()
 
+
 def view_rects():
 
     rects_dict = load_json()
-    if (_path.letter.name in rects_dict and
-        _path.alliance.name in rects_dict[_path.letter.name]):
+    if (_path.letter.name in rects_dict
+            and _path.alliance.name in rects_dict[_path.letter.name]):
         _confirm.ax.set_visible(False)
         _cancel.ax.set_visible(False)
         _submit.ax.set_visible(False)
@@ -143,20 +163,26 @@
 
         for rect_list in rects_dict[_path.letter.name][_path.alliance.name]:
             rect = Rect.from_list(rect_list)
-            _img_ax.add_patch(patches.Rectangle((rect.x1, rect.y1),
-                rect.x2 - rect.x1, rect.y2 - rect.y1,
-                edgecolor = 'r', linewidth = 1, facecolor="none"))
+            _img_ax.add_patch(
+                patches.Rectangle((rect.x1, rect.y1),
+                                  rect.x2 - rect.x1,
+                                  rect.y2 - rect.y1,
+                                  edgecolor='r',
+                                  linewidth=1,
+                                  facecolor="none"))
         plt.show()
     else:
         glog.error("Could not find path %s %s in rects.json",
-            _path.alliance.value, _path.letter.value)
+                   _path.alliance.value, _path.letter.value)
+
 
 def main(argv):
     global _num_rects
 
     glog.setLevel("INFO")
-    opts = getopt.getopt(argv[1 : ], "a:l:n:",
-                        ["alliance = ", "letter = ", "_num_rects = ", "view"])[0]
+    opts = getopt.getopt(
+        argv[1:], "a:l:n:",
+        ["alliance = ", "letter = ", "_num_rects = ", "view"])[0]
     view = False
     for opt, arg in opts:
         if opt in ["-a", "--alliance"]:
diff --git a/y2020/vision/galactic_search_path.py b/y2020/vision/galactic_search_path.py
index 00b572a..11ec73d 100755
--- a/y2020/vision/galactic_search_path.py
+++ b/y2020/vision/galactic_search_path.py
@@ -8,6 +8,7 @@
 import numpy as np
 import os
 
+
 class Rect:
 
     # x1 and y1 are top left corner, x2 and y2 are bottom right
@@ -41,11 +42,14 @@
 
     @staticmethod
     def from_value(value):
-        return (Alliance.kRed if value == Alliance.kRed.value else Alliance.kBlue)
+        return (Alliance.kRed
+                if value == Alliance.kRed.value else Alliance.kBlue)
 
     @staticmethod
     def from_name(name):
-        return (Alliance.kRed if name == Alliance.kRed.name else Alliance.kBlue)
+        return (Alliance.kRed
+                if name == Alliance.kRed.name else Alliance.kBlue)
+
 
 class Letter(Enum):
     kA = 'A'
@@ -59,6 +63,7 @@
     def from_name(name):
         return (Letter.kA if name == Letter.kA.name else Letter.kB)
 
+
 class Path:
 
     def __init__(self, letter, alliance, rects):
@@ -72,15 +77,18 @@
     def to_dict(self):
         return {"alliance": self.alliance.name, "letter": self.letter.name}
 
+
 RECTS_JSON_PATH = "rects.json"
 
 AOS_SEND_PATH = "bazel-bin/aos/aos_send"
 
+
 def setup_if_pi():
     if os.path.isdir("/home/pi/bin"):
         AOS_SEND_PATH = "/home/pi/bin/aos_send.stripped"
         os.system("./starter_cmd stop camera_reader")
 
+
 setup_if_pi()
 
 # The minimum percentage of yellow for a region of a image to
@@ -89,12 +97,14 @@
 
 _paths = []
 
+
 def load_json():
     rects_dict = None
     with open(RECTS_JSON_PATH, 'r') as rects_json:
         rects_dict = json.load(rects_json)
     return rects_dict
 
+
 def _run_detection_loop():
     global img_fig, rects_dict
 
@@ -104,7 +114,9 @@
             rects = []
             for rect_list in rects_dict[letter][alliance]:
                 rects.append(Rect.from_list(rect_list))
-            _paths.append(Path(Letter.from_name(letter), Alliance.from_name(alliance), rects))
+            _paths.append(
+                Path(Letter.from_name(letter), Alliance.from_name(alliance),
+                     rects))
 
     plt.ion()
     img_fig = plt.figure()
@@ -113,6 +125,7 @@
     while running:
         _detect_path()
 
+
 def _detect_path():
     img = capture_img()
     img_fig.figimage(img)
@@ -138,7 +151,8 @@
                 current_path = path
                 num_current_paths += 1
         else:
-            glog.error("Error: len of pcts (%u) != len of rects: (%u)", len(pcts), len(rects))
+            glog.error("Error: len of pcts (%u) != len of rects: (%u)",
+                       len(pcts), len(rects))
 
     if num_current_paths != 1:
         if num_current_paths == 0:
@@ -147,24 +161,27 @@
         glog.warn("Expected 1 path but detected %u", num_current_paths)
         return
 
-
     path_dict = current_path.to_dict()
     glog.info("Path is %s", path_dict)
     os.system(AOS_SEND_PATH +
-              " /pi2/camera y2020.vision.GalacticSearchPath '" + json.dumps(path_dict) + "'")
+              " /pi2/camera y2020.vision.GalacticSearchPath '" +
+              json.dumps(path_dict) + "'")
+
 
 KERNEL = np.ones((5, 5), np.uint8)
 
+
 def _create_mask(img):
     hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
-    lower_yellow = np.array([23, 100, 75], dtype = np.uint8)
-    higher_yellow = np.array([40, 255, 255], dtype = np.uint8)
+    lower_yellow = np.array([23, 100, 75], dtype=np.uint8)
+    higher_yellow = np.array([40, 255, 255], dtype=np.uint8)
     mask = cv.inRange(hsv, lower_yellow, higher_yellow)
-    mask = cv.erode(mask, KERNEL, iterations = 1)
-    mask = cv.dilate(mask, KERNEL, iterations = 3)
+    mask = cv.erode(mask, KERNEL, iterations=1)
+    mask = cv.dilate(mask, KERNEL, iterations=3)
 
     return mask
 
+
 # This function finds the percentage of yellow pixels in the rectangles
 # given that are regions of the given image. This allows us to determine
 # whether there is a ball in those rectangles
@@ -172,25 +189,30 @@
     pcts = np.zeros(len(rects))
     for i in range(len(rects)):
         rect = rects[i]
-        slice = mask[rect.y1 : rect.y2, rect.x1 : rect.x2]
+        slice = mask[rect.y1:rect.y2, rect.x1:rect.x2]
         yellow_px = np.count_nonzero(slice)
         pcts[i] = yellow_px / (slice.shape[0] * slice.shape[1])
 
     return pcts
 
+
 _video_stream = cv.VideoCapture(0)
 
+
 def capture_img():
     global _video_stream
     return _video_stream.read()[1]
 
+
 def release_stream():
     global _video_stream
     _video_stream.release()
 
+
 def main():
     _run_detection_loop()
     release_stream()
 
+
 if __name__ == "__main__":
     main()
diff --git a/y2020/vision/sift/demo_sift_training.py b/y2020/vision/sift/demo_sift_training.py
index 67874c9..4e9c306 100644
--- a/y2020/vision/sift/demo_sift_training.py
+++ b/y2020/vision/sift/demo_sift_training.py
@@ -8,87 +8,89 @@
 import frc971.vision.sift.TrainingData as TrainingData
 import frc971.vision.sift.Feature as Feature
 
+
 def main():
-  image4_cleaned_path = sys.argv[1]
-  output_path = sys.argv[2]
+    image4_cleaned_path = sys.argv[1]
+    output_path = sys.argv[2]
 
-  image4_cleaned = cv2.imread(image4_cleaned_path)
+    image4_cleaned = cv2.imread(image4_cleaned_path)
 
-  image = cv2.cvtColor(image4_cleaned, cv2.COLOR_BGR2GRAY)
-  image = cv2.resize(image, (640, 480))
-  sift = cv2.SIFT_create()
-  keypoints, descriptors = sift.detectAndCompute(image, None)
+    image = cv2.cvtColor(image4_cleaned, cv2.COLOR_BGR2GRAY)
+    image = cv2.resize(image, (640, 480))
+    sift = cv2.SIFT_create()
+    keypoints, descriptors = sift.detectAndCompute(image, None)
 
-  fbb = flatbuffers.Builder(0)
+    fbb = flatbuffers.Builder(0)
 
-  features_vector = []
+    features_vector = []
 
-  for keypoint, descriptor in zip(keypoints, descriptors):
-    Feature.FeatureStartDescriptorVector(fbb, len(descriptor))
-    for n in reversed(descriptor):
-      assert n == round(n)
-      fbb.PrependUint8(int(round(n)))
-    descriptor_vector = fbb.EndVector()
+    for keypoint, descriptor in zip(keypoints, descriptors):
+        Feature.FeatureStartDescriptorVector(fbb, len(descriptor))
+        for n in reversed(descriptor):
+            assert n == round(n)
+            fbb.PrependUint8(int(round(n)))
+        descriptor_vector = fbb.EndVector()
 
-    Feature.FeatureStart(fbb)
+        Feature.FeatureStart(fbb)
 
-    Feature.FeatureAddDescriptor(fbb, descriptor_vector)
-    Feature.FeatureAddX(fbb, keypoint.pt[0])
-    Feature.FeatureAddY(fbb, keypoint.pt[1])
-    Feature.FeatureAddSize(fbb, keypoint.size)
-    Feature.FeatureAddAngle(fbb, keypoint.angle)
-    Feature.FeatureAddResponse(fbb, keypoint.response)
-    Feature.FeatureAddOctave(fbb, keypoint.octave)
+        Feature.FeatureAddDescriptor(fbb, descriptor_vector)
+        Feature.FeatureAddX(fbb, keypoint.pt[0])
+        Feature.FeatureAddY(fbb, keypoint.pt[1])
+        Feature.FeatureAddSize(fbb, keypoint.size)
+        Feature.FeatureAddAngle(fbb, keypoint.angle)
+        Feature.FeatureAddResponse(fbb, keypoint.response)
+        Feature.FeatureAddOctave(fbb, keypoint.octave)
 
-    features_vector.append(Feature.FeatureEnd(fbb))
+        features_vector.append(Feature.FeatureEnd(fbb))
 
-  TrainingImage.TrainingImageStartFeaturesVector(fbb, len(features_vector))
-  for feature in reversed(features_vector):
-    fbb.PrependUOffsetTRelative(feature)
-  features_vector_table = fbb.EndVector()
+    TrainingImage.TrainingImageStartFeaturesVector(fbb, len(features_vector))
+    for feature in reversed(features_vector):
+        fbb.PrependUOffsetTRelative(feature)
+    features_vector_table = fbb.EndVector()
 
-  TrainingImage.TrainingImageStart(fbb)
-  TrainingImage.TrainingImageAddFeatures(fbb, features_vector_table)
-  # TODO(Brian): Fill out the transformation matrices.
-  training_image_offset = TrainingImage.TrainingImageEnd(fbb)
+    TrainingImage.TrainingImageStart(fbb)
+    TrainingImage.TrainingImageAddFeatures(fbb, features_vector_table)
+    # TODO(Brian): Fill out the transformation matrices.
+    training_image_offset = TrainingImage.TrainingImageEnd(fbb)
 
-  TrainingData.TrainingDataStartImagesVector(fbb, 1)
-  fbb.PrependUOffsetTRelative(training_image_offset)
-  images_offset = fbb.EndVector()
+    TrainingData.TrainingDataStartImagesVector(fbb, 1)
+    fbb.PrependUOffsetTRelative(training_image_offset)
+    images_offset = fbb.EndVector()
 
-  TrainingData.TrainingDataStart(fbb)
-  TrainingData.TrainingDataAddImages(fbb, images_offset)
-  fbb.Finish(TrainingData.TrainingDataEnd(fbb))
+    TrainingData.TrainingDataStart(fbb)
+    TrainingData.TrainingDataAddImages(fbb, images_offset)
+    fbb.Finish(TrainingData.TrainingDataEnd(fbb))
 
-  bfbs = fbb.Output()
+    bfbs = fbb.Output()
 
-  output_prefix = [
-      b'#ifndef Y2020_VISION_SIFT_DEMO_SIFT_H_',
-      b'#define Y2020_VISION_SIFT_DEMO_SIFT_H_',
-      b'#include <string_view>',
-      b'namespace frc971 {',
-      b'namespace vision {',
-      b'inline std::string_view DemoSiftData() {',
-  ]
-  output_suffix = [
-      b'  return std::string_view(kData, sizeof(kData));',
-      b'}',
-      b'}  // namespace vision',
-      b'}  // namespace frc971',
-      b'#endif  // Y2020_VISION_SIFT_DEMO_SIFT_H_',
-  ]
+    output_prefix = [
+        b'#ifndef Y2020_VISION_SIFT_DEMO_SIFT_H_',
+        b'#define Y2020_VISION_SIFT_DEMO_SIFT_H_',
+        b'#include <string_view>',
+        b'namespace frc971 {',
+        b'namespace vision {',
+        b'inline std::string_view DemoSiftData() {',
+    ]
+    output_suffix = [
+        b'  return std::string_view(kData, sizeof(kData));',
+        b'}',
+        b'}  // namespace vision',
+        b'}  // namespace frc971',
+        b'#endif  // Y2020_VISION_SIFT_DEMO_SIFT_H_',
+    ]
 
-  with open(output_path, 'wb') as output:
-    for line in output_prefix:
-      output.write(line)
-      output.write(b'\n')
-    output.write(b'alignas(64) static constexpr char kData[] = "')
-    for byte in fbb.Output():
-      output.write(b'\\x' + (b'%x' % byte).zfill(2))
-    output.write(b'";\n')
-    for line in output_suffix:
-      output.write(line)
-      output.write(b'\n')
+    with open(output_path, 'wb') as output:
+        for line in output_prefix:
+            output.write(line)
+            output.write(b'\n')
+        output.write(b'alignas(64) static constexpr char kData[] = "')
+        for byte in fbb.Output():
+            output.write(b'\\x' + (b'%x' % byte).zfill(2))
+        output.write(b'";\n')
+        for line in output_suffix:
+            output.write(line)
+            output.write(b'\n')
+
 
 if __name__ == '__main__':
-  main()
+    main()
diff --git a/y2020/vision/sift/fast_gaussian_runner.py b/y2020/vision/sift/fast_gaussian_runner.py
index d812f3f..9767300 100755
--- a/y2020/vision/sift/fast_gaussian_runner.py
+++ b/y2020/vision/sift/fast_gaussian_runner.py
@@ -8,190 +8,211 @@
 
 from bazel_tools.tools.python.runfiles import runfiles
 
+
 def main(params):
-  r = runfiles.Create()
-  generator = r.Rlocation('org_frc971/y2020/vision/sift/fast_gaussian_generator')
+    r = runfiles.Create()
+    generator = r.Rlocation(
+        'org_frc971/y2020/vision/sift/fast_gaussian_generator')
 
-  ruledir = sys.argv[2]
-  target_cpu = sys.argv[3]
+    ruledir = sys.argv[2]
+    target_cpu = sys.argv[3]
 
-  target = {
-      'aarch64': 'arm-64-linux-no_asserts',
-      'armv7': 'arm-32-linux-no_asserts',
-      'k8': 'x86-64-linux-no_asserts',
-  }[target_cpu]
+    target = {
+        'aarch64': 'arm-64-linux-no_asserts',
+        'armv7': 'arm-32-linux-no_asserts',
+        'k8': 'x86-64-linux-no_asserts',
+    }[target_cpu]
 
-  commands = []
+    commands = []
 
-  amd64_debian_sysroot = r.Rlocation('amd64_debian_sysroot/usr/lib/x86_64-linux-gnu/libc.so.6').rsplit('/', 4)[0]
-  env = os.environ.copy()
-  env['LD_LIBRARY_PATH'] = ':'.join([
-      # TODO(brian): Figure this out again.  It is a bit aggressive.
-      #amd64_debian_sysroot + '/lib/x86_64-linux-gnu',
-      #amd64_debian_sysroot + '/lib',
-      #amd64_debian_sysroot + '/usr/lib/x86_64-linux-gnu',
-      #amd64_debian_sysroot + '/usr/lib',
-  ])
+    amd64_debian_sysroot = r.Rlocation(
+        'amd64_debian_sysroot/usr/lib/x86_64-linux-gnu/libc.so.6').rsplit(
+            '/', 4)[0]
+    env = os.environ.copy()
+    env['LD_LIBRARY_PATH'] = ':'.join([
+        # TODO(brian): Figure this out again.  It is a bit aggressive.
+        #amd64_debian_sysroot + '/lib/x86_64-linux-gnu',
+        #amd64_debian_sysroot + '/lib',
+        #amd64_debian_sysroot + '/usr/lib/x86_64-linux-gnu',
+        #amd64_debian_sysroot + '/usr/lib',
+    ])
 
-  all_header = [
-      '#ifndef Y2020_VISION_SIFT_FAST_GAUSSIAN_ALL_H_',
-      '#define Y2020_VISION_SIFT_FAST_GAUSSIAN_ALL_H_',
-      '#include "HalideBuffer.h"',
-  ]
+    all_header = [
+        '#ifndef Y2020_VISION_SIFT_FAST_GAUSSIAN_ALL_H_',
+        '#define Y2020_VISION_SIFT_FAST_GAUSSIAN_ALL_H_',
+        '#include "HalideBuffer.h"',
+    ]
 
-  for cols, rows in params['sizes']:
-    for sigma, sigma_name, filter_width in params['sigmas']:
-      name = "fast_gaussian_%dx%d_%s" % (cols, rows, sigma_name)
+    for cols, rows in params['sizes']:
+        for sigma, sigma_name, filter_width in params['sigmas']:
+            name = "fast_gaussian_%dx%d_%s" % (cols, rows, sigma_name)
 
-      commands.append([
-          generator,
-          '-g', 'gaussian_generator',
-          '-o', ruledir,
-          '-f', name,
-          '-e', 'o,h,html',
-          'target=%s-no_runtime' % target,
-          'cols=%s' % cols,
-          'rows=%s' % rows,
-          'sigma=%s' % sigma,
-          'filter_width=%s' % filter_width,
-      ])
-      all_header += [
-          '#include "y2020/vision/sift/%s.h"' % name,
-      ]
+            commands.append([
+                generator,
+                '-g',
+                'gaussian_generator',
+                '-o',
+                ruledir,
+                '-f',
+                name,
+                '-e',
+                'o,h,html',
+                'target=%s-no_runtime' % target,
+                'cols=%s' % cols,
+                'rows=%s' % rows,
+                'sigma=%s' % sigma,
+                'filter_width=%s' % filter_width,
+            ])
+            all_header += [
+                '#include "y2020/vision/sift/%s.h"' % name,
+            ]
 
-      name = "fast_gaussian_subtract_%dx%d_%s" % (cols, rows, sigma_name)
+            name = "fast_gaussian_subtract_%dx%d_%s" % (cols, rows, sigma_name)
 
-      commands.append([
-          generator,
-          '-g', 'gaussian_and_subtract_generator',
-          '-o', ruledir,
-          '-f', name,
-          '-e', 'o,h,html',
-          'target=%s-no_runtime' % target,
-          'cols=%s' % cols,
-          'rows=%s' % rows,
-          'sigma=%s' % sigma,
-          'filter_width=%s' % filter_width,
-      ])
-      all_header += [
-          '#include "y2020/vision/sift/%s.h"' % name,
-      ]
+            commands.append([
+                generator,
+                '-g',
+                'gaussian_and_subtract_generator',
+                '-o',
+                ruledir,
+                '-f',
+                name,
+                '-e',
+                'o,h,html',
+                'target=%s-no_runtime' % target,
+                'cols=%s' % cols,
+                'rows=%s' % rows,
+                'sigma=%s' % sigma,
+                'filter_width=%s' % filter_width,
+            ])
+            all_header += [
+                '#include "y2020/vision/sift/%s.h"' % name,
+            ]
 
-    name = 'fast_subtract_%dx%d' % (cols, rows)
+        name = 'fast_subtract_%dx%d' % (cols, rows)
+        commands.append([
+            generator,
+            '-g',
+            'subtract_generator',
+            '-o',
+            ruledir,
+            '-f',
+            name,
+            '-e',
+            'o,h,html',
+            'target=%s-no_runtime' % target,
+            'cols=%s' % cols,
+            'rows=%s' % rows,
+        ])
+        all_header += [
+            '#include "y2020/vision/sift/%s.h"' % name,
+        ]
     commands.append([
         generator,
-        '-g', 'subtract_generator',
-        '-o', ruledir,
-        '-f', name,
-        '-e', 'o,h,html',
-        'target=%s-no_runtime' % target,
-        'cols=%s' % cols,
-        'rows=%s' % rows,
+        '-r',
+        'fast_gaussian_runtime',
+        '-o',
+        ruledir,
+        '-e',
+        'o',
+        'target=%s' % target,
     ])
+
     all_header += [
-        '#include "y2020/vision/sift/%s.h"' % name,
+        'namespace frc971 {',
+        'namespace vision {',
+        '// 0 is success. 1 is non-implemented size. Negative is a Halide error.',
+        'inline int DoGeneratedFastGaussian(',
+        '    Halide::Runtime::Buffer<const int16_t, 2> input,',
+        '    Halide::Runtime::Buffer<int16_t, 2> output,',
+        '    double sigma) {',
     ]
-  commands.append([
-      generator,
-      '-r', 'fast_gaussian_runtime',
-      '-o', ruledir,
-      '-e', 'o',
-      'target=%s' % target,
-  ])
 
-  all_header += [
-      'namespace frc971 {',
-      'namespace vision {',
-      '// 0 is success. 1 is non-implemented size. Negative is a Halide error.',
-      'inline int DoGeneratedFastGaussian(',
-      '    Halide::Runtime::Buffer<const int16_t, 2> input,',
-      '    Halide::Runtime::Buffer<int16_t, 2> output,',
-      '    double sigma) {',
-  ]
+    for sigma, sigma_name, filter_width in params['sigmas']:
+        for cols, rows in params['sizes']:
+            name = "fast_gaussian_%dx%d_%s" % (cols, rows, sigma_name)
+            all_header += [
+                '  if (input.dim(0).extent() == %s' % cols,
+                '      && input.dim(1).extent() == %s' % rows,
+                '      && sigma == %s) {' % sigma,
+                '    return %s(input, output);' % name,
+                '  }',
+            ]
 
-  for sigma, sigma_name, filter_width in params['sigmas']:
-    for cols, rows in params['sizes']:
-      name = "fast_gaussian_%dx%d_%s" % (cols, rows, sigma_name)
-      all_header += [
-          '  if (input.dim(0).extent() == %s' % cols,
-          '      && input.dim(1).extent() == %s' % rows,
-          '      && sigma == %s) {' % sigma,
-          '    return %s(input, output);' % name,
-          '  }',
-      ]
-
-  all_header += [
-      '  return 1;',
-      '}',
-      'inline int DoGeneratedFastGaussianAndSubtract(',
-      '    Halide::Runtime::Buffer<const int16_t, 2> input,',
-      '    Halide::Runtime::Buffer<int16_t, 2> blurred,',
-      '    Halide::Runtime::Buffer<int16_t, 2> difference,',
-      '    double sigma) {',
-  ]
-
-  for sigma, sigma_name, filter_width in params['sigmas']:
-    for cols, rows in params['sizes']:
-      name = "fast_gaussian_subtract_%dx%d_%s" % (cols, rows, sigma_name)
-      all_header += [
-          '  if (input.dim(0).extent() == %s' % cols,
-          '      && input.dim(1).extent() == %s' % rows,
-          '      && sigma == %s) {' % sigma,
-          '    return %s(input, blurred, difference);' % name,
-          '  }',
-      ]
-
-  all_header += [
-      '  return 1;',
-      '}',
-      'inline int DoGeneratedFastSubtract('
-      '    Halide::Runtime::Buffer<const int16_t, 2> input_a,',
-      '    Halide::Runtime::Buffer<const int16_t, 2> input_b,',
-      '    Halide::Runtime::Buffer<int16_t, 2> output) {',
-  ]
-  for cols, rows in params['sizes']:
-    name = 'fast_subtract_%dx%d' % (cols, rows)
     all_header += [
-        '  if (input_a.dim(0).extent() == %s' % cols,
-        '      && input_a.dim(1).extent() == %s) {' % rows,
-        '    return %s(input_a, input_b, output);' % name,
-        '  }',
+        '  return 1;',
+        '}',
+        'inline int DoGeneratedFastGaussianAndSubtract(',
+        '    Halide::Runtime::Buffer<const int16_t, 2> input,',
+        '    Halide::Runtime::Buffer<int16_t, 2> blurred,',
+        '    Halide::Runtime::Buffer<int16_t, 2> difference,',
+        '    double sigma) {',
     ]
-  all_header += [
-      '  return 1;',
-      '}',
-      '}  // namespace vision',
-      '}  // namespace frc971',
-      '#endif  // Y2020_VISION_SIFT_FAST_GAUSSIAN_ALL_H_',
-  ]
 
-  with open(os.path.join(ruledir, 'fast_gaussian_all.h'), 'w') as f:
-    f.writelines([line + '\n' for line in all_header])
+    for sigma, sigma_name, filter_width in params['sigmas']:
+        for cols, rows in params['sizes']:
+            name = "fast_gaussian_subtract_%dx%d_%s" % (cols, rows, sigma_name)
+            all_header += [
+                '  if (input.dim(0).extent() == %s' % cols,
+                '      && input.dim(1).extent() == %s' % rows,
+                '      && sigma == %s) {' % sigma,
+                '    return %s(input, blurred, difference);' % name,
+                '  }',
+            ]
 
-  commands_lock = threading.Lock()
-  success = [True]
+    all_header += [
+        '  return 1;',
+        '}',
+        'inline int DoGeneratedFastSubtract('
+        '    Halide::Runtime::Buffer<const int16_t, 2> input_a,',
+        '    Halide::Runtime::Buffer<const int16_t, 2> input_b,',
+        '    Halide::Runtime::Buffer<int16_t, 2> output) {',
+    ]
+    for cols, rows in params['sizes']:
+        name = 'fast_subtract_%dx%d' % (cols, rows)
+        all_header += [
+            '  if (input_a.dim(0).extent() == %s' % cols,
+            '      && input_a.dim(1).extent() == %s) {' % rows,
+            '    return %s(input_a, input_b, output);' % name,
+            '  }',
+        ]
+    all_header += [
+        '  return 1;',
+        '}',
+        '}  // namespace vision',
+        '}  // namespace frc971',
+        '#endif  // Y2020_VISION_SIFT_FAST_GAUSSIAN_ALL_H_',
+    ]
 
-  def run_commands():
-    while True:
-      with commands_lock:
-        if not commands:
-          return
-        if not success[0]:
-          return
-        command = commands.pop()
-      try:
-        subprocess.check_call(command, env=env)
-      except:
-        with commands_lock:
-          success[0] = False
-        raise
-  threads = [threading.Thread(target=run_commands) for _ in range(4)]
-  for thread in threads:
-    thread.start()
-  for thread in threads:
-    thread.join()
-  if not success[0]:
-    sys.exit(1)
+    with open(os.path.join(ruledir, 'fast_gaussian_all.h'), 'w') as f:
+        f.writelines([line + '\n' for line in all_header])
+
+    commands_lock = threading.Lock()
+    success = [True]
+
+    def run_commands():
+        while True:
+            with commands_lock:
+                if not commands:
+                    return
+                if not success[0]:
+                    return
+                command = commands.pop()
+            try:
+                subprocess.check_call(command, env=env)
+            except:
+                with commands_lock:
+                    success[0] = False
+                raise
+
+    threads = [threading.Thread(target=run_commands) for _ in range(4)]
+    for thread in threads:
+        thread.start()
+    for thread in threads:
+        thread.join()
+    if not success[0]:
+        sys.exit(1)
+
 
 if __name__ == '__main__':
-  main(json.loads(sys.argv[1]))
+    main(json.loads(sys.argv[1]))
diff --git a/y2020/vision/tools/python_code/calibrate_intrinsics.py b/y2020/vision/tools/python_code/calibrate_intrinsics.py
index fb95599..46c275c 100644
--- a/y2020/vision/tools/python_code/calibrate_intrinsics.py
+++ b/y2020/vision/tools/python_code/calibrate_intrinsics.py
@@ -10,6 +10,7 @@
 
 # From: https://pynative.com/python-serialize-numpy-ndarray-into-json/
 class NumpyArrayEncoder(json.JSONEncoder):
+
     def default(self, obj):
         if isinstance(obj, np.integer):
             return int(obj)
@@ -24,8 +25,8 @@
 def get_robot_info(hostname):
     hostname_split = hostname.split("-")
     if hostname_split[0] != "pi":
-        print(
-            "ERROR: expected hostname to start with pi!  Got '%s'" % hostname)
+        print("ERROR: expected hostname to start with pi!  Got '%s'" %
+              hostname)
         quit()
 
     team_number = int(hostname_split[1])
diff --git a/y2020/vision/tools/python_code/camera_definition.py b/y2020/vision/tools/python_code/camera_definition.py
index 3e3623d..50e3ea4 100644
--- a/y2020/vision/tools/python_code/camera_definition.py
+++ b/y2020/vision/tools/python_code/camera_definition.py
@@ -11,6 +11,7 @@
 
 
 class CameraIntrinsics:
+
     def __init__(self):
         self.camera_matrix = []
         self.dist_coeffs = []
@@ -19,12 +20,14 @@
 
 
 class CameraExtrinsics:
+
     def __init__(self):
         self.R = []
         self.T = []
 
 
 class CameraParameters:
+
     def __init__(self):
         self.camera_int = CameraIntrinsics()
         self.camera_ext = CameraExtrinsics()
diff --git a/y2020/vision/tools/python_code/define_training_data.py b/y2020/vision/tools/python_code/define_training_data.py
index 76e73da..0435f95 100644
--- a/y2020/vision/tools/python_code/define_training_data.py
+++ b/y2020/vision/tools/python_code/define_training_data.py
@@ -28,8 +28,10 @@
         image = cv2.circle(image, (point[0], point[1]), 5, (255, 0, 0), -1)
     if (len(polygon) > 1):
         np_poly = np.array(polygon)
-        image = cv2.polylines(
-            image, [np_poly], close_polygon, color, thickness=3)
+        image = cv2.polylines(image, [np_poly],
+                              close_polygon,
+                              color,
+                              thickness=3)
     return image
 
 
@@ -249,7 +251,8 @@
     try:
         from bazel_tools.tools.python.runfiles import runfiles
         r = runfiles.Create()
-        ret_name = r.Rlocation('org_frc971/y2020/vision/tools/python_code/' + filename)
+        ret_name = r.Rlocation('org_frc971/y2020/vision/tools/python_code/' +
+                               filename)
     except:
         pass
 
diff --git a/y2020/vision/tools/python_code/target_definition.py b/y2020/vision/tools/python_code/target_definition.py
index 0266997..a3aea4c 100644
--- a/y2020/vision/tools/python_code/target_definition.py
+++ b/y2020/vision/tools/python_code/target_definition.py
@@ -22,6 +22,7 @@
 
 
 class TargetData:
+
     def __init__(self, filename=None):
         if filename:
             self.image_filename = dtd.bazel_name_fix(filename)
diff --git a/y2020/vision/tools/python_code/transform_projection_test.py b/y2020/vision/tools/python_code/transform_projection_test.py
index 01fe695..166b5ec 100644
--- a/y2020/vision/tools/python_code/transform_projection_test.py
+++ b/y2020/vision/tools/python_code/transform_projection_test.py
@@ -23,10 +23,12 @@
 
 # Create fake set of points relative to camera capture (target) frame
 # at +/- 1 meter in x, 5 meter depth, and every 1 meter in y from 0 to 4m (above the camera, so negative y values)
-pts_3d_target = np.array(
-    [[-1., 0., depth], [1., 0., depth], [-1., -1., depth], [1., -1., depth],
-     [-1., -2., depth], [0., -2., depth], [1., -2., depth], [-1., -3., depth],
-     [1., -3., depth], [-1., -4., depth], [1., -4., depth]])
+pts_3d_target = np.array([[-1., 0., depth], [1., 0., depth], [-1., -1., depth],
+                          [1., -1., depth], [-1., -2.,
+                                             depth], [0., -2., depth],
+                          [1., -2., depth], [-1., -3.,
+                                             depth], [1., -3., depth],
+                          [-1., -4., depth], [1., -4., depth]])
 
 # Ground truth shift of camera from (cam) to (cam2), to compute projections
 R_cam_cam2_gt = np.array([[0., 0.2, 0.2]]).T
@@ -46,9 +48,10 @@
 #pts_proj_3d = cam_mat.dot(pts_3d_target_shifted.T).T
 #pts_proj_2d = np.divide(pts_proj_3d[:,0:2],(pts_proj_3d[:,2].reshape(-1,1)))
 
-pts_proj_2d_cam2, jac_2d = cv2.projectPoints(
-    pts_3d_target, R_cam_cam2_gt_mat_inv, T_cam_cam2_gt_inv, cam_mat,
-    dist_coeffs)
+pts_proj_2d_cam2, jac_2d = cv2.projectPoints(pts_3d_target,
+                                             R_cam_cam2_gt_mat_inv,
+                                             T_cam_cam2_gt_inv, cam_mat,
+                                             dist_coeffs)
 
 # Now, solve for the pose using the original 3d points (pts_3d_T_t) and the projections from the new location
 retval, R_cam2_cam_est, T_cam2_cam_est, inliers = cv2.solvePnPRansac(
diff --git a/y2021_bot3/control_loops/python/drivetrain.py b/y2021_bot3/control_loops/python/drivetrain.py
index fdd08c2..f3d4682 100644
--- a/y2021_bot3/control_loops/python/drivetrain.py
+++ b/y2021_bot3/control_loops/python/drivetrain.py
@@ -16,10 +16,10 @@
     J=6.0,
     mass=58.0,
     # TODO(austin): Measure radius a bit better.
-    robot_radius= 0.39,
-    wheel_radius= 3/39.37,
+    robot_radius=0.39,
+    wheel_radius=3 / 39.37,
     motor_type=control_loop.Falcon(),
-    num_motors = 3,
+    num_motors=3,
     G=8.0 / 80.0,
     q_pos=0.24,
     q_vel=2.5,
@@ -40,7 +40,8 @@
         print("Expected .h file name and .cc file name")
     else:
         # Write the generated constants out to a file.
-        drivetrain.WriteDrivetrain(argv[1:3], argv[3:5], 'y2021_bot3', kDrivetrain)
+        drivetrain.WriteDrivetrain(argv[1:3], argv[3:5], 'y2021_bot3',
+                                   kDrivetrain)
 
 
 if __name__ == '__main__':
diff --git a/y2021_bot3/control_loops/python/polydrivetrain.py b/y2021_bot3/control_loops/python/polydrivetrain.py
index 83576cc..f8c3417 100644
--- a/y2021_bot3/control_loops/python/polydrivetrain.py
+++ b/y2021_bot3/control_loops/python/polydrivetrain.py
@@ -12,20 +12,23 @@
 FLAGS = gflags.FLAGS
 
 try:
-  gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 except gflags.DuplicateFlagError:
-  pass
+    pass
+
 
 def main(argv):
-  if FLAGS.plot:
-    polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
-  elif len(argv) != 7:
-    glog.fatal('Expected .h file name and .cc file name')
-  else:
-    polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7], 'y2021_bot3',
-                                       drivetrain.kDrivetrain)
+    if FLAGS.plot:
+        polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
+    elif len(argv) != 7:
+        glog.fatal('Expected .h file name and .cc file name')
+    else:
+        polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7],
+                                           'y2021_bot3',
+                                           drivetrain.kDrivetrain)
+
 
 if __name__ == '__main__':
-  argv = FLAGS(sys.argv)
-  glog.init()
-  sys.exit(main(argv))
+    argv = FLAGS(sys.argv)
+    glog.init()
+    sys.exit(main(argv))
diff --git a/y2022/control_loops/drivetrain/BUILD b/y2022/control_loops/drivetrain/BUILD
index 3442a39..18855a6 100644
--- a/y2022/control_loops/drivetrain/BUILD
+++ b/y2022/control_loops/drivetrain/BUILD
@@ -122,7 +122,6 @@
         "//aos/events:simulated_event_loop",
         "//aos/events/logging:log_writer",
         "//aos/network:team_number",
-        "//aos/network:testing_time_converter",
         "//frc971/control_loops:control_loop_test",
         "//frc971/control_loops:team_number_test_environment",
         "//frc971/control_loops/drivetrain:drivetrain_lib",
diff --git a/y2022/control_loops/python/catapult.py b/y2022/control_loops/python/catapult.py
index 9e9adf7..e984478 100755
--- a/y2022/control_loops/python/catapult.py
+++ b/y2022/control_loops/python/catapult.py
@@ -40,7 +40,6 @@
 M_cup = (1750 * 0.0254 * 0.04 * 2 * math.pi * (ball_diameter / 2.)**2.0)
 J_cup = M_cup * lever**2.0 + M_cup * (ball_diameter / 2.)**2.0
 
-
 J = (0.0 * J_ball + J_bar + J_cup * 0.0)
 JEmpty = (J_bar + J_cup * 0.0)
 
@@ -83,6 +82,7 @@
 # We really want our cost function to be robust so that we can tolerate the
 # battery not delivering like we want at the end.
 
+
 def quadratic_cost(catapult, X_initial, X_final, horizon):
     Q_final = numpy.matrix([[10000.0, 0.0], [0.0, 10000.0]])
 
@@ -98,28 +98,32 @@
 
     P_final = 2.0 * Bf.transpose() * Q_final * Bf
     q_final = (2.0 * (Af * X_initial - X_final).transpose() * Q_final *
-         Bf).transpose()
+               Bf).transpose()
 
     constant_final = (Af * X_initial - X_final).transpose() * Q_final * (
         Af * X_initial - X_final)
 
-    m = numpy.matrix([[catapult.A[1, 1] ** (n + 1)] for n in range(horizon)])
+    m = numpy.matrix([[catapult.A[1, 1]**(n + 1)] for n in range(horizon)])
     M = Bs[1:horizon * 2:2, :]
 
-    W = numpy.matrix(numpy.identity(horizon) - numpy.eye(horizon, horizon, -1)) / catapult.dt
+    W = numpy.matrix(
+        numpy.identity(horizon) -
+        numpy.eye(horizon, horizon, -1)) / catapult.dt
     w = -numpy.matrix(numpy.eye(horizon, 1, 0)) / catapult.dt
 
-
     Pi = numpy.diag([
-        (0.01 ** 2.0) + (0.02 * max(0.0, 20 - (horizon - n)) / 20.0) ** 2.0 for n in range(horizon)
+        (0.01**2.0) + (0.02 * max(0.0, 20 - (horizon - n)) / 20.0)**2.0
+        for n in range(horizon)
     ])
 
     P_accel = 2.0 * M.transpose() * W.transpose() * Pi * W * M
-    q_accel = 2.0 * (((W * m + w) * X_initial[1, 0]).transpose() * Pi * W * M).transpose()
+    q_accel = 2.0 * ((
+        (W * m + w) * X_initial[1, 0]).transpose() * Pi * W * M).transpose()
     constant_accel = ((W * m + w) * X_initial[1, 0]).transpose() * Pi * (
         (W * m + w) * X_initial[1, 0])
 
-    return ((P_accel + P_final), (q_accel + q_final), (constant_accel + constant_final))
+    return ((P_accel + P_final), (q_accel + q_final),
+            (constant_accel + constant_final))
 
 
 def new_cost(catapult, X_initial, X_final, u):
@@ -138,25 +142,28 @@
 
     P_final = 2.0 * Bf.transpose() * Q_final * Bf
     q_final = (2.0 * (Af * X_initial - X_final).transpose() * Q_final *
-         Bf).transpose()
+               Bf).transpose()
 
     constant_final = (Af * X_initial - X_final).transpose() * Q_final * (
         Af * X_initial - X_final)
 
-    m = numpy.matrix([[catapult.A[1, 1] ** (n + 1)] for n in range(len(u))])
+    m = numpy.matrix([[catapult.A[1, 1]**(n + 1)] for n in range(len(u))])
     M = Bs[1:len(u) * 2:2, :]
 
-    W = numpy.matrix(numpy.identity(len(u)) - numpy.eye(len(u), len(u), -1)) / catapult.dt
+    W = numpy.matrix(numpy.identity(len(u)) -
+                     numpy.eye(len(u), len(u), -1)) / catapult.dt
     w = -numpy.matrix(numpy.eye(len(u), 1, 0)) * X_initial[1, 0] / catapult.dt
 
     accel = W * (M * u_matrix + m * X_initial[1, 0]) + w
 
     Pi = numpy.diag([
-        (0.01 ** 2.0) + (0.02 * max(0.0, 20 - (len(u) - n)) / 20.0) ** 2.0 for n in range(len(u))
+        (0.01**2.0) + (0.02 * max(0.0, 20 - (len(u) - n)) / 20.0)**2.0
+        for n in range(len(u))
     ])
 
     P_accel = 2.0 * M.transpose() * W.transpose() * Pi * W * M
-    q_accel = 2.0 * ((W * m * X_initial[1, 0] + w).transpose() * Pi * W * M).transpose()
+    q_accel = 2.0 * (
+        (W * m * X_initial[1, 0] + w).transpose() * Pi * W * M).transpose()
     constant_accel = (W * m * X_initial[1, 0] +
                       w).transpose() * Pi * (W * m * X_initial[1, 0] + w)
 
@@ -205,6 +212,7 @@
 
 def SolveCatapult(catapult, X_initial, X_final, u):
     """ Solves for the optimal action given a seed, state, and target """
+
     def vbat_constraint(z, i):
         return 12.0 - z[i]
 
@@ -213,13 +221,11 @@
 
     P, q, c = quadratic_cost(catapult, X_initial, X_final, len(u))
 
-
     def mpc_cost2(u_solver):
         u_matrix = numpy.matrix(u_solver).transpose()
         cost = mpc_cost(catapult, X_initial, X_final, u_solver)
         return cost
 
-
     def mpc_cost3(u_solver):
         u_matrix = numpy.matrix(u_solver).transpose()
         return (0.5 * u_matrix.transpose() * P * u_matrix +
@@ -268,7 +274,6 @@
     X_initial = numpy.matrix([[0.0], [0.0]])
     X_final = numpy.matrix([[2.0], [25.0]])
 
-
     X_initial = numpy.matrix([[0.0], [0.0]])
     X = X_initial.copy()
 
@@ -382,7 +387,8 @@
         )
     else:
         namespaces = ['y2022', 'control_loops', 'superstructure', 'catapult']
-        catapult_lib.WriteCatapult([kCatapultWithBall, kCatapultEmpty], argv[1:3], argv[3:5], namespaces)
+        catapult_lib.WriteCatapult([kCatapultWithBall, kCatapultEmpty],
+                                   argv[1:3], argv[3:5], namespaces)
     return 0
 
 
diff --git a/y2022/control_loops/python/catapult_lib.py b/y2022/control_loops/python/catapult_lib.py
index 4a88b14..eceb2d2 100644
--- a/y2022/control_loops/python/catapult_lib.py
+++ b/y2022/control_loops/python/catapult_lib.py
@@ -13,6 +13,7 @@
 
 # TODO(austin): This is mostly the same as angular_system.  Can we either wrap an angular_system or assign it?
 class Catapult(angular_system.AngularSystem):
+
     def __init__(self, params, name="Catapult"):
         super(Catapult, self).__init__(params, name)
         # Signal that we have a 2 cycle output delay to compensate for in
@@ -23,6 +24,7 @@
 
 
 class IntegralCatapult(angular_system.IntegralAngularSystem):
+
     def __init__(self, params, name="IntegralCatapult"):
         super(IntegralCatapult, self).__init__(params, name=name)
         # Signal that we have a 2 cycle output delay to compensate for in
diff --git a/y2022/control_loops/python/climber.py b/y2022/control_loops/python/climber.py
index 5f5ae38..12d9cd0 100755
--- a/y2022/control_loops/python/climber.py
+++ b/y2022/control_loops/python/climber.py
@@ -27,12 +27,15 @@
     kalman_q_voltage=35.0,
     kalman_r_position=0.05)
 
+
 def main(argv):
     if FLAGS.plot:
         R = numpy.matrix([[0.2], [0.0]])
         linear_system.PlotKick(kClimber, R, plant_params=kClimber)
-        linear_system.PlotMotion(
-            kClimber, R, max_velocity=5.0, plant_params=kClimber)
+        linear_system.PlotMotion(kClimber,
+                                 R,
+                                 max_velocity=5.0,
+                                 plant_params=kClimber)
 
     # Write the generated constants out to a file.
     if len(argv) != 5:
@@ -41,8 +44,8 @@
         )
     else:
         namespaces = ['y2022', 'control_loops', 'superstructure', 'climber']
-        linear_system.WriteLinearSystem(kClimber,
-                                        argv[1:3], argv[3:5], namespaces)
+        linear_system.WriteLinearSystem(kClimber, argv[1:3], argv[3:5],
+                                        namespaces)
 
 
 if __name__ == '__main__':
diff --git a/y2022/control_loops/python/polydrivetrain.py b/y2022/control_loops/python/polydrivetrain.py
index d749580..cf54470 100644
--- a/y2022/control_loops/python/polydrivetrain.py
+++ b/y2022/control_loops/python/polydrivetrain.py
@@ -12,20 +12,22 @@
 FLAGS = gflags.FLAGS
 
 try:
-  gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 except gflags.DuplicateFlagError:
-  pass
+    pass
+
 
 def main(argv):
-  if FLAGS.plot:
-    polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
-  elif len(argv) != 7:
-    glog.fatal('Expected .h file name and .cc file name')
-  else:
-    polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7], 'y2022',
-                                       drivetrain.kDrivetrain)
+    if FLAGS.plot:
+        polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
+    elif len(argv) != 7:
+        glog.fatal('Expected .h file name and .cc file name')
+    else:
+        polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7],
+                                           'y2022', drivetrain.kDrivetrain)
+
 
 if __name__ == '__main__':
-  argv = FLAGS(sys.argv)
-  glog.init()
-  sys.exit(main(argv))
+    argv = FLAGS(sys.argv)
+    glog.init()
+    sys.exit(main(argv))
diff --git a/y2022/vision/camera_definition.py b/y2022/vision/camera_definition.py
index dbb23ad..911418b 100644
--- a/y2022/vision/camera_definition.py
+++ b/y2022/vision/camera_definition.py
@@ -28,6 +28,7 @@
 
 
 class CameraIntrinsics:
+
     def __init__(self):
         self.camera_matrix = []
         self.dist_coeffs = []
@@ -36,12 +37,14 @@
 
 
 class CameraExtrinsics:
+
     def __init__(self):
         self.R = []
         self.T = []
 
 
 class CameraParameters:
+
     def __init__(self):
         self.camera_int = CameraIntrinsics()
         self.camera_ext = CameraExtrinsics()
diff --git a/y2022_bot3/BUILD b/y2022_bot3/BUILD
new file mode 100644
index 0000000..8af6882
--- /dev/null
+++ b/y2022_bot3/BUILD
@@ -0,0 +1,209 @@
+load("//frc971:downloader.bzl", "robot_downloader")
+load("//aos:config.bzl", "aos_config")
+
+robot_downloader(
+    binaries = [
+        "//aos/network:web_proxy_main",
+        "//aos/events/logging:log_cat",
+    ],
+    data = [
+        ":aos_config",
+        "@ctre_phoenix_api_cpp_athena//:shared_libraries",
+        "@ctre_phoenix_cci_athena//:shared_libraries",
+    ],
+    dirs = [
+        "//y2022_bot3/actors:splines",
+    ],
+    start_binaries = [
+        "//aos/events/logging:logger_main",
+        "//aos/network:web_proxy_main",
+        ":joystick_reader",
+        ":wpilib_interface",
+        "//aos/network:message_bridge_client",
+        "//aos/network:message_bridge_server",
+        "//y2022_bot3/actors:binaries",
+        "//y2022_bot3/control_loops/drivetrain:drivetrain",
+        "//y2022_bot3/control_loops/drivetrain:trajectory_generator",
+        "//y2022_bot3/control_loops/superstructure:superstructure",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+)
+
+robot_downloader(
+    name = "pi_download",
+    binaries = [
+        "//aos/events/logging:log_cat",
+    ],
+    data = [
+        ":aos_config",
+    ],
+    start_binaries = [
+        "//aos/events/logging:logger_main",
+        "//aos/network:message_bridge_client",
+        "//aos/network:message_bridge_server",
+        "//aos/network:web_proxy_main",
+    ],
+    target_compatible_with = ["//tools/platforms/hardware:raspberry_pi"],
+    target_type = "pi",
+)
+
+aos_config(
+    name = "aos_config",
+    src = "y2022_bot3.json",
+    flatbuffers = [
+        "//aos/network:message_bridge_client_fbs",
+        "//aos/network:message_bridge_server_fbs",
+        "//aos/network:timestamp_fbs",
+        "//frc971/input:robot_state_fbs",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+    deps = [
+        ":config_imu",
+        ":config_roborio",
+    ],
+)
+
+aos_config(
+    name = "config_imu",
+    src = "y2022_bot3_imu.json",
+    flatbuffers = [
+        "//aos/network:message_bridge_client_fbs",
+        "//aos/network:message_bridge_server_fbs",
+        "//aos/network:timestamp_fbs",
+        "//aos/network:remote_message_fbs",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+    deps = [
+        "//aos/events:aos_config",
+        "//frc971/control_loops/drivetrain:aos_config",
+    ],
+)
+
+aos_config(
+    name = "config_roborio",
+    src = "y2022_bot3_roborio.json",
+    flatbuffers = [
+        "//aos/network:remote_message_fbs",
+        "//aos/network:message_bridge_client_fbs",
+        "//aos/network:message_bridge_server_fbs",
+        "//aos/network:timestamp_fbs",
+        "//y2019/control_loops/drivetrain:target_selector_fbs",
+        "//y2022_bot3/control_loops/superstructure:superstructure_goal_fbs",
+        "//y2022_bot3/control_loops/superstructure:superstructure_output_fbs",
+        "//y2022_bot3/control_loops/superstructure:superstructure_position_fbs",
+        "//y2022_bot3/control_loops/superstructure:superstructure_status_fbs",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    deps = [
+        "//aos/events:aos_config",
+        "//frc971/autonomous:aos_config",
+        "//frc971/control_loops/drivetrain:aos_config",
+        "//frc971/input:aos_config",
+        "//frc971/wpilib:aos_config",
+    ],
+)
+
+cc_library(
+    name = "constants",
+    srcs = [
+        "constants.cc",
+    ],
+    hdrs = [
+        "constants.h",
+    ],
+    visibility = ["//visibility:public"],
+    deps = [
+        "//aos/mutex",
+        "//aos/network:team_number",
+        "//frc971:constants",
+        "//frc971/control_loops:pose",
+        "//frc971/control_loops:static_zeroing_single_dof_profiled_subsystem",
+        "//frc971/shooter_interpolation:interpolation",
+        "//y2022_bot3/control_loops/drivetrain:polydrivetrain_plants",
+        "@com_github_google_glog//:glog",
+        "@com_google_absl//absl/base",
+    ],
+)
+
+cc_binary(
+    name = "wpilib_interface",
+    srcs = [
+        "wpilib_interface.cc",
+    ],
+    target_compatible_with = ["//tools/platforms/hardware:roborio"],
+    deps = [
+        ":constants",
+        "//aos:init",
+        "//aos:math",
+        "//aos/events:shm_event_loop",
+        "//aos/logging",
+        "//aos/stl_mutex",
+        "//aos/time",
+        "//aos/util:log_interval",
+        "//aos/util:phased_loop",
+        "//aos/util:wrapping_counter",
+        "//frc971/autonomous:auto_mode_fbs",
+        "//frc971/control_loops:control_loop",
+        "//frc971/control_loops:control_loops_fbs",
+        "//frc971/control_loops/drivetrain:drivetrain_position_fbs",
+        "//frc971/input:robot_state_fbs",
+        "//frc971/queues:gyro_fbs",
+        "//frc971/wpilib:ADIS16448",
+        "//frc971/wpilib:buffered_pcm",
+        "//frc971/wpilib:drivetrain_writer",
+        "//frc971/wpilib:encoder_and_potentiometer",
+        "//frc971/wpilib:interrupt_edge_counting",
+        "//frc971/wpilib:joystick_sender",
+        "//frc971/wpilib:logging_fbs",
+        "//frc971/wpilib:loop_output_handler",
+        "//frc971/wpilib:pdp_fetcher",
+        "//frc971/wpilib:sensor_reader",
+        "//frc971/wpilib:wpilib_interface",
+        "//frc971/wpilib:wpilib_robot_base",
+        "//third_party:phoenix",
+        "//third_party:wpilib",
+        "//y2022_bot3/control_loops/superstructure:superstructure_output_fbs",
+        "//y2022_bot3/control_loops/superstructure:superstructure_position_fbs",
+    ],
+)
+
+cc_binary(
+    name = "joystick_reader",
+    srcs = [
+        ":joystick_reader.cc",
+    ],
+    deps = [
+        ":constants",
+        "//aos:init",
+        "//aos/actions:action_lib",
+        "//aos/logging",
+        "//frc971/autonomous:auto_fbs",
+        "//frc971/autonomous:base_autonomous_actor",
+        "//frc971/control_loops:profiled_subsystem_fbs",
+        "//frc971/input:action_joystick_input",
+        "//frc971/input:drivetrain_input",
+        "//frc971/input:joystick_input",
+        "//y2022_bot3/control_loops/drivetrain:drivetrain_base",
+        "//y2022_bot3/control_loops/superstructure:superstructure_goal_fbs",
+        "//y2022_bot3/control_loops/superstructure:superstructure_status_fbs",
+    ],
+)
+
+py_library(
+    name = "python_init",
+    srcs = ["__init__.py"],
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+)
+
+sh_binary(
+    name = "log_web_proxy",
+    srcs = ["log_web_proxy.sh"],
+    data = [
+        ":aos_config",
+        "//aos/network:log_web_proxy_main",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.bazel b/y2022_bot3/__init__.py
similarity index 100%
copy from third_party/rules_rust/bindgen/raze/remote/BUILD.bazel
copy to y2022_bot3/__init__.py
diff --git a/y2022_bot3/actors/BUILD b/y2022_bot3/actors/BUILD
new file mode 100644
index 0000000..783894f
--- /dev/null
+++ b/y2022_bot3/actors/BUILD
@@ -0,0 +1,74 @@
+load("//frc971/downloader:downloader.bzl", "aos_downloader_dir")
+
+filegroup(
+    name = "binaries.stripped",
+    srcs = [
+        ":autonomous_action.stripped",
+    ],
+    visibility = ["//visibility:public"],
+)
+
+filegroup(
+    name = "binaries",
+    srcs = [
+        ":autonomous_action",
+    ],
+    visibility = ["//visibility:public"],
+)
+
+filegroup(
+    name = "spline_jsons",
+    srcs = glob([
+        "splines/*.json",
+    ]),
+    visibility = ["//visibility:public"],
+)
+
+aos_downloader_dir(
+    name = "splines",
+    srcs = [
+        ":spline_jsons",
+    ],
+    dir = "splines",
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+)
+
+cc_library(
+    name = "autonomous_action_lib",
+    srcs = [
+        "auto_splines.cc",
+        "autonomous_actor.cc",
+    ],
+    hdrs = [
+        "auto_splines.h",
+        "autonomous_actor.h",
+    ],
+    deps = [
+        "//aos/events:event_loop",
+        "//aos/logging",
+        "//aos/util:phased_loop",
+        "//frc971/autonomous:base_autonomous_actor",
+        "//frc971/control_loops:control_loops_fbs",
+        "//frc971/control_loops:profiled_subsystem_fbs",
+        "//frc971/control_loops/drivetrain:drivetrain_config",
+        "//frc971/control_loops/drivetrain:localizer_fbs",
+        "//y2022_bot3:constants",
+        "//y2022_bot3/control_loops/drivetrain:drivetrain_base",
+        "//y2022_bot3/control_loops/superstructure:superstructure_goal_fbs",
+        "//y2022_bot3/control_loops/superstructure:superstructure_status_fbs",
+    ],
+)
+
+cc_binary(
+    name = "autonomous_action",
+    srcs = [
+        "autonomous_actor_main.cc",
+    ],
+    deps = [
+        ":autonomous_action_lib",
+        "//aos:init",
+        "//aos/events:shm_event_loop",
+        "//frc971/autonomous:auto_fbs",
+    ],
+)
diff --git a/y2022_bot3/actors/auto_splines.cc b/y2022_bot3/actors/auto_splines.cc
new file mode 100644
index 0000000..047eac8
--- /dev/null
+++ b/y2022_bot3/actors/auto_splines.cc
@@ -0,0 +1,54 @@
+#include "y2022_bot3/actors/auto_splines.h"
+
+#include "frc971/control_loops/control_loops_generated.h"
+
+namespace y2022_bot3 {
+namespace actors {
+
+void MaybeFlipSpline(
+    aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder,
+    flatbuffers::Offset<flatbuffers::Vector<float>> spline_y_offset,
+    bool is_left) {
+  flatbuffers::Vector<float> *spline_y =
+      GetMutableTemporaryPointer(*builder->fbb(), spline_y_offset);
+
+  if (!is_left) {
+    for (size_t i = 0; i < spline_y->size(); i++) {
+      spline_y->Mutate(i, -spline_y->Get(i));
+    }
+  }
+}
+
+flatbuffers::Offset<frc971::MultiSpline> FixSpline(
+    aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
+        *builder,
+    flatbuffers::Offset<frc971::MultiSpline> spline_offset,
+    aos::Alliance alliance) {
+  frc971::MultiSpline *spline =
+      GetMutableTemporaryPointer(*builder->fbb(), spline_offset);
+  flatbuffers::Vector<float> *spline_x = spline->mutable_spline_x();
+  flatbuffers::Vector<float> *spline_y = spline->mutable_spline_y();
+
+  if (alliance == aos::Alliance::kBlue) {
+    for (size_t ii = 0; ii < spline_x->size(); ++ii) {
+      spline_x->Mutate(ii, -spline_x->Get(ii));
+    }
+    for (size_t ii = 0; ii < spline_y->size(); ++ii) {
+      spline_y->Mutate(ii, -spline_y->Get(ii));
+    }
+  }
+  return spline_offset;
+}
+
+flatbuffers::Offset<frc971::MultiSpline> AutonomousSplines::TestSpline(
+    aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
+        *builder,
+    aos::Alliance alliance) {
+  return FixSpline(
+      builder,
+      aos::CopyFlatBuffer<frc971::MultiSpline>(test_spline_, builder->fbb()),
+      alliance);
+}
+
+}  // namespace actors
+}  // namespace y2022_bot3
diff --git a/y2022_bot3/actors/auto_splines.h b/y2022_bot3/actors/auto_splines.h
new file mode 100644
index 0000000..c4c32fb
--- /dev/null
+++ b/y2022_bot3/actors/auto_splines.h
@@ -0,0 +1,42 @@
+#ifndef Y2022_BOT3_ACTORS_AUTO_SPLINES_H_
+#define Y2022_BOT3_ACTORS_AUTO_SPLINES_H_
+
+#include "aos/events/event_loop.h"
+#include "aos/flatbuffer_merge.h"
+#include "frc971/control_loops/control_loops_generated.h"
+#include "frc971/control_loops/drivetrain/drivetrain_goal_generated.h"
+#include "frc971/input/joystick_state_generated.h"
+/*
+
+  The cooridinate system for the autonomous splines is the same as the spline
+  python generator and drivetrain spline systems.
+
+*/
+
+namespace y2022_bot3 {
+namespace actors {
+
+class AutonomousSplines {
+ public:
+  AutonomousSplines()
+      : test_spline_(aos::JsonFileToFlatbuffer<frc971::MultiSpline>(
+            "splines/test_spline.json")) {}
+
+  static flatbuffers::Offset<frc971::MultiSpline> BasicSSpline(
+      aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder);
+  static flatbuffers::Offset<frc971::MultiSpline> StraightLine(
+      aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder);
+
+  flatbuffers::Offset<frc971::MultiSpline> TestSpline(
+      aos::Sender<frc971::control_loops::drivetrain::SplineGoal>::Builder
+          *builder,
+      aos::Alliance alliance);
+
+ private:
+  aos::FlatbufferDetachedBuffer<frc971::MultiSpline> test_spline_;
+};
+
+}  // namespace actors
+}  // namespace y2022_bot3
+
+#endif  // Y2022_BOT3_ACTORS_AUTO_SPLINES_H_
diff --git a/y2022_bot3/actors/autonomous_actor.cc b/y2022_bot3/actors/autonomous_actor.cc
new file mode 100644
index 0000000..814921d
--- /dev/null
+++ b/y2022_bot3/actors/autonomous_actor.cc
@@ -0,0 +1,185 @@
+#include "y2022_bot3/actors/autonomous_actor.h"
+
+#include <chrono>
+#include <cinttypes>
+#include <cmath>
+
+#include "aos/logging/logging.h"
+#include "aos/network/team_number.h"
+#include "aos/util/math.h"
+#include "frc971/control_loops/drivetrain/localizer_generated.h"
+#include "y2022_bot3/actors/auto_splines.h"
+#include "y2022_bot3/constants.h"
+#include "y2022_bot3/control_loops/drivetrain/drivetrain_base.h"
+
+DEFINE_bool(spline_auto, false, "If true, define a spline autonomous mode");
+
+namespace y2022_bot3 {
+namespace actors {
+
+using ::aos::monotonic_clock;
+using frc971::CreateProfileParameters;
+using ::frc971::ProfileParametersT;
+using frc971::control_loops::CreateStaticZeroingSingleDOFProfiledSubsystemGoal;
+using frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystemGoal;
+using frc971::control_loops::drivetrain::LocalizerControl;
+
+namespace chrono = ::std::chrono;
+
+AutonomousActor::AutonomousActor(::aos::EventLoop *event_loop)
+    : frc971::autonomous::BaseAutonomousActor(
+          event_loop, control_loops::drivetrain::GetDrivetrainConfig()),
+      localizer_control_sender_(
+          event_loop->MakeSender<
+              ::frc971::control_loops::drivetrain::LocalizerControl>(
+              "/drivetrain")),
+      superstructure_goal_sender_(
+          event_loop->MakeSender<control_loops::superstructure::Goal>(
+              "/superstructure")),
+      superstructure_status_fetcher_(
+          event_loop->MakeFetcher<control_loops::superstructure::Status>(
+              "/superstructure")),
+      joystick_state_fetcher_(
+          event_loop->MakeFetcher<aos::JoystickState>("/aos")),
+      robot_state_fetcher_(event_loop->MakeFetcher<aos::RobotState>("/aos")),
+      auto_splines_() {
+  set_max_drivetrain_voltage(12.0);
+  replan_timer_ = event_loop->AddTimer([this]() { Replan(); });
+  event_loop->OnRun([this, event_loop]() {
+    replan_timer_->Setup(event_loop->monotonic_now());
+    button_poll_->Setup(event_loop->monotonic_now(), chrono::milliseconds(50));
+  });
+
+  button_poll_ = event_loop->AddTimer([this]() {
+    const aos::monotonic_clock::time_point now =
+        this->event_loop()->context().monotonic_event_time;
+    if (robot_state_fetcher_.Fetch()) {
+      if (robot_state_fetcher_->user_button()) {
+        user_indicated_safe_to_reset_ = true;
+        MaybeSendStartingPosition();
+      }
+    }
+    if (joystick_state_fetcher_.Fetch()) {
+      if (joystick_state_fetcher_->has_alliance() &&
+          (joystick_state_fetcher_->alliance() != alliance_)) {
+        alliance_ = joystick_state_fetcher_->alliance();
+        is_planned_ = false;
+        // Only kick the planning out by 2 seconds. If we end up enabled in that
+        // second, then we will kick it out further based on the code below.
+        replan_timer_->Setup(now + std::chrono::seconds(2));
+      }
+      if (joystick_state_fetcher_->enabled()) {
+        if (!is_planned_) {
+          // Only replan once we've been disabled for 5 seconds.
+          replan_timer_->Setup(now + std::chrono::seconds(5));
+        }
+      }
+    }
+  });
+}
+
+void AutonomousActor::Replan() {
+  LOG(INFO) << "Alliance " << static_cast<int>(alliance_);
+  if (alliance_ == aos::Alliance::kInvalid) {
+    return;
+  }
+  sent_starting_position_ = false;
+  if (FLAGS_spline_auto) {
+    test_spline_ =
+        PlanSpline(std::bind(&AutonomousSplines::TestSpline, &auto_splines_,
+                             std::placeholders::_1, alliance_),
+                   SplineDirection::kForward);
+
+    starting_position_ = test_spline_->starting_position();
+  }
+
+  is_planned_ = true;
+
+  MaybeSendStartingPosition();
+}
+
+void AutonomousActor::MaybeSendStartingPosition() {
+  if (is_planned_ && user_indicated_safe_to_reset_ &&
+      !sent_starting_position_) {
+    CHECK(starting_position_);
+    SendStartingPosition(starting_position_.value());
+  }
+}
+
+void AutonomousActor::Reset() {
+  InitializeEncoders();
+  ResetDrivetrain();
+
+  joystick_state_fetcher_.Fetch();
+  CHECK(joystick_state_fetcher_.get() != nullptr)
+      << "Expect at least one JoystickState message before running auto...";
+  alliance_ = joystick_state_fetcher_->alliance();
+}
+
+bool AutonomousActor::RunAction(
+    const ::frc971::autonomous::AutonomousActionParams *params) {
+  Reset();
+  if (!user_indicated_safe_to_reset_) {
+    AOS_LOG(WARNING, "Didn't send starting position prior to starting auto.");
+    CHECK(starting_position_);
+    SendStartingPosition(starting_position_.value());
+  }
+  // Clear this so that we don't accidentally resend things as soon as we replan
+  // later.
+  user_indicated_safe_to_reset_ = false;
+  is_planned_ = false;
+  starting_position_.reset();
+
+  AOS_LOG(INFO, "Params are %d\n", params->mode());
+  if (alliance_ == aos::Alliance::kInvalid) {
+    AOS_LOG(INFO, "Aborting autonomous due to invalid alliance selection.");
+    return false;
+  }
+  if (FLAGS_spline_auto) {
+    SplineAuto();
+  }
+
+  return true;
+}
+
+void AutonomousActor::SendStartingPosition(const Eigen::Vector3d &start) {
+  // Set up the starting position for the blue alliance.
+
+  // TODO(james): Resetting the localizer breaks the left/right statespace
+  // controller.  That is a bug, but we can fix that later by not resetting.
+  auto builder = localizer_control_sender_.MakeBuilder();
+
+  LocalizerControl::Builder localizer_control_builder =
+      builder.MakeBuilder<LocalizerControl>();
+  localizer_control_builder.add_x(start(0));
+  localizer_control_builder.add_y(start(1));
+  localizer_control_builder.add_theta(start(2));
+  localizer_control_builder.add_theta_uncertainty(0.00001);
+  LOG(INFO) << "User button pressed, x: " << start(0) << " y: " << start(1)
+            << " theta: " << start(2);
+  if (builder.Send(localizer_control_builder.Finish()) !=
+      aos::RawSender::Error::kOk) {
+    AOS_LOG(ERROR, "Failed to reset localizer.\n");
+  }
+}
+
+void AutonomousActor::SplineAuto() {
+  CHECK(test_spline_);
+
+  if (!test_spline_->WaitForPlan()) return;
+  test_spline_->Start();
+
+  if (!test_spline_->WaitForSplineDistanceRemaining(0.02)) return;
+}
+
+void AutonomousActor::SendSuperstructureGoal() {
+  auto builder = superstructure_goal_sender_.MakeBuilder();
+  superstructure::Goal::Builder superstructure_builder = builder.MakeBuilder<superstructure::Goal>();
+  if (builder.Send(superstructure_builder.Finish()) !=
+      aos::RawSender::Error::kOk) {
+    AOS_LOG(ERROR, "Sending superstructure goal failed.\n");
+  }
+}
+
+}  // namespace actors
+}  // namespace y2022_bot3
diff --git a/y2022_bot3/actors/autonomous_actor.h b/y2022_bot3/actors/autonomous_actor.h
new file mode 100644
index 0000000..72262fb
--- /dev/null
+++ b/y2022_bot3/actors/autonomous_actor.h
@@ -0,0 +1,66 @@
+#ifndef Y2022_BOT3_ACTORS_AUTONOMOUS_ACTOR_H_
+#define Y2022_BOT3_ACTORS_AUTONOMOUS_ACTOR_H_
+
+#include "aos/actions/actions.h"
+#include "aos/actions/actor.h"
+#include "frc971/autonomous/base_autonomous_actor.h"
+#include "frc971/control_loops/control_loops_generated.h"
+#include "frc971/control_loops/drivetrain/drivetrain_config.h"
+#include "frc971/control_loops/drivetrain/localizer_generated.h"
+#include "y2022_bot3/actors/auto_splines.h"
+#include "y2022_bot3/control_loops/superstructure/superstructure_goal_generated.h"
+#include "y2022_bot3/control_loops/superstructure/superstructure_status_generated.h"
+
+namespace y2022_bot3 {
+namespace actors {
+
+using frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystemGoal;
+
+namespace superstructure = y2022_bot3::control_loops::superstructure;
+
+class AutonomousActor : public ::frc971::autonomous::BaseAutonomousActor {
+ public:
+  explicit AutonomousActor(::aos::EventLoop *event_loop);
+
+  bool RunAction(
+      const ::frc971::autonomous::AutonomousActionParams *params) override;
+
+ private:
+  void Reset();
+
+  void SendSuperstructureGoal();
+  void SendStartingPosition(const Eigen::Vector3d &start);
+  void MaybeSendStartingPosition();
+
+  void SplineAuto();
+
+  void Replan();
+
+  aos::Sender<frc971::control_loops::drivetrain::LocalizerControl>
+      localizer_control_sender_;
+  aos::Sender<y2022_bot3::control_loops::superstructure::Goal>
+      superstructure_goal_sender_;
+  aos::Fetcher<y2022_bot3::control_loops::superstructure::Status>
+      superstructure_status_fetcher_;
+  aos::Fetcher<aos::JoystickState> joystick_state_fetcher_;
+  aos::Fetcher<aos::RobotState> robot_state_fetcher_;
+
+  aos::TimerHandler *replan_timer_;
+  aos::TimerHandler *button_poll_;
+
+  std::optional<SplineHandle> test_spline_;
+
+  aos::Alliance alliance_ = aos::Alliance::kInvalid;
+  AutonomousSplines auto_splines_;
+  bool user_indicated_safe_to_reset_ = false;
+  bool sent_starting_position_ = false;
+
+  bool is_planned_ = false;
+
+  std::optional<Eigen::Vector3d> starting_position_;
+};
+
+}  // namespace actors
+}  // namespace y2022_bot3
+
+#endif  // Y2022_BOT3_ACTORS_AUTONOMOUS_ACTOR_H_
diff --git a/y2022_bot3/actors/autonomous_actor_main.cc b/y2022_bot3/actors/autonomous_actor_main.cc
new file mode 100644
index 0000000..b336867
--- /dev/null
+++ b/y2022_bot3/actors/autonomous_actor_main.cc
@@ -0,0 +1,19 @@
+#include <cstdio>
+
+#include "aos/events/shm_event_loop.h"
+#include "aos/init.h"
+#include "y2022_bot3/actors/autonomous_actor.h"
+
+int main(int argc, char *argv[]) {
+  ::aos::InitGoogle(&argc, &argv);
+
+  aos::FlatbufferDetachedBuffer<aos::Configuration> config =
+      aos::configuration::ReadConfig("aos_config.json");
+
+  ::aos::ShmEventLoop event_loop(&config.message());
+  ::y2022_bot3::actors::AutonomousActor autonomous(&event_loop);
+
+  event_loop.Run();
+
+  return 0;
+}
diff --git a/y2022_bot3/actors/splines/README.md b/y2022_bot3/actors/splines/README.md
new file mode 100644
index 0000000..c655416
--- /dev/null
+++ b/y2022_bot3/actors/splines/README.md
@@ -0,0 +1,3 @@
+# Spline Descriptions
+This folder contains reference material for what each spline does
+
diff --git a/y2022_bot3/actors/splines/test_spline.json b/y2022_bot3/actors/splines/test_spline.json
new file mode 100644
index 0000000..733d516
--- /dev/null
+++ b/y2022_bot3/actors/splines/test_spline.json
@@ -0,0 +1 @@
+{"spline_count": 1, "spline_x": [0, 0.4, 0.4, 0.6, 0.6, 1.0], "spline_y": [0, 0, 0.05, 0.1, 0.15, 0.15], "constraints": [{"constraint_type": "LONGITUDINAL_ACCELERATION", "value": 1}, {"constraint_type": "LATERAL_ACCELERATION", "value": 1}, {"constraint_type": "VOLTAGE", "value": 2}]}
diff --git a/y2022_bot3/constants.cc b/y2022_bot3/constants.cc
new file mode 100644
index 0000000..84e6a0d
--- /dev/null
+++ b/y2022_bot3/constants.cc
@@ -0,0 +1,57 @@
+#include "y2022_bot3/constants.h"
+
+#include <cinttypes>
+#include <map>
+
+#if __has_feature(address_sanitizer)
+#include "sanitizer/lsan_interface.h"
+#endif
+
+#include "absl/base/call_once.h"
+#include "aos/mutex/mutex.h"
+#include "aos/network/team_number.h"
+#include "glog/logging.h"
+
+namespace y2022_bot3 {
+namespace constants {
+
+const int Values::kZeroingSampleSize;
+
+namespace {
+
+const uint16_t kCompTeamNumber = 971;
+const uint16_t kPracticeTeamNumber = 9971;
+const uint16_t kCodingRobotTeamNumber = 7971;
+
+}  // namespace
+
+Values MakeValues(uint16_t team) {
+  LOG(INFO) << "creating a Constants for team: " << team;
+
+  Values r;
+
+  switch (team) {
+    // A set of constants for tests.
+    case 1:
+      break;
+
+    case kCompTeamNumber:
+      break;
+
+    case kPracticeTeamNumber:
+      break;
+
+    case kCodingRobotTeamNumber:
+      break;
+
+    default:
+      LOG(FATAL) << "unknown team: " << team;
+  }
+
+  return r;
+}
+
+Values MakeValues() { return MakeValues(aos::network::GetTeamNumber()); }
+
+}  // namespace constants
+}  // namespace y2022_bot3
diff --git a/y2022_bot3/constants.h b/y2022_bot3/constants.h
new file mode 100644
index 0000000..7f5b623
--- /dev/null
+++ b/y2022_bot3/constants.h
@@ -0,0 +1,65 @@
+#ifndef Y2022_BOT3_CONSTANTS_H_
+#define Y2022_BOT3_CONSTANTS_H_
+
+#include <array>
+#include <cmath>
+#include <cstdint>
+
+#include "frc971/constants.h"
+#include "frc971/control_loops/pose.h"
+#include "frc971/control_loops/static_zeroing_single_dof_profiled_subsystem.h"
+#include "frc971/shooter_interpolation/interpolation.h"
+#include "y2022_bot3/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
+
+using ::frc971::shooter_interpolation::InterpolationTable;
+
+namespace y2022_bot3 {
+namespace constants {
+
+struct Values {
+  static const int kZeroingSampleSize = 200;
+
+  static constexpr double kDrivetrainCyclesPerRevolution() { return 512.0; }
+  static constexpr double kDrivetrainEncoderCountsPerRevolution() {
+    return kDrivetrainCyclesPerRevolution() * 4;
+  }
+  static constexpr double kDrivetrainEncoderRatio() { return 1.0; }
+  static constexpr double kMaxDrivetrainEncoderPulsesPerSecond() {
+    return control_loops::drivetrain::kFreeSpeed / (2.0 * M_PI) *
+           control_loops::drivetrain::kHighOutputRatio /
+           constants::Values::kDrivetrainEncoderRatio() *
+           kDrivetrainEncoderCountsPerRevolution();
+  }
+
+  static double DrivetrainEncoderToMeters(int32_t in) {
+    return ((static_cast<double>(in) /
+             kDrivetrainEncoderCountsPerRevolution()) *
+            (2.0 * M_PI)) *
+           kDrivetrainEncoderRatio() * control_loops::drivetrain::kWheelRadius;
+  }
+
+  struct PotAndAbsEncoderConstants {
+    ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystemParams<
+        ::frc971::zeroing::PotAndAbsoluteEncoderZeroingEstimator>
+        subsystem_params;
+    double potentiometer_offset;
+  };
+
+  // Intake rollers
+  static constexpr double kIntakeRollerSupplyCurrentLimit() { return 40.0; }
+  static constexpr double kIntakeRollerStatorCurrentLimit() { return 60.0; }
+
+};
+
+// Creates and returns a Values instance for the constants.
+// Should be called before realtime because this allocates memory.
+// Only the first call to either of these will be used.
+Values MakeValues(uint16_t team);
+
+// Calls MakeValues with aos::network::GetTeamNumber()
+Values MakeValues();
+
+}  // namespace constants
+}  // namespace y2022_bot3
+
+#endif  // Y2022_CONSTANTS_H_
diff --git a/y2022_bot3/control_loops/BUILD b/y2022_bot3/control_loops/BUILD
new file mode 100644
index 0000000..530281f
--- /dev/null
+++ b/y2022_bot3/control_loops/BUILD
@@ -0,0 +1,7 @@
+py_library(
+    name = "python_init",
+    srcs = ["__init__.py"],
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+    deps = ["//y2022_bot3:python_init"],
+)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.bazel b/y2022_bot3/control_loops/__init__.py
similarity index 100%
copy from third_party/rules_rust/bindgen/raze/remote/BUILD.bazel
copy to y2022_bot3/control_loops/__init__.py
diff --git a/y2022_bot3/control_loops/drivetrain/BUILD b/y2022_bot3/control_loops/drivetrain/BUILD
new file mode 100644
index 0000000..ecdcf6b
--- /dev/null
+++ b/y2022_bot3/control_loops/drivetrain/BUILD
@@ -0,0 +1,113 @@
+load("//aos:config.bzl", "aos_config")
+
+genrule(
+    name = "genrule_drivetrain",
+    outs = [
+        "drivetrain_dog_motor_plant.h",
+        "drivetrain_dog_motor_plant.cc",
+        "kalman_drivetrain_motor_plant.h",
+        "kalman_drivetrain_motor_plant.cc",
+    ],
+    cmd = "$(location //y2022_bot3/control_loops/python:drivetrain) $(OUTS)",
+    target_compatible_with = ["@platforms//os:linux"],
+    tools = [
+        "//y2022_bot3/control_loops/python:drivetrain",
+    ],
+)
+
+genrule(
+    name = "genrule_polydrivetrain",
+    outs = [
+        "polydrivetrain_dog_motor_plant.h",
+        "polydrivetrain_dog_motor_plant.cc",
+        "polydrivetrain_cim_plant.h",
+        "polydrivetrain_cim_plant.cc",
+        "hybrid_velocity_drivetrain.h",
+        "hybrid_velocity_drivetrain.cc",
+    ],
+    cmd = "$(location //y2022_bot3/control_loops/python:polydrivetrain) $(OUTS)",
+    target_compatible_with = ["@platforms//os:linux"],
+    tools = [
+        "//y2022_bot3/control_loops/python:polydrivetrain",
+    ],
+)
+
+cc_library(
+    name = "polydrivetrain_plants",
+    srcs = [
+        "drivetrain_dog_motor_plant.cc",
+        "hybrid_velocity_drivetrain.cc",
+        "kalman_drivetrain_motor_plant.cc",
+        "polydrivetrain_dog_motor_plant.cc",
+    ],
+    hdrs = [
+        "drivetrain_dog_motor_plant.h",
+        "hybrid_velocity_drivetrain.h",
+        "kalman_drivetrain_motor_plant.h",
+        "polydrivetrain_dog_motor_plant.h",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+    deps = [
+        "//frc971/control_loops:hybrid_state_feedback_loop",
+        "//frc971/control_loops:state_feedback_loop",
+    ],
+)
+
+cc_library(
+    name = "drivetrain_base",
+    srcs = [
+        "drivetrain_base.cc",
+    ],
+    hdrs = [
+        "drivetrain_base.h",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+    deps = [
+        ":polydrivetrain_plants",
+        "//frc971:shifter_hall_effect",
+        "//frc971/control_loops/drivetrain:drivetrain_config",
+    ],
+)
+
+cc_binary(
+    name = "drivetrain",
+    srcs = [
+        "drivetrain_main.cc",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+    deps = [
+        ":drivetrain_base",
+        "//aos:init",
+        "//aos/events:shm_event_loop",
+        "//frc971/control_loops/drivetrain:drivetrain_lib",
+    ],
+)
+
+aos_config(
+    name = "simulation_config",
+    src = "drivetrain_simulation_config.json",
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+    deps = [
+        "//frc971/control_loops/drivetrain:simulation_channels",
+        "//y2022_bot3:aos_config",
+    ],
+)
+
+cc_binary(
+    name = "trajectory_generator",
+    srcs = [
+        "trajectory_generator_main.cc",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+    deps = [
+        ":drivetrain_base",
+        "//aos:init",
+        "//aos/events:shm_event_loop",
+        "//frc971/control_loops/drivetrain:trajectory_generator",
+    ],
+)
diff --git a/y2022_bot3/control_loops/drivetrain/drivetrain_base.cc b/y2022_bot3/control_loops/drivetrain/drivetrain_base.cc
new file mode 100644
index 0000000..a97e0dd
--- /dev/null
+++ b/y2022_bot3/control_loops/drivetrain/drivetrain_base.cc
@@ -0,0 +1,71 @@
+#include "y2022_bot3/control_loops/drivetrain/drivetrain_base.h"
+
+#include <chrono>
+
+#include "frc971/control_loops/drivetrain/drivetrain_config.h"
+#include "frc971/control_loops/state_feedback_loop.h"
+#include "y2022_bot3/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
+#include "y2022_bot3/control_loops/drivetrain/hybrid_velocity_drivetrain.h"
+#include "y2022_bot3/control_loops/drivetrain/kalman_drivetrain_motor_plant.h"
+#include "y2022_bot3/control_loops/drivetrain/polydrivetrain_dog_motor_plant.h"
+
+using ::frc971::control_loops::drivetrain::DownEstimatorConfig;
+using ::frc971::control_loops::drivetrain::DrivetrainConfig;
+
+namespace chrono = ::std::chrono;
+
+namespace y2022_bot3 {
+namespace control_loops {
+namespace drivetrain {
+
+using ::frc971::constants::ShifterHallEffect;
+
+const ShifterHallEffect kThreeStateDriveShifter{0.0, 0.0, 0.25, 0.75};
+
+const DrivetrainConfig<double> &GetDrivetrainConfig() {
+  // Yaw of the IMU relative to the robot frame.
+  static constexpr double kImuYaw = 0.0;
+  static DrivetrainConfig<double> kDrivetrainConfig{
+      ::frc971::control_loops::drivetrain::ShifterType::SIMPLE_SHIFTER,
+      ::frc971::control_loops::drivetrain::LoopType::CLOSED_LOOP,
+      ::frc971::control_loops::drivetrain::GyroType::SPARTAN_GYRO,
+      ::frc971::control_loops::drivetrain::IMUType::IMU_FLIPPED_X,
+
+      drivetrain::MakeDrivetrainLoop,
+      drivetrain::MakeVelocityDrivetrainLoop,
+      drivetrain::MakeKFDrivetrainLoop,
+      drivetrain::MakeHybridVelocityDrivetrainLoop,
+
+      chrono::duration_cast<chrono::nanoseconds>(
+          chrono::duration<double>(drivetrain::kDt)),
+      drivetrain::kRobotRadius,
+      drivetrain::kWheelRadius,
+      drivetrain::kV,
+
+      drivetrain::kHighGearRatio,
+      drivetrain::kLowGearRatio,
+      drivetrain::kJ,
+      drivetrain::kMass,
+      kThreeStateDriveShifter,
+      kThreeStateDriveShifter,
+      true /* default_high_gear */,
+      0 /* down_offset if using constants use
+     constants::GetValues().down_error */
+      ,
+      0.7 /* wheel_non_linearity */,
+      1.2 /* quickturn_wheel_multiplier */,
+      1.2 /* wheel_multiplier */,
+      true /*pistol_grip_shift_enables_line_follow*/,
+      (Eigen::Matrix<double, 3, 3>() << std::cos(kImuYaw), -std::sin(kImuYaw),
+       0.0, std::sin(kImuYaw), std::cos(kImuYaw), 0.0, 0.0, 0.0, 1.0)
+          .finished(),
+      false /*is_simulated*/,
+      DownEstimatorConfig{.gravity_threshold = 0.015,
+                          .do_accel_corrections = 1000}};
+
+  return kDrivetrainConfig;
+};
+
+}  // namespace drivetrain
+}  // namespace control_loops
+}  // namespace y2022_bot3
diff --git a/y2022_bot3/control_loops/drivetrain/drivetrain_base.h b/y2022_bot3/control_loops/drivetrain/drivetrain_base.h
new file mode 100644
index 0000000..cce197e
--- /dev/null
+++ b/y2022_bot3/control_loops/drivetrain/drivetrain_base.h
@@ -0,0 +1,17 @@
+#ifndef Y2022_BOT3_CONTROL_LOOPS_DRIVETRAIN_DRIVETRAIN_BASE_H_
+#define Y2022_BOT3_CONTROL_LOOPS_DRIVETRAIN_DRIVETRAIN_BASE_H_
+
+#include "frc971/control_loops/drivetrain/drivetrain_config.h"
+
+namespace y2022_bot3 {
+namespace control_loops {
+namespace drivetrain {
+
+const ::frc971::control_loops::drivetrain::DrivetrainConfig<double>
+    &GetDrivetrainConfig();
+
+}  // namespace drivetrain
+}  // namespace control_loops
+}  // namespace y2022_bot3
+
+#endif  // Y2022_BOT3_CONTROL_LOOPS_DRIVETRAIN_DRIVETRAIN_BASE_H_
diff --git a/y2022_bot3/control_loops/drivetrain/drivetrain_main.cc b/y2022_bot3/control_loops/drivetrain/drivetrain_main.cc
new file mode 100644
index 0000000..fda7119
--- /dev/null
+++ b/y2022_bot3/control_loops/drivetrain/drivetrain_main.cc
@@ -0,0 +1,25 @@
+#include <memory>
+
+#include "aos/events/shm_event_loop.h"
+#include "aos/init.h"
+#include "frc971/control_loops/drivetrain/drivetrain.h"
+#include "y2022_bot3/control_loops/drivetrain/drivetrain_base.h"
+
+using ::frc971::control_loops::drivetrain::DrivetrainLoop;
+
+int main(int argc, char **argv) {
+  aos::InitGoogle(&argc, &argv);
+
+  aos::FlatbufferDetachedBuffer<aos::Configuration> config =
+      aos::configuration::ReadConfig("aos_config.json");
+
+  aos::ShmEventLoop event_loop(&config.message());
+  std::unique_ptr<::frc971::control_loops::drivetrain::DeadReckonEkf>
+      localizer =
+          std::make_unique<::frc971::control_loops::drivetrain::DeadReckonEkf>(
+              &event_loop,
+              ::y2022_bot3::control_loops::drivetrain::GetDrivetrainConfig());
+  event_loop.Run();
+
+  return 0;
+}
diff --git a/y2022_bot3/control_loops/drivetrain/drivetrain_simulation_config.json b/y2022_bot3/control_loops/drivetrain/drivetrain_simulation_config.json
new file mode 100644
index 0000000..5ccc572
--- /dev/null
+++ b/y2022_bot3/control_loops/drivetrain/drivetrain_simulation_config.json
@@ -0,0 +1,6 @@
+{
+  "imports": [
+    "../../y2022_bot3.json",
+    "../../../frc971/control_loops/drivetrain/drivetrain_simulation_channels.json"
+  ]
+}
diff --git a/y2022_bot3/control_loops/drivetrain/trajectory_generator_main.cc b/y2022_bot3/control_loops/drivetrain/trajectory_generator_main.cc
new file mode 100644
index 0000000..644ae8d
--- /dev/null
+++ b/y2022_bot3/control_loops/drivetrain/trajectory_generator_main.cc
@@ -0,0 +1,40 @@
+#include <sys/resource.h>
+#include <sys/time.h>
+
+#include "aos/events/shm_event_loop.h"
+#include "aos/init.h"
+#include "frc971/control_loops/drivetrain/trajectory_generator.h"
+#include "y2022_bot3/control_loops/drivetrain/drivetrain_base.h"
+
+using ::frc971::control_loops::drivetrain::TrajectoryGenerator;
+
+DEFINE_bool(skip_renicing, false,
+            "If true, skip renicing the trajectory generator.");
+
+int main(int argc, char *argv[]) {
+  ::aos::InitGoogle(&argc, &argv);
+
+  aos::FlatbufferDetachedBuffer<aos::Configuration> config =
+      aos::configuration::ReadConfig("aos_config.json");
+
+  ::aos::ShmEventLoop event_loop(&config.message());
+  TrajectoryGenerator generator(
+      &event_loop,
+      ::y2022_bot3::control_loops::drivetrain::GetDrivetrainConfig());
+
+  event_loop.OnRun([]() {
+    if (FLAGS_skip_renicing) {
+      LOG(WARNING) << "Ignoring request to renice to -20 due to "
+                      "--skip_renicing.";
+    } else {
+      errno = 0;
+      setpriority(PRIO_PROCESS, 0, -20);
+      PCHECK(errno == 0)
+          << ": Renicing to -20 failed, use --skip_renicing to skip renicing.";
+    }
+  });
+
+  event_loop.Run();
+
+  return 0;
+}
diff --git a/y2022_bot3/control_loops/python/BUILD b/y2022_bot3/control_loops/python/BUILD
new file mode 100644
index 0000000..b2ce1be
--- /dev/null
+++ b/y2022_bot3/control_loops/python/BUILD
@@ -0,0 +1,89 @@
+package(default_visibility = ["//y2022_bot3:__subpackages__"])
+
+py_binary(
+    name = "drivetrain",
+    srcs = [
+        "drivetrain.py",
+    ],
+    legacy_create_init = False,
+    target_compatible_with = ["@platforms//cpu:x86_64"],
+    deps = [
+        ":python_init",
+        "//external:python-gflags",
+        "//external:python-glog",
+        "//frc971/control_loops/python:drivetrain",
+    ],
+)
+
+py_binary(
+    name = "polydrivetrain",
+    srcs = [
+        "drivetrain.py",
+        "polydrivetrain.py",
+    ],
+    legacy_create_init = False,
+    target_compatible_with = ["@platforms//cpu:x86_64"],
+    deps = [
+        ":python_init",
+        "//external:python-gflags",
+        "//external:python-glog",
+        "//frc971/control_loops/python:polydrivetrain",
+    ],
+)
+
+py_library(
+    name = "polydrivetrain_lib",
+    srcs = [
+        "drivetrain.py",
+        "polydrivetrain.py",
+    ],
+    target_compatible_with = ["@platforms//cpu:x86_64"],
+    visibility = ["//visibility:public"],
+    deps = [
+        "//external:python-gflags",
+        "//external:python-glog",
+        "//frc971/control_loops/python:controls",
+        "//frc971/control_loops/python:drivetrain",
+        "//frc971/control_loops/python:polydrivetrain",
+    ],
+)
+
+py_binary(
+    name = "climber",
+    srcs = [
+        "climber.py",
+    ],
+    legacy_create_init = False,
+    target_compatible_with = ["@platforms//cpu:x86_64"],
+    deps = [
+        ":python_init",
+        "//external:python-gflags",
+        "//external:python-glog",
+        "//frc971/control_loops/python:controls",
+        "//frc971/control_loops/python:linear_system",
+    ],
+)
+
+py_binary(
+    name = "intake",
+    srcs = [
+        "intake.py",
+    ],
+    legacy_create_init = False,
+    target_compatible_with = ["@platforms//cpu:x86_64"],
+    deps = [
+        ":python_init",
+        "//external:python-gflags",
+        "//external:python-glog",
+        "//frc971/control_loops/python:angular_system",
+        "//frc971/control_loops/python:controls",
+    ],
+)
+
+py_library(
+    name = "python_init",
+    srcs = ["__init__.py"],
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+    deps = ["//y2022_bot3/control_loops:python_init"],
+)
diff --git a/third_party/rules_rust/bindgen/raze/remote/BUILD.bazel b/y2022_bot3/control_loops/python/__init__.py
similarity index 100%
copy from third_party/rules_rust/bindgen/raze/remote/BUILD.bazel
copy to y2022_bot3/control_loops/python/__init__.py
diff --git a/y2022_bot3/control_loops/python/climber.py b/y2022_bot3/control_loops/python/climber.py
new file mode 100644
index 0000000..9a444c3
--- /dev/null
+++ b/y2022_bot3/control_loops/python/climber.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python3

+

+from frc971.control_loops.python import control_loop

+from frc971.control_loops.python import linear_system

+import numpy

+import sys

+import gflags

+import glog

+

+FLAGS = gflags.FLAGS

+

+try:

+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')

+except gflags.DuplicateFlagError:

+    pass

+

+kClimber = linear_system.LinearSystemParams(

+    name='Climber',

+    motor=control_loop.Falcon(),

+    # TODO(Thiago): Change gear ratios when we have all of them

+    G=(1.0 / 4.0) * (1.0 / 3.0) * (1.0 / 3.0),

+    radius=22 * 0.25 / numpy.pi / 2.0 * 0.0254,

+    mass=2.0,

+    q_pos=0.10,

+    q_vel=1.35,

+    kalman_q_pos=0.12,

+    kalman_q_vel=2.00,

+    kalman_q_voltage=35.0,

+    kalman_r_position=0.05)

+

+

+def main(argv):

+    if FLAGS.plot:

+        R = numpy.matrix([[0.2], [0.0]])

+        linear_system.PlotKick(kClimber, R, plant_params=kClimber)

+        linear_system.PlotMotion(kClimber,

+                                 R,

+                                 max_velocity=5.0,

+                                 plant_params=kClimber)

+

+    # Write the generated constants out to a file.

+    if len(argv) != 5:

+        glog.fatal(

+            'Expected .h file name and .cc file name for the climber and integral climber.'

+        )

+    else:

+        namespaces = [

+            'y2022_bot3', 'control_loops', 'superstructure', 'climber'

+        ]

+        linear_system.WriteLinearSystem(kClimber, argv[1:3], argv[3:5],

+                                        namespaces)

+

+

+if __name__ == '__main__':

+    argv = FLAGS(sys.argv)

+    glog.init()

+    sys.exit(main(argv))

diff --git a/y2022_bot3/control_loops/python/drivetrain.py b/y2022_bot3/control_loops/python/drivetrain.py
new file mode 100644
index 0000000..8c5a2f8
--- /dev/null
+++ b/y2022_bot3/control_loops/python/drivetrain.py
@@ -0,0 +1,48 @@
+#!/usr/bin/python3
+
+from __future__ import print_function
+from frc971.control_loops.python import drivetrain
+from frc971.control_loops.python import control_loop
+import sys
+
+import gflags
+import glog
+
+FLAGS = gflags.FLAGS
+
+gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
+
+kDrivetrain = drivetrain.DrivetrainParams(
+    J=6.0,
+    mass=58.0,
+    # TODO(austin): Measure radius a bit better.
+    robot_radius=0.39,
+    wheel_radius=2.5 * 0.0254,
+    motor_type=control_loop.Falcon(),
+    num_motors=3,
+    G=(14.0 / 54.0) * (22.0 / 56.0),
+    q_pos=0.24,
+    q_vel=2.5,
+    efficiency=0.80,
+    has_imu=True,
+    force=True,
+    kf_q_voltage=1.0,
+    controller_poles=[0.82, 0.82])
+
+
+def main(argv):
+    argv = FLAGS(argv)
+    glog.init()
+
+    if FLAGS.plot:
+        drivetrain.PlotDrivetrainMotions(kDrivetrain)
+    elif len(argv) != 5:
+        print("Expected .h file name and .cc file name")
+    else:
+        # Write the generated constants out to a file.
+        drivetrain.WriteDrivetrain(argv[1:3], argv[3:5], 'y2022_bot3',
+                                   kDrivetrain)
+
+
+if __name__ == '__main__':
+    sys.exit(main(sys.argv))
diff --git a/y2022_bot3/control_loops/python/intake.py b/y2022_bot3/control_loops/python/intake.py
new file mode 100644
index 0000000..9f23227
--- /dev/null
+++ b/y2022_bot3/control_loops/python/intake.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python3

+

+from aos.util.trapezoid_profile import TrapezoidProfile

+from frc971.control_loops.python import control_loop

+from frc971.control_loops.python import angular_system

+from frc971.control_loops.python import controls

+import numpy

+import sys

+from matplotlib import pylab

+import gflags

+import glog

+

+FLAGS = gflags.FLAGS

+

+try:

+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')

+except gflags.DuplicateFlagError:

+    pass

+

+kIntake = angular_system.AngularSystemParams(

+    name='Intake',

+    motor=control_loop.Falcon(),

+    # TODO(Thiago): Change gear ratios when we have all of them

+    G=0.02,

+    J=0.34,

+    q_pos=0.40,

+    q_vel=20.0,

+    kalman_q_pos=0.12,

+    kalman_q_vel=2.0,

+    kalman_q_voltage=4.0,

+    kalman_r_position=0.05,

+    radius=13 * 0.0254)

+

+

+def main(argv):

+    if FLAGS.plot:

+        R = numpy.matrix([[numpy.pi / 2.0], [0.0]])

+        angular_system.PlotKick(kIntake, R)

+        angular_system.PlotMotion(kIntake, R)

+

+    # Write the generated constants out to a file.

+    if len(argv) != 5:

+        glog.fatal(

+            'Expected .h file name and .cc file name for the intake and integral intake.'

+        )

+    else:

+        namespaces = [

+            'y2022_bot3', 'control_loops', 'superstructure', 'intake'

+        ]

+        angular_system.WriteAngularSystem(kIntake, argv[1:3], argv[3:5],

+                                          namespaces)

+

+

+if __name__ == '__main__':

+    argv = FLAGS(sys.argv)

+    glog.init()

+    sys.exit(main(argv))

diff --git a/y2022_bot3/control_loops/python/polydrivetrain.py b/y2022_bot3/control_loops/python/polydrivetrain.py
new file mode 100644
index 0000000..14b9285
--- /dev/null
+++ b/y2022_bot3/control_loops/python/polydrivetrain.py
@@ -0,0 +1,34 @@
+#!/usr/bin/python3
+
+import sys
+from y2022_bot3.control_loops.python import drivetrain
+from frc971.control_loops.python import polydrivetrain
+
+import gflags
+import glog
+
+__author__ = 'Austin Schuh (austin.linux@gmail.com)'
+
+FLAGS = gflags.FLAGS
+
+try:
+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
+except gflags.DuplicateFlagError:
+    pass
+
+
+def main(argv):
+    if FLAGS.plot:
+        polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
+    elif len(argv) != 7:
+        glog.fatal('Expected .h file name and .cc file name')
+    else:
+        polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7],
+                                           'y2022_bot3',
+                                           drivetrain.kDrivetrain)
+
+
+if __name__ == '__main__':
+    argv = FLAGS(sys.argv)
+    glog.init()
+    sys.exit(main(argv))
diff --git a/y2022_bot3/control_loops/superstructure/BUILD b/y2022_bot3/control_loops/superstructure/BUILD
new file mode 100644
index 0000000..36a6c19
--- /dev/null
+++ b/y2022_bot3/control_loops/superstructure/BUILD
@@ -0,0 +1,130 @@
+load("@com_github_google_flatbuffers//:build_defs.bzl", "flatbuffer_cc_library", "flatbuffer_ts_library")
+
+package(default_visibility = ["//visibility:public"])
+
+flatbuffer_cc_library(
+    name = "superstructure_goal_fbs",
+    srcs = [
+        "superstructure_goal.fbs",
+    ],
+    gen_reflections = 1,
+    includes = [
+        "//frc971/control_loops:control_loops_fbs_includes",
+        "//frc971/control_loops:profiled_subsystem_fbs_includes",
+    ],
+)
+
+flatbuffer_cc_library(
+    name = "superstructure_output_fbs",
+    srcs = [
+        "superstructure_output.fbs",
+    ],
+    gen_reflections = 1,
+)
+
+flatbuffer_cc_library(
+    name = "superstructure_status_fbs",
+    srcs = [
+        "superstructure_status.fbs",
+    ],
+    gen_reflections = 1,
+    includes = [
+        "//frc971/control_loops:control_loops_fbs_includes",
+        "//frc971/control_loops:profiled_subsystem_fbs_includes",
+    ],
+)
+
+flatbuffer_ts_library(
+    name = "superstructure_status_ts_fbs",
+    srcs = [
+        "superstructure_status.fbs",
+    ],
+    deps = [
+        "//frc971/control_loops:control_loops_ts_fbs",
+        "//frc971/control_loops:profiled_subsystem_ts_fbs",
+    ],
+)
+
+flatbuffer_cc_library(
+    name = "superstructure_position_fbs",
+    srcs = [
+        "superstructure_position.fbs",
+    ],
+    gen_reflections = 1,
+    includes = [
+        "//frc971/control_loops:control_loops_fbs_includes",
+        "//frc971/control_loops:profiled_subsystem_fbs_includes",
+    ],
+)
+
+cc_library(
+    name = "superstructure_lib",
+    srcs = [
+        "superstructure.cc",
+    ],
+    hdrs = [
+        "superstructure.h",
+    ],
+    deps = [
+        ":superstructure_goal_fbs",
+        ":superstructure_output_fbs",
+        ":superstructure_position_fbs",
+        ":superstructure_status_fbs",
+        "//aos:flatbuffer_merge",
+        "//aos/events:event_loop",
+        "//frc971/control_loops:control_loop",
+        "//frc971/control_loops/drivetrain:drivetrain_status_fbs",
+        "//y2022_bot3:constants",
+    ],
+)
+
+cc_binary(
+    name = "superstructure",
+    srcs = [
+        "superstructure_main.cc",
+    ],
+    deps = [
+        ":superstructure_lib",
+        "//aos:init",
+        "//aos/events:shm_event_loop",
+    ],
+)
+
+cc_test(
+    name = "superstructure_lib_test",
+    srcs = [
+        "superstructure_lib_test.cc",
+    ],
+    data = [
+        "//y2022_bot3:aos_config",
+    ],
+    deps = [
+        ":superstructure_goal_fbs",
+        ":superstructure_lib",
+        ":superstructure_output_fbs",
+        ":superstructure_position_fbs",
+        ":superstructure_status_fbs",
+        "//aos:math",
+        "//aos/events/logging:log_writer",
+        "//aos/testing:googletest",
+        "//aos/time",
+        "//frc971/control_loops:capped_test_plant",
+        "//frc971/control_loops:control_loop_test",
+        "//frc971/control_loops:position_sensor_sim",
+        "//frc971/control_loops:team_number_test_environment",
+        "//frc971/control_loops/drivetrain:drivetrain_status_fbs",
+    ],
+)
+
+cc_binary(
+    name = "superstructure_replay",
+    srcs = ["superstructure_replay.cc"],
+    deps = [
+        ":superstructure_lib",
+        "//aos:configuration",
+        "//aos:init",
+        "//aos/events:simulated_event_loop",
+        "//aos/events/logging:log_reader",
+        "//aos/network:team_number",
+    ],
+)
diff --git a/y2022_bot3/control_loops/superstructure/climber/BUILD b/y2022_bot3/control_loops/superstructure/climber/BUILD
new file mode 100644
index 0000000..8ddf68e
--- /dev/null
+++ b/y2022_bot3/control_loops/superstructure/climber/BUILD
@@ -0,0 +1,34 @@
+package(default_visibility = ["//y2022_bot3:__subpackages__"])
+
+genrule(
+    name = "genrule_climber",
+    outs = [
+        "climber_plant.h",
+        "climber_plant.cc",
+        "integral_climber_plant.h",
+        "integral_climber_plant.cc",
+    ],
+    cmd = "$(location //y2022_bot3/control_loops/python:climber) $(OUTS)",
+    target_compatible_with = ["@platforms//os:linux"],
+    tools = [
+        "//y2022_bot3/control_loops/python:climber",
+    ],
+)
+
+cc_library(
+    name = "climber_plants",
+    srcs = [
+        "climber_plant.cc",
+        "integral_climber_plant.cc",
+    ],
+    hdrs = [
+        "climber_plant.h",
+        "integral_climber_plant.h",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+    deps = [
+        "//frc971/control_loops:hybrid_state_feedback_loop",
+        "//frc971/control_loops:state_feedback_loop",
+    ],
+)
diff --git a/y2022_bot3/control_loops/superstructure/intake/BUILD b/y2022_bot3/control_loops/superstructure/intake/BUILD
new file mode 100644
index 0000000..daf5a33
--- /dev/null
+++ b/y2022_bot3/control_loops/superstructure/intake/BUILD
@@ -0,0 +1,34 @@
+package(default_visibility = ["//y2022_bot3:__subpackages__"])
+
+genrule(
+    name = "genrule_intake",
+    outs = [
+        "intake_plant.h",
+        "intake_plant.cc",
+        "integral_intake_plant.h",
+        "integral_intake_plant.cc",
+    ],
+    cmd = "$(location //y2022_bot3/control_loops/python:intake) $(OUTS)",
+    target_compatible_with = ["@platforms//os:linux"],
+    tools = [
+        "//y2022_bot3/control_loops/python:intake",
+    ],
+)
+
+cc_library(
+    name = "intake_plants",
+    srcs = [
+        "intake_plant.cc",
+        "integral_intake_plant.cc",
+    ],
+    hdrs = [
+        "intake_plant.h",
+        "integral_intake_plant.h",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+    deps = [
+        "//frc971/control_loops:hybrid_state_feedback_loop",
+        "//frc971/control_loops:state_feedback_loop",
+    ],
+)
diff --git a/y2022_bot3/control_loops/superstructure/superstructure.cc b/y2022_bot3/control_loops/superstructure/superstructure.cc
new file mode 100644
index 0000000..5d12880
--- /dev/null
+++ b/y2022_bot3/control_loops/superstructure/superstructure.cc
@@ -0,0 +1,60 @@
+#include "y2022_bot3/control_loops/superstructure/superstructure.h"
+
+#include "aos/events/event_loop.h"
+#include "aos/flatbuffer_merge.h"
+#include "frc971/zeroing/wrap.h"
+
+namespace y2022_bot3 {
+namespace control_loops {
+namespace superstructure {
+
+using frc971::control_loops::AbsoluteEncoderProfiledJointStatus;
+using frc971::control_loops::PotAndAbsoluteEncoderProfiledJointStatus;
+using frc971::control_loops::RelativeEncoderProfiledJointStatus;
+
+Superstructure::Superstructure(::aos::EventLoop *event_loop,
+                               std::shared_ptr<const constants::Values> values,
+                               const ::std::string &name)
+    : frc971::controls::ControlLoop<Goal, Position, Status, Output>(event_loop,
+                                                                    name),
+      values_(values),
+      drivetrain_status_fetcher_(
+          event_loop->MakeFetcher<frc971::control_loops::drivetrain::Status>(
+              "/drivetrain")),
+      joystick_state_fetcher_(
+          event_loop->MakeFetcher<aos::JoystickState>("/aos")) {
+  event_loop->SetRuntimeRealtimePriority(30);
+}
+
+void Superstructure::RunIteration(const Goal *unsafe_goal,
+                                  const Position *position,
+                                  aos::Sender<Output>::Builder *output,
+                                  aos::Sender<Status>::Builder *status) {
+  (void)unsafe_goal;
+  (void)position;
+  if (WasReset()) {
+    AOS_LOG(ERROR, "WPILib reset, restarting\n");
+  }
+
+  OutputT output_struct;
+
+  if (joystick_state_fetcher_.Fetch() &&
+      joystick_state_fetcher_->has_alliance()) {
+    alliance_ = joystick_state_fetcher_->alliance();
+  }
+
+  drivetrain_status_fetcher_.Fetch();
+
+  output->CheckOk(output->Send(Output::Pack(*output->fbb(), &output_struct)));
+
+  Status::Builder status_builder = status->MakeBuilder<Status>();
+
+  status_builder.add_zeroed(true);
+  status_builder.add_estopped(false);
+
+  (void)status->Send(status_builder.Finish());
+}
+
+}  // namespace superstructure
+}  // namespace control_loops
+}  // namespace y2022_bot3
diff --git a/y2022_bot3/control_loops/superstructure/superstructure.h b/y2022_bot3/control_loops/superstructure/superstructure.h
new file mode 100644
index 0000000..91f80b4
--- /dev/null
+++ b/y2022_bot3/control_loops/superstructure/superstructure.h
@@ -0,0 +1,55 @@
+#ifndef Y2022_BOT3_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_
+#define Y2022_BOT3_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_
+
+#include "aos/events/event_loop.h"
+#include "frc971/control_loops/control_loop.h"
+#include "frc971/control_loops/drivetrain/drivetrain_status_generated.h"
+#include "y2022_bot3/constants.h"
+#include "y2022_bot3/control_loops/superstructure/superstructure_goal_generated.h"
+#include "y2022_bot3/control_loops/superstructure/superstructure_output_generated.h"
+#include "y2022_bot3/control_loops/superstructure/superstructure_position_generated.h"
+#include "y2022_bot3/control_loops/superstructure/superstructure_status_generated.h"
+
+namespace y2022_bot3 {
+namespace control_loops {
+namespace superstructure {
+
+class Superstructure
+    : public ::frc971::controls::ControlLoop<Goal, Position, Status, Output> {
+ public:
+  using RelativeEncoderSubsystem =
+      ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystem<
+          ::frc971::zeroing::RelativeEncoderZeroingEstimator,
+          ::frc971::control_loops::RelativeEncoderProfiledJointStatus>;
+
+  using PotAndAbsoluteEncoderSubsystem =
+      ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystem<
+          ::frc971::zeroing::PotAndAbsoluteEncoderZeroingEstimator,
+          ::frc971::control_loops::PotAndAbsoluteEncoderProfiledJointStatus>;
+
+  explicit Superstructure(::aos::EventLoop *event_loop,
+                          std::shared_ptr<const constants::Values> values,
+                          const ::std::string &name = "/superstructure");
+
+ protected:
+  virtual void RunIteration(const Goal *unsafe_goal, const Position *position,
+                            aos::Sender<Output>::Builder *output,
+                            aos::Sender<Status>::Builder *status) override;
+
+ private:
+  std::shared_ptr<const constants::Values> values_;
+
+  aos::Fetcher<frc971::control_loops::drivetrain::Status>
+      drivetrain_status_fetcher_;
+  aos::Fetcher<aos::JoystickState> joystick_state_fetcher_;
+
+  aos::Alliance alliance_ = aos::Alliance::kInvalid;
+
+  DISALLOW_COPY_AND_ASSIGN(Superstructure);
+};
+
+}  // namespace superstructure
+}  // namespace control_loops
+}  // namespace y2022_bot3
+
+#endif  // Y2022_BOT3_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_
diff --git a/y2022_bot3/control_loops/superstructure/superstructure_goal.fbs b/y2022_bot3/control_loops/superstructure/superstructure_goal.fbs
new file mode 100644
index 0000000..45c9265
--- /dev/null
+++ b/y2022_bot3/control_loops/superstructure/superstructure_goal.fbs
@@ -0,0 +1,19 @@
+include "frc971/control_loops/profiled_subsystem.fbs";
+
+namespace y2022_bot3.control_loops.superstructure;
+
+table Goal {
+
+  // Height of the climber arms above rest point.
+  climber_left:frc971.control_loops.StaticZeroingSingleDOFProfiledSubsystemGoal (id: 0);
+  climber_right:frc971.control_loops.StaticZeroingSingleDOFProfiledSubsystemGoal (id: 1);
+
+  // Goal angle of intake joint.
+  intake:frc971.control_loops.StaticZeroingSingleDOFProfiledSubsystemGoal (id: 2);
+
+  // Intake roller voltage, positive is pulling into the robot.
+  roller_speed:double (id: 3);
+
+}
+
+root_type Goal;
\ No newline at end of file
diff --git a/y2022_bot3/control_loops/superstructure/superstructure_lib_test.cc b/y2022_bot3/control_loops/superstructure/superstructure_lib_test.cc
new file mode 100644
index 0000000..96f6273
--- /dev/null
+++ b/y2022_bot3/control_loops/superstructure/superstructure_lib_test.cc
@@ -0,0 +1,268 @@
+#include <chrono>
+#include <memory>
+
+#include "aos/events/logging/log_writer.h"
+#include "frc971/control_loops/capped_test_plant.h"
+#include "frc971/control_loops/control_loop_test.h"
+#include "frc971/control_loops/position_sensor_sim.h"
+#include "frc971/control_loops/team_number_test_environment.h"
+#include "gtest/gtest.h"
+#include "y2022_bot3/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
+#include "y2022_bot3/control_loops/superstructure/superstructure.h"
+
+DEFINE_string(output_folder, "",
+              "If set, logs all channels to the provided logfile.");
+
+namespace y2022_bot3 {
+namespace control_loops {
+namespace superstructure {
+namespace testing {
+namespace chrono = std::chrono;
+namespace {
+constexpr double kNoiseScalar = 0.01;
+}
+
+using ::aos::monotonic_clock;
+using ::frc971::CreateProfileParameters;
+using ::frc971::control_loops::CappedTestPlant;
+using ::frc971::control_loops::
+    CreateStaticZeroingSingleDOFProfiledSubsystemGoal;
+using ::frc971::control_loops::PositionSensorSimulator;
+using ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystemGoal;
+typedef Superstructure::PotAndAbsoluteEncoderSubsystem
+    PotAndAbsoluteEncoderSubsystem;
+using DrivetrainStatus = ::frc971::control_loops::drivetrain::Status;
+
+template <typename SubsystemStatus, typename SubsystemState,
+          typename SubsystemConstants>
+
+// TODO(Henry) put this in frc971
+class SubsystemSimulator {
+ public:
+  SubsystemSimulator(CappedTestPlant *plant, PositionSensorSimulator encoder,
+                     const SubsystemConstants subsystem_constants,
+                     const frc971::constants::Range range,
+                     double encoder_offset, const chrono::nanoseconds dt)
+      : plant_(plant),
+        encoder_(encoder),
+        subsystem_constants_(subsystem_constants),
+        range_(range),
+        encoder_offset_(encoder_offset),
+        dt_(dt) {}
+
+  void InitializePosition(double start_pos) {
+    plant_->mutable_X(0, 0) = start_pos;
+    plant_->mutable_X(1, 0) = 0.0;
+
+    encoder_.Initialize(start_pos, kNoiseScalar, 0.0, encoder_offset_);
+  }
+
+  // Simulates the superstructure for a single timestep.
+  void Simulate(double voltage, const SubsystemStatus *status) {
+    double last_velocity = plant_->X(1, 0);
+
+    const double voltage_check =
+        (static_cast<SubsystemState>(status->state()) ==
+         SubsystemState::RUNNING)
+            ? subsystem_constants_.subsystem_params.operating_voltage
+            : subsystem_constants_.subsystem_params.zeroing_voltage;
+
+    EXPECT_NEAR(voltage, 0.0, voltage_check);
+
+    ::Eigen::Matrix<double, 1, 1> U;
+    U << voltage + plant_->voltage_offset();
+    plant_->Update(U);
+
+    const double position = plant_->Y(0, 0);
+
+    encoder_.MoveTo(position);
+
+    EXPECT_GE(position, range_.lower_hard);
+    EXPECT_LE(position, range_.upper_hard);
+
+    const double loop_time = ::aos::time::DurationInSeconds(dt_);
+
+    const double velocity = plant_->X(1, 0);
+    const double acceleration = (velocity - last_velocity) / loop_time;
+
+    EXPECT_GE(peak_acceleration_, acceleration);
+    EXPECT_LE(-peak_acceleration_, acceleration);
+    EXPECT_GE(peak_velocity_, velocity);
+    EXPECT_LE(-peak_velocity_, velocity);
+  }
+
+  void set_peak_acceleration(double value) { peak_acceleration_ = value; }
+  void set_peak_velocity(double value) { peak_velocity_ = value; }
+
+  void set_controller_index(size_t index) { plant_->set_index(index); }
+
+  PositionSensorSimulator *encoder() { return &encoder_; }
+
+ private:
+  std::unique_ptr<CappedTestPlant> plant_;
+  PositionSensorSimulator encoder_;
+  const SubsystemConstants subsystem_constants_;
+  const frc971::constants::Range range_;
+
+  double encoder_offset_ = 0.0;
+
+  double peak_velocity_ = std::numeric_limits<double>::infinity();
+  double peak_acceleration_ = std::numeric_limits<double>::infinity();
+
+  const chrono::nanoseconds dt_;
+};
+
+using PotAndAbsoluteEncoderSimulator = SubsystemSimulator<
+    frc971::control_loops::PotAndAbsoluteEncoderProfiledJointStatus,
+    PotAndAbsoluteEncoderSubsystem::State,
+    constants::Values::PotAndAbsEncoderConstants>;
+
+// Class which simulates the superstructure and sends out queue messages with
+// the position.
+class SuperstructureSimulation {
+ public:
+  SuperstructureSimulation(::aos::EventLoop *event_loop,
+                           std::shared_ptr<const constants::Values> values,
+                           chrono::nanoseconds dt)
+      : event_loop_(event_loop),
+        dt_(dt),
+        superstructure_position_sender_(
+            event_loop_->MakeSender<Position>("/superstructure")),
+        superstructure_status_fetcher_(
+            event_loop_->MakeFetcher<Status>("/superstructure")),
+        superstructure_output_fetcher_(
+            event_loop_->MakeFetcher<Output>("/superstructure")) {
+    phased_loop_handle_ = event_loop_->AddPhasedLoop(
+        [this](int) {
+          // Skip this the first time.
+          if (!first_) {
+            EXPECT_TRUE(superstructure_output_fetcher_.Fetch());
+            EXPECT_TRUE(superstructure_status_fetcher_.Fetch());
+          }
+          first_ = false;
+          SendPositionMessage();
+        },
+        dt);
+    (void)values;
+    (void)dt_;
+  }
+
+  // Sends a queue message with the position of the superstructure.
+  void SendPositionMessage() {
+    ::aos::Sender<Position>::Builder builder =
+        superstructure_position_sender_.MakeBuilder();
+  }
+
+ private:
+  ::aos::EventLoop *event_loop_;
+  const chrono::nanoseconds dt_;
+  ::aos::PhasedLoopHandler *phased_loop_handle_ = nullptr;
+
+  ::aos::Sender<Position> superstructure_position_sender_;
+  ::aos::Fetcher<Status> superstructure_status_fetcher_;
+  ::aos::Fetcher<Output> superstructure_output_fetcher_;
+
+  bool first_ = true;
+};
+
+class SuperstructureTest : public ::frc971::testing::ControlLoopTest {
+ public:
+  SuperstructureTest()
+      : ::frc971::testing::ControlLoopTest(
+            aos::configuration::ReadConfig("y2022_bot3/aos_config.json"),
+            std::chrono::microseconds(5050)),
+        values_(std::make_shared<constants::Values>(constants::MakeValues(
+            frc971::control_loops::testing::kTeamNumber))),
+        roborio_(aos::configuration::GetNode(configuration(), "roborio")),
+        superstructure_event_loop(MakeEventLoop("Superstructure", roborio_)),
+        superstructure_(superstructure_event_loop.get(), values_),
+        test_event_loop_(MakeEventLoop("test", roborio_)),
+        superstructure_goal_fetcher_(
+            test_event_loop_->MakeFetcher<Goal>("/superstructure")),
+        superstructure_goal_sender_(
+            test_event_loop_->MakeSender<Goal>("/superstructure")),
+        superstructure_status_fetcher_(
+            test_event_loop_->MakeFetcher<Status>("/superstructure")),
+        superstructure_output_fetcher_(
+            test_event_loop_->MakeFetcher<Output>("/superstructure")),
+        superstructure_position_fetcher_(
+            test_event_loop_->MakeFetcher<Position>("/superstructure")),
+        superstructure_position_sender_(
+            test_event_loop_->MakeSender<Position>("/superstructure")),
+        drivetrain_status_sender_(
+            test_event_loop_->MakeSender<DrivetrainStatus>("/drivetrain")),
+        superstructure_plant_event_loop_(MakeEventLoop("plant", roborio_)),
+        superstructure_plant_(superstructure_plant_event_loop_.get(), values_,
+                              dt()) {
+    set_team_id(frc971::control_loops::testing::kTeamNumber);
+
+    SetEnabled(true);
+  }
+
+  void CheckIfZeroed() {
+    superstructure_status_fetcher_.Fetch();
+    ASSERT_TRUE(superstructure_status_fetcher_.get()->zeroed());
+  }
+
+  void WaitUntilZeroed() {
+    int i = 0;
+    do {
+      i++;
+      RunFor(dt());
+      superstructure_status_fetcher_.Fetch();
+      // 2 Seconds
+      ASSERT_LE(i, 2.0 / ::aos::time::DurationInSeconds(dt()));
+
+      // Since there is a delay when sending running, make sure we have a
+      // status before checking it.
+    } while (superstructure_status_fetcher_.get() == nullptr ||
+             !superstructure_status_fetcher_.get()->zeroed());
+  }
+
+  void SendRobotVelocity(double robot_velocity) {
+    SendDrivetrainStatus(robot_velocity, {0.0, 0.0}, 0.0);
+  }
+
+  void SendDrivetrainStatus(double robot_velocity, Eigen::Vector2d pos,
+                            double theta) {
+    // Send a robot velocity to test compensation
+    auto builder = drivetrain_status_sender_.MakeBuilder();
+    auto drivetrain_status_builder = builder.MakeBuilder<DrivetrainStatus>();
+    drivetrain_status_builder.add_robot_speed(robot_velocity);
+    drivetrain_status_builder.add_estimated_left_velocity(robot_velocity);
+    drivetrain_status_builder.add_estimated_right_velocity(robot_velocity);
+    drivetrain_status_builder.add_x(pos.x());
+    drivetrain_status_builder.add_y(pos.y());
+    drivetrain_status_builder.add_theta(theta);
+    builder.CheckOk(builder.Send(drivetrain_status_builder.Finish()));
+  }
+
+  std::shared_ptr<const constants::Values> values_;
+
+  const aos::Node *const roborio_;
+
+  ::std::unique_ptr<::aos::EventLoop> superstructure_event_loop;
+  ::y2022_bot3::control_loops::superstructure::Superstructure superstructure_;
+  ::std::unique_ptr<::aos::EventLoop> test_event_loop_;
+  ::aos::PhasedLoopHandler *phased_loop_handle_ = nullptr;
+
+  ::aos::Fetcher<Goal> superstructure_goal_fetcher_;
+  ::aos::Sender<Goal> superstructure_goal_sender_;
+  ::aos::Fetcher<Status> superstructure_status_fetcher_;
+  ::aos::Fetcher<Output> superstructure_output_fetcher_;
+  ::aos::Fetcher<Position> superstructure_position_fetcher_;
+  ::aos::Sender<Position> superstructure_position_sender_;
+  ::aos::Sender<DrivetrainStatus> drivetrain_status_sender_;
+
+  ::std::unique_ptr<::aos::EventLoop> superstructure_plant_event_loop_;
+  SuperstructureSimulation superstructure_plant_;
+
+  std::unique_ptr<aos::EventLoop> logger_event_loop_;
+  std::unique_ptr<aos::logger::Logger> logger_;
+
+};  // namespace testing
+
+}  // namespace testing
+}  // namespace superstructure
+}  // namespace control_loops
+}  // namespace y2022_bot3
diff --git a/y2022_bot3/control_loops/superstructure/superstructure_main.cc b/y2022_bot3/control_loops/superstructure/superstructure_main.cc
new file mode 100644
index 0000000..7a82237
--- /dev/null
+++ b/y2022_bot3/control_loops/superstructure/superstructure_main.cc
@@ -0,0 +1,21 @@
+#include "aos/events/shm_event_loop.h"
+#include "aos/init.h"
+#include "y2022_bot3/control_loops/superstructure/superstructure.h"
+
+int main(int argc, char **argv) {
+  ::aos::InitGoogle(&argc, &argv);
+
+  aos::FlatbufferDetachedBuffer<aos::Configuration> config =
+      aos::configuration::ReadConfig("aos_config.json");
+
+  ::aos::ShmEventLoop event_loop(&config.message());
+  std::shared_ptr<const y2022_bot3::constants::Values> values =
+      std::make_shared<const y2022_bot3::constants::Values>(
+          y2022_bot3::constants::MakeValues());
+  ::y2022_bot3::control_loops::superstructure::Superstructure superstructure(
+      &event_loop, values);
+
+  event_loop.Run();
+
+  return 0;
+}
diff --git a/y2022_bot3/control_loops/superstructure/superstructure_output.fbs b/y2022_bot3/control_loops/superstructure/superstructure_output.fbs
new file mode 100644
index 0000000..e953034
--- /dev/null
+++ b/y2022_bot3/control_loops/superstructure/superstructure_output.fbs
@@ -0,0 +1,17 @@
+namespace y2022_bot3.control_loops.superstructure;
+
+table Output {
+
+  // Voltage of the climber falcons, - is down + is up
+  climber_voltage_right:double (id: 0);
+  climber_voltage_left:double (id: 1);
+
+  // Intake joint voltage.
+  intake_voltage:double (id: 2);
+
+  // Intake roller voltage, positive is pulling into the robot
+  roller_voltage:double (id: 3);
+
+}
+
+root_type Output;
\ No newline at end of file
diff --git a/y2022_bot3/control_loops/superstructure/superstructure_position.fbs b/y2022_bot3/control_loops/superstructure/superstructure_position.fbs
new file mode 100644
index 0000000..4474950
--- /dev/null
+++ b/y2022_bot3/control_loops/superstructure/superstructure_position.fbs
@@ -0,0 +1,16 @@
+include "frc971/control_loops/control_loops.fbs";
+
+namespace y2022_bot3.control_loops.superstructure;
+
+table Position {
+
+  // Position of climber arms, positive is up.
+  climber_right:frc971.PotAndAbsolutePosition (id: 0);
+  climber_left:frc971.PotAndAbsolutePosition (id: 1);
+
+  // Zero for the intake position value is horizontal, positive is up.
+  intake:frc971.PotAndAbsolutePosition (id: 2);
+
+}
+
+root_type Position;
\ No newline at end of file
diff --git a/y2022_bot3/control_loops/superstructure/superstructure_replay.cc b/y2022_bot3/control_loops/superstructure/superstructure_replay.cc
new file mode 100644
index 0000000..4e041fc
--- /dev/null
+++ b/y2022_bot3/control_loops/superstructure/superstructure_replay.cc
@@ -0,0 +1,75 @@
+// This binary allows us to replay the superstructure code over existing
+// logfile. When you run this code, it generates a new logfile with the data all
+// replayed, so that it can then be run through the plotting tool or analyzed
+// in some other way. The original superstructure status data will be on the
+// /original/superstructure channel.
+#include "aos/events/logging/log_reader.h"
+#include "aos/events/logging/log_writer.h"
+#include "aos/events/simulated_event_loop.h"
+#include "aos/init.h"
+#include "aos/json_to_flatbuffer.h"
+#include "aos/logging/log_message_generated.h"
+#include "aos/network/team_number.h"
+#include "gflags/gflags.h"
+#include "y2022_bot3/constants.h"
+#include "y2022_bot3/control_loops/superstructure/superstructure.h"
+
+DEFINE_int32(team, 971, "Team number to use for logfile replay.");
+DEFINE_string(output_folder, "/tmp/superstructure_replay/",
+              "Logs all channels to the provided logfile.");
+
+int main(int argc, char **argv) {
+  aos::InitGoogle(&argc, &argv);
+
+  aos::network::OverrideTeamNumber(FLAGS_team);
+
+  // open logfiles
+  aos::logger::LogReader reader(
+      aos::logger::SortParts(aos::logger::FindLogs(argc, argv)));
+  // TODO(james): Actually enforce not sending on the same buses as the logfile
+  // spews out.
+  reader.RemapLoggedChannel("/superstructure",
+                            "y2022_bot3.control_loops.superstructure.Status");
+  reader.RemapLoggedChannel("/superstructure",
+                            "y2022_bot3.control_loops.superstructure.Output");
+
+  aos::SimulatedEventLoopFactory factory(reader.configuration());
+  reader.Register(&factory);
+
+  aos::NodeEventLoopFactory *roborio =
+      factory.GetNodeEventLoopFactory("roborio");
+
+  unlink(FLAGS_output_folder.c_str());
+  std::unique_ptr<aos::EventLoop> logger_event_loop =
+      roborio->MakeEventLoop("logger");
+  auto logger = std::make_unique<aos::logger::Logger>(logger_event_loop.get());
+  logger->StartLoggingOnRun(FLAGS_output_folder);
+
+  roborio->OnStartup([roborio]() {
+    roborio->AlwaysStart<
+        y2022_bot3::control_loops::superstructure::Superstructure>(
+        "superstructure", std::make_shared<y2022_bot3::constants::Values>(
+                              y2022_bot3::constants::MakeValues()));
+  });
+
+  std::unique_ptr<aos::EventLoop> print_loop = roborio->MakeEventLoop("print");
+  print_loop->SkipAosLog();
+  print_loop->MakeWatcher(
+      "/aos", [&print_loop](const aos::logging::LogMessageFbs &msg) {
+        LOG(INFO) << print_loop->context().monotonic_event_time << " "
+                  << aos::FlatbufferToJson(&msg);
+      });
+  print_loop->MakeWatcher(
+      "/superstructure",
+      [&](const y2022_bot3::control_loops::superstructure::Status &status) {
+        if (status.estopped()) {
+          LOG(ERROR) << "Estopped";
+        }
+      });
+
+  factory.Run();
+
+  reader.Deregister();
+
+  return 0;
+}
diff --git a/y2022_bot3/control_loops/superstructure/superstructure_status.fbs b/y2022_bot3/control_loops/superstructure/superstructure_status.fbs
new file mode 100644
index 0000000..c400230
--- /dev/null
+++ b/y2022_bot3/control_loops/superstructure/superstructure_status.fbs
@@ -0,0 +1,22 @@
+include "frc971/control_loops/control_loops.fbs";
+include "frc971/control_loops/profiled_subsystem.fbs";
+
+namespace y2022_bot3.control_loops.superstructure;
+
+table Status {
+  // All subsystems know their location.
+  zeroed:bool (id: 0);
+
+  // If true, we have aborted. This is the or of all subsystem estops.
+  estopped:bool (id: 1);
+
+  // Estimated Angles + Velocities of the Intake
+  intake:frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus (id: 2);
+
+  // Statuses of Two Climbing Arms
+  climber_right:frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus (id: 3);
+
+  climber_left:frc971.control_loops.PotAndAbsoluteEncoderProfiledJointStatus (id: 4);
+}
+
+root_type Status;
\ No newline at end of file
diff --git a/y2022_bot3/joystick_reader.cc b/y2022_bot3/joystick_reader.cc
new file mode 100644
index 0000000..25875eb
--- /dev/null
+++ b/y2022_bot3/joystick_reader.cc
@@ -0,0 +1,78 @@
+#include <unistd.h>
+
+#include <cmath>
+#include <cstdio>
+#include <cstring>
+
+#include "aos/actions/actions.h"
+#include "aos/init.h"
+#include "aos/logging/logging.h"
+#include "aos/network/team_number.h"
+#include "aos/util/log_interval.h"
+#include "frc971/autonomous/base_autonomous_actor.h"
+#include "frc971/input/action_joystick_input.h"
+#include "frc971/input/driver_station_data.h"
+#include "frc971/input/drivetrain_input.h"
+#include "frc971/input/joystick_input.h"
+#include "y2022_bot3/control_loops/drivetrain/drivetrain_base.h"
+#include "y2022_bot3/control_loops/superstructure/superstructure_goal_generated.h"
+#include "y2022_bot3/control_loops/superstructure/superstructure_status_generated.h"
+
+using frc971::input::driver_station::ButtonLocation;
+using frc971::input::driver_station::ControlBit;
+using frc971::input::driver_station::JoystickAxis;
+using frc971::input::driver_station::POVLocation;
+
+namespace y2022_bot3 {
+namespace input {
+namespace joysticks {
+
+namespace superstructure = y2022_bot3::control_loops::superstructure;
+
+class Reader : public ::frc971::input::ActionJoystickInput {
+ public:
+  Reader(::aos::EventLoop *event_loop)
+      : ::frc971::input::ActionJoystickInput(
+            event_loop,
+            ::y2022_bot3::control_loops::drivetrain::GetDrivetrainConfig(),
+            ::frc971::input::DrivetrainInputReader::InputType::kPistol, {}),
+        superstructure_goal_sender_(
+            event_loop->MakeSender<superstructure::Goal>("/superstructure")),
+        superstructure_status_fetcher_(
+            event_loop->MakeFetcher<superstructure::Status>(
+                "/superstructure")) {}
+
+  void AutoEnded() override { AOS_LOG(INFO, "Auto ended.\n"); }
+
+  void HandleTeleop(
+      const ::frc971::input::driver_station::Data & /*data*/) override {
+    superstructure_status_fetcher_.Fetch();
+    if (!superstructure_status_fetcher_.get()) {
+      AOS_LOG(ERROR, "Got no superstructure status message.\n");
+      return;
+    }
+  }
+
+ private:
+  ::aos::Sender<superstructure::Goal> superstructure_goal_sender_;
+
+  ::aos::Fetcher<superstructure::Status> superstructure_status_fetcher_;
+};
+
+}  // namespace joysticks
+}  // namespace input
+}  // namespace y2022_bot3
+
+int main(int argc, char **argv) {
+  ::aos::InitGoogle(&argc, &argv);
+
+  aos::FlatbufferDetachedBuffer<aos::Configuration> config =
+      aos::configuration::ReadConfig("aos_config.json");
+
+  ::aos::ShmEventLoop event_loop(&config.message());
+  ::y2022_bot3::input::joysticks::Reader reader(&event_loop);
+
+  event_loop.Run();
+
+  return 0;
+}
diff --git a/y2022_bot3/log_web_proxy.sh b/y2022_bot3/log_web_proxy.sh
new file mode 100755
index 0000000..4abdc19
--- /dev/null
+++ b/y2022_bot3/log_web_proxy.sh
@@ -0,0 +1 @@
+./aos/network/log_web_proxy_main --data_dir=y2022_bot3/www $@
diff --git a/y2022_bot3/wpilib_interface.cc b/y2022_bot3/wpilib_interface.cc
new file mode 100644
index 0000000..c591c9d
--- /dev/null
+++ b/y2022_bot3/wpilib_interface.cc
@@ -0,0 +1,366 @@
+#include <unistd.h>
+
+#include <array>
+#include <chrono>
+#include <cinttypes>
+#include <cmath>
+#include <cstdio>
+#include <cstring>
+#include <functional>
+#include <memory>
+#include <mutex>
+#include <thread>
+
+#include "ctre/phoenix/CANifier.h"
+#include "frc971/wpilib/ahal/AnalogInput.h"
+#include "frc971/wpilib/ahal/Counter.h"
+#include "frc971/wpilib/ahal/DigitalGlitchFilter.h"
+#include "frc971/wpilib/ahal/DriverStation.h"
+#include "frc971/wpilib/ahal/Encoder.h"
+#include "frc971/wpilib/ahal/Servo.h"
+#include "frc971/wpilib/ahal/TalonFX.h"
+#include "frc971/wpilib/ahal/VictorSP.h"
+#undef ERROR
+
+#include "aos/commonmath.h"
+#include "aos/events/event_loop.h"
+#include "aos/events/shm_event_loop.h"
+#include "aos/init.h"
+#include "aos/logging/logging.h"
+#include "aos/realtime.h"
+#include "aos/time/time.h"
+#include "aos/util/log_interval.h"
+#include "aos/util/phased_loop.h"
+#include "aos/util/wrapping_counter.h"
+#include "ctre/phoenix/motorcontrol/can/TalonFX.h"
+#include "ctre/phoenix/motorcontrol/can/TalonSRX.h"
+#include "frc971/autonomous/auto_mode_generated.h"
+#include "frc971/control_loops/drivetrain/drivetrain_position_generated.h"
+#include "frc971/input/robot_state_generated.h"
+#include "frc971/queues/gyro_generated.h"
+#include "frc971/wpilib/ADIS16448.h"
+#include "frc971/wpilib/buffered_pcm.h"
+#include "frc971/wpilib/buffered_solenoid.h"
+#include "frc971/wpilib/dma.h"
+#include "frc971/wpilib/drivetrain_writer.h"
+#include "frc971/wpilib/encoder_and_potentiometer.h"
+#include "frc971/wpilib/joystick_sender.h"
+#include "frc971/wpilib/logging_generated.h"
+#include "frc971/wpilib/loop_output_handler.h"
+#include "frc971/wpilib/pdp_fetcher.h"
+#include "frc971/wpilib/sensor_reader.h"
+#include "frc971/wpilib/wpilib_robot_base.h"
+#include "y2022_bot3/constants.h"
+#include "y2022_bot3/control_loops/superstructure/superstructure_output_generated.h"
+#include "y2022_bot3/control_loops/superstructure/superstructure_position_generated.h"
+
+using ::aos::monotonic_clock;
+using ::y2022_bot3::constants::Values;
+namespace superstructure = ::y2022_bot3::control_loops::superstructure;
+namespace chrono = ::std::chrono;
+using std::make_unique;
+
+namespace y2022_bot3 {
+namespace wpilib {
+namespace {
+
+constexpr double kMaxBringupPower = 12.0;
+
+// TODO(Brian): Fix the interpretation of the result of GetRaw here and in the
+// DMA stuff and then removing the * 2.0 in *_translate.
+// The low bit is direction.
+
+double drivetrain_velocity_translate(double in) {
+  return (((1.0 / in) / Values::kDrivetrainCyclesPerRevolution()) *
+          (2.0 * M_PI)) *
+         Values::kDrivetrainEncoderRatio() *
+         control_loops::drivetrain::kWheelRadius;
+}
+
+constexpr double kMaxFastEncoderPulsesPerSecond =
+    Values::kMaxDrivetrainEncoderPulsesPerSecond();
+static_assert(kMaxFastEncoderPulsesPerSecond <= 1300000,
+              "fast encoders are too fast");
+constexpr double kMaxMediumEncoderPulsesPerSecond = 0;
+
+static_assert(kMaxMediumEncoderPulsesPerSecond <= 400000,
+              "medium encoders are too fast");
+
+}  // namespace
+
+// Class to send position messages with sensor readings to our loops.
+class SensorReader : public ::frc971::wpilib::SensorReader {
+ public:
+  SensorReader(::aos::ShmEventLoop *event_loop,
+               std::shared_ptr<const Values> values)
+      : ::frc971::wpilib::SensorReader(event_loop),
+        values_(std::move(values)),
+        auto_mode_sender_(
+            event_loop->MakeSender<::frc971::autonomous::AutonomousMode>(
+                "/autonomous")),
+        superstructure_position_sender_(
+            event_loop->MakeSender<superstructure::Position>(
+                "/superstructure")),
+        drivetrain_position_sender_(
+            event_loop
+                ->MakeSender<::frc971::control_loops::drivetrain::Position>(
+                    "/drivetrain")),
+        gyro_sender_(event_loop->MakeSender<::frc971::sensors::GyroReading>(
+            "/drivetrain")) {
+    // Set to filter out anything shorter than 1/4 of the minimum pulse width
+    // we should ever see.
+    UpdateFastEncoderFilterHz(kMaxFastEncoderPulsesPerSecond);
+    UpdateMediumEncoderFilterHz(kMaxMediumEncoderPulsesPerSecond);
+  }
+
+  void Start() override {
+    // TODO(Ravago): Figure out why adding multiple DMA readers results in weird
+    // behavior
+    // AddToDMA(&imu_heading_reader_);
+    AddToDMA(&imu_yaw_rate_reader_);
+  }
+
+  // Auto mode switches.
+  void set_autonomous_mode(int i, ::std::unique_ptr<frc::DigitalInput> sensor) {
+    autonomous_modes_.at(i) = ::std::move(sensor);
+  }
+
+  void set_heading_input(::std::unique_ptr<frc::DigitalInput> sensor) {
+    imu_heading_input_ = ::std::move(sensor);
+    imu_heading_reader_.set_input(imu_heading_input_.get());
+  }
+
+  void set_yaw_rate_input(::std::unique_ptr<frc::DigitalInput> sensor) {
+    imu_yaw_rate_input_ = ::std::move(sensor);
+    imu_yaw_rate_reader_.set_input(imu_yaw_rate_input_.get());
+  }
+
+  void RunIteration() override {
+    {
+      auto builder = superstructure_position_sender_.MakeBuilder();
+      superstructure::Position::Builder position_builder =
+          builder.MakeBuilder<superstructure::Position>();
+      builder.CheckOk(builder.Send(position_builder.Finish()));
+    }
+
+    {
+      auto builder = drivetrain_position_sender_.MakeBuilder();
+      frc971::control_loops::drivetrain::Position::Builder drivetrain_builder =
+          builder.MakeBuilder<frc971::control_loops::drivetrain::Position>();
+      drivetrain_builder.add_left_encoder(
+          constants::Values::DrivetrainEncoderToMeters(
+              drivetrain_left_encoder_->GetRaw()));
+      drivetrain_builder.add_left_speed(
+          drivetrain_velocity_translate(drivetrain_left_encoder_->GetPeriod()));
+
+      drivetrain_builder.add_right_encoder(
+          -constants::Values::DrivetrainEncoderToMeters(
+              drivetrain_right_encoder_->GetRaw()));
+      drivetrain_builder.add_right_speed(-drivetrain_velocity_translate(
+          drivetrain_right_encoder_->GetPeriod()));
+
+      builder.CheckOk(builder.Send(drivetrain_builder.Finish()));
+    }
+
+    {
+      auto builder = gyro_sender_.MakeBuilder();
+      ::frc971::sensors::GyroReading::Builder gyro_reading_builder =
+          builder.MakeBuilder<::frc971::sensors::GyroReading>();
+      // +/- 2000 deg / sec
+      constexpr double kMaxVelocity = 4000;  // degrees / second
+      constexpr double kVelocityRadiansPerSecond =
+          kMaxVelocity / 360 * (2.0 * M_PI);
+
+      // Only part of the full range is used to prevent being 100% on or off.
+      constexpr double kScaledRangeLow = 0.1;
+      constexpr double kScaledRangeHigh = 0.9;
+
+      constexpr double kPWMFrequencyHz = 200;
+      double heading_duty_cycle =
+          imu_heading_reader_.last_width() * kPWMFrequencyHz;
+      double velocity_duty_cycle =
+          imu_yaw_rate_reader_.last_width() * kPWMFrequencyHz;
+
+      constexpr double kDutyCycleScale =
+          1 / (kScaledRangeHigh - kScaledRangeLow);
+      // scale from 0.1 - 0.9 to 0 - 1
+      double rescaled_heading_duty_cycle =
+          (heading_duty_cycle - kScaledRangeLow) * kDutyCycleScale;
+      double rescaled_velocity_duty_cycle =
+          (velocity_duty_cycle - kScaledRangeLow) * kDutyCycleScale;
+
+      if (!std::isnan(rescaled_heading_duty_cycle)) {
+        gyro_reading_builder.add_angle(rescaled_heading_duty_cycle *
+                                       (2.0 * M_PI));
+      }
+      if (!std::isnan(rescaled_velocity_duty_cycle)) {
+        gyro_reading_builder.add_velocity((rescaled_velocity_duty_cycle - 0.5) *
+                                          kVelocityRadiansPerSecond);
+      }
+      builder.CheckOk(builder.Send(gyro_reading_builder.Finish()));
+    }
+
+    {
+      auto builder = auto_mode_sender_.MakeBuilder();
+
+      uint32_t mode = 0;
+      for (size_t i = 0; i < autonomous_modes_.size(); ++i) {
+        if (autonomous_modes_[i] && autonomous_modes_[i]->Get()) {
+          mode |= 1 << i;
+        }
+      }
+
+      auto auto_mode_builder =
+          builder.MakeBuilder<frc971::autonomous::AutonomousMode>();
+
+      auto_mode_builder.add_mode(mode);
+
+      builder.CheckOk(builder.Send(auto_mode_builder.Finish()));
+    }
+  }
+
+ private:
+  std::shared_ptr<const Values> values_;
+
+  aos::Sender<frc971::autonomous::AutonomousMode> auto_mode_sender_;
+  aos::Sender<superstructure::Position> superstructure_position_sender_;
+  aos::Sender<frc971::control_loops::drivetrain::Position>
+      drivetrain_position_sender_;
+  ::aos::Sender<::frc971::sensors::GyroReading> gyro_sender_;
+
+  std::array<std::unique_ptr<frc::DigitalInput>, 2> autonomous_modes_;
+
+  std::unique_ptr<frc::DigitalInput> imu_heading_input_, imu_yaw_rate_input_;
+
+  frc971::wpilib::DMAPulseWidthReader imu_heading_reader_, imu_yaw_rate_reader_;
+};
+
+class SuperstructureWriter
+    : public ::frc971::wpilib::LoopOutputHandler<superstructure::Output> {
+ public:
+  SuperstructureWriter(aos::EventLoop *event_loop)
+      : frc971::wpilib::LoopOutputHandler<superstructure::Output>(
+            event_loop, "/superstructure") {}
+
+  void set_intake_roller_falcon(
+      ::std::unique_ptr<::ctre::phoenix::motorcontrol::can::TalonFX> t) {
+    intake_roller_falcon_ = std::move(t);
+    intake_roller_falcon_->ConfigSupplyCurrentLimit(
+        {true, Values::kIntakeRollerSupplyCurrentLimit(),
+         Values::kIntakeRollerSupplyCurrentLimit(), 0});
+    intake_roller_falcon_->ConfigStatorCurrentLimit(
+        {true, Values::kIntakeRollerStatorCurrentLimit(),
+         Values::kIntakeRollerStatorCurrentLimit(), 0});
+  }
+
+  void set_climber_falcon_left(std::unique_ptr<frc::TalonFX> t) {
+    climber_falcon_left_ = std::move(t);
+  }
+
+  void set_climber_falcon_right(std::unique_ptr<frc::TalonFX> t) {
+    climber_falcon_right_ = std::move(t);
+  }
+
+  void set_intake_falcon(std::unique_ptr<frc::TalonFX> t) {
+    intake_falcon_ = std::move(t);
+  }
+
+ private:
+  void Stop() override {
+    AOS_LOG(WARNING, "Superstructure output too old.\n");
+    climber_falcon_left_->SetDisabled();
+    climber_falcon_right_->SetDisabled();
+    intake_falcon_->SetDisabled();
+    intake_roller_falcon_->Set(
+        ctre::phoenix::motorcontrol::ControlMode::Disabled, 0);
+  }
+
+  void Write(const superstructure::Output &output) override {
+    WritePwm(output.climber_voltage_left(), climber_falcon_left_.get());
+    WritePwm(output.climber_voltage_right(), climber_falcon_right_.get());
+    WritePwm(output.intake_voltage(), intake_falcon_.get());
+    WriteCan(output.roller_voltage(), intake_roller_falcon_.get());
+  }
+
+  static void WriteCan(const double voltage,
+                       ::ctre::phoenix::motorcontrol::can::TalonFX *falcon) {
+    falcon->Set(
+        ctre::phoenix::motorcontrol::ControlMode::PercentOutput,
+        std::clamp(voltage, -kMaxBringupPower, kMaxBringupPower) / 12.0);
+  }
+
+  template <typename T>
+  static void WritePwm(const double voltage, T *motor) {
+    motor->SetSpeed(std::clamp(voltage, -kMaxBringupPower, kMaxBringupPower) /
+                    12.0);
+  }
+
+  ::std::shared_ptr<::ctre::phoenix::motorcontrol::can::TalonFX>
+      intake_roller_falcon_;
+  ::std::unique_ptr<::frc::TalonFX> climber_falcon_left_, climber_falcon_right_,
+      intake_falcon_;
+};
+
+class WPILibRobot : public ::frc971::wpilib::WPILibRobotBase {
+ public:
+  ::std::unique_ptr<frc::Encoder> make_encoder(int index) {
+    return make_unique<frc::Encoder>(10 + index * 2, 11 + index * 2, false,
+                                     frc::Encoder::k4X);
+  }
+
+  void Run() override {
+    std::shared_ptr<const Values> values =
+        std::make_shared<const Values>(constants::MakeValues());
+
+    aos::FlatbufferDetachedBuffer<aos::Configuration> config =
+        aos::configuration::ReadConfig("aos_config.json");
+
+    // Thread 1.
+    ::aos::ShmEventLoop joystick_sender_event_loop(&config.message());
+    ::frc971::wpilib::JoystickSender joystick_sender(
+        &joystick_sender_event_loop);
+    AddLoop(&joystick_sender_event_loop);
+
+    // Thread 2.
+    ::aos::ShmEventLoop pdp_fetcher_event_loop(&config.message());
+    ::frc971::wpilib::PDPFetcher pdp_fetcher(&pdp_fetcher_event_loop);
+    AddLoop(&pdp_fetcher_event_loop);
+
+    // Thread 3.
+    ::aos::ShmEventLoop sensor_reader_event_loop(&config.message());
+    SensorReader sensor_reader(&sensor_reader_event_loop, values);
+    sensor_reader.set_pwm_trigger(true);
+    sensor_reader.set_drivetrain_left_encoder(make_encoder(1));
+    sensor_reader.set_drivetrain_right_encoder(make_encoder(0));
+
+    sensor_reader.set_heading_input(make_unique<frc::DigitalInput>(9));
+    sensor_reader.set_yaw_rate_input(make_unique<frc::DigitalInput>(8));
+
+    AddLoop(&sensor_reader_event_loop);
+
+    // Thread 4.
+    ::aos::ShmEventLoop output_event_loop(&config.message());
+    ::frc971::wpilib::DrivetrainWriter drivetrain_writer(&output_event_loop);
+    drivetrain_writer.set_left_controller0(
+        ::std::unique_ptr<::frc::VictorSP>(new ::frc::VictorSP(0)), false);
+    drivetrain_writer.set_right_controller0(
+        ::std::unique_ptr<::frc::VictorSP>(new ::frc::VictorSP(1)), true);
+
+    SuperstructureWriter superstructure_writer(&output_event_loop);
+    superstructure_writer.set_climber_falcon_left(make_unique<frc::TalonFX>(2));
+    superstructure_writer.set_climber_falcon_right(
+        make_unique<frc::TalonFX>(3));
+    superstructure_writer.set_intake_falcon(make_unique<frc::TalonFX>(4));
+    superstructure_writer.set_intake_roller_falcon(
+        make_unique<::ctre::phoenix::motorcontrol::can::TalonFX>(0));
+    AddLoop(&output_event_loop);
+
+    // Thread 5.
+    RunLoops();
+  }
+};
+
+}  // namespace wpilib
+}  // namespace y2022_bot3
+
+AOS_ROBOT_CLASS(::y2022_bot3::wpilib::WPILibRobot);
diff --git a/y2022_bot3/y2022_bot3.json b/y2022_bot3/y2022_bot3.json
new file mode 100644
index 0000000..eebfe62
--- /dev/null
+++ b/y2022_bot3/y2022_bot3.json
@@ -0,0 +1,18 @@
+{
+  "channel_storage_duration": 2000000000,
+  "maps": [
+    {
+      "match": {
+        "name": "/aos",
+        "type": "aos.RobotState"
+      },
+      "rename": {
+        "name": "/roborio/aos"
+      }
+    }
+  ],
+  "imports": [
+    "y2022_bot3_roborio.json",
+    "y2022_bot3_imu.json"
+  ]
+}
diff --git a/y2022_bot3/y2022_bot3_imu.json b/y2022_bot3/y2022_bot3_imu.json
new file mode 100644
index 0000000..5673195
--- /dev/null
+++ b/y2022_bot3/y2022_bot3_imu.json
@@ -0,0 +1,235 @@
+{
+  "channels": [
+    {
+      "name": "/imu/aos",
+      "type": "aos.timing.Report",
+      "source_node": "imu",
+      "frequency": 50,
+      "num_senders": 20,
+      "max_size": 4096
+    },
+    {
+      "name": "/imu/aos",
+      "type": "aos.logging.LogMessageFbs",
+      "source_node": "imu",
+      "frequency": 200,
+      "num_senders": 20
+    },
+    {
+      "name": "/imu/aos",
+      "type": "aos.starter.Status",
+      "source_node": "imu",
+      "logger": "LOCAL_AND_REMOTE_LOGGER",
+      "frequency": 50,
+      "num_senders": 20,
+      "logger_nodes": [
+        "roborio"
+      ],
+      "destination_nodes": [
+        {
+          "name": "roborio",
+          "priority": 5,
+          "time_to_live": 5000000,
+          "timestamp_logger": "LOCAL_AND_REMOTE_LOGGER",
+          "timestamp_logger_nodes": [
+            "imu"
+          ]
+        }
+      ]
+    },
+    {
+      "name": "/imu/aos/remote_timestamps/roborio/imu/aos/aos-starter-Status",
+      "type": "aos.message_bridge.RemoteMessage",
+      "frequency": 100,
+      "source_node": "imu",
+      "max_size": 208
+    },
+    {
+      "name": "/imu/aos",
+      "type": "aos.starter.StarterRpc",
+      "source_node": "imu",
+      "frequency": 10,
+      "num_senders": 2,
+      "logger": "LOCAL_AND_REMOTE_LOGGER",
+      "logger_nodes": [
+        "roborio"
+      ],
+      "destination_nodes": [
+        {
+          "name": "roborio",
+          "priority": 5,
+          "time_to_live": 5000000,
+          "timestamp_logger": "LOCAL_AND_REMOTE_LOGGER",
+          "timestamp_logger_nodes": [
+            "imu"
+          ]
+        }
+      ]
+    },
+    {
+      "name": "/imu/aos/remote_timestamps/roborio/imu/aos/aos-starter-StarterRpc",
+      "type": "aos.message_bridge.RemoteMessage",
+      "frequency": 20,
+      "source_node": "imu",
+      "max_size": 208
+    },
+    {
+      "name": "/imu/aos",
+      "type": "aos.message_bridge.ServerStatistics",
+      "source_node": "imu",
+      "frequency": 10,
+      "num_senders": 2
+    },
+    {
+      "name": "/imu/aos",
+      "type": "aos.message_bridge.ClientStatistics",
+      "source_node": "imu",
+      "frequency": 20,
+      "num_senders": 2
+    },
+    {
+      "name": "/imu/aos",
+      "type": "aos.logging.DynamicLogCommand",
+      "source_node": "imu",
+      "frequency": 10,
+      "num_senders": 2
+    },
+    {
+      "name": "/imu/aos",
+      "type": "aos.message_bridge.Timestamp",
+      "source_node": "imu",
+      "frequency": 15,
+      "num_senders": 2,
+      "logger": "LOCAL_AND_REMOTE_LOGGER",
+      "logger_nodes": [
+        "roborio"
+      ],
+      "max_size": 400,
+      "destination_nodes": [
+        {
+          "name": "roborio",
+          "priority": 1,
+          "timestamp_logger": "LOCAL_AND_REMOTE_LOGGER",
+          "timestamp_logger_nodes": [
+            "imu"
+          ],
+          "time_to_live": 5000000
+        }
+      ]
+    },
+    {
+      "name": "/imu/aos/remote_timestamps/roborio/imu/aos/aos-message_bridge-Timestamp",
+      "type": "aos.message_bridge.RemoteMessage",
+      "frequency": 20,
+      "source_node": "imu",
+      "max_size": 208
+    },
+    {
+      "name": "/imu/aos/remote_timestamps/logger/imu/aos/aos-message_bridge-Timestamp",
+      "type": "aos.message_bridge.RemoteMessage",
+      "frequency": 20,
+      "source_node": "imu",
+      "max_size": 208
+    },
+    {
+      "name": "/roborio/aos/remote_timestamps/imu/roborio/aos/aos-starter-StarterRpc",
+      "type": "aos.message_bridge.RemoteMessage",
+      "source_node": "roborio",
+      "logger": "NOT_LOGGED",
+      "frequency": 20,
+      "num_senders": 2,
+      "max_size": 200
+    },
+    {
+      "name": "/roborio/aos/remote_timestamps/imu/roborio/aos/aos-starter-Status",
+      "type": "aos.message_bridge.RemoteMessage",
+      "source_node": "roborio",
+      "logger": "NOT_LOGGED",
+      "frequency": 20,
+      "num_senders": 2,
+      "max_size": 200
+    },
+    {
+      "name": "/localizer",
+      "type": "frc971.IMUValuesBatch",
+      "source_node": "imu",
+      "frequency": 2200,
+      "max_size": 1600,
+      "num_senders": 2
+    }
+  ],
+  "applications": [
+    {
+      "name": "message_bridge_client",
+      "executable_name": "message_bridge_client",
+      "nodes": [
+        "imu"
+      ]
+    },
+    {
+      "name": "localizer",
+      "executable_name": "localizer_main",
+      /* TODO(james): Remove this once confident in the accelerometer code. */
+      "args": ["--ignore_accelerometer"],
+      "nodes": [
+        "imu"
+      ]
+    },
+    {
+      "name": "imu",
+      "executable_name": "imu_main",
+      "nodes": [
+        "imu"
+      ]
+    },
+    {
+      "name": "message_bridge_server",
+      "executable_name": "message_bridge_server",
+      "nodes": [
+        "imu"
+      ]
+    },
+    {
+      "name": "localizer_logger",
+      "executable_name": "logger_main",
+      "args": ["--logging_folder", "", "--snappy_compress"],
+      "nodes": [
+        "imu"
+      ]
+    },
+    {
+      "name": "web_proxy",
+      "executable_name": "web_proxy_main",
+      "nodes": [
+        "imu"
+      ]
+    }
+  ],
+  "maps": [
+    {
+      "match": {
+        "name": "/aos*",
+        "source_node": "imu"
+      },
+      "rename": {
+        "name": "/imu/aos"
+      }
+    }
+  ],
+  "nodes": [
+    {
+      "name": "imu",
+      "hostname": "imu",
+      "hostnames": [
+        "pi-971-5",
+        "pi-7971-5",
+        "pi-8971-5",
+        "pi-9971-5"
+      ],
+      "port": 9971
+    },
+    {
+      "name": "roborio"
+    }
+  ]
+}
diff --git a/y2022_bot3/y2022_bot3_roborio.json b/y2022_bot3/y2022_bot3_roborio.json
new file mode 100644
index 0000000..5f0b5ae
--- /dev/null
+++ b/y2022_bot3/y2022_bot3_roborio.json
@@ -0,0 +1,505 @@
+{
+  "channels": [
+    {
+      "name": "/roborio/aos",
+      "type": "aos.JoystickState",
+      "source_node": "roborio",
+      "frequency": 100,
+      "logger": "LOCAL_AND_REMOTE_LOGGER",
+      "logger_nodes" : [
+        "imu"
+      ],
+      "destination_nodes": [
+        {
+          "name": "imu",
+          "priority": 5,
+          "time_to_live": 50000000,
+          "timestamp_logger": "LOCAL_AND_REMOTE_LOGGER",
+          "timestamp_logger_nodes": [
+            "roborio"
+          ]
+        }
+      ]
+    },
+    {
+      "name": "/roborio/aos/remote_timestamps/imu/roborio/aos/aos-JoystickState",
+      "type": "aos.message_bridge.RemoteMessage",
+      "source_node": "roborio",
+      "logger": "NOT_LOGGED",
+      "frequency": 200,
+      "num_senders": 2,
+      "max_size": 200
+    },
+    {
+      "name": "/roborio/aos/remote_timestamps/logger/roborio/aos/aos-JoystickState",
+      "type": "aos.message_bridge.RemoteMessage",
+      "source_node": "roborio",
+      "logger": "NOT_LOGGED",
+      "frequency": 200,
+      "num_senders": 2,
+      "max_size": 200
+    },
+    {
+      "name": "/roborio/aos",
+      "type": "aos.RobotState",
+      "source_node": "roborio",
+      "frequency": 200
+    },
+    {
+      "name": "/roborio/aos",
+      "type": "aos.timing.Report",
+      "source_node": "roborio",
+      "frequency": 50,
+      "num_senders": 20,
+      "max_size": 4096
+    },
+    {
+      "name": "/roborio/aos",
+      "type": "aos.logging.LogMessageFbs",
+      "source_node": "roborio",
+      "frequency": 500,
+      "max_size": 344,
+      "num_senders": 20
+    },
+    {
+      "name": "/roborio/aos",
+      "type": "aos.starter.Status",
+      "source_node": "roborio",
+      "frequency": 50,
+      "num_senders": 20,
+      "max_size": 2000,
+      "logger": "LOCAL_AND_REMOTE_LOGGER",
+      "logger_nodes": [
+        "imu"
+      ],
+      "destination_nodes": [
+        {
+          "name": "imu",
+          "priority": 5,
+          "timestamp_logger": "LOCAL_AND_REMOTE_LOGGER",
+          "timestamp_logger_nodes": [
+            "roborio"
+          ],
+          "time_to_live": 5000000
+        }
+      ] 
+    },
+    {
+      "name": "/roborio/aos/remote_timestamps/logger/roborio/aos/aos-starter-Status",
+      "type": "aos.message_bridge.RemoteMessage",
+      "source_node": "roborio",
+      "logger": "NOT_LOGGED",
+      "frequency": 20,
+      "num_senders": 2,
+      "max_size": 200
+    },
+    {
+      "name": "/roborio/aos",
+      "type": "aos.starter.StarterRpc",
+      "source_node": "roborio",
+      "frequency": 10,
+      "max_size": 400,
+      "num_senders": 2,
+      "logger": "LOCAL_AND_REMOTE_LOGGER",
+      "logger_nodes": [
+        "imu"
+      ],
+      "destination_nodes": [
+        {
+          "name": "imu",
+          "priority": 5,
+          "timestamp_logger": "LOCAL_AND_REMOTE_LOGGER",
+          "timestamp_logger_nodes": [
+            "roborio"
+          ],
+          "time_to_live": 5000000
+        }
+      ]
+    },
+    {
+      "name": "/roborio/aos/remote_timestamps/logger/roborio/aos/aos-starter-StarterRpc",
+      "type": "aos.message_bridge.RemoteMessage",
+      "source_node": "roborio",
+      "logger": "NOT_LOGGED",
+      "frequency": 20,
+      "num_senders": 2,
+      "max_size": 200
+    },
+    {
+      "name": "/roborio/aos",
+      "type": "aos.message_bridge.ServerStatistics",
+      "source_node": "roborio",
+      "frequency": 10,
+      "num_senders": 2
+    },
+    {
+      "name": "/roborio/aos",
+      "type": "aos.message_bridge.ClientStatistics",
+      "source_node": "roborio",
+      "frequency": 20,
+      "max_size": 2000,
+      "num_senders": 2
+    },
+    {
+      "name": "/roborio/aos",
+      "type": "aos.logging.DynamicLogCommand",
+      "source_node": "roborio",
+      "frequency": 10,
+      "num_senders": 2
+    },
+    {
+      "name": "/roborio/aos/remote_timestamps/logger/roborio/aos/aos-message_bridge-Timestamp",
+      "type": "aos.message_bridge.RemoteMessage",
+      "frequency": 200,
+      "source_node": "roborio"
+    },
+    {
+      "name": "/roborio/aos/remote_timestamps/imu/roborio/aos/aos-message_bridge-Timestamp",
+      "type": "aos.message_bridge.RemoteMessage",
+      "frequency": 20,
+      "source_node": "roborio",
+      "max_size": 208
+    },
+    {
+      "name": "/roborio/aos",
+      "type": "aos.message_bridge.Timestamp",
+      "source_node": "roborio",
+      "frequency": 15,
+      "num_senders": 2,
+      "max_size": 512,
+      "logger": "LOCAL_AND_REMOTE_LOGGER",
+      "logger_nodes": [
+        "imu"
+      ],
+      "destination_nodes": [
+        {
+          "name": "imu",
+          "priority": 1,
+          "timestamp_logger": "LOCAL_AND_REMOTE_LOGGER",
+          "timestamp_logger_nodes": [
+            "roborio"
+          ],
+          "time_to_live": 5000000
+        }
+      ]
+    },
+    {
+      "name": "/superstructure",
+      "type": "y2022_bot3.control_loops.superstructure.Goal",
+      "source_node": "roborio",
+      "frequency": 200,
+      "max_size": 512
+    },
+    {
+      "name": "/superstructure",
+      "type": "y2022_bot3.control_loops.superstructure.Status",
+      "source_node": "roborio",
+      "frequency": 400,
+      "num_senders": 2,
+      "logger": "LOCAL_AND_REMOTE_LOGGER",
+      "logger_nodes": [
+        "imu"
+      ],
+      "destination_nodes": [
+        {
+          "name": "imu",
+          "priority": 5,
+          "time_to_live": 50000000,
+          "timestamp_logger": "LOCAL_AND_REMOTE_LOGGER",
+          "timestamp_logger_nodes": [
+            "roborio"
+          ]
+        }
+      ]
+    },
+    {
+      "name": "/roborio/aos/remote_timestamps/imu/superstructure/y2022_bot3-control_loops-superstructure-Status",
+      "type": "aos.message_bridge.RemoteMessage",
+      "source_node": "roborio",
+      "logger": "NOT_LOGGED",
+      "frequency": 400,
+      "num_senders": 2,
+      "max_size": 200
+    },
+    {
+      "name": "/roborio/aos/remote_timestamps/logger/superstructure/y2022_bot3-control_loops-superstructure-Status",
+      "type": "aos.message_bridge.RemoteMessage",
+      "source_node": "roborio",
+      "logger": "NOT_LOGGED",
+      "frequency": 400,
+      "num_senders": 2,
+      "max_size": 200
+    },
+    {
+      "name": "/superstructure",
+      "type": "y2022_bot3.control_loops.superstructure.Output",
+      "source_node": "roborio",
+      "frequency": 200,
+      "num_senders": 2,
+      "max_size": 224
+    },
+    {
+      "name": "/superstructure",
+      "type": "y2022_bot3.control_loops.superstructure.Position",
+      "source_node": "roborio",
+      "frequency": 200,
+      "num_senders": 2,
+      "max_size": 448
+    },
+    {
+      "name": "/drivetrain",
+      "type": "frc971.sensors.GyroReading",
+      "source_node": "roborio",
+      "frequency": 200,
+      "num_senders": 2
+    },
+    {
+      "name": "/drivetrain",
+      "type": "frc971.sensors.Uid",
+      "source_node": "roborio",
+      "frequency": 200,
+      "num_senders": 2
+    },
+    {
+      "name": "/drivetrain",
+      "type": "frc971.control_loops.drivetrain.fb.Trajectory",
+      "source_node": "roborio",
+      "max_size": 600000,
+      "frequency": 10,
+      "logger": "NOT_LOGGED",
+      "num_senders": 2,
+      "read_method": "PIN",
+      "num_readers": 10
+    },
+    {
+      "name": "/drivetrain",
+      "type": "frc971.control_loops.drivetrain.SplineGoal",
+      "source_node": "roborio",
+      "frequency": 10
+    },
+    {
+      "name": "/drivetrain",
+      "type": "frc971.control_loops.drivetrain.Goal",
+      "source_node": "roborio",
+      "max_size": 224,
+      "frequency": 200
+    },
+    {
+      "name": "/drivetrain",
+      "type": "frc971.control_loops.drivetrain.Position",
+      "source_node": "roborio",
+      "frequency": 400,
+      "max_size": 112,
+      "num_senders": 2
+    },
+    {
+      "name": "/drivetrain",
+      "type": "frc971.control_loops.drivetrain.Output",
+      "source_node": "roborio",
+      "frequency": 400,
+      "max_size": 80,
+      "num_senders": 2,
+      "logger": "LOCAL_AND_REMOTE_LOGGER",
+      "logger_nodes": [
+        "imu"
+      ],
+      "destination_nodes": [
+        {
+          "name": "imu",
+          "priority": 5,
+          "timestamp_logger": "LOCAL_AND_REMOTE_LOGGER",
+          "timestamp_logger_nodes": [
+            "imu"
+          ],
+          "time_to_live": 5000000
+        }
+      ]
+    },
+    {
+      "name": "/roborio/aos/remote_timestamps/imu/drivetrain/frc971-control_loops-drivetrain-Output",
+      "type": "aos.message_bridge.RemoteMessage",
+      "source_node": "roborio",
+      "logger": "NOT_LOGGED",
+      "frequency": 400,
+      "num_senders": 2,
+      "max_size": 200
+    },
+    {
+      "name": "/drivetrain",
+      "type": "frc971.control_loops.drivetrain.Status",
+      "source_node": "roborio",
+      "frequency": 400,
+      "max_size": 1616,
+      "num_senders": 2
+    },
+    {
+      "name": "/drivetrain",
+      "type": "frc971.control_loops.drivetrain.LocalizerControl",
+      "source_node": "roborio",
+      "frequency": 200,
+      "max_size": 96,
+      "logger": "LOCAL_AND_REMOTE_LOGGER",
+      "logger_nodes": [
+        "imu"
+      ],
+      "destination_nodes": [
+        {
+          "name": "imu",
+          "priority": 5,
+          "timestamp_logger": "LOCAL_AND_REMOTE_LOGGER",
+          "timestamp_logger_nodes": [
+            "imu"
+          ],
+          "time_to_live": 0
+        }
+      ]
+    },
+    {
+      "name": "/roborio/aos/remote_timestamps/imu/drivetrain/frc971-control_loops-drivetrain-LocalizerControl",
+      "type": "aos.message_bridge.RemoteMessage",
+      "source_node": "roborio",
+      "logger": "NOT_LOGGED",
+      "frequency": 400,
+      "num_senders": 2,
+      "max_size": 200
+    },
+    {
+      "name": "/drivetrain",
+      "type": "y2019.control_loops.drivetrain.TargetSelectorHint",
+      "source_node": "roborio"
+    },
+    {
+      "name": "/autonomous",
+      "type": "aos.common.actions.Status",
+      "source_node": "roborio"
+    },
+    {
+      "name": "/autonomous",
+      "type": "frc971.autonomous.Goal",
+      "source_node": "roborio"
+    },
+    {
+      "name": "/autonomous",
+      "type": "frc971.autonomous.AutonomousMode",
+      "source_node": "roborio",
+      "frequency": 200
+    },
+    {
+      "name": "/roborio/aos",
+      "type": "frc971.PDPValues",
+      "source_node": "roborio",
+      "frequency": 55,
+      "max_size": 368
+    },
+    {
+      "name": "/roborio/aos",
+      "type": "frc971.wpilib.PneumaticsToLog",
+      "source_node": "roborio",
+      "frequency": 50
+    }
+  ],
+  "applications": [
+    {
+      "name": "drivetrain",
+      "executable_name": "drivetrain",
+      "nodes": [
+        "roborio"
+      ]
+    },
+    {
+      "name": "trajectory_generator",
+      "executable_name": "trajectory_generator",
+      "nodes": [
+        "roborio"
+      ]
+    },
+    {
+      "name": "superstructure",
+      "executable_name": "superstructure",
+      "nodes": [
+        "roborio"
+      ]
+    },
+    {
+      "name": "joystick_reader",
+      "executable_name": "joystick_reader",
+      "nodes": [
+        "roborio"
+      ]
+    },
+    {
+      "name": "wpilib_interface",
+      "executable_name": "wpilib_interface",
+      "nodes": [
+        "roborio"
+      ]
+    },
+    {
+      "name": "autonomous_action",
+      "executable_name": "autonomous_action",
+      "nodes": [
+        "roborio"
+      ]
+    },
+    {
+      "name": "web_proxy",
+      "executable_name": "web_proxy_main",
+      "args": ["--min_ice_port=5800", "--max_ice_port=5810"],
+      "nodes": [
+        "roborio"
+      ]
+    },
+    {
+      "name": "roborio_message_bridge_client",
+      "executable_name": "message_bridge_client.sh",
+      "args": ["--rt_priority=16"],
+      "nodes": [
+        "roborio"
+      ]
+    },
+    {
+      "name": "message_bridge_server",
+      "executable_name": "message_bridge_server",
+      "args": ["--rt_priority=16"],
+      "nodes": [
+        "roborio"
+      ]
+    },
+    {
+      "name": "logger",
+      "executable_name": "logger_main",
+      "args": ["--snappy_compress"],
+      "nodes": [
+        "roborio"
+      ]
+    }
+  ],
+  "maps": [
+    {
+      "match": {
+        "name": "/aos*",
+        "source_node": "roborio"
+      },
+      "rename": {
+        "name": "/roborio/aos"
+      }
+    }
+  ],
+  "nodes": [
+    {
+      "name": "roborio",
+      "hostname": "roborio",
+      "hostnames": [
+        "roboRIO-971-FRC",
+        "roboRIO-6971-FRC",
+        "roboRIO-7971-FRC",
+        "roboRIO-8971-FRC",
+        "roboRIO-9971-FRC"
+      ],
+      "port": 9971
+    },
+    {
+      "name": "imu"
+    }
+  ]
+}